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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 13:49   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Не компилируется в FreePascal, зато в Delphi работает!

Не знал, куда написать, написал сюда. Вот моя программа:
Код:
program Obl2x8x3;
uses CRT;
var
  x, y: integer;
  Temp, Temp2, Num: byte;
  ResultList: array [1..16] of integer;
  Used: array [1..16] of boolean;
  Matrix: array [1..16, 1..16] of boolean;

procedure ClearArray(Arr: array of boolean);
var i: integer;
begin
  for i := 1 to 16 do
    Arr[i] := false;
end;

function DFS(V, Position: integer): boolean;
var i: integer;
begin
  DFS := false;
  if Position = Num then
    begin
      DFS := true;
      ResultList[Position] := V;
    end
  else
    for i := 1 to Num do
      if Matrix[V, i] and not Used[i] then
        begin
          Used[V] := true;
          if DFS(i, Position + 1) then
            begin
              DFS := true;
              ResultList[Position] := V;
              Break;
            end;
        end;
end;

begin
  ClrScr;
  Write('Количество учеников: ');
  Readln(Num);
  for x := 1 to Num do
    begin
      Writeln('Введите через пробел кол-во друзей ', x,'-ого ученика и');
      Writeln('номера этих друзей (''2 1 2'' означает, что у ученика 2 друга - 1-ый и 2-ой): ');
      Read(Temp);
      for y := 1 to Temp do
        begin
          Read(Temp2);
          Matrix[x, Temp2] := true;
          Matrix[Temp2, x] := true;
        end;
      Readln;
    end;
  for x := 1 to Num do
    begin
      ClearArray(Used);
      if DFS(x, 1) then
        begin
          Write('Правильная расстановка: ');
          for y := 1 to Num do
            Write(ResultList[y], ' ');
          Break;
        end
      else
        begin
          Write('Невозможно расставить правильно!');
          if x = Num then Break;
        end;
    end;
  repeat until keypressed;
end.
В Delphi компилируется и работает как надо, во FreePascal выкидывает ошибку номер 201, а TurboPascal просто зависает во время работы! Как это объяснить?

Еще одна странность - если я пишу во FreePascal'е русскими буквами, то во время работы высвечивается тарабарщина какая-то, но если я открою этот файл в Delphi и напишу там русскими буквами, то во FreePascal'е в коде в русских словах тарабарщина, а во время работы - русские буквы нормально отображаются.

P.S.: Отключил проверку выхода за границы массива ({$R-}), теперь работает, но где там могла быть ошибка?

P.S.S.: Но в Паскале до сих пор не работает, а мне главное в нем запустить! В чем проблема???

Последний раз редактировалось k1r1ch; 02.11.2009 в 14:40.
k1r1ch вне форума Ответить с цитированием
Старый 02.11.2009, 15:17   #2
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

добавь readln
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 02.11.2009, 15:23   #3
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Где нету? В конце? А repeat until keypressed на что? Я же говорю, зависает просто, после того, как я ввел числа, где-то на рекурсии.
k1r1ch вне форума Ответить с цитированием
Старый 02.11.2009, 16:21   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

потому что ошибка здесь:
Цитата:
Код:
procedure ClearArray(var Arr: array of boolean);
var i: integer;
begin
  for i := 1 to 16 do
    Arr[i] := false;
end;
допиши то, что выделено красным!

а вообще, я бы не рекомендовал использовать подобный синтаксис..
лучше задать нужный тип массива, например:
type ArrBool = array[1..16] of boolean;
и дальше использовать его:
...
Used: ArrBool;
...
procedure ClearArray(var Arr: ArrBool);

Последний раз редактировалось Serge_Bliznykov; 02.11.2009 в 16:24.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2009, 16:37   #5
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Да, спасибо, теперь работает! Но чем лучше массив как тип делать? И почему компиляторы по разному реагировали на ошибку?
k1r1ch вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход с Freepascal(язык pascal) на Delphi Dmtr Общие вопросы Delphi 16 30.03.2010 12:28
Хостинг для игроделов Delphi,FreePascal,MidletPascal. awilum Свободное общение 0 12.09.2009 19:15
Программа компилируется, но не работает maziLa Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 17.07.2009 11:24
Компилируется но не работает... Версия ICQclient'a 1.21 DeDoK Общие вопросы Delphi 11 26.03.2009 12:09