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

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

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

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

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

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

Напечатать список класса с указанием для каждого ученика количества его однофамильцев - C++
В символьном массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список класса с указанием для каждого ученика...

Требуется напечатать список класса с указанием для каждого ученика количества его однофамильцев - C++
В символьном массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список класса с указанием для каждого ученика...

Напечатать список учеников класса с указанием для каждого ученика количества его однофамильцев - C++
В символьном массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список учеников класса с указанием для каждого...

Требуется напечатать список класса с указанием для каждого ученика количества его однофамильцев - C++
В символьном массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список класса с указанием для каждого ученика...

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

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

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

Отсортировать однофамильцев - Turbo Pascal
Можете плиз помочь как скажем так отсортировать однофамильцев мне нада сделать так что если есть однофамильцы то выводило одну фамилию а не...

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

Поиск однофамильцев - MS Access
Здравствуйте! Обращаюсь к вам за помощью. У меня имеется таблица с Именами и Фамилиями(в одном поле).Мне нужно создать форму,в которую...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
        }
}
Подскажите, в чем ошибка?
Ответ Создать тему
Опции темы

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