Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Вказівки до виконання роботи.14






Арк.

Теоретичні відомості. 1

Потокове введення і виведення даних. 1

Операції над потоками. 2

Форматоване введення-виведення базових типів. 4

Маніпулятори введення/виводу. 5

Прапори. 7

Маніпулятори для роботи з дійсними числами. 7

Створення консольного застосування. 11

Деякі моменти, на які необхідно звернути увагу. 13

Вказівки до виконання роботи.14

Вимоги до звіту. 14

Приклад розв’язання задачі. 15

Індивідуальні завдання. 17

 

Теоретичні відомості.

Потокове введення і виведення даних.

ВСТУП

Практично будь-яка програма обмінюється інформацією із ЗОВНІШНІМИ прибудовами ПЕВМ, які використовуються для введення даних в програму і виведення результатів. Управляти введенням-виводом можна з програми і на рівні операційної системи (за рамками мови програмування). Ми розглянемо способи роботи з прибудовами введення-виводу з програми і відповідні засоби мови С++.

З позицій СТИЛЮ ПРОГРАМУВАННЯ в мові З++ можна виділити ОБ' ЄКТНО - ОРІЕНТОВАНУ систему введення-виводу і успадковану ПРОЦЕДУРНО - ОРІЕНТОВАНУ систему введення-виведення мови С.

ВВЕДЕННЯ-ВИВЕДЕННЯ

Під ВВЕДЕННЯМ-ВИВОДОМ розуміють операції передачі даних, здійснюваних між програмою і зовнішніми пристроями - екраном, клавіатурою, жорсткимдиском, на якому розташовані файли. Усі скільки-небудь корисні програми обмінюються даними із зовнішнім світом. Програма може вводити символьну інформацію з пристрою введення і виводити її на пристрій виводу. Програма може створювати або змінювати файли, в яких зберігається інформація, інша (чи ця ж) програма може читати інформацію з цього або іншого файлу.

Відомо, що операції введення-виводу мають сильну апаратно-операційну залежність. З цієї причини в С/С++ засоби введення-виводу відокремлені від мови і винесені в окремі бібліотеки. У мові С, попереднику С++, операції введення-виводу були реалізовані за допомогою набору стандартних функцій бібліотеки stdio. У С++ для введення або виведення даних використовується набір стандартних класів, які об'єднані в об'єктно-орієнтованій бібліотеці iostream.

Оскільки С++ сумісний із С, в ньому доступні стандартні функції введення-виведення мови С.

У С/С++ реалізований механізм введення-виводу, не залежний від особливостей роботи різноманітних пристроїв, що здійснюють обмін даними із зовнішніми носіями інформації. Програма працює не з фізичними, а з логічними пристроями введення-виводу - ПОТОКАМИ.

Назва ця, можливо, пішло від того, що інформація вводиться і виводиться у вигляді ПОТОКУ БАЙТІВ - значення за значенням. Потік можна зв'язати з файлом.

Усі пристрої введення-виводу різні, але усі потоки функціонують однаково. Одна і та ж функція може виводити дані і на екран і у файл, читати дані з клавіатури і з файлу. Відмінності полягають тільки в тому, як створюються потоки і як вони прив'язуються до потрібних файлів.

ПОТОКИ

ПОТІК - це своєрідний уніфікований інтерфейс між програмою і фізичними прибудовами, що дозволяє програмістові не думати про особливості перенесення даних від джерела до приймача.

Потік визначається як послідовність байтів і не залежить від конкретного прибудую, з яким взаємодіє програма при передачі даних (оперативна пам'ять, файл на диску, клавіатура або принтер). Введення даних називається ВИТЯГАННЯМ з потоку або ЧИТАННЯМ, виведення даних - ПОМІЩЕННЯМ (ВКПЮЧЕНИЕМ) в потік або ЗАПИСОМ. Взаємодія з потоком для збільшення швидкості передачі даних проводиться, як правило, через спеціальну область оперативної пам' яті - БУФЕР. Фактична передача даних виконується при виводі псля заполнения буфера, а при введенні - якщо буфер вичерпаний.

По напряму передачі даних розрізняють наступні потоки:

1) ВХІДНІ, з яких читаються (витягаються) дані в змінні програми - потоки введення (input stream);

