ПОТОКИ. ВВЕДЕННЯ - ВИВЕДЕННЯ ДАНИХ

1. Потоки.У C++ немає вбудованих команд уведення-виведення даних. Для організації введення-виведення тут реалі­зована концепція потоків, яка визначена у спеціальних мо­дулях. У модулі istream.h описані команди введення, у моду­лі ostream.h – команди виведення, а у модулі iostream.h – ко­манди виведення і введення.

Під потоком розуміють процес уведення-виведення інфор­мації у файл. Периферійні пристрої введення-виведення, такі як клавіатура, монітор, принтер, розглядаються як текстові файли (див. далі). Під час виконання будь-якої програми ав­томатично підключаються стандартні потоки для введення даних з клавіатури (сіn), виведення на екран (cout), виведення повідомлення про помилки (сеrr) і допоміжний потік (clog).

Стандартні потоки використовують команди введення (>>) та виведення (<<) даних. За замовчуванням стандартним пристроєм для потоків виведення даних і повідомлень про помилки є монітор користувача, а для потоку введення даних – клавіатура. Однак потоки можна перенаправляти, наприклад, можна зчитувати вхідну інформацію для програми не з клавіатури, а з деякого текстового файлу на диску (див. § 7).

2. Команда введення даних. Надавати значення змінним ніжна двома способами: за допомогою команди присвоєння, наприклад х = 3.1, або команди уведення даних із клавіату­ри. Команда уведення даних із клавіатури дає змогу виконувати програму для різних вхідних даних, що робить її більш універсальною (масовою). Команда введення >> описана у бібліотеці iostream.h (istream.h) і має такий загальний вигляд:

сіn >> <змінна>;

Дія команди. Виконання програми зупиняється. Система переходить у режим очікування введення даного (екран тем­ний, миготить курсор). Користувач набирає на клавіатурі зна­чення змінної і натискає на клавішу вводу. У результаті ви­конання цієї команди змінній буде присвоєне конкретне значення (те, яке користувач уведе з клавіатури).

Якщо необхідно ввести значення відразу для декількох змінних, то можна або використати декілька потоків введен­ий, або записати усі змінні в одному потоці сіп, застосувавши для цього декілька команд ">>", а саме:

сіn >> <змінна 1> >> <змінна 2> >> ... >> <зміннаN>;

Розглянемо програму Трикутник1 з § 3. Значення сторін можна ввести, наприклад, так:

inta, b, с; сіn>> а; cin>> b; cin>> с;

Під час виконання програми на клавіатурі набираємо

3 J (натискаємо на клавішу Enter)

4 J

5 J

У результаті виконання команд змінні набувають таких значень: а = 3, b = 4, с = 5.

Значення змінних також можна вводити через пропуск. Тобто на клавіатурі можна набрати 3 4 5 J. Одним потоком змінним можна надати значення так:

сіn >> а >> b >> с;.

Якщо у списку введення (який набрали на клавіатурі) даних більше, ніж змінних, то зайві дані будуть зчитані наступною командою введення. Якщо така команда у програмі від сутня, вони будуть проігноровані.

Програми необхідно складати так, щоб ними могли корис­туватись не лише укладачі, але й інші особи. Тобто програми мають бути масовими і зрозумілими. Перед командою введен­ня даних варто записувати команду виведення на екран текс­тового повідомлення-підказки про те, що саме слід ввести. Наприклад, у програмі Трикутник1 можна вивести повідомлення "Введіть сторони трикутника" або "а, b, с =" тощо, а вже після цього записувати команду введення:

cout << "Bведіть сторони трикутника"; сіn >> а >> b >> с;

3. Команда виведення даних. Для виведення на екран повідомлень і результатів обчислень використовують стандар­тний потік виведення coutі команду <<, які визначені у бібліотеці iostream.h (ostream.h):

cout << <вираз 1> << <вираз 2> << ... << <вираз N>;

