- •“Затверджую”
- •Пояснювальна записка
- •Критерії оцінювання
- •Практичні роботи до модулю №1 Практична робота 1
- •Виконання
- •Короткі теоретичні відомості
- •2. Розглянемо програму, яка є прикладом використання оператора розгалуження
- •Контрольні запитання:
- •Практична робота 2
- •Виконання
- •1 Короткі теоретичні відомості
- •Розглянемо програми, які є прикладами роботи з масивами
- •Контрольні запитання:
- •Практична робота 3
- •Виконання
- •Короткі теоретичні відомості
- •Розглянемо програму для роботи з типом даних структура
- •4 Контрольні запитання:
- •Практична робота 4
- •Виконання
- •Короткі теоретичні відомості
- •Розглянемо програми, що використовують масиви в якості параметрів
- •4 Контрольні запитання:
- •Практична робота 5
- •Виконання
- •Короткі теоретичні відомості
- •Розглянемо приклад програми, яка використовує файли
- •Короткі теоретичні відомості
- •Розглянемо приклад програми, яка використовує класи
- •4 Контрольні запитання:
4 Контрольні запитання:
4.1 Як позначаються в програмі елементи багатовимірного масиву?
4.2 Як організовується в програмі введення/виведення елементів багатовимірного масиву?
4.3 Поняття функції, параметри функції.
4.4 Як організовується в програмі передача масиву в якості параметра функції?
Практична робота 5
Тема. Програмування з використанням файлів
Мета: закріпити основні відомості, вивчені на лекції – поняття файлів, визначення, призначення та оголошення файлів, функції для роботи з файлами.
Виконання
Короткі теоретичні відомості
Для роботи з файлами в стилі С++ використовують заголовний файл <iostream.h>, а для використання функцій для роботи з файлами в стилі С користуються заголовним файлом <stdio.h> .
Робота з потоком вводу/виводу починається з його відкриття. Функція відкриття потоку має формат:
FILE* fopen(const char* filename, const char* mode);
Ввід/вивід в потік можна здійснювати різними способами: у вигляді послідовності байтів, у вигляді символів або з використанням форматних перетворень. Для кожного виду операцій визначено свій набір функцій. Операції вводу/виводу виконуються, починаючи з поточної позиції потоку, яка обумовлена положенням покажчика потоку.
Після закінчення роботи з потоком його необхідно закрити за допомогою функції fclose().
Розглянемо приклад програми, яка використовує файли
У файлі зберігаються відомості про монітори. У кожному рядку зазначений тип, оптова й роздрібна ціни й примітка. Для простоти дані в кожному рядку записані одноманітно: перші 20 символів займає тип монітора, далі по 5 символів цілі числа, що представляють оптову й роздрібну ціни, потім примітка довжиною не більше 40 символів.
Наведена нижче програма по рядкам зчитує дані з текстового файлу в буферну змінну s, потім формує з них структуру mon і записує її у двійковому режимі у вихідний файл. Далі ілюструється зчитування із цього файлу довільного запису.
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE *fi, *fo:
if((fi = fopen("d:\\c\\file.txt", "r")) == 0){
cout « "Помилка відкриття вхідного файлу"; return 1;}
if((fo = fopen("d:\\c\\binfile.out". "w+b")) == 0){
cout « "Помилка відкриття вихідного файлу"; return 1;}
const int dl = 80;
char s[dl];
struct{
char type[20];
int opt, rozn;
char comm[40]; }mon;
int kol = 0; // Кількість записів у файлі
while (fgets(s, dl, fi)){ // Перетворення рядка в структуру:
strncpy(mon.type, s, 19); // Опис strncpy дивися нижче
mon.type[19]='\0';
mon.opt = atoi(&s[20]); // Опис atoi розглядається в наступній лекції
mon.rozn = atoi(&s[25]);
strncpy(mon.comm, &s[30], 40);
fwrite(&mon, sizeof mon, 1, fo);
kol++;
}
fclose(fi);
int i; cin » i; // Номер запису
if (i >= kol){cout « "Запис не існує"; return 1;}
// Установка покажчика поточної позиції файлу на запис i:
fseek(fo, sizeof( mon)*i, SEEK_SET);
fread(&mon, sizeof( mon), 1, fo);
cout « "mon.type " « mon.type « " opt " « mon.opt « " rozn " « mon.rozn « endl;
fclose(fo);
return 0; }
Функція strncpy копіює n символів одного рядка в інший. Функція має формат:
char *strncpy(char *s1, char *s2, size_t n);
Функція копіює не більше n символів з s2 в s1. Якщо довжина вихідного рядка перевищує або дорівнює n, нуль-символ наприкінці рядка s1 не додається. У противному випадку рядок доповнюється нуль-символами до n-го символу.
3 Завдання. Для зберігання даних про планшетні сканери описати структуру виду:
struct scan_info{
char model[25]; // найменування моделі
int price; // ціна
double x_size; // горизонтальний розмір області сканування
double y_size; // вертикальний розмір області сканування
int optr; // оптичний дозвіл
int grey; // число градацій сірого
};
Написати програму, яка використовує вказану структуру за варіантом.
Варіант 1
Написати функцію, що записує в бінарний файл дані про сканер з наведеної структури. Структура файлу: у перших двох байтах розміщається значення типу int, що визначає кількість зроблених у файл записів; далі без пропусків розміщаються записи про сканери.
Написати функцію, що витягає із цього файлу дані про сканер у структуру типу scan_info. Обов'язковий параметр - номер необхідного запису. Функція повинна повертати нульове значення, якщо читання пройшло успішно, і -1 у противному випадку.
Привести приклад програми, що створює файл із даними про сканери (дані вводяться із клавіатури) - 6-8 записів і вивідної на дисплей дані про запитаний запис.
Варіант 2
Написати функцію, що записує в бінарний файл дані про сканер з наведеної структури. Структура файлу: у перших двох байтах розміщається значення типу int, що визначає кількість зроблених у файл записів; далі без пропусків розміщаються записи про сканери.
Написати функцію, що сортує записи в описаному вище бінарному файлі по одній з наступних характеристик: ціна або число градацій сірого. Обов'язковий параметр - ознака, що задає критерій сортування. Привести приклад програми, що створює файл із даними про сканери (дані вводяться із клавіатури) - не менш восьми записів та здійснює сортування цього масиву.
Варіант 3
Написати функцію, що записує в бінарний файл дані про сканер з наведеної структури. Структура файлу: у перших чотирьох байтах розміщається значення типу long, що визначає кількість зроблених у файл записів - далі без пропусків розміщаються записи про сканери.
Написати функцію, що сортує записи в описаному вище бінарному файлі по найменуванню моделі сканера.
Привести приклад програми, що створює файл із даними про сканери (дані вводяться із клавіатури) - не менше восьми записів і здійснює його сортування.
Варіант 4
Написати функцію, що записує дані про сканер з наведеної структури в необхідну позицію в бінарному файлі. Структура файлу: у перших двох байтах розміщається значення типу int, що визначає кількість зроблених у файл записів; далі без пропусків розміщаються записи про сканери. Запис може здійснюватися в будь-яку позицію, причому якщо між записом, що вводиться, і останнім записом (або початком файлу) є пропуски, вони заповнюються нулями.
Написати функцію, що «ущільнює» описаний вище бінарний файл шляхом видалення з нього записів, що містять всі нулі.
Привести приклад програми, що створює файл із даними про сканери (дані вводяться із клавіатури) - не менше шести записів і здійснює його ущільнення.
Варіант 5
Написати функцію, що записує в бінарний файл дані про сканер з наведеної структури. Структура файлу: у перших двох байтах розміщається значення типу int, що визначає кількість зроблених у файл записів; далі без пропусків розміщаються записи про сканери.
Написати функцію, що вводить дані про сканер із клавіатури в структуру типу scan_іnfo, і якщо дані про цей сканер відсутні у файлі, поміщає вміст структури в кінець файлу; у противному випадку видає відповідне повідомлення.
Привести приклад програми, що створює файл із даними про сканери (дані вводяться з текстового файлу) - 6-8 записів та доповнює файл записами про 2-3 сканери, що вводять із клавіатури.
Варіант 6
Написати функцію, що записує в бінарний файл дані про сканер з наведеної структури. Структура файлу: у перших двох байтах розміщається значення типу int, що визначає кількість зроблених у файл записів; далі без пропусків розміщаються записи про сканери.
Написати функцію, що вводить дані про сканер із клавіатури в структуру типу scan_infо й поміщає її вміст на місце першого запису у файлі. Файл повинен існувати. При цьому, запис, що раніше займав першу позицію, перемішається на другу, другий запис на третю, і т.д.
Привести приклад програми, що створює файл із даними про сканери (дані вводяться з текстового файлу) - 6-8 записів і доповнює цей файл 1-2 новими записами, що вводять із клавіатури.
4 Контрольні запитання:
4.1 Дайте поняття файлу.
4.2 Як організовується в програмі введення/виведення в(з) файл(у)?
4.3 Як передати структуру в якості параметру функції?
4.4 Як відбувається пошук в файлі?
Практичні роботи до модулю № 2
Практична робота 1(6)
Тема. Створення класу. Робота з об’єктами.
Мета: закріпити основні відомості, вивчені на лекції – поняття класу, елементи класу, поняття конструктору, види конструкторів; навчитися будувати об’єкти класів та використовувати їх в програмі.
Виконання