- •Методичні вказівки до лабораторних робіт по курсам
- •8.092402 “Інформаційні мережі зв'язку” Затверджено
- •Протокол № __ від ____
- •Упорядники: в. П. Степанов в. П. Пчелінов
- •Загальні положення
- •1 Організація введення і виведення даних та розв’язання задач з простою змінною
- •1.1 Мета роботи
- •1.2 Вказівки до організації самостійної роботи студентів
- •1.2.1 Використання операторів введення
- •For ( [ вир1; ] [ вир2] [; вир3 ] ) оператор;,
- •1.5 Контрольні питання
- •1.6 Варіанти індивідуальних завдань
- •2 Розв’язання задач c використанням одновимірних і двовимірних масивів
- •2.1 Ціль роботи Прищепити студентам навички розв’язання задач з використанням одновимірних і двовимірних масивів, складних циклів і використання покажчиків.
- •2.2 Методичні рекомендації з організації самостійної роботи студентів
- •2.3 Використання покажчиків
- •Наиведемо програму з використанням покажчиків:
- •Int main ( )
- •Void main ( void )
- •2.4 Використання масивів і покажчиків
- •Приклад 2.4 Обчислити середнє значення позитивних елементів одновимірного масиву.
- •Int *pmas;
- •2.5 Масиви покажчиків
- •2.6 Контрольні питання
- •2.7. Варіанти індивідуальних завдань
- •3 Вирішування задач з використанням даних символьного типу
- •3.1 Ціль роботи Вивчення способів опису символьних типів даних і використання структур для обробки даних.
- •3.2 Методичні рекомендації з організації самостійної
- •Роботи студентів
- •3.2.1 Організація символьного введення - виведення
- •Device . Get (char_var);
- •3.2.2 Рядки як символьні масиви
- •3.2.3 Введення-виведення символьних масивів
- •Void main (void)
- •3.2.4 Основні функції обробки символьних типів
- •Void main (void)
- •Void del (char *st, int k, int n);
- •Void del(char *st, int, int);
- •Void main()
- •Void del(char *st,int k,int n)
- •[ Проміжки ] [знак числа] [ цифри].
- •Void main( )
- •Void main()
- •Void main()
- •Void main(void)
- •3.2 Контрольні питання і завдання
- •3.4 Варіанти індивідуальних завдань
- •4 Вирішувння задач з використанням даних типу структура
- •4.1 Ціль роботи Освоєння заходів розробки і налагодження програм з використанням
- •4.2 Методичні рекомендації з організації самостійної
- •Void main(void)
- •Void qsort (void *base , n , width,
- •Int (*fcmp) ( const void *elem1, const void *elem2) .
- •4.3 Контрольні питання
- •4.4. Індивідуальні завдання
- •5 Використання функцій при розробці програм
- •5.1 Ціль роботи
- •5.2 Методичні вказівки з організації самостійної роботи студентів
- •Void fun ( int p)
- •Void main ( )
- •Int main ( )
- •5.2.1 Використання покажчиків на функцію
- •Void main ( )
- •5.2.2 Використання масивів - параметрів функцій
- •Vоid sort (int mas [ 30 ]); .
- •Void sort ( int mas [ ], int n ) ; .
- •Void fun1 (char st [ 5]);
- •Void fun1 ( char st [5] )
- •Void fun2 ( int mat [ ] [10], int rows, int cols );
- •5.2.4 Звертання до функції і передача результату
- •Int main ( )
- •5.2.5 Перевантаження функцій
- •5.3 Контрольні питання
- •5.4 Варіанти індивідуальних завдань
- •6 Робота з файлами
- •6.1 Ціль роботи
- •6.2 Методичні вказівки по організації самостійної роботи
- •Void main ( )
- •Ifstream in ( ”file1") ;
- •Література і джерела
- •Загальні положення ...………………………………………………………….........3
- •Навчальне видання
- •8.092402 “Інформаційні мережі зв'язку”.
- •61726 Харків, просп. Леніна, 14.
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 має наступну форму запису:
