Programming Taskbook


E-mail:

Пароль:

Регистрация пользователя   Восстановление пароля

English

ЮФУ SMBU

Электронный задачник по программированию

©  М. Э. Абрамян (Южный федеральный университет, Университет МГУ-ППИ в Шэньчжэне), 1998–2024

 

Задания | Операции ввода-вывода

PrevNext


О вводе исходных данных и выводе результатов

При выполнении учебных заданий с использованием электронного задачника Programming Taskbook ввод-вывод данных должен осуществляться с помощью специальных процедур или функций, реализованных в самом задачнике и доступных для программы, выполняющей задание. Это связано с нем, что исходные данные, предоставляемые программе учащегося, генерируются самим задачником, а результаты, полученные программой, должны быть проверены задачником на правильность.

Для получения краткой справки о средствах ввода-вывода, которые можно использовать для выбранного языка программирования, достаточно, находясь в окне задачника, нажать клавишу [F1] или кнопку со знаком вопроса «?» в правой части заголовка окна (окно задачника можно отобразить на экране, используя модуль PT4Demo или запустив на выполнение проект-заготовку, созданный с помощью модуля PT4Load).

Ниже приводится краткое описание процедур/функций ввода-вывода для каждого из языков программирования, доступных в задачнике Programming Taskbook версии 4.23. Более подробную информацию о вводе-выводе данных (в частности, об особенностях ввода-вывода для файлов, линейных динамических структур и бинарных деревьев) можно получить в разделах, содержащих решения типовых заданий для языков Pascal, C, C++, C#, Visual Basic .NET, F#, Python, Java, Ruby, Julia.

Язык Pascal

Ввод исходных данных:
   procedure GetB(var A: boolean);
   procedure GetN(var A: integer);
   procedure GetR(var A: real);
   procedure GetC(var A: char);
   procedure GetS(var A: string);
   procedure GetP(var A: PNode);
Вывод результатов:
   procedure PutB(A: boolean);
   procedure PutN(A: integer);
   procedure PutR(A: real);
   procedure PutC(A: char);
   procedure PutS(A: string);
   procedure PutP(A: PNode);

По поводу типа PNode см. описания групп заданий Dynamic и Tree.

При использовании задачника в средах программирования Pascal ABC и PascalABC.NET для ввода-вывода данных можно использовать стандартные процедуры Read и Write.

Начиная с версии 4.13, в средах Delphi и Free Pascal Lazarus ввод исходных данных можно выполнять с помощью универсальной процедуры Get, а вывод результатов — с помощью универсальной процедуры Put; при этом один вызов процедуры можно использовать для ввода или вывода только одного элемента данных. Ввод данных можно также осуществлять с помощью функций без параметров GetBoolean (функция-синоним GetBool), GetInteger (синоним GetInt), GetReal (синоним GetDouble), GetChar, GetString, GetPNode. Каждая функция возвращает значение очередного элемента исходных данных; тип элемента должен соответствовать типу, указанному в имени функции.

Языки C и C++

Начиная с версии 4.23, в которой добавлена поддержка языка C, для ввода и вывода данных предусмотрены следующие функции:

Ввод исходных данных:
   void GetB(bool* a);
   void GetN(int* a);
   void GetD(double* a);
   void GetC(char* a);
   void GetS(char* a);
   void GetS(std::string& a); // только для языка C++
   void GetP(PNode* a);
Вывод результатов:
   void PutB(bool a);
   void PutN(int a);
   void PutD(double a);
   void PutC(char a);
   void PutS(char* a);
   void PutS(std::string a); // только для языка C++
   void PutP(PNode a);

Для ввода-вывода данных на языке C++ может также использоваться поток ввода-вывода pt, позволяющий добиться более компактной записи. Например, вместо последовательности вызовов функций GetN(&a); GetD(&b); GetS(s); достаточно указать один оператор чтения из потока: pt >> a >> b >> s;

В версии 4.22 были добавлены варианты функций ввода для языка C++, возвращающие введенный элемент данных:

