Одномерный массив произвольного размера, заполненный случайными значениями

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

Одномерный массив

Синтаксис массива в Pascal таков :

Var a : array [1..10] Of integer ;

Где :

1 – нижний индекс

10 – верхний индекс

A – имя переменной массива

[ ] – диапазон значений

Integer – тип данных

A[ i ] – обращение к элементу массива в Pascal

Тип элементов массива может быть любым допустимым типом в Pascal, кроме файлов (даже массивом).

Пример массива :

A = {1,-5,230,55,-88,0,100}

Когда описывается массив, его верхний индекс должен быть строго определён.

При описании массива идёт распределение памяти, и компилятор должен знать какое количество памяти нужно выделить под описанный массив.

Ограничения по количеству индексов в массиве Pascal не ограничивается. Однако сам массив не должен быть больше чем 65537 байт.

Массив также можно объявлять в разделе описания типов:

Type mass = array [1..100] Of real ;Var a,b,c : mass ;

Доступ к элементам массива осуществляется в цикле.

Наиболее рациональным способом обработки элементов массива в Паскаль является оператор цикла с параметром.

%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2.png

Как думаете почему? Да потому, что нам известно конечное число элементов в массиве.

Алгоритмы заполнения массива в Pascal

  1. Ввод элементов массива с помощью компьютера осуществляется с помощью такой конструкции :For i := 1 To 10 Doread(A[i]);
  2. Задание массива случайным образом.

    Массив можно задать случайным образом с помощью датчика случайных величин.

    Для запуска датчика случайных величин в Паскаль нужно прописать специальную конструкцию — Randomize;

    Новое значение генерируется с помощью функции Random(n) ,где n – целое число. В таком случае генерируется любое число с диапазоном от 0 до n.

    K := Random (100);
    Если функция Random используется без параметра, то она генерирует вещественное число (тип real) в диапазоне 0 < X < 1

    X := Random ;

Заполнение массива случайным образом

Данная конструкция в Pascal реализует заполнение массива случайно.

Randomize ;For i := 1 To 10 DoBegin A[i] := random*100-70 ; write(A[i]:6:2) ;End ;

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

Массив — самая распространенная структура хранения данных, присутствующая в любом языке программирования.

В Pascal используются одномерные и двумерные массивы. В школьной программе обычно их изучают в 9-10 классах.

Одномерный массив — это конечное количество однотипных элементов, объединенных общим именем. Каждому элементу присвоен свой порядковый номер. Обращение к элементам происходит по имени массива и индексу (порядковому номеру).

Код программы на Паскаль

Program massiv_random;
Var
i,n:integer;
m:array of integer;
Begin
write(Задайте количество элементов массива:);
readln(n);
SetLength(m,n);
randomize;
for i:=0 to n1 do
m[i]:=random(100)+1;
writeln(——————————-);
for i:=0 to n1 do
writeln(i+1, -й элемент массива = ,m[i]);
End.

Одномерный числовой массив

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

одномерный массив в паскалеОдномерный массив. Обозначение элементов

Имя массива формируется по тем же правилам, что и имя любой другой переменной в программе. Границы индексов задают при описании массива в квадратных скобках. Удобнее задавать начальный индекс равный единице. Конечный индекс определяется условием задачи и численно равен размеру массива — количеству элементов. Числовые массивы могут содержать целые и действительные числа. Тип элементов указывается в описании. Смотрите рисунок выше.

Задачи

  1. Прочитать с клавиатуры элементы массива. Вывести на экран те элементы, индексы которых нечетны.
  2. Записать в ячейки массива последовательность вида 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3…
  3. Заполнить массив случайными числами от 0 до 100 и вывести все элементы, которые лежат от 30 до 50.
  4. Заполнить массив случайными числами от 10 до 90 и вывести все элементы, которые лежат от 30 до 50.
  5. Ряд чисел образуется следующим образом. Сначала записывают числа 1 и 2. Каждое следующее число получается как сумма двух предыдущих. Вывести на экран первые 10 чисел ряда в порядке убывания.

Способы заполнения одномерных массивов

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

var i:integer; a: array[1..5] of integer; {определение одномерного массива из пяти целых чисел}

Ручной ввод данных

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

for i:=1 to 5 do read a[i]; {ручной ввод значений элементов массива с клавиатуры}

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

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

for i:=1 to 5 do a[i]:=random(10); {задаются случайные числа из интервала [0,10)}

Ввод данных по заданному правилу (формуле)

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

