Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический обзор по теме Одномерные массивы.pdf
Скачиваний:
16
Добавлен:
30.03.2015
Размер:
266.52 Кб
Скачать

программу при ее изменении и доработке, т.к. отпадет необходимость всегда помнить, что в массиве именно 40 элементов, а не какое-то другое количество.

Пример 1.2

Не используем описания типов.

Var x:array[1..4] of byte; z:string[10]; y:array[1..4] of Byte;

a:array[1..10] of string[10];

Присваивание x:=y при таком описании будет недопустимо.

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

Используем раздел type.

Type TArray = array[1..4] of byte; TName = string[10];

Var x:TArray; z:TName; y:TArray;

a:array[1..10] of TName;

Присваивание x:=y будет допустимо.

Массив – регулярный тип данных; совокупность пронумерованных однотипных элементов, имеющих общее имя.

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

Например, введем 30 целых чисел в диапазоне от 21 до 50 и объединим их общим именем А.

Получается таблица, состоящая из одной строки данных. Такие таблицы называются линейными.

 

 

 

Таблица 1. Пример линейной таблицы

1

2

3

2

3

А 21

 

 

9

0

22

23

49

50

Для хранения подобных таблиц используют одномерные массивы (векторы). Количество элементов в массиве всегда конечно.

Чтобы обратиться к отдельному элементу таблицы, надо указать индекс (номер). Например, элемент с индексом 3 равен 23.

Объявление одномерных массивов

Массив можно описать разными способами: 1. В разделе описания переменных

Var <имя массива>:Array [<тип индекса>] Of <тип элементов>;

Тип индекса – порядковый тип, кроме Integer. Часто используют интервальный тип (указывают допустимый диапазон значений). При указании диапазона начальный индекс не должен превышать конечный. Тип элементов массива может быть любым (стандартным или описанным ранее). Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.

2. В разделе описания типов

Type <имя типа> = Array [<тип индекса>] Of <тип элементов> ; Var <имя массива> : <имя типа> ;

3. В разделе констант (задание типизированной константы)

Const <имя массива>:Array [<тип индекса>] Of <тип элементов> = (<список элементов>);

Пример 1.3. Способы описания массивов.

1. Var А:Array [1..30] Of Byte;

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

Const NMax=30;

Var А:Array [1..Nmax] Of Byte;

2. Type TArray= Array [1..30] Of Byte;

Var A: TArray;

В результате описаний 1-2 на этапе трансляции программы будет выделена память под массив А размером 30 байт.

 

3. Const A:Array [1..30]

Of Byte=(21, 22, 23, 24, 25, 26, 27, 28, 29,

30,

31,

32,

33,

34,

35,

36,

37,

38,

39,

40,

41,

42,

43,

44,

45,

46,

47,

48,

49, 50);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В описании 3 происходит не только выделение памяти под массив А размером в

30 байт, но и выполняется присваивание элементам значений элементам массива.

4. Const A:Array[-2..2] Of Char =(‘1’,’2’,’3’,’4’,’5’);

В описании 4 задается массив из пяти элементов символьного типа. Индексы элементов массива меняются в пределах от -2 до 2. Массив содержит значения в диапазоне от ‘1’ до ‘5’.

При написании программы надо учитывать, что на хорошем выборе типов данных (в частности, индексов) можно сэкономить – получить более красивый, эффективный код, избавиться от «лишних» переменных и действий соответственно.

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

Описание массива может быть таким:

Var k:Array [1987..1993] Of Integer;

Для обращения к элементам массива надо указать имя массива, а затем в квадратных скобках – индекс элемента. Например, обращение к 3-му элементу массива: A[3]. Изменение значения пятого элемента: A[5]:=30;. Для элемента массива в квадратных скобках может стоять не только непосредственное значение индекса, но и выражение, приводящее к значению индексного типа: A[k], A[N-k+1].

Ввод, вывод элементов одномерного массива

Заполнение и вывод массива можно выполнять только поэлементно, т.е. необходимо организовать процесс с помощью цикла: сначала присвоить значение 1-му элементу, затем 2-му и т.д.; то же самое и с выводом на экран – сначала вывод 1-го элемента, затем 2-го и т.д.

Пример 1.5. Найти среднее арифметическое положительных элементов, вводимых с клавиатуры. Считаем, что хотя бы один положительный элемент имеется.

Program average;

Const N=30; {Максимальное количество элементов массива} Var A: Array[1..N] Of Integer; i,k,S:Integer;

Begin

{Ввод элементов массива с клавиатуры. N – количество элементов} For i:=1 To N Do Begin

Write (‘A[‘,i,']= '); Readln (А[i]);

End;

S:=0; {Сумма положительных элементов массива} k:=0; {Количество положительных элементов массива} For i:=1 To N Do

If А[i] > 0 Then Begin S:= S + А[i];

K:=K+1

End;

WriteLn ('Среднее арифметическое положительных элементов равно ',

S/k:10:4);

End.

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

1.Задание значений элементов с клавиатуры.

2.Задание с помощью генератора случайных чисел. Этот способ заполнения массива используется тогда, когда мы знаем закономерность распределения значений. Например, надо получить выигрышную комбинацию из 5 шаров, если номера шаров имеют значения от 1 до 36. При этом надо учесть, что все номера шаров должны быть разные.

3.Чтение из файла.

4.Заполнение массива, элементы которого связаны некоторой закономерностью.

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

Program init_rand;

Const Nmax=25; {максимальное количество элементов массива} Type Tarray= Array[1..Nmax] Of Integer;

Var A:Tarray; i,n:Integer; Begin

{Заполнение массива с помощью датчика случайных чисел} Write(‘Введите количество элементов массива: ’); ReadLn(n);

Randomize;

For i:=1 To n Do

А[i] := -10 + Random (21); {от -10 до 10} {Вывод на экран первых n элементов массива}

For i:=1 To n Do Write (А[i]:6);

end.

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

Program init_rand1;

Const NMax=50;

Type Mas = Array[1..NMax] Of Integer;

Var A:Mas; I, J, N:Byte; Fl:Boolean; Begin

Write('Введите N '); ReadLn(N); {количество чисел в массиве} randomize;

A[1] := -32768 + random(65535); {Значения от -32768 до 32767} For I := 2 To N Do

Begin

Fl := True; Repeat

A[i] := -32768 + random(65535); J := 1;

While Fl and (j <= i - 1) Do

Begin Fl := A[i] <> A[j]; j := j + 1 End Until Fl

End;

For i := 1 To N Do Write(A[i]:7); WriteLn

End.

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

Пример 1.8. Составить программу чтения значений элементов одномерного массива из текстового файла arr.dat и вывода их на экран. Количество элементов в файле заранее неизвестно, но не более 50.

Program init_file;

Const Nmax=50; {Количество элементов массива}

Var A:Array[1..Nmax] Of Integer; i,n:Integer; f:Text; Begin

{Чтение значений элементов одномерного массива из текстового файла} Assign (f,'arr.dat');

Reset (f); {Файл открывается для чтения} n:=0; {Счетчик количества элементов массива} While Not Eof (f) Do Begin

inc (n);

Read (f,А[n]);

End;