Float ur ( float x, float a, float b, float c );
{
return a * x * x + b * x + c;
}
Результати виконання програми:
Уведено всі аргументи
y = 4.25
Уведені x, a і b
y = 1.25
Введено аргумент x
y = 0
5.2.5 Перевантаження функцій
У мові С++ можна використовувати перевантаження функцій, тобто можливість визначати функції з одним ім'ям, але з різним типом і кількістю формальних параметрів.
Основне достоїнство перевантажених функцій ¾ це можливість визначати кілька функцій з тим самим ім'ям, але з різними типами і числом параметрів.
Приклад 5.6. Зробити програмну реалізацію з використанням перевантаження функцій.
#include <string.h>
#include < iostream >
Using namespace std;
int funp (int x) //1.
{ return x*x; }
int funp (unsigned x) //2.
{ return -x*x; }
char funp (char x) //3.
{ return x+3; }
int funp (int x, char *y) //4.
{ return x*strlen ( y); }
int funp (int x , char y) //5.
{ return x*y; }
float funp (float r) //6.0
{ return r*r; }
float funp (double r) // 7.
{ return r+r; }
Int main ( )
{
cout << funp(5) << endl ;// Буде 25
cout << funp ((unsigned)10) << endl ;// Буде 100
cout << funp ( 'а') << endl ; // Буде d
cout << funp (4,"abc") << endl ; // Буде 12
cout << funp ( 4 , 'а') << endl ; // Буде 388
cout << funp( 1.2)<< endl ; // Буде 1.44
cout << funp( (double) 4.5) << endl ;// Буде 9
Return 0;
}
У заголовку функції завжди вказується тип її імені, а в самій підпрограмі цьому імені повинне бути привласнене значення, що повертається в головну програму замість звертання до функції.
5.3 Контрольні питання
1. Що таке функція і яка її структура?
2. Що означає передача параметрів у функцію за значенням, за посиланням і за покажчиком?
3. Що таке локальні і глобальні змінні?
4. Як використовувати покажчики на функцію?
5. Які способи передачі і повернення результату обчислень функції?
6. Як використовувати одновимірні масиви як параметри функції?
7. Які особливості використання багатовимірних масивів як аргументи функції?
8. Чи можна обробляти у функції масиви змінної довжини?
9. Чи може функція передавати кілька результатів у місце виклику?
10. Що таке перевантаження функцій?
5.4 Варіанти індивідуальних завдань
1. Розробити функцію , що збільшує всі від’ємні елементи масивів A(12), B(10), C(8) на 10.
2. Розробити функцію видалення підрядка в n символів з к- ой позиції .
3. Скласти функцію обчислення найбільшого загального дільника 2-х чисел.
4. Обчислити площу багатокутника за допомогою складеної функції , що визначає площу по координатах його вершин.
5. За допомогою функції визначення середнього значення елементів масиву обробити два масиви різної довжини.
6. Скласти функцію визначення середнього арифметичного і середнього геометричного значень елементів масиву.
7. Розробити функцію пошуку максимального елемента масиву і застосувати її для двох масивів різної довжини.
8. Розробити функцію сортування одновимірних масивів за зростанням і застосувати її для сортування чотирьох масивів довільної довжини.
9. Негативні елементи матриць A(5,4), B(3,2), C(4,4)записати в одновимірний масив.
10. Розробити функцію, що обчислює суму діагональних елементів квадратної матриці , і з її допомогою знайти суми діагональних елементів трьох матриць .
11. Скласти функцію визначення суми і кількості елементів, розташованих між мінімальним і максимальним елементами масиву. Використовуючи цю функцію, обробити три одновимірних масиви різноі довжини.
12. За допомогою розробленої функції підрахунку кількості і суми парних елементів одновимірного масиву обробити три одновимірних масиви різної довжини.
13. Три групи студентів здали іспит. Розробити функцію і з її допомогою вивести список студентів кожної групи за зменшенням оцінок .
14. Розробити функцію знаходження найдовшого слова в рядку. Ввести текст і одержати фразу із самих довгих слів.
15. Розробити функції обчислення площ трикутника за формулою Герона і за формулою з використанням основи і висоти. Роботу функцій перевірити при визначенні площ трьох довільних трикутників.
16. Скласти функцію підрахунку кількості слів у реченні.
17. Розробити функцію виділення в тексті слів-паліндромів ( тобто слів, що читаються однаково ліворуч - праворуч і праворуч - ліворуч) і з її допомогою обробити введений текст.
18. Скласти функцію визначення в кожнім стовпці матриці кількості негативних елементів і використовувати її для обробки трьох матриць .
19. Розробити функцію визначення коренів квадратного рівняння і функцію перевірки цих коренів за теоремою Вієта. Використовуючи ці функції, знайти корені двох квадратних рівнянь .
20. Визначити скільки разів кожна літера з алфавіту зустрічається в тексті з застосуванням функції , що виконує таку операцію для заданої літери.
21. Розробити функцію визначення суми членів арифметичної прогресії і реалізувати її для двох арифметичних прогресій з різною кількістю членів .
22. Розробити функцію знаходження максимального елемента масиву і його номера і реалізувати її для обробки трьох масивів довільної довжини.
23. Скласти функцію перестановки максимального і мінімального елементів масиву і застосувати її для обробки двох двовимірних масивів.
24. Розробити функцію сортування масиву за зменшенням і з її допомогою обробити три одновимірних масиви довільної довжини .
25. Скласти функцію обчислення середнього значення елементів масиву й знаходження кількості чисел, що перевищують цю величину. Застосувати розроблену функцію для обробки двох одновимірних масивів.
РОБОТА З ФАЙЛАМИ
6.1 Ціль роботи
Навчитися виконувати типові операції з файлами: створення, перегляд і корегування.
6.2 Методичні вказівки по організації самостійної роботи
У процесі підготовки до лабораторної роботи рекомендується вивчити порядок опису файлу, передачу даних у файл і їх читання.
Як елементи файлу можна використовувати будь-які дані мови С++ (числа, символи, рядки, масиви і структури).
При використанні великої кількості оброблюваних у програмі даних доцільно їх записувати на диск, тобто створити на диску файл даних. Перед створенням, записом даних у файл або читанням їх з файлу, цей файл треба спочатку відкрити.
У процесі введення-виведення з використанням стандартних пристроїв (клавіатури й екрана) у програму варто включити заголовний файл iostream.h, у якому міститься опис відповідного класу iostream, тобто на початку тексту програми поміщають директиву :
#include <iostream>
Файлове введення-виведення і необхідні функції-члени введення-виведення описані в заголовному файлі fstream, що містить опис основних класів і методів.
Існують також додаткові файли бібліотеки введення-виведення, що містять більш спеціалізовані функції – члени введення-виведення.
Для відкриття файлу на диску використовується функція-член класу fstream, що має наступний прототип (заголовок):
void open (const char *filename, int mode, int m = fіlebuf :: openprompt);
де filename ¾ ім'я файлу, що відкривається, у якому при необхідності можна вказати шлях;
mode¾ параметр, що задає режим введення , у файлі fstreamвизначені значення цього режиму і їх зміст;
m¾ параметр, що задає захист файлу, що за замовчуванням приймає значення, заданий константою filebuf :: openprompt ;
Параметр mode може приймати одне із значень, призначуване в залежності від мети відкриття файлу, або комбінацію цих значень, отриману з використанням операції " або " , тобто "|" . Операції мають вигляд:
ios :: app¾ файл (потік) відкривається для додавання в кінець("а");
ios :: in ¾ файл відкривається для читання (" r ") ;
ios :: out ¾ файл відкривається для запису ("w ");
ios :: ate ¾ відкрити файл і установити покажчик потоку на кінець файлу;
ios :: binary ¾ відкрити файл у двійковому режимі ;
ios :: trunc ¾ відкрити файл і видалити зміст файлу ;
ios :: nocreate ¾ відкрити існуючий файл, якщо він не існує ¾
операцію завершити повідомленням;
ios :: noreplace ¾ якщо файл існує ¾ видати повідомлення про помилку, за винятком випадків пошуку кінця або файлу додавання у файл.
Розглянемо деякі приклади записів функцій відкриття файлу :
#include < fstream >
Using namespace std;
Int main ( )
{
fstream fp;// опис файлової змінної;
// відкривається файл myfile.dat для запису, тобто створюється новий файл;
fp. open ( " a : \ cpp \ myfile.dat " , ios :: out)
// відкривається раніше створений файл file2.dat для читання даних;
fp.open (" c : \ vp \ file2.dat ", ios :: in );
// відкривається файл для читання або запису з використанням
// двійкового режиму;
fp .open (" myfile " , ios :: out | ios :: in | ios :: binary);
return 0;
}
Файлова змінна fp повинна бути попередньо описана як об'єкт класу fstream або ofstream.Якщо під час відкриття файлу відбувається помилка, то завжди fp = 0, тобто файлова змінна дорівнює нулю. Це використовується для визначення результату відкриття файлу в такий спосіб :
#include < fstream >
Using namespace std;
Main ( )
{
Ofstream fp;
fp.open ( " Filename " , ios :: app); // Додати у файл
if (!fp )
{
cout << "Помилка відкриття файлу " << endl;
Exit (0);
} // Вихід із програми
Else
{
// Текст програми роботи з файлом
}
}
Для організації циклу з метою перегляду усього файлу, можна використовувати оператор циклу у вигляді:
while ( ! fp.eof ( ))
{……………
…………...}
Приклад 6.1Записати у файл п'ять прізвищ.
//P5_1.CPP¾ запис у файл п'яти прізвищ
#include < fstream >
Using namespace std;
Int main ( )
{
Ofstream fp;
fp.open ( " a : \ Myfile " , ios :: out); // Створення нового файлу
fp<< " Авдєєв А.И. " << endl;
fp << " Бобрів А.П. " << endl;
fp << " Кузьмін И.В. " << endl;
fp << " Попов Р.Л. " << endl;
fp << " Яковлев Ю.Т. " << endl;
fp. close ( );// Закриття файлу
}
Відкривати файли можна й інакше, наприклад, використовуючи класи ifstream ¾ для читання з файлу (тобто введення) і ofstream ¾ для запису у файл :
ifstream in ( " Namefile "); // відкриття файлу для читання з файлу
ofstream out ( " Namefile2 "); // відкриття файлу для запису у файл ,
де in і out ¾ файлові змінні відповідного класу.
Приклад 6.2Копіювання одного текстового файлу в інший файл.
// P5_2.CPP¾копіювання текстового файлу file1у файл file2
#include <fstream>
#include < iostream >
Using namespace std;
Void main ( )
{
ifstream in ( ”file1") ;
ofstream out ( "file2") ;
char st [80];
while ( ! in.eof ( ) )
{
in .getline ( st, 80 )// in¾ об'єкт ifstream
out << st << endl; //запис st у файл file2
cout << st << endl;// виведення st на екран
}
In.close();
Out.close();
}
Конструктори ifstream і ofstream можуть бути записані у вигляді:ifstream in (const char *name, int mode = ios :: in,
int prot = filebuf :: penprot);
тобто ці конструктори можуть включати ті ж аргументи, що і open.
Приклад 6.3 Записати у файл задану матрицю matr ( 2, 4) построково.
//P5_3.CPP¾запис у файл матриці построково
#include <iostream>
#include < fstream >
Using namespace std;
Void main ( )
{
int mas [4], matr [2][4];
Int i, j;
ofstream out (" filemat " );
for ( i = 0; i < 2; i++)
for ( j = 0; j < 4; j++ )
{
cin >> mas [j];
out << mas[j]<<” “;
}
Out . close( );
ifstream in ("filemat ”);
for ( i = 0; i < 2 ; i++)
{
for ( j = 0 ; j < 4; j++)
in>> matr [ i ] [ j ] ; //Запис масиву в рядок матриці
}
In . close ( );
for ( i = 0; i < 2 ; i++ ) //Виведення матриці на екран
{
cout << endl ;
for ( j = 0; j < 4 ; j++)
cout << matr [i] [j];
}
}
6.3 Контрольні питання
1. Чим файл відрізняється від масиву ?
2. За допомогою якої функції можна розпізнавати кінець файлу ?
3. Як описується файлова змінна ?
4. Який порядок створення файлу ?
5. Які засоби відкриття файлів ?
6. Які параметри можуть використовуватися як компоненти файлу ?
6.4 Індивідуальні завдання
1. Створити файл, що містить список студентів групи з наступними характеристиками : адреса, місце роботи батьків , вік і забезпечити виведення інформації про студентів за заданим прізвищем .
2. Створити файл, що містить список студентів з їх середнім балом на сесії . Забезпечити читання файлу і видачу прізвищ встигаючих студентів.
3. Створити файл, що містить коротку бібліографічну інформацію о прочитаних вами книгах. Забезпечити виведення інформації про всі книги, видані у заданому діапазоні років.
4. Створити файл, що містить наступну інформацію: прізвище, рік народження, стать. Забезпечити виведення прізвищ за заданим роком народження.
5. Створити файл, що містить номери потягів і їхні маршрути . Забезпечити видачу інформації про маршрут за введеним номером потяга.
6. Створити файл, що складається з масиву чисел X(20). Забезпечити читання цього файлу і заповнення матриці Y(4,5).
7. Створити файл , що містить наступну інформацію: прізвище, номер домашнього телефону. Забезпечити видачу номера телефону за введенням прізвища.
8. Створити файл, що містить коротку бібліографічну інформацію про прочитані вами книги. Забезпечити виведення інформації про книгу за заданим прізвищем автора.
9. Створити файл, що містить англійські слова і їх переклад. Забезпечити переклад введеного англійського слова , що входить у словник.
10. Створити файл, що містить список власників автомобілів із указівкою кольору, номеру й адреси власника. Вивести за запитом про колір прізвища власників автомобілів і дані про машини.
11. Створити файл, що містить список студентів з їх оцінками за результатами сесії. Забезпечити читання файлу і видачу прізвищ студентів, що мають середній бал не нижче заданого.
12. Створити файл, що містить слова. Забезпечити виведення слів, що починаються з великої літери.
13.Створити файл, що містить список товарів з наступними характеристиками: назва, ціна, срок придатності. Забезпечити виведення інформації про товари, найбільша ціна яких не перевищує заданої за запитом.
14. Елементами файлу є відомості про успішність. Скільки в групі відмінників і двієчників?
15. Створити файл, що містить розклад роботи лікаря. Вивести дні тижня, у які лікар працює до обіду.
16. Створити файл, що містить коротку інформацію про пацієнтів клініки. Вивести інформацію про пацієнтів за зменщенням року народження.
17. Створити файл , що містить список мешканців будинку з указівкою прізвища, місця роботи і року народження. Вивести за запитом про прізвище мешканця.
18. Створити файл, що містить розклад занять студентів групи. Забезпечити виедення розкладу по введеному дню тижня.
19. У тексті програми мовою C++ підрахувати кількість операторів "cin" і " if" .
20. Створити файл на диску, що містить деякий текст. Вивести слова тексту в зворотньому порядку.
21. Створити файл на диску, що містить деякий текст. Вивести слова тексту , що починаються з літери "а".
22. У тексті програми мовою С++(ім'я файлу на диску ввести за запитом) підрахувати кількість операторів, пам'ятаючи, що кожен оператор закінчується ";".
23. Створити файл, що містить список прізвищ. Забезпечити виведення прізвищ, що починаються з літери, що вводиться за запитом.
24. У файл із прізвищами студентів вставити нове прізвище після заданого прізвища.
25. У файлі вказані прізвища переставити місцями і вивести результат на екран.
ПЕРЕЛІК ПОСІЛАНЬ
1. Павловская Т.А. С/С++. Программирование на языке высокого уровня — СПБ Питер.: 2004., — 461 с.
2. Франка П. C++: учебный курс. - СПб.: Питер, 2003. — 521 с.
3. Сабуров С.В. Языки программирования C и C++. М.: Букпресс, 2006. 647 с.
4. Страуструп Б. Язык программирования С++. Часть 1. — Киев: "ДиаСофт", 1993. — 264 с.
5. Страуструп Б. Язык программирования С++. Часть 2. — Киев: "ДиаСофт", 1993. — 296 с.
6. Подбельский В. В. Язык Си++ : учебное пособие. – 5 - е изд. - М.: Финансы и статистика, 2000. - 560 с.
7. Глушаков С.В. и др. Язык программирования С++. —Харьков: Фолио, 2002. — 500 с.
8. Х.М.Дейтел, П.Дж. Дейтел Как программировать на С++.- М.:ЗАО «Издательство БИНОМ», 2000 г. — 1024 с.
Навчальне видання
Методичні вказівки до виконання лабораторних та практичних робіт з курсів “Інформатика” для студентів напряму підготовки 6.170103 - «Управління інформаційною безпекою».
Укладачі: Сінельнікова Т.Ф
Відповідальний за випуск Е. П. ПутятІн
Редактор
План , поз.16
Підп. до друку Формат 60х84 1/16
Умов. друк. арк. 4,8. Облік вид. арк. 4,2. Вид.№32.
Тираж 120 прим.
Зам.№___ .Ціна договірна.
ХHУРЭ. 61726 Харків, просп. Леніна, 14.
Надруковано в учбово-виробничому видавничо-поліграфічному центрі ХHУРЕ
61726 Харків, просп. Леніна, 14.