Упорядочьте строки по неубыванию сумм цифр элементов этой строки - Turbo Pascal
Формулировка задачи:
1)Пусть дана матрица A(n x m). Упорядочьте строки по неубыванию сумм цифр элементов этой строки. Воспользуйтесь функцией, определяющей для каждого числа сумму его цифр.
Решение задачи: «Упорядочьте строки по неубыванию сумм цифр элементов этой строки»
textual
Листинг программы
uses crt;
function s_cifr(a:integer):integer;
var b,s:integer;
begin
b:=abs(a);
s:=0;
while b>0 do
begin
s:=s+b mod 10;
b:=b div 10;
end;
s_cifr:=s;
end;
const nmax=10;
var a:array[1..nmax,1..nmax+1] of integer;
n,m,i,j,k,p,max,x:integer;
begin
clrscr;
randomize;
repeat
write('Количество строк от 2 до ',nmax,' n=');
readln(n);
until n in [2..nmax];
repeat
write('Количество столбцов от 2 до ',nmax,' m=');
readln(m);
until m in [2..nmax];
for i:=1 to n do
for j:=1 to m do
a[i,j]:=-300+random(1000);
{считаем суммы цифр в строках}
for i:=1 to n do
begin
a[i,m+1]:=0;{сумму цифр записываем в дополнительный стобец}
for j:=1 to m do
a[i,m+1]:=a[i,m+1]+s_cifr(a[i,j]);
end;
writeln('Исходная матрица:');
writeln('Сумма цифр':m*5+12);
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:5);{элементы строки}
writeln(a[i,m+1]:7);
end;
{перестановка строк по неубыванию значений в последнем столбце}
for i:=1 to n-1 do
for k:=i+1 to n do
if a[i,m+1]>a[k,m+1] then
for j:=1 to m+1 do
begin
x:=a[i,j];
a[i,j]:=a[k,j];
a[k,j]:=x;
end;
writeln('Строки упорядочены по неубыванию сумм цифр:');
writeln('Сумма цифр':m*5+12);
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:5);
writeln(a[i,m+1]:7);
end;
readln
end.
Объяснение кода листинга программы
- Создается функция
s_cifr, которая принимает целое числоaи возвращает сумму его цифр. Функция использует циклwhile, чтобы последовательно делить число на 10 и добавлять остаток от деления к сумме цифр. - Создается переменная
a, которая представляет собой матрицу целых чисел размеромnmax x (nmax+1). Каждый элемент матрицы устанавливается на-300плюс случайное число в диапазоне от 0 до 999. Это создает случайную матрицу. - Заполняются строки матрицы
a. Для каждой строкиiи каждого столбцаjустанавливается значениеa[i,j]равным сумме цифр элементов строкиi. Сумма цифр записывается в дополнительный столбецa[i,m+1]. - Выводится исходная матрица
aи сумма цифр, которая равна произведению количества строк на 5 и 12 (это нужно для вычисления суммы цифр в строках). - Переставляются строки матрицы
aпо неубыванию значений в последнем столбце. Для этого используется алгоритм перестановки, который переставляет строкиiиkместами, если значениеa[i,m+1]больше значенияa[k,m+1]. - Выводится матрица
aпосле перестановки строк. - Выводится последняя строка матрицы
aи сумма цифр, которая равна произведению количества строк на 5 и 12.