Файл: Лабораторная работа 3 по дисциплине Алгоритмизация и программирование Вариант 2 Студент Ершов Е. М.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 13

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство образования и науки Российской Федерации ФГАОУ ВО «Уральский федеральный университет имени первого Президента России Б.Н. Ельцина» Департамент радиоэлектроники и связи

Работа со структурами

Отчет по лабораторная работа №3 по дисциплине

«Алгоритмизация и программирование»

Вариант № 2

Студент Ершов Е.М.


Роспись студ.

Дата сдачи работы
Гр. РИ-121111 ____15.05.2023__ ___________


Роспись препод.

Дата приема работы
Преподаватель ________________ ___________ Саблина Н.Г.

Екатеринбург 2023

Условие задания

В структуре хранятся следующие сведения о нормах развития детей: возраст, нормативный рост, нормативный вес.
А) Записать в файл таблицу норм.
Б) Выбрать из файла в массив нормы для детей заданного диапазона возрастов (например, от 3 до 6 лет). По введённым данным конкретного ребёнка, определить с помощью этого массива, соответствует ли развитие ребенка нормам.

Постановка задачи №А

Входными данными для данной задачи являются:

  1. Количество детей, для которых нужно записать нормы – натуральное число, вводится с клавиатуры.

  2. Для каждого ребенка: возраст – натуральное число, вводится с клавиатуры; нормативный рост и нормативный вес – вещественные числа, вводятся с клавиатуры.

Выходные данные:

  1. Файл "norms.dat" с записанными нормативными данными.

  2. Содержимое файла "norms.dat", выведенное на экран монитора

Краткое описание метода решения задачи №А

Программа запрашивает у пользователя количество детей и для каждого ребенка запрашивает возраст, нормативный рост и вес. Данные записываются в файл "norms.dat". Затем программа открывает этот файл для чтения и выводит на экран содержимое (возраст, нормативный рост и вес каждого ребенка). Для записи и чтения используются функции записи и чтения двоичных данных из файла (fwrite и fread).


 Схема алгоритма решения задачи приведена на рис. 1



Схема алгоритма задачи №А


Начало



Введите количество детей:





num_children





Открытие файла





Нет

Да

Файл открыт?





i = 1, num_children



Не удалось открыть файл

Введите возраст ребёнка:



3





4

1

child.age






2

Введите нормативный рост ребёнка:



Запись child.age, child.NormHeight, child.NormWeight в файл

3



child.NormHeight





Введите нормативный вес ребёнка:



child.NormWeight





2



4



Закрытие файла





Таблица норм записана в файл 'norms.dat'.





Открытие файла

Файл открыт?



Нет

Да








Нет

Да

7

Файл ещё не закончился?



Не удалось открыть файл



Чтение child.age, child.NormHeight, child.NormWeight из файла



5





Да

Файл закончился?

6





Возраст: child.age, Нормативный рост: child.NormHeight, Нормативный вес: child.NormWeight



Нет

Закрытие файла



6



8



7



8

5

1






Конец


Рис. 1 Схема алгоритма задачи №А

Текст программыА

#include

#include
using namespace std;
struct Child_norms {

unsigned int age; //возраст

float NormHeight; //нормативный рост

float NormWeight; // нормативный вес

};
int main() {

int num_children; // Количество детей, для которых нужно записать нормы

FILE *file;
printf("Введите количество детей: ");

scanf("%d", &num_children);
file = fopen("norms.dat", "w");
if (file == NULL) {

printf("Не удалось открыть файл.\n");

return 1;

}

int i;

Child_norms child, child1;
// Цикл для заполнения и записи норм в файл

for (i = 1; i <= num_children; i++) {

printf("Введите возраст ребенка %d: ", i);

scanf("%u", &child.age);
printf("Введите нормативный рост ребенка %d: ", i);

scanf("%f", &child.NormHeight);
printf("Введите нормативный вес ребенка %d: ", i);

scanf("%f", &child.NormWeight);
fwrite(&child, sizeof(child), 1, file);

}
fclose(file);

printf("\n\nТаблица норм записана в файл 'norms.dat'.");
file = fopen("norms.dat", "r"); // открываем файл для чтения
if (file == NULL) {

printf("Не удалось открыть файл.\n");

return 1;

}
printf("\n\n\nСодержимое файла:\n\n");
while(!feof(file)) {

fread (&child, sizeof(child1), 1, file);

if (feof(file)) break;

printf("Возраст: %u, Нормативный рост: %.1f, Нормативный вес: %.1f\n", child.age, child.NormHeight, child.NormWeight); // выводим на экран

}
fclose(file); // Закрытие файла
return 0;

}