У списку виведення можуть бути сталі, змінні або вирази. Елементи списку у потоці coutвідокремлюють командами «.

Дія команди. Сталі, значення змінних та виразів виво­дяться на екран у вікно виведення. Це вікно можна перегля­нути за допомогою команд Window →User screen головного вікна компілятора або комбінації клавіш Alt+F5.

Текстові повідомлення у команді виведення записують у лапках. Лапки на екран виводитися не будуть.

Результати виконання програми Трикутник (периметр і пло­щу) можна вивести, наприклад, так:

cout << "Периметр = " << р;

cout << "Площа = " << s;

На екрані одержимо

Периметр = 12Площа = 6

Як бачимо, результати зливаються. Для того, щоб дані виводились у потрібному для користувача вигляді, використо­вують керуючі послідовності.

4. Керуючі послідовності. Керуючі послідовності – це ком­бінації спеціальних символів, які використовуються для введення та виведення даних. Керуюча послідовність складається із символу слеш "\" і спеціально означеного символу. Вони призначені для форматованого виведення результатів обчислень на екран, наприклад, для переходу на новий рядок, по­дання звукового сигналу, а також для виведення на екран де­нних спеціальних символів: апострофа, лапок тощо. Основні керуючі послідовності наведені у табл. 5.


Таблиця 5. Керуючі послідовності

Символи керуючих послідовностей Коментар
\a, \7 Подати звуковий сигнал
\b Повернути курсор на один символ назад (знищити попередній символ)
\f Перейти на нову сторінку
\n Перейти на новий рядок
\r Повернути курсор на початок рядка
\t Перевести курсор до наступної позиції табуляції
\v Вертикальна табуляція
\\ Вивести символ похилої риски
\’ Вивести символ апострофа
\” Вивести символ лапок
\? Вивести знак запитання

Керуючі послідовності разом з коментарями записують у .мішках. Розглянемо дію цих послідовностей на прикладі. Як­що записати команди

cout << "Увага! \a\n "; cout<< "Дане \"а\" введено некоректно \n";

cout << "Виконайте програму ще раз";

то буде подано звуковий сигнал і на екрані побачимо

Увага!

Дане "а" введено некоректно

Виконайте програму ще раз

Якщо використати послідовність, невизначену у мові C++ (наприклад, \u), то компілятор пропустить символ послідов­ності (похилу риску) і виведе на екран лише символ, записа­ний після риски (у нашому випадку літеру u).

Зауваження 1. Замість керуючої послідовності \n можна вико­ристовувати команду endl – кінець рядка. Наприклад, ці дві команди рівносильні:

cout<< "f=" << f << "\n";

cout<< "f=" << f << endl;.

Зауваження 2. Значення дійсних чисел (тип float)можна виво­дити на екран у стандартному або науковому форматах. Якщо значення даного необхідно заокруглити до п значущих цифр, то перед командою виведення треба записати cout.precision(n) Для подання результатів у науковому форматі необхідні під'єднати файл заголовка iomanip.h і перед командою виведення записати

cout<< setiosflags(ios::scientific);.

Задача 1 (про трикутник, заданий координатами вер­шин).Дано координати трьох вершин трикутника А(1; 1), В(2; 2) та С(-1; 2). Обчислити медіану ть і радіус описаного кола r.

#include<iostream.h> // Трикутник2

#include<math.h> //Бібліотека математичних функцій

#include<conio.h>

voidmain()

