Другие языки программирования и технологии
Программирование на PASCAL
Как реализовать данный алгоритм?Дана матрица n-ного порядка. Определить является ли она магическим квадратом (то есть таким, у которого сумма чисел стоящих во всех столбцах и в строках совпадает).
Доброго времени суток.
Ну если только кусок.. . Пишите функцию, возвращающую сумму элементов строки.
function SumRow(Row: Integer): Integer;
var j, S : Integer;
begin
S := 0;
for j:=1 to n do S := S + A[Row,j];
SumRow := S;
end;
Аналогично для столбцов. А затем проверяете
RowValid := True; {предположим, что суммы по строка равны}
for j:=1 to n-1 do
if SumRow(j) <> SumRow(j+1) then begin
RowValid := False; {сбросим флаг}
Break; {дальше нет смысла проверять}
end;
Если после выполнения этого цикла RowValid остается истинной, то проверяете столбцы. Если и там все в порядке, то проверяете
if SumRow(1) = SumCol(1) then ...
Вот только не все здесь шокаладно. Если не изменяет память, то магическим квадратом считается такой, у которого не только суммы совпадают, но и каждое число присутствует в строке и столбце только в одном экземпляре.
Удачи!
Ну если только кусок.. . Пишите функцию, возвращающую сумму элементов строки.
function SumRow(Row: Integer): Integer;
var j, S : Integer;
begin
S := 0;
for j:=1 to n do S := S + A[Row,j];
SumRow := S;
end;
Аналогично для столбцов. А затем проверяете
RowValid := True; {предположим, что суммы по строка равны}
for j:=1 to n-1 do
if SumRow(j) <> SumRow(j+1) then begin
RowValid := False; {сбросим флаг}
Break; {дальше нет смысла проверять}
end;
Если после выполнения этого цикла RowValid остается истинной, то проверяете столбцы. Если и там все в порядке, то проверяете
if SumRow(1) = SumCol(1) then ...
Вот только не все здесь шокаладно. Если не изменяет память, то магическим квадратом считается такой, у которого не только суммы совпадают, но и каждое число присутствует в строке и столбце только в одном экземпляре.
Удачи!
uses crt;
var z,i,k,j,s,n,p,prds,prds1,s1:integer;
a:array[1..1000,1..1000]of integer;
procedure viv; //ïðîöåäóðà âûâîäà
begin
for i:=1 to n do
begin
writeln;
for J:=1 to n do
write(a[ i,j ]:4)
end;
writeln;
end;
begin
randomize;
readln(n);//êîë âî ñòðîê è ñòîëáöîâ
for i:=1 to n do
for J:=1 to n do
a[ i, j]:=random(20);
viv;
for i:=1 to n do
begin
prds:=s;
s:=0;
for j:=1 to n do
s:=s+a[ i,j ];
if(prds=s)then k:=k+1;
end; //íàõîäèì ñóììó â êàæäîé ñòðîêó è ñðàâíèâååì ñ ïðåä ñòðîê
for j:=1 to n do
begin
prds1:=s1;
s1:=0;
for i:=1 to n do
s1:=s1+a[ i,j ];
if(prds1=s1)then z:=z+1;
end;
if (k=n-1)and(z=n-1) then writeln('magik kvad')
end.
var z,i,k,j,s,n,p,prds,prds1,s1:integer;
a:array[1..1000,1..1000]of integer;
procedure viv; //ïðîöåäóðà âûâîäà
begin
for i:=1 to n do
begin
writeln;
for J:=1 to n do
write(a[ i,j ]:4)
end;
writeln;
end;
begin
randomize;
readln(n);//êîë âî ñòðîê è ñòîëáöîâ
for i:=1 to n do
for J:=1 to n do
a[ i, j]:=random(20);
viv;
for i:=1 to n do
begin
prds:=s;
s:=0;
for j:=1 to n do
s:=s+a[ i,j ];
if(prds=s)then k:=k+1;
end; //íàõîäèì ñóììó â êàæäîé ñòðîêó è ñðàâíèâååì ñ ïðåä ñòðîê
for j:=1 to n do
begin
prds1:=s1;
s1:=0;
for i:=1 to n do
s1:=s1+a[ i,j ];
if(prds1=s1)then z:=z+1;
end;
if (k=n-1)and(z=n-1) then writeln('magik kvad')
end.
Чувак открой книгу и прочитай, задача не сложная. Если ты на таких задачах заваливаешся подумай что будет дальше...
Похожие вопросы
- Здравствуйте! помогите пожалуйста выполнить зачётные задания по программированию на Pascal
- Программирование на pascal
- 1.Рекурсия в языке программирования Borland Pascal 7.0. 2.Понятие и виды информации. Ее свойства.
- Программирование. Матрицы. Pascal.
- программирование в pascal. Даны 3 числа. Определить сколько среди них нулей
- Помогите с программированием на Pascal ABC
- С чего лучше начать изучение программирования? С Pascal или можно сразу с Java?
- Олимпиадная задача по программированию в Pascal (Free, ABC.net) 10 класс! Помогите решить?)
- Программирование на Pascal
- ИКТ. Программирование на Pascal Turbo