Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 2: Процедурне програмування
ЗВІТ
до лабораторної роботи № 3
«Структури»
Варіант 16
Дата «20» травня 2022
ЗАВДАННЯ:
1. Ознайомитись зі структурами та масивами структур. Дослідити особливості доступу до змінних структурного типу.2. Розробити Блок-схему програмного алгоритму.3. У якості індивідуального завдання необхідно написати код програми, що створює масив структур згідно з індивідуальним завданням та виконує запис даних в файл у вигляді структурних блоків (елементів масиву структур). Ім'я файлу – «імя_структури».txt.4. Реалізувати читання із файлу «імя_структури».txt окремих елементів масиву структур за заданим індексом масиву.5. Оформити ЗВІТ до лабораторної роботи згідно вимог та методичних рекомендацій.
Варіант завданнь:
За варінатом 16 – Структура «Файл»: назва, тип, розмір, дата створення, дата редагування.
Теоритичні відомості:
Покажчик на файл (змінна-покажчик типу FILE *) – це покажчик на інформацію, що визначає різні параметри файлу, включаючи його ім'я, стан та поточну позицію. Вказівник на файл ідентифікує конкретний дисковий файл та використовується потоком для виконання операцій введення/виводу. Для читання або запису файлу програма використовує вказівник на файл. Файлова змінна (наприклад, файл) створюється наступним оператором:
FILE *file;
Операція, за допомогою якої програма вперше запитує доступ до файлу, називається відкриттям файлу. Звільнення файлу в кінці роботи зазвичай називається закриттям файлу.
Функція fopen() відкриває потік. Цією функцією керують три основні параметри: ім'я файлу, який слід відкрити, вид застосування файлу та вказівник на файл, повертається функцією.
Синтаксис: FILE * fopen (char * filename, char * mode);
Опис: функція fopen() відкриває файл, іменований параметром filename і пов'язує його з відповідним потоком stream. Функція fopen() повертає як результат адресний покажчик, який ідентифікуватиме потік stream у наступних операціях.
Файл може бути відкритий у таких режимах (mode):
r відкриття файлу лише для читання;
w створення файлу для запису;
а приєднання, відкриття для запису в кінець файлу або створення запису, якщо файл не існує;
r+ відкриття існуючого файлу для оновлення (читання та запису);
w+ створення нового файлу для зміни;
a+ відкриття для приєднання; відкриття (або створення, якщо файл не існує) для оновлення на кінець файлу.
Якщо файл відкривається або створюється в текстовому режимі, можна додати символ t до значення параметра mode (rt, w+t тощо); аналогічно, для специфікації бінарного режиму можна до значення параметра mode додати символ b (wb, a+b тощо).
*
Структури в мові Сі - це складові типи даних ,створених з використанням інших типів. Розглянемо наступне визначення структури:
struct Time {int hour; // годинникint minute; // хвилиниint second; // секунди};
Особливість структур в тому, що ми можемо створювати свої власні типи даних і оголошувати змінні цих типів даних.
У даному прикладі ми створили свою структуру Time, що складається з полів години, хвилини, секунди.
Вивід програми:
/
Рисунок 1.
/
Рисунок 2.
/
Рисунок 3.
Код програми:
Посилання на Repl.it:
https://replit.com/join/cxrqibutqj-tr-15khavkin
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXN 40
#define MAXT 10
int main(){
struct pfile {
char name [MAXN];
char type [MAXT];
char size[10];
char tcreation[MAXN];
char tediting[MAXN];
};
int N,q,S;
printf("\nВведіть кількість файлів:\n");
scanf("%i", &N);
struct pfile pf[N];
struct pfile pf2[N];
for(int i=0; i<N; i++){
printf("Ведіть назву файлу № %d...\n", i+1);
scanf("%s", pf[i].name);
printf("Тепер ведіть тип файлу...\n");
scanf("%s", pf[i].type);
printf("Тепер ведіть розмір файлу...\n");
scanf("%s", pf[i].size);
printf("Дата створення файлу...\n");
scanf("%s", pf[i].tcreation);
printf("Дата редагування файлу...\n");
scanf("%s", pf[i].tediting);
printf("\n");
}
FILE *stream;
stream = fopen("dir/File.txt","w+");
//Запис данних у створений файл
fprintf(stream, "Input structure:\n");
fprintf(stream, "Name | Type | Size | Date create | Date change \n");
for(int i=0; i<N; i++){
fprintf(stream, "%s %s %s %s %s", pf[i].name, pf[i].type, pf[i].size, pf[i].tcreation, pf[i].tediting);
fprintf(stream,"\n");
}
fclose(stream);//Збереження та закритя файлу
printf("Дані збережені успішно\n");
printf("Ведіть номер файлу інформацію щодо якого ви хочете дізнатися: ");
scanf("%i", &q);
printf("Ведіть яку інформацію про файл ви хочете дізнатися:\n1-Назва\n2-Тип\n3-Розмір\n4-Дата створбювання\n5-Дата змінювання\n");
scanf("%i", &S);
stream = fopen("dir/File.txt","r+");
fseek (stream,0,SEEK_SET);
fseek (stream,64,SEEK_SET);
for(int i=0; i<N; i++){
fscanf(stream, "%s %s %s %s %s", pf2[i].name, pf2[i].type, pf2[i].size, pf2[i].tcreation, pf2[i].tediting);
}
switch (S){
case 1:
printf("Назва - %s",pf2[q-1].name);
break;
case 2:
printf("Тип - %s",pf2[q-1].type);
break;
case 3:
printf("Розмір - %s",pf2[q-1].size);
break;
case 4:
printf("Дата створювання - %s",pf2[q-1].tcreation);
break;
case 5:
printf("Дата змінювання - %s",pf2[q-1].tediting);
break;
}
return 0;
}
Висновок:
У цій лабораторної роботі ознайомилися з роботою структур. Було створено програмний код для створення масиву структур, створення файлу та запис у файл масиву структур. Також код реалізує читання з файлу елементів структур вибраної структури. Зроблено звіт з лабораторної роботи та вчасно надіслано викладачу на перевірку.