Задача 1.
Каждый элемент строки разделить на предварительно рассчитанную сумму элементов этой строки.
Действие программы.
Пользователь заполняет матрицу 5 на 5. Затем программа выводит исходный вид матрицы с помощью двух циклов с параметром. После, запускается 2 новых цикла с параметром, где программа считает сумму строки, затем делит все элементы строки на сумму строки и выводит на экран.
Назначение переменных
Переменная | Тип | Назначение |
a | real | Двумерный массив, где хранятся введенные значения |
i, j | integer | Счетчик цикла |
sum | real | Сумма строки |
Текст программы.
program lab06_01;
Const
n = 5;
m = 5;
Type
matr1 = array [1..n, 1..m] of real;
Var
a: matr1; // Матрица
i, j: integer; // Счетчик цикла
sum: real; // Сумма всех элементов данной строки
Begin
writeln('Задача программы: Каждый элемент строки разделить на предварительно рассчитанную сумму элементов этой строки.');
for i:= 1 to n do
Begin
writeln('Новая строка (',i,'): ');
for j:= 1 to m do
Begin
write(j,') ');readln(a[i, j]);
end;
end;
//Вывод исходной матрицы на экран
writeln('Исходная матрица:');
for i:= 1 to n do
Begin
write(i,':');
for j:= 1 to m do
Begin
write(a[i,j]:6);
end;
writeln;
end;
//Обработка и вывод новой матрицы
writeln('Отработанная матрица:');
for i:= 1 to n do
Begin
sum:= 0;
write(i, ':'); // Вывод номера строки
// Сумма всех элементов в строке
for j:= 1 to m do
sum:= sum + a[i,j];
// Делим каждый элемент в строке
for j:= 1 to m do
Begin
a[i,j]:= a[i,j] / sum;
write(a[i,j]:6:2);
end;
writeln(' (', sum:0:2, ')');
end;
writeln;
write('Программа закончила свою работу...'); readln;
end.
Тестирование программы
Задача программы: Каждый элемент строки разделить на предварительно рассчитанную сумму элементов этой строки.
Новая строка (1):
1) 5
2) 4
3) 6
4) 5
5) 4
Новая строка (2):
1)
2) 2
3) 3
4) 4
5) 5
Новая строка (3):
1) 6
2) 5
3) 4
4) 3
5) 2
Новая строка (4):
1) 9
2) 8
3) 7
4) 6
5) 5
Новая строка (5):
1) 8
2) 7
3) 6
4) 5
5) 4
Исходная матрица:
1: 5 4 6 5 4
2: 1 2 3 4 5
3: 6 5 4 3 2
4: 9 8 7 6 5
5: 8 7 6 5 4
Отработанная матрица:
1: 0.21 0.17 0.25 0.21 0.17 (24.00)
2: 0.07 0.13 0.20 0.27 0.33 (15.00)
3: 0.30 0.25 0.20 0.15 0.10 (20.00)
4: 0.26 0.23 0.20 0.17 0.14 (35.00)
5: 0.27 0.23 0.20 0.17 0.13 (30.00)
Программа закончила свою работу...
Задача 2.
В двумерном массиве целых чисел заменить все элементы, меньшие суммы элементов первой строки на эту сумму.
Работа программы
1) Матрица заполняется с клавиатуры пользователя, или рандомно.
2) При вводе значений в первую строку, программа сохраняет сумму.
3) Выводится исходная и обработанная матрица. Перед выводом обработанного значения, условный оператор проверяет, не меньше ли суммы первой строки, в случае успеха – меняет значение на сумму.
Назначение переменных
Переменная | Тип | Назначение |
a | integer | Двумерный массив. (заполняется с клавиатуры, либо рандомом) |
i, j | integer | Счетчик цикла |
sum | integer | Сумма первой строки |
cRandom | char | Заполнить массив рандомными числами? (вводится с клавиатуры) |
Блок схема.
Текст программы.
program lab06_02;
Const
n = 5;
m = 5;
Var
a: array [1..n,1..m] of integer;
i,j: integer;
sum: integer;
cRandom: char;
Begin
writeln('Задача программы: В двумерном массиве целых чисел заменить все элементы, меньшие суммы элементов первой строки на эту сумму.');
write('Заполнить матрицу автоматически? (y или n)'); readln(cRandom);
randomize;
// Заполнение первой строки матрицы
for j:= 1 to m do
Begin
write('[1,',j,'] ');
if cRandom = 'y' then
Begin
a[1,j]:= random(10);
writeln(a[1,j]);
End
else readln(a[1, j]);
sum:= sum + a[1,j];
end;
// Заполнение остальных строк матрицы
for i:= 2 to n do
Begin
for j:= 1 to m do
Begin
write('[',i,',',j,'] ');
if cRandom = 'y' then
Begin
a[i,j]:= random(100);
writeln(a[i,j]);
End
else readln(a[i, j]);
end;
end;
writeln('Сумма первой строки: ', sum);
//Вывод исходной матрицы на экран
writeln('Исходная матрица:');
for i:= 1 to n do
Begin
for j:= 1 to m do write(a[i,j]:6);
writeln;
end;
//Обработка и вывод новой матрицы
writeln('Обработанная матрица:');
for i:= 1 to n do
Begin
for j:= 1 to m do
Begin
if a[i,j] < sum then a[i,j]:= sum;
write(a[i,j]:6);
end;
writeln;
end;
end.
Тестирование программы
Задача программы: В двумерном массиве целых чисел заменить все элементы, меньшие суммы элементов первой строки на эту сумму.
Заполнить матрицу автоматически? (y или n)y
[1,1] 7
[1,2] 0
[1,3] 8
[1,4] 2
[1,5] 7
[2,1] 6
[2,2] 93
[2,3] 24
[2,4] 27
[2,5] 85
[3,1] 54
[3,2] 54
[3,3] 26
[3,4] 19
[3,5] 61
[4,1] 8
[4,2] 75
[4,3] 82
[4,4] 80
[4,5] 97
[5,1] 56
[5,2] 93
[5,3] 25
[5,4] 78
[5,5] 83
Сумма первой строки: 24
Исходная матрица:
7 0 8 2 7
6 93 24 27 85
54 54 26 19 61
8 75 82 80 97
56 93 25 78 83
Обработанная матрица:
24 24 24 24 24
24 93 24 27 85
54 54 26 24 61
24 75 82 80 97
56 93 25 78 83
Задача 3.
Дана вещественная матрица размерности n * m. Удалить k столбец матрицы.
Описание действий задачи.
1) Матрица заполняется с клавиатуры пользователя, или рандомно.
2) Заполненная матрица выводится на экран с помощью циклов с параметром и пользователь вводит номер столбца, который нужно удалить.
3) Столбец удаляется при помощи цикла и выводится измененная матрица на экран
Назначение переменных
Переменная | Тип | Назначение |
a | real | Двумерный массив. (Заполняется с клавиатуры, либо рандомом) |
i, j | integer | Счетчик цикла |
n, m | integer | Длина и ширина матрицы. (Вводится с клавиатуры) |
k | integer | Нужен для удаления столбца (Вводится с клавиатуры) |
Блок схема.
Текст программы.
program lab06_03;
Var
a: array [1..100,1..100] of real;
i,j: integer;
k, n, m: integer;
cRandom: char;
Begin
writeln('Дана вещественная матрица размерности n * m. Удалить k столбец матрицы.');
write('Введите два значения через пробел - n и m (макс: 100): '); readln(n,m);
write('Заполнить матрицу автоматически? (y или n)'); readln(cRandom);
randomize;
// Заполнение остальных строк матрицы
for i:= 1 to n do
Begin
for j:= 1 to m do
Begin
write('[',i,',',j,'] ');
if cRandom = 'y' then
Begin
a[i,j]:= random(100);
writeln(a[i,j]);
End
else readln(a[i, j]);
end;
end;
writeln('Исходная матрица:');
for i:= 1 to n do
Begin
for j:= 1 to m do
write(a[i,j]:4);
writeln;
end;
write('Какой столбец удалить? (Макс ',m,')'); readln(k);
for i:= 1 to n do
Begin
a[i,k]:= 0;
end;
writeln('Обработанная матрица:');
for i:= 1 to n do
Begin
for j:= 1 to m do
write(a[i,j]:4);
writeln;
end;
end.
Тестирование
Дана вещественная матрица размерности n * m. Удалить k столбец матрицы.
Введите два значения через пробел - n и m (макс: 100): 10
Заполнить матрицу автоматически? (y или n)y
[1,1] 62
[1,2] 68
…
[10,10] 5
Исходная матрица:
62 68 39 99 10 50 2 64 74 30
37 95 10 88 88 99 53 44 33 31
93 65 46 47 46 7 9 45 97 69
47 31 63 23 66 89 1 85 76 63
18 72 16 25 11 57 6 55 42 60
54 67 73 52 90 97 22 92 52 3
41 56 66 5 82 6 31 87 21 99
97 68 67 70 12 21 48 20 35 89
0 53 3 36 14 79 57 11 33 68
66 9 32 73 22 61 5 11 43 5
Какой столбец удалить? (Макс 10)2
Обработанная матрица:
62 0 39 99 10 50 2 64 74 30
37 0 10 88 88 99 53 44 33 31
93 0 46 47 46 7 9 45 97 69
47 0 63 23 66 89 1 85 76 63
18 0 16 25 11 57 6 55 42 60
54 0 73 52 90 97 22 92 52 3
41 0 66 5 82 6 31 87 21 99
97 0 67 70 12 21 48 20 35 89
0 0 3 36 14 79 57 11 33 68
66 0 32 73 22 61 5 11 43 5
Задача 4.
Дважды монотонный. Массив чисел А[1:m, 1:n] упорядочен по £ по строкам и по столбцам, то есть
A[i, 1] £ A[i, 2] £... при всех I = 1,..., m,
A[1,j] £ А[2,j] £... при всех j = 1,..., n.
Найти элемент массива, равный заданному числу х, и напечатать НЕТ, если такого элемента не окажется.