Як писати рішення на Паскалі @ timus online judge

Як писати рішення на Паскалі

Програми на Паскалі компілюються на сервері за допомогою 32-бітного компілятора FreePascal 2.6.4. Він налаштований в режимі сумісності з Borland Delphi і запускається з наступними параметрами:







Ви можете завантажити FreePascal і прочитати online документацію на сайті www.freepascal.org.

Приклад рішення задачі

Ось приклад рішення задачі A + B на Паскалі:

Що нового в 32-бітному компіляторі в порівнянні з 16-бітовим

Якщо ви звикли писати програми в старих 16-бітних компіляторах для DOS, наприклад, в Borland Pascal 7.0, то вам буде корисно знати наступне:

  • Можна використовувати масиви розміром більше 64 КБ.
  • Тип integer є 32-бітовим і збігається з типом longint. 16-бітний цілий знаковий тип називається smallint.
  • Рядки тепер не обмежені 255 символами. Не слід звертатися до нульового символу, щоб дізнатися довжину рядка, використовуйте для цього функцію length (s). Встановити довжину рядка можна за допомогою процедури setlength (s, n).

Крім того, з'явилося багато нових ключових слів. Наступні слова не можуть бути перевизначені або використані як ідентифікатори:

А ось такий код не скомпілюється:

Особливості компілятора в порівнянні з іншими 32-бітними компіляторами Паскаля

Є деякі особливості компілятора, який використовується на сервері, які корисно знати.







  • На сервері немає модулів crt і wincrt. так як процедури, що містяться в них, не потрібні для вирішення завдань.
  • При динамічному виділенні пам'яті розмір блоку округляється до кратного 16 байтам. Наприклад, якщо ви виділяєте багато блоків по 4 байта, то ваша програма буде використовувати в 4 рази більше пам'яті, ніж треба. Користуйтеся статичними структурами даних, вони позбавлені цього недоліку і, як правило, працюють швидше динамічних.
  • Безлічі можуть займати лише 4 або 32 байта, що також може привести до значних перевитрат пам'яті. Часто гарною альтернативою безлічам виявляється використання бітів цілого числа (або масиву цілих чисел).
  • Не можна явно приводити типи змінних цілочисельного типу і типу з плаваючою крапкою. Вираз «x: = extended (i)». де x має тип extended. а i - integer. є помилковим. Тоді як вираз «x: = i» - правильне.

Не можна змінювати значення змінної циклу for всередині циклу. Наступний код не скомпілюється:

Більш того, після циклу for значення змінної циклу не визначено. Тобто її значення не можна використовувати, наприклад, з метою пошуку. Наступний приклад спрацює по-різному на різних компіляторах:

Як користуватися 64-бітними цілими типами даних

Компілятор повністю підтримує 64-бітові цілі, як зі знаком, так і без знака. 64-бітове ціле зі знаком має діапазон значень від -9223372036854775808 до +9223372036854775807, без знака - від 0 до 18446744073709551615. Знаковий тип називется int64. беззнаковий - qword. Наступний приклад ілюструє використання 64-бітових цілих типів:

Як рахувати дані до кінця вхідного потоку

Інші зауваження

Іноді вердикт Wrong Answer насправді означає Runtime error. Це пов'язано з тим, що FreePascal самостійно перехоплює деякі помилки виконання програм і виводить повідомлення в вихідний потік.

Для того, щоб збільшити обсяг стека і уникнути його переповнення при використанні «глибокої» рекурсії, слід використовувати спеціальну директиву (в прикладі розмір стека встановлюється рівним 16 МБ):

Зручно використовувати для налагодження рішень умовну директиву ONLINE_JUDGE.

колишні компілятори