Форум Всеукраїнської інтернет-олімпіади NetOI


На форумі обговорюються лише питання, пов'язані з олімпіадою

Ви не зайшли.

#1 2008-01-05 21:36:20

Grivus
Новий користувач
Зареєстрований: 2006-10-22
Повідомлень: 10

Free Pascal

Хм, ну вообщем проблема стандартная: под Turbo всё работает, а под Free даже не компилится. Пишет Internal error 200309201 в строке, где end; завершает функцию. Искать по коду ошибки пробовал, 0. Что бы это могло значить? (вариант косые руки не предлагать пожалуйста:) )

Поза форумом

 

#2 2008-01-05 22:18:44

Silicious Man
Новий користувач
Звідки: Донецк
Зареєстрований: 2007-11-11
Повідомлень: 79

Re: Free Pascal

косой паскаль)))


—————————————————————————————————
Life is a beautiful place where dreams and reality live in peace.

Поза форумом

 

#3 2008-01-05 22:23:17

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

Вопрос раз: речь идет о домашнем Паскале или о сообщении серверного компилятора? smile


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&img=5ICQ 282667777

Поза форумом

 

#4 2008-01-06 17:43:20

Grivus
Новий користувач
Зареєстрований: 2006-10-22
Повідомлень: 10

Re: Free Pascal

Skiminok, ошибка указанная мною вылезает при компиляции дома на Free, а на тутошнем компиляторе, естественно Bad Data.
Silicious Man, тогда где не косой? если этот я качал с официального сайта)

Відредаговано Grivus (2008-01-06 17:45:44)

Поза форумом

 

#5 2008-01-06 18:12:26

Silicious Man
Новий користувач
Звідки: Донецк
Зареєстрований: 2007-11-11
Повідомлень: 79

Re: Free Pascal

я полагаю, не косого паскаля нету и сам пишу на c++


—————————————————————————————————
Life is a beautiful place where dreams and reality live in peace.

Поза форумом

 

#6 2008-01-06 18:27:51

guest1
Новий користувач
Зареєстрований: 2006-12-19
Повідомлень: 309
Вебсайт

Re: Free Pascal

если arr - массив, тогда строка типа:
for arr[1]:=1 to 9 do ...
не прокатит. А еще там директивы $M по-разному работает.
Это два типа ошибок, которые у меня были. Может быть, поможет.
'
И еще, откуда у тебя код ошибки 0, если исходник даже не компилируется?
Код ошибки вроде должен быть инициализирован после начала выполнения.

Відредаговано guest1 (2008-01-06 18:48:16)

Поза форумом

 

#7 2008-01-06 18:52:28

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

Grivus:
Могу предположить лишь следующие варианты, это не панацея, а скорее попытка разбирательства...
Во-первых, пробежавшись по freepascal.org, я увидел, что подобная ошибка была замечена у некоторых на FPC 2.0.4 и решалась после обновления. Если у тебя до сих пор предыдущая версия, советую скачать 2.2.0.
Во-вторых, чаще всего эта ошибка наблюдалась при использовании кода на ассемблере... Ты уверен, что никаких подобных хакерских методов не юзаешь? smile
В-третьих, если не поможет, попробуй использовать компилятор командной строки. В папке bin лежит файл fpc.exe. Если набрать в командной строке <путь к файлу fpc.exe> <исходник, который нужно скомпилировать>, то по идее происходит простая компиляция без запуска среды разработки. На досуге ещё почитай различные опции его использования (для этого просто запусти в командной строке fpc без параметров).

Silicious Man написав:

я полагаю, не косого паскаля нету и сам пишу на c++

Не косого паскаля? Нету. Согласен. Не косого языка паскаль-группы? Есть. Имя ему Delphi. И последние 2 года для написания олимпиады использую только его wink

guest1 написав:

И еще, откуда у тебя код ошибки 0, если исходник даже не компилируется?
Код ошибки вроде должен быть инициализирован после начала выполнения.

У него не код ошибки 0 smile Было сказано, что "попробовал поискать по коду ошибки, результат - ноль" (то есть не нашёл).

guest1 написав:

если arr - массив, тогда строка типа:
for arr[1]:=1 to 9 do ...
не прокатит.

Интересно. У меня без проблем компилируется и работает...

Відредаговано Skiminok (2008-01-06 18:59:13)


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&amp;img=5ICQ 282667777

Поза форумом

 

#8 2008-01-06 19:02:32

guest1
Новий користувач
Зареєстрований: 2006-12-19
Повідомлень: 309
Вебсайт

Re: Free Pascal

Ясно, сразу не понял. smile

Вспомнил случай, когда я делал генератор исходника, и у меня получалось такое:
var s: ansistring;
begin s:=''+
'<строка 124 символа>'+
'<строка 124 символа>'+
... много таких строчек и в конце точка с запятой.
Так если строчек было слишком много, выходил Internal Error и, кроме того, вылетал сам Free Pascal с ошибкой. И, кроме того, временно появлялись странные полосы на экране, с чем связано, не знаю smile

Відредаговано guest1 (2008-01-06 19:04:28)

Поза форумом

 

#9 2008-01-06 19:06:39

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

guest1 написав:

Вспомнил случай, когда я делал генератор исходника, и у меня получалось такое:
var s: ansistring;
begin s:=''+
'<строка 124 символа>'+
'<строка 124 символа>'+
... много таких строчек и в конце точка с запятой.
Так если строчек было слишком много, выходил Internal Error и, кроме того, вылетал сам Free Pascal с ошибкой. И, кроме того, временно появлялись странные полосы на экране, с чем связано, не знаю smile

Ну это раньше в FPC было... переполнение памяти при работе со строками. По-дурному реализовано было. Сейчас вроде бы исправили, хотя гарантии не дам.


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&amp;img=5ICQ 282667777

Поза форумом

 

#10 2008-01-06 19:08:43

guest1
Новий користувач
Зареєстрований: 2006-12-19
Повідомлень: 309
Вебсайт

Re: Free Pascal

а, вспомнил, извиняюсь.
for arr[1]:=1 to 9 do ...
работать будет, а вот
for arr[1]:=1 to 9 do
    for arr[2]:=1 to 9 do...
не будет.

Поза форумом

 

#11 2008-01-06 19:40:28

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

guest1 написав:

а, вспомнил, извиняюсь.
for arr[1]:=1 to 9 do ...
работать будет, а вот
for arr[1]:=1 to 9 do
    for arr[2]:=1 to 9 do...
не будет.

Ну, это логично... FPC мало того что (абсолютно правильно) запрещает присваивание счётчику цикла For, так ещё и учитывает при этом управляющей переменной почему-то не arr[1], a arr... с последующими ругательствами, что счётчик цикла arr потом нельзя уже как-то изменять...
Можно считерить... включить в первых строчках программы {$mode TP}. Всего-то изменится несколько установок компилятора - то бишь синтаксиса. А проблема исчезнет smile


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&amp;img=5ICQ 282667777

Поза форумом

 

#12 2008-01-06 20:01:29

guest1
Новий користувач
Зареєстрований: 2006-12-19
Повідомлень: 309
Вебсайт

Re: Free Pascal

Это неудобно немного. Есть, допустим, у меня такой фрагмент:
const maxdepth = 10;
var arr: array[1..maxdepth] of longint;
procedure XProc(currentdepth: longint);
var xI: longint;
begin
    if currentdepth > maxdepth then begin
        <исполняемый кусок кода>
    end else begin
        for arr[xI]:=currentdepth to maxdepth do XProc(currentdepth + 1);
    end;
end;
begin
    XProc(1);
end.

Приходется вместо for пользовать arr[xI]:=currentdepth и while arr[xI] <= maxdepth do...
Неужели так сложно было реализовать возможность создания этого в for?

Skiminok написав:

... абсолютно правильно запрещает присваивание ...

Неправильно это. Несправедливо то бишь smile

Відредаговано guest1 (2008-01-06 20:26:54)

Поза форумом

 

#13 2008-01-06 20:53:09

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

guest1 написав:

Неужели так сложно было реализовать возможность создания этого в for?

Skiminok написав:

... абсолютно правильно запрещает присваивание ...

Неправильно это. Несправедливо то бишь smile

Ха. А зачем и почему вообще появился цикл for, если на самом деле он спокойно реализуется while'ом? А именно потому что на процессорном уровне он реализовывается гораздо быстрее. Только вот с управляющей переменной вечные траблы. Именно на том же внутреннем уровне. Главный аргумент - строчка в документации Делфи (в документации FPC я подобное на нашёл, к сожалению):

For-loop control variable may be undefined after loop.

Реализация не та. Что у тебя произойдёт, если ты изменишь в цикле его управляющую переменную или верхнюю границу? Обычно кирдык. Попробуй в Турбо написать такое:

Код:

var i,N: integer;
begin
  N:=5;
  for i:=1 to N do
  begin
    If i<4 then Inc(N);
    Write(i,' ');
  end;
end.

Получим четырёхкратно выполнившийся полный цикл от 1 до 5, хотя ожидалось не совсем то smile
А если разрешить изменение контрольной переменной - тогда все преимущества скорости For летят в тартарары...


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&amp;img=5ICQ 282667777

Поза форумом

 

#14 2008-01-06 20:55:27

reiten
журі
Звідки: Киев
Зареєстрований: 2005-10-16
Повідомлень: 196

Re: Free Pascal

Собственно, кривой цикл for - одна из главных вещей, из-за которых я с паскалем и не сдружился...


"...Существуют два подхода к проектированию программ. В одном архитектура делается настолько простой, что в ней явно нет дефектов; в другом - настолько сложной, что в ней нет явных дефектов".
С. А. Хоар

Поза форумом

 

#15 2008-01-06 21:07:53

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

Его нельзя назвать кривым. Он просто реализован с учётом наилучшей оптимизации, а не логики человека. И, как по мне, с этой стороны - превосходно. Со стороны удобства программиста - вопрос спорный...
Нет, я согласен, что сишный for - вообще вещь, не имеющая аналогов smile Но тут проблема появляется в другом. С таким for-ом, наоборот, while'a не надо - нарушаются традиции истории развития программирования. Всё-таки циклы принципиально разные, и появился второй (for) позже, когда потребовалось аппаратное ускорение именно отдельного класса задач - перебор в заданных рамках. А превращать for в машину, которая разве что кофе не варит - это надругательство над теорией информатики...


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&amp;img=5ICQ 282667777

Поза форумом

 

#16 2008-01-06 21:16:56

guest1
Новий користувач
Зареєстрований: 2006-12-19
Повідомлень: 309
Вебсайт

Re: Free Pascal

Вот что for работает быстрее while и что именно из-за этого такие ограничения - не знал smile
Хотя, если подумать, насколько быстрее? Вроде не настолько критично, чтоб появился TL.
Вот если в каких-нибудь серьезных проектах применять - согласен smile

Поза форумом

 

#17 2008-01-06 22:42:41

Grivus
Новий користувач
Зареєстрований: 2006-10-22
Повідомлень: 10

Re: Free Pascal

Версия у меня 2.2.0,
Ты уверен, что никаких подобных хакерских методов не юзаешь?

Да нет, наверное) но я ещё погляжу)

Поза форумом

 

#18 2008-01-07 00:17:15

reiten
журі
Звідки: Киев
Зареєстрований: 2005-10-16
Повідомлень: 196

Re: Free Pascal

К вопросу по оптимизации - когда нам на программировании показали, как на самом деле в турбопаскале работает цикл for, я был, мягко говоря, в шоке.
Что логики там нету - факт. И на счет оптимальности я тоже сомневаюсь.
Как-то делал замеры работы циклов на fpc, так фор даже дольше вайла работал.


