1

Тема: Проблеми з різними версіями паскаля

Доброго дня!
Я написав одну програму на Pascal використовуючи  Pascal.ABC. У вчителя вона відкрилась, але виконувалась неправильно (середовище Pascal Turbo). Я в школі трохи підправив код і на Pascal Turbo вона працювала, а вдома (PascaL.ABC) друга версія - не працює...
Так от, я йду на олімпіаду з програмування. Там буде кілька тих середовищ, а перевіряти розв'язки буде цей сервіс
Яке мені середовище найкраще використовувати, щоб не вийшло так, що мені в середовищі програма виконалась чудово, а потім на тестері буде неправильно...?

2

Re: Проблеми з різними версіями паскаля

Судячи зі сторінки повідомлень, вони використовують Delphi 7.

Подякували: Q-bart1

3

Re: Проблеми з різними версіями паскаля

а це часом не Algo Pascal - Pascal для навчання, а тут модуль для тестування якись ще для нього дописали ?
Pascal.ABC - це середовище .NET в стилі Pascal ( так своїми словами )
тому і недивно що працювала неправильно, якщо вона взагалі збиралась, бо на паскалі починав програмувати, а далі забив і на С перейшов, але то таке

Подякували: Q-bart1

4

Re: Проблеми з різними версіями паскаля

Єдині відомі мені суттєві несумісності PascalABC.Net та Turbo Pascal - це бітність (TP 16-бітний, із відповідними обмеженнями на розмір структур) і робота з рядками (в TP за бажання можна було писати "за межі" рядка, аби лиш в його область пам'яті). Якщо не загадувати завеликі числа і користуватися стандартними процедурами для рядків (на кшталт concat), все має бути ОК.

Подякували: Q-bart1

5

Re: Проблеми з різними версіями паскаля

код, що працює на Pascal.ABC, і не працює на Turbo Pascal
program land_of_wonderful;

var
  s, c: string[100];
  z, i, j: integer;

begin
  readln(s);
  Z:=0;
  for i := 1 to length(s) do
  begin
    for j := 2 to length(s) do
      if s[i] = s[j] then z := z + 1; delete(s, 1,1);
  end;
  writeln(z);
end.
код, що працює на Turbo Pascal, і не працює на Pascal.ABC


program land_of_wonderful;

var
  s, c: string[100];
  z, i, j: integer;

begin
  readln(s);
  Z:=0;
  for i := 1 to length(s) do
  begin
    for j := i+1 to length(s) do
      if s[i] = s[j] then begin  z := z + 1;
      delete(s, j,1);
       end;
  end;
  writeln(z);
end.

6 Востаннє редагувалося koala (20.11.2014 22:35:33)

Re: Проблеми з різними версіями паскаля

І обидва по суті некоректні - цикли ідуть до length(s), але цей параметр змінюється всередині! Якщо конче треба зменшувати рядок під час роботи циклу - робіть зворотній цикл:

for i := length(s) downto 1 do

І розставте по-людськи відступи, а то в першому delete не те, що не в if, а навіть не в for j...

Подякували: Torbins, Q-bart2

7

Re: Проблеми з різними версіями паскаля

в першому delete не те, що не в if, а навіть не в for j...

Я теж здивувався,... чому воно тоді працює??

8

Re: Проблеми з різними версіями паскаля

Q-bart є таке правило, якщо ти написав програму і вона скомпілювалась, це не факт що вона буде робити правильно

9

Re: Проблеми з різними версіями паскаля

reverse2500 написав:

Q-bart є таке правило, якщо ти написав програму і вона скомпілювалась, це не факт що вона буде робити правильно

Вона працює правильно .... Правда тільки на Pascal.ABC.. і в PascalTurbo не працює.. Але якщо додати begin end; до неї, то вона все рівно не працює на PascalTurbo...

10

Re: Проблеми з різними версіями паскаля

Q-bart
Воно працювало через особливості роботи зі строками. В Pascal.ABC і Turbo Pascal вони різні, тому помилковий код працював на них по різному.