logo

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

Предположим, что массив уже описан в программе. Например:

Const n=15;

Type Massive=array[1..n] of integer; {Определение типов ‘TYPE’}

Var {Описание переменных}

a: array [0..8] of string[20];

b, с : array [10..n+5] of real;

d: Massive;

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

  1. Способ последовательное присваивание элементам массива соответствующий значений.

Фрагмент программы:

Const n=10;

Var

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

Begin

a[2]:=-4,a[4]:=-6; a[5]:=10; a[9]:=-12;

В результате в соответствующие ячейки ленточки ‘a’ заносятся нужные значения, а остальные элементы по-прежнему равны нулю:

-4

0

-6

10

0

0

0

-12

0

t[2]

t[3]

t[4]

t[5]

t[6]

t[7]

t[8]

t[9]

t[10]

Eсли в массиве много элементов, но не вводить же 50 элементов массива пятьюдесятью операторами присваивания!

  1. Способ ввода массива с клавиатуры.

Стандарт ввода массива Aиз n элементов:

For i:= 1 to n do Begin

Write(‘a[‘,i,’]=?);

Readln(a[i]);

End;

В результате запрашивается последовательно элементы массива a[1]=?, a[2]=?, …a[n]=? Этот способ ввода хорош тем, что пользователь видит элементы, которые вводит. Но, ошибившись с вводом одного элемента, он вынужден продолжать ввод, пока не закончится цикл. Далее, при повторном запуске программы пользователю придется вновь вводить те же самые элементы. Поэтому предпочтительнее последующие способы ввода.

  1. Способ ввода массива, заданного формулой.

Этот способ ввода наиболее прост, удобен, но реализуется он редко из-за того, что в нашем мире мало что происходит по формулам. Введем массивы А, В, С, D такие, что:

A – массив заглавных латинских букв;

B – массив четных байтовых чисел;

C – массив степеней двойки от нулевой до двадцатой;

D – массив, где каждый элемент равен синусу его номера, а номера не превосходят 100.

Соответствующий фрагмент программы:

Var i: byte; t :LongInt;

a: array [1..26] of Char;

b: array [0..50] of Byte;

c: array [0..20] of LongInt;

d: array [0..100] of Real;

Begin

For i:=1 to 26 do a[i]:=chr(i+64);

For i:=0 to 50 do b[i]:=2*i;

t:=1; c[0]:=1;

For i:=1 to 20 do begin

t:=t*2; c[i]:=t;

end;

For i:=0 to 100 do d[i]:=sin(i);

Заметьте, во-первых, что ASCII – коды заглавных латинских изменяются от 65 до 90, что и позволяет реализовать формулу a[i]:=chr(i+64);. Во-вторых, степени двойки накапливались в целочисленной ячейке t, что чуть более громоздко, чем реализация формулы b[i]:=exp(i*ln(2)), но зато получается результат целого, а не вещественного типа.

  1. Способ ввода массива через типизированные константы.

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

Constn=10;

TypeMassive=array[1..n]ofReal;

Const

a: Massive=(-2,0,8,9,5,-9,2,0,6,-7);

Теперь в программе вполне можно использовать массив а[i] из 10 элементов с начальными значениями a[1]:=-2.0, a[2]:=0.0… Если мы изменим количество элементов в большую или меньшую сторону, то вырезаемая в структуре TYPE-CONST ленточка окажется или слишком большой, или слишком маленькой для восьми перечисляемых чисел. В результате ЭВМ сообщениями об ошибках либо предложит добавить числа в перечень, либо выбросить из него последние числа. Это снижает универсальность ввода.

  1. Способ ввода массива через генератор случайных чисел.

Если конкретные значения элементов массива не играют роли, то можно позволить себе ввести их случайным образом. Для этого необходимо знать: 1) Тип элементов массива, 2) Примерный диапазон их возможных значений.

Генерация случайных чисел осуществляется с помощью функций Random или Random(N). В первом случае генерируется случайное ВЕЩЕСТВЕННОЕ число от 0 до 1. Если умножить Random на число N, то будет получено случайное ВЕЩЕСТВЕННОЕ число от 0 до N. Функция Random(N) производит генерацию случайного ЦЕЛОГО числа от 0 до N.

Пример. Сгенерируем 10 случайных целых чисел, заключенных на отрезке от 0 до 100:

Program Random_Int;

Uses CRT;

Var

i: byte;

Begin

{ Randomize; }

For i:=1 to 10 do Write(Random(100),’ ‘);

Writeln;

Repeat Until KeyPressed;

End.

Результат работы программы:

0 3 86 20 27 67 31 16 37 42

Запустим программу еще раз. Вновь получим ряд чисел:

0 3 86 20 27 67 31 16 37 42

Следовательно, о случайности производимых чисел можно говорить лишь с некоторой приближенностью, ибо программа генерации этих чисел каждый раз производит одни и те же числа. Но если убрать фигурные скобки вокруг слова Randomize, тогда процедура изменения программы генерации случайных чисел Randomize уже будет запускаться при исполнении программы, меняя результат:

6 47 70 17 41 40 70 80 50 35

И еще раз:

4 16 21 3 29 60 74 33 73 32

Если требуется получить случайные числа x, принадлежащие отрезку [a,b], можно воспользоваться формулами:

x:=a+Random(b-a) - для целых чисел;

x:=a+(b-a) *Random- для вещественных чисел;

В приведенных соотношениях генератор случайных чисел в первую очередь масштабируется по длине отрезка (b-a), а потом результат сдвигается на а.

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4