2) ВИХІДНІ, в які записуються (вставляються) значення з програми, - потоки виводу (output stream);

3) ДВОНАПРАВЛЕНІ, допускаюче читання і запис - потоки введення-виводу (input - output stream).

По виду пристроїв, з якими працює потік, можна розділити потоки на СТАНДАРТНІ, ФАЙЛОВІ і СТРОКОВІ.

Введення-виведення, що виконується з використанням стандартних потоків, зазвичай називають КОНСОЛЬНИМ введенням-виводом.

При підключенні файлу iostream.h (iostream для Visual Studio 2005 і вище) в програмі на початку її виконання автоматично створюються декілька стандартних потоків.Ми розглянемо тільки два:

- сіn – потік для введення даних із стандартного пристрою (за умовчанням - з клавіатури);

- cout – потік для виведення даних на стандартний пристрій (за умовчанням - на монітор);

Зв'язку цих стандартних потоків з файловими прибудовами можна змінювати (перепризначувати) на рівні операційної системи або в програмі.

Наприклад, при виконанні команди DOS tstpgm < tstpgm.in > tstpgm.out будуть перевизначені зв'язку стандартних потоків введення-виводу. Під година виконання програми з файлу tstpgm.exe введення через cin буде проводитися з файлу tstpgm.in, а вивід через cout - у файл tstpgm.out.

Перенаправлення стандартних потоків можна виконувати також безпосередньо в програмі.

Для підтримки потоків бібліотека С++ містить стандартні класи.

Клас istream (input stream - вхідний потік) реалізує потік введення, клас ostream (outstream - выходгой потік) - потік виводу.

 

Операції над потоками.

Операція введення > >

Витягає деяку послідовність символів з вхідного потоку з cin і перетворить її до типу змінної, в яку має бути поміщений результат введення.

Оператори

int х;

cin> > х;

забезпечать введення цілого числа з клавіатури в змінну х, точніше, в область пам'яті, виділену для зберігання значення цієї змінної (зрозуміло, щоб введення сталося, на клавіатурі треба набрати какое- або число і натиснути клавішу " Enter").

Операція введення " дозволяє сполучати декілька операцій введення:

cin> > х> > у;

При введенні даних за допомогою операції > > за замовчанням пробільні символи сприймаються як роздільники, не можна, наприклад, ввести рядок, що містить пропуск, або ввести присутній у вхідному потоці пропуск в змінну типу char.

Розглянемо детальніше введення числових даних.

Допустимо, нам необхідно ввести ціле число 31 і дробове число 12.78. Ми пишемо в програмі таких операторів:

int а;

double b;

cin> > а> > b;

Тоді числа можна вводити так:

31< enter>

12.78< enter>

чи так:

31< npo6en> 12.78< enter>

Як бачимо, введення повинне закінчуватися клавішею < Enter>. Ми могли б написати оператори введення і таким чином:

cin> > a;

cin> > b;

Це ніяк не впливає на те, яку послідовність символів повинен вводити користувач, і скільки разів буде натиснута клавіша < Enter> - усе, що описано вище, працює і в цьому варіанті.

Якщо в послідовності символів зустрічаються неприпустимі для цього типу символи, то введення не виконується, наприклад:

31rl2.78< enter>

Число 31 потрапить в цілую змінну, а дробове число - ні. Якщо неприпустимий символ буде перед першим числом, то введення взагалі не виконається ні для першого числа, ні для другого.

Таким чином, роздільником чисел в послідовності символів є пропуск. Стандартними символами-роздільниками є також табуляція, новий рядок, нова сторінка і повернення каретки.

Щоб ввести 5 чисел, користувач може набрати на клавіатурі наступну послідовність символів:

1< пробел> 2< пробел> 3< пробел> 4< пробел> 5< пробел> < Сtrl> +< 2> < Enter>

