55 / 53 / 24
Регистрация: 10.05.2009
Сообщений: 216
1

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

03.12.2011, 01:52. Показов 3348. Ответов 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();
}
Но программа виснет при поиске, помогите исправить ошибку, заранее огромное спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2011, 01:52
Ответы с готовыми решениями:

Проверить наличие однофамильцев,вывести соответствующую информацию.
Существует структура &quot;студент&quot; в ней есть информация о студентах: фамилия,имя,средний балл,группа и...

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

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

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

2
60 / 60 / 10
Регистрация: 27.10.2011
Сообщений: 185
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;
                }
        }
}
0
55 / 53 / 24
Регистрация: 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;
        }
}
Подскажите, в чем ошибка?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2011, 22:30
Помогаю со студенческими работами здесь

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

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

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

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

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

Отсортировать однофамильцев
Можете плиз помочь как скажем так отсортировать однофамильцев мне нада сделать так что если есть...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru