Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_с++.doc
Скачиваний:
5
Добавлен:
14.07.2019
Размер:
712.19 Кб
Скачать

1 Організація введення і виведення даних та розв’язання задач з простою змінною

1.1 Мета роботи

Освоїти прийоми роботи з текстовими редакторами і основними компонентами інтегрованого середовища програмування С++; отримати практичні навички введення - виведення даних, складання і налагодження програм із простими змінними; засвоїти правила опису типів даних; отримати навички у використанні операторів керування й організації циклів.

1.2 Вказівки до організації самостійної роботи студентів

При підготовці до роботи повторити типи констант і змінних, способи їхнього опису, використання операторів керування й організації циклів, а також використання інтегрованого середовища програмування на С++ [ 1, с. 70-72, с. 74-78; 2, c.7-22; конспект лекцій].

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

Бібліотека мови С++ підтримує такі три рівні введення – виведення даних:

— введення - виведення потоку;

— введення - виведення нижнього рівня;

— введення - виведення для консолі і порту.

При введенні - виведенні потоку всі дані розглядаються як потік окремих байтів. Для користувача потік — це або файл на диску, або фізичний пристрій, наприклад, дисплей, чи клавіатура або друкувальний пристрій, з якого чи на який направляється потік даних. Функції введення - виведення для потоку дозволяють обробляти дані різних розмірів і форматів від одиночного символу до великих структур даних. Програміст може використовувати функції чи бібліотеки, розробляти власні і включати їх у бібліотеку. Для доступу до бібліотеки цих класів треба включити в програму відповідні файли заголовків, наприклад, #include <iostream.h>.

За замовчуванням стандартні введення, виведення і виведення повідомлень про помилки відносяться до консолі користувача (клавіатура і екран).

1.2.1 Використання операторів введення

Найчастіше в С++ використовується потокове введення даних, операції якого включені до складу класів istream або iostream . Воно може здійснюватися з визначеним у цих класах вхідним потоком cin або вихідним потоком, визначеним користувачем. Для читання символів з цього потоку вказується операція витягу з потоку, що позначається за допомогою символів “ >> “ . Це перевантажена операція, визначена для всіх простих типів і покажчика на char.

Формат запису оператора cin має вигляд:

cin [ >> values ]; .

Наприклад, для введення значень змінних Х і У можна записати:

cin >> x >> y; .

Кожна операція “ >> “ передбачає введення одного значення. При введенні даних необхідно виконувати наступні вимоги:

 для поділу двох чисел, що послідовно вводяться, використовується проміжок (дані типу сhаr розділяти проміжком не обов'язково) або ENTER;

 якщо послідовно вводиться символ і число (або навпаки), проміжок треба записувати тільки в тому випадку, якщо символ, що вводиться, (типу сhаr) є цифрою;

 потік введення ігнорує проміжки;

 при введенні великої кількості даних одним оператором їх можна розташовувати в декількох рядках (використовуючи ENTER);

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

2.345 789

або

2.345

789

Оскільки в цьому прикладі проміжок є роздільником між значеннями, що вводяться, то при введенні рядків, котрі містять проміжки у своєму складі, цей оператор не використовується. У такому випадку треба використовувати методи розглянутих класів такі як: getline( ), read( ), get( ) і ін. (формати цих функцій розглянемо при обробці символьних даних). У С++ операції введення - виведення можуть виконуватися з використанням операторів, а не функцій введення - виведення.

1.2.2 Організація виведення даних у мові С++

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

cout << x;

означає виведення значення змінної x ( або запис в потік). Цей оператор вибирає необхідну функцію перетворення даних у потік байтів.

Формат запису cout відрізняється від форми запису команд С++

cout << data << [ data ]; ,

де data  це змінні, константи, вирази або комбінація типів.

Запис оператора cout може може мати, наприклад, такий вигляд:

сout << "y=" << x + a - sin(x) << "\n"; .

Оскільки у мові С++ операція “/n” рівнозначна операції endl, тому розглянутий оператор виводу можна записати як:

сout << "y=" << x + a - sin(x) << endl;

При використанні бульових операцій, вирази треба брати в дужки.

сout << "p =" << ( a && b || c ) << "\n"; .

Мова С++ не має символьних значень. Символ переводу на наступний рядок "\n" записується як строкова константа, інакше він розглядається не як керуючий символ, а як число 10 ( код символу). Таких помилок можна уникнути шляхом присвоєння значення керуючих символів змінним, наприклад:

#define <<sp " "

#define <<ht "\t"

#define <<hl "\n"

Тепер оператор виведення можна записати так:

сout << " y = " << x + a - sin(x) << hl; .

Слід пам'ятати, що cout не виконує автоматичний перхід на наступний рядок. Щоб надрукувати строкову константу, треба помістити її за оператором cout , тобто у такому вигляді:

cout << " Я вивчаю програмування \n";

або

cout << " Я вивчаю програмування endl; .

Приклад 1.1 Наступний приклад містить організацію виведення даних, пояснюючі повідомлення , а також символи переводу рядка:

//P1_1.CPP ( роздрук значень змінних

// с відповідними позначками

#include <iostream.h>

main ( )

{

char first = 'W';

char middle = 'P';

char last = 'S';

int wozrast = 20;

int doplata = 2;

float zarplata = 309.75;

float prozent = 8.5;

// Виведення результатів

cout << " Перевірка вихідних даних\n";

cout << first << middle << last << "\n\n";

cout << " Вік доплата зарплата відсоток: \n";

cout << wozrast << ' ' << doplata << ' ' << zarplata << ' ' << prozent;

return 0;

}

В останніх двох операторах використаємо символи табуляції. Наприклад, \t поміщає кожне наступне ім'я або число в наступну позицію табуляції (кожні вісім символів), у цьому випадку маємо:

cout << " Вік \t доплата\t зарплата\t відсоток\t \n";

cout << wozrast<<"\t" << doplata<<"\t"<< zarplata<<"\t"<< prozent<<"\n " ;

Для додаткового керування вихідними даними використовуються маніпулятори: setw(n) і setprecision(k). Маніпулятор setw(n) служить для вказівки довжини поля, що приділяється для виведення наступних даних (тут n - кількість позицій у рядку). Setprecision(k) призначений для вказівки кількості позицій у дробовій частині речовинних чисел.

Маніпулятори змінюють вид деяких змінних в об'єкті cout, що у потоці випливають за ними. Ці маніпулятори називають прапорами стану. Коли об'єкт посилає дані на екран, він перевіряє прапори, щоб довідатися, як виконати завдання, наприклад, запис:

cout << 456 << 789 << 123;

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

Приклад 1.2 Написати програму з використанням маніпулятора setw .

// P1_2.CPP ( демонстрація різних маніпуляторів

// ширини виведення цілого числа

#include <iostream.h>

#include <iomanip.h>

main ( )

{

cout << 456 << 789 << 123 << endl;

cout << setw(5) << 456 << setw(5) << 789

<< setw(5) << 123 << endl;

cout << setw(7) << 456 << setw(7) << 789

<< setw(7) << 123 << endl;

return 0;

}

Результати виконання програми:

456789123

456 789 123

456 789 123

У цьому прикладі з'явився новий заголовний файл iomanip.h, що дозволяє використовувати функції маніпуляторів, таких як setw. При використанні функції setw, С++ вирівнює число вправо в границях заданої ширини поля виведення. Якщо ширина недостатня, С++ ігнорує вказане значення.

Функція setprecision(2) повідомляє С++ про те, що число з крапкою, що плаває, треба виводити з двома знаками після крапки з округленням дробової частини, наприклад, при виконанні оператора

сout << setw(7) << setprecision (2) << 123.456789;

буде отриманий наступний результат: 123.46.

Операція cin використовує ті ж маніпулятори , що й операція cout.

Приклад 1.3 Написати програму для обчислення податку на продажі.

// P1_3.CPP програма податок :введення суми продажів

// і роздрук податку на продажі

#include <iostream.h>

#include <iomanip.h>

main ( )

{

float prod_sum; // Сюди буде записана сума продажів

float nalog ;

// Виведення підказки для користувача

cout << " Введіть суму продажів для розрахунку податку ";

cin >> prod_sum;

nalog = prod_sum* 0.7; // Обчислення податку на продажі

cout << " " << setprecision(2) << prod_sum;

cout << " " << setprecision(2) << nalog"\n";

return 0;

}

Через те, що в першому операторі cout не міститься знак переводу рядка, відповідь користувача на підказку з'явиться відразу праворуч від знака питання.

Мова С++ широко використовує також форматоване введення і виведення даних [ ]. Для форматованого введення використовують функцію scanf, а виведення  фукцію printf. Щоб зв'язати програму користувача зі стандартною бібліотекою, де знаходяться ці функції, необхідно спочатку програми передбачити препроцесорне ствердження

#include <stdio.h> .=============

1.3 Використання основних операторів С++

У мові С++ прості оператори закінчуються символом ";", складені полягають у фігурні дужки. Розглянемо правила запису і використання основних операторів С++.

Оператор - вираз  закінчуються крапкою з комою, наприклад:

++i; // інкремент

swap (&a, &y); // виклик функції

Оператори присвоювання мають одну з форм запису:

p =a ;

p =a = b = c;

де p  ім'я змінної чи елемент масиву; а, b, с  арифметичні вирази.

операції.

Оператор умовного переходу має наступний формат запису:

if (L)

оператор 1 ;

else

оператор 2 ; ,

де L  вираз. Якщо значення цього виразу “істина” (не нуль ), то виконується оператор1, якщо ж воно “неправда”, те виконується оператор2; у випадку, коли вираз помилковий й отсутня галузь else,  виконується наступний оператор.

Наприклад, оператор умовного переходу може мати вигляд:

if ( i < j )

i++;

else

{ j = i - 3; i ++; }

Оператор вибору використовують для вибору одного з багатьох варіантів вирішування і має наступну форму запису;

switch (L)

{

case к.в.1: оператор 1; [break;]

case к.в.2: оператор 2; [break;]

. . . . . . . . . . . . . . . . . . . . . . . . .

case к.в.n: оператор n; [break;]

[default: оператор n+1;]

} ,

де switch, case, default  службові слова;

break  оператор (необов'язковий) переривання виконання операторів switch;

L  будь-який вираз одного з цілих типів;

к.в.1,…,к.в.n  константні вирази, що не можуть повторюватися і не можуть містити змінних чи викликів функцій. Звичайно це ціла чи символьна константа;

оператор 1;. . .  будь-які оператори С++.

Виконується цей оператор у такий спосіб: обчислюється значення виразу L, потім це значення порівнюється (послідовно зверху вниз) зі значеннями константних виразів к.в.1,.. і при збігу значень L і одного з к.в. будуть виконаються всі оператори починаючи з відповідної галузі, якщо наприкінці галузі немає оператора break. При наявності оператора break, виконується тільки оператор, що знаходиться у відповідній галузі і керування передається оператору, що знаходиться за межами оператора switch.

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

У випадку, коли в цьому операторі немає галузі default ( вона не обов'язкова), і значення L не збігається з жодним зі значень к.в. , здійснюється вихід з оператора switch.

Можна привести наступний фрагмент програми з використанням оператора switch:

int a=2;

switch ( a )

{

case 1: func1( );

case 2: func2( );

case 0:

case 4: func3( );

default: printf ("gud bay \n");

}

При виконанні цього оператора будуть реалізовані функції: func2, func3 і default: printf ("gud bay \n"); .

Даний приклад можна записати так само в наступному вигляді:

int a=2;

switch (a)

{

case 1: func1( ); break;

case 2: func2( ); break;

case 0:

case 4: func3( ); break;

default: printf ("gud bay \n");

} .

У такій реалізації буде виконана тільки галузь case 2: func2( ); break; і вихід з оператора switch.

Мова С++ має такі оператори циклу: while, do, for.

Оператор циклу while L із предумовою  будь-який простий, складений чи порожній оператор, тут L-будь-який припустимий вираз.

Виконується цей оператор у такий спосіб: якщо результат виразу L не дорівнює нулю (“істина”), то виконується цикл, а якщо дорівнює нулю (“неправда “), те цикл не виконується і керування передається наступному за while оператору.

Наведемо приклад використання оператора while .

Приклад 1.3: Обчислити значення функції:

Y= A*X*X-SIN(X) , якщо A=10.3; X[-1 ; +1]; hx=0.2.

// P1_6.CPP ( обчислення функції y = a* x* x – sin (x)

// с використанням оператора циклу while

#include <stdio .h>

#include <math.h>

main ( )

{

float a, x, y;

a = 10 . 3 ;

x = - 1 ;

while ( x <= 1)

{

y = a * x * x - sin(x)

printf ("x = % 4 f, y = % 6 f \n", x, y) ;

x = x + 0.2;

}

}

Оператор циклу for має наступну форму запису: