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

Описать структуру с именем ZNAK - C++

Восстановить пароль Регистрация
 
Nadia Trofimova
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 25
02.12.2013, 21:19     Описать структуру с именем ZNAK #1
Здравствуйте! Поставлена такая задача:
Описать структуру с именем ZNAK, содержащую следующие поля:
• фамилия, имя;
• знак Зодиака;
• день рождения (структура из трех полей).
Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из n элементов типа ZNAK;
• вывод данных массива структур на экран;
• сортировку записей по датам дней рождения;
• поиск информации о человеке по фамилии (передается параметром); если такого нет, выдать соответствующее сообщение.

Соображения по этому поводу:
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
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <string>
 
using namespace std;
 
 
 
struct znak
{
char* name;
char* zodiac;
int bday[3];
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const int n=8;
    
char* s;
    int tmp;
    
    znak book[n];
    
    for (int i = 0; i < n; i++)
    {
        cout << "Введите Ф.И.О" << endl;
        cin >> book[i].name;
        cout << "Введите знак зодиака"<< endl;
        cin >> book[i].zodiac;
        for (int j = 0; j<3; j++)
        {
            cout << "Введите дату рождения"<<j+1<<"-ого человека"<< endl;
            cin >> book[i].bday[j];
        }
    }
    for (int i=n-1; i > n; i--){
        for (int j = 0; j<3; j++){
        if (book[i].bday[j]>book[i].bday[j+1]) 
        {
            tmp = book[i].bday[j];
            book[i].bday[j] = book[i].bday[j+1];
            book[i].bday[j] = tmp;
            }
        }
    }
 
    cout << "Введите Ф.И.О. которое хотите вывести:" << endl;
     cin >> s;
     for (int i = 0; i < n; i++) {
                if (s == book[i].name) {
                    cout <<book[i].name << "\n" << endl;
                    cout <<book[i].zodiac << "\n" << endl;
                    for (int j = 0; j < n; j++){
                            cout << book[i].bday[j] << "\n" << endl;
                    }
                }
                else 
                    cout << "Таких нет." << endl;
     }
 
    system("pause");
}
Была бы благодарна за указание на ошибки, особенно проблема есть с переменной s... Задача, вроде, типичная, но к сожалению никак не пойму её до конца. После того, как разберусь с кодом, разобью на функции...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 21:19     Описать структуру с именем ZNAK
Посмотрите здесь:

C++ Описать структуру с именем ZNAK
C++ Описать структуру с именем ZNAK
C++ Описать структуру с именем ZNAK
Описать структуру с именем Znak C++
C++ Описать структуру с именем ZNAK
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
02.12.2013, 22:02     Описать структуру с именем ZNAK #2
char* name;
Если используются указатели (char*), то необходимо new[] и delete[].
Другой вариант - вместо char* использовать char[]
C++
1
2
const int MAX = 100;
char name[MAX] = {};
C++
1
2
 // if (s == book[i].name)  // Здесь ошибка.
 if ( strcmp(s, book[i].name)  )
Ещё один вариант - вместо char* или char[] использовать std::string.
Nadia Trofimova
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 25
03.12.2013, 16:04  [ТС]     Описать структуру с именем ZNAK #3
Благодарю)
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
03.12.2013, 16:48     Описать структуру с именем ZNAK #4
Цитата Сообщение от Alex5 Посмотреть сообщение
if ( strcmp(s, book[i].name) )
Извините. Здесь тоже ошибка.
Если строки равны, то strcmp() возвращает 0. Вот так правильно:
C++
1
if ( strcmp(s, book[i].name) == 0 ) // если строки равны ...
Или так:
C++
1
if ( ! strcmp(s, book[i].name) ) // если строки равны ...
Nadia Trofimova
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 25
04.12.2013, 09:37  [ТС]     Описать структуру с именем ZNAK #5
Благодарю!)

Добавлено через 15 часов 17 минут
Такс, ну теперь вопрос будет поставлен сложнее)
Снова нужна помощь.
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
#include<iostream>
#include<cstring>
 
using namespace std;
 
struct date
{
    int day;
    int month;
    int year;
};
 
 
 
 
struct ZNAK
{
    char* name;
    char* zodiac;
    date bday;
};
 
 
 
 
ZNAK*Mem(int n)
{
    ZNAK* book;
    book = new ZNAK [n];
    return book;
}
 
void In_mas_struct (ZNAK*&book,int&n)
{
 
    for (int i = 0; i < n; i++)
    {
        cout << "Введите Ф.И.О" << endl;
        cout <<book+i*sizeof ZNAK<< endl;
        cin >> book[i].name;
        cout << "Введите знак зодиака"<< endl;
        cin >> book[i].zodiac;
 
 
        cout << "Введите дату рождения"<<i<<"-ого человека"<< endl;
        cin >> book[i].bday.day;
        cin >> book[i].bday.month;
        cin >> book[i].bday.year;
 
    }
}
 
void Out_mas_struct(ZNAK*&book,int&n)
{
    for (int i = 0; i < n; i++)
    {
        cout << " Ф.И.О" << endl;
        cout <<book+i*sizeof ZNAK<< endl;
        cout << book[i].name;
        cout << "Знак зодиака"<< endl;
        cout<< book[i].zodiac;
 
 
        cout << "Дата рождения"<<i<<"-ого человека"<< endl;
        cout<< book[i].bday.day;
        cout<< book[i].bday.month;
        cout<< book[i].bday.year;
 
    }
}
 
void Search(ZNAK*&book,int&n, char* s,ZNAK*&book1,int&n1)
{
    int j=0;
    n1=0;
    for (int i = 0; i < n; i++) {
        if ( strcmp(s, book[i].name)  )
        {   cout <<book[i].name << "\n" << endl;
        cout <<book[i].zodiac << "\n" << endl;
 
 
        cout << book[i].bday.day << "\n" << endl;
        cout << book[i].bday.month << "\n" << endl;
        cout << book[i].bday.year << "\n" << endl;
 
        book1[n1]=book[i];
        n1++;
        }
    }
 
 
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const int N=4;
    int n;
    char * s;
    int n1;
    ZNAK*book;
    ZNAK*book1;
 
    do{
 
            cout << "Введите n пределах N("<< N <<"):"  << endl;
            cin >> n;
 
        } while(n<=0 || n>N);
 
 
    
 
    Mem(n);
    In_mas_struct (book,n);
    Out_mas_struct(book,n);
 
 
    cout << "Введите Ф.И.О. которое хотите вывести:" << endl;
    cin >> s;
    
    Search(book,n,s,book1,n1);
        if(n1==0)
            cout << "Таких данный нет" << endl;
            
        return 0;
}
Проблема с переменной s, и с book.
Функцию удаления памяти ещё не успела добавить)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2013, 22:06     Описать структуру с именем ZNAK
Еще ссылки по теме:

C++ Описать структуру с именем ZNAK
C++ Описать структуру с именем ZNAK

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

Или воспользуйтесь поиском по форуму:
Nadia Trofimova
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 25
04.12.2013, 22:06  [ТС]     Описать структуру с именем ZNAK #7
Спасибо за подборку, но меня всё-таки интересует именно моя проблема. У меня структура, и для реализации прораммы мне нужно использовать функции и динмаическую память)
Yandex
Объявления
04.12.2013, 22:06     Описать структуру с именем ZNAK
Ответ Создать тему
Опции темы

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