Как найти рандом в массиве

На занятии объясняется, как работать с одномерными массивами в Паскале, как использовать генератор случайных чисел — функцию random в Паскале. Рассматривается пример того, как вывести числа Фибоначчи

Материалы сайта labs-org.ru направлены на практическое освоение языка программирования Pascal. Краткие теоретические сведения не претендуют на полное освещение материала по теме; необходимую информацию можно найти в сети Интернет в большом количестве. В наши же задачи входит предоставление возможности получения практических навыков программирования на Паскале. Решенные наглядные примеры и задания изложены по мере увеличения их сложности, что позволит с легкостью изучить материал с нуля.

Содержание:

  • Одномерные массивы в Паскале
    • Объявление массива
    • Инициализация массива
    • Вывод элементов массива
    • Динамические массивы (pascalAbc.Net)
    • Функция Random в Pascal
    • Числа Фибоначчи в Паскале
    • Максимальный (минимальный) элемент массива
    • Поиск в массиве
    • Циклический сдвиг
    • Перестановка элементов в массиве
    • Выбор элементов и сохранение в другой массив
    • Сортировка элементов массива

Одномерные массивы в Паскале

Объявление массива

Массивы в Паскале используются двух типов: одномерные и двумерные.
Определение одномерного массива в Паскале звучит так: одномерный массив — это определенное количество элементов, относящихся к одному и тому же типу данных, которые имеют одно имя, и каждый элемент имеет свой индекс — порядковый номер.
Описание массива в Паскале (объявление) и обращение к его элементам происходит следующим образом:

Описание массива в Паскале

Объявление массива

