Условие задачи : В заданной квадратной матрице 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.