B
B
Bafelka2014-05-13 08:08:15
Data Structures
Bafelka, 2014-05-13 08:08:15

How to determine the largest of several dates?

For example: Input data - 01/12/13 , 02/30/11 . Result : 01/12/13
Condition of the whole task:
List of information about animals in the zoo. Each line of the list contains the name of the species, gender, date, the required calorie content of the daily diet, a logical sign - whether it is required to keep in a warm room in the winter season.
Provide search for a) the youngest animal in the given substring of the species name; b) three animals of a given sex with the lowest required calorie content of the diet, requiring relocation to a warm room for the winter.
How will the algorithm of the function under item (a) be arranged? If possible, it is better to code.
Whole program code:
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;
    }
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
mbllllohok, 2014-05-13
@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 );
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question