Одномерные массивы в Паскале и функция Random в Pascal


Содержание:
  • Одномерные массивы в Паскале
  • Объявление массива
  • Инициализация массива
  • Вывод элементов массива
  • Функция Random в Pascal
  • Числа Фибоначчи в Паскале
  • Максимальный (минимальный) элемент массива
  • Поиск в массиве
  • Циклический сдвиг
  • Перестановка элементов в массиве
  • Выбор элементов и сохранение в другой массив
  • Сортировка элементов массива
  • Как заполнить массив 20-ю случайными числами 1 до 20 с помощью цикла.


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


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

    Содержание:

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

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

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

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

    var dlina:array[1..3]ofinteger;begin dlina[1]:=500; dlina[2]:=400; dlina[3]:=150;...

    var dlina: array [1..3] of integer; begin dlina[1]:=500; dlina[2]:=400; dlina[3]:=150; ...

  • — идентификатор (имя) массива;
  • для объявления используется служебное слово (в переводе с англ. «массив» или «набор»);
  • — в квадратных скобках ставится номер (индекс) первого элемента, затем две точки и индекс последнего элемента массива, т.е. по сути, указывается количество элементов; количество элементов массива называется размерностью массива
  • (с англ. «из целых чисел») — указывает к какому типу относится массив, of здесь — служебное слово.
  •  

    Объявить размер можно через константу:

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

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

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

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

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

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

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

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

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

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

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

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

    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]:4); {вывод элементов массива} end.

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

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

    Функция Random в Pascal

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

     

     

    x:=random(b-a+1)+a;

    x:=random(b-a+1)+a;

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

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

    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,1) }

    var x: real; ... x := random; { интервал [0,1) }

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


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

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

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

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

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

    или

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

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

    или

    f[i]:=f[i-2]+f[i-1];

    f[i]:=f[i-2]+f[i-1];

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

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

    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.

    На данном примере, становится понятен принцип работы с числовыми рядами. Обычно, для вывода числового ряда находится формула определения каждого элемента данного ряда. Так, в случае с числами Фибоначчи, эта формула-правило выглядит как . Поэтому ее необходимо использовать в цикле при формировании элементов массива.

    Задача Array 2. Дан ряд из 10 произвольных чисел: . Подсчитать и напечатать суммы троек стоящих рядом чисел: ,    , ,  …… ,


    Задача Array 3. Написать программу решения задачи о печати ряда чисел ; для заполнения массива использовать цикл Repeat


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

    Псевдокод:

     

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

    Задание: Найдите минимальный элемент массива

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

    Задача Array 5. Найти минимальное и максимальное из n введенных чисел (массива) и их индексы

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

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

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

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


    Для решения поставленной задачи понадобится оператор — выход из цикла.
    Решение Вариант 1:
    Показать решение
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var f:array[1..10]ofinteger; flag:boolean; i,c:integer;begin randomize;for i:=1to10dobegin f[i]:=random(10);write(f[i],' ');end; flag:=false;writeln('введите образец');readln(c);for i:=1to10doif f[i]=c thenbeginwriteln('найден'); flag:=true;break;end;if flag=falsethenwriteln('не найден');end.

    var f: array[1..10] of integer; flag:boolean; i,c:integer; begin randomize; for i:=1 to 10 do begin f[i]:=random(10); write(f[i],' '); end; flag:=false; writeln('введите образец'); readln(c); for i:=1 to 10 do if f[i]=c then begin writeln('найден'); flag:=true; break; end; if flag=false then writeln('не найден'); end.

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

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

    Алгоритм:

    • начать с 1-го элемента ()
    • если очередной элемент () равен , то закончить поиск иначе перейти к следующему элементу

    решение на Паскале:

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

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

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


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

    Программа:

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

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

    Решение:

    Алгоритм:

    Псевдокод:

    Программа:

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

    Решение:

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

    Вывод массива B:

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

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

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

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

    1 2 3 4 5 6 7 8 for i:=1to N-1dobeginfor j:=N-1downto i doif A[j] > A[j+1]thenbegin с := A[j]; A[j]:= A[j+1]; A[j+1]:= с;end;end;

    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;

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

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

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

    1 2 3 4 5 6 7 8 9 10 for i :=1to N-1dobegin min:= i ;for j:= i+1to N doif A[j] < A[min]then min:=j;if min <> i thenbegin c:=A[i]; A[i]:=A[min]; A[min]:=c;end;end;

    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;

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

    Алгоритм:

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

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

    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;beginif first < last thenbegin X:= A[(first + last)div2]; L:= first; R:= last;while L <= R dobeginwhile A[L] < X do L:= L +1;while A[R] > X do R:= R -1;if L <= R thenbegin 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.

    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] и отсортировать его с помощью алгоритма быстрой сортировки.

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

    Пример:

    Исходный массив: 4 -5 10 -10 5 максимальные A[3]=10, A[5]=5
    Задача Array 8. Заполнить массив из 10 элементов случайными числами в интервале и вывести номера всех элементов, равных .

    Пример:

    Исходный массив: 4 0 1 2 0 1 3 4 1 0 Что ищем? 0 A[2], A[5], A[10]
    Пример: сдвинуть элементы массива влево на 1 позицию, первый элемент становится на место последнего.

    Задача 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
    Пример: переставить элементы массива в обратном порядке

    Задача 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
    Пример: найти в массиве элементы, удовлетворяющие некоторому условию (например, отрицательные), и скопировать их в другой массив

    Задача Array 11. Заполнить массив случайными числами в интервале [20,100] и записать в другой массив все числа, которые оканчиваются на 0.
    Пример: Исходный массив: 40 57 30 71 84 Заканчиваются на 0: 40 30
    Задание Array 112 Заполнить массив из 10 элементов случайными числами в интервале [0..50] и отсортировать первую половину массива по возрастанию, а вторую – по убыванию. Пример: Исходный массив: 14 25 13 30 76 58 32 11 41 97 Результат: 13 14 25 30 76 97 58 41 32 11
    Задание 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
    Источник: http://labs.org.ru/pascal-5/

    Как заполнить массив 20-ю случайными числами 1 до 20 с помощью цикла.


    Опубликовано: 16.02.2018 | Автор: bladfastcer

    Рейтинг статьи: 5

    Похожие статьи


    Всего 10 комментариев.


    25.02.2018 Ядвига:
    Готовые решения задач Pascal Заполнение массива случайными числами.  Создать массив из 100 элементов, заполнить его случайным целыми числами.

    25.03.2018 bioscoopocem:
    Пусть требуется заполнить массив равномерно распределенными случайными числами в интервале [a,b]. Поскольку для целых и вещественных чисел способы вычисления случайного числа в заданном интервале отличаются.

    17.03.2018 falutes:
    Массив заполняется случайными числами.  Заполнить массив случайными числами в заданном интервале - Pascal Заполните массив C случайными числами в интервале от 5 до 15 и вывести его на экран.

    14.02.2018 Виктория:
    Дан массив, состоящий из n элементов. Сколько элементов массива превосходят по модулю заданное число а, и други вопросы и боль ожидают меня эту ночь, добрые люди, помогите, тупому.

    24.02.2018 Тит:
    Научитесь использовать генератор случайных чисел — функцию random в Паскале.  Задача Array 8. Заполнить массив из 10 элементов случайными числами в интервале [0..4] и вывести номера всех элементов, равных X.

    19.03.2018 Нестор:
    Заполнить одномерный массив случайными числами.  Есть массив строк(аля char**) в цикле он заполняется(в функцию, где это происходит просто кидают большую строку со '\n'-ами, а в функции в цикле она разбивается на несколько строк).