Як завжди, замість будь-якого пропуску можна натискати клавішу < Enter>. Якщо у нас у вхідному потоці зустрічаються символи, що відрізняються від стандартних символів-роздільників, ми повинні реалізувати в програмі введення символу. Нехай у нас макет введення є наступним:

< ціле> < символ> < дробове>

Потрібно оголосити відповідні змінні в програмі:

int a;

char ch;

double b;

Тоді рядок

31r12.78

ми можемо вводити оператором:

cin> > а> > ch> > b;

На місці символу може бути заданий будь-який символ (у т. ч. і пропуск), який потрапить в змінну ch. При введенні окремого символу ми теж повинні натискати клавішу < Enter>.

При введенні чисел ми можемо вводити досить довгу послідовність символів-цифр, що розділяються пропусками, але в програму потрапить (після натиснення клавіші < Ешег>) рівно стільки чисел, скільки змінних написано в операторах введення.

Така декілька дивна з точки зору здорового глузду поведінка (навіщо дозволяти введення зайвих символів, якщо вони не використовуються) пояснюється тим, що потоки буферизуються. Це означає, що насправді символи, що натискаються користувачем на клавіатурі, спочатку потрапляють в проміжну пам'ять, що виділяється системою, яка називається буфером введення, і тільки звідти (після перетворення) виконується перенесення в змінні нашої програми. Аналогічно працює і вивід - після перетворення символи заносяться в буфер, а вже з буфера виводяться на пристрій.

Буферизація введення/виводу переслідує дві мети:

1) зробити прикладні програми незалежнішими від пристроїв вводу/виводу;

2) підвищити швидкодію прикладних програм.

Операція виводу < <

Переводить інформацію, що виводиться, в послідовність символів і поміщає їх у вихідний потік сout. При використанні цих операцій для усіх числових типів при виводі виконується перетворення в символьний тип.

Оператор cout< < " Output example: " < < 21;

виведе на екран рядок Output example: 21

Наступний приклад віеде число, яке ви ввели з клавіатури.

Пример.

#include < windows.h> // для возможности использования функций

// system, SetConsoleCP, SetConsoleOutputCP

#include < iostream> //компилятор Visual Studio 2005 и выше

using namespace std; //компилятор Visual Studio 2005 и выше

void main()

{

SetConsoleCP(1251); //для предоставления возможности ввода символов кирилицы

SetConsoleOutputCP(1251); // для отображения символов кирилицы при выводе

int i;

cout< < " Введите число: ";

cin> > i;

cout< < " Вы ввели " < < i;

system (" pause");

}

 

Результат: Введите число: 25

Вы ввели 25

Форматоване введення-виведення базових типів

Чималу частину свого часу професійні програмісти витрачають на отримання даних і складання звітів. Справжні звіти повинні добре виглядати. Числа і слова повинні розташовуватися в належних місцях, а числа на додаток мають бути правильно вирівняні.

Це і називається форматуванням (formatting). Дані, які вводяться і виводяться, мають бути добре відформатувати, щоб люди могли легко сприймати інформацію.

Просте форматування полягає у своєчасних переходах на новий рядок і додаванні пропусків, проте тільки цього не вистачає. Щоб правильно форматувати свої звіти, ви повинні знати ще декілька прийомів.

Відносно базових типів за замовчанням встановлені наступні стандартні правила форматування:

- символи і рядки символів виводяться в звичному виді;

- числа виводяться в десятковій системі числення;

- знак у додатних числах не виводиться;

- у цілих чисел виводяться тільки значущі цифри (незначущі старші нулі відкидаються);

- дійсні числа виводяться із збереженням до 6 значущих црфр і вказівкою положення десяткової точки, якщо дробова частина не нульова.

Можна управляти форматом введення-виводу за допомогою спеціальних управляючих символів:

\n перехід на новий рядок

\t Табуляція

\b Повернення на одну позицію

\" Подвійна лапка

\' Одиночна лапка

\? Знак питання

\\ Зворотний слеш

Приклад: Написати програму, яка переводить температуру в градусах за Фаренгейтом в градуси Цельсія. Вхідні дані ввести клавіатури. Результат обчислення вивести на екран.

