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

Зацикливается. Надо исправить - C++

Восстановить пароль Регистрация
 
Adamaras
 Аватар для Adamaras
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 18
03.07.2013, 18:56     Зацикливается. Надо исправить #1
Программу я пишу очень известную здесь на форуме:
Описать структуру с именем ZNAK, содержащую следующие поля:
  • Фамилия, имя;
  • Знак Зодиака;
  • Дата рождения (массив из трёх чисел).
Написать программу, выполняющую следующие действия (действия оформить в виде подпрограмм):
  • Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <string.h>
#include <conio.h>
#include <locale.h>
using namespace std;
 
 
struct znak {
    char surname[20];
    char name[20];
    char astrosign[20];
    int birthday[3];
};
 
void NotFound() {
     setlocale(LC_ALL, "Russian");
     cout << "В списке нет людей, родившихся в этом месяце!";
}
 
int Search (znak arr[], int num, int xx) {
    setlocale(LC_ALL, "Russian");
    bool astrosign1 = false;
    for (int i = 0; i < num; i++) {
        astrosign1 = false;
        if (arr[i].birthday[1] == xx) {
            astrosign1 = true;
            cout << "Человек №" << i + 1 <<": " << endl;
            cout << arr[i].surname << " " << arr[i].name << endl;
            cout << arr[i].birthday[0] << "." << arr[i].birthday[1] << "." << arr[i].birthday[2] << endl;
            cout << "Знак зодиака: " << arr[i].astrosign << endl;
            cout << endl;
        }
        if (astrosign1 == false) NotFound();
    };
    return astrosign1;
}
 
void main() {
    setlocale(LC_ALL, "Russian");
    int n, i, xx;
    bool astrosign1 = true;
    cout << "================================================" << endl;
    cout << "                  ЗНАКИ ЗОДИАКА" << endl;
    cout << "================================================" << endl;
    cout << "Ввод данных - латиницей. Примеры знаков зодиака: \n"
            "                 Овен - Oven\n"
            "                Телец - Telec\n"
            "             Близнецы - Bliznecy\n"
            "                  Рак - Rak\n"
            "                  Лев - Lev\n"
            "                 Дева - Deva\n"
            "                 Весы - Vesy\n"
            "             Скорпион - Skorpion\n"
            "              Стрелец - Strelec\n"
            "              Козерог - Kozerog\n"
            "              Водолей - Vodolej\n"
            "                 Рыбы - Ryby" << endl << endl;
    cout << "Введите количество человек: "; cin >> n ; cout <<"\n";
    znak *arr = new znak[n];
    for (i = 0; i < n; i++) {
        cout << "Человек №" << i + 1 <<": " << endl;
        cout << "      Введите фамилию: ";
        cin >> arr[i].surname;
        cout << "          Введите имя: ";
        cin >> arr[i].name;
        cout << " Введите знак Зодиака: " ;
        cin >> arr[i].astrosign;
        cout << "Введите дату рождения: " << endl;
        cout << "                 День: ";
        cin >> arr[i].birthday[0];
        cout << "                Месяц: ";
        cin >> arr[i].birthday[1];
        cout << "                  Год: ";
        cin >> arr[i].birthday[2];
        cout << "\n\n";
    }
    cout << "Введите номер месяца: ";
    cin >> xx;
    Search(arr, n, xx);
    cout << "\n";
    system("pause");
    return;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 18:56     Зацикливается. Надо исправить
Посмотрите здесь:

C++ Нужна помощь мож что то надо исправить.
народ помогите пож-та, надо аттестацию исправить))) C++
C++ надо исправить ошибку
программа которая переводит введенные числа в буквенную начертанию (надо немного исправить) C++
C++ Надо исправить программу, пожалуйста. Задание: заменить заданное слово в строке другим заданным словом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2013, 19:38     Зацикливается. Надо исправить #2
Цитата Сообщение от Adamaras Посмотреть сообщение
Так вот, прога зацикливается. Что не так?
Если поискать, в каком месте зацикливается?

Добавлено через 13 минут
У меня не зацикливается, только исправьте поиск, а то ложное сообщение выводит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Search (znak arr[], int num, int xx) 
{
    setlocale(LC_ALL, "Russian");
    bool astrosign1 = false;
    for (int i = 0; i < num; i++) 
    {
        //strosign1 = false;
        if (arr[i].birthday[1] == xx) 
        {
            astrosign1 = true;
            cout << "Человек №" << i + 1 <<": " << endl;
            cout << arr[i].surname << " " << arr[i].name << endl;
            cout << arr[i].birthday[0] << "." << arr[i].birthday[1] << "." << arr[i].birthday[2] << endl;
            cout << "Знак зодиака: " << arr[i].astrosign << endl;
            cout << endl;
        }
        
    };
    if (astrosign1 == false) NotFound();
    
}
denusko
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 2
03.07.2013, 19:43     Зацикливается. Надо исправить #3
все работает, MVS2010
Adamaras
 Аватар для Adamaras
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 18
03.07.2013, 20:22  [ТС]     Зацикливается. Надо исправить #4
О! Спасибо! =) Теперь и не зацикливается и сообщение как раз назойливое убралось! =) Спасибо!

Добавлено через 33 минуты
Да, ещё хотел спросить, как в данном коде сделать, чтобы записи упорядочивались по знакам Зодиака?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2013, 21:24     Зацикливается. Надо исправить #5
Цитата Сообщение от Adamaras Посмотреть сообщение
Да, ещё хотел спросить, как в данном коде сделать, чтобы записи упорядочивались по знакам Зодиака?
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
#include <iostream>
#include <string.h>
#include <conio.h>
#include <locale.h>
using namespace std;
 
struct znak 
{
    char surname[20];
    char name[20];
    char astrosign[20];
    int birthday[3];
};
 
void NotFound() 
{
     setlocale(LC_ALL, "Russian");
     cout << "В списке нет людей, родившихся в этом месяце!";
}
 
void Search (znak arr[], int num, int xx) 
{
    bool astrosign1 = false;
    for (int i = 0; i < num; i++) 
    {
        if (arr[i].birthday[1] == xx) 
        {
            astrosign1 = true;
            cout << "Человек №" << i + 1 <<": " << endl;
            cout << arr[i].surname << " " << arr[i].name << endl;
            cout << arr[i].birthday[0] << "." << arr[i].birthday[1] << "." << arr[i].birthday[2] << endl;
            cout << "Знак зодиака: " << arr[i].astrosign << endl;
            cout << endl;
        }
        
    };
    if (astrosign1 == false) NotFound();
}
 
void Sorting (znak arr[], int num) 
{
    znak temp;
    for (int i = 0; i < num - 1; i++) 
    {
        for (int j = 0; j < num - 1; ++j)
        {
            if (strcmp(arr[j].astrosign, arr[j + 1].astrosign) > 0) 
            {
                temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    cout << "Массив отсортирован!\n\n";
}
 
void Show(znak arr[], int num)
{
    for (int i = 0; i < num; i++) 
    {
        cout << "Человек №" << i + 1 <<": " << endl;
        cout << arr[i].surname << " " << arr[i].name << endl;
        cout << arr[i].birthday[0] << "." << arr[i].birthday[1] << "." << arr[i].birthday[2] << endl;
        cout << "Знак зодиака: " << arr[i].astrosign << endl;
        cout << endl;
    }
}
 
void main() 
{
    setlocale(LC_ALL, "Russian");
    int n, i, xx;
    bool astrosign1 = true;
    cout << "================================================" << endl;
    cout << "                  ЗНАКИ ЗОДИАКА" << endl;
    cout << "================================================" << endl;
    cout << "Ввод данных - латиницей. Примеры знаков зодиака: \n"
            "                 Овен - Oven\n"
            "                Телец - Telec\n"
            "             Близнецы - Bliznecy\n"
            "                  Рак - Rak\n"
            "                  Лев - Lev\n"
            "                 Дева - Deva\n"
            "                 Весы - Vesy\n"
            "             Скорпион - Skorpion\n"
            "              Стрелец - Strelec\n"
            "              Козерог - Kozerog\n"
            "              Водолей - Vodolej\n"
            "                 Рыбы - Ryby" << endl << endl;
    cout << "Введите количество человек: "; cin >> n ; cout <<"\n";
    znak *arr = new znak[n];
    for (i = 0; i < n; i++) {
        cout << "Человек №" << i + 1 <<": " << endl;
        cout << "      Введите фамилию: ";
        cin >> arr[i].surname;
        cout << "          Введите имя: ";
        cin >> arr[i].name;
        cout << " Введите знак Зодиака: " ;
        cin >> arr[i].astrosign;
        cout << "Введите дату рождения: " << endl;
        cout << "                 День: ";
        cin >> arr[i].birthday[0];
        cout << "                Месяц: ";
        cin >> arr[i].birthday[1];
        cout << "                  Год: ";
        cin >> arr[i].birthday[2];
        cout << "\n\n";
    }
    
    Show(arr, n);
    Sorting(arr, n);
    Show(arr, n);
    cout << "Введите номер месяца: ";
    cin >> xx;
    Search(arr, n, xx);
    cout << "\n";
    
    system("pause");
    return;
}
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
03.07.2013, 21:26     Зацикливается. Надо исправить #6
Цитата Сообщение от Adamaras Посмотреть сообщение
Да, ещё хотел спросить, как в данном коде сделать, чтобы записи упорядочивались по знакам Зодиака?
почему бы вам не использовать ассоциативный контейнер map, все равно программа простенькая и сверх вычислений не требует. Если будете всё таки использовать map то добавляйте в значение ключа порядковый номер знака зодиака (для сортировки по месяцу а не по алфавиту)
Yandex
Объявления
03.07.2013, 21:26     Зацикливается. Надо исправить
Ответ Создать тему
Опции темы

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