Цель работы: Разработка программ объявления массива и обработки массивов
Теоретические основы:
Массивы относятся к структурированным типам данных в ТР. Массив состоит из фиксированного числа элементов (компонент) одного типа и характеризуется общим именем. Доступ к отдельным элементам массива осуществляется с помощью общего имени и порядкового номера (индекса или адреса) необходимого элемента.
Имя массива - это любое допустимое в ТР имя, отличное от служебных слов, имен функций и процедур. Массив может быть описан в подразделе Var или в подразделах Var и Type, одновременно.
Первая форма описания - в подразделе Var:
Var И мя _ массива : Array[T1] OF [T2];
где Array (Массив) и Of (Из) - служебные слова.
T1 - список типов индексов) в качестве индексов чаще всего используются переменные типа - диапазон, но возможно использование перечислимого типа); Т2 - тип элементов массива (любой тип ТР как простой, так и структурированный).
Например:
1) Var Mas: Array[1..10] of integer; - описание массива, состоящего из 10 целых чисел и имеющего имя Mas;
2) Var S: array[1..20] of real; - описание массива, состоящего из 20 вещественных чисел и имеющего имя S;
3) Var Matr:array[1..20,1..20] of byte; - описание массива (матрицы размером 20 на 20), содержащего 400 элементов типа byte.
Если массив объявлен, то к любому его элементу можно обратиться с помощью его имени и индексов. Например:
1) Mas[5]:=21; - пятому элементу массива Mas присвоено значение, равное 21.
2) For i:=1 to 20 do S[i]:=0.0; - присвоение всем 20 элементам массива S значения, равного 0.0 (обнуление массива).
3) For i:=1 to 20 do For j:=1 to 20 do Matr[i,j]:=random(100); - заполнение массива (матрицы) на 400 чисел случайными числами из диапазона от 0 до 100.
Вторая форма описания - в подразделах Var и Type:
Type И мя _ типа _ массива = Array[T1] OF [T2];
Var Имя_массива: Имя_типа_массива;
Массив с одним индексом называют одномерным, с двумя - двумерным, с тремя - трехмерным и т.д. Число индексов у массива в ТР не ограничивается, но необходимо помнить, что размер массива не должен превышать 64 Кбайт.
Любой двумерный массив представляет собой матрицу: первому индексу можно поставить в соответствие строки, а второму - столбцы матрицы. Кроме того, двумерный массив можно интерпретировать как одномерный, элементами которого является другой одномерный массив.
Описание такого массива имеет вид:
Type tstr=array[1..25] of real;
Var masssiv:array[1..10] of tstr; - это описание равносильно описанию в примере 3, приведенному выше для массивов с именами Matr1 и Matr2.
Оперативная память под элементы массива выделяется на этапе трансляции. В памяти компьютера элементы массива следуют друг за другом.
Если массив двумерный, то память под него выделяется так, что быстрее меняется самый правый индекс. В качестве примера рассмотрим порядок выделения оперативной памяти под массив, описанный следующим образом: Var M:array[1..2,1..4] of byte;
В качестве начального значения используется список констант, отделенных друг от друга запятыми. Список заключается в круглые скобки.
Примеры:
1) Const Mas:array[1..10] of byte=(1,1,1,1,1,1,1,1,1,1); - заполнение массива из 10 целых чисел значением, равным единице.
2) Const massim: array[0..5] of char = ('a','b','c','d','e','f'); - заполнение
массива из 6 элементов символами - буквами латинского алфавита.
3) Const Matr: array[1..5,1..2]of byte = ((0,0),(0,0),(0,0),(0,0),(0,0)); -
обнуление матрицы из 10 целых чисел.
Замечание: количество переменных в списке констант должно строго соответствовать объявленной длине массива по каждому индексу!
Типовые примеры:
Составить схему алгоритма и программу определения суммы S всех положительных элементов одномерного массива M, содержащего К вещественных чисел (К£20). Числа в массив M ввести с экрана дисплея, результат суммирования (S) также вывести на экран.
{Работа с одномерными массивами Студенты гр. Фамилии }
Uses crt; {Подключение стандартного модуля TP}
Var m:array[1..20] of real; {Описание массива вещественных чисел}
S:real; {описание переменной для хранения суммы}
i,K:byte; {описание переменных для счетчика и количества чисел}
Begin Clrscr; {Очистка экрана}
Write(' Введите число элементов в массиве К ='); Readln(K);
Writeln(' Введите ',K,' вещественных чисел через пробел');
For i:=1 to K do read(M[i]); { Ввод вещественных чисел}
writeln; { Переход на новую строку на экране}
S:=0.0; { Присвоение начального значения суммы}
For i:=1 to K do
If M[i]>0 then S:=S+M[i]; { Суммирование положительных чисел}
Writeln(' S = ',S); { Вывод полученной суммы}
End.
Составить схему алгоритма и программу определения сумм элементов в каждой строке матрицы М={mij}, i=1,n; j=1,k, где n - число строк, k - число столбцов матрицы, mij - целые числа из диапазона: от 0 до 500. Записать полученные значения сумм в одномерный массив SUM, а затем вывести их на экран дисплея. Числа в массив М занести с помощью функции Random.
Определить и вывести на экран номер строки с минимальным значением суммы.
Uses crt;
{ Описание данных}
Var M:array[1..50,1..100]of integer;
Sum:array[1..50] of longint;
n,k,i,j,imin:integer;
Min:longint;
BEGIN clrscr;
{ Ввод данных}
writeln(' Введите число строк и столбцов');
readln(n,k);
Randomize; { Стандартная процедура см. теорию}
{ Заполнение матрицы случайными числами}
for i:=1 to n do
for j:=1 to k do
M[i,j]:=Random(500);
writeln(' Элементы заполненной матрицы');
for i:=1 to n do
begin
for j:=1 to k do
write(M[i,j]:4); writeln;
end;
writeln(' Сумма элементов в каждой строке');
write(' Hомера строк : ');
for i:=1 to n do
write(i,' ');writeln;
write(' Сумма в строке : ');
for i:=1 to n do
begin
Sum[i]:=0;
for j:=1 to k do
Sum[i]:=Sum[i]+M[i,j];
write(Sum[i], ' ');
end;writeln;
{ Поиск минимального значения}
Min:=Sum[1]; imin:=i;
for i:=1 to n do
if Sum[i] <= Min then
begin
Min:=Sum[i]; imin:=i;
end;
writeln(' Минимальная сумма = ',Min,' в строке ',imin);
readln;
END.
Варианты самостоятельных заданий
Задание №1
1. Дан массив A ненулевых целых чисел размера 10. Вывести значение первого из тех его элементов AK, которые удовлетворяют неравенству AK < A10. Если таких элементов нет, то вывести 0.
2. Дан целочисленный массив A размера 10. Вывести порядковый номер последнего из тех его элементов AK, которые удовлетворяют двойному неравенству A1 < AK < A10. Если таких элементов нет, то вывести 0.
3. Дан массив размера N и целые числа K и L (1 ≤ K ≤ L ≤ N). Найти сумму элементов массива с номерами от K до L включительно
4. Дан массив размера N и целые числа K и L (1 ≤ K ≤ L ≤ N). Найти среднее арифметическое элементов массива с номерами от K до L включительно.
5. Дан массив размера N и целые числа K и L (1 < K ≤ L ≤ N). Найти сумму всех элементов массива, кроме элементов с номерами от K до L включительно.
6. Дан массив размера N и целые числа K и L (1 < K ≤ L ≤ N). Найти среднее арифметическое всех элементов массива, кроме элементов с номерами от K до L включительно.
7. Дан целочисленный массив размера N, не содержащий одинаковых чисел. Проверить, образуют ли его элементы арифметическую прогрессию. Если образуют, то вывести разность прогрессии, если нет — вывести 0. Array25. Дан массив ненулевых целых чисел размера N. Проверить, образуют ли его элементы геометрическую прогрессию. Если образуют, то вывести знаменатель прогрессии, если нет — вывести 0.
8. Дан целочисленный массив размера N. Проверить, чередуются ли в нем четные и нечетные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
9. Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
10. Дан массив A размера N. Найти минимальный элемент из его эле- ментов с четными номерами: A2, A4, A6, . . . .
11. Дан массив A размера N. Найти максимальный элемент из его эле- ментов с нечетными номерами: A1, A3, A5, . . . .
12. Дан массив размера N. Найти номера тех элементов массива, которые больше своего правого соседа, и количество таких элементов. Найденные номера выводить в порядке их возрастания.
13. Дан массив размера N. Найти номера тех элементов массива, которые больше своего левого соседа, и количество таких элементов. Найденные номера выводить в порядке их убывания.
14. Дан массив размера N. Найти номер его первого локального минимума (локальный минимум — это элемент, который меньше любого из своих соседей).
15. Дан массив размера N. Найти номер его последнего локального максимума (локальный максимум — это элемент, который больше любого из своих соседей).
16. Дан массив размера N. Найти максимальный из его локальных минимумов (определение локального минимума дано в задании выше).
17. Дан массив размера N. Найти минимальный из его локальных максимумов (определение локального максимума дано в задании выше).
18. Дан массив размера N. Найти максимальный из его элементов, не являющихся ни локальным минимумом, ни локальным максимумом (определения локального минимума и локального максимума даны в заданиях выше). Если таких элементов в массиве нет, то вывести 0.
19. Дан массив размера N. Найти количество участков, на которых его элементы монотонно возрастают.
20. Дан массив размера N. Найти количество участков, на которых его элементы монотонно убывают.
Задание №2
1. Дана матрица размера M × N и целое число K (1 ≤ K ≤ M). Найти сумму и произведение элементов K-й строки данной матрицы.
2. Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). Найти сумму и произведение элементов K-го столбца данной матрицы.
3. Дана матрица размера M × N. Для каждой строки матрицы найти сумму ее элементов.
4. Дана матрица размера M × N. Для каждого столбца матрицы найти произведение его элементов.
5. Дана матрица размера M × N. Для каждой строки матрицы с нечетным номером (1, 3, . . .) найти среднее арифметическое ее элементов. Условный оператор не использовать.
6. Дана матрица размера M × N. Для каждого столбца матрицы с четным номером (2, 4, . . .) найти сумму его элементов. Условный оператор не использовать.
7. Дана матрица размера M × N. В каждой строке матрицы найти минимальный элемент.
8. Дана матрица размера M × N. В каждом столбце матрицы найти максимальный элемент.
9. Дана матрица размера M × N. Найти номер ее строки с наибольшей суммой элементов и вывести данный номер, а также значение наибольшей суммы.
10. Дана матрица размера M × N. Найти номер ее столбца с наименьшим произведением элементов и вывести данный номер, а также значение наименьшего произведения.
11. Дана матрица размера M × N. Найти максимальный среди минимальных элементов ее строк.
12. Дана матрица размера M × N. Найти минимальный среди максимальных элементов ее столбцов.
13. Дана матрица размера M × N. В каждой ее строке найти количество элементов, меньших среднего арифметического всех элементов этой строки.
14. Дана матрица размера M × N. В каждом ее столбце найти количество элементов, больших среднего арифметического всех элементов этого столбца.
15. Дана матрица размера M × N. Найти номера строки и столбца для элемента матрицы, наиболее близкого к среднему значению всех ее элементов.
16. Дана целочисленная матрица размера M × N. Найти номер первой из ее строк, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Если таких строк нет, то вывести 0.
17. Дана целочисленная матрица размера M × N. Найти номер последнего из ее столбцов, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Если таких столбцов нет, то вывести 0.
18. Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих только четные числа. Если таких строк нет, то вывести 0.
19. Дана целочисленная матрица размера M × N. Найти номер первого из ее столбцов, содержащих только нечетные числа. Если таких столбцов нет, то вывести 0.
20. Дана целочисленная матрица размера M × N, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк, похожих на первую строку данной матрицы.
Задание №3
1. Даны массивы A и B одинакового размера N. Поменять местами их содержимое и вывести вначале элементы преобразованного массива A, а затем — элементы преобразованного массива B.
2. Дан массив A размера N. Сформировать новый массив B того же размера, элементы которого определяются следующим образом: BK = 2·AK, если AK < 5, AK/2 в противном случае.
3. Даны два массива A и B одинакового размера N. Сформировать новый массив C того же размера, каждый элемент которого равен максимальному из элементов массивов A и B с тем же индексом.
4. Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B все четные числа из исходного массива (в том же порядке) и вывести размер полученного массива B и его содержимое.
5. Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы с нечетными порядковыми номерами (1, 3, . . .) и вывести размер полученного массива B и его содержимое. Условный оператор не использовать.
6. Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы с порядковыми номерами, кратными трем (3, 6, . . .), и вывести размер полученного массива B и его содержимое. Условный оператор не использовать.
7. Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B того же размера вначале все элементы исходного массива с четными номерами, а затем — с нечетными: A2, A4, A6, . . ., A1, A3, A5, . . . . Условный оператор не использовать.
8. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен сумме элементов массива A с номерами от 1 до K.
9. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен среднему арифметическому элементов массива A с номерами от 1 до K.
10. Дан массив A размера N и целое число K (1 ≤ K ≤ N). Преобразовать массив, увеличив каждый его элемент на исходное значение элемента AK.
11. Дан целочисленный массив размера N. Увеличить все четные числа, содержащиеся в массиве, на исходное значение первого четного числа. Если четные числа в массиве отсутствуют, то оставить массив без изменений. Array67. Дан целочисленный массив размера N. Увеличить все нечетные чис- ла, содержащиеся в массиве, на исходное значение последнего нечетного числа. Если нечетные числа в массиве отсутствуют, то оставить массив без изменений.
12. Дан массив размера N. Поменять местами его минимальный и максимальный элементы
13. Дан массив размера N (N — четное число). Поменять местами его первый элемент со вторым, третий — с четвертым и т. д.
14. Дан массив размера N (N — четное число). Поменять местами первую и вторую половины массива.
15. Дан массив размера N. Поменять порядок его элементов на обратный.
16. Дан массив A размера N и целые числа K и L (1 ≤ K < L ≤ N). Переставить в обратном порядке элементы массива, расположенные между элементами AK и AL, включая эти элементы
17. Дан массив A размера N и целые числа K и L (1 ≤ K < L ≤ N). Переставить в обратном порядке элементы массива, расположенные между элементами AK и AL, не включая эти элементы.
18. Дан массив размера N и целое число K (1 ≤ K ≤ N). Удалить из массива элемент с порядковым номером K.
19. Дан массив размера N и целые числа K и L (1 ≤ K < L ≤ N). Удалить из массива элементы с номерами от K до L включительно и вывести размер полученного массива и его содержимое.
20. Дан целочисленный массив размера N. Удалить из массива все нечетные числа и вывести размер полученного массива и его содержимое.
Контрольные вопросы:
1. Какие типы данных вы знаете?
2. Перечислите и приведите примеры простых типов данных?
3. Перечислите сложные типы данных
4. Что такое массивы?
5. Что называют элементом массива?
6. Что называют индексом элемента массива?
7. Сколько элементов может содержать массив?
8. Сколько индексов может быть у одного элемента массива?
Дата: 2019-11-01, просмотров: 492.