Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2008, 21:44   #1
Anarx
 
Регистрация: 17.12.2008
Сообщений: 5
По умолчанию Магический квадрат

Помогите решить задачу.

Магическим квадратом порядка n называется квадратная таблица размера nxm, составленная из чисел 1,2,...,n(в квадрате) так, что сума по каждому столбцу, каждой строке и каждой из двух диагоналей равны между собой.
Дана целочисельная квадратная матрица порядка 5, определить является ли она магическим квадратом
Anarx вне форума Ответить с цитированием
Старый 17.12.2008, 22:39   #2
Anarx
 
Регистрация: 17.12.2008
Сообщений: 5
По умолчанию

program rgr1;
uses crt;
type mas=array[1..5,1..5] of integer;
var r1,r2,r3,r4,r5,s1,s2,s3,s4,s5,d1,d2 ,i,j:integer;
a:mas;
procedure showmatrix(m:mas); {Процедура друку матриці}
begin {Початок тіла процедури}
for i:= 1 to 5 do begin
for j:= 1 to 5 do
write(m[i, j]:3); {Друк члена матриці}
writeln;
end;
writeln('------------------------------------------------------------------------');
end; {Кінець тіла процедури}
begin clrscr; {Початок тіла програми}
writeln('Розрахунково-графічна робота (задача №1014)');
writeln('------------------------------------------------------------------------');
writeln('Виконав ст.гр. КМ-805 Плинько Р.В.');
writeln('Перевірив ас. Якимук Л.А.');
writeln('------------------------------------------------------------------------');
writeln('Початок роботи програми');
writeln('------------------------------------------------------------------------');
for i:=1 to 5 do
for j:=1 to 5 do
begin
write('Введіть a[',i,',',j,']: ');
readln(a[i,j]); {Ввід члена з клавіатури}
end;
showmatrix(a);
s1:=0;s2:=0;s3:=0;s4:=0;s5:=0;
for i:=1 to 5 do begin
s1:=s1+a[i,1];
s2:=s2+a[i,2];
s3:=s3+a[i,3];
s4:=s4+a[i,4];
s5:=s5+a[i,5];
end;
r1:=0; r2:=0; r3:=0; r4:=4; r5:=0;
for j:=1 to 5 do begin
r1:=r1+a[1,j];
r2:=r1+a[2,j];
r3:=r1+a[3,j];
r4:=r1+a[4,j];
r5:=r1+a[5,j];
end;
d1:=0; d2:=0;
for i:=1 to 5 do
d1:=d1+a[i,i];
for j:=1 to 5 do
d2:=d2+a[6-j,j];
if (s1=s2) and (s1=s3) and (s1=s4) {and (s1=s5) and (s1=r1) and (s1=r2 and (s1=r3) and (s1=r4) and (s1=r5) and (s1=d1)
and (s2=d2)} then writeln('Це магічний квадрат!') else
write('Це не магічний квадрат!');
readln;

end.


вродь и сделал, но выдает ошибку...помогите плз
Anarx вне форума Ответить с цитированием
Старый 18.12.2008, 13:07   #3
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
uses crt;
const n=5;
var a:array[1..n,1..n] of integer;
   i,j,s,s1:integer;
   flag:boolean;

begin
clrscr;
randomize;
flag:=true;
for i:=1 to n do
 begin
  for j:=1 to n do
    begin
     a[i,j]:=1;
     write(a[i,j]:2);
    end;
  writeln;
 end;
s:=0;
for i:=1 to n do
 s:=s+a[1,i];
for i:=2 to n do
 begin
  s1:=0;
  for j:=1 to 5 do
   s1:=s1+a[i,j];
  if s<>s1 then flag:=false;
 end;
if flag then begin
              for j:=1 to n do
                 begin
                  s1:=0;
                   for i:=1 to 5 do
                    s1:=s1+a[i,j];
                    if s<>s1 then flag:=false;
                  end;
              if flag then begin
                           s1:=0;
                            for i:=1 to n do
                             for j:=1 to n do
                              if i=j then s1:=s1+a[i,j];
                            if s<>s1 then flag:=false;
                            if flag then begin
                                          s1:=0;
                                          i:=1;j:=n;
                                          while i<=n do
                                           begin
                                            s1:=s1+a[i,j];
                                            inc(i);dec(j);
                                           end;
                                          if s<>s1 then flag:=false;
                                         end;
                           end;
             end;
if flag then writeln('Magic')
   else writeln('No Magic');
readln;

end.
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение мыслей компьютером (Магический квадрат) Arigato Софт 17 29.09.2010 09:51
квадрат в TEdit wawan93 Общие вопросы Delphi 4 04.12.2008 12:33
Магический квадрат v 0.01 (РПГ демо) Phoenix77 Gamedev - cоздание игр: Unity, OpenGL, DirectX 23 03.09.2008 02:20
магический куб Diller Помощь студентам 3 09.09.2007 11:35
создать магический квадрат nev Помощь студентам 8 13.06.2007 10:41