Приступая к решению задач этого раздела, следует вспомнить, что:
- массив — это структура данных, представляющая собой совокупность элементов одного типа;
- массив должен быть объявлен в разделе объявления переменных;
- доступ к элементу массива осуществляется путем указания индекса (номера) элемента, в качестве которого можно использовать выражение целого типа, например, целую константу или переменную типа integer;
- сделав объявление x: array[1..5] of integer: мы получим 5 переменных с именами x[1], x[2], x[3], x[4], x[5] типа integer.
Примеры решения задач
Задача 1. Найти сумму элементов массива x[5].
Решение задачи:
Решение 1: перебор всех элементов в ручную. Program Summa; var x:array[1..5] of real; s:real; begin Writeln(' Введите элементы массива x '); Read(x[1], x[2], x[3], x[4], x[5]); { в память машины} S:= x[1]+ x[2]+ x[3]+ x[4]+ x[5]; write('S= ', s); Readln; end. | Решение 2: использование циклов. Целесообразно в случае массива большой размерности. Program Summa; var x:array[1..5] of real; s:real; i: integer; begin Writeln(' Введите элементы массива x '); for i:=1 to 5 do Read(x[i]); S:=0; for i:=1 to 6 do S:= S+ x[i]; write('S= ', s); Readln; end. |
Задача 2. Умножить элементы с четными индексами на число Z.
Система тестов:
№ | Значение массива x | Значение z | Результаты |
1,2,3,4,5,6 | 1,4,3,8,5,12 | ||
-1,-2,-3,1,3,2 | -1,0,-3,1,3,0 |
Решение задачи:
Program Chet_Index;
Const n=6;
var
x: array[1..n] of real;
i: integer;
z: real;
begin
Writeln(' Введите элементы массива x ');
for i:=1 to n do {Цикл для ввода элементов массива}
Read(x[i]); { в память машины}
Writeln(' Введите число z ');
Readln(z)
for i:=1 to n do
begin
if i mod 2=0 then
x[i]:= x[i]*z;
end;
for i:=1 to n do {Цикл для вывода элементов массива}
write(x[i], ' '); {на экран монитора}
Readln;
end.
Замечание: выделенные фрагменты кода присутствуют во всех программах, использующих одномерные массивы.
Задача 3. В массиве поменять местами наибольший и наименьший элементы массива.
Система тестов:
№ | Значение массива x | Результаты |
1,2,3,4,5,6 | 6,2,3,4,5,1 | |
-1,-2,-3,1,3,2 | -1,-2,3,1,-3,2 |
Решение задачи:
Program change_max_min;
Const n=6;
var
x:array[1..N] of real;
i:integer;
max, min, Index_min, Index_max:real;
{ максимальное значение и минимальное и их номера}
begin
Writeln(' Введите элементы массива x ');
for i:=1 to n do
Read(x[i]);
max:=x[1];
min:=x[1];
Index_max:=1;
Index_min:=1;
for i:=2 to n do
begin
if x[i]> max then
begin
max:=x[i]; {запомнить элемент}
Index_max:=i; {и его номер}
end;
if x[i]< min then
begin
min:=x[i];
Index_min:=i;
end;
end;
x[Index_min]:=max;
x[Index_max]:=min;
for i:=1 to n do
write(x[i], ' ');
Readln;
end.
Задача 4. Определить, выполняется ли для всех элементов заданного массива m[k] условие m[n+1]=m[n]+1, где n=1,2,…k.
Система тестов:
№ | Значение массива x | Результаты |
1,2,3,4,5,6 | Массив удовлетворяет условию. | |
3,4,5,5,6,7 | Массив не удовлетворяет условию. |
Решение задачи:
Program Zadacha_N3;
var
x:array[1..6] of real;
i:integer;
Otvet boolean;
begin
Writeln(' Введите элементы массива x ');
for i:=1 to 6 do
Read(x[i]);
Otvet:=true;
i:=1;
repeat
if x[i+1]<>x[i]+1 then
Otvet:=false;
i:=i+1;
until (i=5) or (Otvet=false);
if otvet then
write('Массив удовлетворяет условию. ')
else
write('Массив не удовлетворяет условию. ')
Readln;
end.
Задания для самостоятельного выполнения
1. Подсчитать число и сумму положительных и число и произведение отрицательных элементов массива.
2. Написать программу, которая вычисляет среднее арифметическое ненулевых элементов введенного с клавиатуры массива целых чисел.
3. Написать программу, которая вычисляет, сколько раз введенное с клавиатуры число, встречается в массиве.
4. Написать программу, которая определяет количество учеников в классе, чей рост превышает средний.
5. Найти номер первого четного элемента массива из целых чисел.
6. Элементы массива X(n) переписать в массив Y(n) в обратном порядке.
7. Осуществить циклический сдвиг компонентов массива на одну позицию влево.
8. Дан массив из девяти чисел. Вывести его на экран в виде матрицы размером 3 X 3.
9. В заданном массиве определить число соседств:
а) двух положительных чисел;
б) двух чисел разного знака;
в) двух чисел одного знака, причем абсолютная величина первого из них должна быть больше второго.
10. В массиве подсчитать количество отрицательных элементов, предшесвующих максимальному элементу массива и заменить нулями все отрицательные элементы массива.
11. Написать программу, которая выводит минимальный элемент введенного с клавиатуры массива целых чисел.
12. Подсчитать количество элементов массива после последнего положительного элемента.
13. Написать программу, которая проверяет, есть ли во введенном с клавиатуры массиве элементы с одинаковым значением и выводит их на экран.
14. Проверить соблюдается ли для данного массива правило A[i]=A[i-1]+A[i-2]] где i=2,3,..n.
15. Сформировать массив по правилу:
A[i]=A[1]+A[2]+...+A[k] где k < i.
Лабораторная работа № 7. Многомерные массивы
Цель работы: Приобретение навыков обработки двумерных массивов.
Задачи:
¾ понять, что такое двумерный массив и как он задается;
¾ определить, в каких случаях целесообразно использовать одномерные массивы;
¾ научиться составлять алгоритмы и программы, использующие сложные циклы.
Порядок выполнения работы:
1. Перед выполнением работы, обязательно, прочитать конспект лекций по теме «Двумерные массивы».
2. Получить дополнительные теоретические знания из источников: [4: Тема 7.4 – 7.6], [7: Занятие 17, 18].
3. Реализовать на ЭВМ разобранные примеры.
4. Самостоятельно выполнить предложенные задачи.
Внимание: переходить к выполнению пунктов 3 и 4 только после тщательной проработки пунктов 1 и 2.
Примеры решения задач
Задача 1. Вычислить суммы элементов строк заданной матрицы x[n,m].
Система тестов:
№ | Значение массива m | Результаты |
1 2 3 2 3 4 2 2 2 | ||
3 0 -3 -2 -3 -4 0 0 0 | -9 |
Решение задачи:
Program Summa_Columns_of_matrix;
Const
n=3; m=3;
var
x:array[1..n,1..m] of integer;
i, j, s: integer;
begin
Writeln('Введите элементы массива x[3X3] ');
for i:=1 to 3 do
for j:=1 to 3 do
read(x[i,j]);
s:=x[1,1]+ x[1,2]+ x[1,3]; writeln(S); s:=x[2,1]+ x[2,2]+ x[2,3]; writeln(S); s:=x[3,1]+ x[3,2]+ x[3,3]; writeln(S); readln; end. | S:=0; for j:=1 to m do s:=s+x[1,j]; writeln(S); S:=0; for j:=1 to m do s:=s+x[2,j]; writeln(S); S:=0; for j:=1 to m do s:=s+x[3,j]; writeln(S); readln; end. |
for i:=1 to n do
begin
s:=0;
for j:=1 to m do
s:=s+x[i,j];
writeln(S);
end;
readln;
end.
1-й выделенный фрагмент кода – объявление двумерного массива x из n строк и m столбцов.
2-й фрагмент – два вложенных цикла для заполнения матрицы числами, введенными с клавиатуры.
Задача 2. Возвести в квадрат элементы на диагоналях матрицы x[n,n].
Система тестов:
№ | Значение массива x[n,n]. | Результаты |
2 2 2 2 2 2 2 2 2 | 4 2 4 2 4 2 4 2 4 |
Решение задачи:
Program Kvadrat_Diagonals;
const
n=3;
var
x:array[1..n,1..n] of integer;
i, j, centr: integer;
begin
Writeln(' Введите элементы массива x[3X3] ');
for i:=1 to n do
for j:=1 to n do
read(m[i,j]);
centr:=n div 2 + n mod 2; {номер центрального элемента}
x[1,1];=x[1,1]* x[1,1]; x[2,2];=x[2,2]* x[2,2]; x[3,3];=x[3,3]* x[3,3]; x[1,3];=x[1,3]* x[1,3]; x[3,1];=x[3,1]* x[3,1]; | for i:=1 to n do x[i,i]:=x[i,i] * x[i,i]; for i:=1 to n do begin if i<> centr then m[i, n+1-i]:= sqr (m[i,n+1-i]); end; |
for i:=1 to n do
begin
m[i,i]:= sqr(m[i,i]);
if i<> centr then
m[I, n+1-i]:=sqr(m[i,n+1-i]);
end;
for i:=1 to n do {Распечатка матрицы на экран}
begin
for j:=1 to n do
Write(m[i,j]:3);
writeln;
end;
readln;
readln;
end.
Задача 3. Поменять местами наибольший и наименьший элементы матрицы.
Система тестов:
№ | Значение массива | Результаты |
1 2 3 7 3 4 2 2 0 | 1 2 3 0 3 4 2 2 7 | |
3 0 -3 -2 -3 -4 0 0 0 | -4 0 -3 -2 -3 3 0 0 0 |
Решение задачи:
Program change_max_min;
Const
n=3; m=3;
var
x:array[1..n,1..m] of integer;
i, j, t, i_max, j_max, i_min, j_min: integer;
begin
Writeln(' Введите элементы массива m ');
for i:=1 to n do
for j:=1 to m do
read(x[i,j]);
i_max:=1;
j_max:=1;
i_min:=1;
j_min:=1;
for i:=1 to 3 do {Цикл поиска номеров максимального и}
for j:=1 to 3 do (минимального элементов массива}
begin
if m[i,j] > m[i_max,j_max] then
begin
i_max:=i;
j_max:=j;
end;
if m[i,j] < m[i_min,j_min] then
begin
i_min:=i;
j_min:=j;
end;
end;
t:=m[i_max,j_max]; {Обмен значениями max и min}
m[i_max,j_max]:=m[i_min,j_min];
m[i_min,j_min]:=t;
for i:=1 to 3 do {Вывод массива на экран}
begin
for j:=1 to 3 do
Write(m[i,j]:3);
writeln;
end;
readln;
end.
Задания для самостоятельного выполнения
1. Вычислить суммы элементов столбцов заданной матрицы A(n,m).
2. В каждой строке матрицы определить является ли сумма ее отрицательных элементов четным или нечетным числом.
3. Найти наибольший элемент матрицы и номер строки и столбца на пересечении которых он находится.
4. Подсчитать сколько раз встречается в заданной матрице максимальное по величине число.
5. В заданной матрице поменять местами строки с номерами A и Q.
6. Умножить столбец с минимальным элементом на число Z.
7. Сдвинуть циклически элементы в строках матрицы на одну позицию влево.
8. В матрице вычислить две суммы элементов, стоящих над главной диагональю и под ней.
9. Поменять местами элементы на главных диагоналях матрицы.
10. Найти количество элементов матрицы, больших среднего арифметического всех ее элементов.
11. В данной матрице найти минимальный элемент в диагоналях.
12. По трем заданным матрицам A[n,m], B[n,m], C[n,m] построить матрицу X того же размера, каждый элемент которой вычисляется по формуле x[i,j]=max(a[i,j],b[i,j],c[i,j].
13. В матрице поменять местами строку и столбец с номером N.
14. Вычислить матрицу С[i,j], являющуюся суммой матриц a[i,j] и b[i,j].
15. Упорядочить элементы к-й строки по возрастанию.
16. Сдвинуть циклически элементы в столбцах матрицы на одну позицию вверх.
17. Найти максимальную из столбцевых сумм.
18. Найти максимальную из строковых сумм.
19. Разделить все элементы столбца, в котором находится минимальный элемент матрицы на максимальный элемент матрицы.
Лабораторная работа № 8. Обработка символьных строк
Цель работы: изучение принципов работы со строковым типом данных.
Задачи:
¾ познакомиться с типом данных String;
¾ изучить способы задания строкового типа и обращения к элементам строки;
¾ изучить основные операции над строками и функции работы с ними.
Порядок выполнения работы:
1. Перед выполнением работы, обязательно, прочитать конспект лекций по теме «Строковый тип данных».
2. Ознакомиться с представленными в лабораторной работе теоретическими сведениями.
3. Получить дополнительные теоретические знания из источников: [7: Занятие 14], [10: Глава 4.3].
4. Реализовать на ЭВМ разобранные примеры.
5. Самостоятельно выполнить предложенные задачи.
Внимание: переходить к выполнению пунктов 4 и 5 только после тщательной проработки пунктов 1 – 3.