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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
S2dent
52 / 50 / 6
Регистрация: 10.05.2009
Сообщений: 216
#1

Найти однофамильцев - C++

03.12.2011, 01:52. Просмотров 1384. Ответов 2
Метки нет (Все метки)

Доброй ночи уважаемые эксперты! Нужно найти однофамильцев в двусвязном списке. Есть следующий код:
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
138
139
140
141
142
#include "iostream"
#include <string>
#include <conio.h>
 
using namespace std;
 
class Student {
    string Name;
    string Sername;
    string Patronymic;
    int NumberOfGroup;
public:
    Student *Next;  //указатель на следующий элемент списка
    Student *Pred;  //указатель на предыдущий элемент списка
    Student(string Sername, string Name, string Patronymic, int NumberOfGroup);
    string get_Sername();
    ~Student(){};
friend class DoubleList;
};
 
class DoubleList {
    Student *First; //указатель на первый элемент списка
    Student *Last;  //указатель на последний элемент списка
public:
    DoubleList();
    ~DoubleList() {
        while (First != NULL) {
            Student *tmp = First;
            First = First -> Next;
            delete tmp;
        }
        First = Last = NULL;
    };
    void Add(string Sername, string Name, string Patronymic, int NumberOfGroup);
    void Print();
    void Search();
};
 
Student::Student(string Sername, string Name, string Patronymic, int NumberOfGroup) {
    this -> Sername = Sername;
    this -> Name = Name;
    this -> Patronymic = Patronymic;
    this -> NumberOfGroup = NumberOfGroup;
}
 
string Student::get_Sername() {
    return Sername;
}
 
DoubleList::DoubleList() {
    First = NULL; 
    Last = NULL;
}
 
void DoubleList::Add(string Sername, string Name, string Patronymic, int NumberOfGroup) {
    Student *tmp = new Student(Sername, Name, Patronymic, NumberOfGroup);  //создаем элемент который добавим в список
    if (First == NULL) {
        tmp -> Pred = NULL;
        tmp -> Next = NULL;
        First = tmp;
    }
    else
        Last -> Next = tmp;
    //копируем данные о студенте
    tmp -> Sername = Sername;
    tmp -> Name = Name;
    tmp -> Patronymic = Patronymic;
    tmp -> NumberOfGroup = NumberOfGroup;
    tmp -> Next = NULL;
    tmp -> Pred = Last;
    Last = tmp;
}
 
void DoubleList::Print() {
    Student *tmp = First;
    if (tmp == NULL)
        cout << "The list of students is empty!";
    else {
        while (tmp != NULL) {
            cout << tmp -> Sername << "\t" << tmp -> Name << "\t" << tmp -> Patronymic << "\t" << tmp -> NumberOfGroup << "\t" << "\n";
            tmp = tmp -> Next;
        }
    }
}
 
void DoubleList::Search() {
    Student *tmp;
    while (tmp) {
        if (tmp -> Sername == tmp -> get_Sername()) {
            cout << "\n" << tmp -> Sername << "\t" << tmp -> Name << "\t" << tmp -> Patronymic << "\t" << tmp -> NumberOfGroup;
        }
    }
}
 
void main() {
    string Sername;
    string Name;
    string Patronymic;
    int NumberOfGroup;
    unsigned short int Choose = 0;
    int CountOfStudents = 0;
    DoubleList Students[100];
    
    while (Choose != 4) {
        cout << "Menu: \n"
        << "1. Input information about student \n"
        << "2. Show the list of the students \n"
        << "3. Find namesakes \n"
        << "4. Exit \n"
        << "Input number menu: ";
        cin >> Choose;
        
        switch (Choose) {
            case 1 : {
                cout << "Input sername of the student: ";
                cin >> Sername;
                cout << "Input name of the student: ";
                cin >> Name;
                cout << "Input patronymic of the student: ";
                cin >> Patronymic;
                cout << "Input number of group of the student: ";
                cin >> NumberOfGroup;
                Students[CountOfStudents].Add(Sername, Name, Patronymic, NumberOfGroup);
                CountOfStudents++;
            } break;
        
            case 2 : {
                for (int i = 0; i < CountOfStudents; i++)
                    Students[i].Print();
            } break;
 
            case 3 : {
                for (int i = 0; i < CountOfStudents; i++)
                    Students[i].Search();
            } break;
 
            case 4 : break;
        }
    }
 
    getch();
}
Но программа виснет при поиске, помогите исправить ошибку, заранее огромное спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2011, 01:52     Найти однофамильцев
Посмотрите здесь:

Проверить наличие однофамильцев,вывести соответствующую информацию. C++
C++ как сложить/умножить/найти большее/найти меньшее/найти средние число
Требуется напечатать список класса с указанием для каждого ученика количества его однофамильцев C++
Требуется напечатать список класса с указанием для каждого ученика количества его однофамильцев C++
C++ Напечатать список учеников класса с указанием для каждого ученика количества его однофамильцев
C++ Выдать на экран список всех однофамильцев (примечание: Иванов и Иванова - однофамильцы)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TwiX
60 / 60 / 1
Регистрация: 27.10.2011
Сообщений: 189
03.12.2011, 06:47     Найти однофамильцев #2
Всё не смотрел, но вот тут явно что-то не то:
C++
1
2
3
4
5
6
7
8
9
10
void DoubleList::Search() {
        Student *tmp;
        //tmp не инициализировали, и давай в цикле её смотреть...
        //Плюс, её ещё прибавлять в цикле надо. Что-то вроде tmp=tmp->Next;
        while (tmp) {
                if (tmp -> Sername == tmp -> get_Sername()) {
                        cout << "\n" << tmp -> Sername << "\t" << tmp -> Name << "\t" << tmp -> Patronymic << "\t" << tmp -> NumberOfGroup;
                }
        }
}
S2dent
52 / 50 / 6
Регистрация: 10.05.2009
Сообщений: 216
05.12.2011, 22:30  [ТС]     Найти однофамильцев #3
И снова здравствуйте уважаемые эксперты! Никак не могу разобраться с поиском, вот такая функция у меня получается:
C++
1
2
3
4
5
6
7
8
9
void DoubleList::Search() {
        Student *tmp = First;
        string _Sername = tmp -> get_Sername();
        while (tmp != NULL) {
                if (_Sername == tmp -> Next -> Sername) 
                        cout << "\n" << tmp -> Sername << "\t" << tmp -> Name << "\t" << tmp -> Patronymic << "\t" << tmp -> NumberOfGroup;
                tmp = tmp -> Next;
        }
}
Подскажите, в чем ошибка?
Yandex
Объявления
05.12.2011, 22:30     Найти однофамильцев
Ответ Создать тему
Опции темы

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