Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <math.h>
- #include <time.h> /// библиотека времени
- /*Список сведений о животных в зоопарке. Каждая строка списка
- содержит наименование вида, пол, дату рождения, необходимую
- калорийность ежедневного рациона, логический признак —
- требуется ли содержание в теплом помещении в зимнее время.
- Обеспечить поиск а) самого молодого животного по заданной
- подстроке наименования вида; б) трех животных заданного пола с
- наименьшей необходимой калорийностью рациона, требующих
- переселения на зиму в теплое помещение.*/
- typedef struct zoo {
- char name[20]; // нименование вида
- bool pol; // пол
- tm date; // дата рождения
- int cal; // калорийность в день
- bool winter; // требуется ли теплое помощение
- }zoo;
- // функция для добавления животного
- void add(zoo* pr) {
- int z, x, y; // переменные для временног сохранения
- printf("\nВведите наименование вида животного: ");
- scanf("%19s", pr->name);
- printf("\nВведите пол животного 1 - мужской или 0 - женский: ");
- scanf("%1s", &x);
- pr->pol = (x == 1);
- printf("\nВведите дату рождения (день месяц год): ");
- tm date;
- scanf("%d%d%d", &z, &x, &y);
- date.tm_mon = x; date.tm_year = y; date.tm_mday = z;
- pr->date = date;
- printf("\nВведите каллории требуемые животному в день: ");
- scanf("%d", &pr->cal);
- printf("Требуется ли содержание живтного в теплом помощение(да - 1, нет - 0): ");
- scanf("%d", &x);
- pr->winter = (x == 1);
- printf("\nЖиотное успешно добавлено.\n");
- }
- // функция удаления из спика
- void del(zoo* pr, int count) {
- int n;
- printf("\nВведите номер животного, которое хотите удалить из списка: ");
- scanf("%d", &n);
- n--; // уменьшаем на одно т..к. начинается с 0
- while (n < 0 || n > count) {
- printf("\nТакого номера нет, введите существующий: ");
- scanf("%d", &n);
- n--;
- }
- pr[n] = pr[count]; // последний элемент вставляем на место удаленного
- }
- // вывод таблицы
- void table(zoo* pr, int count) {
- printf("\n\n\nСписок животных:\n");
- printf("Наименование\tПол\tДата\t\tКаллорийность\tПомщение\n");
- for (int i = 0; i < count; i++) {
- printf("%s\t\t%s\t%d.%d.%d г.\t%d\t\t%s\n", pr[i].name, pr[i].pol ? "Женский" : "Мужской", pr[i].date.tm_mday, pr[i].date.tm_mon, pr[i].date.tm_year, pr[i].cal, pr[i].winter ? "Нужно" : "Не нужно");
- }
- }
- // поиск животного которого нужно в помещение и меньше каллорий
- void search_winter_best_cal(zoo* pr, int count) {
- float min1 = 100000, min2 = 100000, min3 = 100000;
- int name1 = -1, name2 = -1, name3 = -1; // выставляем номера
- int x; bool polx;
- printf("Введите пол животного 1 - мужской или 0 - женский: ");
- scanf("%d", &x);
- polx = (x == 1);
- for (int i = 0; i < count; i++) { // начинаем проверку на совпадения
- if (polx != pr[i].pol && pr[i].winter) { // если пол одиннаковый и нужно помощение начинаем сохранение
- if (min1 > pr[i].cal) { // упорядочная система
- min3 = min2; min2 = min1; min1 = pr[i].cal; // находим и создаем порядок далее аналогично
- name3 = name2; name2 = name1; name1 = i;
- }
- else if (min2 > pr[i].cal) {
- min3 = min2; min2 = pr[i].cal;
- name3 = name2; name2 = i;
- }
- else if (min3 > pr[i].cal) {
- min3 = pr[i].cal;
- name3 = i;
- }
- }
- }
- // проверям существуют ли такие животные
- if (name1 == -1 && name2 == -1 && name3 == -1)
- printf("Животных, нет в списке.\n", x);
- else {
- printf("Животные заданного пола с наименьшей необходимой калорийностью рациона, требующих переселения на зиму в теплое помещение:\n");
- printf("1. %s %d\n", pr[name1].name, pr[name1].cal); // выводим первое и смотри есть ли ещё такие, если да, то выводим
- if (name2 != -1)
- printf("2. %s %d\n", pr[name2].name, pr[name2].cal);
- if (name3 != -1)
- printf("3. %s %d\n", pr[name3].name, pr[name3].cal);
- }
- }
- // ищем самого молодого
- void search_best_new_name(zoo* pr, int count) {
- int bestnew = -1; // номер самого молодого
- char name[20]; // иммя
- time_t t = time(NULL);
- struct tm* aTm = localtime(&t); // берем самое малое значение времени
- printf("\nВведите наименование вида животного, которого нужно найти: ");
- scanf("%19s", name);
- for (int i = 0; i < count; i++) {
- if (strcmp(name, pr[i].name) == 0) { // проверка на одиннаковый вид
- // сравниваем кто моложе
- if (pr[i].date.tm_year > aTm->tm_year || (pr[i].date.tm_year == aTm->tm_year && pr[i].date.tm_mon > aTm->tm_mon) || (pr[i].date.tm_year == aTm->tm_year && pr[i].date.tm_mon == aTm->tm_mon && pr[i].date.tm_mday > aTm->tm_mday) || (pr[i].date.tm_year == aTm->tm_year && pr[i].date.tm_mon == aTm->tm_mon && pr[i].date.tm_mday == aTm->tm_mday)) {
- // сохраняем если тот моложе и переписываем значения
- aTm->tm_year = pr[i].date.tm_year; aTm->tm_mon = pr[i].date.tm_mon; aTm->tm_mday = pr[i].date.tm_mday;
- bestnew = i;
- }
- }
- }
- if (bestnew == -1)
- printf("Животного с данных видом нет.");
- else
- printf("Самое молодое животное родилось - %d.%d.%d г.", pr[bestnew].date.tm_mday, pr[bestnew].date.tm_mon, pr[bestnew].date.tm_year);
- }
- // меню программы
- int menu(int count) {
- int use;
- printf("\n\n\t\tМеню\n");
- printf("1. Вывод списка на экран.\n");
- printf("2. Добавить животное в список.\n");
- printf("3. Удалить животное из списка.\n");
- printf("4. Поиск трех животных заданного пола с наименьшей необходимой калорийностью рациона, требующих переселения на зиму в теплое помещение.\n");
- printf("5. Поиск самого молодого животного по наименования вида.\n");
- printf("6. Для выхода из системы.\n");
- if (count == 1) {
- printf("Ваш список пуст добавьте в него продукт.\n");
- return 2;
- }
- else {
- do {
- printf("Введите цифру пункта, который вы желаете выполнить.\n");
- scanf("%d", &use);
- } while (use < 1 || use > 6);
- return use;
- }
- }
- void main() {
- system("chcp 1251");
- int count = 1;
- zoo* pr; // создаем структуру
- pr = (zoo*)malloc(sizeof(zoo) * count); // выделяем память
- while (count != -1) { // запускаем меню
- int i = menu(count);
- switch (i) // вводимое значем
- {
- case 1:
- table(pr, count - 1); // выводим таблицу
- break;
- case 2:
- add(&pr[count - 1]); // добавляем элемент
- count++;
- pr = (zoo*)realloc((void*)pr, sizeof(zoo) * count); // регулируем память
- break;
- case 3:
- del(pr, count - 2); // удаляем элемент
- count--;
- pr = (zoo*)realloc((void*)pr, sizeof(zoo) * count); // регулировка памяти выделенной
- break;
- case 4:
- search_winter_best_cal(pr, count - 1); // находим в помощение
- break;
- case 5:
- search_best_new_name(pr, count); // самый молодой
- break;
- default:
- count = -1;
- break;
- }
- }
- system("pause");
- }
- /*Список сведений о животных в зоопарке. Каждая строка списка
- содержит наименование вида, пол, дату рождения, необходимую
- калорийность ежедневного рациона, логический признак —
- требуется ли содержание в теплом помещении в зимнее время.
- Обеспечить поиск а) самого молодого животного по заданной
- подстроке наименования вида; б) трех животных заданного пола с
- наименьшей необходимой калорийностью рациона, требующих
- переселения на зиму в теплое помещение.*/
Add Comment
Please, Sign In to add comment