Answer the question
In order to leave comments, you need to log in
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);
#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
#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 questionAsk a Question
731 491 924 answers to any question