0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 58
1

Задача про знак зодиака (требуется дополнение кода)

15.04.2019, 21:59. Показов 475. Ответов 10

Здравствуйте! Вся проблема начинается на 31 строчке выделеной */*, нужно как то разделить запись данных в структуру для мужского и женского рода, никак не получается написать if -> потоянно какие-то ошибки...

Вот условие, не могу справится с его 2 частью:

Описать структуру с названием ZNAK, что вмещает в себя след. поля:
NAME - фамилия, имя
Zodiac - знак зодиака
BDAY - день рождения (масив из 3 чисел)

Написать программу, что исполняет след. действия:
1) ввод из клавиатуры данных в массив BOOK, что состоит из 8 элементов типа ZNAK;
записи должны быть отсортированы по датам рождения;
2)вывод на экран информации про людей, которые родились под знаком, название которого ввели с клавиатуры;
3)если таких людей нету(которые родились под знаком) выдать на дисплей сообщение об этом.

К описанию структуры ZNAK добавить поле STAT, что вмещает в себя пол человека, и поле FAM, которое вмещает количество детей(для женщин), или свойство службы в армии(для мужчин).
Вывести на экран информацию про людей, которые родились под знаком, название которого ввели с клавиатуры.
Определить общее количество детей у женщин.

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
 
const int N = 256;
const string a("Female"); 
struct Znak
{
    char STAT[N];
    union fam{
    int childs;
    bool mans;};
    char FirstName[N];
    char LastName[N];
    char Zodiac[N];
    int DR[3];
}  BOOK[];
 
void fill(Znak *BOOK, int size)
{
    char S[N];
    for (int i = 0; i < size; i++)
    {
        cout << "FirstName: "; std::cin >> S;
        strcpy(BOOK[i].FirstName, S);
        cout << "LastName: "; std::cin >> S;
        strcpy(BOOK[i].LastName, S);
        cout << "Stat: "; std::cin >> S;
        strcpy(BOOK[i].STAT, S);
        if (strcmp(BOOK[i].STAT, a) == 0)/////////////////////////////////////////////////
        {
            cout << "Fam(children amount): "; std::cin >> S;
            strcpy(BOOK[i].fam.childs, S);
        }
        else 
        {
            cout << "Fam(man's mark): "; std::cin >> S;
            strcpy(BOOK[i].fam.mans, S);
        }///////////////////////////////////////////////////////////////////////////////////////
        cout << "Zodiac: "; std::cin >> S;
        strcpy(BOOK[i].Zodiac, S);
        cout << "Date: " << '\n';
        for (int j = 0; j < 3; j++)
            cin >> BOOK[i].DR[j];
 
        cout << '\n';
    }
}
 
void sort(Znak *BOOK, const int size)
{
    Znak tmp;
    bool bigger;
    for (int k = 0; k < size - 1; k++)
    {
        for (int i = 0, j; i < size - 1; i++)
        {
            bigger = false;
            j = i + 1;
            if (BOOK[i].DR[2] > BOOK[j].DR[2])
                bigger = true;
            else if (BOOK[i].DR[2] == BOOK[j].DR[2])
            {
                if (BOOK[i].DR[1] > BOOK[j].DR[1])
                    bigger = true;
                else if (BOOK[i].DR[1] == BOOK[j].DR[1])
                {
                    if (BOOK[i].DR[0] > BOOK[j].DR[0])
                        bigger = true;
                }
            }
 
            if (bigger)
            {
                tmp = BOOK[i];
                BOOK[i] = BOOK[j];
                BOOK[j] = tmp;
            }
        }
    }
}
 
void print(Znak *BOOK, int N)
{
    for (int i = 0; i < N; i++)
    {
        cout << BOOK[i].FirstName << '\t';
        cout << BOOK[i].LastName << '\t';
        cout << BOOK[i].STAT << '\t';
        cout << BOOK[i].fam << '\t';
        cout << BOOK[i].Zodiac << '\t';
        for (int j = 0; j < 3; j++) cout << BOOK[i].DR[j] << " ";
        cout << "\n";
    }
}
 
void print_znak(Znak *BOOK, int N)
{
    char zodiac[30];
    bool znak = 0;
    cout << "\nEnter zodiac:";
    cin >> zodiac;
    cout << "\n";
    for (int i = 0; i < N; i++)
    {
        if (strcmp(BOOK[i].Zodiac, zodiac) == 0)
        {
            cout << BOOK[i].FirstName << '\t';
            cout << BOOK[i].LastName << '\t';
            cout << BOOK[i].STAT << '\t';
            cout << BOOK[i].fam << '\t';
            cout << BOOK[i].Zodiac << '\t';
            for (int j = 0; j < 3; j++) cout << BOOK[i].DR[j] << " ";
            cout << "\n";
            znak = 1;
        }
 
    }
    if (znak == 0) cout << "\nPeople with this zodiac are missing!\n";
}
 
int main()
{
    const int N = 2;
    Znak var[N];
    fill(var, N);
    print(var, N);
    sort(var, N);
    cout << '\n';
    print(var, N);
    print_znak(var, N);
    system("PAUSE");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2019, 21:59
Ответы с готовыми решениями:

Задача про знак зодиака (Struct, string, union, if)
Здравствуйте! Вся проблема начинается на 31 строчке выделеной */*, нужно как то разделить запись...

Вывести знак зодиака
20. Известно, что астрологи делят год на 12 периодов и каждому из них ставят в соответствие один...

Определить знак зодиака по дате
Введите число и месяц рождения. Определить, под каким знаком зодиака рожден человек в этот день....

Описать структуру - знак зодиака
Описать структуру с именем tsZnak, содержащую следующие поля: -фамилия, имя; -знак Зодиака;...

10
87 / 23 / 8
Регистрация: 30.03.2019
Сообщений: 172
15.04.2019, 22:49 2
ну сперва объяви библиотеку для strcmp
C++
1
<cstring>
Цитата Сообщение от Thumbelina228 Посмотреть сообщение
BOOK[];
Нельзя объявлять объект без без размера.
Цитата Сообщение от Thumbelina228 Посмотреть сообщение
(strcmp(BOOK[i].STAT, a)
Попробуй сравнивать переменные только одного типа, а не char и string

Добавлено через 10 минут
* * int childs;
* * bool mans;};[/quote]
У тебя неправильно названо объединение. Измени и ошибка должна пройти
C++
1
2
3
4
5
union 
    {
        int childs;
        bool mans;
    } fam;
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 58
16.04.2019, 22:05  [ТС] 3
Ничего не поменялось... Как не работало так и не работает... А завтра уже сдавать((
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
 
const int N = 256;
const char a[7] = "Female";
struct ZNAK
{
    char STAT[N];
    union FAM {
        int childs;
        bool mans;
    };
    char FirstName[N];
    char LastName[N];
    char Zodiac[N];
    int DR[3];
}  BOOK[2];
 
void fill(ZNAK *BOOK, int size)
{
    char S[N];
    for (int i = 0; i < size; i++)
    {
        cout << "FirstName: "; std::cin >> S;
        strcpy(BOOK[i].FirstName, S);
        cout << "LastName: "; std::cin >> S;
        strcpy(BOOK[i].LastName, S);
        cout << "Stat: "; std::cin >> S;
        strcpy(BOOK[i].STAT, S);
        if (stricmp(BOOK[i].STAT, a) == 0)
        {
            cout << "Fam(children amount): "; std::cin >> S;
            strcpy(BOOK[i].FAM.childs, S);
        }
        else
        {
            cout << "Fam(man's mark): "; std::cin >> S;
            strcpy(BOOK[i].FAM.mans, S);
        }
        cout << "Zodiac: "; std::cin >> S;
        strcpy(BOOK[i].Zodiac, S);
        cout << "Date: " << '\n';
        for (int j = 0; j < 3; j++)
            cin >> BOOK[i].DR[j];
 
        cout << '\n';
    }
}
 
void sort(ZNAK *BOOK, const int size)
{
    ZNAK tmp;
    bool bigger;
    for (int k = 0; k < size - 1; k++)
    {
        for (int i = 0, j; i < size - 1; i++)
        {
            bigger = false;
            j = i + 1;
            if (BOOK[i].DR[2] > BOOK[j].DR[2])
                bigger = true;
            else if (BOOK[i].DR[2] == BOOK[j].DR[2])
            {
                if (BOOK[i].DR[1] > BOOK[j].DR[1])
                    bigger = true;
                else if (BOOK[i].DR[1] == BOOK[j].DR[1])
                {
                    if (BOOK[i].DR[0] > BOOK[j].DR[0])
                        bigger = true;
                }
            }
 
            if (bigger)
            {
                tmp = BOOK[i];
                BOOK[i] = BOOK[j];
                BOOK[j] = tmp;
            }
        }
    }
}
 
void print(ZNAK *BOOK, int N)
{
    for (int i = 0; i < N; i++)
    {
        cout << BOOK[i].FirstName << '\t';
        cout << BOOK[i].LastName << '\t';
        cout << BOOK[i].STAT << '\t';
        cout << BOOK[i].FAM << '\t';
        cout << BOOK[i].Zodiac << '\t';
        for (int j = 0; j < 3; j++) cout << BOOK[i].DR[j] << " ";
        cout << "\n";
    }
}
 
void print_znak(ZNAK *BOOK, int N)
{
    char zodiac[30];
    bool znak = 0;
    cout << "\nEnter zodiac:";
    cin >> zodiac;
    cout << "\n";
    for (int i = 0; i < N; i++)
    {
        if (strcmp(BOOK[i].Zodiac, zodiac) == 0)
        {
            cout << BOOK[i].FirstName << '\t';
            cout << BOOK[i].LastName << '\t';
            cout << BOOK[i].STAT << '\t';
            cout << BOOK[i].FAM << '\t';
            cout << BOOK[i].Zodiac << '\t';
            for (int j = 0; j < 3; j++) cout << BOOK[i].DR[j] << " ";
            cout << "\n";
            znak = 1;
        }
 
    }
    if (znak == 0) cout << "\nPeople with this zodiac are missing!\n";
}
 
int main()
{
    const int N = 2;
    ZNAK var[N];
    fill(var, N);
    print(var, N);
    sort(var, N);
    cout << '\n';
    print(var, N);
    print_znak(var, N);
    system("PAUSE");
    return 0;
}
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
16.04.2019, 22:32 4

Не по теме:

Цитата Сообщение от Thumbelina228 Посмотреть сообщение
которое вмещает количество детей(для женщин), или свойство службы в армии(для мужчин).
Прям супер корреляция.


Цитата Сообщение от Thumbelina228 Посмотреть сообщение
const int N = 256;
const char a[7] = "Female";
не самый лучший вариант для глобальных переменных.
Цитата Сообщение от Thumbelina228 Посмотреть сообщение
char
лучше строка
Цитата Сообщение от Thumbelina228 Посмотреть сообщение
BOOK[i]
Вектора проходили?
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 58
16.04.2019, 22:38  [ТС] 5
Добавлено через 2 минуты
Цитата Сообщение от Mesteriis Посмотреть сообщение
Прям супер корреляция.
Сам в шоке.
Использовал глобально так как проверял.
Юзал char так как в массиве BOOK, все в чарах.
Цитата Сообщение от Mesteriis Посмотреть сообщение
Вектора проходили?
Не...
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
16.04.2019, 22:40 6
Цитата Сообщение от Thumbelina228 Посмотреть сообщение
Не...
а объяснить препону если что сможешь, просто блин одномерный массив со структурой это тот еще гемор
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 58
16.04.2019, 22:41  [ТС] 7
Думаю да, буду ОЧЕНЬ благодарен
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
16.04.2019, 22:44 8
Цитата Сообщение от Thumbelina228 Посмотреть сообщение
Думаю да, буду ОЧЕНЬ благодарен
Ну тогда делать все равно нечего сейчас перепишу, только красивости и коменты сам напишешь

Добавлено через 1 минуту
Дай пример заполнения для мужчины и женщины
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 58
16.04.2019, 22:47  [ТС] 9
Так пойдет или тебе текстом кинуть?
Миниатюры
Задача про знак зодиака (требуется дополнение кода)  
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
16.04.2019, 22:57 10
Thumbelina228, тип данных DATE знаешь?

Добавлено через 34 секунды
Цитата Сообщение от Thumbelina228 Посмотреть сообщение
Так пойдет или тебе текстом кинуть?
норм, по вопросам лучше в ЛС
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 58
16.04.2019, 22:58  [ТС] 11
Нет
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2019, 22:58

По числу и месяцу вывести знак зодиака
помогите пожалуйста написать алгоритм использования операторов if и switch вместе. цель такая: по...

Вывести знак зодиака, соответствующий дате
Помогите пожалуйста сделать А.Даны два целых числа: D (день месяца) и M (номер месяца в году)....

Вывести знак Зодиака, используя switch
Помогите исправить ошибки, я только начал изучать С++, ещё рак в этом деле, не могу сделать...

Неверный вывод структур знак зодиака
Доброго времени суток! Нуждаюсь в помощи. Необходимо сделать программу, что-то вроде базы данных....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.