6+
Cайт учителя информатики:
Катаева Виктора Борисовича в формате HD

9 мая!
День победы!
Урок №3 "Форматированный ввод и вывод"
Уже пора начать составлять программы, результат которых виден на экране.
Как я писал ранее, практически любая программа состоит из 4 частей:
1. Блок объявления данных.
2. Блок ввода исходных данных.
3. Блок обработки данных.
4. Блок вывода информации на экран.
Для программистов существует некая информационная культура. Ее суть заключается в том, что пользователю наших программ должно быть понятно, какие исходные данные требуются от него для ввода и какие результаты он получает в результате выполнения программ.

Профессор Талисманов


= команда присваивания в языке C++
:= оператор присваивания в Pascal
Ввод-вывод данных в языке C++ осуществляется либо с помощью функций ввода-вывода в стили C, либо с использованием библиотеки классов C++. Преимущество объектов C++ в том, что они легче в использовании, поэтому предлагаю рассмотреть именно их.
При подключении этого файла с помощью директивы
#include <iostream> в программе автоматически создаются виртуальные каналы связи cin для ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток << и чтения из потока >>.
-
cin>>x; // в переменную x записывает некое значение, введенное с клавиатуры.
-
cin>>x>>y>>z; // вводит несколько переменных.
cin>>a>>; cin>>b; - будет ждать ввода значений переменных а и b так:
5<Enter>
6<Enter>
cin>>a>>b;
При выполнении пользователь набирает на клавиатуре соответствующую последовательность значений, разделяя их пробелами и программа будет ждать ввода значений переменных а и b так:
5 6<Enter>
Операции ввода/вывода в языке Си организованы посредством библиотечных функций (причем их довольно много). Самый простой механизм ввода - чтение по одному символу из стандартного входного потока (с клавиатуры) с помощью функции getchar( ).
int getchar(void); Здесь определен тип единственного аргумента (void) и тип возвращаемого функцией значения (int).Оператор вида:
-
х = getchar( ); присваивает переменной х очередной вводимый символ. Переменная х должна иметь символьный или целый тип.
Другая функция - putchar(х) выдает значение переменной x в стандартный выходной поток (на экран дисплея).
-
int putchar(int); Подключение осуществляется с помощью директивы препроцессора #include <stdio.h> помещаемой в начало программы.
Заметим, что для функции getchar( ) после выбора символа необходимо нажать клавишу <Enter>. Иногда это создает определенные неудобства.
Функции getch( ) и getche( ) устраняют их. Они имеют следующие прототипы:
-
int getch(void); int getche(void); Обе эти функции вводят символ сразу же после нажатия соответствующей клавиши (здесь не надо дополнительно нажимать клавишу <Enter>). Отличие между ними заключается в том, что getche( ) отображает вводимый символ на экране дисплея, а getch( ) - нет. Прототипы этих функций содержатся в файле conio.h (консольный ввод/вывод). Для их использования файл conio.h также следует подключить к программе с помощью директивы #include.
Важно!!! Количество форматов в строке должно быть равно количеству адресов переменных в списке. Кроме того, тип переменных должен совпадать с указанным.
В языке программирования Паскаль за ввод данных отвечает стандартные процедуры: ожидания ввода read, readLn - [читать, читать строку], а за вывод на экран отвечает оператор write - [пиши, пиши строку].
-
read; - процедура без параметров ждет нажатия клавиши <Enter> и переводит курсор на следующую строчку.
-
read(переменная [список переменных через запятую]); - процедура может считывать любое количество значений переменных, идентификаторы которых перечислены в круглых скобках через запятую и присваивать введенное .
-
readLn(переменная [список переменных через запятую]);
Readln(a); Readln(b); - будет ждать ввода значений переменных а и b так:
5<Enter>
6<Enter>
Readln(a,b); - При выполнении этого оператора пользователь набирает на клавиатуре соответствующую последовательность значений, разделяя их пробелами и программа будет ждать ввода значений переменных а и b так:
5 6<Enter>
Важно!!! Помните, что все переменные указанные внутри процедуры Read и Write должны быть объявлены в блоке объявления данных VAR.
Тип данных, вводимых во время работы программы, должен соответствовать типу переменной, указанной в инструкции ввода. В случае несоответствия типа введенных данных типу переменной, значение которой вводится с клавиатуры, программа завершает работу, и на экран выводится сообщение об ошибке ввода/вывода.
"Есть еще команды для форматированного
ввода/вывода в стиле Си " scanf("%s", address); printf("%s\n",address);


