Задать вопрос

Как из нескольких дат определить самую большую?

Например: Входные данные - 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;
    }
}
  • Вопрос задан
  • 2509 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@mbllllohok
#include <time.h>
time_t maxt = charToTime((*x)[0].date_of_birth);
maxi = 0;
for (int i = 1; i < *number_of_animals; i = i + 1) {
    time_t = charToTime((*x)[0].date_of_birth);
    if (maxt < t) {
        maxt = t; 
        maxi = i;
    }
}

time_t charToTime(char date[]) {
    date[2] = date[5] = '\0';
    struct tm tmdate = {0};
    tmdate.tm_mday= atoi(&date[0]);
    tmdate.tm_mon = atoi(&date[3]) - 1;
    tmdate.tm_year = atoi(&date[6]);
    return mktime( &tmdate );
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы