Albertum писал(а):
Посмотрел на XDS-x86-251-enduser-win32.
Документация расходится с реальными функциями, например SWholeIO.ReadInt просит параметр INTEGER, но на INTEGER ругается "incompatible types: INT32 и INT16", понятно чего он хочет, но так же нельзя выражаться, особенно при детях...
Для того, чтобы ускорить этот процесс, прошу человека, знакомого с XDS Oberon-2 написать небольшой идеологически правильный пример по текстовому вводу/выводу.
На входе текстовый файл (input.txt):
Код:
30000 5000 -111
Text String
3.123522 4.2131234
На выходе - т.е. сложить, заменить пробел на "_", пустые строки пропустить, сложить и округлить (output.txt):
Код:
34889
Text_String
7.34
Можно, например, так.
Код:
<*+MAIN*>
<*+O2EXTENSIONS*>
MODULE olimp;
IMPORT
SeqFile, TextIO, WholeIO, RealIO;
VAR
in, out: SeqFile.ChanId;
res: SeqFile.OpenResults;
sum_i: LONGINT;
sum_r: REAL;
i, n: LONGINT;
r: REAL;
txt: ARRAY 50 OF CHAR;
BEGIN
SeqFile.OpenRead(in, "input.txt", SeqFile.read+SeqFile.old+SeqFile.text, res);
IF res = SeqFile.opened THEN
SeqFile.OpenWrite(out, "output.txt", SeqFile.write+SeqFile.text, res);
sum_i := 0;
i := 0;
WHILE i < 3 DO
WholeIO.ReadInt(in, n);
sum_i := sum_i + n;
INC(i);
END;
WholeIO.WriteInt(out, sum_i, 5);
TextIO.WriteString(out, txt); TextIO.WriteLn(out);
TextIO.SkipLine(in);
TextIO.ReadToken(in, txt);
TextIO.WriteString(out, txt);
TextIO.WriteChar(out, '_');
TextIO.ReadToken(in, txt);
TextIO.WriteString(out, txt);
TextIO.WriteLn(out);
TextIO.SkipLine(in);
TextIO.SkipLine(in);
TextIO.SkipLine(in);
i := 0;
sum_r := 0;
WHILE i < 2 DO
RealIO.ReadReal(in, r);
sum_r := sum_r + r;
INC(i);
END;
RealIO.WriteReal(out, sum_r, 4);
TextIO.WriteLn(out);
END;
END olimp.
Проверок по выходному файлу не производится, поскольку в условиях олимпиады программа, как правило, стартует в стерильной среде.