Лекция А1
Mассивы
1.Понятие массива
Достаточно часто возникает задача многократной обработки какой-то последовательности данных. Для того, чтобы облегчить
Вам решение такого рода задач, существует тип данных, называемый
МАССИВОМ. В общем случае,
МАССИВ - это УПОРЯДОЧЕННАЯ последовательность данных ОДНОГО ТИПА.
В памяти компьютера массив можно представить в виде последовательности блоков памяти, имеющих одно имя, и отличающихся каким-то признаком (назовем этот признак "индексом" или "порядковым номером"). Например, массив с именем DAY, состоящий из 16
элементов, представляется следующим образом:
DAY - имя массива
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 - номер
Элемента
Доступ к каждому элементу массива осуществляется по его индексу (порядковому номеру). Например, 5-ый элемент массива DAY
в программе записывается как DAY[5], 7-ой - как DAY[7] и т.д.
Обратите внимание на то, что индексы указываются после имени массива в КВАДРАТНЫХ скобках.
2. Описание массива.
Прежде, чем работать с массивом, его нужно описать, т.е.
включить в блок Var такую запись:
<Имя> : array[<первый_элем>..<последн_элем>] of <Тип>
Например, строка var Mas : array[1..17] of Real;
описывает массив из 17 элементов, имеющих порядковые номера (индексы) с 1,2,... 17, а строка Var Mas1 :array[0..15] of Integer;
описывает массив из 16 целых чисел с номерами 0, 1, ... 15.
В общем случае в языке Pascal в качестве индексов может выступать последовательность элементов любого перечислимого типа (т.е. такого типа данных, для каждого элемента которого известен предыдущий и/или последующий. Под такой тип явно не подходит тип REAL (какое число предшествует числу 1.2?) и тип
String). Конечно, чаще всего используются числовые индексы.
Рассмотрим несколько примеров описания массивов, имеющих индексы, отличные от числовых:
var sign:array['a'..'z'] of byte;
а1:array[0..15] of real;
...
Как уже отмечалось, обращение к отдельному элементу массива происходит так же, как и к элементу строки: после имени массива в квадратных скобках указывается номер нужного элемента.
Например, запись a:=Mas[11]
означает, что переменной a будет присвоено значение, взятое из
11-го элемента массива Mas, запись a := Mas[n] означает, что следует взять элемент массива Mas с номером, хранящимся в переменной n, и занести значение этого элемента в переменную a. И, наконец, Mas[3]:=5; означает, что 5-ому элементу массива присвоено значение 5.
Обращение к элементу массива, имеющего нечисловой индекс, осуществляется аналогично: m:=sign['f']; sportsman[girl]:=12.5;
words['ж']:='э';
3. Алгоритмы работы с массивами.
Задача 1.
Составить программу, в которой вводится произвольный набор из
15 целых чисел и выводится на на экран в обратном порядке.
Текст программы:
Program Example1;
Var Mas : array[1..15] of Integer;
i : Integer;
begin
WriteLn('Введите 15 чисел');
For i:=1 to 15 do
begin
Write('Число ',i,' = ');
ReadLn(Mas[i]);
end;
WriteLn('Вот они в обратном порядке');
For i:=15 downto 1 do Write(Mas[i],' ');
ReadLn;
end.
Задача 2.
Имеется какой-либо раствор, состоящий из заданного числа компонентов (например, французские духи состоят не менее чем из
50 компонентов). Определить процентное содержание каждой из компонент в растворе, если известен лишь вес каждой компоненты.
Пояснение к решению.
Задача решается достаточно просто: следует определить общий вес всей смеси (обозначим его Sum), а затем вес каждой компоненты поделим на Sum и умножим на 100 - и получит процентное содержание каждой компоненты в растворе. Если обозначить процентное содержание i-ой компоненты за Pi, а вес компоненты Vi, то формула определения процентного содержания i-ой компоненты раствора будет выглядеть следующим образом:
Vi
Pi=----*100
Sum
Текст программы:
Program Example2;
Var
V : array[1..50] of Real;
Sum : Real;
i,n : Integer;
begin
Sum := 0;
WriteLn('Сколько компонентов вошло в смесь (не более 50)?');
ReadLn(n);
WriteLn('Вводите массы, нажимая <Enter> после каждой.');
For i:=1 to n do
begin
ReadLn(V[i]); {Ввод i-ого элемента массива}
Sum := Sum + V[i] {Вычисление общего веса смеси}
end;
WriteLn('Вот рецепт:');
For i:=1 to n do
Write('Элемент ',i,' - ',V[i] / Sum * 100 : 5 : 1,'%');
ReadLn
end.
Задача 3.
Для заданной функции вычислить массив n ее значений в равностоящих точках интервала [a,b]. Вывести на экран таблицу функций. Построить новый массив А в котором Y1(i)= Y(i-1), т.е. в Y1 записывается элемент из Y, но с номером на 1 меньшим.
Program Function;
var
X,Y:array [0..20] of real;
Y1:array [1..20] of real; {ограниченный тип}
n,i:integer;
a,b,h:real;
begin
writeln('Введите начальное значение интервала а');
readln(a);
writeln('Введите конечное значение интервала b');
readln(b);
writeln('Введите количество разбиений интервала n, число не большее 20');
readln(n);
h:=(b-a)/n; {шаг разбиения х}
for i:=0 to n do {построение массивов X и Y}
begin
x[i]:=a+i*h;
y[i]:=2*sqr(x[i]);
Writeln('x=',x[i]:0:2, 'y=',y[i]:0:2);
end;
for i:=1 to n do {построение массива Y1}
begin
y1[i]:=y[i-1];
Writeln('y1[',i,']=',y1[i]:0:2);
end;
end.
Задача 4.
Составьте программу определения частоты использования английских букв в введенном тексте.
Пояснение к решению.
Задача достаточно проста: достаточно сосчитать общее количество букв в тексте, затем сосчитать количество букв а,
b,...,z, а затем определить процентное содержание каждой из этих букв в тексте.
Текст программы:
Program Chastota;
Const signs=['a'..'z']; {это - множеств русских букв}
Var speed:array['a'..'z'] of real;
i:byte;
c:char;
speech:string;
begin
for c:='a' to 'z' do speed[c]:=0; {начальные значения количества каждой из букв}
WriteLn('Введите текст:'); ReadLn(speech);
For i:=1 to length(speech) do
if speech[i] in signs then
speed[speech[i]]:=speed[speech[i]]+1;
{После выполнения этого цикла в массиве speed будет храниться количество каждой из английских букв, имеющейся в данном тексте}
{Теперь осталось вычислить общее количество букв в тексте без разделителей! И определить частоту использования букв.
Выполните это самостоятельно}
end.
Внимательно разберите все программы, убедитесь, что каждая строка понятна.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.