for i:=1 to 5 do a[i]:=i*i; {квадрат натурального числа — число, умноженное само на себя}

Ввод данных из текстового файла

Еще один способ получить данные — прочитать их из файла.

Подробнее про работу с файлами на Паскале читайте здесь.

Двумерные и многомерные массивы

Размерность массивом может быть разной. 

Двумерные хранилища и многомерные – это наборы, в которых хранятся переменные во втором или n-м измерении, имеющие n * m мест хранения. 

Размерные матрицы Mutli, включая 2-мерный набор, объявляются с использованием нескольких квадратных скобок, расположенных рядом друг с другом, или с использованием запятых с квадратными скобками в качестве альтернативы.

Двумерный массив можно рассматривать как прямоугольную сетку с двумя индексами, один из которых задает строку, а другой – столбец.

Пример двумерного массива

Например, календарь, подобный тому, что представлен на рисунке, можно рассматривать как двумерную таблицу, имеющую строки, известные как недели, и столбцы, известные как дни. Тем не менее, календарь так же можно рассматривать как набор массивов: месяц – это массив недель, а неделя – дней. 

В Паскале эта декларация записывается как единый блок:

TYPE DayType = INTEGER;

DayNames = (Sun, Mon, Tue, Wed, Thu, Fri, Sat);

WeekType = ARRAY [DayNames] OF DayType;

MonthType = ARRAY [1..6] OF WeekType;

Тип MonthType также может быть записан как:

TYPE MonthType = ARRAY [1..6] OF

ARRAY [DayNames] OF DayType;

Можно записать с использованием ярлыка, как:

Тип MonthType = ARRAY [1..6, DayNames] OF DayType;

DayNames = (Вс,Пн,Вт,Ср,Чт,Пт,Сб);

WeekType = ARRAY [DayNames] OF DayType;

MonthType = ARRAY [1..6] OF WeekType;

Другой пример двумерного массива в Pascal:

Задание двумерного массива

Константы.

В примере 4 число 20 встречается во многих местах программы. Если его вдруг придется изменить, то легко запутаться. По этой причине имеет смысл дать числу 20 некоторое имя, а затем использовать это имя в программе. Для таких задач в паскале предусмотрен еще один тип объектов – константы. Константы имеют имя и значение и в этом смысле очень напоминают переменные. Два важнейших отличия констант:

  • значения констант нельзя изменять в программе
  • константы можно использовать вместо чисел в квадратных скобках при описании массива, а переменные – нельзя.

Для описания констант предусмотрен специальный раздел, который начинается со слова const и располагается до тела программы.

const n=10; k=5;

Рассмотрим использование константы на примере.

Пример 5. Массив из 20 элементов заполнить случайными числами от 0 до 99 и найти количество двузначных чисел среди его элементов.

Решение.

constn=20;k=100;

var

a:array[1..n] of integer;

i,s:integer;

begin

randomize;

for i:=1 to n do a[i]:=random(k);

s:=0;

