IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа с олимпиадными серверами
сообщение
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Сейчас распространена система онлайн-олимпиад,в данном случае по информатике. Понадобилось решить такую задачу.
Код
Задача 1 «Сумма»

Имя входного файла:                                                                    sum.in
Имя выходного файла:                                                                 sum.out
Максимальное время работы на одном тесте:                        2 секунды
Максимальный объем используемой памяти:                           64 мегабайта
Максимальное количество баллов                                              100 баллов

Найти сумму двух чисел

Формат входных данных

Первая строка входного файла содержит два числа a, b и (-2000000000 <= a,b <= 2000000000). Числа в строках разделены пробелом.

Формат выходных данных

В выходном файле должна содержаться сумма этих чисел

Примеры входных и выходных файлов

sum.in    sum.out
  2 2         4
-10 10         0




Задача можно сказать наипростейшая. Я решил её так.
var inf,b,c,result2:string;
x:char;
a,b1,c1,result:integer;
f1,f2:text;
begin
assign(f1,'sum.in');
reset(f1);
assign(f2,'sum.out');
rewrite(f2);
read(f1,inf);
close(f1);
for a:=1 to length(inf) do
begin
x:=inf[a];
if x<>' ' then b:=b+x
else begin
c:=copy(inf,a+1,length(inf)-a+1);
break;
end;
end;
val(b,b1,a);
val(c,c1,a);
result:=b1+c1;
str(result,result2);
write(f2,result2);
close(f2);
end.


У меня программа отрабатывает как надо, создаёт файл и записывает в него сумму чисел. А сервер выдаёт, что решение неверно. Я подозреваю, что проблема в ограничениях на входные данные, которые заданы в условии.

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Ну, как минимум 2000000000 - это не в диапазоне типа Integer, скорее LongInt, если только не используется 32-битный компилятор. Но на всякий случай делай именно LongInt.

Да и не нужно это, читать строку, потом ее таким образом как ты делаешь, разбивать на 2 числа... Тем более, что ты это делаешь не совсем правильно: если в прочитанной строке перед числами будут пробелы (как в твоем посте, в цитате), то строка B останется пустой, а С будет содержать оба числа.

Все, что надо - читать непосредственно числа из файла:
  read(f1, b1); read(f1, c1);

, и писать тоже сразу число, без обратного преобразования в строку.

P.S.
Цитата
Задача можно сказать наипростейшая
Думаешь? А что будет, если сумма чисел будет больше 231? Скажем, 2000000000 и 2000000000 ? Это даже в LongInt уже не влезет...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.09.2025 3:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name