Профессор Mascot
Форматированный
ввод и вывод


Для вывода данных на экран С++ использует объект cout и оператор <<
-
cout << переменная<< [список переменных через <<]; -Выводит значения переменных, идентификаторы которых указаны между <<;
-
cout << переменная<< [список переменных через <<]<<endl; - Выводит значения переменных, идентификаторы которых указаны между <<;
-
cout<<"Текст пояснения"; В кавычках можно писать все что угодно. Главное, чтобы пользователю было понятно, что от него требуется!
-
cout << endl; - печатает на экране пустую строку и переводит курсор в начало следующей.
-
cout << a<<; - выводит на экран значение переменной a и оставляет курсор на этой же строке прямо возле напечатанного значения.
-
cout <<"Computer № "<<a<< endl; - выводит на экран содержимое кавычек Computer № затем, значение переменной a и переводит курсор на следующую строку.
Computer № 5
-
cout <<"a="<<a<<"Чило b равно:"<<b<< endl;
a=5 Число b равно:6
Для корректного их использования манипуляторов необходимо подключить библиотеку iomanip с помощью оператора #include <iomanip>
-
cout.width(n) — устанавливает ширину поля вывода -- n позиций;
-
cout.precision(10); — определяет m цифр в дробной части числа;
-
cout.setf(ios::flag1 | ios::flag2 | ios::flag3) - Флаги позволяют установить параметры ввода-вывода, которые будут действовать во всех последующих операторах ввода-вывода до тех пор, пока не будут отменены. Манипуляторы вставляются в операторы cin(cout) и устанавливают параметры текущего оператора ввода-вывода.
int r=-25;
cout.setf(ios::right);
cout.width(15);
cout<<"r="<<r<<endl; Выравнивание по правой границе, шириной вывода 15. r=-25
Подробнее о флагах и манипуляторах можно посмотреть здесь.
-
cerr – объект класса ostream, соответствующий стандартному выводу для ошибок. В этот поток мы направляем сообщения об ошибках программы.
-
setw - может управлять шириной вывода чисел.
cerr << "ошибка: введенная строка пуста!\n";
Модификатор вывода dec, oct и hex позволяют выводить числа в десятичном восьмеричном или шестнадцатеричном виде.
#include <iostream.h>
void main(void)
{
cout << "Восьмеричный: " << oct << 10<< endl;
cout << "Шестнадцатеричный: " << hex << 10 << endl;
cout << "Десятичный: " << dec << 10 << endl;
}
Восьмеричный: 12
Шестнадцатеричный: а
Десятичный: 10
ВАЖНО!!! С++. Важно!!! Надеюсь, вы заметили у объекта вывода модификатор<< endl;
Это позволяет после вывода переместить курсор на следующую строку.
В Паскале для вывода информации используется процедура write.
-
write(переменная [список переменных через запятую]); - процедура выводит значения переменных, идентификаторы которых указанны с круглых скобках.
-
writeLn(переменная [список переменных через запятую][:число позиций][:точность - количество знаков после запятой]);
-
write( ' Текст пояснения ' ); В ремарках можно писать все что угодно. Главное, чтобы пользователю было понятно, что от него требуется!
-
Writeln; - печатает на экране пустую строку и переводит курсор в начало следующей.
-
Write(a); - выводит на экран значение переменной a и оставляет курсор на этой же строке прямо возле напечатанного значения.
-
Writeln('Computer №',a); - выводит на экран содержимое кавычек Computer № затем, значение переменной a и переводит курсор на следующую строку.
Computer № 5
-
Writeln('a=',a,' Чило b равно: ',b); - выводит на экран
a=5 Число b равно:6
-
Writeln('с=',с[:n:d]); - выводит на экран содержимое кавычек c= затем, значение вещественнойпеременной c в формате для дробного числа, где n-количествосимволов для вывода, d-точность (количество знаков после запятой) и переводит курсор на следующую строку.
Writeln('с=',с:3:2); с=3.20
Writeln('f=',f:3); f= 3
ВАЖНО!!! PAS. Важно!!! Надеюсь, вы заметили у процедур ввода и вывода окончание Ln. Это позволяет после вывода переместить курсор на следующую строку.
"Ага-а-а-а! Можно запутаться со стрелочками <<" "Хотя, нет :-((( <<- такие операторы как бы выпускают данные, >> - наоборот входят" "cin - ключевое слово IN, а сout - ключевое слово OUT"

