Ввод-вывод в посылаемых решениях
Формат входного файла соответствует спецификации, дополнительные проверки не нужны. Все строки, в том числе последняя, оканчиваются символом перехода на новую строку (EOLN в Pascal, '\n' в С/С++).
Во всех задачах ввод осуществляется из стандартного ввода (
stdin, т.е. клавиатура, но без USE CRT), а вывод на стандартный вывод (
stdout, т.е. экран). Допускается ввод из файла и вывод в файл (имена файлов указаны в условии задачи, например, "
input.txt" и "
output.txt" или "
data.in" и "
data.out"). Нельзя открывать никаких других файлов, это может привести только к ошибке времени исполнения (RT).
При использовании ввода-вывода из файлов имена файлов должны быть написаны строчными буквами и не содержать путей.
input.txt – правильно
output.txt – правильно
INPUT.TXT – неправильно!
c:\work\output.txt – неправильно!
Программа на выполнение запускается по команде:
program <input.txt >output.txt
поэтому в программе
не должно быть подсказок для ввода и отладочной печати.
При вводе данных нельзя выводить подсказки на ввод.
write('Уважаемый компьютер, введите, пожалуйста, значение n:'); { неправильно! }
read(n);
read(n); { правильно }
При выводе результатов пояснительные сообщения также выводить нельзя, кроме тех, которые явно указаны в формате выходных данных в условии задачи.
writeln('Результат=',rez); { неправильно! }
writeln(rez); { правильно }
Ввод двух чисел a и b, находящихся в одной строке и разделенных пробелом.
В языке Pascal:
var a,b:integer;
readln(a,b); { правильно }
read(a); { правильно }
readln(b);
readln(a); { неправильно! }
readln(b);
В языке Basic:
INPUT A ' правильно
INPUT B
INPUT A,B ' неправильно!
INPUT S$ ' неправильно!
далее сложный код с разделением строки S$ на подстроки и функцией VAL
Смотрите также
Примеры программ
Компиляторы
Для проверки решений используются компиляторы
Free Pascal 3.0 (совместим с Delphi/Turbo Pascal),
GNU C/C++ 11.3, clang C++ 18.1,
Free Basic 1.0 (совместим с Quick Basic),
GNU Prolog 1.4,
Chicken Scheme 4.13,
Haskell 8.0,
Python 3.10,
OpenJava SE 1.8,
Kotlin 1.6,
Mono C# 6.12,
Visual Basic 4.8,
PascalABC.NET 3.8,
Lua 5.4,
LuaJIT 2.0 (Lua 5.1),
QuickJS, SpiderMonkey JS (ECMA/JavaScript 2023),
Bison 3.0.5,
RE/flex 1.0.4
Опции компиляции:
C | gcc -Wall -static -std=gnu17 -s -O2 -o program program.c -lm |
C++ | g++ -Wall -static -std=gnu++20 -s -O2 -o program program.cpp -lm |
| clang++ -Wall -static -std=gnu++20 -s -O2 -o program program.cpp |
Free Pascal | fpc -Sd -Cr -Ct -Ci -XS -O2 -vw program.pas |
PascalABC.NET | pabcnetcclear.exe program.pas |
C# | mcs -optimize program.cs |
Basic | fbc -lang qb program.bas |
Visual Basic | vbnc program.vb |
Java | javac program.java |
Prolog | gplc -o program --min-bips program.pl |
Scheme | csc -static -ignore-case program.scm |
Haskell | ghc -optl-static -optl-pthread program.hs |
Python | python -I -m py_compile program.py |
Lua | luac -o program.luac program.lua |
| luajit -b program.lua program.o |
Kotlin | kotlinc program.kt -jvm-target 1.8 -include-runtime -d program.jar |
ECMA/JavaScript | qjsc -e program.js |
| js115 -c program.js |
Bison | bison -oprogram.cpp program.lex |
RE/flex | reflex --flex -oprogram.cpp program.grm |
Для C++ установлена библиотека шаблонов
boost.multiprecision для работы с длинными целыми и рациональными числами (
cpp_int,
cpp_dec_float,
cpp_rational) и библиотека
format из C++20.
В языках C#/Visual Basic разрешен только ввод-вывод через Console и запрещены некоторые пространства имен и классы. Получение доступа к пространствам имен только через using/imports.
Аналогично запрещены некоторые модули и функции в языке Python (из sys только stdin, stdout, setrecursionlimit, exit, maxsize, argv, int info, float info, byteorder, maxunicode, setdefaultencoding), ввод-вывод только через print, input и stdin/stdout. В Python добавлен модуль
pcio, содержащий упрощенные функции: input для форматированного ввода (аналог Lua и QuickJS), print/println для вывода (аналог C# Console.Write/WriteLine) и encoding для установки кодировки.
В Lua запрещены некоторые модули и функции. В LuaJIT можно применять предзагруженный модуль bit для поразрядных операций.
В ECMAScript для ввода используется функция input(), возвращающая очередную строку ввода или null, для вывода – функция print(значение).
В ограничениях времени в условиях задачи первое число указано для компилируемых языков C/C++/Free Pascal/GNU Prolog/Haskell, второе число – для интерпретируемых/JIT языков. По умолчанию второе время в 2 раза больше и не менее 0.5 секунды. Иногда второе ограничение может быть установлено по времени работы эталонного решения на JIT-языке.
Примеры программ
Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Задача
Написать программу, которая вычисляет сумму двух целых чисел.
В первой строке ввода содержатся два целых числа, разделенных пробелом.
В первой строке вывода вывести одно целое число – сумму чисел.
Программа на C
#include <stdio.h>
int main()
{ int a,b;
scanf("%d%d",&a,&b); /* Никаких подсказок на ввод! */
printf("%d\n",a+b); /* Только число, как указано в условии */
return 0; /* Обязательно вернуть 0! */
}
Программа на C++
#include <iostream> //
using namespace std;
int main()
{ int a,b;
ios::sync_with_stdio(0); //
cin.tie(0);
cin>>a>>b;
cout<<(a+b)<<"\n";
return 0;
}
Программа на Pascal
var a,b:integer;
begin
read(a,b); { Никаких подсказок на ввод! }
writeln(a+b); { Только число, как указано в условии }
end.
Программа на Prolog
:-initialization(main).
main:-
read_integer(A),
read_integer(B),
C is A+B,
write(C),nl.
Программа на Scheme
(let ((A (read))
(B (read)))
(display (+ A B))
(newline)
)
Программа на Haskell
main = do
nums <- fmap (map read.words) getLine
print (nums!!0 + nums!!1)
Программа на Java
import java.util.*;
class program {
public static Scanner in = new Scanner(System.in);
static public void main(String []args){
int a,b;
a = in.nextInt();
b = in.nextInt();
System.out.println(a+b);
}
}
Программа на Python
a,b=map(int,input().split())
print(a+b)
С указанием кодировки, если нужен ввод или вывод русского текста:
import pcio
pcio.encoding('cp1251')
a,b=pcio.input('ii')
pcio.println(a+b)
Программа на C#
using System;
using System.Text;
using System.Globalization;
namespace MyApplication
{
class Program
{
static void Main()
{ Console.InputEncoding = Encoding.GetEncoding(1251); // для чтения или вывода русского текста
Console.OutputEncoding = Encoding.GetEncoding(1251);
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); // для ввода и вывода вещественных чисел
int[] nums = Array.ConvertAll(Console.ReadLine().Split(new char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries), s=>Convert.ToInt32(s));
Console.WriteLine((nums[0]+nums[1]).ToString());
}
}
}
Программа на Kotlin
fun main() {
val (a,b)=readln().split(" ").map{ it.toInt() }
println("${a+b}")
}
Программа на Basic
input a
input b
print a+b
end
Программа на Visual Basic
Module MyProgram
Sub Main()
Dim A as integer, B as integer
Dim Items() as String = Split(Console.ReadLine())
A=Val(Items(0))
B=Val(Items(1))
Console.WriteLine(Str(A+B))
End Sub
End Module
Программа на Lua
a,b = io.read("n", "n")
print(a+b)
В LuaJIT реализована устаревшая версия LUA 5.1 и, в частности, нужно указывать формат "*n" вместо "n".
Программа на ECMAScript (QuickJS, SpiderMonkey)
var [a,b]=input('nn') // аналог ввода Lua
print(a+b)
В качестве аргумента input можно указать число – количество вводимых символов или формат – непустую последовательность символов: '
l' – ввод строки без символа перехода на новую строку, '
L' – ввод строки, включая символ перехода на новую строку, '
n' – ввод числа, '
w' – ввод слова до пробельных символов, '
c' – ввод символа, '
a' – ввод всего текста до конца файла. Для ввода массива первым аргументом нужно указать количество элементов массива, вторым –- формат. При вызове без аргументов вводится строка ('
l').
Другой вариант (у parseInt может быть 2 аргумента, поэтому используем parseFloat)
var [a,b]=readline().split(' ').map(parseFloat)
print(a+b)
Программа на Rust
#[macro_use]
extern crate text_io;
fn main() {
let a:i32;
let b:i32;
scan!("{} {}",a,b);
println!("{}", a+b);
}
Программа на go
package main
import "fmt"
func main() {
var (a int; b int)
fmt.Scan(&a,&b)
fmt.Println(a+b)
}
Программа на Blockly
Программа на RE/flex
%option main
%{
#include <string>
#include <iostream>
using namespace std;
int nums[2],n=0;
%}
%%
-?\d+ nums[n++]=stoi(yytext);
.|\n ;
<<EOF>> { cout<<(nums[0]+nums[1])<<endl; yyterminate(); }
%%
Программа на Bison
%token DIGIT
%{
#include <iostream>
#include <stdlib.h>
using namespace std;
int yylex();
void yyerror(char const *s)
{ exit(1);
}
%}
%start program
%%
program: value ' ' value '\n' { cout<<($1+$3)<<endl; }
;
value: number { $$=$1;}
| '-' number { $$=-$2;}
;
number: DIGIT { $$=$1;}
| number DIGIT {$$=$1*10+$2;}
;
%%
int yylex()
{ int ch=getchar();
if(ch>='0' && ch<='9') { yylval=ch-'0'; return DIGIT; }
return ch;
}
int main()
{ return yyparse();
}