yandex rtb 1
ГоловнаЗворотній зв'язок
yande share

Основы программирования

6. МАССИВЫ

1. Массив (array) - это конечный набор элементов одного (базового) типа, которые сохраняются в последовательно размещённых ячейках оперативной памяти и имеют общее имя.

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

Общий вид конструкции описания типа массива такой:

array [<размер>] of <имя базового типа>;

Размер (количество элементов) массива чаще всего задают в виде диапазона или именем некоторого перечислимого типа данных.

Описать массив можно в разделе описания типов type, в разделе констант const или в разделе объявления переменных var. Имена типов массивов и переменных-массивов указывает пользователь.

Пример. Опишем тип массива mymasyv, объявим постоянный массив (массив-константу) zatraty типа mymasyv и переменные — массивы a, al типа mymasyv и массив b, состоящий из 7 элементов целого типа, массив с - из 100 элементов-символов.

type     mymasyv = array [1..10] of real;

day = (mon, tue, wed, the, fri, sat, sun);

const   zatraty: mymasyv - (1.2, 1, 1, 2, 8, 2.4, 8.7, 3, 7, 1.3);

var       a, al : mymasyv;

b : array[day] of integer;

с : array [1.. 100] of char;

Над массивами определена единственная команда присваивания. Например, команда

а := al все значения массива al присвоит соответствующим элементам массива а. Все остальные операции определены только над элементами массива. Доступ к элементам массива осуществляется так:

<имя массива>[<номер элемента>]

Номер (его часто называют индексом) записывают в квадрат­ных скобках, например, а[1] - первый элемент массива a, b[tue] -второй элемент массива b.

Пример. Элементам описанных выше массивов можно присвоить значения так:

а[1] := 15.1; b[tue] := 3; с[1] := 'а'; с[2] := ‘b’.

Элементы массива zatraty имеют такие значения:

zatraty[l] = 1.2; zatraty[2] = 1; ...; zatraty[lO] = 1.3.

Пример. Создать массив из первых ста положительных целых чисел и вычислить сумму всех его элементов можно так:

s := 0;

for і := 1 to 100 do

begin

a[i] := i;

 s := s + a[i]

 end;

writeln(s);

Задачи поиска в массиве конкретных данных решают методом сканирования всех элементов массива при помощи команд цикла for, while или repeat и команды ветвления, в которой указывают условие поиска.

Задача 1. Пусть уk - это число вызовов, которые-поступают на АТС за k-тую секунду. Предположим, что уkслучайное число со значением от 0 до 6, которое генерируется формулой yk = trunc(abs(7sin(k))). Создать массив у с десятью элементами (k = 1, ..., 10). Вычислить количество вызовов за первые 10 секунд работы АТС и максимальное количество вызовов, которые поступили за одну секунду. Вывести результаты вычислений.

program ATS;

uses Crt;

type     vyzov = array [1..10] of integer;

var      у : vyzov;

max, s, і : integer;

begin

clrscr;

max := 0; {Предполагаем, что max = 0}

s := 0;

for і := 1 to 10 do

begin                                                             {Вычисляем количество вызовов}

y[i] := trunc(abs(7 * sin(i)));                                                  {за і-тую секунду}

write(‘Количество вызовов за ‘, і, ‘-тую секунду: ‘);

writeln(y[i]:5);         {Выводим это количество}

s := s + y[i];            {Вычисляем количество вызовов}

{Вычисляем max значение]

if y[i] > max then max := y[i];

end;

writeln(‘Количество вызовов за 10 секунд = ‘, s:3);

write(‘Максимальное количество вызовов за одну  ‘);

writeln(‘секунду = ‘, mах:3);

 readln

end.

Замечание. Случайное целое число со значением от 0 до 6 можно получить также с помощью функции random(7). В начале выполняемого блока следует записать вызов процедуры randomize (она обеспечивает разные последовательности случайных чисел во время повторного выполнения программы).

Задание 1. Модифицируйте программу ATS, используя функцию random, и определите, за какую секунду поступило максимальное количество вызовов.

Задание 2. Решите задачу № 9 своего варианта.

Задача 2. Создать массив у, элементы которого вычисляют по формуле yk= ln(k) - 3, где k = 1, 2, ..., 10. Построить массив g, состоящий из отрицательных элементов массива у. Вывести результаты вычислений на экран. Если искомых величин нет, то вывести соответствующее сообщение.

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

program DvaMassiva;

uses Crt;

var       у, g : array [1..10} of real;

k, n : integer;

begin

clrscr;

n := 0; {Сначала количество элементов в g = 0}

for k := 1 to 10 do

begin

y[k] := ln(k) - 3;

if y[k] < 0 then                                  {Проверяем условие }

 begin

{Увеличиваем количество элементов вектора g}

 n :== n + 1;

g[n] := y[k];     {Определяем п-ый элемент}

 end;

writeln(‘y(‘ , k,’)=’, y[k]:7:2);

end;

if n = 0 then

writeln(‘B массиве у отрицательных элементов нет’)

else

for k := 1 to n do                               {Выводим массив g}