Профессор Талисманов
ЗАДАЧА
Найти сумму двух целых чисел введенных пользователем и вывести результат на экран.
Пример программы С++:
#include <stdio.h> // Подключение модулей
#include <conio.h>
#include <windows.h>
#include <iostream> // библиотека, в которой содержатся потоки ввода и вывода cin и cout.
#include <iomanip> // Подключение модуля манипуляторов форматирования, таких как <<endl;
using namespace std; // Использовать пространство стандартных имён.
int a,b,c; // объявление переменных целого типа.
main() /*Главный модуль программы */
{ /*Начало*/
SetConsoleCP(1251);
SetConsoleOutputCP(1251); // Активация Консоли на русском языке
cout<<"Введите два числа "; // подсказка для ввода
cin>>a>>b; // ввод данных
c = a + b; // вычисления (оператор присваивания)
cout<<"Результат: " <<a<<"+"<<b<<"="<<c; // вывод результата
getch();
} // Конец программы
Результат на экране монитора:
Введите два числа
5 6
Результат: 5+6=11
Пример программы Pascal:
Program i_o;
Var
a,b,c: integer; {объявление переменных}
BEGIN
writeLn( ' Введите два числа ' ); {подсказка для ввода}
Readln(a,b); {ввод данных}
c:=a+b; {вычисления (оператор присваивания)}
writeln( ' Результат: ',a,'+',b,'=',c ); {вывод результата}
readln;
END.
Результат на экране монитора:
Введите два числа
5 6
Результат: 5+6=11

ЗАДАЧА
Найти стоимость яблок, если известны вес и цена яблок.
Пример программы для стиля Си:
#include <stdio.h>
#include <conio.h>
main()
{
float cena, ves,s;
printf("Input the weight of the apples in kilograms ");
scanf("%f",&ves); // ввод вещественного числа (дробного)
printf("Input the price of apples per kilogram ");
scanf("%f",&cena); // ввод вещественного числа (дробного)
s=cena*ves;
printf(" \t The cost of the apples: %9.2f\n",s); // вывод результата в формате 9 символов ширина из них 2 символа после точки.
getch();
}
Результат на экране монитора:
Enter the weight of the apples in kilograms 2.300
Enter the price of apples per kilogram 162
The cost of the apples: 372.60
Пример программы Pascal:
Program apple;
Var
cena, ves,s: real;
BEGIN
write( ' Введите вес яблок в килограммах ' );
Readln(ves); {ввод вещественного числа (дробного}
write( ' Введите цену яблок за килограмм ' );
Readln(cena); {ввод вещественного числа (дробного}
s:=cena*ves;
writeln( ' Стоимость яблок: ',s:9:2); {вывод результата в формате 9 символов ширина из них 2 символа после точки}
readln;
END.
Результат на экране монитора:
Введите вес яблок в килограммах 2.300
Введите цену яблок за килограмм 162
Стоимость яблок 372.60

Стандартные библиотеки С++
-
#include <iostream> – библиотека, в которой содержатся потоки ввода и вывода cin и cout.
-
#include <iomanip> – библиотека, в которой содержится модификатор setw. С его помощью можно, например, установить ширину поля для каждой координаты вектора, или элемента матрицы.
-
#include <cmath> – в этой библиотеке содержатся тригонометрические функции, логарифмы, модули и другие функции, предназначенные для выполнения простейших математических операций.
-
#include <cstddef> – библиотека, в которой содержится указатель NULL.
-
#include <cstdlib> – содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие.
-
#include <fstream> – содержит в себе потоки ifstream и ofstream, которые организовывают чтение/запись из/в файл(а).
-
#include <cstring> – содержит в себе функции для работы со строками, такие как strlen (вычисление длины строки), strcpy (копирование строки), strcat (объединение строк), strcmp (сравнение строк) и некоторые другие.
-
#include <windows.h> - расширенная библиотека управления консолью.