Массивы. Понятие и описание массива. Алгоритмы работы с массивами

Страницы работы

4 страницы (Word-файл)

Содержание работы

Лекция А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.

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

Похожие материалы

Информация о работе