writeln(‘g[‘ , k , ‘ ]=’, g[k]:7:2);

readln

end.

Задание 3. Решите задачу № 10 своего варианта.

\

2. Двумерные массивы. Двумерные массивы предназначены для работы с табличными данными. В двумерном массиве элементы определяются именем массива и двумя индексами: первый индекс указывает на номер строки, а второй - на номер столбца, на пересечении которых находится элемент. Например, р[1, 2] — второй элемент первой строки массива р.

Рассмотрим примеры объявления массива-константы bal, который состоит из 2 строк и 4 столбцов, массива sutki, содержащего 24- 60 элементов целого типа, двухмерного массива р размера 9 на 9 (т.е. с 9- 9=81 элементом).

const n = 9;

bal: array [1..2, 1..4] of integer=((4, 3, 5, 3), (4, 4, 5, 3));

var       sutki: array [0..23] of array [0..59] of integer;

p : array [l..n, l..n] of integer;

Элементы массива bal принимают такие значения:

bal[l, 1] = 4, bal[l, 2] = 3, ..., bal[2, 3] = 5, bal[2, 4] = 3.

Значения элементам массива sutki можно задать командой присваивания двумя способами:

sutki[16][30] := 5 или sutki[16,30] := 5.

Задача 3. Составить программу для построения таблицы умножения двух чисел (таблицы Пифагора) и занесения её в двумерный массив р. Вывести массив на экран в виде таблицы.

program Pifagor;

uses Crt;

const n = 9; '

var       p : array [l..n, l..n] of integer;

i, j : integer;

begin

clrscr;

for і := 1 to n do

begin

for j := 1 to n do

begin

p[i, j] :- і * i;

write(p[i, j] : 6)

end;

writeln        {Обратите внимание на команды вывода}

 end;               {массива в виде таблицы}

 readln

end.

Задача 4. Для изготовления пяти сортов конфет на кондитерской фабрике используют пять видов сырья. Пусть нормы затрат аij каждого вида сырья і на производство 1 кг конфет сорта j заданы формулой аij = 2|sin(i)| + j , і, j = 1,…,5. Вывести на экран

таблицу затрат сырья (то есть массив а). Определить, для какого сорта конфет (imin) необходимо минимальное количество сырья (min) третьего вида.

program Fabrika;

uses Crt;

type     zatraty = array [1..5, 1..5] of real;

var       i, j, imin : integer;

min : real;

a : zatraty;

begin

clrscr;

writeln(‘ Вид сырья’);

writeln(‘              1     2     3     4      5’);

for і := 1 to 5 do          {Создаём таблицу затрат}

begin

write(i, ‘ сорт’);

for j := 1 to 5 do

begin

a[i, j] := 2 * abs(sin(i)) + j;

{Выводим элементы і-ой строки}

write(a[i, j]:7:2);

end;

writeln                                    {Переходим на новую строку}

end;

{Предполагаем, что минимальное количество}

imin := 1;         {сырья третьего вида необходимо для}

min := а[1, 3]; {производства конфет первого сорта}

for і := 2 to 5 do

if a[i, 3] < min then

begin {Определяем искомый сорт конфет}

min := a[i, 3];

 imin := і

end;

writeln(‘Меньше всего сырья третьего вида ‘);

write(‘необходимо для производства конфет ‘);

writeln( imin, ‘ сорта’);

readln

end.

Замечание. Пусть задана матрица aij, i, j = 1, 2, ..., п. Тогда выражения і = j, і < j и і > j определяют соответственно элементы главной диагонали, элементы над главной диагональю и элементы под главной диагональю этой матрицы.

Задание 4. Решить задачу №11 своего варианта.

Задача 5. Задан массив b, элементы которого вычисляются по формуле bij = і + j2, где

і, j = 1, 2, ..., 5. Создать и вывести массив у, состоящий из элементов массива b, значение которых больше 20. Определить количество элементов массива у. Массив b вывести в виде матрицы 5x5. Если искомых данных нет, вывести соответствующее сообщение.

 

program Massiv5x5;

uses Crt;

type     massiv= array [1..5, 1..5] of real;

newmas= array [1..25] of real;

var       b : massiv;

у : newmas;

 i, j, k : integer;

begin

clrscr;

k := 0; (Сначала k (количество bij>20) =0}

writeln(‘Выведем матрицу b’);

for і := 1 to 5 do

begin

for j := 1 to 5 do

begin

b[i, j] := і + j * j;

{Выводим элементы і-ой строки}

write(b[i, j]:7:2);

if b[i, j] > 20 then

begin

k :=k + 1;                    {Определяем k-ьш}

y[k] := b[i, j];              {элемент массива у}

end;

       end;

writeln;

end;

if k = 0 then write(‘B массиве нет элементов >20’)

else

begin

writeln(‘Выведем созданный массив’);

for і :=.! to k do writeln(y[i]:7:2);

writeln(‘Количество элементов массива у =’, k:2);

end;

        readln

end.

Задание 5. Решите задачу № 12 своего варианта.

 

 

12