Результаты работы программы №А

Номер набора ИД

Введенное значения количества детей

Возраст, нормативный рост и нормативный вес 1 ребёнка

Возраст, нормативный рост и нормативный вес 2 ребёнка

Возраст, нормативный рост и нормативный вес 3 ребёнка

Возраст, нормативный рост и нормативный вес 4 ребёнка

Содержимое файла

№1

3

2

70

5

5

110

18

9

133.4

27.943

-

Возраст: 2, Нормативный рост: 70.0, Нормативный вес: 5.0

Возраст: 5, Нормативный рост: 110.0, Нормативный вес: 18.0

Возраст: 9, Нормативный рост: 133.4, Нормативный вес: 27.9

№2



















№3



















№4



















№5




















Постановка задачи №Б

Входными данными для данной задачи являются:

1) Диапазон возрастов для поиска норм: минимальный возрастной диапазон и максимальный возрастной диапазон;

2) Данные для проверки развития ребенка: возраст, рост, вес.

Характеристики выходных данных:

1) Нормы для заданного возрастного диапазона;

2) Результат проверки развития ребенка: соответствует нормам или нет.

Краткое описание метода решения задачи №Б

Для решения задачи программа использует структуру ChildNorms, которая хранит информацию о возрасте, росте и весе ребенка. Программа читает данные из файла "norms.dat", который содержит информацию о нормах развития детей для разных возрастов, и ищет нормы для заданного возрастного диапазона и выбранного возраста. Затем программа запрашивает данные для проверки развития ребенка (возраст, рост и вес), находит нормы для заданного возраста и сравнивает их с введенными данными. Если развитие ребенка соответствует нормам, программа выводит сообщение "Развитие ребенка соответствует нормам", в противном случае программа выводит сообщение "Развитие ребенка не соответствует нормам". Для чтения и записи данных в файл используются функции fread() и fwrite().

Схема алгоритма решения задачи приведена на рис. 2

Схема алгоритма задачи №Б


Начало



Программа, определяющая по введённым данным развитие конкретного ребёнка





Введите диапазон возрастов (например, от 3 до 6 лет)



Введите минимальный возрастной диапазон для поиска норм:

age_max

age_min

Введите максимальный возрастной диапазон для поиска норм:



found = 0





Открытие файла





1



1





Нет

Файл открыт?

Да





Ошибка открытия файла



Нормы для заданного возрастного диапазона:





2







Файл ещё не закончился?

4

Да

Нет





Закрытие файла

3





found = 0

Нет

Да





Нормы для заданного возрастного диапазона не найдены





5

6



3





Чтение child.age, child.NormHeight, child.NormWeight из файла





child.age ≥ age_min и child.age age_max



Нет

Да





found = 1





Нормы для возраста child.age:



Вес: child.weight



Рост: child.height









4



6





Введите данные для проверки развития ребенка:





Возраст:





age





Рост:





height





Вес:



weight



found = 0





Открытие файла





Да

Нет

Файл открыт?





Ошибка открытия файла





8

7



8







Нет

Чтение child.age, child.NormHeight, child.NormWeight из файла

Файл ещё не закончился?

Да









Нет

child.age = age



Да

found = 1





Закрытие файла





9



9





Нет

Да

found = 0





Нормы для заданного возрастного диапазона не найдены







height ≥ child.height * 0.9 и height child.height * 1.1 и weight child.weight * 0.9 и weight child.weight * 1.1



Нет

Да







Развитие ребенка соответствует нормам

Развитие ребенка не соответствует нормам



2



7

5





Конец


Рис. 2 Схема алгоритма задачи №Б

Текст программы №Б

#include