Рекомендований вид екрану під час виконання програми (дані, які вводить користувач, виділені жирним шрифтом).

Введіть|запроваджуйте| початкові|вихідні| дані: Температура за Фаренгейтом (град) -> 25.5 Температура за Фаренгейтом: ____; в градусах Цельсія _____.

Вхідні дані: температура за Фаренгейтом - дійсне число;

Вихідні дані: температура Цельсія - дійсне число.

Алгоритм:

C = (5/9)*(F - 32)

где С|із| - температура за Цельсієм (Celsius), a

F- температура за Фаренгейтом (Fahrenheit).

#include < iostream.h>

#include < windows.h>

/*

Програма переведення температури в градусах за Фаренгейтом

в градуси Цельсія

*/

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double tFahr; // температура в градусах по Фаренгейту (Fahrenheit)

double tCels; // температура в градусах по Цельсию (Celsius)

cout< < " Введіть початкові дані: \n";

cout< < " \tТемпература за Фаренгейтом (град) -> ";

cin> > F;

tCels=5./9*(tFahr-32);

cout< < " \nТемпература за Фаренгейтом: " < < tFahr< < "; ";

cout< < " в градусах Цельсія: " < < tCels< < endl< < endl;

}

 

Можна управляти форматом введення-виводу за допомогою прапорів форматування потоку, які оголошені в класі ios.

Маніпулятори введення/виводу

Для форматування виведення інформації на екран використовуються спеціальні функції, які називаються МАНІПУЛЯТОРАМИ (manipulators).

Відмінність маніпуляторів від звичайних функцій полягає в тому, що їх імена можна використовувати як правий операнд при виконанні форматованого обміну за допомогою операцій > > і < <. В якості самого лівого операнда виразу з маніпуляторами завжди використовується ім'я потоку (cin або cout). Таким чином, виклики функцій вклються в інструкції виводу.

Наприклад, нехай необхыдно вивести десяткове число 1023 в 16-ковій і 8-ковій системах числення. Для цього використовуватимемо маніпулятори з іменами hex і oct.

 

Оператор

cout< < " (dec) 1023 = (hex) " < < hex< < 1023< < " =(oct)" < < oct< < 1023< < endl;

виведе на екран

(dec) 1023 = (hex) 3ff =(oct)1777

Press any key to continue...

Для використання маніпуляторів, необхоимо підключити заголовний файл < iomanip.h>

Висновок: Маніпулятори - це спеціальні функції, які використовуються для форматування виведення інформації на екран. Для їх використання, необхоимо підключити заголовний файл < iomanip.h>

Завдання ширини поля виводу - маніпулятор setw

Приклад. Переведення температури в градусах за Фаренгейтом в градуси Цельсія.

Рекомендацій вид екрану:

tFahr tCels
  -3.88889
20 символів 15 символів

 

 

#include < windows.h>

#include < iostream>

#include < iomanip>

using namespace std;

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double tFahr=25;

double tCels;

tCels= 5./9*(tFahr-32);

cout< < setw(20)< < " tFahr" < < setw(15)< < " tCels" < < endl;

cout< < setw(20)< < tFahr< < setw(15)< < tCels< < endl;

system(" pause");

}

Якщо ширина виявиться недостатньою для виведення усіх символів, комп'ютер використовує додаткові позиції. При цьому формат буде порушений.

За умовчанням, інформація вирівнюється по правому краю. Зробимо програму більш універсальною: ширину полів задамо за допомогою именованых констант. Зміна значень констант виконується в одному місці програми, а використовувати константи можна багаторазово:

 

Текст програми.

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double tFahr=25;

double tCels;

const int lf=15, lc=13; // именованные константы

 

tCels= 5./9*(tFahr-32);

cout< < setw(lf)< < " tFahr" < < setw(lc)< < " tCels" < < endl;

cout< < setw(lf)< < tFahr< < setw(lc)< < tCels< < endl;

system(" pause");

}

 

Прапори.

Для виведення інформації в інших форматах використовуються прапори. Прапор може знаходитися в двох станах: встановлений (1), скинутий (0). Кожен прапор має своє ім'я.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.