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

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

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

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

03.12.2011, 01:52. Просмотров 1429. Ответов 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++
Существует структура &quot;студент&quot; в ней есть информация о студентах: фамилия,имя,средний балл,группа и дата рождения.Проверить наличие...

Выдать на экран список всех однофамильцев (примечание: Иванов и Иванова - однофамильцы) - C++
подскажите как найти однофамильцев в базе (case 6)?? я додумался только как сравнивать первые буквы, а не все слово, но выводит оно их...

Напечатать список класса с указанием для каждого ученика количества его однофамильцев - 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;
        }
}
Подскажите, в чем ошибка?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2011, 22:30
Привет! Вот еще темы с ответами:

Найти однофамильцев в файле - Delphi
Дан файл (НЕ типизированный !!! ) содержащий сведения - фамилия, имя, курс. вывести в новый файл ВСЕХ однофамильцев. Иванов и Иванова...

Трубется найти однофамильцев. - Pascal ABC
Создать базу данных.Запись базы данных содержит: фамилию,имя,отчество,заработную плату,стаж.Вывести на экран сотдруников со стажен больше...

Найти однофамильцев в группе - Turbo Pascal
Список студентов группы представлен в виде массива записей, компоненты которых - фамилия и имя - строкового типа. Найти однофамильцев в...

поиск однофамильцев - Pascal
Помогите пожалуйста решить эту задачку... Спасибо... Написать программу-поиск однофамильцев, обучающихся в одном каком-нибудь классе.


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

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

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