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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 11:42   #1
Irk-O
 
Регистрация: 07.10.2010
Сообщений: 6
Радость магический квадрат

добрый день. помогите найти ошибку в программе. пожалуйста не предлогайте другие решения,необходимо исправить именно этот способ. задание простое определить является ли введеная с клавиатуры матрица магическим квадратом:
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var   flag: Boolean;
  Form1: TForm1;
  a:array[0..10,0..10] of integer;
j,m,i,k, q,sumid,sum:integer;
   const n=5;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
 stringgrid1.colCount:=n;
for i:=0 to n-1 do
   for j:=0 to n-1 do
     a[i,j]:=strtoint(stringgrid1.Cells[j,i]);
 flag:=true;
sumid:=0 ;
k:=0;
   for i:=0 to n-1 do sumid:=sumid+a[i,0];
   {сумма в строках}
for j:=1 to n-1 do
begin
   sum:=0;
   for i:=0 to n-1 do  sum:=sum+a[i,j];
if sum<>sumid   then  flag:=false;
 end;
 {суммы с столбцах}
for i:=0 to n-1 do
  begin  sum:=0;
  for j:=0 to n-1 do sum:=sum+a[i,j];
  if sum<>sumid   then  flag:=false;
  end;
 {суммы в диагоналях}
  for i:=0 to n-1 do
begin  sum:=0;
   sum:=sum +a[i,i];
if sum<>sumid   then  flag:=false;;
  end;
  for i:=0 to n-1 do
begin  sum:=0;
   sum:=sum +a[i,n-i-1];
 if sum<>sumid   then flag:=false;;
  end;
  if  flag=false then  label1.Caption:='не магический квадрат'
  else      label1.Caption:='  магический квадрат';
end;
 procedure TForm1.Button2Click(Sender: TObject);
begin
 close;
end;
end.
Зарание спасибо

Последний раз редактировалось AlDelta; 11.10.2010 в 11:49. Причина: [code][/code]
Irk-O вне форума Ответить с цитированием
Старый 11.10.2010, 12:20   #2
execom
Редкий тунеядец
Форумчанин
 
Аватар для execom
 
Регистрация: 29.10.2006
Сообщений: 595
По умолчанию

Пример магического квадрата 5*5
Код:
3 16 9 22 15
20 8 21 14 2
7 25 13 1 19
24 12 5 18 6
11 4 17 10 23
проверять нужно не тоьлько суммы но и числа в полях должны быть все разные.. например в 5*5 - от 1 до 25 ну или 84535601 до 84535625))
execom вне форума Ответить с цитированием
Старый 11.10.2010, 12:35   #3
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В этом фрагменте надо поправить:
Код:
  ...
 //суммы в диагоналях
  sum:=0;
  for i:=0 to n-1 do
    sum:=sum +a[i,i];
  if sum<>sumid then flag:=false;;

  sum:=0;
  for i:=0 to n-1 do
    sum:=sum +a[i,n-i-1];
  if sum<>sumid then flag:=false;

  if not flag then
    label1.Caption:='не магический квадрат'
  else
    label1.Caption:='магический квадрат';
end;
Прик вне форума Ответить с цитированием
Старый 11.10.2010, 13:00   #4
Irk-O
 
Регистрация: 07.10.2010
Сообщений: 6
По умолчанию

большое спасибо,работает))))
Irk-O вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Магический квадрат Nur_lan_ Фриланс 7 17.01.2010 21:47
Магический квадрат Arman Tokanov Помощь студентам 7 27.10.2009 15:42
Магический квадрат Гаджи Помощь студентам 5 24.10.2009 09:46
Магический квадрат Anarx Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2008 13:07
создать магический квадрат nev Помощь студентам 8 13.06.2007 10:41