for i:=1 to n do if (a[i]>9) and (a[i]

writeln(s);

end.
Далее в задачах о массивах количество ячеек следует описывать как константу .

Задачи.

  1. Заполнить массив случайными числами от 0 до 100. Вывести элементы массива на экран. Вывести на экран количество элементов массива, лежащих между 20 и 30 и между 50 и 60.
  2. Заполнить массив случайными числами от 0 до 100. Вывести элементы массива на экран. Вывести на экран сумму элементов массива, расположенных после первого четного элемента.

Как задать массив в Паскале

Ввод

Массивы применяются в качестве обычных матриц для сбора и хранения типизированных компонентов. 

Ввести его можно с клавиатуры, вручную, набирая каждый элемент, или использовать циклы: For i:=1 to 20 do read (a[ i ]);

В приведенном ниже примере показано, как вводить набор «a», который состоит из 10 случайных чисел в диапазоне от 0 до 99. Он называется рандомным. 

Реализуется он с помощью функции Random:

For i:=1 to 10 do a[ i ]:=random(100);

Вывод, ввод массива в Паскале


Вывод

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

Пример: For i:=1 to 10 do write (a[ i ], ‘ ‘);

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

Вставка и удаление элементов массива.

массив

после удаления третьего элемента

Пример 7. Прочитать с клавиатуры число k. Удалить элемент массива с номером k

Решение. Нужно элемент с номером k+1 записать в ячейку с номером k, затем элемент с номером k+2 записать в ячейку с номером k+1 и так далее, пока не дойдем до конца массива. Пример показан на рисунке

Фрагмент программы для массива из n элементов приводится ниже:

readln(k);

for i:=k to n-1 do

a[i]:=a[i+1];

Пример 8. Прочитать с клавиатуры числа x и k. Вставить в массив число x после элемента с номером k.

Решение. Пусть в массив записано n-1 элементов. При этом массив состоит из n ячеек. Последняя ячейка пуста. Для вставки элемента нужно сначала сдвинуть все элементы массива, начиная с k+1-го элемента вправо. Затем в освободившуюся k+1 — ую ячейку можно записать число x.

Фрагмент программы, реализующий эти действия

readln(k,x);

for i:=n-1 downto k+1 do

a[i+1]:=a[i];

a[k+1]:=x;

Задачи.

  1. Удалить первый отрицательный элемент массива. Подсказка. Сначала определяем его номер. Затем применяем стандартный фрагмент программы.
  2. Вставить число 13 после первого четного элемента массива.
  3. (*) Удалить все отрицательные элементы массива. Подсказка здесь необходим вложенный цикл.
  4. (*)Вставить число 13 после каждого четного элемента массива.
  5. (**)Удалить все отрицательные элементы массива. Вложенный цикл и дополнительный массив не использовать
  6. (**)Вставить число 13 после каждого четного элемента массива. Вложенный цикл и дополнительный массив не использовать.

Задачи по вариантам.

  1. Удалить последний отрицательный элемент массива
  2. Удалить второй отрицательный элемент массива
  3. Удалить максимальный элемент массива.
  4. Прочитать с клавиатуры число k. Вставить в массив число 15 после k-1-го элемента
  5. Вставить число, равное первому элементу массива после его третьего элемента
  6. Вставить 0 после максимального элемента массива
  7. Вставить минимальный элемент массива после его третьего элемента.
  8. Удалить минимальный элемент массива
  9. Вставить в начало массива число, равное сумме его элементов
  10. Вставить в начало массива число, равное количеству его элементов
  11. Вставить после первого максимального элемента массива еще один такой же элемент

Задачи по вариантам на дом.

  1. Удалить все элементы массива, равные максимальному
  2. Повторить все четные элементы массива
  3. После каждого отрицательного элемента массива вставить его максимальный элемент
  4. Удалить все элементы массива, равные количеству его элементов
  5. Удалить все элементы массива, стоящие перед его нулевыми элементами.
  6. Удалить все элементы массива, стоящие после его нулевых элементов

Задача о сортировке массива.

Часто бывает необходимо поменять местами элементы массива таким образом, чтобы они были расположены в порядке возрастания или убывания. Например, последовательность чисел 2,13,5,1,8 привести к виду 1,2,5,8,13. Такая операция называется

сортировкой

массива. В отсортированном массиве проще найти нужный элемент (пример: классный журнал, в котором фамилии учеников расположены по алфавиту). Существует много алгоритмов сортировки массива. Самый простой реализуется

многократным

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

for i:=2 to n do

if a[i]

begin

s:=a[i];

a[i]:=a[i-1]; {меняем местами a[i] и a[i-1]}

a[i-1]:=s;

end;

Каждое повторение цикла приближает массив к упорядоченному по возрастанию. Если повторять этот цикл много раз, то в конце концов массив станет упорядоченным. Таким образом, этот фрагмент программы нужно поместить во внешний цикл. При этом удобно использовать цикл repeat…until. Разберемся, как организовать выход из внешнего цикла. Если массив упрядочился по возрастанию, при проходе цикла по j ни один обмен произведен не будет. В этом случае следует выйти из цикла repeat…until и выводить на экран отсоротированный массив. Удобно завести логическую переменную (тип boolean), которая равна false, если в цикле for не произведено ни одного обмена и true в противном случае. Назовем эту переменную changed. Фрагмент программы, сортирующей массив, приведен ниже.

repeat

changed:=false;

for i:=2 to n do

if a[i]

begin

s:=a[i];

a[i]:=a[i-1];

a[i-1]:=s;

changed:=true;

end;

until not changed;

Задачи по теме «Сортировка массива»



Запрограммировать задачу о сортировке по возрастанию

Переделать программу так, чтобы она упорядочивала элементы по убыванию.

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

Заполнить массив случайными числами, прочитать с клавиатуры число k и вывести на экран сумму k самых больших элементов массива.

Все четные элементы массива упорядочить по возрастанию. Нечетные элементы оставить на своих местах.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: