Форум программистов, компьютерный форум CyberForum.ru

Какая реализация возможна и удобнее? - C++

Восстановить пароль Регистрация
 
кверти
4 / 4 / 1
Регистрация: 22.09.2013
Сообщений: 133
Завершенные тесты: 2
30.03.2014, 16:32     Какая реализация возможна и удобнее? #1
Есть структура состоящая из нескольких полей .
C++
1
2
3
4
5
6
7
8
struct infor_zoo 
{
    char name[80]; // Имя.
    bool pol;  // Пол.
    char date_of_birth[20]; // Дата рождения.
    float kalloriynost; // Необходимая калорийность ежедневного рациона.
    bool logical_tag; // Логический признак - требуется ли содержание в теплом помещении в зимнее время года.
};
В дальнейшем требуется определить самое молодое существо с помощью даты рождения заданной пользователем.

Вот поле для этого.
C++
1
    char date_of_birth[20]; // Дата рождения.
Подскажите как реализовать этот поиск с использованием строк. Формат даты: (число, месяц(вводится буквами), год)

Ниже весь код программы(реализации этого поиска пока-что нету, но будет храниться в void search(); // Поиск животного подходящего условию.)

header.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <windows.h>
 
struct infor_zoo 
{
    char name[80]; // Имя.
    bool pol;  // Пол.
    char date_of_birth[20]; // Дата рождения.
    float kalloriynost; // Необходимая каллорийность ежедневного рациона.
    bool logical_tag; // Логический признак - требуется ли содержание в теплом помещении в зимнее время года.
};
void read_struct(struct infor_zoo *x, int n); // Для считывания структуры.
int menu(); // Для показа меню.
void search(); // Поиск животного подходящего условию.
main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "header.h"
 
int main()
{ 
    SetConsoleOutputCP(1251);
 
    int number_of_animals; // Для определения количества животных .
    struct infor_zoo *animal; //Для хранения информации о животных.
    int result_menu = menu(); //Для хранения результата функции menu().
 
    if (result_menu == 3) return 0 ;
 
    printf("Введите количество животных : ");
    scanf("%i",&number_of_animals);
    animal= (infor_zoo*) malloc (number_of_animals * sizeof(infor_zoo));
 
    if (result_menu == 1) read_struct(animal,number_of_animals);
    if (result_menu == 2) search();
 
    system("pause");
    return 0 ;
}
void read_struct(struct infor_zoo *x, int n)
{
    for (int i = 0; i < n;i++)
    {
        printf("Введите данные о %i животном: \n",i+1);
 
        printf("Введите имя: ");
        gets(x[i].name);
        if (strlen(x[i].name) == 0) gets(x[i].name);
 
        int b;
        printf("Введите пол(1-мужской,0-женский): ");
        scanf("%i",&b);
        x[i].pol = (b == 1);
 
        printf("Введите дату рождения ДД.ММ.ГГ: ");
        gets(x[i].date_of_birth);
        if (strlen(x[i].date_of_birth) == 0) gets(x[i].name);
 
        printf("Введите необходимую каллорийность: ");
        scanf("%f",&x[i].kalloriynost);
 
        int q;
        printf("Введите логический признак: ");
        scanf("%i",&q);
        x[i].logical_tag = (q == 1);
    }
}
int menu()
{
    int q;
    printf("Введите 1 чтобы перейти в режим ввода.\n");
    printf("Введите 2 чтобы перейти в режим сортировки.\n");
    printf("Введите 3 чтобы выйти из программы.\n");
    scanf("%i",&q);
 
    system("cls");
    if (q == 1) return 1;
    if (q == 2) return 2;
    if (q == 3) return 3;
    if (q != 1 && q!= 2 && q!=3) return menu();
}
void search()
{...}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
30.03.2014, 17:11     Какая реализация возможна и удобнее? #2
Ну если вы хотите хранить всю дату в одном массиве char, то, наверно, надо проинформировать пользователя о том, как эти поля должны быть разделены в массив. На основе символа разделителя осуществить поиск каждому полю (число, месяц, год). Для месяцев надо предусмотреть числовые соответствия, с целью использования с операцией "<" при поиске самого молодого. Организовать поиск итерационно:
1) самый молодой = об0
2) для і=1 до Н
3. если (об(і).год < об(і-1).год) то самый молодой = об(і)
4. если (об(і).год == об(і-1).год) и (об(і).месяц < об(і-1).месяц) то самый молодой = об(і)
5. если (об(і).год == об(і-1).год) и (об(і).месяц == об(і-1).месяц) и (об(і).день< об(і-1).день) то самый молодой = об(і)

Если сделать отдельно 3 поля под число, месяц, год, то потребность в их разделении потом отпадает.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
30.03.2014, 17:19     Какая реализация возможна и удобнее? #3
Можно сформировать строки вида
ггггммчч
Тогда задача решится просто сортировкой по возрастанию.
кверти
4 / 4 / 1
Регистрация: 22.09.2013
Сообщений: 133
Завершенные тесты: 2
30.03.2014, 17:26  [ТС]     Какая реализация возможна и удобнее? #4
Я правильно понял?
Пример:
2013.02.14
2014.01.01

Сначала сравниваем первые элементы (думаю лучше это делать по кодам символов 48-57 ) . Дальше смотрим если они = , то смотреть вторые элементы , если они не равны то выбрать наибольший и это будет самое младшее животное?
Yandex
Объявления
30.03.2014, 17:26     Какая реализация возможна и удобнее?
Ответ Создать тему
Опции темы

Текущее время: 01:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru