Device . Put (char_var); , 1 страница
Мета роботи
Освоїти прийоми роботи з текстовими редакторами і основними компонентами інтегрованого середовища програмування С++; отримати практичні навички введення - виведення даних, складання і налагодження програм із простими змінними; засвоїти правила опису типів даних; отримати навички у використанні операторів керування й організації циклів.
1.2 Вказівки до організації самостійної роботи студентів
При підготовці до роботи повторити типи констант і змінних, способи їхнього опису, використання операторів керування й організації циклів, а також використання інтегрованого середовища програмування на С++Звернути увагу, що в мові С++ немає убудованих у мову засобів введення і виведення. Усі дії, зв'язані з цими операціями, виконуються за допомогою функцій бібліотеки. Функції введення і виведення бібліотеки мови дозволяють читати дані з файлів і з пристроїв і писати дані у файли і на пристрої.
Бібліотека мови С++ підтримує такі три рівні введення – виведення даних:
— введення - виведення потоку;
— введення - виведення нижнього рівня;
— введення - виведення для консолі і порту.
При введенні - виведенні потоку всі дані розглядаються як потік окремих байтів. Для користувача потік — це або файл на диску, або фізичний пристрій, наприклад, дисплей, чи клавіатура або друкувальний пристрій, з якого чи на який направляється потік даних. Функції введення - виведення для потоку дозволяють обробляти дані різних розмірів і форматів від одиночного символу до великих структур даних. Програміст може використовувати функції чи бібліотеки, розробляти власні і включати їх у бібліотеку. Для доступу до бібліотеки цих класів треба включити в програму відповідні файли заголовків, наприклад, #include <iostream.h>.
За замовчуванням стандартні введення, виведення і виведення повідомлень про помилки відносяться до консолі користувача (клавіатура і екран)
.
1.2.1 Використання операторів введення
Найчастіше в С++ використовується потокове введення даних, операції якого включені до складу класів istream абоiostream . Воно може здійснюватися з визначеним у цих класах вхідним потоком cin або вихідним потоком, визначеним користувачем. Для читання символів з цього потоку вказується операція витягу з потоку, що позначається за допомогою символів “ >> “ . Це перевантажена операція, визначена для всіх простих типів і покажчика на char.
Формат запису оператора cinмає вигляд:
cin [ >> values ]; .
Наприклад, для введення значень змінних x і y можна записати:
cin >> x >> y; .
Кожна операція “ >> “ передбачає введення одного значення. При введенні даних необхідно виконувати наступні вимоги:
¾ для поділу двох чисел, що послідовно вводяться, використовується проміжок (дані типу сhаr розділяти проміжком не обов'язково)або ENTER;
¾ якщо послідовно вводиться символ і число (або навпаки), проміжок треба записувати тільки в тому випадку, якщо символ, що вводиться, (типу сhаr) є цифрою;
¾ потік введення ігнорує проміжки;
¾ при введенні великої кількості даних одним оператором їх можна розташовувати в декількох рядках (використовуючи ENTER);
¾ оператор введення з потоку припиняє свою роботу тоді, коли усі включені в нього змінні одержують значення. Наприклад, для раніше записаного оператора можна ввести значення таким чином:
2.345 789
або
2.345
Оскільки в цьому прикладі проміжок є роздільником між значеннями, що вводяться, то при введенні рядків, котрі містять проміжки у своєму складі, цей оператор не використовується. У такому випадку треба використовувати методи розглянутих класів такі як: 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>
Using namespace std;
Int 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 <iomanip>
#include <iostream>
Using namespace std;
Int 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;
}
Результати виконання програми:
456 789 123
456 789 123
У цьому прикладі з'явився новий заголовний файл iomanip, що дозволяє використовувати функції маніпуляторів, таких як setw. При використанні функції setw, С++ вирівнює число вправо в границях заданої ширини поля виведення. Якщо ширина недостатня, С++ ігнорує вказане значення.
Функція setprecision(2) повідомляє С++ про те, що число з крапкою, що плаває, треба виводити з двома знаками після крапки з округленням дробової частини, наприклад, при виконанні оператора
сout << setw(7) << setprecision (2) << 123.456789;
буде отриманий наступний результат: 123.46.
Приклад 1.3Написати програму для обчислення податку на продаж.
// P1_3.CPP¾ програма податок :введення суми продажів
// і роздрук податку на продажі
#include <iostream>
#include <iomanip>
Using namespace std;
Int 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 +=2; }
Оператор вибору використовують для вибору одного з багатьох варіантів вирішування і має наступну форму запису;
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 ("gооd bay \n");
}
При виконанні цього оператора будуть реалізовані функції: func2, func3іdefault: printf ("good bay \n"); .
Даний приклад можна записати так само в наступному вигляді:
int a=2;
Switch (a)
{
case 1: func1( ); break;
case 2: func2( ); break;
case 0:
case 4: func3( ); break;
default: printf ("good 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>
Void 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має наступну форму запису:
for ( [ вир1 ]; [ вир2] ;[ вир3 ] ) оператор;,
де вир1¾ вираз ініціалізації, звичайно використовується для встановлення початкового значення; це вираз присвоювання (необов'язковий параметр);
вир2¾ вираз умови , що визначає при якій умові цикл буде повторюватися (необов'язковий параметр);
вир3 ¾ вираз ітерації, що визначає крок зміни змінних, керуючих циклом після кожного виконання (необов'язковий параметр).
Цей оператор реалізується в такий спосіб:
¾ спочатку виконується вираз ініціалізації ( ця нотація може бути виконана до оператора for );
¾ обчислюється умовний вираз( якщо результат умовного виразу “істина” (не дорівнює нулю ), то виконується оператор циклу;
¾ обчислюється вираз ітерації;
¾ знову перевіряється умова;
¾ як тільки умовний вираз стає рівним нулю “неістина”, керування передається оператору, що знаходиться за оператором циклу for .
Оскільки перевірка умови виконується перед циклом, то цикл може жодного разу не виконуватися, якщо умова відразу буде “неістина”.
Проілюструємо використання оператора циклу forдля раніше розглянутого приклада 1.3:
// P1_7.CPP ( обчислення функції y = a * x * x - sin(x)
// с використанням оператора циклу for
#include <stdio .h>
#include <math.h>
Void main ( )
{
Float a, x, y;
a = 10.3 ;
for ( x = -1 ; x <= 1; x = x + 0.2 )
{
y = a * x * x - sin(x) ;
printf ( "x = % 4 f, y = % 6 f \n", x, y ) ;
}
}
В операторі forможе використовуватися кілька змінних, керуючих циклом, а будь-які вирази можуть бути відсутними, наприклад :
Int i;
for ( ; i < 4; i++)
або
Int k, n, y;
for ( k = 0, n = 20; k <= n; k++, n-- )
y = k * n;
У цьому операторі використовується два вирази ініціалізації і два вирази ітерації. При виконанні такого оператору спочатку присвоюються значення змінним k = 0 і n = 20. Потім відбувається порівняння k <= n. Якщо ця умова має значення “істина”,то буде виконуватися тіло циклу, а потім вираз k++ і n--,якщо ж умова не виконується, тоді цикл припиняється.
Оператор циклу doзвичайно використовується в тих випадках, коли тіло циклу повинне виконуватися хоча б один раз, і має наступну структуру запису:
Do
{
Оператор
}while (L); ,
де L¾ умовний вираз.
Виконується оператор do наступним чином: спочатку здійснюється вхід у тіло циклу і виконується оператор (він може бути простий чи складний), після того перевіряється умова L і, якщо вона “істина” ( не дорівнює нулю), то цикл повторюється, а якщо “неістина ” ¾ здійснюється вихід з циклу. З використанням оператора циклу doприклад 1.3 буде мати вигляд:
// P1_8.CPP ( обчислення функції y = a * x * x - sin(x)
// с використанням оператора циклу do
#include <stdio .h>
#include <math.h>
Void main ( )
{
Float a, x, y;
a = 10.3 ;
x = -1 ;
Do
{
y = a * x * x - sin ( x ) ;
printf ( " x = % 4 f, y = % 6 f \n ", x, y ) ;
x = x + 0.2;
}
while ( x <= 1 );
}
1.5 Контрольні питання
1. Які правила запису програми мовою С++ ?
2. Які дані обробляються за допомогою мови С++?
3. Як задаються типи даних у С++?
4. Що таке константа в С++, наведіть приклади констант?
5. Що називається змінною в С++?
6. Як забезпечується організація введення- виведення ?
7. Як організується форматований висновок результатів ?
8. Для чого потрібні оператори умовного і безумовного переходу і як вони працюють ?
9. Як працює операторswitch?
10. Які оператори циклу ви знаєте, як працює оператор циклу for ?
11. Які особливості роботи оператора циклу do і while ?
1.6 Варіанти індивідуальних завдань
Для приведених нижче варіантів необхідно скласти програму обчислення значення функцій при різних значеннях аргументів, заданих інтервалом зміни і величиною кроку.
1.
2.
3.
а=5; b=3 ;
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
x і a змінюються одночасно.
16.
а - має початкове значення 0.1 і змінюється одночасно с x с кроком .
17.
18.
При якім значенні х функція буде найменшою.
19. Підрахувати скільки разів функція приймає негативне значення, якщо .