• Дана целая квадратная матрица, n- го порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой сумма элементов во всех строках и столбцах одинаковая. Нужна адекватная программа уровня 11 класса на паскале.

Ответы 7

  • end; if (t) then begin k:=1; while (k<=n) and (t) do begin if z[k]<>sum then begin t:=false; {ошибка по столбцам} y:=2; x:=k {номер столбца} end; k:=k+1 end; end; if (t) then if sd<>sum then begin t:=false; {ошибка по главной диагонали} y:=3; x:=0; end; if (t) then if zd<>sum then begin t:=false; {ошибка по побочной диагонали} y:=4; x:=0; end; if t then writeln('Тест прошел успешно'); End;
    • Автор:

      ava5
    • 6 лет назад
    • 0
  • Begin {Основная программа} 1: TextBackGround(blue); ClrScr; WinSh(20,3,60,6,blue,white); GotoXY(9,2); write('Магический квадрат'); GotoXY(10,3); write('(c) 2006 г.'); Window(1,1,80,25); TextColor(yellow); TextBackGround(blue); GotoXY(60,18); write(' 8 ¦ 1 ¦ 6'); GotoXY(60,19); write('===+===+==='); GotoXY(60,20); write(' 3 ¦ 5 ¦ 7'); GotoXY(60,21); write('===+===+==='); GotoXY(60,22); write(' 4 ¦ 9 ¦ 2'); TextColor(white); TextBackGround(white); for x:=2 to 79 do begin GotoXY(x,25); write(' ');
  • end; GotoXY(5,25); write('Размерность =0 - конец работы программы. Рекомендуем размерность от 3 до 19'); Winsh(30,10,50,12,cyan,white); repeat TextColor(white); GotoXY(4,2); write('Размерность=');readln(n); until (n<>1) and (n<>2); {квадрат для n=1 и для n=2 строить нельзя} if n=0 then halt; {выход из программы} {Если n-нечетно, то OddMag, иначе ...} if odd(n) then OddMagic(n,a) else if n mod 4=0 then Four(n,a) else Two(n,a);
  • TextBackGround(blue); Window(1,1,80,25); ClrScr; TextColor(yellow); ClrScr; {вывод} Writeln('Магический квадрат ',n,'x',n); Print(n,a); writeln(''); Test(n,a,t,x,y);
  • {Процедура тестирования квадрата} if (t) then writeln('Суммы по столбцам, строкам и диагоналям =',n*(n*n+1) div 2) else begin writeln('Ошибка'); case y of 1: writeln('Ошибка в строке ',x); 2: writeln('Ошибка в столбце ',x); 3: writeln('Ошибка по главной диагонали'); 4: writeln('Ошибка по побочной диагонали') end; end; readln; goto 1; End.
    • Автор:

      baldomero
    • 6 лет назад
    • 0
  • Program MagicSquares; {Построение магических квадратов} Uses CRT; Type a_type=array[1..50,1..50] of integer; Var i,j,n:integer; a:a_type; t:boolean; {логическая переменная true (правда) или false (ложь)} x,y:integer; Label 1; {метка} Procedure Print(n:integer; a:a_type); {процедура вывода} Var i,j:integer; Begin for i:=1 to n do begin for j:=1 to n do write(a[i,j]:4); writeln(''); end; end; Procedure WinSh(x1,y1,x2,y2,col1,col2:word); {процедура вывода окна} Begin TextBackGround(black); Window (x1+1,y1+1,x2+1,y2+1); {тень - черный прямоугольник} ClrScr; TextBackGround(col1); Window(x1,y1,x2,y2); ClrScr; TextColor(col2); {рисование рамки} GotoXY(2, 1); write('г'); for i:=1 to x2-x1-2 do write('='); GotoXY(x2-x1,1); write('='); GotoXY(2,y2-y1+1); write('L'); for i:=1 to x2-x1-2 do write('='); GotoXY(x2-x1,y2-y1+1); write('-'); for j:=2 to y2-y1 do begin GotoXY(2,j); write('¦'); GotoXY(x2-x1,j); write('¦'); end; End; Procedure OddMagic(n:integer; var a:a_type); {Процедура формирования магического квадрата при нечетном n. Описание алгоритма в сопроводительной записке } Var i,j,k:integer; p,l:integer; Begin for i:=1 to n do for j:=1 to n do a[i,j]:=0; j:=n div 2 +1; p:=sqr(n); i:=1; a[i,j]:=1; for l:=2 to p do begin i:=i-1; j:=j+1; if (i=0) and (j<>n+1) then i:=n; if (j=n+1) and (i<>0) then j:=1; if ((i=0) and (j=n+1)) or (a[i,j]<>0) then {важен порядок условий!} begin i:=i+2; j:=j-1; end; a[i,j]:=l; end; end; Procedure Two (n:integer; var a:a_type); {Процедура построения квадрата при n обычной четности: n=6,10,14,18...} Var u,i,j,k,m,z:integer; b:a_type; Begin u:= n div 2; m:=(u-1) div 2; OddMagic(u,b); {вызов процедуры построения квадрата при нечет-ном u} k:=u*u; for i:=1 to n do for j:=1 to n do begin if (i>=1) and (i<=u) and (j>=1) and (j<=u) then a[i,j]:=b[i,j]; if (i>=u+1) and (i<=n) and (j>=u+1) and (j<=n) then a[i,j]:=b[i-u,j-u]+k; if (i>=1) and (i<=u) and (j>=u+1) and (j<=n) then a[i,j]:=b[i,j-u]+2*k; if (i>=u+1) and (i<=n) and (j>=1) and (j<=u) then a[i,j]:=b[i-u,j]+3*k; end; for i:=1 to u do if i=u div 2+1 then begin j:= u div 2+1; for k:=1 to m do begin z:=a[i,j]; {обмен данными} a[i,j]:=a[i+u,j]; a[i+u,j]:=z; j:=j-1 end; end 
  • const n=5;var a:array[1..n,1..n] of integer;i,j,s1,s2:integer;b:boolean;beginfor i:=1 to n do for j:=1 to n do read(a[i,j]);b:=true;s1:=0;for j:=1 to n do s1:=s1+a[1,j];for i:=1 to n do begin s2:=0; for j:=1 to n do s2:=s2+a[i,j]; if s1<>s2 then b:=false; s2:=0; for j:=1 to n do s2:=s2+a[j,i]; if s1<>s2 then b:=false; end;if b then writeln('Матрица - магический квадрат')     else writeln('Матрица не является магическим квадратом');end.Пример 1:17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9Матрица - магический квадратПример 2:15 24 1 8 175 23 7 14 1622 4 6 13 2010 12 19 21 311 18 2 25 9Матрица не является магическим квадратом
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years