Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
8 / 4 / 5
Регистрация: 10.12.2017
Сообщений: 178
1

Структура с информацией о днях рождения друзей

05.11.2018, 18:46. Показов 2853. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, вот у меня такая задача: Ввести набор структур с информацией о днях рождения друзей <Имя>, <Дата рождения> (дата рождения задается символьной строкой День Месяц Год, например 12 июля 1997). Переставить введенные данные так, чтобы они шли в календарном порядке без учета лет. Напечатать упорядоченный список.
И вот не знаю с чего начать и что писать.
Надеюсь на вашу помощь.
Заранее спасибо!

Добавлено через 27 минут
Вот нашёл такой код, но там ошибка, не знаю где.
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
#include <stdio.h>
#include <conio.h>
 
#define col 2  //число хранимых информацию о днях рождения знакомых
//описываем структуру с указанными полями
struct birthday {
 
         char fio[10];  //фИО
         int day;  //день
         char month [10];   // месяц
         int year; //год  
};
 
int main()
 
{
    struct birthday mag2[col];  //массив структур размером, описанным в константе
    for (int n=0; n < col; n++ )  //заполняем массив данными об изделиях
    {
 
        printf("\nFIO\n");
        scanf("%c", &mag2[n].fio);
        printf("\nDay\n");
        scanf("%i", &mag2[n].day); 
        printf("\nMonth\n");
        scanf("%c",&mag2[n].month);
        printf("\nYear\n");
        scanf("%i",&mag2[n].year);
     
    }
    printf("\nVvedite interesujushij vas month\n");         // запрашиваем у пользователя месяц
 
    char s[10];
 
    scanf("%c", &s);
 
    for( int n=0; n<col ; n++)        //в цикле проверяем все поля с именем month и nalichie, и если они соответствуют заданному условию, выводим на экран название изделия и его поизводителя.
 
    if (mag2[n].month == s )    
    {
        printf ("Izdelija ", s);
        printf(" month:\t");
        printf ("%c", mag2[n].fio);
        printf ("%i", mag2[n].day);
        printf ("%i", mag2[n].year);
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2018, 18:46
Ответы с готовыми решениями:

Задача о днях рождения
Найдите а) математическое ожидание, б) дисперсию и в) среднеквадратическое отклонение числа людей...

Напоминалка о днях рождения
Добрый день. Помогите пожалуйста создать напоминалку о днях рождения на c#. Сколько серфил...

Напоминание о днях рождения
На форме есть таблица, где есть записи, включая дату рождения. По нажатию кнопки открывается...

Напоминание о днях рождения за 3 дня
Здравствуйте! Помогите,пожалуйста! Нужно в Memo выводить напоминание о днях рождения сотрудников...

5
Невнимательный
2597 / 974 / 321
Регистрация: 08.02.2013
Сообщений: 5,714
Записей в блоге: 2
05.11.2018, 19:48 2
ошибки там только в том что со строками обращаются как например с char
после пары исправлений запустилось, но выдаёт результат поиска одной строкой,
без каких нибудь пробелов
Кликните здесь для просмотра всего текста

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
#include <stdio.h>
 
#include <string.h>// strcmp()
// добавил
//#include <conio.h>
// fatal error: conio.h: No such file or directory 'linux'
 
#define col 2  //число хранимых информацию о днях рождения знакомых
//описываем структуру с указанными полями
struct birthday {
 
         char fio[10];  //фИО
         int day;  //день
         char month [10];   // месяц
         int year; //год  
};
 
int main()
 
{
    struct birthday mag2[col];  //массив структур размером, описанным в константе
    for (int n=0; n < col; n++ )  //заполняем массив данными об изделиях
    {
 
        printf("\nFIO\n");
        scanf("%s", mag2[n].fio);
        // здесь  было %c и &
        printf("\nDay\n");
        scanf("%i", &mag2[n].day); 
        printf("\nMonth\n");
        scanf("%s",mag2[n].month);
        // здесь  было %c и &
        printf("\nYear\n");
        scanf("%i",&mag2[n].year);
     
    }
    printf("\nVvedite interesujushij vas month\n");         // запрашиваем у пользователя месяц
 
    char s[10];
 
    scanf("%s", s);
     // здесь  было %c и &
 
    for( int n=0; n<col ; n++)        //в цикле проверяем все поля с именем month и nalichie, и если они соответствуют заданному условию, выводим на экран название изделия и его поизводителя.
 
        if(strcmp(mag2[n].month, s) == 0)
//    if (mag2[n].month == s )    закоментировал
    {
        printf ("Izdelija %s", s);
     // здесь  не было %s
        printf(" month:\t");
        printf ("%s", mag2[n].fio);
     // здесь  было %c
        printf ("%i", mag2[n].day);
        printf ("%i", mag2[n].year);
    }
}

А так по хорошему надо сначала решить в каком формате всётаки лучше иметь данные
, сколько символов в ФИО, строка или число должно содержать месяц
и т.п. Совсем не плохо было-бы ещё скармливать этому файл , вместо того чтобы каждый раз ,
пока тестируете вручную набирать кучу данных
типа cat ./file.txt | ./test в линуксе или type .\file.txt | test.exe в виндовс
Цитата Сообщение от Naz17 Посмотреть сообщение
Переставить введенные данные так, чтобы они шли в календарном порядке без учета лет
такого там нет
1
8 / 4 / 5
Регистрация: 10.12.2017
Сообщений: 178
05.11.2018, 20:48  [ТС] 3
ft4l,
Цитата Сообщение от ft4l Посмотреть сообщение
Переставить введенные данные так, чтобы они шли в календарном порядке без учета лет
А как можно это реализовать?
0
Невнимательный
2597 / 974 / 321
Регистрация: 08.02.2013
Сообщений: 5,714
Записей в блоге: 2
05.11.2018, 22:39 4
Возможно проще сделать этот birthday.month всё-таки числовым полем
, это упростит сортировку массива структур.
Но усложняется получение его значения из этого "например 12 июля 1997"

Так-же упростит сортировку например использование массива указателей на структуры,
чем сортировка непосредственно перезаписью данных
Вроде в задании задача просто напечатать, может можно извернуться как-то ещё...
так сразу не приходит в мысли
0
8 / 4 / 5
Регистрация: 10.12.2017
Сообщений: 178
07.11.2018, 22:15  [ТС] 5
Здравствуйте, у меня такая задача: Ввести набор структур с информацией о днях рождения друзей <Имя>, <Дата рождения> (дата рождения задается символьной строкой День Месяц Год, например 12 июля 1997). Переставить введенные данные так, чтобы они шли в календарном порядке без учета лет.+ надо юзать файлы, но как я вообще не пойму.
Надеюсь на вашу помощь!
Заранее спасибо!

Тут я что-то пробовал писать
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
#include <stdio.h>
#include <string.h>
 
 
#define col 5  
 
struct birthday {
    char pib[25];
    char data [30];
};
 
int main() {
    struct birthday mag[col];
    FILE *fp;
    char *fn = "lb8.txt";
    fp = fopen(fn, "r");
 
    if (fp == NULL) {
        printf("Файл %s не найдено\n", fn);
    }
    printf("\npib\n");
    for (int n=0; n < col; n++ )
    {
        fprintf(fp," %s", &mag[n].pib);
    }
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.11.2018, 00:32 6
Лучший ответ Сообщение было отмечено Naz17 как решение

Решение

Чтение из файла, проверка валидности - это сам как-нибудь. А сортировка вот:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int month_by_name(const char * name) {
    static const char * months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec" };
    int i;
    
    for ( i = 0; i < sizeof(months) / sizeof(*months) && strcmp(months[i], name); ++i )
        ;
    
    return i;
}
 
int date_cmp(const char * aDate, const char * bDate) {\
    char aMonthName[4], bMonthName[4];
    int aDay, bDay, aMonth, bMonth;
    
    sscanf(aDate, "%d%3s", &aDay, aMonthName);
    aMonth = month_by_name(aMonthName);
    
    sscanf(bDate, "%d%3s", &bDay, bMonthName);
    bMonth = month_by_name(bMonthName);
    
    return ( aMonth == bMonth ) ? aDay - bDay : aMonth - bMonth;
}
 
struct HOMOSAPIENS {
    char name[64];
    char date[32];
};
 
int compare_by_date(const void * a, const void * b) {
    return date_cmp(((struct HOMOSAPIENS *)a)->date, ((struct HOMOSAPIENS *)b)->date);
}
 
int main(void) {
    struct HOMOSAPIENS people[] = {
        { "Ivan Ivanof", "23 Okt 1978" },
        { "Petr Petrov", "07 Feb 1975" },
        { "Sidor Sidorov", "13 Okt 1980" },
        { "Duncan MacLeod", "28 Feb 1625" },
        { "Obi Wan Kenobi", "01 Jan 1341" },
    };
    int i;
    
    printf("Unsorted:\n");
    for ( i = 0; i < sizeof(people) / sizeof(*people); ++i )
        printf("%s\t%s\n", people[i].name, people[i].date);
    
    qsort(people, sizeof(people) / sizeof(*people), sizeof(*people), compare_by_date);
    
    printf("\nSorted:\n");
    for ( i = 0; i < sizeof(people) / sizeof(*people); ++i )
        printf("%s\t%s\n", people[i].name, people[i].date);
    
    return 0;
}
Код
[andrew@easybook other]$ gcc -Wall sort_by_date.c 
[andrew@easybook other]$ ./a.out 
Unsorted:
Ivan Ivanof	23 Okt 1978
Petr Petrov	07 Feb 1975
Sidor Sidorov	13 Okt 1980
Duncan MacLeod	28 Feb 1625
Obi Wan Kenobi	01 Jan 1341

Sorted:
Obi Wan Kenobi	01 Jan 1341
Petr Petrov	07 Feb 1975
Duncan MacLeod	28 Feb 1625
Sidor Sidorov	13 Okt 1980
Ivan Ivanof	23 Okt 1978
[andrew@easybook other]$
1
08.11.2018, 00:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2018, 00:32
Помогаю со студенческими работами здесь

Напоминания о днях рождения по текущей дате
Ребята, помогите пожалуйста, как сделать напоминания о днях рождения по текущей дате в C++ Builder....

Дни рождения друзей
Всем здравствуйте, помогите пожалуйста с решением задачи, не могу сообразить как решить. Нужно...

программа учёта и информирования о днях рождения личного состава
народ!!!!!помогите с программкой Builder C++ нужно разработать программу учёта и информирования о...

Опишите структуру, содержащую информацию о днях рождения знакомых
Решите задачу на Си Опишите структуру, содержащую информацию о днях рождения знакомых: ФИО;...

Вывести возраст в неделях, днях, минутах и секундах (по дате рождения)
Нужно запросить у пользователя дату рождения. Вывести его возраст в неделях, днях, минутах и...

как убрать напоминания в календаре о днях рождения с facebook (др.соц.сетей)
в помощи win 8 есть вот такой текст но реально :) в операц.системе я не вижу команды...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru