Урок из серии: «Язык программирования Паскаль»
Еще один пример Заполнение массива
После объявления массива с ним можно работать. Например, присваивать значения элементам массива и вообще обращаться с ними как с обычными переменными. Для обращения к конкретному элементу необходимо указать идентификатор (имя) массива и индекс элемента в квадратных скобках.
Например, запись Mas[2], A[10] позволяет обратиться ко второму элементу массива MAS и десятому элементу массива A. При работе с двумерным массивом указывается два индекса, с n-мерным массивом — n индексов.
Например, запись Matr[4, 4] делает доступным для обработки значение элемента, находящегося в четвертой строке четвертого столбца массива M.
Индексированные элементы массива называются индексированными переменными. За границы массива выходить нельзя. То есть, если в массиве Mas пять элементов, то обращение к шестому или восьмому элементу приведет к ошибке.
Рассмотрим типичные операции, возникающие при работе с одномерными массивами.
Заполнение одномерного массива значениями
Заполнение и вывод массива можно осуществить только поэлементно, то есть можно сначала присвоить значение первому элементу, затем второму и так далее, то же самое и с выводом на экран — выводим первый, второй, третий и так до последнего.
Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и значений производится поэлементно. Значения элементу массива можно присвоить с помощью оператора присваивания, или ввести с клавиатуры с помощью операторов Read или Readln. Очень удобно перебирать все элементы массива в цикле типа for.
Способы заполнения одномерных массивов:
- Ввод значения с клавиатуры.
- Задание значений в операторе присваивания с помощью генератора случайных чисел. Этот способ более удобен, когда много элементов в массиве (ввод их значений с клавиатуры занимает много времени).
- Задание значений по формуле.
- Ввод элементов массива из файла
1. Ввод значений элементов массива с клавиатуры. В связи с тем, что использовался оператор Readln, каждое значение будет вводиться с новой строки.
Procedure Init1(Var m : myarray); {Процедура заполнения (инициализации) массива с клавиатуры} Var i : Integer; {i - это переменная для работы с элементами массива} Begin Writen ('введите',n,'чисел'); For i:=1 To n Do {ввод массива с клавиатуры} Readln(m[i]); {чтение i-го элемента} End; |
2. Заполнение массива числами, сгенерированными случайным образом из интервала [a; b]. Подключаем датчик случайных чисел — функцию random.
Procedure Init2(a,b:integer; Var m : myarray); { Процедура заполнения массива случайными числами из интервала [a,b] и вывода на экран. a, b: границы интервала; m : массив. } Var i : Integer; Begin Randomize; {Инициализация генератора случайных чисел} For i:=1 To n Do begin m[i]:= a+random(b-a+1); write(m[i],' ') end; writeln; End; |
3. Заполнение массива по формуле. Каждому элементу массива присваивается значение, вычисленное по формуле. Если каждый элемент массива равен утроенному значению его порядкового номера (индекса), то процедура будет иметь вид:
Procedure Init3(Var m : myarray); {Процедура заполнения (инициализации) массива по формуле} Var i : Integer; {i - переменная для работы с элементами массива} Begin For i:=1 To n Do a[i]:= i*3; End; |
4. Чтение чисел из файла. Нужно заранее создать текстовый файл, в который запишите несколько строк, в каждой из которых по 30 чисел.
Procedure Init4(Var m : myarray); {Процедура заполнения (инициализации) массива из файла} Var i : Integer; {i - это переменная для работы с элементами массива} Begin Writen ('введите',n,'чисел'); For i:=1 To n Do {ввод массива из файла} Readln(f, m[i]); {чтение i-го элемента} End; |
Вывод значений элементов массива на экран
Вывод значений элементов массива на экран выполняется, как и ввод, поэлементно в цикле. Для вывода будем использовать операторы Write или Writeln. В качестве входных параметров будем передавать процедуре не только массив, но и количество элементов, которые надо вывести, начиная с первого (это понадобится нам, когда мы будем удалять и добавлять элементы в массиве).
Procedure Print(n: integer; m : myarray); {Процедура вывода массива на экран} Var i : Integer; Begin For i:=1 To n Do Write(m[i]:3); {вывод i-го элемента} Writeln; End; |
Пример 1. Заполнить массив с клавиатуры и вывести его на экран.
Решение.
В программе будет использоваться две процедуры: процедура Init1 (заполнение массива с клавиатуры) и процедура Print (вывод массива на экран).
Program primer1; Const n = 30; {n - это количество элементов массива } Type myarray = Array [1...n] Of Integer; Var A : myarray; s : Integer; {s - сумма элементов массива} Procedure Init1(Var m : myarrfy); Var i : Integer; {i - переменная для работы с элементами массива} Begin Writen ('Введите ',n,' чисел'); For i:=1 To n Do {ввод массива с клавиатуры} Readln(m[i]); {чтение i-го элемента} End; Procedure Print(m: myarray); Var i : Integer; Begin For i:=1 To n Do {вывод массива} Write(m[i]:3); {вывод i-го элемента} Writeln; End; Begin {main} Init1(A); {процедуре заполнения массива} Print(n, A); {вывод массива} Readln; End. |
Пример 2. Заполнить массив из текстового файла и вывести на экран. В текстовом файте несколько строк, в каждой строке по 30 чисел.
Решение.
Program primer2; Const n = 30; {n - это количество элементов массива } Type myarray = Array [1...n] Of Integer; Var A : myarray; F:text; Procedure Init4(Var m : myarray); {Процедура заполнения (инициализации) массива из файла} Var i : Integer; {i - это переменная для работы с элементами массива} Begin For i:=1 To n Do {ввод массива из файла} Readln(f, m[i]); {чтение i-го элемента} End; Procedure Print(m: myarray); Var i : Integer; Begin For i:=1 To n Do {вывод массива} Write(m[i]:3); {вывод i-го элемента} Writeln; End; Begin {main} {связываем файловую переменную с конкретным внешним файлом} Assign (F,'...'); Reset(F); {открываем его для чтения } While Not EOf (F) Do Begin Init3(A);{заполняем массив числами из текущей строки файла} Print(A) {выводим массив на экран} readln(F);{в файле переходим в начало следующей строки} End; Readln; End. |
Вы научились заполнять одномерный массив и выводить его на экран.
На следующем уроке продолжим знакомиться с алгоритмами обработки одномерных массивов.