Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Кафедра АПЕПС
Алгоритмізація та програмування - 2. Процедурне програмування
ЗВІТ
до лабораторної роботи № 3
«Структури»
Варіант № 15
Дата «27» травня 2022
ЗАВДАННЯ:
1. Ознайомитись зі структурами та масивами структур. Дослідити особливості доступу до змінних структурного типу.2. Розробити Блок-схему програмного алгоритму.3. У якості індивідуального завдання необхідно написати код програми, що створює масив структур згідно з індивідуальним завданням та виконує запис даних в файл у вигляді структурних блоків (елементів масиву структур). Ім'я файлу – «імя_структури».txt.4. Реалізувати читання із файлу «імя_структури».txt окремих елементів масиву структур за заданим індексом масиву.5. Оформити ЗВІТ до лабораторної роботи згідно вимог та методичних рекомендацій.
РЕЗУЛЬТАТ РОБОТИ:
1. Роздрукувати (вивести на екран) попередньо сформовані та підготовлені для запису в файл дані.2. Роздрукувати (вивести на екран) результат виконання операції читання даних із файлу.3. ЗВІТ до комп’ютерного практикуму для перевірки додати в Клас.4. Програмний код (відкритий для редагування) розмістити на сайті Repl.it (посилання виключно через кнопку «+Invite»).
Теоретичні відомості:
Іноді буває потрібно зберігати группу змінних під схожими назвами, але якщо це робити роздільно, це доволі незручно. Саме для цієї мети є структури. Завдяки ним можна зберігати велику кількість змінних різного типу(звичайні змінні, масиви, вказівники), поєднаних однією спільною назвою. Кожен елемент структури може бути свого типу даних. Вона представляє собо складний тип даних, складений із більш простих.
Загальна схема оголошення структури виглядає приблизно так:
struct ім’я_структури
{
Тип ім’я_компоненту
Тип ім’я_компоненту
Тип ім’я_компоненту
…
} var1, var2, var3;
Якщо за правою фігурною дужкою описати кілька змінних переліком через кому, ви оголосите кілька ваших структур. Їх також можна оголосити у будь-якому місці в коді, після оголошення самаого початкового типу структури. Для цього потрібно скористатись таким синтаксисом:
struct Ім’я_структури ім’я_змінної;
Доступ до елементів структури здійснюється таким шляхом: Спочатку вказується ім’я структури, далі через точку вказується назва потрібного елемента структури. У нашому випаду це буде мати такий вигляд:
Var1.ім’я_елементу_структури
де var1 – назва змінної, що зв’язана із оголошеним структурним типом.
Також структури можна копіювати, можна робити над ними різні операції привласнення, їх можна передавати у функції, як аргументи, а функції можуть вертати їх у вигляді результату своєї роботи.
Хід Роботи:
Завдання:
/
Короткий опис виконання:
На початку програми оголошується структура з назвою Cinema, та масив структур цього типу, куди користувач буде записувати усі фільми. Далі, після того, як користувач ввів усі данні до масиву структур створюємо файл з назвою Cinema.txt, у який записуємо усі данні з масиву структур у відповідному форматі, зручному для подальшого читання.
Далі просимо увести користувача потрібний йому ID фільму, та вдчиняємо файл для читання. За допомогою функції fseek пропускаємо перший рядок, я кому описаний формат заповнення файлу, та зчитуємо весь файл у новий масив структур під назвою result.
Після заповнення нового масиву проходимось по ньому циклом, і коли ID користувача співпаде із ID елементу масиву виводимо результат користувачу у консоль.
Блок-схема до завдання:
/
Результат виконання програми:
/
/
/
Вигляд файлу, у який записувались данні:
/
Висновок:
Під час виконання даної лабораторнох роботи набуто навичок з роботою із структурами та масива структур, досліджено особливості змінних структурного типу. У якості індивідуального завдання було створено масив структур Cinema, який містив у собі відповідні до вказаних у завданні. Далі записано масив структур у файл, та подалі считано із файла. Завдання виконано правильно, алгоритми працююь справно.
Силка на Replit: https://replit.com/join/aqaxepkkot-tr-15fundamient
Копія коду:
// Лабораторна робота №3
// Виконав Фундамент Даніїл ТР-15
// 24.05.2022
#include <stdio.h>
#define LENGTH 32
int main(void) {
int size;
printf("Введіть к-сть елементів масиву структур:\n");
scanf("%d", &size);
// Оголошуємо структуру
struct Cinema {
char filmName[LENGTH];
char surname[LENGTH];
double session;
int duration;
double price;
int spectators;
} kino[size];
// Заповнюємо масив структур
for(int i = 0; i < size; i++) {
printf("Уведіть назву фільму %d:\n", i+1);
scanf("%s", kino[i].filmName);
printf("Уведіть прізвище режисеру %d:\n", i+1);
scanf("%s", kino[i].surname);
printf("Уведіть час сеансу на фільм %d:\n", i+1);
scanf("%lf", &kino[i].session);
printf("Уведіть тривалість фільму %d(у хвилинах):\n", i+1);
scanf("%d", &kino[i].duration);
printf("Уведіть ціну на квиток на фільм %d:\n", i+1);
scanf("%lf", &kino[i].price);
printf("Уведіть кількість глядачів фільму %d:\n", i+1);
scanf("%d", &kino[i].spectators);
}
FILE *stream;
// Створюєм файл для роботи з ним
stream = fopen("Cinema.txt","w+t");
// Робимо перевірку
if( stream == NULL) {
printf("This source wasn't find");
return 0;
}
// Виводимо масив структур у файл, у вказаному форматі
fprintf(stream, "filmName | surname | session | duration | price | number of spectators\n\n");
for(int i = 0; i < size; i++) {
fprintf(stream, "%s %s %.2f %d %.2f %d\n", kino[i].filmName, kino[i].surname, kino[i].session, kino[i].duration, kino[i].price, kino[i].spectators);
}
printf("\nData succesfully saved to Cinema.txt!\n");
// Зачиняємо файл
fclose(stream);
// Відкриваємо файл для читання
stream = fopen("Cinema.txt","r+");
int id;
printf("\nУведіть будь-ласка ID вашого фільму(від 0 до %d): \n", size-1);
scanf("%d", &id);
printf("\n");
//Створюємо масив структур
struct Cinema result[size];
// Витягуємо масив структур із файлу
fseek(stream, 72 ,SEEK_SET);
for(int i = 0; i < size; i++) {
fscanf(stream, "%s %s %lf %d %lf %d", result[i].filmName, result[i].surname, &result[i].session, &result[i].duration, &result[i].price, &result[i].spectators);
}
// Зачиняємо файл
fclose(stream);
// Виводимо потрібний користувачу елемент
for(int i = 0; i < size; i++) {
if(id == i) {
printf("---- Фільм під ID: %d ----\n\nНазва фільму: %s,\nПрізвище режисера: %s,\nЧас сеансу: %.2f,\nТривалість фільму: %d хв.,\nЦіна за квиток: %.2f грн.,\nК-сть глядачів: %d\n", id, result[i].filmName, result[i].surname, result[i].session, result[i].duration, result[i].price, result[i].spectators);
}
}
}