Условие задачи : В заданной квадратной матрице A(K,K) (K <= 10) вычислить сумму элементов, расположенных над главной диагональю. Полученной суммой заменить минимальный элемент всей матрицы. Сумму и матрицу распечатать.
Сложность : средняя .
Решение задачи :
Код программы у меня получился немного большим, но на мой взгляд понятным. Сейчас все подробно расскажу. В условии задачи не каких сверхъестественных слов нет.
Для начала продумаем наше решение :
Мы заполним нам массив случайными числами, затем в следующем цикле мы выведем наш массив и найдем минимальный элемент, дальше мы найдем сумму элементов, расположенных над главной диагональю.
Ну а потом заменим минимальный элемент ( хотя их может быть несколько ) суммой.
Для решения задачи нам понадобятся следующие переменные :
- Переменная mass — для нашего массива
- Переменная summa — для суммы элементов, расположенных над главной диагональю
- Переменная min — для минимального элемента массива
- Переменные i и j — для циклов и индексов элементов
Начнем мы с каркаса нашей программы :
uses crt;
const
K = 3 ;
type
massiv = array [1..K, 1..K] of integer;
var
mass : massiv;
summa , min , i , j : integer;
begin
clrscr;
randomize;
summa := 0;
end.
Тут мы создали свой тип данных для массива, как и зачем читайте ( тут ) дальше объявили все переменные, присвоили переменной summa ноль, чтобы не было ошибок, включили генератор случайных чисел , подробнее (тут), ну и задали размер массива (K = 3).
Теперь давайте заполним нам массив случайными числами :
for i:=1 to K do
for j:=1 to K do
mass[i,j] := random(10);
Теперь мы будем искать минимальный элемент, но чтобы это сделать нужно иметь начальное значение минимального элемента, которое у нас будет равняться первому элементу нашего массива, ну так всегда делается.
Теперь мы будем каждое значение массива сравнивать с этим минимальным элементов, и если какое-то из них окажется меньше, то уже оно станет минимальным и так пока цикл не кончится и также сразу же выведем весь массив :
min := mass[1,1];
for i:=1 to K do
begin
for j:=1 to K do
begin
write(mass[i,j], ' | ');
if (mass[i,j] < min) then
min := mass[i,j];
end;
writeln;
end;
Вот теперь у нас минимальный элемент, дальше надо найти сумму элементов, расположенных над главной диагональю. Это какие спросите вы ?
Вот главная диагональ это черная черта от 1-го до последнего элемента матрицы и нам надо найти сумму чисел выше этой диагонали :
for i := 1 to K do
for j := i + 1 to K do
summa := summa + mass[i,j];
Если не понятна суть этого кода просто на листочке нарисуйте и подставьте и вы всё поймете.
Ну теперь можно вывести сумму и минимальный элемент :
Writeln; // для красоты
Writeln('Минимальный элемент матрицы: ', min);
Writeln('Сумма равна ', summa);
Теперь нам осталось заменить все минимальные элементы (если их несколько) , если нет то один суммой, мы еще раз пустим цикл и заменим все числа которые равны числу min и сразу выведем матрицу :
Writeln('Матрица :');
for i:=1 to K do
begin
for j:=1 to K do
begin
if (mass[i,j] = min) then
mass[i,j] := summa;
write(mass[i,j]:2, ' | ');
end;
writeln;
end;
Всё решение задачи Pascal:
uses crt; // модель для работы с экраном
const
K = 3 ; // задаем размер нашего массива
type
massiv = array [1..K, 1..K] of integer; // создаем тип для массива
var
mass : massiv; // объявляем
summa , min , i , j : integer; // переменные
begin
clrscr; // очищаем экран
randomize; // включаем генератор случайных чисел
summa := 0; // обнуляем сумму
for i:=1 to K do // пускаем
for j:=1 to K do // цикл
mass[i,j] := random(10); // и заполняем массив случайными числами
min := mass[1,1]; // минимальному элементу присваиваем зн-е 1-го элемента массива
for i:=1 to K do // пускаем
begin
for j:=1 to K do // цикл
begin
write(mass[i,j], ' | '); // выводим массив
if (mass[i,j] < min) then
min := mass[i,j]; // ищем минимальным элемент
end;
writeln; // переносим курсор на новую строку, чтобы получилась матрица
end;
for i := 1 to K do // пускаем
for j := i + 1 to K do // цикл
summa := summa + mass[i,j]; // ищем сумму
Writeln;
Writeln('Минимальный элемент матрицы: ', min);
Writeln('Сумма равна ', summa);
Writeln('Матрица :');
for i:=1 to K do // пускаем
begin
for j:=1 to K do // цикл
begin
if (mass[i,j] = min) then
mass[i,j] := summa; // заменяем минимальные элементы на сумму
write(mass[i,j]:2, ' | '); // выводим новый массив
end;
writeln;
end;
readln; // чтобы программа не закрывалась
end.
