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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2013, 13:20   #1
Nerotim
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 16
Стрелка Delphi Магический квадрат

Компилятор вылетает после выполнения программы. Ридлайны не помогают


Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
Type Tmatr= array[1..10,1..10] of integer;
Var A : Tmatr;
    Flag : Boolean;

//====================================
Procedure VVODVIVOD(Var A: Tmatr);
 var i,j,N: integer;
Begin

  write(' razmer matrizi- ');
  readLn(N);
  for i := 1 to N do
  begin
     for j := 1 to N do
     Read(A[i, j]);
       end;

  writeLn('ishodnaya matriza :'); WriteLn;
  for i := 1 to N do
     begin
       for j := 1 to N do write(A[i, j]);
       writeLn;
     end;
     writeLn;
     readln;
End;
//-------------------------------------------
Procedure Magic(Var Flag : Boolean);
var S1,S,i,j,N: integer;
 Begin
  S1:=0;
  For i := 1 to N do
  S1 := S1 + A[i,1];
  Flag:=TRUE;
  i:=1;
  While (i<=N) and Flag do
     begin
       S:=0;
       For j := 1 to N do S := S+A[i, j];
       If S<>S1 then Flag := FALSE
       else i:=i+1
    end;
  j:=1;
  While (j<=N) and Flag do
    begin
      S:=0;
      For i := 1 to N do S:=S+A[i, j];
      If S<>S1 then Flag := FALSE
      else j := j+1
    end;
    end;

//--------------------------------------------------------
BEGIN
  VVODVIVOD(A);
  Magic(Flag);
  If Flag then WriteLn('eto magicheskii kvadrat')
          else WriteLn('eto ne magicheskii kvadrat');
  readln;

 { TODO -oUser -cConsole Main : Insert code here }
 readln;
end.
Nerotim вне форума Ответить с цитированием
Старый 12.02.2013, 13:51   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Компилятор завершает свою работу до начала выполнения программы (собственно, создавая оную программу). Уточните, что именно у Вас происходит.
Abstraction вне форума Ответить с цитированием
Старый 12.02.2013, 23:26   #3
Nerotim
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 16
По умолчанию

Программа выполняется, появляется результат на долю секунды и происходит вылет.
Nerotim вне форума Ответить с цитированием
Старый 12.02.2013, 23:40   #4
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Ну, как минимум, при вызове процедуры Magic у Вас внутри нее окажется неинициализированным значение переменной N, т.к. Вы инициализируете readln-ом в процедуре VVODVIVOD локальную для этой процедуры переменную N, которая к первой упомянутой N не имеет отношения.
Надеюсь, понятно объяснил.

Upd. Короче, в процедуре VVODVIVOD - своя переменная N, значение которой задается readln-ом, а в процедуре Magic - другая N, значение которой вообще не задается. Вот =)
Μολὼν λαβέ

Последний раз редактировалось alexander13; 12.02.2013 в 23:43.
alexander13 вне форума Ответить с цитированием
Старый 13.02.2013, 10:11   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

alexander13, абсолютно прав!

я бы переменную сделал глобальной (это, конечно, не самый лучшый вариант, зато - самый простой). Для этого допишите то, что отмеченно зелёным и удалите то, что помечено красным
Код:
uses
  SysUtils;
Type Tmatr= array[1..10,1..10] of integer;
Var A : Tmatr;
    Flag : Boolean;
    N : integer;

//====================================
Procedure VVODVIVOD(Var A: Tmatr);
 var i,j,N: integer;
Begin

  write(' razmer matrizi- ');
  readLn(N);
  for i := 1 to N do
  begin
     for j := 1 to N do
     Read(A[i, j]);
       end;

  writeLn('ishodnaya matriza :'); WriteLn;
  for i := 1 to N do
     begin
       for j := 1 to N do write(A[i, j]);
       writeLn;
     end;
     writeLn;
     readln;
End;
//-------------------------------------------
Procedure Magic(Var Flag : Boolean);
var S1,S,i,j,N : integer;
 Begin
  S1:=0;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2013, 23:35   #6
Nerotim
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 16
По умолчанию

Всем огромное спасибо)
Nerotim вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Магический квадрат ПрИуЭт Общие вопросы C/C++ 0 04.01.2012 13:47
Магический квадрат mikekucherov Помощь студентам 6 19.09.2011 10:43
Магический квадрат sigmanen Общие вопросы C/C++ 1 12.11.2010 22:40
Магический квадрат Nur_lan_ Фриланс 7 17.01.2010 21:47
Магический квадрат Anarx Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2008 13:07