Янв
15th

Урок 21. Заполнение массива и вывод на экран

Урок из серии: “Язык программирования Паскаль

После объявления массива с ним можно работать. Например, присваивать значения элементам массива и вообще обращаться с ними как с обычными переменными. Для обращения к конкретному элементу необходимо указать идентификатор (имя)  массива  и индекс элемента в квадратных скобках.

Например, запись Mas[2], A[10] позволяет обратиться ко второму элементу массива MAS  и десятому элементу массива A. При работе с двумерным массивом указывается два индекса, с n-мерным массивом – n индексов.

Например, запись Matr[4, 4] делает доступным для обработки значение элемента, находящегося в четвертой строке четвертого столбца массива M.

Индексированные элементы массива называются индексированными переменными. За границы массива выходить нельзя. То есть, если в массиве Mas  пять элементов, то обращение к шестому или восьмому элементу приведет к ошибке.

 

Рассмотрим типичные операции, возникающие при работе с одномерными массивами.

 

Заполнение одномерного массива значениями

Заполнение и вывод массива можно осуществить только поэлементно, то есть можно сначала присвоить значение первому элементу, затем второму и так далее, то же самое и с выводом на экран – выводим первый, второй, третий и так до последнего.

Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и значений производится поэлементно. Значения элементу массива можно присвоить с помощью оператора присваивания, или  ввести с клавиатуры с помощью операторов Read или Readln. Очень удобно перебирать все элементы массива в цикле типа for.

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

  1. Ввод значения с клавиатуры.
  2. Задание значений  в операторе присваивания с помощью генератора случайных чисел. Этот способ более удобен, когда много элементов в массиве (ввод их значений с клавиатуры занимает много времени).
  3. Задание значений по формуле.
  4. Ввод элементов массива из файла

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.

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

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

 

Поделиться с друзьями


Оставить комментарий или два