Код
{чисто код}
program Radhe;)
const
n=3;
m=4;
var
A:array [1..n,1..m] of Integer;
i,j:Byte;
function SummaCifr(Chislo:Integer) : Integer;
var
Summa:Byte;
poslednjaya_cifra:Integer;
begin
Summa:=0;
while Chislo>0 do begin
poslednjaya_cifra:= chislo mod 10;
Summa:= Summa + poslednjaya_cifra;
Chislo:= Chislo div 10;
end;
SummaCifr:= Summa;
end;
function Najti_vse_Elementi_s_takoj_Ge_Summoj(Iskomaya_Summa:Integer) : Integer;
var a,b:Byte;
begin
WriteLn(' Ischem po vsej matrice element s summoj cifr ravnoj ' , Iskomaya_Summa );
for b:=1 to m do
for a:=1 to n do
if ( SummaCifr( A[a,b] ) = Iskomaya_Summa ) then WriteLn(' Element Najden v pozicii: '); WriteLn(' a = ',a ); WriteLn(' b = ', b );
end; {konec funkcii}
begin
{ввод}
for j:=1 to m do
for i:=1 to n do
ReadLn( A[i, j] );
{вывод}
for j:=1 to m do begin
WriteLn(' | ');
ХХ for i:=1 to n do
Write( A[i, j] , ' | ' );
end;
{Поиск}
for j:=1 to m do
for i:=1 to n do
Najti_vse_Elementi_s_takoj_Ge_Summoj( SummaCifr( A[i,j] ) );
ReadLn;
end.
program Radhe;)
const
n=3;
m=4;
var
A:array [1..n,1..m] of Integer;
i,j:Byte;
function SummaCifr(Chislo:Integer) : Integer;
var
Summa:Byte;
poslednjaya_cifra:Integer;
begin
Summa:=0;
while Chislo>0 do begin
poslednjaya_cifra:= chislo mod 10;
Summa:= Summa + poslednjaya_cifra;
Chislo:= Chislo div 10;
end;
SummaCifr:= Summa;
end;
function Najti_vse_Elementi_s_takoj_Ge_Summoj(Iskomaya_Summa:Integer) : Integer;
var a,b:Byte;
begin
WriteLn(' Ischem po vsej matrice element s summoj cifr ravnoj ' , Iskomaya_Summa );
for b:=1 to m do
for a:=1 to n do
if ( SummaCifr( A[a,b] ) = Iskomaya_Summa ) then WriteLn(' Element Najden v pozicii: '); WriteLn(' a = ',a ); WriteLn(' b = ', b );
end; {konec funkcii}
begin
{ввод}
for j:=1 to m do
for i:=1 to n do
ReadLn( A[i, j] );
{вывод}
for j:=1 to m do begin
WriteLn(' | ');
ХХ for i:=1 to n do
Write( A[i, j] , ' | ' );
end;
{Поиск}
for j:=1 to m do
for i:=1 to n do
Najti_vse_Elementi_s_takoj_Ge_Summoj( SummaCifr( A[i,j] ) );
ReadLn;
end.
теперь тот же код, но плюс небольшие комментарии:
Код
program Radhe;)
const
n=3;
m=4;
var
A:array [1..n,1..m] of Integer;
i,j:Byte;
function SummaCifr(Chislo:Integer) : Integer;
var
Summa:Byte;
poslednjaya_cifra:Integer;
begin
Summa:=0;
while Chislo>0 do begin
poslednjaya_cifra:= chislo mod 10; {взять из числа остаток от деления на 10 (тоесть получить последнюю цифру)
например 123 mod 10 = 3; 51 mod 10 = 1; 9 mod 10 = 9; 3 mod 10 = 3; }
Summa:= Summa + poslednjaya_cifra;
Chislo:= Chislo div 10; {убрать из числа последний разряд - целочисленное деление. например 1234 div 10 = 123. 123 div 10 = 12; 12 div 10 = 1; 1 div 10 = 0}
end; {конец цикла while }
{теперь число было поделено на цифры, а цифры были ссумированы в переменную Summa}
{остается только передать высчитанный результат имени функции}
SummaCifr:= Summa;
end;{конец функции SummaCifr }
function Najti_vse_Elementi_s_takoj_Ge_Summoj(Iskomaya_Summa:Integer) : Integer;
var a,b:Byte;
begin
WriteLn(' Ischem po vsej matrice element s summoj cifr ravnoj ' , Iskomaya_Summa );
for b:=1 to m do
for a:=1 to n do
if ( SummaCifr( A[a,b] ) = Iskomaya_Summa ) then WriteLn(' Element Najden v pozicii: '); WriteLn(' a = ',a ); WriteLn(' b = ', b );
end; {konec funkcii}
begin
{ввод}
for j:=1 to m do
for i:=1 to n do
ReadLn( A[i, j] );
{вывод}
for j:=1 to m do begin
WriteLn(' | ');
ХХ for i:=1 to n do
Write( A[i, j] , ' | ' );
end;
{Поиск}
for j:=1 to m do
for i:=1 to n do
Najti_vse_Elementi_s_takoj_Ge_Summoj( SummaCifr( A[i,j] ) );
ReadLn;
end.
const
n=3;
m=4;
var
A:array [1..n,1..m] of Integer;
i,j:Byte;
function SummaCifr(Chislo:Integer) : Integer;
var
Summa:Byte;
poslednjaya_cifra:Integer;
begin
Summa:=0;
while Chislo>0 do begin
poslednjaya_cifra:= chislo mod 10; {взять из числа остаток от деления на 10 (тоесть получить последнюю цифру)
например 123 mod 10 = 3; 51 mod 10 = 1; 9 mod 10 = 9; 3 mod 10 = 3; }
Summa:= Summa + poslednjaya_cifra;
Chislo:= Chislo div 10; {убрать из числа последний разряд - целочисленное деление. например 1234 div 10 = 123. 123 div 10 = 12; 12 div 10 = 1; 1 div 10 = 0}
end; {конец цикла while }
{теперь число было поделено на цифры, а цифры были ссумированы в переменную Summa}
{остается только передать высчитанный результат имени функции}
SummaCifr:= Summa;
end;{конец функции SummaCifr }
function Najti_vse_Elementi_s_takoj_Ge_Summoj(Iskomaya_Summa:Integer) : Integer;
var a,b:Byte;
begin
WriteLn(' Ischem po vsej matrice element s summoj cifr ravnoj ' , Iskomaya_Summa );
for b:=1 to m do
for a:=1 to n do
if ( SummaCifr( A[a,b] ) = Iskomaya_Summa ) then WriteLn(' Element Najden v pozicii: '); WriteLn(' a = ',a ); WriteLn(' b = ', b );
end; {konec funkcii}
begin
{ввод}
for j:=1 to m do
for i:=1 to n do
ReadLn( A[i, j] );
{вывод}
for j:=1 to m do begin
WriteLn(' | ');
ХХ for i:=1 to n do
Write( A[i, j] , ' | ' );
end;
{Поиск}
for j:=1 to m do
for i:=1 to n do
Najti_vse_Elementi_s_takoj_Ge_Summoj( SummaCifr( A[i,j] ) );
ReadLn;
end.
сделано побыстрому, на уровне "школьной программы"..
оттуда и тр\анслитные названия) чтобы общедоступно было)
{внимательные заметят, что проще было сначала заменить каждое число матрицы на сумму цифр этого числа,
тогда было бы намного оптимальнее. тоесть пройтись по всем элементам матрицы, заменяя значение элемента на его сумму циф.
и затем просто искать по матрице положения элементов равных текущему.
можно так же добавить игнорирование
тех элементов, значение суммы цифр которых, мы уже искали.
например для случая
19 91 19 19 82 72
55 66 91 19 22 55 33
много повторных проходов будет по числам 19 и 91
а по сути - много повторных проходов по поиску суммы 9+1 = 1+9 = 8+2 = 10
поэтому можно добавить еще и и игнорирование.
или при этом еще сделать множество проанализированных значений,
для случая когда в матрице 5 одинаковых элементов и для четырех (последних) из них результаты будут теми же что и после первого,
и процес полного поиска будет впустую выполняться еще четыре раза.
выдавая те же самые результаты, что и впервый раз}
{но поскольку задача не олимпиадная, а для второго курса техникума, то чтобы не сбивать начинающих программистов
- лишнего вписывать не буду
только простая учебная классика)
Всем Удачи!)
}