Например: Входные данные - 12.01.13 , 30.02.11 . Результат : 12.01.13
Условие всей задачи:
Список сведений о животных в зоопарке. Каждая строка списка содержит наименование вида, пол, дату, необходимую калорийность ежедневного рациона, логический признак - требуется ли содержание в теплом помещении в зимнее время года.
Обеспечить поиск а) самого молодого животного по заданной подстроке наименования вида; б) трех животных заданного пола с наименьшей необходимой калорийностью рациона, требующих переселения на зиму в теплое помещение.
Как будет устроен алгоритм функции под пунктом (а)? Если можно, то лучше кодом.
Код всей программы:
header.h
#include <stdio.h>
#include <string.h>
#include <windows.h>
struct infor_zoo
{
char name[80]; //Наименование вида.
bool pol; //Пол.
char date_of_birth[20]; //Дата рождения.
float kaloriynost; //Необходимая калорийность ежедневного рациона.
bool content_in_winter; //Логический признак - требуется ли содержание в теплом помещении в зимнее время года.
};
void read_struct(struct infor_zoo **x, int *n); // Для считывания структуры.
int menu(); //Для показа меню.
void my_gets(char *x); //Функция для очистки буфера.
int search_1(struct infor_zoo *k, int d);
int search_2(struct infor_zoo *m, int c);
main
#include "header.h"
int main()
{
system("chcp 1251");
system("cls");
struct infor_zoo *animal; //Для хранения информации о животных.
int number_of_animals=0; // Для определения количества животных.
int result_menu = menu(); //Для хранения результата функции menu().
bool flag = false;
do
{
if (result_menu == 2 || result_menu == 3) result_menu = menu();
else flag = true;
}while(!flag);
do
{
if (result_menu == 1)
{
read_struct(&animal,&number_of_animals);
system("pause");
system("cls");
result_menu = menu();
}
if (result_menu == 2)
{
search_1(animal,number_of_animals);
system("pause");
system("cls");
result_menu = menu();
}
if (result_menu == 3)
{
search_2(animal,number_of_animals);
system("pause");
system("cls");
result_menu = menu();
}
}while(result_menu !=4);
free(animal);
system("pause");
return 0 ;
}
void read_struct(struct infor_zoo **x, int *number_of_animals)
{
printf("Введите количество животных : ");
scanf("%i",number_of_animals);
*x= (infor_zoo*) malloc (*number_of_animals * sizeof(infor_zoo));
for (int i = 0; i < *number_of_animals;i++)
{
printf("Введите данные о %i животном: \n",i+1);
printf("Введите имя: ");
my_gets((*x)[i].name);
int b;
printf("Введите пол(1-мужской,0-женский): ");
scanf("%i",&b);
(*x)[i].pol = (b == 1);
printf("Введите дату рождения ДД.ММ.ГГ: ");
my_gets((*x)[i].date_of_birth);
printf("Введите необходимую калорийность: ");
scanf("%f",&(*x)[i].kaloriynost);
int q;
printf("Требуется ли содержание в теплом помещении?(1-да,0-нет): ");
scanf("%i",&q);
(*x)[i].content_in_winter = (q == 1);
}
}
int menu()
{
int q;
do
{
printf("Ввод: 1.\n");
printf("Поиск самого младшего: 2.\n");
printf("Поиск животных требующих переселения: 3.\n");
printf("Выход: 4.\n");
scanf("%i",&q);
system("cls");
if ((q == 1) || (q == 2) || (q == 3) || (q == 4)) return q;
}while((q!=1) && (q!=2) && (q!=3) && (q!=4));
}
void my_gets(char *x)
{
fflush(stdin);
gets(x);
}
int search_1(struct infor_zoo *k, int d)
{
char f[80];//Подстрока наименования вида.
printf("Введите наименование вида: ");
my_gets(f);
int g=0;//Для хранения количества животных совпадающих по признаку наименования вида.
for (int i=0;i<d;i++)
{
if (strcmp(f,k[i].name) == 0) g++;
}
char *buff_name = (char*) malloc (g * sizeof(int));
return 0;
}
int search_2(struct infor_zoo *m, int c)
{
bool flag = true;
for (int i=1;i<=c;i++)
{
if (!m[i].content_in_winter)
{
flag = false;
break;
}
}
if(c >= 3 && flag)
{
bool s=0;//Для хранения пола животного.
float max=0; //Для нахождения максимума
float min1,min2,min3;//Для нахождения минимумов
int b=0;
do
{
printf("Введите пол(1-мужской,0-женский): ");
scanf("%i",&b);
s = (b == 1);
}while((b != 1) && (b != 0));
for (int i=0;i<c;i++)
{
for (int i = 0; i < c; i++)
{
if (m[i].kaloriynost>max && s == m[i].pol)
{
max = m[i].kaloriynost;
}
}
}
min1 = max;
for (int i = 0; i < c; i++)
{
if (m[i].kaloriynost<min1 && s == m[i].pol)
{
min1 = m[i].kaloriynost;
}
}
min2 = max;
min3 = max;
for (int i = 0; i < c; i++)
{
if ((m[i].kaloriynost<min2) && m[i].kaloriynost>min1 && s == m[i].pol)
{
min2 = m[i].kaloriynost;
}
}
for (int i = 0; i < c; i++)
{
if ((m[i].kaloriynost<min3) && m[i].kaloriynost>min2 && s == m[i].pol)
{
min3 = m[i].kaloriynost;
}
}
printf("1 Животное имееет: %f калорийность\n2 Животное имееет: %f калорийность\n3 Животное
имееет: %f калорийность\n",min1,min2,min3);
return 0;
}
else
{
printf("Не выполняется условие работы поиска.\n");
return 0;
}
}