- •Міністерство освіти і науки україни
- •Розділ 1. Арифметичні основи обчислювальних машин
- •1.1. Позиційні системи числення. Переведення числа з однієї системи числення в іншу
- •1.2. Форма представлення чисел. Кодування чисел
- •1.3. Арифметичні операції над двійковими числами. Машинні одиниці інформації
- •Контрольні питання
- •Завдання
- •Розділ 2. Основи алгоритмізації обчислювальних процесів
- •2.1. Поняття і властивості алгоритму
- •2.2. Засоби представлення алгоритмів
- •2.3. Типи алгоритмічних процесів. Приклади
- •Контрольні питання
- •Завдання
- •3.1. Загальна характеристика програми
- •3.3. Кроки для створення та виконання програми
- •3.4. Змінні та константи
- •3.5. Директиви препроцесора
- •Контрольні питання
- •Розділ 4. Введення-виведення даних
- •4.1. Об’єкт виведення даних cout
- •4.2. Функція виведення даних printf
- •4.3. Об’єкт введення даних cin
- •4.4. Функція введення даних scanf
- •Контрольні питання
- •5.2. Операції відношення
- •5.3. Логічні операції
- •5.4. Додаткові операції
- •5.5. Порозрядні операції
- •Контрольні питання
- •Завдання Лінійний обчислювальний процес
- •1. Визначити значення функції y
- •2. Геометричні завдання
- •Розгалужений обчислювальний процес
- •1. Визначити значення функції y
- •3. Перевірити, чи міститься точка з заданими координатами усередині заштрихованої області.
- •Розділ 6. Організація циклів
- •6.1. Організація арифметичних циклів з використанням оператору for
- •6.2. Організація ітераційних циклів з передумовою while та післяумовою do...While
- •6.3. Оператори switch та goto
- •Контрольні питання
- •Завдання Арифметичний цикл
- •Вкладені цикли
- •Ітераційний цикл
- •Суміщення розгалуженого та циклічного процесів
- •Розділ 7. Зовнішні пристрої та символьне введення/виведення. Рядкові, числові функції та функції роботи з датою та часом
- •7.1. Загальна концепція та функції символьного введення-виведення
- •7.2. Символьні функції
- •7.3. Рядкові функції
- •7.4. Числові функції
- •7.5. Функції роботи з датою та часом
- •Контрольні питання
- •Завдання
- •Розділ 8. Вказівки, посилання та масиви
- •8.1. Вказівки
- •8.2. Посилання
- •8.3. Одновимірні масиви
- •8.4. Багатовимірні масиви
- •8.5. Символьні масиви
- •Контрольні питання
- •Завдання Одновимірні масиви
- •Двовимірні масиви
- •Розділ 9. Робота з функціями
- •9.1. Засоби створення функцій
- •9.2. Видимість змінних
- •9.3. Параметри функції та передача значень
- •9.4. Передача масивів в якості параметрів функцій
- •9.5. Функції та вказівки
- •9.6. Перевантаження та шаблони функцій
- •Контрольні питання
- •Завдання
- •Розділ 10. Рекурсивне програмування
- •10.1. Основні поняття рекурсії. Визначення факторіалу числа
- •10.2. Приклади рекурсій
- •Контрольні питання
- •Розділ 11. Робота з файлами
- •11.1. Робота з текстовими та бінарними файлами
- •Можливі режими доступу
- •11.2. Довільний доступ у файлах
- •11.3. Файли потокового введення/виведення з використанням структури file.
- •Контрольні питання
- •Завдання
- •Розділ 12. Структури
- •12.1. Загальна характеристика структури
- •12.2. Масиви структур
- •12.3. Використання масивів, як елементів структур
- •3. Робота зі структурами є універсальною, передбачено додавання записів до файлу (флаг ios:app). Для підрахунку кількості структур на диску приведемо наступні рядки програми:
- •Контрольні питання
- •Завдання
- •Розділ 13. Об’єднання та інші типи даних. Обробка виключних ситуацій
- •13.1. Об’єднання
- •13.2. Перелічені типи даних (enum)
- •13.3. Бітові поля
- •13.4. Обробка виключних ситуацій
- •Контрольні питання
- •Розділ 14. Динамічні структури даних
- •14.1. Стек
- •14.2. Черга
- •14.3. Лінійний список
- •Контрольні питання
- •Завдання
- •Розділ 15. Типові методи сортування масивів
- •15.1. Бульбашкове сортування (bubble sort)
- •15.2. Сортування за допомогою вибору (choice sort)
- •15.3. Сортування вставками (insert sort)
- •15.4. Сортування Шелла
- •15.5. Швидке сортування (quick sort)
- •Контрольні питання
- •Завдання
- •Розділ 16. Чисельне диференціювання та інтегрування
- •16.1. Методи правих та центральних різниць чисельного диференціювання
- •16.2. Методи прямокутників, трапецій, Сімпсона (парабол) чисельного інтегрування
- •Контрольні питання
- •Завдання Чисельне диференціювання
- •Чисельне інтегрування
- •Розділ 17. Чисельні методи розв’язання алгебраїчних рівнянь
- •17.1. Метод половинного ділення (дихотомія)
- •17.2. Метод Ньютона (метод дотичних)
- •17.3. Метод Рибакова
- •Контрольні питання
- •Завдання
- •Розділ 18. Чисельні методи розв’язання системи лінійних алгебраїчних рівнянь
- •18.1. Визначник. Дії над матрицями. Обчислення оберненої матриці
- •18.2. Метод оберненої матриці.
- •18.3. Метод Крамера
- •18.4. Метод Гауса
- •Контрольні питання
- •Завдання
- •1. Розв’язати систему алгебраїчних рівнянь.
- •2. Обчислити добуток матриць.
- •3. Розв’язати матричні рівняння.
- •Список літератури
Контрольні питання
Що таке рекурсія?
Переваги та недоліки рекурсивного програмування.
Наведіть власний приклад рекурсії та проаналізуйте глибину рекурсії.
Наведіть приклад рекурсії розрахунку факторіалу числа.
Наведіть приклад рекурсії розрахунку n-го члену послідовності Фібоначчі.
Наведіть алгоритм піднесення числа x до натурального степеня n.
Розділ 11. Робота з файлами
11.1. Робота з текстовими та бінарними файлами
Файли бувають двох типів: текстовими та бінарними (binary).
Доступ до інформації у файлах довільний, тобто звертання до файлів може здійснюватись в будь-якому порядку.
Відкриття і закриття файлів
Для відкриття використовується функція-член open() з одним з об’єктів файлових потоків. Для закриття файлів використовується функція-член close():
Формат:
fs_obj.open(file_name, access);
fs_obj. close();
fs_obj – об’єкт, що являє собою файл.
file_name – рядок (або вказівка на рядок); може бути зазначений весь маршрут.
access – являє собою будь-яке значення з таблиці можливих режимів доступу (табл. 11.1) або комбінацію з використанням оператора АБО ( | )
Таблиця 11.1
Можливі режими доступу
|
Режим |
Опис |
Код |
|
ios::in |
Відкрити файл для читання |
1 |
|
ios::out |
Відкрити файл для запису |
2 |
|
ios::ate |
Відкрити файл і встановити вказівку на кінець |
4 |
|
ios::app |
Відкрити файл для додавання |
8 |
|
ios::trunc |
Видалити уміст файла |
16 |
|
ios::nocreate |
Якщо немає файла, повертає відмову |
32 |
|
ios::noreplace |
Якщо файл є, його відкриття тільки для додавання |
64 |
|
ios::binary |
Відкрити файл у двоічному режимі |
128 |
Якщо ви відкриваєте файл для запису з опцією ios::out, C++ просто створює його. Якщо файл із цим ім’ям вже існує, C++ без усякого попередження перекриває старий файл, знищуючи його вміст.
Якщо ви хочете, щоб спроба відкрити файл tt.txt завершилася відмовою, у випадку, якщо файл не існує, використовуйте:
cur_fs.open("tt.txt",ios::out | ios::nocreate)
Режим доступу до файлів по умовчанню – текстовий ASCII-файл.
Бінарний режим доступу до файлів більш компактний, дані записуються в двійкових машинних кодах.
Скажімо
int i = 31764;
для ASCII - коду – це 5 символів,
для двійкового машинного коду – це 2 байта.
Якщо під час відкриття файла відбувається помилка, об’єкт файлового потоку буде дорівнювати нулю.
Наприклад, якщо ви відкриваєте файл з опцією ios::nocreate і заданий файл не існує, С++ не відкриває цей файл. Виникнення помилки можна простежити у такий спосіб:
if(! cur_fs) cout << "Файл не існує";
Рекомендації: Краще відкривати файли перед їхнім використанням і закривати відразу ж після використання.
Запис у файл.
Найбільш розповсюдженні функції файлового введення-виведення:
get();
put().
Приклади:
Приклад 1.
#include <fstream>
using namespace std;
ofstream fp;
void main()
{
fp.open("nam.dat", ios::out);
fp<< "Петров Сергій\n";
fp<< "Сидоров Іван\n";
fp.close();
}
При перегляді файлу "nam.dat" отримаємо наступну інформацію
Петров Сергій
Сидоров Іван
Приклад 2. Запис у файл цифр від 1 до 100
#include <iostream>
#include <fstream>
using namespace std;
ofstream fp;
void main()
{
int i;
// Створення нового файла
fp.open("nam.dat", ios::out);
if(!fp)
cout << "Помилка відкриття файла\n";
else
{
for(i = 1; i < 101; i++)
fp << i << " ";
}
fp.close();
}
Виведення на принтер.
Принтер, також як і екран, можна розглядати як аналогію з файлом.
Приклад:
#include <fstream>
using namespace std;
ofstream prn;
void main()
{
prn.open("LPT1",ios::out);
prn << "Міша\n";
prn << "Петро\n";
prn.close();
}
Результат виконання програми:
Міша
Петро
Додавання у файл і читання з файла.
Приклад. Додати 3 прізвища у файл, у котрому вже є 2 прізвища:
Петров
Сидоров
#include <fstream>
using namespace std;
ofstream fp;
void main()
{
fp.open("name.dat", ios::app);
fp << "Козлов\n";
fp << "Ромін\nКравенко\n";
fp.close();
}
Якщо файл name.dat не існує, то створюється новий із трьома прізвищами.
Приклад. Програма запитує в користувача ім’я файла і виводить його вміст на екран.
#include <iostream>
#include <fstream>
using namespace std;
fstream fp;
void main()
{
char filename[12];
char in_char;
cout << "Введіть ім’я файла ";
cin >> filename;
fp.open(filename, ios::in);
if(!fp)
{
cout << "\nПомилка, файл не відкривається\n";
exit(0); //Вихід із програми
}
while(fp.get(in_char))
cout << in_char;
fp.close();
}
Приклад. Копіювання даних з одного файла в інший:
#include <iostream>
#include <fstream>
using namespace std;
ifstream in_fp;
ofstream out_fp;
void main()
{
char in_char;
char in_file[12];
char out_file[12];
cout << "Введіть ім’я початкового файлу ";
cin >> in_file;
cout << "Введіть ім’я вихідного файлу ";
cin >> out_file;
in_fp.open(in_file, ios::in);
if(!in_fp)
{
cout << "\n\nПочаткового файлу не існує\n";
exit(0);
}
out_fp.open(out_file, ios::out);
if(!out_fp)
{
cout << "\n\nПомилка відкриття вихідного файлу\n";
exit(0);
}
cout << "\nКопіювання\n";
while(in_fp.get(in_char))
out_fp.put(in_char);
out_fp.close();
in_fp.close();
}
