Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування – 2: Процедурне програмування
ЗВІТ
до лабораторної роботи № 3
«Структури»
Варіант 20
Дата «20» червня 2022
Київ – 2022
Мета роботи: Ознайомитись зі структурами та масивами структур. Дослідити особливості доступу до змінних структурного типу.
Завдання:1. Ознайомитись зі структурами та масивами структур. Дослідити особливості доступу до змінних структурного типу.
2. У якості індивідуального завдання необхідно написати код програми, що створює масив структур згідно з індивідуальним завданням та виконує запис даних в файл у вигляді структурних блоків (елементів масиву структур). Ім'я файлу – «імя_структури».txt.
3. Реалізувати читання із файлу «імя_структури».txt окремих елементів масиву структур за заданим індексом масиву.
4. Оформити ЗВІТ до лабораторної роботи згідно вимог та методичних рекомендацій.
Завдання для варіанту 20:
/
Результат роботи:1. Роздрукувати (вивести на екран) попередньо сформовані та підготовлені для запису в файл дані.2. Роздрукувати (вивести на екран) результат виконання операції читання даних із файлу.3. ЗВІТ до комп’ютерного практикуму для перевірки додати в Клас.4. Програмний код (відкритий для редагування) розмістити на сайті Repl.it (посилання виключно через кнопку «+Invite»).
Теоретична частина
Структури - це вбудована структура даних, що поєднує дані різних типів під одним ім'ям і надає можливість роботи з ними як окремо, так і з цілим об'єктом.
Запис типу структури:
Ім’я структури являє собою довільний ідентифікатор, якого застосовуються самі правила, як і при найменуванні змінних.
Після імені структури у фігурних дужках роміщуються компоненти структури, які представляють набір описів об'єктів, які складають структуру.
struct ім’я_структури {
опис_компонентів
};
Усі елементи структури оголошуються як змінні. Але на відміну від змінних, при визначенні елементів структури їм виділяється пам'ять, та його не можна ініціалізувати.
Ініціалізація структур аналогічна ініціалізації масивів: у фігурних дужках передаються значення елементів структури по порядку. Також після створення змінної структури можна звертатися до її елементів - набувати їх значення або, навпаки, надавати їм нові значення.
Зі структурами можливі такі дії:
Доступ до елементів структури
звернення до значення поля структури;
привласнення поля значення;
Робота зі структурою як із цілісним об'єктом
оператор присвоювання може скопіювати екземпляр структури цілком;
екземпляр структури можна передати цілком у функцію як параметр;
екземпляр структури можна повернути із функції;
можна отримати адресу екземпляра структури операцією взяття адреси &;
Розмір цього типу структури можна визначити операцією sizeof(ім'я типу).
Результат роботи
/
Рисунок 1. Ввід даних про ресторани
/
Рисунок 2. Вивід на екран попередньо сформованих даних про ресторани
/
Рисунок 3. Запис даних в файл
/
Рисунок 4. Читання з файлу інформації про всі ресторан
/
Рисунок 5. Повідомлення в разі введення значення, що не задовільняє умові
/
Рисунок 6. Читання з файлу інформації про конкретний ресторан
Висновок: У ході виконання лабораторної роботи відбулося ознайомлення зі структурами та масивами структур, досліджено особливості доступу до змінних структурного типу. Відповідно до варіанту написано код програми, що створює масив структур згідно з індивідуальним завданням та виконує запис даних в файл у вигляді структурних блоків.
Посилання (додаток 1)
https://replit.com/join/xwopmzphqf-nastyachubukova
Код програми (додаток 2)
//18.06.2022 LR-3 Chubukova Anastasia
#include <stdio.h>
#define length 32
#define BWHT "\e[1;37m"
#define WHT "\e[0;37m"
#define HBLU "\e[0;94m"
#define HCYN "\e[0;96m"
#define HMAG "\e[0;95m"
struct restaurant {
char name[length];
char waiter[length];
int table;
int visitors;
double time;
double closingtime;
};
int main(){
int amount;
printf(BWHT "Уведіть кількість ресторанів: ");
scanf("%d", &amount);
struct restaurant rests[amount];
for (int i = 0; i < amount; i++) {
printf(HBLU "\nРесторан №%d - ", i);
scanf("%s", rests[i].name);
printf("\n");
printf(WHT "Уведіть номер столику: ");
scanf("%d", &rests[i].table);
printf("Уведіть час бронювання столику: ");
scanf("%lf", &rests[i].time);
printf("Уведіть ім'я офіціанта: ");
scanf("%s", rests[i].waiter);
printf("Уведіть кількість місць: ");
scanf("%d", &rests[i].visitors);
printf("Уведіть час закриття: ");
scanf("%lf", &rests[i].closingtime);
}
printf(HCYN "\nДані про ресторани\n");
for (int i = 0; i < amount; i++) {
printf(WHT"\nРесторан №%d - %s\n\nСтіл №%.d\nЧас відвідування: %.2f\nІм'я офіціанта: %s\nКількість місць: %d\nЧас закриття: %.2f\n", i, rests[i].name, rests[i].table, rests[i].time, rests[i].waiter, rests[i].visitors, rests[i].closingtime);
}
FILE *Restaurant;
Restaurant = fopen("Restaurants.txt", "w+t");
if (Restaurant == NULL) {
printf(HMAG "Помилка. Файл не відкрито");
return 0;
}
fprintf(Restaurant, "Дані про ресторани\n");
for (int i = 0; i < amount; i++) {
fprintf(Restaurant, "\nРесторан №%d - %s\n\nСтіл №%.d\nЧас відвідування: %.2f\nІм'я офіціанта: %s\nКількість місць: %d\nЧас закриття: %.2f\n", i, rests[i].name, rests[i].table, rests[i].time, rests[i].waiter, rests[i].visitors, rests[i].closingtime);
}
printf("\nДані збережено в файл Restaurants.txt\n");
fclose(Restaurant);
Restaurant = fopen("Restaurants.txt", "r");
printf(HCYN "\nБудь ласка, вкажіть що зробити далі?\n");
printf("Вивести на екран конкретний ресторан(1)\nВивести на екран увесь список ресторанів(2)\n");
int answer;
scanf("%d", &answer);
if (answer != 1 && answer != 2) {
do {
printf(HMAG "\nВведене значення є неправильним. Будь ласка, введіть 1 або 2: ");
scanf("%d", &answer);
} while (answer != 1 && answer != 2);
}
printf(WHT);
if (answer == 1 || answer == 2) {
if (answer == 1) {
int answer1;
printf(HCYN"Уведіть номер ресторану: ");
scanf("%d", &answer1);
printf(WHT);
int num = amount - 1;
while(answer1 < num || answer1 > num){
do{
printf(HMAG "\nВведене значення є неправильним. Будь ласка, введіть номер ресторану: ");
scanf("%d", &answer1);
} while (answer1 < num || answer1 > num);
}
for(int i = 0; i < amount; i++) {
if(answer1 == i) {
printf(WHT);
printf("\nРесторан №%d - %s\n\nСтіл №%.d\nЧас відвідування: %.2f\nІм'я офіціанта: %s\nКількість місць: %d\nЧас закриття: %.2f\n", answer, rests[i].name, rests[i].table, rests[i].time, rests[i].waiter, rests[i].visitors, rests[i].closingtime);
}
}
}
if(answer == 2) {
char all = fgetc(Restaurant);
while (all != 1) {
printf("%c", all);
all = fgetc(Restaurant);
}
}
}
fclose(Restaurant);
}