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. Підрахувати скільки разів функція приймає негативне значення, якщо .