Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Опять Паскаль)  (Прочитано 1638 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Serega793

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Опять Паскаль)
« : 28 Сентября 2009, 20:44:33 »
1. В школе пишем на турбоП 7,0. Поставил себе fp - он пишет ошибки призапуске программ написанных на тп.
Сначала в консоли выдает
Press any key to return to IDERunning "/media/S/data/DOS/TP/BIN/a^b "
Runtime error 2 at $080480F9
  $080480F9
  $0805F857

 Press any key to return to IDE
потом в фп exitcode=512. Компилятор поставил на тп - тоже самое. В школе запускаются без проблемм.

2. Есть компилятор тп для gedit?

Оффлайн ZwS

  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Re: Опять Паскаль)
« Ответ #1 : 28 Сентября 2009, 20:51:28 »
1.код программы в студию. вдруг дето ошибку допустили?
У меня например чтото подобное выдавало когда происходило деление на ноль в одном из выражений.
2.Для гедита компилятора нет. можно поставить пакет gedit-plugins, добавить в гедит консоль и в ней компилить проги.
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

Оффлайн Serega793

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: Опять Паскаль)
« Ответ #2 : 28 Сентября 2009, 21:48:58 »
врядли код поможет - в винде тп7 запускал эти программы
(Нажмите, чтобы показать/скрыть)
(Нажмите, чтобы показать/скрыть)

Оффлайн kss

  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Re: Опять Паскаль)
« Ответ #3 : 28 Сентября 2009, 21:56:27 »
1. Файл input.txt есть на домашней машине, где пробуешь запустить прогу? Если есть, то с путями к нему все нормально?
2. А зачем ты делаешь эти примеры через переопределение файлов ввода/вывода, а не через обычное чтение из файлов? Не уверен, что это корректно будет работать под Linux во Freepascal

Оффлайн digiwhite

  • Активист
  • *
  • Сообщений: 732
  • http://www.welinux.ru
    • Просмотр профиля
    • http://www.welinux.ru
Re: Опять Паскаль)
« Ответ #4 : 28 Сентября 2009, 22:43:55 »
Поисчите, что значат коды ошибок. Тогда станет легче.

ЗЫ: безусловные переход и метки - это не всегда конечно, но в общем зло :). Использовать их лучше с осторожностью :).
Социальная сеть не фанатично настроенных Linuxойдов - http://www.welinux.ru

Оффлайн aya

  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Re: Опять Паскаль)
« Ответ #5 : 29 Сентября 2009, 05:08:39 »
goto - зло

Villain

  • Гость
Re: Опять Паскаль)
« Ответ #6 : 29 Сентября 2009, 07:40:51 »
goto - не зло, если уметь его использовать.

Serega793

1-я программа вообще бессмыслена. напишите условие задачи. мне просто интересно :)
один файл открывается для чтения, другой для записи, причём оба не описываются в var, абсолютно не используются и не закрываются.
Цитировать
c[i,j]:= s[i,j];
это тоже бессмыслено и вызовет ошибку, т.к. с - двумерный, а s - одномерный массив.
нигде не нашёл используемую переменною g:char (ну это уже придирки, хотя лишнее не особо нужно).

2-я программа.
опять та же странная работа с файлами. при b<=1 должна быть ошибка, нужно делать проверки. и вообще странно как-то находить a^b и выводить последнюю цифру в полученном числе. ну, это уж не моё дело :)

Оффлайн jack_solovey

  • Активист
  • *
  • Сообщений: 916
  • Mate, и никаких Unity
    • Просмотр профиля
Re: Опять Паскаль)
« Ответ #7 : 29 Сентября 2009, 07:52:28 »
врядли код поможет - в винде тп7 запускал эти программы
...
ошибок тьма!!! За такое у нас ставили два без разговоров.
Что бросается в глаза при первом рассмотрении.

Пропуская ПОЛНЫЙ-ДИКИЙ бардак с вводом данных.

приведу лишь пример не правильного кода в конце

a:= true;
 for i:= 1 to n do
  for j:= 1 to m do begin

   if c[i,j] = 'R' then
    if (h[i,j] < 4) or (h[i,j] = 0) then begin a:= false; goto towrite; end;

   if c[i,j] = 'G' then
    if (h[i,j] = 1) or (h[i,j] = 4) or (h[i,j] = 5) or (h[i,j] = 0) then begin a:= false; goto towrite; end;

   if c[i,j] = 'B' then
    if (h[i,j] = 2) or (h[i,j] = 4) or (h[i,j] = 6) or (h[i,j] = 0) then begin a:= false; goto towrite; end;

  end;