Ввод исходных данных (язык C++, начиная с версии задачника 4.22):
   bool GetBool();
   int GetInt();
   double GetDouble();
   char GetChar();
   std::string GetString();
   PNode GetNode();

По поводу типа PNode см. описания групп заданий Dynamic и Tree.

До версии 4.23 в качестве параметров функций ввода данных для языка C++ использовались не указатели, а ссылки:

Ввод исходных данных (язык C++, до версии задачника 4.23):
   void GetB(bool& a);
   void GetN(int& a);
   void GetD(double& a);
   void GetC(char& a);
   void GetS(char* a);
   void GetS(std::string& a);
   void GetP(PNode& a);

Языки платформы .NET (C#, VB.NET, F#)

Ввод исходных данных (C#):
   public static bool GetBool();
   public static int GetInt();
   public static double GetDouble();
   public static char GetChar();
   public static string GetString();
   public static Node GetNode();
Ввод исходных данных (VB.NET):
   Public Shared Function GetBool() As Boolean
   Public Shared Function GetInt() As Integer
   Public Shared Function GetDouble() As Double
   Public Shared Function GetChar() As Char
   Public Shared Function GetString() As String
   Public Shared Function GetNode() As Node
Ввод исходных данных (F#):
   pt.GetBool() : bool
   pt.GetInt() : int
   pt.GetDouble() : double
   pt.GetChar() : char
   pt.GetString() : string
   pt.GetNode() : Node
Вывод результатов (C#):
   public static void Put(params object[] a);
Вывод результатов (VB.NET):
   Public Shared Sub Put(ParamArray a() As Object)
Вывод результатов (F#):
   pt.Put([<ParamArray>] args: obj[]) : unit

Операции ввода-вывода для языков C# и VB.NET реализованы в виде статических методов специального класса (PT для C#, PTVB для VB.NET), доступного для любой программы, выполняющей учебное задание. В указании имени класса при вызове этих методов нет необходимости, так как решение задания оформляется в виде метода Solve класса, который является потомком класса PT или PTVB (и, следовательно, получает все методы ввода-вывода «по наследству»). Для языка F# следует использовать методы класса pt, явно указывая этот класс при вызове методов.

Метод Put является универсальным методом вывода. В нем можно указывать любое число выводимых параметров любого допустимого типа (а именно, любого из типов, для которого предусмотрен метод ввода).

В версии 4.19 метод Put изменен таким образом, чтобы с его помощью можно было выводить данные составных типов. В версии 4.20 был расширен набор методов ввода для всех языков платформы .NET за счет добавления методов для быстрого ввода следующих структур данных с элементами четырех базовых типов (int, double, string и char):

  • массивов (GetArrInt, GetArrDouble и т. д.),
  • последовательностей, т. е. объектов типа IEnumerable<T> (GetSeqInt, GetSeqDouble и т. д.),
  • списков (GetListInt, GetListDouble и т. д.),
  • двумерных массивов (GetMatrInt, GetMatrDouble и т. д.),
  • невыровненных массивов (GetArrArrInt, GetArrArrDouble и т. д.),
  • списков списков (GetListListInt, GetListListDouble и т. д.).

Для языка F# (а начиная с версии 4.22, и дял языков C# и VB.NET) доступны также методы, обеспечивающие ввод кортежей (например, GetInt2, GetInt3, GetInt4).

По поводу типа Node см. описания групп заданий Dynamic и Tree.

Язык Python

Ввод исходных данных:
   get()
   get_bool()
   get_int()
   get_float()
   get_str()
   get_Node()
Вывод результатов:
   put(a, ...)

Все методы ввода являются функциями, возвращающими очередной элемент исходных данных. Метод get является универсальным методом ввода; его можно использовать для ввода данных любого типа. Метод get_str можно использовать для ввода как строковых, так и символьных исходных данных.

В версии задачника 4.19 набор функций ввода был расширен за счет добавления функций для быстрого ввода кортежей (get2, get3, get4, get5), списков (get_list) и матриц (get_matr).

Метод put является универсальным методом вывода. В нем можно указывать любое число выводимых параметров типа bool, int, float, str, Node, а также кортеж (tuple) или список (list) элементов этих типов. Указание кортежа или списка приводит к тому, что в задачник последовательно пересылаются все элементы этого кортежа или списка.

По поводу типа Node см. описания групп заданий Dynamic и Tree.

Язык Java

Ввод исходных данных:
   public static bool getBool();
   public static int getInt();
   public static double getDouble();
   public static char getChar();
   public static String getString();
   public static Node getNode();
Вывод результатов:
   public static void put(Object... a);

Операции ввода-вывода для языка Java реализованы в виде классовых методов специального класса PT, доступного для любой программы, выполняющей учебное задание. В указании имени класса PT при вызове этих методов нет необходимости, так как решение задания оформляется в виде метода solve класса, который является потомком класса PT (и, следовательно, получает все методы ввода-вывода «по наследству»).

Метод put является универсальным методом вывода. В нем можно указывать любое число выводимых параметров любого допустимого типа (а именно, любого из типов, для которого предусмотрен метод ввода).

По поводу типа Node см. описания групп заданий Dynamic и Tree.

Язык Ruby

Ввод исходных данных:
   get
   get_b
   get_i
   get_f
   get_s
   get_node
Вывод результатов:
   put(a, ...)
   a.put

Все методы ввода являются функциями, возвращающими очередной элемент исходных данных. Метод get является универсальным методом ввода; его можно использовать для ввода данных любого типа. Метод get_b предназначен для ввода логических данных (true и false), метод get_i — для ввода целочисленных данных (типа Fixnum и Integer), метод get_f — для ввода вещественных данных (типа Float), метод get_s — для ввода символьных и строковых данных (типа String), метод get_node — для ввода данных типа Node.

В версии 4.22 были добавлены варианты универсальной функции ввода get2, get3, get4, get5, возвращающие 2, 3, 4 и 5 очередных элементов исходных данных.

Метод put является универсальным методом вывода. В нем можно указывать любое число параметров логического, целочисленного, вещественного, строкового типа, типа Node, а также параметры-массивы (Array), содержащие элементы этих типов. Указание массива приводит к тому, что в задачник последовательно пересылаются все элементы этого массива. Для всех перечисленных типов данных реализован еще один вариант метода вывода: метод put без параметров, который должен применяться непосредственно к выводимому элементу данных.

По поводу типа Node см. описания групп заданий Dynamic и Tree.

Язык Julia

Ввод исходных данных:
   get
   get_b
   get_i
   get_f
   get_c
   get_s
   get_node
Вывод результатов:
   put(a, ...)

Все методы ввода являются функциями, возвращающими очередной элемент исходных данных. Метод get является универсальным методом ввода; его можно использовать для ввода данных любого типа. Метод get_b предназначен для ввода логических данных (типа Bool), метод get_i — для ввода целочисленных данных (типа Int), метод get_f — для ввода вещественных данных (типа Float64), метод get_c — для ввода символьных данных (типа Char), метод get_s — для ввода строковых данных (типа String), метод get_node — для ввода данных типа Node.

Имеются также варианты универсальной функции ввода get2, get3, get4, get5, возвращающие 2, 3, 4 и 5 очередных элементов исходных данных.

Метод put является универсальным методом вывода. В нем можно указывать любое число параметров логического, целочисленного, вещественного, символьного, строкового типа, типа Node, а также параметры-массивы (AbstractVector), содержащие элементы этих типов. Указание массива приводит к тому, что в задачник последовательно пересылаются все элементы этого массива.

По поводу типа Node см. описания групп заданий Dynamic и Tree.


PrevNext

 

Рейтинг@Mail.ru

Разработка сайта:
М. Э. Абрамян, В. Н. Брагилевский

Последнее обновление:
01.01.2024