var dlina: array [1..3] of integer;
begin
dlina[1]:=500; 
dlina[2]:=400; 
dlina[3]:=150;
...
  • dlina — идентификатор (имя) массива;
  • для объявления используется служебное слово Array (в переводе с англ. «массив» или «набор»);
  • [1..3] — в квадратных скобках ставится номер (индекс) первого элемента, затем две точки и индекс последнего элемента массива, т.е. по сути, указывается количество элементов; количество элементов массива называется размерностью массива
  • of integer (с англ. «из целых чисел») — указывает, к какому типу относится массив, of здесь — служебное слово.
  • Объявить размер можно через константу:

    размер массива через константу

    Инициализация массива

    Кроме того, массив может быть сам константным, т.е. все его элементы в программе заранее определены. Описание такого массива выглядит следующим образом:

    const a:array[1..4] of integer = (1, 3, 2, 5);

    Заполнение последовательными числами:
    заполнение массива

    Результат:
    A[1] = 8, A[2] = 9, A[3] = 10, ..., A[N] = A[N-1] + 1
    

    Ввод с клавиатуры:

    Пример: Рассмотрим, как происходит ввод массива в Паскале:

    writeln ('введите кол-во элементов: ');
    readln(n); {если кол-во заранее не известно, - запрашиваем его}
    for i := 1 to n do begin
       write('a[', i, ']=');
       read(a[i]);
       ...
    end;
    ...

    ввод массива с клавиатуры
    ✍ Пример результата:

    введите кол-во элементов: 
    3
    a[1]=5
    a[2]=7
    a[3]=4
    

    Вывод элементов массива

    Пример: Рассмотрим, как вывести массив в Паскале:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    var
      a: array[1..5] of integer; {массив из пяти элементов}
      i: integer;
    begin
    a[1]:=2;
    a[2]:=4;
    a[3]:=8;
    a[4]:=6;
    a[5]:=3;
    writeln('Массив A:');
    for i := 1 to 5 do
        write(a[i]:2); {вывод элементов массива}
    end.

    ✍ Пример результата:

    Для работы с массивами чаще всего используется в Паскале цикл for с параметром, так как обычно известно, сколько элементов в массиве, и можно использовать счетчик цикла в качестве индексов элементов.

    Задача Array 0. Необходимо задать вещественный массив размерностью 6 (т.е. из шести элементов); заполнить массив вводимыми значениями и вывести элементы на экран. Использовать два цикла: первый — для ввода элементов, второй — для вывода.

    Пример результата:

    введите элемент массива: 3.0
    введите элемент массива: 0.8
    введите элемент массива: 0.56
    введите элемент массива: 4.3
    введите элемент массива: 23.8
    введите элемент массива: 0.7
    Массив =  3, 0.8, 0.56, 4.3, 23.8, 0.7

    [Название файла: taskArray0.pas]

    В данном примере работы с одномерным массивом есть явное неудобство: присваивание значений элементам.

    Обработка массивов в Паскале, так же как и заполнение массива, происходит обычно с использованием цикла for.

    Динамические массивы (pascalAbc.Net)

    Основным недостатком статических массивов является то, что их размер нельзя задать с учетом текущих обрабатываемых данных. Приходится описывать массивы с максимально возможным значением количества элементов, выделяя для них столько памяти, сколько может потребоваться для хранения самой большого из возможных наборов исходных данных.

  • Основной особенностью динамических массивов является возможность выделения для них памяти на любом этапе выполнения программы.
  • Имеется возможность корректировки размера динамического массива как в сторону его уменьшения, так и в сторону увеличения.
  • Объявление:

    var a: array of integer;
    var n:=readInteger;
    a:=new integer[n]; // инициализация, выделение памяти для элементов массива

    или:

    var a: array of integer;
    var n:=readInteger;
    SetLength(a,n); // устанавливаем размер

    Аналогичным образом массивы могут описываться в качестве параметров подпрограмм, например:

    procedure p(a: array of integer);

    Созданные элементы сразу получают начальное значение, равное нулевому значению соответствующего типа: для чисел это целый или вещественный нуль, для символов — символ с кодом 0, для строк и других ссылочных типов данных — нулевая ссылка nil

    Объявление и инициализация массива:

    Пример:

    begin
      var a: array of integer;
      a := new integer[3];
      a[0] := 5;
      a[1] := 2;
      a[2] := 3;
    end.

    или в одну строку:

    begin
      var a: array of integer;
      a := new integer[3](5,2,3);
      print(a)
    end.

    или короткая запись:

    var a:=Arr(1,2,3);// по правой части - integer

    Элементы динамического массива всегда индексируются от 0.

    Ввод элементов:

    Пример:

    var a:=ReadArrInteger(5); // ввод пяти целых
    var a:=ReadArrReal(5); // ввод пяти вещественных

    Функции генерации массивов:

    1. ArrFill :

    var a := ArrFill(10, 1); // массив из 10 целых чисел, равных 1

    2. ArrGen :

    var a := ArrGen(ReadInteger, 1, e -> e + 2); // массив, состоящий из n первых положительных нечетных чисел
    a.Print;

    Проход по элементам массива:

    Пример:

    for var i:=0 to a.Length-1 do
      a[i] += 1;

    или:

    for var i := 0 to a.High do
      a[i] += 1;

    Проход по элементам (только для чтения):
    Пример:

    foreach var x in a do
      Print(x)
  • Размер динамического массива (т. е. количество его элементов) можно определить с помощью его свойства Length
  • Для динамического массива определены еще два свойства: Low и High, определяющие соответственно нижнюю и верхнюю границу диапазона изменения индекса. Свойство a.Low всегда возвращает 0, а свойство a.High определяется как a.High = a.Length – 1
  • Простой вывод элементов:

    Writeln(a); // пример вывода: [1,5,3,13,20]

    или метод массива Print:

    a.Print; // пример вывода: 1 5 3 13 20
    a.PrintLines; // каждый элемент с новой строки

    Функция Random в Pascal

    Для того чтобы постоянно не запрашивать значения элементов массива используется генератор случайных чисел в Паскаль, который реализуется функцией Random. На самом деле генерируются псевдослучайные числа, но суть не в этом.

    Для генерации чисел от 0 до n (не включая само значение n, целые числа в интервале [0,N)) используется запись random (n).
    Перед использованием функции необходимо инициализировать датчик случайных чисел с помощью процедуры randomize.

    Диапазон в Паскале тех самых случайных чисел от a до b задается формулой:

    Пример: Заполнение массива случайными числами в Pascal:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var f: array[1..10] of integer;
        i:integer;
    begin
    randomize;
    for i:=1 to 10 do
      begin
       f[i]:=random(10); { интервал [0,9] }   
       write(f[i],' ');
      end;
    end.

    ✍ Пример результата: 

    Для вещественных чисел в интервале [0,1):

    var x: real;
    ...
    x := random(0.0,1.0);;         { интервал [0,1), т.е. единица не включена }

    PascalABC.NET:

  • Сгенерированный случайным образом кортеж из двух (Random2), либо из трех (Random3) элементов:
  • var (a, b, c) := Random3(10.0, 20.0); // диапазон [10, 20)
    write(a:0:2,' ',b:0:2,' ', c:0:2) // 14.73 18.63 19.72
  • Массив из 10 сгенерированных случайным образом целых чисел в диапазоне [0;99]:
  • Пример:

    var a:=arrRandomInteger(10);

    или с дополнительными параметрами (диапазон [5;15]):

    var a:=arrRandomInteger(10,5,15);

    Задача Array 1. Необходимо задать массив размерностью 5, заполнить массив случайными числами в интервале [-1,1] и вывести элементы на экран: определить три позиции для вывода каждого элемента, с двумя знаками после запятой.

    Пример результата:

    Массив =  0.22 0.00 -0.69 -0.35 -0.11 

    [Название файла: taskArray1.pas]

    Числа Фибоначчи в Паскале

    Наиболее распространенным примером работы с массивом является вывод ряда чисел Фибоначчи в Паскаль. Рассмотрим его.

    Пример: Ряд чисел Фибоначчи: 1 1 2 3 5 8 13…

    f[0]:=1;   
    f[1]:=1; 
    f[2]:=2;

    или

    f[2]:=f[0]+f[1];
    f[3]:=f[1]+f[2];

    или

    Получили формулу элементов ряда.

    Пример: Вычислить и распечатать первые 20 чисел Фибоначчи.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var i:integer;
    f:array[0..19]of integer;
    begin
    f[0]:=1;
    f[1]:=1;
    for i:=2 to 19 do
    begin
      f[i]:=f[i-1]+f[i-2];
      writeln(f[i])
    end;
    end.

    На данном примере, становится понятен принцип работы с числовыми рядами. Обычно, для вывода числового ряда находится формула определения каждого элемента данного ряда. Так, в случае с числами Фибоначчи, эта формула-правило выглядит как f[i]:=f[i-1]+f[i-2]. Поэтому ее необходимо использовать в цикле for при формировании элементов массива.

    Задача Array 2. Дан ряд из 10 произвольных чисел: a[1], a[2], ... , a[10] (использовать функцию random()). Подсчитать и напечатать суммы троек стоящих рядом чисел: a[1]+a[2]+a[3], a[2]+a[3]+a[4], a[3]+a[4]+a[5], …… , a[8]+a[9]+a[10]

    Пример результата:

    Массив =  2 0 4 29 3 11 26 11 9 4 
    mas[1] + mas[2] + mas[3] = 6
    mas[2] + mas[3] + mas[4] = 33
    mas[3] + mas[4] + mas[5] = 36
    mas[4] + mas[5] + mas[6] = 43
    mas[5] + mas[6] + mas[7] = 40
    mas[6] + mas[7] + mas[8] = 48
    mas[7] + mas[8] + mas[9] = 46
    mas[8] + mas[9] + mas[10] = 24

    [Название файла: taskArray2.pas]

    Задача Array 3. Написать программу решения задачи о печати ряда чисел 2 4 8 16 32 ... 512; для заполнения массива использовать цикл Repeat
    [Название файла: taskArray3.pas]

    Максимальный (минимальный) элемент массива

    Псевдокод:
    Максимальный (минимальный) элемент массива

    Поиск максимального элемента по его индексу:
    максимальный элемент по номеру


    PascalABC.NET:

    Минимальный элемент и его индекс:

    Решение 1:

      // …
      var (min, minind) := (a[0], 0);  
      for var i:=1 to a.Length-1 do
        if a[i]<min then
          (min, minind) := (a[i], i);  Result := (min, minind);

    Решение 2:

      // …
      var (min, minind) := (real.MaxValue, 0);  
      for var i:=0 to a.Length-1 do
        if a[i]<min then
          (min, minind) := (a[i], i);  Result := (min, minind);

    Решение 3:

    begin
      var a := new integer[5];
      a := arrRandomInteger(5); // [86,37,41,45,76] 
      print(a.Min,a.IndexMin); // 37  1
    end.

    Задача Array_min: Найдите минимальный элемент массива. Выведите элемент и его индекс.

    Пример результата:

    9 5 4 22 23 7 3 16 16 8 
    Минимальный элемент массива A[7]=3
    

    [Название файла: taskArray_min.pas]

    Задача Array 4. Дан массив из 10 целочисленных элементов. Найти количество отрицательных и вывести количество на экран.

    Пример результата:

    3 4 6 -1 6 -2 1 5 0 1 
    Количество отрицательных элементов: 2
    

    [Название файла: taskArray4.pas]

    Задача Array 5. Найти минимальное и максимальное из n введенных чисел (массива). Определить расстояние между этими элементами.

    3  2  6  1  3  4  7  2  >>>  min=1, max=7, distance=3
    

    [Название файла: taskArray5.pas]

    Задача Array 6. Дан целочисленный массив размера N. Вывести все содержащиеся в данном массиве четные числа в порядке убывания их индексов, а также их количество K.

    N=4
    mas: 8 9 2 5
    >>> 2 8 количество= 2
    

    [Название файла: taskArray6.pas]

    Задача Array 7. Ввести с клавиатуры массив из 5 элементов, найти в нем два максимальных элемента и их номера.

    Пример:

    Исходный массив:
    4   -5   10  -10  5
    максимальные A[3]=10, A[5]=5
    

    [Название файла: taskArray7.pas]

    Поиск в массиве

    Рассмотрим сложный пример работы с одномерными массивами:

    Пример: Дан массив из 10 чисел. Определить, есть ли в массиве число, введенное пользователем. Если есть – выводить «найдено», если нет – «не найдено».
    Сложность задания заключается в том, что выводить слова «найдено» или «не найдено» необходимо один раз.

    Для решения поставленной задачи понадобится оператор break — выход из цикла.
    Решение Вариант 1. Цикл for:


    PascalABC.NET:

    Cтандартные методы a.IndexOf(x) и a.LastIndexOf(x):

    begin
      var a := new integer[10];
      a := arrRandomInteger(5,0,5); //[1,3,5,4,5] 
      print(a.IndexOf(3)) // 1
    end.

    или метод a.Contains(x) наравне с x in a:

    begin
      var a := new integer[10];
      a := arrRandomInteger(5,0,5); //[1,3,5,4,5] 
      print(a.Contains(3)); // True
      print(3 in a)// True
    end.

    Рассмотрим эффективное решение:

    Задача: найти в массиве элемент, равный X, или установить, что его нет.

    Алгоритм:

    • начать с 1-го элемента (i:=1);
    • если очередной элемент (A[i]) равен X, то закончить поиск иначе перейти к следующему элементу.

    решение на Паскале Вариант 2. Цикл While:

    Поиск элемента в массиве

    Поиск элемента в массиве

    Предлагаем посмотреть подробный видео разбор поиска элемента в массиве (эффективный алгоритм):

    Задача Array 8. Заполнить массив из 10 элементов случайными числами в интервале [0..4] и вывести номера всех элементов, равных X.

    Пример:

    	 Исходный массив:
    	 4  0  1  2  0  1  3  4  1  0
    	 Что ищем? 0
    	 A[2], A[5], A[10]
    

    [Название файла: taskArray8.pas]

    Циклический сдвиг

    Пример: сдвинуть элементы массива влево на 1 позицию, первый элемент становится на место последнего.
    циклический сдвиг

    Решение:

    Алгоритм:
    A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N];

    Программа:
    сдвиг элементов массива


    PascalABC.NET:

    Циклический сдвиг влево:

      // …
      var v := a[0];
      for var i:=0 to a.Length-2 do
        a[i] := a[i+1];
      a[a.Length-1] := v;

    Циклический сдвиг вправо:

      // …
      var v := a[a.Length-1];
      for var i:=a.Length-1 downto 1 do
        a[i] := a[i-1];
      a[0] := v;

    Задача Array 9. Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить циклический сдвиг влево без первого элемента.
    Пример:

    Исходный массив:
      4  -5   3  10  -4  -6   8 -10  1  0
    Результат:
      4   3  10  -4  -6   8 -10   1  0 -5
    

    [Название файла: taskArray9.pas]

    Перестановка элементов в массиве

    Рассмотрим, как происходит перестановка или реверс массива.

    Пример: переставить элементы массива в обратном порядке
    реверс массива

    Решение:

    Алгоритм:
    алгоритм перестановки элементов массива

    Псевдокод:
    2

    Программа:
    перестановка элементов массива


    PascalABC.NET:

    Перестановка (ревёрс):

    Решение 1:

    begin
    var a: array of integer := (1,3,5,7); 
    var n := a.Length;
    for var i:=0 to n div 2 - 1 do
        Swap(a[i],a[n-i-1]);
    End.

    Решение 2 (стандартная процедура Reverse()):

    begin
    var a:=new integer[10];
    a:=arrRandomInteger(10);
    print(a);// [41,81,84,63,12,26,88,25,36,72] 
    Reverse(a);
    print(a) //[72,36,25,88,26,12,63,84,81,41] 
    end.

    Задача Array 10. Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и сделать реверс всех элементов, кроме последнего.
    Пример:

     Исходный массив:
    -5  3   10  -4  -6   8 -10  1   0  4
     Результат:
    0  1  -10   8  -6  -4  10  3  -5  4
    

    [Название файла: taskArray10.pas]

    Выбор элементов и сохранение в другой массив

    Пример: найти в массиве элементы, удовлетворяющие некоторому условию (например, отрицательные), и скопировать их в другой массив
    выбор элементов массива

    Решение:

    Решение: подсчитывать количество найденных элементов с помощью счетчика count, очередной элемент устанавливать на место B[count]. Переменой count необходимо присвоить 1.

    сохранение элементов массива в другой
    Вывод массива B:

    writeln('Выбранные элементы');
    for i:=1 to count-1 do
       write(B[i], ' ')

    PascalABC.NET:

    Процедура SetLength():

    // ...
    for var i := 0 to a.length - 1 do 
        if a[i] < 0 then
        begin
          b[j] := a[i];
          j += 1;
        end;
      SetLength(b, j);

    Задача Array 11. Заполнить массив случайными числами в интервале [20,100] и записать в другой массив все числа, которые оканчиваются на 0.
    Пример:

    	 Исходный массив:
    	 40   57   30  71  84
    	 Заканчиваются на 0:
    	 40 30
    

    [Название файла: taskArray11.pas]

    Сортировка элементов массива

    Сортировка методом «Пузырька»

    • В таком типе сортировок массив представляется в виде воды, маленькие элементы — пузырьки в воде, которые всплывают наверх (самые легкие).
    • При первой итерации цикла элементы массива попарно сравниваются между собой:предпоследний с последним, пред предпоследний с предпоследним и т.д. Если предшествующий элемент оказывается больше последующего, то производится их обмен.
    • При второй итерации цикла нет надобности сравнивать последний элемент с предпоследним. Последний элемент уже стоит на своем месте, он самый большой. Значит, число сравнений будет на одно меньше. То же самое касается каждой последующей итерации.

    сортировка методом пузырька

    Pascal PascalABC.NET
    1
    2
    3
    4
    5
    6
    7
    8
    
    for i:=1 to N-1 do begin
       for j:=N-1 downto i do
         if A[j] > A[j+1] then begin
           с := A[j];
           A[j] := A[j+1];
           A[j+1] := с;
         end;
     end;
    1
    2
    3
    4
    
    for var i := 0 to arr.High - 1 do
        for var j := arr.High - 1 downto i do
          if arr[j] > arr[j + 1] then 
            Swap(arr[j], arr[j + 1]);

    Задача Array 12. Заполнить массив из 10 элементов случайными числами в интервале [0..100] и отсортировать первую половину массива по возрастанию, а вторую – по убыванию (методом ‘Пузырька’).

    Пример:
    Исходный массив:
    14  25  13  30  76  58  32  11  41  97
    Результат:
    13  14  25  30  76  97  58  41  32  11

    [Название файла: taskArray12.pas]

    Сортировка методом выбора

    • в массиве ищется минимальный элемент и ставится на первое место (меняется местами с A[1]);
    • среди оставшихся элементов также производится поиск минимального, который ставится на второе место (меняется местами с A[2]) и т.д.

    сортировка методом вставки

    Pascal PascalABC.NET
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    for i := 1 to N-1 do begin
      min:= i ;
      for j:= i+1 to N do
        if A[j] < A[min] then min:=j; 
      if min <> i then begin
        c:=A[i]; 
        A[i]:=A[min]; 
        A[min]:=c;
      end;
    end;
    1
    2
    3
    4
    5
    6
    7
    8
    
    for var i := 0 to a.High-1 do
      begin
        var (min,imin) := (a[i],i);
        for var j := i + 1 to a.High do
          if a[j] < min then
            (min,imin) := (a[j],j);
        Swap(a[imin],a[i]);
      end;

    Задача Array 13: Заполнить массив из 10 элементов случайными числами в интервале [0..50] и отсортировать его по возрастанию суммы цифр

    Пример:
    Исходный массив:
    14  25  13  12  76  58  21  87  10  98
    Результат:
    10  21  12  13  14  25  76  58  87  98  
    

    [Название файла: taskArray13.pas]


    PascalABC.NET:

    Стандартная процедура sort():

    Sort(a);
    SortByDescending(a);

    Быстрая сортировка или quick sort

    Алгоритм:

    1. Выбирается и запоминается средний элемент массива (присвоим X):
    2. быстрая сортировка

    3. Инициализируем две переменные (будущие индексы массива): L:=1, R:=N (N — количество элементов).
    4. Увеличиваем L и ищем первый элемент A[L], который больше либо равен X (в итоге он должен находиться справа).
    5. Уменьшаем R и ищем элемент A[R], который меньше либо равен X (в итоге он должен находиться слева).
    6. Смотрим, если L<=R, то меняем местами A[L] и A[R], возвращаемся к пункту 3.

    быстрая сортировка паскаль

    Выполнение на Паскале:
    1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    procedure QSort ( first, last: integer);
    var L, R, c, X: integer;
    begin
      if first < last then begin
        X:= A[(first + last) div 2];
        L:= first; R:= last;
     while L <= R do begin
       while A[L] < X do L:= L + 1;
       while A[R] > X do R:= R - 1;
       if L <= R then begin
         c:= A[L]; A[L]:= A[R]; A[R]:= c;
         L:= L + 1; R:= R - 1;
       end;
     end;
      QSort(first, R);   QSort(L, last);
      end;
    end.

    Задача Array 14:
    Заполнить массив из 10 элементов случайными числами в интервале [-50..50] и отсортировать его с помощью алгоритма быстрой сортировки.

    [Название файла: taskArray14.pas]

    Ввод и вывод

    const Sz = 100; // Размер массива
    
    var 
      a: array [1..Sz] of integer;
      N: integer; // Количество элементов в массиве
      i: integer;
      
    begin
      write('Введите количество элементов в массиве: ');
      readln(N);
      write('Введите элементы массива: ');
      for i:=1 to N do
        read(a[i]);
      write('Вывод элементов массива: ');
      for i:=1 to N do
        write(a[i],' ');
    end.
    

    Заполнение случайными числами

    const Sz = 100; // Размер массива
    
    var 
      a: array [1..Sz] of integer;
      N: integer; // Количество элементов в массиве
      i: integer;
      
    begin
      N := 20;
      for i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива: ');
      for i:=1 to N do
        write(a[i],' ');
    end.
    

    Заполнение арифметической прогрессией

    const 
      Sz = 100;
      a0 = 5; // Первый элемент арифметической прогрессии
      d = 3;  // Разность арифметической прогрессии
    
    var 
      a: array [1..Sz] of integer;
      N: integer; // Количество элементов в массиве
      
    begin
      N := 20;
      a[1] := a0;
      for var i:=2 to N do
        a[i] := a[i-1] + d;
      writeln('Арифметическая прогрессия: ');
      for var i:=1 to N do
        write(a[i],' ');
    end.
    

    Заполнение степенями двойки

    const 
      Sz = 100;
    var 
      a: array [1..Sz] of integer;
      N: integer;   
    begin
      N := 20;
      a[1] := 2;
      for var i:=2 to N do
        a[i] := a[i-1] * 2;
      writeln('Степени двойки: ');
      for var i:=1 to N do
        writeln(i:3,a[i]:9);
    end.
    

    Заполнение числами Фибоначчи

    const 
      Sz = 100;
    var 
      a: array [1..Sz] of integer;
      N: integer;   
    begin
      N := 20;
      a[1] := 1; 
      a[2] := 1;
      for var i:=3 to N do
        a[i] := a[i-2] + a[i-1];
      writeln('Числа Фибоначчи: ');
      for var i:=1 to N do
        write(a[i],' ');
    end.
    

    Инвертирование массива

    const 
      Sz = 100;
    var 
      a: array [1..Sz] of integer;
      N: integer;   
    begin
      N := 20;
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
        
      for var i:=1 to N div 2 do
        Swap(a[i],a[N-i+1]);
        
      writeln('После инвертирования: ');
      for var i:=1 to N do
        write(a[i],' ');
    end.
    

    Минимальный элемент в массиве и его индекс

    const 
      Sz = 100;
    var 
      a: array [1..Sz] of real;
      N: integer;   
      min: real;
      minind: integer;
    begin
      N := 20;
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
      
      min := a[1];
      minind := 1;
      for var i:=2 to N do
        if a[i]<min then 
        begin
          min := a[i];
          minind := i;
        end;
        
      writeln('Минимальный элемент: ',min);
      writeln('Индекс минимального элемента: ',minind);
    end.
    

    Минимальный четный элемент и его индекс

    const 
      Sz = 100;
    var 
      a: array [1..Sz] of integer;
      N: integer;   
      min: integer;
      minind: integer;
    begin
      N := 20;
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
      
      min := integer.MaxValue;
      for var i:=1 to N do
        if (a[i]<min) and (a[i] mod 2 = 0) then 
        begin
          min := a[i];
          minind := i;
        end;
        
      if min = integer.MaxValue then
        writeln('Четных элементов нет')
      else  
      begin
        writeln('Минимальный четный элемент: ',min);
        writeln('Индекс минимального четного элемента: ',minind);
      end;
    end.
    

    Запись четных элементов массива в новый массив

    const 
      Sz = 100;
    var 
      a,b: array [1..Sz] of integer;
      aN: integer; // Количество элементов в массиве a  
      bN: integer; // Количество элементов в массиве b  
    begin
      aN := 20;
      for var i:=1 to aN do
        a[i] := Random(100);
      writeln('Элементы массива: ');
      for var i:=1 to aN do
        write(a[i],' ');
      writeln;  
      
      bN := 0;
      for var i:=1 to aN do
        if a[i] mod 2 = 0 then 
        begin
          bN += 1;
          b[bN] := a[i];
        end;
        
      writeln('Четные элементы массива: ');
      for var i:=1 to bN do
        write(b[i],' ');
    end.
    

    Слияние отсортированных массивов в отсортированный

    Способ 1.

    const 
      aN = 10;      // Количество элементов в массиве a 
      bN = 6;       // Количество элементов в массиве b 
      cN = aN + bN; // Количество элементов в массиве c 
    
    var 
      a: array [1..aN] of integer := (1,5,12,15,47,89,98,112,171,180);
      b: array [1..bN] of integer := (13,44,58,71,73,111);
      c: array [1..сN] of integer;
      ai,bi,ci: integer;
    begin
      writeln('Элементы массива a: ');
      for var i:=1 to aN do
        write(a[i],' ');
      writeln;  
      writeln('Элементы массива b: ');
      for var i:=1 to bN do
        write(b[i],' ');
      writeln;  
      
      ci := 1;
      ai := 1;
      bi := 1;
      
      while (ai<=aN) and (bi<=bN) do
      begin
        if a[ai]<b[bi] then
        begin
          c[ci] := a[ai];
          ai += 1;
        end
        else 
        begin
          c[ci] := b[bi];
          bi += 1;
        end;
        ci += 1;
      end;
      while ai<=aN do
      begin
        c[ci] := a[ai];
        ai += 1;
        ci += 1;
      end;
      while bi<=bN do
      begin
        c[ci] := b[bi];
        bi += 1;
        ci += 1;
      end;
        
      writeln('Результат слияния: ');
      for var i:=1 to cN do
        write(c[i],' ');
    end.
    

    Способ 2. С барьерным элементом

    const 
      aN = 10;      // Количество элементов в массиве a 
      bN = 6;       // Количество элементов в массиве b 
      cN = aN + bN; // Количество элементов в массиве c 
    
    var 
      a: array [1..aN+1] of integer := (1,5,12,15,47,89,98,112,171,180,0); // последний элемент - барьерный
      b: array [1..bN+1] of integer := (13,44,58,71,73,111,0);
      c: array [1..cN] of integer;
      ai,bi,ci: integer;
    begin
      writeln('Элементы массива a: ');
      for var i:=1 to aN do
        write(a[i],' ');
      writeln;  
      writeln('Элементы массива b: ');
      for var i:=1 to bN do
        write(b[i],' ');
      writeln;  
    
      a[aN+1] := integer.MaxValue; // барьерный элемент - самый большой
      b[bN+1] := integer.MaxValue;
      
      ci := 1;
      ai := 1;
      bi := 1;
      
      for ci:=1 to cN do
        if a[ai]<b[bi] then
        begin
          c[ci] := a[ai];
          ai += 1;
        end
        else 
        begin
          c[ci] := b[bi];
          bi += 1;
        end;
        
      writeln('Результат слияния: ');
      for var i:=1 to cN do
        write(c[i],' ');
    end.
    

    Сдвиг элементов влево

    const N = 10;
    
    var a: array [1..N] of integer;
    
    begin
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива a: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    
      for var i:=1 to N-1 do
        a[i] := a[i+1];
      a[N] := 0;
      
      writeln('После сдвига влево: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    end.
    

    Сдвиг элементов вправо

    const N = 10;
    
    var a: array [1..N] of integer;
    
    begin
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива a: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    
      for var i:=N downto 2 do
        a[i] := a[i-1];
      a[1] := 0;
      
      writeln('После сдвига влево: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    end.
    

    Удаление элемента

    const N = 10;
    
    var 
      a: array [1..N] of integer;
      K: integer;
    
    begin
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива a: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    
      K := Random(1,N);
    
      for var i:=K to N-1 do
        a[i] := a[i+1];
      
      writeln('После удаления элемента с индексом ',K,':');
      for var i:=1 to N-1 do
        write(a[i],' ');
      writeln;  
    end.
    

    Вставка элемента

    const 
      N = 10;
      Elem = 666;
    
    var 
      a: array [1..N+1] of integer;
      K: integer;
    
    begin
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива a: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    
      K := Random(1,N);
    
      for var i:=N downto K do
        a[i+1] := a[i];
      a[K] := 666;  
      
      writeln('После вставки элемента ',Elem,' в позицию ',K,':');
      for var i:=1 to N+1 do
        write(a[i],' ');
      writeln;  
    end.
    

    Подсчет количества элементов, удовлетворяющих условию

    const N = 20;
    
    var 
      a: array [1..N] of integer;
      K,Count: integer;
    
    begin
      for var i:=1 to N do
        a[i] := Random(10);
      writeln('Элементы массива a: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    
      K := Random(10);
    
      Count := 0;
      for var i:=1 to N do
        if a[i] = K then 
          Count += 1;
      
      writeln('Количество элементов, равных ',K,': ',Count);  
    end.
    

    Есть ли элемент, удовлетворяющий условию

    const N = 10;
    
    var 
      a: array [1..N] of integer;
      K: integer;
      IsFound: boolean;
    
    begin
      for var i:=1 to N do
        a[i] := Random(15);
      writeln('Элементы массива a: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    
      K := Random(15);
    
      IsFound := False;
      for var i:=1 to N do
        if a[i] = K then 
        begin
          IsFound := True;
          break
        end;
      
      if IsFound then
        writeln('Элемент ',K,' найден')
      else writeln('Элемент ',K,' не найден')  
    end.
    

    Сортировка пузырьком

    const N = 10;
    
    var 
      a: array [1..N] of integer;
    
    begin
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива a: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    
      for var i:=n downto 2 do
      for var j:=1 to i-1 do
        if a[j+1]<a[j] then
          Swap(a[j+1],a[j]);
      
      writeln('После сортировки пузырьком: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    end.
    

    Сортировка выбором

    const N = 10;
    
    var 
      a: array [1..N] of integer;
      K: integer;
      IsFound: boolean;
    
    begin
      for var i:=1 to N do
        a[i] := Random(100);
      writeln('Элементы массива a: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    
      for var i:=1 to N-1 do
      begin
        var min := a[i]; 
        var ind := i;
        for var j:=i+1 to N do
          if a[j]<min then
          begin
            min := a[j];
            ind := j;
          end;
        a[ind] := a[i];
        a[i] := min;
      end;
    
      writeln('После сортировки выбором: ');
      for var i:=1 to N do
        write(a[i],' ');
      writeln;  
    end.
    

    Ссылки

    • Программы для начинающих
    • Сайт PascalABC.NET: Программы и алгоритмы для начинающих

    Тут придётся написать собственную функцию.

    const generateArray = (length, max) => (
      [...new Array(length)]
        .map(() => Math.round(Math.random() * max))
    );
    

    Как видите мы генерируем массив нужной длины используя конструктор Array. Далее с помощью метода map() мы преобразовываем каждый элемент нашего пустого массива, таким образом заполняя его элементами со случайными числовыми значениями. От нуля до max. Посмотрим на нашу функцию в действии:

    const numbers = generateArray(10, 40);
    console.log(numbers); //=> [36,  5,  9, 35, 23, 38, 27, 35, 34,  6]
    
    
    

    It’s a simple one-liner:

    const randomElement = array[Math.floor(Math.random() * array.length)];
    

    For example:

    const months = ["January", "February", "March", "April", "May", "June", "July"];
    
    const random = Math.floor(Math.random() * months.length);
    console.log(random, months[random]);

    jakanz's user avatar

    answered Dec 29, 2010 at 0:06

    Jacob Relkin's user avatar

    Jacob RelkinJacob Relkin

    161k33 gold badges345 silver badges319 bronze badges

    5

    If you’ve already got underscore or lodash included in your project you can use _.sample.

    // will return one item randomly from the array
    _.sample(['January', 'February', 'March']);
    

    If you need to get more than one item randomly, you can pass that as a second argument in underscore:

    // will return two items randomly from the array using underscore
    _.sample(['January', 'February', 'March'], 2);
    

    or use the _.sampleSize method in lodash:

    // will return two items randomly from the array using lodash
    _.sampleSize(['January', 'February', 'March'], 2);
    

    answered Jun 19, 2015 at 18:40

    Brendan Nee's user avatar

    Brendan NeeBrendan Nee

    5,0312 gold badges32 silver badges32 bronze badges

    1

    You may consider defining a function on the Array prototype, in order to create a method [].sample() which returns a random element.

    First, to define the prototype function, place this snippet in your code:

    Array.prototype.sample = function(){
      return this[Math.floor(Math.random()*this.length)];
    }
    

    Later, to sample a random element from the array, just call .sample():

    [1,2,3,4].sample() //=> a random element
    

    I’m releasing these code snippets into the public domain, under the terms of the CC0 1.0 license.

    answered Nov 24, 2015 at 23:52

    Ben Aubin's user avatar

    Ben AubinBen Aubin

    5,5242 gold badges34 silver badges54 bronze badges

    5

    ~~ is much faster than Math.Floor(), so when it comes to performance optimization while producing output using UI elements, ~~ wins the game. MORE INFO

    var rand = myArray[~~(Math.random() * myArray.length)];
    

    But if you know that the array is going to have millions of elements then you might want to reconsider between Bitwise Operator and Math.Floor(), as bitwise operators behave weirdly with large numbers. See below example explained with the output.

    var number = Math.floor(14444323231.2); // => 14444323231
    var number = 14444323231.2 | 0; // => 1559421343
    

    answered May 5, 2018 at 12:25

    Ankur Soni's user avatar

    Ankur SoniAnkur Soni

    5,6415 gold badges47 silver badges81 bronze badges

    5

    The shortest version:

    var myArray = ['January', 'February', 'March']; 
    var rand = myArray[(Math.random() * myArray.length) | 0]
    console.log(rand)

    AATHITH RAJENDRAN's user avatar

    answered Jul 19, 2016 at 2:37

    foxiris's user avatar

    foxirisfoxiris

    3,02231 silver badges31 bronze badges

    4

    Say you want to choose a random item that is different from the last time (not really random, but still a common requirement)…

    /**
     * Return a random element from an array that is
     * different than `last` (as long as the array has > 1 items). 
     * Return null if the array is empty.
    */
    function getRandomDifferent(arr, last = undefined) {
      if (arr.length === 0) {
        return null;
      } else if (arr.length === 1) {
        return arr[0];
      } else {
        let num = 0;
        do {
          num = Math.floor(Math.random() * arr.length);
        } while (arr[num] === last);
        return arr[num];
      }
    }
    

    Implement like this:

    const arr = [1,2,3];
    const r1 = getRandomDifferent(arr);
    const r2 = getRandomDifferent(arr, r1); // r2 is different than r1.
    

    answered Aug 14, 2012 at 1:57

    CrazyTim's user avatar

    CrazyTimCrazyTim

    6,5776 gold badges34 silver badges55 bronze badges

    0

    If you have fixed values (like a month name list) and want a one-line solution

    var result = ['January', 'February', 'March'][Math.floor(Math.random() * 3)]
    

    The second part of the array is an access operation as described in Why does [5,6,8,7][1,2] = 8 in JavaScript?

    Community's user avatar

    answered Nov 28, 2014 at 14:58

    I.G. Pascual's user avatar

    I.G. PascualI.G. Pascual

    5,7605 gold badges42 silver badges58 bronze badges

    6

    If you want to write it on one line, like Pascual’s solution, another solution would be to write it using ES6’s find function (based on the fact, that the probability of randomly selecting one out of n items is 1/n):

    var item = ['A', 'B', 'C', 'D'].find((_, i, ar) => Math.random() < 1 / (ar.length - i));
    console.log(item);

    Use that approach for testing purposes and if there is a good reason to not save the array in a seperate variable only. Otherwise the other answers (floor(random()*length and using a seperate function) are your way to go.

    answered Sep 11, 2017 at 18:01

    Stephan's user avatar

    StephanStephan

    1,94814 silver badges19 bronze badges

    0

    Many of the offered solutions add a method to a specific Array which restricts it’s use to just that array. This solution is reusable code that works for any array and can be made type safe.

    TypeScript

    export function randChoice<T>(arr: Array<T>): T {
      return arr[Math.floor(Math.random() * arr.length)]
    }
    

    JavaScript

    function randChoice(arr) {
      return arr[Math.floor(Math.random() * arr.length)]
    }
    

    PauAI's user avatar

    PauAI

    3744 silver badges16 bronze badges

    answered Aug 5, 2022 at 5:26

    Tony O'Hagan's user avatar

    Tony O’HaganTony O’Hagan

    21.4k3 gold badges64 silver badges77 bronze badges

    Editing Array prototype can be harmful. Here it is a simple function to do the job.

    function getArrayRandomElement (arr) {
      if (arr && arr.length) {
        return arr[Math.floor(Math.random() * arr.length)];
      }
      // The undefined will be returned if the empty array was passed
    }
    

    Usage:

    // Example 1
    var item = getArrayRandomElement(['January', 'February', 'March']);
    
    // Example 2
    var myArray = ['January', 'February', 'March'];
    var item = getArrayRandomElement(myArray);
    

    answered Sep 5, 2018 at 22:48

    Seagull's user avatar

    SeagullSeagull

    3,2992 gold badges31 silver badges37 bronze badges

    If you need to fetch a random item more than once, then, obviously you would use a function. One way is to make that function a method of the Array.prototype, but that will normally get you shouted down for tampering with built in prototypes.

    However, you can add the method to the specific array itself:

    var months = ['January', 'February', 'March'];
    months.random = function() {
        return this[Math.floor(Math.random()*this.length)];
    };
    

    That way you can use months.random() as often as you like without interfering with the generic Array.prototype.

    As with any random function, you run the risk of getting the same value successively. If you don’t want that, you will need to track the previous value with another property:

    months.random=function() {
        var random;
        while((random=this[Math.floor(Math.random()*this.length)]) == this.previous);
        this.previous=random;
        return random;
    };
    

    If you’re going to do this sort of thing often, and you don’t want to tamper with Array.prototype, you can do something like this:

    function randomValue() {
        return this[Math.floor(Math.random()*this.length)];
    }
    
    var data = [ … ];
    var moreData = [ … ];
    
    data.random=randomValue;
    moreData.random=randomValue;
    

    answered Jul 12, 2021 at 3:54

    Manngo's user avatar

    ManngoManngo

    13.5k10 gold badges83 silver badges105 bronze badges

    Faker.js has many utility functions for generating random test data. It is a good option in the context of a test suite:

    const faker = require('faker');
    faker.helpers.arrayElement(['January', 'February', 'March']);
    

    As commenters have mentioned, you generally should not use this library in production code.

    thoroc's user avatar

    thoroc

    3,1912 gold badges27 silver badges34 bronze badges

    answered Dec 12, 2017 at 20:42

    Nathan's user avatar

    NathanNathan

    5,2542 gold badges25 silver badges28 bronze badges

    5

    To get crypto-strong random item form array use

    let rndItem = a=> a[rnd()*a.length|0];
    let rnd = ()=> crypto.getRandomValues(new Uint32Array(1))[0]/2**32;
    
    var myArray = ['January', 'February', 'March'];
    
    console.log( rndItem(myArray) )

    answered Sep 16, 2019 at 10:17

    Kamil Kiełczewski's user avatar

    Kamil KiełczewskiKamil Kiełczewski

    83k29 gold badges358 silver badges335 bronze badges

    Recursive, standalone function which can return any number of items (identical to lodash.sampleSize):

    function getRandomElementsFromArray(array, numberOfRandomElementsToExtract = 1) {
        const elements = [];
    
        function getRandomElement(arr) {
            if (elements.length < numberOfRandomElementsToExtract) {
                const index = Math.floor(Math.random() * arr.length)
                const element = arr.splice(index, 1)[0];
    
                elements.push(element)
    
                return getRandomElement(arr)
            } else {
                return elements
            }
        }
    
        return getRandomElement([...array])
    }
    

    answered Dec 8, 2017 at 14:23

    dwilt's user avatar

    dwiltdwilt

    5978 silver badges13 bronze badges

    This is similar to, but more general than, @Jacob Relkin’s solution:

    This is ES2015:

    const randomChoice = arr => {
        const randIndex = Math.floor(Math.random() * arr.length);
        return arr[randIndex];
    };
    

    The code works by selecting a random number between 0 and the length of the array, then returning the item at that index.

    answered Jan 2, 2016 at 15:23

    Max Heiber's user avatar

    Max HeiberMax Heiber

    13.9k11 gold badges58 silver badges95 bronze badges

    var item = myArray[Math.floor(Math.random()*myArray.length)];

    or equivalent shorter version:

    var item = myArray[(Math.random()*myArray.length)|0];

    Sample code:

    var myArray = ['January', 'February', 'March'];    
    var item = myArray[(Math.random()*myArray.length)|0];
    console.log('item:', item);

    answered May 19, 2017 at 9:01

    Pavel P's user avatar

    Pavel PPavel P

    15.6k11 gold badges79 silver badges127 bronze badges

    Simple Function :

    var myArray = ['January', 'February', 'March'];
    function random(array) {
         return array[Math.floor(Math.random() * array.length)]
    }
    random(myArray);
    

    OR

    var myArray = ['January', 'February', 'March'];
    function random() {
         return myArray[Math.floor(Math.random() * myArray.length)]
    }
    random();
    

    OR

    var myArray = ['January', 'February', 'March'];
    function random() {
         return myArray[Math.floor(Math.random() * myArray.length)]
    }
    random();
    

    answered Dec 17, 2017 at 5:42

    Dhakshith's user avatar

    1

    In my opinion, better than messing around with prototypes , or declaring it just in time, I prefer exposing it to window:

    window.choice = function() {
      if (!this.length || this.length == 0) return;
      if (this.length == 1) return this[0];
      return this[Math.floor(Math.random()*this.length)];
    }
    

    Now anywhere on your app you call it like:

    var rand = window.choice.call(array)
    

    This way you can still use for(x in array) loop properly

    answered May 13, 2014 at 10:27

    weisk's user avatar

    weiskweisk

    2,4581 gold badge18 silver badges18 bronze badges

    3

    I’ve found a way around the top answer’s complications, just by concatenating the variable rand to another variable that allows that number to be displayed inside the calling of myArray[];. By deleting the new array created and toying around with it’s complications, I’ve come up with a working solution:

    <!DOCTYPE html>
    <html>
    <body>
    
    <p id="demo"></p>
    
    <script>
    
    var myArray = ['January', 'February', 'March', 'April', 'May'];    
    
    var rand = Math.floor(Math.random() * myArray.length);
    
    var concat = myArray[rand];
    
    function random() {
       document.getElementById("demo").innerHTML = (concat);
    }
    </script>
    
    <button onClick="random();">
    Working Random Array generator
    </button>
    
    </body>
    </html>
    

    answered Apr 27, 2016 at 22:01

    FaverosGema's user avatar

    2

    static generateMonth() { 
    const theDate = ['January', 'February', 'March']; 
    const randomNumber = Math.floor(Math.random()*3);
    return theDate[randomNumber];
    };

    You set a constant variable to the array, you then have another constant that chooses randomly between the three objects in the array and then the function simply returns the results.

    answered Mar 15, 2018 at 7:51

    Neil Meyer's user avatar

    Neil MeyerNeil Meyer

    4353 silver badges12 bronze badges

    Looking for a true one-liner I came to this:

    ['January', 'February', 'March'].reduce((a, c, i, o) => { return o[Math.floor(Math.random() * Math.floor(o.length))]; })
    

    answered Jul 24, 2020 at 1:47

    blagus's user avatar

    blagusblagus

    2,0264 gold badges19 silver badges22 bronze badges

    By adding a method on prototype of array you can get random values easly.

    In this example you can get single or multiple random values from array.

    You can run to test code by clicking snippet button.

    Array.prototype.random = function(n){
      if(n&&n>1){
        const a = [];
        for(let i = 0;i<n;i++){
          a.push(this[Math.floor(Math.random()*this.length)]);
        }
        return a;
      } else {
        return this[Math.floor(Math.random()*this.length)];
      }
    }
    
    const mySampleArray =  ['a','b','c','d','e','f','g','h'];
    
    mySampleArray.random(); // return any random value etc. 'a', 'b'
    mySampleArray.random(3); //retun an array with random values etc: ['b','f','a'] , ['d','b','d']
    
    alert(mySampleArray.random());
    alert(mySampleArray.random(3));

    answered Jul 24, 2020 at 14:49

    Kamuran Sönecek's user avatar

    Kamuran SönecekKamuran Sönecek

    3,2782 gold badges30 silver badges56 bronze badges

    Method 1:

    • Use Math.random() function to get the random number between(0-1, 1
      exclusive).
    • Multiply it by the array length to get the numbers
      between(0-arrayLength).
    • Use Math.floor() to get the index ranging
      from(0 to arrayLength-1).

    const arr = [“foo”,”bar”];
    const randomlyPickedString=arr[Math.floor(Math.random() * arr.length)];
    console.log(randomlyPickedString);

    Method 2:

    • The random(a, b) method is used to generates a number between(a to b, b exclusive).
    • Taking the floor value to range the numbers from (1 to arrayLength).
    • Subtract 1 to get the index ranging from(0 to arrayLength-1).

    const arr = [“foo”,”bar”];
    const randomlyPickedString=arr[Math.floor(random(1, 5))-1];
    console.log(randomlyPickedString);

    answered May 20, 2021 at 15:19

    Abdulmoiz Ahmer's user avatar

    A generic way to get random element(s):

    let some_array = ['Jan', 'Feb', 'Mar', 'Apr', 'May'];
    let months = random_elems(some_array, 3);
    
    console.log(months);
    
    function random_elems(arr, count) {
      let len = arr.length;
      let lookup = {};
      let tmp = [];
    
      if (count > len)
        count = len;
    
      for (let i = 0; i < count; i++) {
        let index;
        do {
          index = ~~(Math.random() * len);
        } while (index in lookup);
        lookup[index] = null;
        tmp.push(arr[index]);
      }
    
      return tmp;
    }

    answered Oct 11, 2018 at 11:37

    Rafael's user avatar

    RafaelRafael

    7,54513 gold badges30 silver badges46 bronze badges

    Here is an example of how to do it:

    $scope.ctx.skills = data.result.skills;
        $scope.praiseTextArray = [
        "Hooray",
        "You're ready to move to a new skill", 
        "Yahoo! You completed a problem", 
        "You're doing great",  
        "You succeeded", 
        "That was a brave effort trying new problems", 
        "Your brain was working hard",
        "All your hard work is paying off",
        "Very nice job!, Let's see what you can do next",
        "Well done",
        "That was excellent work",
        "Awesome job",
        "You must feel good about doing such a great job",
        "Right on",
        "Great thinking",
        "Wonderful work",
        "You were right on top of that one",
        "Beautiful job",
        "Way to go",
        "Sensational effort"
      ];
    
      $scope.praiseTextWord = $scope.praiseTextArray[Math.floor(Math.random()*$scope.praiseTextArray.length)];
    

    mech's user avatar

    mech

    2,7255 gold badges30 silver badges38 bronze badges

    answered Feb 18, 2016 at 19:39

    varun's user avatar

    0

    Create one random value and pass to array

    Please try following code..

    //For Search textbox random value
    var myPlaceHolderArray = ['Hotels in New York...', 'Hotels in San Francisco...', 'Hotels Near Disney World...', 'Hotels in Atlanta...'];
    var rand = Math.floor(Math.random() * myPlaceHolderArray.length);
    var Placeholdervalue = myPlaceHolderArray[rand];
    
    alert(Placeholdervalue);
    

    answered Feb 3, 2017 at 12:49

    Jignesh Darji's user avatar

    1

    randojs makes this a little more simple and readable:

    console.log( rando(['January', 'February', 'March']).value );
    <script src="https://randojs.com/1.0.0.js"></script>

    answered Dec 2, 2019 at 2:47

    Aaron Plocharczyk's user avatar

    1

    I am really surprised nobody tried to use native random values:

    array[Date.now()%array.length]
    

    It will not work for array length over 160000000000, but I am sure you will never create arrays like this

    UPD

    As far as you question is how to pick random value from array called myArray (with len=3), the solution should be:

    myArray[Date.now()%myArray.length]
    

    answered Nov 3, 2021 at 5:38

    Egor's user avatar

    EgorEgor

    2695 silver badges21 bronze badges

    10

    I have an array called $ran = array(1,2,3,4);

    I need to get a random value out of this array and store it in a variable, how can I do this?

    Samuel Liew's user avatar

    Samuel Liew

    76.1k107 gold badges156 silver badges257 bronze badges

    asked Oct 29, 2009 at 12:39

    Elitmiar's user avatar

    0

    You can also do just:

    $k = array_rand($array);
    $v = $array[$k];
    

    This is the way to do it when you have an associative array.

    answered Oct 29, 2009 at 12:44

    reko_t's user avatar

    reko_treko_t

    55k10 gold badges87 silver badges77 bronze badges

    3

    PHP provides a function just for that: array_rand()
    http://php.net/manual/en/function.array-rand.php

    $ran = array(1,2,3,4);
    $randomElement = $ran[array_rand($ran, 1)];
    

    answered Oct 29, 2009 at 12:44

    NDM's user avatar

    NDMNDM

    6,7013 gold badges37 silver badges52 bronze badges

    1

    $value = $array[array_rand($array)];
    

    answered Jan 12, 2015 at 14:18

    KAS's user avatar

    KASKAS

    7807 silver badges12 bronze badges

    You can use mt_rand()

    $random = $ran[mt_rand(0, count($ran) - 1)];
    

    This comes in handy as a function as well if you need the value

    function random_value($array, $default=null)
    {
        $k = mt_rand(0, count($array) - 1);
        return isset($array[$k])? $array[$k]: $default;
    }
    

    Timo Huovinen's user avatar

    Timo Huovinen

    52.8k33 gold badges150 silver badges142 bronze badges

    answered Oct 29, 2009 at 12:41

    Ólafur Waage's user avatar

    Ólafur WaageÓlafur Waage

    68.5k22 gold badges142 silver badges197 bronze badges

    7

    You could use the array_rand function to select a random key from your array like below.

    $array = array("one", "two", "three", "four", "five", "six");
    echo $array[array_rand($array, 1)];
    

    or you could use the rand and count functions to select a random index.

    $array = array("one", "two", "three", "four", "five", "six");
    echo $array[rand(0, count($array) - 1)];
    

    answered Oct 7, 2013 at 22:38

    TURTLE's user avatar

    TURTLETURTLE

    3,6894 gold badges49 silver badges50 bronze badges

    Derived from Laravel Collection::random():

    function array_random($array, $amount = 1)
    {
        $keys = array_rand($array, $amount);
    
        if ($amount == 1) {
            return $array[$keys];
        }
    
        $results = [];
        foreach ($keys as $key) {
            $results[] = $array[$key];
        }
    
        return $results;
    }
    

    Usage:

    $items = ['foo', 'bar', 'baz', 'lorem'=>'ipsum'];
    
    array_random($items); // 'bar'
    array_random($items, 2); // ['foo', 'ipsum']
    

    A few notes:

    • $amount has to be less than or equal to count($array).
    • array_rand() doesn’t shuffle keys (since PHP 5.2.10, see 48224), so your picked items will always be in original order. Use shuffle() afterwards if needed.

    Documentation: array_rand(), shuffle()

    edit: The Laravel function has noticeably grown since then, see Laravel 5.4’s Arr::random(). Here is something more elaborate, derived from the grown-up Laravel function:

    function array_random($array, $number = null)
    {
        $requested = ($number === null) ? 1 : $number;
        $count = count($array);
    
        if ($requested > $count) {
            throw new RangeException(
                "You requested {$requested} items, but there are only {$count} items available."
            );
        }
    
        if ($number === null) {
            return $array[array_rand($array)];
        }
    
        if ((int) $number === 0) {
            return [];
        }
    
        $keys = (array) array_rand($array, $number);
    
        $results = [];
        foreach ($keys as $key) {
            $results[] = $array[$key];
        }
    
        return $results;
    }
    

    A few highlights:

    • Throw exception if there are not enough items available
    • array_random($array, 1) returns an array of one item (#19826)
    • Support value “0” for the number of items (#20439)

    answered Oct 15, 2015 at 11:32

    Gras Double's user avatar

    Gras DoubleGras Double

    15.8k8 gold badges56 silver badges54 bronze badges

    The array_rand function seems to have an uneven distribution on large arrays, not every array item is equally likely to get picked. Using shuffle on the array and then taking the first element doesn’t have this problem:

    $myArray = array(1, 2, 3, 4, 5);
    
    // Random shuffle
    shuffle($myArray);
    
    // First element is random now
    $randomValue = $myArray[0];
    

    answered Jul 4, 2014 at 12:40

    Asciiom's user avatar

    AsciiomAsciiom

    9,8077 gold badges38 silver badges57 bronze badges

    2

    Another approach through flipping array to get direct value.

    Snippet

    $array = [ 'Name1' => 'John', 'Name2' => 'Jane', 'Name3' => 'Jonny' ];
    $val = array_rand(array_flip($array));
    

    array_rand return key not value. So, we’re flipping value as key.

    Note:
    PHP key alway be an unique key, so when array is flipped, duplicate value as a key will be overwritten.

    answered Jul 30, 2018 at 20:53

    Shahnawaz Kadari's user avatar

    Shahnawaz KadariShahnawaz Kadari

    1,4141 gold badge12 silver badges20 bronze badges

    3

    $rand = rand(1,4);
    

    or, for arrays specifically:

    $array = array('a value', 'another value', 'just some value', 'not some value');
    $rand = $array[ rand(0, count($array)-1) ];
    

    answered Oct 29, 2009 at 12:42

    Duroth's user avatar

    DurothDuroth

    6,2322 gold badges18 silver badges23 bronze badges

    2

    On-liner:

    echo $array[array_rand($array,1)]
    

    answered Jun 3, 2020 at 10:05

    Sid's user avatar

    SidSid

    4,2643 gold badges26 silver badges27 bronze badges

    3

    In my case, I have to get 2 values what are objects. I share this simple solution.

    $ran = array("a","b","c","d");
    $ranval = array_map(function($i) use($ran){return $ran[$i];},array_rand($ran,2));
    

    answered Jun 23, 2019 at 9:37

    CN Lee's user avatar

    CN LeeCN Lee

    1243 bronze badges

    One line: $ran[rand(0, count($ran) - 1)]

    Jignesh Joisar's user avatar

    answered Sep 6, 2018 at 11:34

    Abdelilah's user avatar

    This will work nicely with in-line arrays. Plus, I think things are tidier and more reusable when wrapped up in a function.

    function array_rand_value($a) {
        return $a[array_rand($a)];
    }
    

    Usage:

    array_rand_value(array("a", "b", "c", "d"));
    

    On PHP < 7.1.0, array_rand() uses rand(), so you wouldn’t want to this function for anything related to security or cryptography. On PHP 7.1.0+, use this function without concern since rand() has been aliased to mt_rand().

    answered May 2, 2019 at 23:20

    rinogo's user avatar

    rinogorinogo

    8,27512 gold badges60 silver badges98 bronze badges

    I needed one line version for short array:

    ($array = [1, 2, 3, 4])[mt_rand(0, count($array) - 1)]
    

    or if array is fixed:

    [1, 2, 3, 4][mt_rand(0, 3]
    

    answered Oct 21, 2019 at 2:56

    Rafael's user avatar

    RafaelRafael

    3262 silver badges6 bronze badges

    Does your selection have any security implications? If so, use random_int() and array_keys(). (random_bytes() is PHP 7 only, but there is a polyfill for PHP 5).

    function random_index(array $source)
    {
        $max = count($source) - 1;
        $r = random_int(0, $max);
        $k = array_keys($source);
        return $k[$r];
    }
    

    Usage:

    $array = [
        'apple' =>   1234,
        'boy'   =>   2345,
        'cat'   =>   3456,
        'dog'   =>   4567,
        'echo'  =>   5678,
        'fortune' => 6789
    ];
    $i = random_index($array);
    var_dump([$i, $array[$i]]);
    

    Demo: https://3v4l.org/1joB1

    answered Dec 8, 2015 at 6:44

    Scott Arciszewski's user avatar

    Scott ArciszewskiScott Arciszewski

    33.4k16 gold badges89 silver badges206 bronze badges

    Use rand() to get random number to echo random key. In ex: 0 – 3

    $ran = array(1,2,3,4);
    echo $ran[rand(0,3)];
    

    answered May 6, 2017 at 15:57

    Muhammad Ibnuh's user avatar

    I’m basing my answer off of @ÓlafurWaage’s function. I tried to use it but was running into reference issues when I had tried to modify the return object. I updated his function to pass and return by reference. The new function is:

    function &random_value(&$array, $default=null)
    {
        $k = mt_rand(0, count($array) - 1);
        if (isset($array[$k])) {
            return $array[$k];
        } else {
            return $default;
        }
    }
    

    For more context, see my question over at Passing/Returning references to object + changing object is not working

    Community's user avatar

    answered Sep 21, 2015 at 19:08

    Jeff's user avatar

    JeffJeff

    13.9k11 gold badges55 silver badges103 bronze badges

    Get random values from an array.

    function random($array)
    {
        /// Determine array is associative or not
        $keys = array_keys($array);
        $givenArrIsAssoc = array_keys($keys) !== $keys;
    
        /// if array is not associative then return random element
        if(!$givenArrIsAssoc){
            return $array[array_rand($array)];
        }
    
        /// If array is associative then 
        $keys = array_rand($array, $number);
        $results = [];
        foreach ((array) $keys as $key) {
            $results[] = $array[$key];
        }
        return $results;
    }
    

    answered Sep 7, 2020 at 16:36

    dipenparmar12's user avatar

    dipenparmar12dipenparmar12

    2,9461 gold badge29 silver badges39 bronze badges

    mt_srand usage example

    if one needs to pick a random row from a text but same all the time based on something

    $rows = array_map('trim', explode("n", $text));
    mt_srand($item_id);
    $row = $rows[rand(0, count($rows ) - 1)];
    

    answered Sep 23, 2022 at 19:21

    Hebe's user avatar

    HebeHebe

    6011 gold badge7 silver badges11 bronze badges

    A simple way to getting Randdom value form Array.

    $color_array =["red","green","blue","light_orange"];
    $color_array[rand(0,3)
    

    now every time you will get different colors from Array.

    answered Apr 12, 2020 at 20:50

    pankaj's user avatar

    You get a random number out of an array as follows:

    $randomValue = $rand[array_rand($rand,1)];
    

    Foued MOUSSI's user avatar

    Foued MOUSSI

    4,5933 gold badges17 silver badges38 bronze badges

    answered Oct 29, 2009 at 12:43

    Adam Libonatti-Roche's user avatar

    1

    Добавить комментарий