towrite:
 if a = false then write('NO')
  else write('YES');

Правильный код
  i:=0; j:=0
  repeat
  i:=i+1
repeat
j:=j+1
a:=not((c[i,j] = 'R')and((h[i,j] < 4)) or
(c[i,j] = 'G')and((h[i,j] = 1) or (h[i,j] = 4) or (h[i,j] = 5) or (h[i,j] = 0)) or
(c[i,j] = 'B')and((h[i,j] = 2) or (h[i,j] = 4) or (h[i,j] = 6) or (h[i,j] = 0)))
until j=m or not a
  until i=n or not a

 if a  then write('YES') else  write('NO')
« Последнее редактирование: 29 Сентября 2009, 10:07:04 от jack_solovey »

Оффлайн kss

  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Re: Опять Паскаль)
« Ответ #8 : 29 Сентября 2009, 12:14:23 »
goto - не зло, если уметь его использовать.

Serega793

1-я программа вообще бессмыслена. напишите условие задачи. мне просто интересно :)
один файл открывается для чтения, другой для записи, причём оба не описываются в var, абсолютно не используются и не закрываются.
Цитировать
c[i,j]:= s[i,j];
это тоже бессмыслено и вызовет ошибку, т.к. с - двумерный, а s - одномерный массив.
нигде не нашёл используемую переменною g:char (ну это уже придирки, хотя лишнее не особо нужно).
Переменные input и output -- это глобальные файловые переменные, связанные по умолчанию с вводом-выводом, поэтому описывать в var их не надо. Он их просто связывает с обычными текстовыми файлами (ну то есть перенаправляет ввод-вывод в эти файлы, по сути). Кроме того, при работе с  write\writeln\read\readln, если не указан первый аргумент (файловая переменная), то считается что это output или input (соответственно). Да и с c[i,j]:= s[i,j] с точки зрения синтаксиса у него корректно (а было бы иначе, у него бы прога не скомпилировалась). S -- это одномерный массив строк, а строка -- эквивалентна одномерному массиву символов, то есть оюращение к такому массиву как к двумерному массиву символов с точки зрения языка корректно.

Оффлайн Serega793

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: Опять Паскаль)
« Ответ #9 : 29 Сентября 2009, 12:46:07 »
1 программа
2 программа

1. Файл input.txt есть на домашней машине, где пробуешь запустить прогу? Если есть, то с путями к нему все нормально?
2. А зачем ты делаешь эти примеры через переопределение файлов ввода/вывода, а не через обычное чтение из файлов? Не уверен, что это корректно будет работать под Linux во Freepascal
код программы и input.txt/output.txt лежат в одной папке на флешке. Эти программы запускаются/выполняются в ТП7 в школе и ввод/вывод в них работает.

Правильный код
  i:=0; j:=0
  repeat
  i:=i+1
repeat
j:=j+1
a:=not((c[i,j] = 'R')and((h[i,j] < 4)) or
(c[i,j] = 'G')and((h[i,j] = 1) or (h[i,j] = 4) or (h[i,j] = 5) or (h[i,j] = 0)) or
(c[i,j] = 'B')and((h[i,j] = 2) or (h[i,j] = 4) or (h[i,j] = 6) or (h[i,j] = 0)))
until j=m or not a
  until i=n or not a

 if a  then write('YES') else  write('NO')
учту. Но все же проблема не в решение задачи, а в настройке фп.

Оффлайн kss

  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
Re: Опять Паскаль)
« Ответ #10 : 29 Сентября 2009, 12:53:50 »
код программы и input.txt/output.txt лежат в одной папке на флешке. Эти программы запускаются/выполняются в ТП7 в школе и ввод/вывод в них работает.
учту. Но все же проблема не в решение задачи, а в настройке фп.
Ну что под дос такой код будет работать -- это понятно. а вод под Linux с таким подходом могли возникнуть косяки. попробуй сначала указать полные пути к файлам input.txt и output.txt. Если не поможет, то перепиши программу без переопределения файлов ввода-вывода.

 

Страница сгенерирована за 0.018 секунд. Запросов: 21.