#include
struct ChildNorms {

unsigned int age; //возраст

float height; //рост

float weight; //вес

};
int main() {

ChildNorms child;

unsigned int age, age_min, age_max;

float height, weight;
printf("Программа, определяющая по введённым данным развитие конкретного ребёнка\n\n");

printf("Введите диапазон возрастов (например, от 3 до 6 лет)\n");

printf("Введите минимальный возрастной диапазон для поиска норм: ");

scanf("%u", &age_min);

printf("Введите максимальный возрастной диапазон для поиска норм: ");

scanf("%u", &age_max);
int found = 0;

FILE *file = fopen("C:/Qt/project/build-4lr1-Desktop_Qt_5_6_2_MinGW_32bit-Debug/norms.dat", "rb");

if (file == NULL) {

printf("Ошибка открытия файла!");

return 1;

}

printf("\nНормы для заданного возрастного диапазона:\n\n");

while(!feof(file)){

fread(&child, sizeof(child), 1, file);

if (child.age >= age_min && child.age <= age_max) {

found = 1;

printf("Нормы для возраста %u:\n", child.age);

printf("Рост: %.1f\n", child.height);

printf("Вес: %.1f\n\n", child.weight);

}

}
fclose(file);
if (found == 0) {

printf("Нормы для заданного возрастного диапазона не найдены\n");

return 1;

}

printf("\nВведите данные для проверки развития ребенка:\n");

printf("Возраст: ");

scanf("%u", &age);

printf("Рост: ");

scanf("%f", &height);

printf("Вес: ");

scanf("%f", &weight);
found = 0; // сброс флага найденных норм
// находим нормы для выбранного возраста

file = fopen("C:/Qt/project/build-4lr1-Desktop_Qt_5_6_2_MinGW_32bit-Debug/norms.dat", "rb");

if (file == NULL) {

printf("Ошибка открытия файла!");

return 1;

}
while(!feof(file)){

fread(&child, sizeof(child), 1, file);

if (child.age == age) {

found = 1;

break;

}

}
fclose(file);
if (found == 0) {

printf("\nНормы для данного возраста не найдены\n");

return 1;

}
if (height >= child.height * 0.9 && height <= child.height * 1.1 && weight >= child.weight * 0.9 && weight <= child.weight * 1.1) {

printf("\nРазвитие ребенка соответствует нормам\n");

} else {

printf("\nРазвитие ребенка не соответствует нормам\n");

}
return 0;

}
Результаты работы программы №А

Номер набора ИД

Введенное значения количества детей

Возраст, нормативный рост и нормативный вес 1 ребёнка

Возраст, нормативный рост и нормативный вес 2 ребёнка

Возраст, нормативный рост и нормативный вес 3 ребёнка

Возраст, нормативный рост и нормативный вес 4 ребёнка

Содержимое файла

№1

3

2

70

5

5

110

18

9

133.4

27.943

-

Возраст: 2, Нормативный рост: 70.0, Нормативный вес: 5.0

Возраст: 5, Нормативный рост: 110.0, Нормативный вес: 18.0

Возраст: 9, Нормативный рост: 133.4, Нормативный вес: 27.9

№2
















Возраст: 2, Нормативный рост: 70.0, Нормативный вес: 5.0

Возраст: 5, Нормативный рост: 110.0, Нормативный вес: 18.0

Возраст: 9, Нормативный рост: 133.4, Нормативный вес: 27.9

№3
















Возраст: 2, Нормативный рост: 70.0, Нормативный вес: 5.0

Возраст: 5, Нормативный рост: 110.0, Нормативный вес: 18.0

Возраст: 9, Нормативный рост: 133.4, Нормативный вес: 27.9

№4
















Возраст: 2, Нормативный рост: 70.0, Нормативный вес: 5.0

Возраст: 5, Нормативный рост: 110.0, Нормативный вес: 18.0

Возраст: 9, Нормативный рост: 133.4, Нормативный вес: 27.9

№5
















Возраст: 2, Нормативный рост: 70.0, Нормативный вес: 5.0

Возраст: 5, Нормативный рост: 110.0, Нормативный вес: 18.0

Возраст: 9, Нормативный рост: 133.4, Нормативный вес: 27.9