{

clrscr(); // Очищаємо екран

float x1,x2, хЗ, y1, y2, уЗ; // Оголошуємо змінні та вводимо дані

cout <<"Введіть координати точки А";

сіn >> х1 >> уі:

cout<< "Введіть координати точки В";

сіn>> х2 >> у2;

cout<< "Введіть координати точки С";

сіn>> хЗ >> уЗ;

floata, b, с, х, у, mb, p, s, r; // Оголошуємо додаткові змінні

II Обчислюємо довжини сторін трикутника

а = sqrt(pow((x3 - х2), 2) + pow((y3 - у2), 2));

b = sqrt(pow((x1 - хЗ), 2) + pow((y1 - уЗ), 2));

с = sqrt(pow((x1 - х2), 2) + pow((y1 - у2), 2));

х = (х1 + хЗ) / 2; // Обчислюємо координати

у = (у1 + уЗ) / 2; // середини сторони b

mb = sqrt(pow((x - х2), 2) + pow((y - у2), 2)); // Обчислюємо медіану mb

р = (а + b + c) / 2; // Обчислюємо периметр

s = sqrt(p * (р - а) * (р - b) * (р – с)); // Обчислюємо площу

г = а * b * с / (4 * s); // Обчислюємо радіус

cout<< "mb = " << mb << "\n"; // Виводимо значення медіани

cout << "r = " << r « "\n"; // Виводимо радіус

getch(); //Затримуємо результати на екрані

}

Під час виконання програми функція clrscr() зітре з екрана усі результати та повідомлення попередніх програм (якщо та­кі будуть), і на чистому екрані матимемо

mb = 2.061553 г= 1.581139

У програмі Трикутник2 описано під'єднання бібліотеки conio.h, де визначена функція clrscr() – очищення екрана та функція getch(), яка дає змогу затримати на екрані результати вико­пний програми, доки не буде натиснута довільна клавіша на клавіатурі.

Довідка. Для розв'язування типових задач про трикутник на­ведемо формули обчислення деяких величин:

відстань d між точками (x1, у1), (х2, у2):

координати середини відрізка:

півпериметр трикутника:

площа трикутника:

висота трикутника:

, ,

бісектриса трикутника:

, ,

радіус описаного кола:

радіус вписаного кола:

де a,b, с - сторони, а α, β, γ –відповідно кути трикутника.

5. Перенаправления потоків введення-виведення у MS DOS.Іноді вхідні дані для exe-файлу програми зручно зчитувати з деякого файлу, а не вводити кожного разу вручну з клавіатури. Для цього необхідно перенаправити потік введення, увівши у командному рядку

<назва ехе-файлу> < <назва файлу з вхідними даними>

Приклад 1. Нехай програма Трикутник2 зберігається у файлі tyrik.exe, а у файлі dani.txt записано шість дійсних чисел – координат вершин трикутника. Тоді виконати програму і зчитати для неї дані з файлу dani.txt можна так:

tyrik.exe < dani.txt

Щоб вивести результати виконання програми у файл, у Командному рядку слід увести

<назва ехе-файлу> > <назва файлу з результатами>

Командою tyrik.exe > res1.txt. результати програми tyrik.exe будуть занесені у файл resl.txt.

Можна одночасно перенаправляти два потоки, тобто зчитувати дані з одного файлу та виводити їх у інший:

<назва ехе-файлу> < <назва файлу з вхідними даними> І > <назва файлу з результатами>

Якщо результати файлу file1 необхідно використати як вхідні дані файлу file2, то стандартне введення однієї програмі можна з'єднати каналом із стандартним виведенням іншо так:

file1 I file2

Вправи

1. Розгляньте вправу 1 § 4. Переробіть програму для обчисленню значення функції вашого варіанта з розділу "Задачі", використовуючи команду введення даних. Виконайте програму тричі для трьох різних значень аргументу. Занотуйте результати.

2. Розв'яжіть задачу № 2 вашого варіанту з розділу "Задачі". Про експериментуйте з функціями clrscr() та getch(). Результати:

а) виведіть на екран і занотуйте у звіт;

б) занесіть у файл Myres.dat.

3. Створіть текстовий файл, який містить значення шести коорди­нат вершин трикутника. Виконайте програму Трикутник2, зчитавши вхід­ні дані зі створеного файлу.