Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
до лабораторної роботи №3
«Структури»
(ТЕМА)
Варіант № 7
Дата «19» травня 2022
Завдання
1. Ознайомитись зі структурами та масивами структур. Дослідити особливості доступу до змінних структурного типу.
2. Розробити Блок-схему програмного алгоритму.
3. У якості індивідуального завдання необхідно написати код програми, що створює масив структур згідно з індивідуальним завданням та виконує запис даних в файл у вигляді структурних блоків (елементів масиву структур). Ім'я файлу – «імя_структури».txt.
4. Реалізувати читання із файлу «імя_структури».txt окремих елементів масиву структур за заданим індексом масиву.
5. Оформити ЗВІТ до лабораторної роботи згідно вимог та методичних рекомендацій.
Результат роботи
1. Роздрукувати (вивести на екран) попередньо сформовані та підготовлені для запису в файл дані.
2. Роздрукувати (вивести на екран) результат виконання операції читання даних із файлу.
3. ЗВІТ до комп’ютерного практикуму для перевірки додати в Клас.
4. Програмний код (відкритий для редагування) розмістити на сайті Repl.it (посилання виключно через кнопку «+Invite»).
Теоретичні відомості та опис роботи алгоритму
Структура — це ключове слово, яке створює визначений користувачем тип даних у C/C++. Структура створює тип даних, який можна використовувати для групування елементів, можливо, різних типів в один тип. Вони мають такий вигляд:
struct address{
char name[50];
char street[100];
char city[50];
char state[20];
int pin;
};
На початку програми створено структуру під назвою “Student”, яка має шість величин. Далі у користувача запитується скільки всього буде студентів занесено до файлу. Далі користувач вводить всі необхідні дані, а потім програма заносить всі ці значення до файлу у структурованому вигляді.
Після цього користувач вирішує чи бажає він зчитати з файлу інформацію про якого-небудь студента, а потім якого саме студента він хоче зчитати. Далі проходить декілька перевірок стосовно правильності введення даних.
Якщо користувач обрав вивести інформацію про всіх студентів, то програми просто посимвольно копіює все з файлу до консолі. Але якщо користувач обрав конкретного студента, то програма створює спеціальні змінні в які записуються дані студента.
Для того щоб знайти саме звідки брати інформацію, програма спочатку пропускає рядки, в яких інформація про інших студентів. А потім коли дійшла до потрібного рядка починає перебирати послідовно символи поки не зустріне символ «:». Далі попередньо створеній змінній надається значення від теперішньої позиції до кінця рядка. І так для кожного рядка з інформацією про потрібного студента. В кінці виводиться раніше наповнені змінні.
Результат програми
/
/
Висновок: було написано програму, що працює з структурами. На практиці досліджено як ними користуватися. Також у програмі було реалізовано занесення структур даних до файлу та пошук даних саме обраного студента.
Посилання на repl.it: https://replit.com/join/qxnrizdhkg-vladsosiedskii
Код програми
// 19.05.2022 lab_3 Sosisedskyi TR-15
#include <math.h>
#include <stdio.h>
//об'єкти структури
struct student {
char name[32];
char surname[32];
char patronymic[32];
char homeAddress[50];
char group[10];
char rating[10];
};
int main() {
int numberOfStudents;
printf("Введіть кількість студентів: ");
scanf("%d", &numberOfStudents);
struct student num[numberOfStudents];
for (int i = 0; i < numberOfStudents; i++) {
printf("\nСтудент номер %d\n", i);
printf("Введіть ім'я: ");
scanf("%s", num[i].name);
printf("Введіть прізвище: ");
scanf("%s", num[i].surname);
printf("Введіть по батькові: ");
scanf("%s", num[i].patronymic);
printf("Введіть домашню адресу: ");
char temp;
scanf("%c", &temp);
scanf("%[^\n]s", num[i].homeAddress);
printf("Введіть номер групи: ");
scanf("%s", num[i].group);
printf("Введіть рейтинг: ");
scanf("%s", num[i].rating);
}
FILE *fileStudent;
fileStudent = fopen("Student.txt", "w+t");
if (fileStudent == NULL) {
printf("Файл не відкрито");
return 0;
}
for (int i = 0; i < numberOfStudents; i++) {
fprintf(fileStudent, "Студент номер %d\n", i);
fprintf(fileStudent, "Ім'я: %s", num[i].name);
fprintf(fileStudent, "\nПрізвище: %s", num[i].surname);
fprintf(fileStudent, "\nПо батькові: %s", num[i].patronymic);
fprintf(fileStudent, "\nДомашня адреса: %s", num[i].homeAddress);
fprintf(fileStudent, "\nНомер групи: %s", num[i].group);
if (i != numberOfStudents - 1)
fprintf(fileStudent, "\nРейтинг: %s\n\n", num[i].rating);
else
fprintf(fileStudent, "\nРейтинг: %s", num[i].rating);
}
fclose(fileStudent);
while (1) {
printf("\n\nБажаєте вивести інформацію про якогось студента?");
printf("\n1 - Так\n2 - Ні\nВибір: ");
int choice;
char term;
if (scanf("%d%c", &choice, &term) != 2 || term != '\n') {
printf("Введено не число\n");
scanf("%*s");
continue;
} else {
if (choice == 2)
break;
if (choice < 1 || choice > 2) {
printf("Введено невірне значення");
continue;
}
printf("\nВведіть номер студента або -1, якщо хочете вивести інформацію "
"про всіх студентів: ");
int number;
scanf("%i", &number);
if (number < -1 || number >= numberOfStudents) {
printf("Введено невірне значення");
continue;
}
if (number >= -1 && number < numberOfStudents) {
fileStudent = fopen("Student.txt", "r");
if (number == -1) {
char c = fgetc(fileStudent);
printf("\n");
while (c != EOF) {
printf("%c", c);
c = fgetc(fileStudent);
}
} else {
char str[100];
char name[32];
char surname[32];
char patronymic[32];
char homeAddress[50];
char group[10];
char rating[10];
int stringNumber = 0;
while (fgets(str, 100, fileStudent)) {
if (number*8 == stringNumber) {
char c = fgetc(fileStudent);
for (int i = 0; c != ':'; i++) {
c = fgetc(fileStudent);
}
c = fgetc(fileStudent);
fgets(name, sizeof(name), fileStudent);
for (int i = 0; c != ':'; i++) {
c = fgetc(fileStudent);
}
c = fgetc(fileStudent);
fgets(surname, sizeof(surname), fileStudent);
for (int i = 0; c != ':'; i++) {
c = fgetc(fileStudent);
}
c = fgetc(fileStudent);
fgets(patronymic, sizeof(patronymic), fileStudent);
for (int i = 0; c != ':'; i++) {
c = fgetc(fileStudent);
}
c = fgetc(fileStudent);
fgets(homeAddress, sizeof(homeAddress), fileStudent);
for (int i = 0; c != ':'; i++) {
c = fgetc(fileStudent);
}
c = fgetc(fileStudent);
fgets(group, sizeof(group), fileStudent);
for (int i = 0; c != ':'; i++) {
c = fgetc(fileStudent);
}
c = fgetc(fileStudent);
fgets(rating, sizeof(rating), fileStudent);
printf("\nСтудент номер %i\nІм'я: %sПрізвище: %sПо батькові: "
"%sДомашня адреса: %sНомер групи: %sРейтинг: %s\n",
number, name, surname, patronymic, homeAddress, group,
rating);
break;
}
stringNumber++;
}
}
fclose(fileStudent);
}
}
}
}