Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода по практическим.doc
Скачиваний:
2
Добавлен:
25.11.2019
Размер:
259.07 Кб
Скачать

4 Контрольні запитання:

4.1 Як позначаються в програмі елементи багатовимірного масиву?

4.2 Як організовується в програмі введення/виведення елементів багатовимірного масиву?

4.3 Поняття функції, параметри функції.

4.4 Як організовується в програмі передача масиву в якості параметра функції?

Практична робота 5

Тема. Програмування з використанням файлів

Мета: закріпити основні відомості, вивчені на лекції – поняття файлів, визначення, призначення та оголошення файлів, функції для роботи з файлами.

Виконання

  1. Короткі теоретичні відомості

Для роботи з файлами в стилі С++ використовують заголовний файл <iostream.h>, а для використання функцій для роботи з файлами в стилі С користуються заголовним файлом <stdio.h> .

Робота з потоком вводу/виводу починається з його відкриття. Функція відкриття потоку має формат:

FILE* fopen(const char* filename, const char* mode);

Ввід/вивід в потік можна здійснювати різними способами: у вигляді послідовності байтів, у вигляді символів або з використанням форматних перетворень. Для кожного виду операцій визначено свій набір функцій. Операції вводу/виводу виконуються, починаючи з поточної позиції потоку, яка обумовлена положенням покажчика потоку.

Після закінчення роботи з потоком його необхідно закрити за допомогою функції fclose().

  1. Розглянемо приклад програми, яка використовує файли

У файлі зберігаються відомості про монітори. У кожному рядку зазначений тип, оптова й роздрібна ціни й примітка. Для простоти дані в кожному рядку записані одноманітно: перші 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)

Тема. Створення класу. Робота з об’єктами.

Мета: закріпити основні відомості, вивчені на лекції – поняття класу, елементи класу, поняття конструктору, види конструкторів; навчитися будувати об’єкти класів та використовувати їх в програмі.

Виконання