Лабораторная работа № 5
Цель работы: овладеть практическими навыками работы с массивами, вводом, выводом их значений, закрепить навыки по организации программ циклической структуры.
Массивами пользуются тогда, когда необходимо обработать большой набор однотипных данных. Массив в языке Паскаль – это набор фиксированного числа некоторых значений, которые называются компонентами (элементами). Все компоненты должны быть одного типа, который называют типом элементов или базовым типом. Каждый элемент массива имеет свой порядковый номер (индекс). Каждому конкретному массиву пользователь в своей программе дает имя, которое называют полной переменной. Каждый элемент массива обозначается полной переменной, и в квадратных скобках указывается номер этого элемента в массиве. Например, a[2] – элемент массива а, который стоит на втором месте; b[i + k – 1] – элемент массива b, который стоит на i + k – 1 месте. Количество элементов в массиве определяет его размер.
Количество индексов каждого элемента массива определяет размерность массива. Если каждый элемент массива имеет только один индекс, то такие массивы называются одномерными. Если каждый элемент массива имеет два индекса, то такие массивы называют двумерными. Данные типа массив относятся к классу структурных данных.
Объявление одномерного массива в программе Одномерный массив объявляется в программе двумя способами:
1 способ:
Var имя_массива : Array [n..m] Of тип_элементов; 2 способ:
Type имя_типа=Array [n..m] Of тип_элементов; Var имя_массива : имя_ типа;
Слова Type (тип), Array (ряд), Of (из) – служебные слова. Имя типа и имя массива дает пользователь. В квадратных скобках указывается интервал изменения индексов элементов массива, поэтому n, m обязательно должны быть константами порядкового типа. Тип элементов называется базовым типом массива и может быть любым типом языка ПаскальАВС, кроме файлового типа.
Пример 1. Составьте блок-схему (рис. 8.1) и напишите программу решения следующей задачи: с клавиатуры вводятся n <= 50 вещественных чисел. Найдите сумму отрицательных элементов данного массива.
Program Primer_1;
Type mas = Array[1..50] of Real;
Var a:mas; s:Real; i,n:Integer;
Begin
Writeln('Ввести размер массива, т.е. количество элементов массива');
Readln(n);
{Ввод самих элементов массива с клавиатуры}
For i:=1 to n do
Begin
Writeln('Ввести a[',i,']'); Readln(a[i]);
End;
{Вывод элементов массива на экран: все элементы в одну строку}
Writeln('Массив a:');
For i:=1 to n do Write(a[i]:6:2); Writeln;
{Вычисление суммы} s:=0;
For i:=1 to n do if a[i]<0 then s:=s+a[i];
{вывод ответа} Writeln('Сумма=',s:8:2); End.
В языке ПаскальABC можно получать числа с помощью функции случайных чисел Random. Применяя функцию в разных видах, можно получить число из заданного интервала. В таблице приведены некоторые варианты записи функции случайных чисел.
Изучая варианты, представленные в табл. 8.1, можно сделать вывод, что в общем случае существуют только два выражения a + Random(b – a) для получения последовательности целых чисел и a + (b – a)*Random для получения случайных последовательностей действительных чисел в диапазоне [a, b). Варьируя a и b, можно получить все желаемые диапазоны.
Элементы массива можно задавать с помощью функции случайных чисел.
Рис. 8.1. Блок-схема к примеру 1
Таблица 8.1
Тип |
Формат |
Промежуток |
Выражение, содержащее функцию Random |
Целое |
Положительное |
[a, b) |
a + Random(b – a) |
Отрицательное |
[a, b) |
–(a + Random(b – a)) |
|
Целое со знаком |
[a, b) |
(a + Random(b – a)) – (a + Random(b – a)) |
|
Действительное |
Положительное |
[0, 1) |
Random |
Положительное |
[a, b) |
a + (b – a)*Random |
|
Действительное со знаком |
[a, b) |
(a + (b – a)*Random) – (a + (b – a)*Random) |
Пример 2. Составьте блок-схему (рис. 8.2) и напишите программу решения следующей задачи:
одномерный массив, который содержит не более 20 вещественных чисел, задайте с помощью функции случайных чисел. Найдите номер последнего элемента, кратного данному числу х. Если таких элементов нет, выведите об этом сообщение.
Решение. Будем по порядку просматривать все элементы массива. Как только найдется элемент, который делится на х без остатка, необходимо зафиксировать его номер в массиве. Для этого введем переменную m, в которой сохраним номер найденного элемента.
Чтобы зафиксировать, нашелся или нет элемент в массиве кратный х, введем переменную k. Этой переменной перед просмотром всех элементов массива дадим значение, например, True. Когда найдется нужный элемент, то значение переменной k поменяем на False. Если же в массиве нужных элементов не найдется, то переменная k не изменит свое значение и останется равной True. Такие переменные в программе называются флажками, дополнительными переменными, флюгерами.
Program Primer_2;
Type mas=Array[1..20] of Integer;
Var a:mas; i,n,m,x:Integer; k:Boolean;
{k – необходима для вывода сообщения, что искомых чисел нет} Begin
Writeln(‘Ввести число х’); Readln(x);
Writeln('Ввести размер массива'); Readln(n);
{Ввод элементов массива с помощью функции случайных чисел}
For i:=1 to n do a[i]:=Random(100); {Вывод элементов массива на экран}
Writeln('Массив a:');
For i:=1 to n do
Write(a[i]:8:2);
Writeln; {Решение задачи} k:=True;
m:=0;
For i := 1 to n do
If a[i] mod x=0 Then begin m:=i; k:= False; end;
{Вывод ответа на экран}
If k=True Then Writeln('элементов кратных’, х,’ нет')
Else Writeln('Последний элемент кратный ‘,x,’=',a[m]:8:2,' его номер=',m); End.
Рис. 8.2. Блок-схема к примеру 2
Пример 3. Составьте блок-схему (рис. 8.3) и напишите программу решения следующей задачи:
одномерный массив х, который содержит не более 40 вещественных чисел, задайте с помощью функции случайных чисел. Для каждого элемента массива х вычислите значение y = (x2 + 5x – 6) / (x2 + 4) и составьте из значений у другой массив.
Program Primer_3;
Var x,y: Array[1..40] of Real; i,n,m:Integer;
Begin
Writeln('Ввести размер массива');
Readln(n);
{Ввод элементов массива с помощью функции случайных чисел}
For i:=1 to n do x[i]:=100*(Random-Random);
{Вывод элементов массива х на экран}
Writeln('Массив x:');
For i:=1 to n do
Write(x[i]:8:2);
Writeln;
{Составление массива у и одновременно вывод этого массива на экран}
Writeln('Массив y:'); For i:=1 to n do Begin
y[i]:=(x[i]*x[i]+5*x[i]-6)/(x[i]*x[i]+4);
Write(y[i]:8:2); End;
End.
Поскольку в задачах с использованием массивов всегда нужно вводить элементы массива и этот массив на экран, создадим процедуры ввода элементов массива и вывода на экран. Этими процедурами будем пользоваться во всех остальных программах.
Пример 4. Составьте блок-схему (рис. 8.5) и напишите программу решения следующей задачи:
одномерный массив х, который содержит не более 40 вещественных чисел, задайте с помощью функции случайных чисел. Найдите максимальный по величине элемент и укажите его номер в массиве.
Решение. Решение задачи разобьем на несколько частей:
1. Ввод элементов массива.
2. Вывод элементов массива на экран.
3. Нахождение максимального элемента и вывод его на экран.
Каждую из этих частей можно представить как процедуру пользователя. В основной программе нужно будет записать только обращение к этим процедурам в перечисленном порядке.
Максимальный элемент будем находить следующим образом:
1. Сначала за максимум примем первый элемент массива (зафиксируем это так: max := a[первый]) и зафиксируем его номер в переменной nom := 1.
2. Затем каждый следующий элемент массива будем сравнивать с тем, который находится в ячейке max. Если элемент массива больше того элемента, который находится в ячейке max, то значение ячейки max меняем на значение большего элемента и значение ячейки nom также меняем на номер этого большего элемента.
3. После просмотра всех элементов массива в ячейке max будет находиться самый большой элемент, а в ячейке nom – его номер.
Блок-схемы изображаются отдельно для каждой части задачи.
Рис. 8.3. Блок-схема к примеру 3
в) г)
Рис. 8.5. Блок-схема к примеру 4:
а – блок-схема задания элементов массива;
б – блок-схема вывода элементов массива на экран;
в – блок-схема нахождения максимального элемента в массиве; г – блок-схема основной программы
Program Primer_4; {Раздел объявлений}
Type mas=Array[1..40] of Real;
{Процедура ввода элементов массива}
Procedure Wwod(k:Integer; Var c:mas);
{k – входной формальный параметр, который обозначает количество элементов в массиве, с – выходной формальный параметр, который обозначает массив} Var i:Integer; {i – локальный параметр}
Begin
For i:=1 to k do
c[i]:=100*(Random-Random); End; {Процедура вывода элементов массива на экран}
Procedure Wuwod(k:Integer; c:mas);
Var i:Integer;
Begin
Writeln('Массив :');
For i:=1 to k do
Write(c[i]:6:2); Writeln;
End;
{Процедура поиска максимального элемента в массиве}
Procedure Poisk(k:Integer; c:mas);
Var i:Integer; max:Real; Begin max:=c[1]; nom:=1;
For i:=1 to k do If max<c[i] Then Begin max:=c[i]; nom:=i; End;
Writeln('Максимальный элемент=',c[nom]:6:2,'его номер=',nom:3); End;
{Основная программа }
Var a:mas; n:Integer; {a, n – фактические параметры} Begin
Writeln(‘Ввести количество элементов массива’);
Readln( n );
Wwod(n,a); Writeln(‘Исходный массив’);
Wuwod(n,a); Poisk(n,a); End.
Пример 5. Составьте блок-схему (рис. 8.6) и напишите программу решения следующей задачи:
дан одномерный массив, который содержит не более 60 символов. Ответьте на вопрос, какой символ встречается в данном массиве чаще других.
Решение. Решение задачи будет состоять из следующих частей:
1. Ввод элементов массива.
2. Вывод элементов массива на экран.
3. Подсчет, сколько раз встречается каждый символ в данном массиве и одновременно поиск максимального числа появлений элемента.
Для этого количество появлений элемента в массиве примем за p := 0.
Затем берем первый символ массива и подсчитываем, сколько раз он встречается в массиве. Для этого заводим новый счетчик t := 0. В ячейку max отправим первый элемент массива и значение ячейки max будем сравнивать со всеми остальными элементами массива. Если находится одинаковый с ним символ, то счетчик t := t + 1. После просмотра всех элементов массива сравним p и t, если t > p, то p := t и max := c[1].
Теперь переходим ко второму элементу массива и проделываем с ним те же операции, что и с первым. Перебрав таким образом все элементы массива, получим, что в ячейке p находится максимальное число встреч того элемента, который находится в max. Все части программы оформим в виде процедур пользователя.
Programa 5;
Type mas=array[1..60] of Char;
Procedure Wwod(k:integer; Var c:mas);
Var i:Integer;
Begin
Writeln('Ввести символы массива в виде строки');
For i:=1 to k do Read(c[i]);
End;
Procedure Wiwod(k:Integer; c:mas);
Var i:Integer;
Begin
Writeln('Массив: а');
For i:=1 to k do
Write(c[i]:3); End;
Procedure Poisk(k:Integer; c:mas);
Var i,j,p,t:Integer; max:char;
Begin p:=0; For i:=1 to k do Begin t:=0; For j:=1 to k do
If c[i]=c[j] Then t:=t+1; If t>p then begin p:=t; max:=c[i]; end; end;
Writeln('Чаще других встречается символ--',max); end;
{Основная программа}
Var n:Integer; a:mas;
Begin
Writeln('Ввести количество элементов');
Readln(n);
Wwod(n,a);
Writeln('Исходный массив');
Wiwod(n,a); Poisk(n,a); End.
а – блок-схема ввода элементов массива;
б – блок-схема вывода элементов массива на экран;
в – блок-схема поиска максимального элемента; г – блок-схема основной программы
Пример 6. Составьте блок-схему (рис. 8.7) и напишите программу решения следующей задачи:
дан массив целых чисел. Составьте новый массив из простых чисел старого массива.
Решение. Как обычно разобьем решение задачи на следующие подзадачи:
1. Ввод элементов массива с использованием функции случайных чисел.
2. Вывод элементов массива на экран в строку.
3. Создание нового массива.
Для каждой части задачи создадим процедуру пользователя. Ввод и вывод элементов массива встречается в каждой задаче с небольшими изменениями, поэтому в этой задаче блок-схемы для этих частей не приводятся.
Разберем третью часть задачи.
Сначала отметим, что в исходном массиве не все числа будут простыми. Если в исходном массиве n элементов, то в новом массиве элементов будет m <= n. Значит индексы элементов в новом массиве будут изменяться по-другому, не так, как в старом массиве. Чтобы создать новый массив, необходимо просмотреть все элементы старого массива, то есть организовать цикл For i := 1 to n do Begin … End; a[i] – это элемент старого массива стоящий на i-ом месте. Нужно определить, является ли этот элемент простым числом.
Число является простым, если оно имеет только два делителя: 1 и само это число. Чтобы определить, является ли число простым, напишем специальную подпрограмму. В цикле, приведенном выше, каждое число a[i] будем отправлять в подпрограмму и из подпрограммы будем получать ответ, простое это число или нет.
Если число простое, то его нужно отправить в новый массив. Пусть индексы элементов нового массива будут j. Тогда перед циклом по I необходимо присвоить j := 0. Как только из подпрограммы придет сообщение, что число a[i] простое, индекс j := j + 1 и b[j] := a[i]. Таким образом составится новый массив, в котором будет j элементов. Массив необходимо вывести на экран, используя ту же процедуру вывода, что и для старого массива.
Рис. 8.7. Блок-схема к примеру 6:
а – блок-схема определения простого числа;
б – блок-схема составления массива из простых чисел; в – блок-схема основной программы
Program Primer_6;
Type mas=array[1..50] of Integer;
Procedure wwod(k:Integer;
Var c:mas); Var i:Integer;
Begin
For i:=1 to k do c[i]:=Random(100); End;
Procedure Wiwod(k:Integer; c:mas);
Var i:Integer;
Begin
For i:=1 to k do
Write(c[i]:4); Writeln;
End;
Procedure Prost(y:Integer; Var x:Boolean);
Var z,d:Integer;
Begin z:=0;
For d:=1 to y do
If y mod d=0 Then z:=z+1;
If z=2 Then x:=True Else x:=False;
End;
Procedure Now(k:Integer; c:mas; Var j:Integer; Var q:mas);
Var i:Integer; t:boolean;
Begin j:=0;
For i:=1 to k do Begin
Prost(c[i],t);
If t=True Then begin j:=j+1; q[j]:=c[i]; end; End; End;
{Основная программа}
Var a,b:mas; n,m:Integer;
Begin
Writeln('Ввести количество элементов массива, то есть размер массива'); Readln(n);
Wwod(n,a);
Writeln('Исходный массив');
Wiwod(n,a);
Now(n,a,m,b);
Writeln('Полученный массив'); Wiwod(m,b); End.
1. Что такое массив?
2. Что имеет каждый элемент массива?
3. Как называют имя массива?
4. Как обозначается каждый элемент массива?
5. Что такое размерность массива?
6. Как в программе объявляется одномерный массив? Перечислите все способы.
7. Для чего предназначена функция Random?
8. Напишите алгоритм нахождения максимального элемента массива.
9. Type T = array [T1] of T2, где Т – ...; Т1 – ...; Т2 – ... Вставьте необходимые слова вместо многоточия.
10. Var T: array [T1] of T2, где Т – ...; Т1 – ...; Т2 – ... Вставьте необходимые слова вместо многоточия.
11. Type ... = ... [T1] ... T2, где Т – имя типа массива; Т1 – ...; Т2 – ... Вставьте необходимые слова вместо многоточия.
12. T = array [1..10] of integer; В каком подразделе можно описать массив таким образом?
13. C: array [1..10] of real; В каком подразделе можно описать массив таким образом?
14. mas: array [1..10] of byte = (1, 3, 5, 50, 7, 240, 13, 143, 196,
87); В каком подразделе можно описать массив таким образом?
15. ... B = array [1..20] of real; ... A: array [1..30] of B; Вставьте названия подразделов.
16. Охарактеризуйте данный массив: B: array [1..20] of real;
17. Охарактеризуйте данный массив: F: array [1..15] of string[30]
18. Охарактеризуйте данный массив: G: array [Red, Yellow, Green] of char;
19. Охарактеризуйте данный массив: L: array [byte] of Boolean;
20. Как осуществляется ввод элементов одномерного массива?
21. Как осуществляется вывод элементов одномерного массива?
1. В каждой задаче варианта составьте блок-схему и напишите программу решения задач.
2. Оформите отчет по лабораторной работе, который должен состоять из следующих разделов:
номера лабораторной работы и ее названия, условия каждой задачи, ее блок-схемы и программы.
3. В каждой задаче используйте процедуры ввода и вывода элементов массива.
1. Дан одномерный массив, который содержит не более 50 вещественных чисел. Найдите сумму элементов, которые расположены на местах с нечетными номерами.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Найдите второй по величине элемент и поменяйте его местами с последним элементом массива.
3. Дан одномерный массив, который содержит не более 60 английских букв, среди которых есть одинаковые. Получите все элементы, которые входят в массив по одному разу.
4. Даны оценки, полученные на экзамене по информатике студентами одной группы, по десятибалльной системе. Определите сколько студентов получили 10 баллов, сколько – 9, сколько – 8, сколько – 7, сколько – 6, сколько – 5, сколько – 4, сколько – 3. При выводе ответа слово «студент» должно стоять в соответствующей форме.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Найдите сумму элементов, которые делятся на данное число Х.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Найдите минимальный элемент и поменяйте его местами с тем элементом, который стоит по середине массива.
3. Дан одномерный массив, который содержит не более 60 вещественных чисел, среди которых есть положительные, отрицательные и нули. Переставьте элементы массива так, чтобы сначала шли нули, потом отрицательные, а затем положительные элементы массива.
4. Дана температура воздуха за месяц и вводится номер месяца. Найдите среднюю температуру этого месяца. По номеру месяца определите, сколько дней в этом месяце: может быть 31 день, 30 дней, 28 или 29 дней.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Найдите сумму элементов, у которых сумма делителей меньше данного числа Х.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Создайте новый массив, элементами которого являются суммы цифр каждого числа старого массива.
3. Дан одномерный массив, который содержит не более 60 английских букв. Получите новый массив, в котором данная буква заменена на символ «_».
4. Имеется пять магазинов с разными названиями: ЦУМ, ГУМ, Немига, Восточный, Первомайский. В них имеется один и тот же товар, который пользуется большим спросом. Количество товара в каждом магазине задайте с помощью датчика случайных чисел. Определите, в какой магазин в первую очередь необходимо завести новую партию этого товара.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Найдите сумму отрицательных и сумму положительных элементов и сравните их по модулю.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Создайте новый массив, элементами которого являются суммы делителей каждого числа старого массива
3. Дан одномерный массив, который содержит не более 60 английских букв. Получите новый массив, который будет содержать те элементы, которые входят в исходный массив более одного раза.
4. Имеется пять бензоколонок по разным адресам: ул. Володарского, ул. Партизанская, ул. Комсомольская, ул. Ленина, ул. Рокоссовского. На этих бензоколонках имеется бензин марки 95 в разных количествах. Количество бензина на бензоколонках задайте с помощью датчика случайных чисел. Необходимо заправить колонну машин, которая потребит 500 л этого бензина. По какому адресу расположена бензоколонка, на которую можно отправлять данную колонну машин?
1. Дан одномерный массив, который содержит не более 50 целых чисел. Найдите и выведите те элементы, которые больше предыдущего.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Создайте новый
массив, элементами которого являются суммы первой и последней цифры каждого числа старого массива.
3. Дан одномерный массив, который содержит не более 60 английских букв. Получите новый массив, в котором буквы будут расставлены по алфавиту.
4. Есть группа спортсменов из n <= 20 человек. Приводится рост и вес каждого из них. Вес спортсмена считается нормальным, если от роста отнять 100 и полученное число отличается от веса не более чем на 3. Выведите номера тех спортсменов, чей вес превышает норму.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Замените каждый элемент с четным номером цифрой 2, а с нечетным номером – цифрой 5.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Создайте новый массив, элементами которого являются среднее арифметическое двух соседних элементов. Последний элемент в новом массиве есть среднее арифметическое первого и последнего элемента старого массива.
3. Дан одномерный массив, который содержит не более 60 символов. Эти символы образуют некоторые слова, разделенные одним пробелом. Выведите каждое слово отдельно (то есть выведите слова в столбик).
4. Приводятся показатели производства работы n <= 30 рабочих. Определите номер рабочего, у которого показатель наибольший, и номер рабочего, у которого показатель второй по величине.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Замените каждый элемент массива произведением индексов соседних элементов, если нет соседних элементов, оставьте число без изменения.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Создайте новый массив, элементами которого является 0, если число простое, и 7 – если число составное.
3. Дан одномерный массив, который содержит не более 60 символов. Символы образуют слова, которые друг от друга отделяются пробелом. Замените в словах букву «С» на букву «А».
4. Приводится рост учеников одного класса, где количество учеников n <= 30. Определите номер ученика самого высокого и номер ученика второго по росту в классе.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Циклически сдвиньте элементы массива на K позиций влево.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Вычислите сумму элементов, которые расположены между минимальным элементом и элементом, стоящим по середине.
3. Дан одномерный массив, который содержит не более 60 символов, которые образуют слова, разделенные одним пробелом. Ответьте на вопрос, есть ли среди этих слов данное слово.
4. Приводится среднесуточная температура воздуха за месяц. Выведите номера тех дней, когда среднемесячная температура была ниже среднесуточной температуры. Количество дней в месяце определите по его названию. Вариант № 9
1. Дан одномерный массив, который содержит не более 50 целых чисел. Циклически сдвиньте элементы массива на М позиций вправо.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Найдите сумму элементов, которые расположены между максимальным элементом и элементом, стоящим на 7 месте.
3. Дан одномерный массив, который содержит не более 60 символов, образующих слова, разделенные пробелом. Замените слово «mama» на слово «ded».
4. В области 10 районов. Для каждого известны площади, засеянные пшеницей, и урожай, собранный с этих площадей. Определите, в каком районе средняя урожайность пшеницы была выше.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Замените каждый элемент суммой соседних индексов. Если соседних элементов нет, оставьте число без изменения.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Найдите сумму отрицательных элементов, которые расположены между максимальным и минимальным элементом.
3. Дан одномерный массив, который содержит не более 60 символов. Ответьте на вопрос, есть ли среди данных символов сочетание «…».
4. В университете n <= 10 факультетов. Известен план приема студентов на каждый факультет и число поданных заявлений. Определите конкурс на каждый факультет.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Выведите только те элементы, которые меньше предыдущего.
2. Дан одномерный массив, который содержит не более 40 целых чисел. Вычислите количество элементов между максимальным и минимальным.
3. Дан одномерный массив, который содержит не более 60 символов. Сколько раз в данном массиве встречается сочетание символов «хх».
4. Дано длинное целое число, содержащее не более 100 цифр. Рассматривать цифры числа, как массив символов. Определите, есть ли в данном числе цифра 0, если есть, сколько раз она попадается в данном числе.
1. Дан одномерный массив, который содержит не более 50 целых чисел. Найдите среднее арифметическое элементов, которые стоят на нечетных местах.
2. Дан одномерный массив, который содержит не более 40 положительных и отрицательных целых чисел. Найдите наименьший положительный элемент и его номер в массиве.
3. Дан одномерный массив, который содержит не более 60 символов. Ответьте на вопрос, есть ли среди этих символов подряд идущие одинаковые символы.
4. Дано длинное целое число, содержащее не более 100 цифр. Рассматривать цифры числа, как
массив символов. Определите, есть ли в данном числе четные цифры и сколько их.
Лабораторная работа № 6
Цель работы: Научиться работать с двумерными массивами при решении задач на языке ПаскальАВС.
Двумерные массивы представляют собой прямоугольные таблицы, которые состоят из строк и столбцов. Например, a11 a12 a13 a21 a22 a23. a31 a32 a33
Двумерный массив отображает математическое понятие – матрица.
Каждый элемент двумерного массива имеет два индекса. Договорились всегда на первом месте писать индекс строки, а на втором – индекс столбца. Элемент двумерного массива, как и одномерного, обозначается полным именем массива, в квадратных скобках через запятую записываются индексы этого элемента. Элемент a[2, 3] – это элемент, записанный во второй строке и третьем столбце. Поскольку каждый элемент имеет два индекса, то при работе с двумерными массивами, как правило, используются вложенные циклы: один цикл по строкам и вложенный цикл по столбцам или наоборот в зависимости от задачи.
Объявление двумерного массива Как и одномерный массив, двумерный можно объявить двумя способами:
1 способ:
Type имя типа=array[n..m,k..p] of тип элементов; Var имя массива: имя типа; 2 способ:
var имя массива: array [n..m,k..p] of тип элементов,
где константы n, m указывают интервал изменения индексов строк; константы k, p – интервал изменения индексов столбцов, имя типа и имя массива задает пользователь, тип элементов – любой тип языка ПаскальАВС, кроме файлового типа. Тип элементов массива называется базовым.
Задание элементов можно производить как путем ввода элементов с клавиатуры, так и путем задания с помощью функции случайных чисел. Пусть объявлен массив:
Type tabl=array[1..10,1..10] of Integer; Var a:tabl; k, p, I, j : Integer;
Запишем процедуру ввода элементов двумерного массива с помощью функции случайных чисел:
PROCEDURE Wwod2 (k,p:Integer; Var a:tabl); Var i, j : Integer;
BEGIN
For i:=1 to k do
For j:=1 to p do a[i,j]:=Random(1000); {Целые числа из [0; 1000)} END;
Процедура ввода элементов того же двумерного массива, с клавиатуры. PROCEDURE Wwod1(k,p:integer; Var a:tabl); Var i, j : Integer;
BEGIN
For i:=1 to k do {Цикл по строкам} For j:=1 to p do {Цикл по столбцам}
Begin
Writeln(‘Ввести элемент a[’, I, ’,’, j, ’]’); Readln(a[I, j]; End;
END.
Блок-схема (рис. 9.1) ввода элементов двумерного массива
Рис. 9.1
Обычно элементы двумерного массива выводят на экран в виде прямоугольной таблицы, чтобы
были видны строки и столбцы. Запишем процедуру вывода массива, созданного в п. 2.
PROCEDURE Wiwod (k, p:Integer; a: tabl); Var i, j : Integer;
BEGIN
For i := 1 to k do Begin
For j := 1 to p do Write (a[ i, j]:6); Writeln;
Рис. 9.2. Блок-схема процедуры Wiwod
Если количество строк равно количеству столбцов и равно n, то такие массивы называются квадратными. Элементы квадратного двумерного массива, у которых индекс строки равен индексу столбца образуют главную диагональ (если двумерный массив представить как квадрат, то линия с верхнего левого угла до нижнего правого есть главная диагональ). Поэтому можно записать, что элементы, лежащие на главной диагонали, – это элементы с индексами a[i, i] (если двумерный массив представить как квадрат, то линия с верхнего правого угла до нижнего левого есть побочная диагональ). Элементы a[i, j], лежащие на побочной диагонали, имеют следующее свойство i + j = n + 1, где n – количество строк в массиве. Поэтому элемент, лежащий на побочной диагонали, можно представить a[i, n + 1 – i]. Этими свойствами часто пользуются при решении задач.
Примеры выполнения заданий
Пример 1. Составьте блок-схему (рис. 9.3) и напишите программу решения следующей задачи:
дан двумерный массив размером n <= 10 и m <= 10. Найдите суммы элементов по строкам.
PROGRAM Primer_1;
Type tabl=Array [1..10, 1..10] of Real;
{
}
PROCEDURE WWod (k, p:Integer; Var a : tabl); Var i, j : Integer;
BEGIN
For i := 1 to k do
For j := 1 to p do a[ i,j]:=10*Random; {Вещественные числа [0; 10)} END;
{
}
PROCEDURE Wiwod ( k, p : Integer; a : tabl); Var i, j : Integer;
BEGIN
For i := 1 to k do Begin
For j := 1 to p do Write(a[i,j]:8:2); Writeln;
End;
END;
{
}
{Основная программа}
Var a: tabl; i, j, n, m: Integer; s: real; BEGIN
Writeln('Ввести количество строк и столбцов'); Readln(n,m);
Wwod(n,m,a); Writeln('Исходный массив А'); Wiwod(n,m,a); Writeln('Суммы по строкам:'); For i :=
1 to n do
Begin S:=0;
For j := 1 to m do s:=s+a[I,j]; Writeln('сумма ', i, ' строки=', s:8:2); End;
END.
Поскольку блок-схемы процедур ввода и вывода приведены выше, то здесь укажем только блоксхему (рис. 9.3) основной программы.
Рис. 9.3. Блок-схема основной программы примера 1
Пример 2. Составьте блок-схему (рис. 9.4) и напишите программу решения следующей задачи:
дан двумерный массив целых чисел, который содержит не более 10 строк и не более 10 столбцов. Найдите и выведите номера тех столбцов, все элементы которых четные.
Program Primer_2;
Type tabl=Array[1..10,1..10] of Integer;
{ ---------------------------------------------------------------------------- }
{Процедура ввода элементов двумерного массива} Procedure Wwod2(k,p:Integer; Var x:tabl);
Var i,j : Integer;
Begin
For i := 1 to k do For j := 1 to p do
X[i,j]:=Random(100); End;
{
}
{Процедура вывода элементов двумерного массива на экран в виде матрицы}
Procedure Vivod2(k,p:Integer; x:tabl); Var i,j:Integer;
Begin
For i := 1 to k do Begin
For j:=1 to p do Write(x[i,j]:5); Writeln;
End;
End;
{
}
{Нахождение тех столбцов, все элементы которых четные} Procedure Chet(k,p:Integer; c:tabl);
Var i,j,t:Integer;
Begin
For j:=1 to p do Begin
t:=0;
For i:=1 to k do If c[i,j] mod 2<>0 Then t:=1;
If t=0 Then Writeln('В ',j:3,' столбце все элементы четные'); End; End;
{
}
{Основная программа} Var n,m:Integer; a:tabl;
Begin
Writeln('Ввести количество строк и столбцов'); Readln(n,m);
Randomize;
Wwod2(n,m,a);
Writeln('Исходный массив'); Vivod2(n,m,a); Chet(n,m,a); End.
Пример 3. Составьте блок-схему (рис. 9.5) и напишите программу решения следующей задачи:
дан квадратный двумерный массив целых чисел размерностью N <= 10. Найдите сумму элементов, которые находятся под побочной диагональю.
Program Primer_3;
Type tabl=Array[1..10,1..10] of Integer;
{Процедура ввода элементов двумерного массива} Procedure Wwod2(k,p:Integer; Var x:tabl);
Var i,j : Integer;
Begin
For i := 1 to k do For j := 1 to p do
X[I,j]:=Random(100); End;
{Процедура вывода элементов двумерного массива на экран в виде матрицы}
Procedure Vivod2(k,p:Integer; x:tabl); Var i,j:Integer;
Begin
For i := 1 to k do Begin
For j:=1 to p do Write(x[I,j]:5); Writeln;
End;
End;
{Нахождение суммы элементов, которые расположены под побочной диагональю}
Procedure Sum(k:Integer; c:tabl); Var i,j, s:Integer;
Begin s:=0;
For i:=2 to k do
For j:=k+2-i to k do s:=s+c[i,j];
Writeln('Сумма элементов под побочной диагональю=',s:6); End; {Основная программа} Var n,m:Integer; a:tabl; Begin Writeln('Ввести количество строк и столбцов'); Readln(n,m);
Randomize;
Wwod2(n,m,a);
Writeln('Исходный массив'); Vivod2(n,m,a); Sum(n,a); End.
Пример 4. Составьте блок-схему (рис. 9.6 а, б) и напишите программу решения следующей задачи: дан двумерный массив целых чисел, который содержит не более 10 строк и не более 10 столбцов. Массив выведите на экран в виде матрицы. Поменяйте w-ю и p-ю строки, если w и р вводятся
с клавиатуры.
Program Primer_4;
Type tabl=Array[1..10,1..10] of Integer;
{Процедура ввода элементов двумерного массива} Procedure Wwod2(k,p:Integer; Var x:tabl);
Var i,j : Integer;
Begin
For i := 1 to k do For j := 1 to p do X[i,j]:=Random(100); End;
{Процедура вывода элементов двумерного массива на экран в виде матрицы}
Procedure Vivod2(k,p:Integer; x:tabl);
Var i,j:Integer;
Begin
For i := 1 to k do Begin
For j:=1 to p do Write(x[i,j]:5); Writeln;
End;
End;
{Процедура обмена строк}
Procedure obmen(k,z,w,p:Integer;
Var c:tabl); Var i,j,x:Integer;
Begin
For j:=1 to z do 146
Begin x:=c[w,j]; c[w,j]:=c[p,j]; c[p,j]:=x;
End;
End;
{Основная программа}
Var a:tabl; n,m,w,p:Integer; Begin
Writeln('Ввести количество строк и столбцов'); Readln(n,m);
Wwod2(n,m,a); Writeln('Исходный массив'); Vivod2(n,m,a);
Writeln('Ввести номера строк для обмена'); Readln(w,p); Obmen(n,m,w,p,a);
Writeln('Массив после обмена');
Vivod2(n,m,a);
Рис. 9.6 (продолжение). Блок-схема к примеру 4:
б – блок-схема процедуры Obmen
Рис. 9.6. Блок-схема к примеру 4: а – блок-схема основной программы
1. Какое математическое понятие отображает двумерный массив?
2. Каким образом осуществляется доступ к одному элементу двумерного массива?
3. Что называется базовым типом двумерного массива?
4. Что может являться базовым типом двумерного массива?
5. Определите размер двумерного массива 3 × 4.
6. Что определяет размерность массива?
7. Что такое мощность массива?
8. Что может выступать в качестве индексов двумерного массива?
9. Как объявить массив из целых чисел с использованием раз дела типов?
10. Как объявить массив из вещественных чисел с использованием раздела типов?
11. Как объявить массив из вещественных чисел с использованием раздела переменных?
12. Охарактеризуйте данный массив: c:array[1..5,1..4] of Integer;
13. Охарактеризуйте данный массив: b:array[4..6,3..8] of Real;
14. Какими способами осуществляется ввод элементов двумерного массива?
15. Запишите процедуру ввода элементов двумерного массива с клавиатуры.
16. Запишите процедуру ввода элементов двумерного массива из целых чисел с помощью функции случайных чисел.
17. Запишите процедуру ввода элементов двумерного массива из вещественных чисел с помощью функции случайных чисел.
18. Запишите процедуру вывода элементов двумерного массива в виде матрицы из целых чисел.
19. Запишите процедуру вывода элементов двумерного массива в виде матрицы из вещественных чисел.
1. В каждой задаче варианта составьте блок-схему и напишите программу решения задач.
2. Оформите отчет по лабораторной работе, который должен состоять из следующих разделов:
номера лабораторной работы и ее названия, условия каждой задачи, ее блок-схемы и программы.
3. В каждой задаче варианта напишите программы с использованием процедур пользователя.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Найдите сумму элементов, которые расположены в строках с нечетными номерами.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Найдите максимальный по абсолютной величине элемент и поменяйте его местами с последним элементом массива.
3. Даны оценки, полученные на четырех экзаменах во время сессии студентами одной группы, по десятибалльной системе. Определите, сколько студентов не сдали сессию.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Найдите сумму элементов, которые делятся на данное число Х.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Найдите минимальный элемент и поменяйте его местами с тем элементом, который стоит в конце массива.
3. Даны оценки, полученные на четырех экзаменах во время сессии студентами одной группы, по десятибалльной системе. Определите, сколько студентов сдали сессию на 10 и 9 баллов.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Найдите сумму элементов, у которых сумма делителей меньше данного числа Х.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Создайте новый массив, элементами которого являются суммы цифр каждого числа старого массива.
3. Даны оценки, полученные на четырех экзаменах во время сессии студентами одной группы, по десятибалльной системе. Определите сколько студентов сдали сессию только на 7.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Найдите сумму отрицательных и сумму положительных элементов и сравните их по модулю.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Создайте новый массив, элементами которого являются суммы делителей каждого числа старого массива.
3. Даны оценки, полученные на четырех экзаменах во время сессии студентами одной группы, по десятибалльной системе. Определите сколько студентов сдали сессию на балл не ниже 6.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Найдите и выведите те элементы, которые больше предыдущего, стоящего с ним в одной строке.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Создайте новый массив, элементами которого являются суммы первой и последней цифры каждого числа старого массива.
3. Есть группа спортсменов из семи человек. Для каждого из них приводится рост и вес. Вес спортсмена считается нормальным, если от роста отнять 100 и полученное число отличается от веса не более чем на 3. Выведите номера тех спортсменов, чей вес превышает норму.
1. Дана прямоугольная таблица, которая содержит не более
10 строк и не более 10 столбцов. Замените в массиве каждый четный элемент цифрой 2, а нечетный – цифрой 5.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Найдите сумму тех элементов, которые больше элемента, стоящего на главной диагонали в данной строке.
3. Приводятся показатели производства работы n <= 30 рабочих за семь дней. Определите номер рабочего, у которого показатель наибольший, и номер рабочего, у которого показатель второй по величине.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Замените каждый элемент массива произведением его индексов.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Создайте новый массив, элементами которого является 0, если число делится на 5, и 7 – если число не делится на 5.
3. Приводится рост учеников трех параллельных классов, где их количество равно 25 в каждом классе. Определите номер самого высокого ученика в каждом классе.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Найдите сумму тех элементов, у которых сумма их индексов – число четное.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Вычислите сумму элементов, которые расположены за минимальным элементом.
3. Приводится среднесуточная температура воздуха за несколько недель. Выведите номера тех недель, когда средняя температура всех дней была ниже 0.
1. Дана прямоугольная таблица, которая содержит не более
10 строк и не более 10 столбцов. Найдите сумму элементов, которые стоят перед максимальным элементом
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Найдите сумму элементов, которые расположены за максимальным элементом.
3. В области 10 районов. Для каждого из них известны площади, засеянные пшеницей, и урожай, собранный с этих площадей. Определите, в каком районе средняя урожайность пшеницы была выше.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Замените каждый элемент массива суммой его индексов.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Найдите суммы отрицательных элементов каждого столбца.
3. В университете n <= 10 факультетов. Известен план приема студентов на каждый факультет и число поданных заявлений. Определите конкурс на каждый факультет.
1. Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Выведите только те элементы, которые меньше элемента, стоящего на главной диагонали в данной строке.
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов.
Найдите и выведите номера только тех строк, все элементы которых четные.
3. В области 10 районов. Для каждого из них известны площади, засеянные пшеницей, и урожай, собранный с этих площадей. Определите, в каком районе средняя урожайность пшеницы была самой низкой.
1. Дана прямоугольная таблица, которая содержит не более
10 строк и не более 10 столбцов. Вычислите суммы элементов каждого столбца
2. Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Найдите наименьший элемент и его индексы в массиве.
3. В области n <= 10 районов. Для каждого района известны площади, засеянные пшеницей, и урожай, собранный с этих площадей. Определите среднюю урожайность пшеницы.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.