Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Компилятор Pascal (http://forum.oszone.net/showthread.php?t=163115)

P O M A 11-01-2010 14:36 1317198

Компилятор Pascal
 
Нужен компилятор паскаля. Главное (и, в общем, единственное) требование - вывод информации в таком виде, как, например, в Pascal ABC (он компилирует, но не создаёт бинарник на диске): переменная типа real содержит число 50, и на вывод тоже идёт 50. Однако такие компиляторы, как Turbo Pascal и Free Pascal выдают информацию в виде 1.000000000000000E+002.

Сейчас строка программы выглядит вот так: a:=round((f/b)*100), затем идёт вывод переменной a в файл - write (t2, a); Конечно, проще сделать эту строчку в виде write (t2, a:3:0); . Однако эта программа - олимпиадное задание, так что сейчас уже ничего не исправить :lamer: Нужно найти такой компилятор, чтобы подать апелляцию - будет 100% доказательство работы программы. (Писал и проверял в ABC, не виноват же что проверяли (точнее вообще не проверяли, но это не по теме...) в Turbo, да и особые условия (проверяют исходник или бинарник и т.д.) не были указаны, разрешалось писать и в Abc, и Turbo, и Free)

pva 11-01-2010 23:23 1317684

Цитата:

Цитата P O M A
(он компилирует, но не создаёт бинарник на диске): »

Я где-то у делфи видел опцию "бинарник в памяти". Но не пойму пока, насколько это принципиально.
Чему равны f и b и каких они типов? Какое надо было вывести число (целое, дробное)? 1.000000000000000E+002=100, а не 50
Цитата:

Цитата P O M A
точнее вообще не проверяли, но это не по теме...) »

Иногда неправильная программа может давать (при стечении обстоятельств) правильный результат. Причём по опыту скажу бывает стабильно работает, потом рушится. Находишь ошибку и тихо считаешь себя идиотом... Давайте разберём алгоритм? если действительно не к чему придраться, можно гордо идти против комиссии.

P O M A 13-01-2010 10:47 1318976

Цитата:

Цитата pva
Иногда неправильная программа может давать (при стечении обстоятельств) правильный результат. »

Тут не в этом дело.. По условию программа должна брать информацию из файла input.txt и записывать результат в output.txt, работая в консольном режиме (завершается сама, достигнув конца кода). Но, как оказалось, кроме меня никто такого не сделал (ввод через readln и вывод writeln, а при этом функционал сразу меняется - например, в одной задаче нужно было сравнить до 100 пар дробей), и жюри решило поменять условия проверки - 10 баллов вместо 100 за задачу, проверяют по готовым вопросам\ответам. А мою программу засчитали "неработающей" (не додумались посмотреть input\output...).
Задача: в первой строчке количество вопросов какого-то теста, во второй через пробел - 1\0 - правильный\неправильный ответ. В output.txt вывести в процентах количество правильных ответов. Условия: работа не более 2х секунд, не более 64х Мб ОЗУ, завершается нулём (halt (0) или достижением конца текста). Писать можно на C. Pascal (ABC, Turbo, Free), Java, Basic.
Вот код (доступа к оригиналу нет, но программа небольшая, все детали я помню):
читать дальше »
var a:real; var i,b:integer; var t1,t2:text; var c: array [1..100] of integer; begin; assign (t1, 'input.txt'); assign (t2, 'output.txt'); reset (t1); rewrite (t2); read (t1, b); a:=0; for i:=1 to b do begin read (t1, c[i]); a:=a+c[i]; end; a:=round((a/b)*100); write (t2, a); close (t1); close (t2); end.


Проблема в строчке write (t2, a), для Pascal ABC, в котором я работал, не нужно указывать формат вывода. Однако, как оказалось, программу (exe файл, который ABC не создаёт) должны проверять специальной программой-тестером (создаёт виртуальные input\output.txt, в input подставляет значения, сравнивает эталонные с результатом в output), однако тест оказался нерабочим (возможные решения теста: правильный\неправильный ответ, работает дольше 2х секунд, нет ввода в output.txt, НЕПРАВИЛЬНЫЙ ФОРМАТ ВЫВОДА, но тест работал минут 5, не выдав ни ошибки, ни результата). Если смотреть с моей стороны, то всё сделано правильно - в ABC программа работает (ответ целым числом), если со стороны проверяющих - сделанный в Turbo екзешник выводит ответ в неправильном формате. (....E+002).

В первом сообщении спутал F и A)) Число должно быть как раз целое. Нужно либо доказывать, что в разрешённой для работы ABC всё работало правильно, либо найти другой компилятор. Кстати, можно даже для Linux'а.


Время: 11:47.

Время: 11:47.
© OSzone.net 2001-