Файл: Лабораторная работа 3 по дисциплине Алгоритмизация и программирование Вариант 2 Студент Ершов Е. М.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.11.2023
Просмотров: 13
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство образования и науки Российской Федерации ФГАОУ ВО «Уральский федеральный университет имени первого Президента России Б.Н. Ельцина» Департамент радиоэлектроники и связи
Работа со структурами
Отчет по лабораторная работа №3 по дисциплине
«Алгоритмизация и программирование»
Вариант № 2
Студент Ершов Е.М.
Роспись студ.
Дата сдачи работы
Гр. РИ-121111 ____15.05.2023__ ___________
Роспись препод.
Дата приема работы
Преподаватель ________________ ___________ Саблина Н.Г.
Екатеринбург 2023
Условие задания
В структуре хранятся следующие сведения о нормах развития детей: возраст, нормативный рост, нормативный вес.
А) Записать в файл таблицу норм.
Б) Выбрать из файла в массив нормы для детей заданного диапазона возрастов (например, от 3 до 6 лет). По введённым данным конкретного ребёнка, определить с помощью этого массива, соответствует ли развитие ребенка нормам.
Постановка задачи №А
Входными данными для данной задачи являются:
-
Количество детей, для которых нужно записать нормы – натуральное число, вводится с клавиатуры. -
Для каждого ребенка: возраст – натуральное число, вводится с клавиатуры; нормативный рост и нормативный вес – вещественные числа, вводятся с клавиатуры.
Выходные данные:
-
Файл "norms.dat" с записанными нормативными данными. -
Содержимое файла "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 |