"...Существуют два подхода к проектированию программ. В одном архитектура делается настолько простой, что в ней явно нет дефектов; в другом - настолько сложной, что в ней нет явных дефектов".
С. А. Хоар

Поза форумом

 

#19 2008-01-07 01:12:37

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

Турбо? Согласен, тут можно чего угодно ожидать. Посты выше это показали.
Учитывая, что изменение контрольной переменной цикла турбик без проблем позволяет и никакой оптимизации по факту не делает... то там полнейший бред выходит.
А вот по поводу FPC у меня совершенно другие результаты измерений получились...


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&amp;img=5ICQ 282667777

Поза форумом

 

#20 2008-01-07 15:23:35

Grivus
Новий користувач
Зареєстрований: 2006-10-22
Повідомлень: 10

Re: Free Pascal

Хм... такой вапрос, как добавлять директивы компилятора во Free? Оказалось, что без директив оно работает(*хотя при попытке удалить существующие директивы и запустить прогу, ошибка всё равно будет)

Поза форумом

 

#21 2008-01-07 16:00:45

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

Не трогай всех директив. Напиши только те, которые нужны тебе конкретно. Обычно кроме R, N и H олимпийцу на Фри Паскале ничего для счастья не надо...
Просто в первой строчке программы (не трогая директив, не прикасаясь к Ctrl+O+O):
{$R+,N+,H+}
(это к примеру, на самом деле определись, что тебе из них точно нужно... потому как включённый R+, например, заметно тормозит прогу, в то время как в процессе дебага он незаменим).


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&amp;img=5ICQ 282667777

Поза форумом

 

#22 2008-01-07 16:30:02

reiten
журі
Звідки: Киев
Зареєстрований: 2005-10-16
Повідомлень: 196

Re: Free Pascal

Замеры я проводил именно во фри. Так вот там у меня и выходило, что for медленнее while.
Перепроверил сейчас. Результаты в пределах погрешности измерений совпадают при перевесе while около 1%.
Так что оптимизацией for в fpc наверняка не тянет...


"...Существуют два подхода к проектированию программ. В одном архитектура делается настолько простой, что в ней явно нет дефектов; в другом - настолько сложной, что в ней нет явных дефектов".
С. А. Хоар

Поза форумом

 

#23 2008-01-07 17:01:08

Skiminok
Новий користувач
Звідки: Киев, Украина
Зареєстрований: 2006-01-19
Повідомлень: 144
Вебсайт

Re: Free Pascal

А какой уровень оптимизации был включён?


Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
http://wwp.icq.com/scripts/online.dll?icq=282667777&amp;img=5ICQ 282667777

Поза форумом

 

#24 2008-01-07 17:16:29

reiten
журі
Звідки: Киев
Зареєстрований: 2005-10-16
Повідомлень: 196

Re: Free Pascal

Пробовал без оптимизации и с -O2.
Особой разницы в результатах не заметил.


"...Существуют два подхода к проектированию программ. В одном архитектура делается настолько простой, что в ней явно нет дефектов; в другом - настолько сложной, что в ней нет явных дефектов".
С. А. Хоар

Поза форумом

 

#25 2008-01-08 12:10:23

partisan
Олімпієць
Звідки: Киев
Зареєстрований: 2005-11-04
Повідомлень: 180

Re: Free Pascal

Grivus написав:

Хм, ну вообщем проблема стандартная: под Turbo всё работает, а под Free даже не компилится. Пишет Internal error 200309201 в строке, где end; завершает функцию. Искать по коду ошибки пробовал, 0. Что бы это могло значить? (вариант косые руки не предлагать пожалуйста:) )

Бывало иногда. Перепиши код. Может вырезать-вставить покатит. Не знаю. Помню только, что что-то делал с кодом или... перезапустил ФП!

Поза форумом

 

Нижній колонтитул

Powered by Likt
© Copyright 2002–2009 Likt