Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Пример 5.4. Заполнение массива с помощью генератора произвольных чисел.

Тема 5. Cтруктурированные типы данных. Линейные (одномерные) массивы

Понятие массива

 

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

 

МАССИВ - упорядоченная группа фиксированного количества переменных одного типа, имеющая общее имя. "Группа переменных" в данном смысле означает, что каждый элемент массива является переменной, для хранения значения которой в памяти отводится определенная область. "Упорядоченная" - означает, что переменные в массиве хранятся не хаотично, а в установленном порядке, по очереди. "Фиксированное количество" - означает, что количество переменных в массиве не бесконечно, оно ограничено определенным числом (размерностью массива), которое указывается при описании массива. "Одного типа" - означает, что переменные, входящие в массив, должны хранить данные одного типа (Real, Integer, Char, Boolean и т.д.), который называется типом элементов массива.

 

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

 

Линейные одномерные массивы (вектора данных)

 

Каждый элемент массива имеет свое имя, представляющее собой имя массива и стоящие за ним квадратные скобки, в которых указывается индекс элемента - целое число, равное порядковому номеру этого элемента в массиве. Таким образом, для ссылки на отдельный элемент массива необходимо указать имя массива, а затем в "[ ]" индекс (номер) элемента:

<имя массива>[<индекс>].

 

Например: A[1], B[14], Mas_2[12]. Кроме того, в качестве индекса можно использовать не только целое число, соответствующее порядковому номеру этого элемента в массиве, но и выражение целого типа. Например: A[5+6] или B[i+7] или Mas_2[i div k].

 

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

 

Var <имя массива>: array[<размерность>] of <тип элементов>;

 

К имени массива предъявляются те же требования, что и к имени переменной. Размерность - это диапазон целых чисел, каждое из которых является порядковым номером (индексом) одной из ячеек массива. Обычно диапазон индексов задают, начиная от единицы: [1..100]. Это удобно, но не является обязательным. Важно лишь, чтобы правая граница диапазона была больше или равна левой границы.

 

Пример 5.1. Описание линейных массивов.

 

const N=100; {раздел констант, в котором регистрируется константа N=100}

var m: array[1..20] of real; {массив из 20 ячеек}

m2: array[1..N] of integer; {массив из 100 ячеек}

A: array[-N..0] of integer; {массив из 101 ячейки}

 

 

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

 

Вводить и выводить значения из массивов возможно только поэлементно, и для этого используют в цикле операторы: Read, Readln, Write, Writeln и оператор присваивания.

 

Пример 5.2. Ввод/вывод массива (Readln/Writeln).

 

Ввод значений массива через оператор Readln, вывод заполненного массива с помощью оператора Writeln.

 

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

 

const n=20; {раздел констант, в котором регистрируется константа n=20}

var m: array[1..n] of real; {раздел описания переменных, в котором регистрируется массив m}

i: integer; {описание переменной i}

begin {начало раздела операторов}

for i:=1 to N do {арифметический оператор цикла}

begin {начало составного оператора}

write('Input m[',i,'] = '); {вывод на экран: Input m[1] =, Input m[2] = и т.д.}

readln(m[i]); {чтение введенного значения в 1, 2 и т.д. ячейку массива m}

end; {конец составного оператора}

for i:=1 to N do writeln('m[', i,'] = ', m[i]); {вывод введенного массива на экран столбиком}

readln; {ожидание нажатия клавиши Enter}

end. {конец программы}

 

 

Пример 5.3. Заполнение массива с помощью оператора присваивания.

 

Заполнение элементов массив A квадратами их индексов.

 

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

 

const n=20; {раздел констант, в котором регистрируется константа n=20}

var a: array[1..n] of integer; {раздел описания переменных, в котором регистрируется массив a}

i: integer; {описание переменной i}

begin {начало раздела операторов}

for i:=1 to N do a[i]:=i*i; {заполнение массива: a[1]:=1, a[2]:=4 и т.д.}

for i:=1 to N do write(a[i],' '); {вывод через пробел элементов массива на экран в строчку}

readln; {ожидание нажатия клавиши Enter}

end. {конец программы}

 

 

Кроме приведенных выше двух способов заполнения массива (с помощью оператора чтения и присваивания) существует еще один - с помощью генератора произвольных чисел. Для того, чтобы воспользоваться этим способом необходимо, первое - подключить генератор произвольных чисел с помощью команды randomize, второе - получить с помощью функции random произвольное значение. Команда randomize обычно указывается до применения функции random и вне цикла. Функция random работает следующим образом.

для получения случайного целого значения, используют функцию random с параметром:

random(N), которая возвращает произвольное значение из диапазона чисел: от 0 до N-1.

для получения случайного вещественного значения, используют функцию random без параметра: random, которая возвращает произвольное вещественное значение из диапазона чисел: [0,1).

 

Для большей наглядности приведем пример.

 

Пример 5.4. Заполнение массива с помощью генератора произвольных чисел.

 

Массив А заполняется целыми значениями из диапазона от -50 до 50, массив В вещественными числами из диапазона: [-50,50).

 

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

 

const n=10; {раздел констант, в котором регистрируется константа n=10}

var a: array[1..n] of integer; {раздел описания переменных, в котором регистрируется массив a}

b: array[1..n] of real; {регистрация массива b}

i: integer; {регистрация переменной i}

begin {начало раздела операторов}

randomize; {подключение генератора произвольных чисел}

writeln('Massiv A:'); {вывод на экран: Massiv A:}

for i:=1 to N do a[i]:=random(101)-50; {заполнение массива произвольными целыми значениями}

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

writeln; {пустой writeln - для разделения выводимых массивов пустой строкой}

writeln('Massiv B:'); {вывод на экран: Massiv B:}

for i:=1 to N do b[i]:=random(101)*random-50; {заполнение массива произвольными вещественными значениями}

for i:=1 to N do writeln(b[i]:11:7); {форматный вывод элементов массива на экран в стролбиком}

readln; {ожидание нажатия клавиши Enter}

end. {конец программы}

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...