Ввод из командной строки

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ввод из командной строки

Сообщение Climber » 26.11.2010 11:25:44

Я продолжаю мучиться на codechef.com :|
Там тестирование кода выглядит так: код компилируется, приложение запускается, ему на вход подаются данные, мониторится вывод. Обычно в задачах указывается условие: первое число во входящих данных - это количество чисел, которые будут введены далее. Соответственно, я делаю цикл с соответствующим количеством итераций.
Наткнулся на задачу:
The input will contain several test cases (not more than 10).
Example
Input:
12
2


Как мне выполнить считывание чисел и определить, сколько их было?
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Ввод из командной строки

Сообщение Mr.Smart » 26.11.2010 11:54:28

ParamCount, ParamStr()?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Ввод из командной строки

Сообщение Climber » 26.11.2010 12:29:42

Не уверен. Там ввод я обычно получаю через readln.
Причем работает примерно так. В описании написано: "На вход подаются числа. Первое число - это количество входных данных, последующие числа - входные данные".
Вот такой код работает правильно:
Код: Выделить всё
var i, n, x: integer;
begin
readln(n);
for i:=1 to n do
  writeln(Process(x));
end;

При этом такой код работает уже неправильно:
Код: Выделить всё
var i, n: integer;
x: array of integer;
begin
readln(n);
setlength(x, n);
for i:=0 to n - 1 do
  readln(x[i]);
for i:=0 to n - 1 do
  writeln(Process(x[i]));
end;
Я не знаю, как у них устроена тестовая среда, но работает она так. Получил одно число, обработал, вывел результат, получил следующее и т. д., как если бы там сидел человек за клавиатурой. Если делать иначе, то сайт сообщает, что "вывод неверный".
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Ввод из командной строки

Сообщение Kitayets » 26.11.2010 15:01:25

2Climber

там же можно посмотреть код других участников. посмотри как они читают стандартный ввод и сделай также.
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24

Re: Ввод из командной строки

Сообщение Climber » 26.11.2010 16:50:01

Kitayets
Я смотрел, но нифига не понял.
Вот сишный код:
Код: Выделить всё
while (cin>>in)
{
cout<<getMaxDollars(in)<<endl;
}

Вот паскаль:
Код: Выделить всё
While not eof do
Begin
readln(N);
Writeln( Pt(N) );
End;
Делал так же - выдает ошибку "истек лимит времени". Т. е. моя программа не завершается, а ждет ввода.
Попробую у тамошних админов спросить.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Ввод из командной строки

Сообщение Kitayets » 26.11.2010 17:50:51

2Climber

очевидно, что они читают 1 значение с стандартного входа, потом выдают 1 решение на стандартный вывод, и так в цикле пока есть на входе значения...
возможно это так задумано...

в паскалевском коде возможно в начале есть директивы компилятора?

вообще странно что у тебя не работает приведенный "паскалевский" код. Какая у тебя и у них ОС?

Добавлено спустя 11 минут 38 секунд:
Проверил у себя (на linux fedora13 x64_86) такой код:
Код: Выделить всё
program test_stdin;
var
    str : string;
    count: integer;
begin
    count:= 0;
    writeln('Started...');
    while not eof do begin
        readln(str);
        inc(count);
    end;
    writeln(count, ' rows posted');
end.


можно просто вводить значения после запуска в консоли, потом вводишь Ctrl+D (EOF в линуксовом терминале) -> программа выводит корректный результат. это работает также как и у любой программы которая читает стандартный ввод, например cat - она будет висеть пока не введёшь EOF.

также правильно ведёт себя и перенаправление стандартного ввода/вывода в/из файл,

например запускаю так полученную программу:
[yr@dream stdin_t]$ ./stdin_t < stdin_t.pas
Started...
13 rows posted
[yr@dream stdin_t]$ ./stdin_t < stdin_t.pas > output.txt
[yr@dream stdin_t]$ cat output.txt
Started...
13 rows posted


думаю по второму варианту и работает проверка задач в codechef.com и соответственно должно быть доступно - сначала считать весь ввод, и только после этого выводить результаты.
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 3

Рейтинг@Mail.ru