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

Написать метод. - C++

Восстановить пароль Регистрация
 
Actimel
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 43
16.01.2012, 14:14     Написать метод. #1
Здравствуйте. Помогите пожалуйста. Необходимо дописать метод, который ищет студентов у которых есть неудовлетворительные оценки. Да, и оценки почему то тоже не привильно вводятся, то есть выводит что то непонятное.
Вот мой код:
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Student{
public:
 Student(){
 name = "";
 firstname = "";
 age = "";
 }
 Student(string imya, string fam, string vozr){
 name = imya;
 firstname = fam;
 age = vozr;
 }
 bool Ravno(string fam){
 if(this->firstname == fam)
 return true;
 else
 return false;
 }
 void Print()
 {
 cout<<"\n name "<<name
 <<"\n firstname "<<firstname
 <<"\n age "<<age<<"\n marks";
 for (int j=0;j<5;j++)
     cout<<marks[j];
 }
private:
 string name;
 string firstname;
 string age;
 int marks[5];
};
class Group{
public:
 Group(){
 student;
 next = NULL;
 prev = NULL;
 }
 Group* First(Student b){
 Group* pv = new Group;
 pv->student = b; 
pv->next = NULL; 
pv->prev = NULL;
 return pv;
 }
 void Add(Group** pend, Student b){
 Group* pv = new Group;
 pv->student = b;
 pv->next = NULL;
 pv->prev = *pend; 
(*pend)->next = pv;
 *pend = pv; 
}
 Group* Find(Group* const pbeg, string b)
 {
 Group* pv = pbeg;
 while (pv)
 {
 if (pv->student.Ravno(b))
 break;
 pv = pv->next;
 }
 return pv;
 }
 void Print_lib(Group* const pbeg){
 Group* pv = new Group;
 pv = pbeg;
 while (pv){
 pv->student.Print();
 pv = pv->next;
 }
 }
 void Remove(Group** pbeg, Group** pend, string b)
 {
 Group* pstudent; 
if (pstudent = Find(*pbeg, b))
 {
 if (pstudent == *pbeg)
 {
 *pbeg = (*pbeg)->next; 
(*pbeg)->prev = NULL;
 }
 else
 if (pstudent == *pend)
 {
 *pend = (*pend)->prev;
 (*pend)->next = NULL;
 }
 else
 {
 pstudent->prev->next = pstudent->next;
 pstudent->next->prev = pstudent->prev;
 }
 delete pstudent;
 }
 else
 cout<<"Student "<<b<<" ne nayden\n";
 }
private:
 Student student;
 Group* next;
 Group* prev;
};
int _tmain(int argc, _TCHAR* argv[])
{
 Group* pbeg = NULL;
 Group* pend = NULL;
 Group Gr;
 int kol_vo;
 cout<<"Vvedite kol-vo studentov: ";
 cin>>kol_vo;
 string name, fam, age, marks[5];
 for (int i = 0; i < kol_vo; i++){
 cout<<"Vvedite imya: ";
 cin>>name;
 cout<<"Vvedite familiyu: ";
 cin>>fam;
 cout<<"Vvedite vozrast: ";
 cin>>age;
 
     cout<<"Vvedite ocenki"<<"\n";
     {
 for (int j=0; j<5; j++)
     cin>>marks[i];
 }
 
 Student student(name, fam, age);
 if(!pbeg){
 pbeg = Gr.First(student);
 pend = pbeg;
 }
 else
 Gr.Add(&pend, student);
 }
 int key;
 do 
{
 cout<<"\nVyberite deystvie: \n"<<
 "1. Dobavit stydenta\n"<<
 "2. Udalit stydenta\n"<<
 "3. Pokazat grypy\n"<<
 "4 Exit\n";
 cin>>key;
 if(key == 1){
 cout<<"Vvedite imya: ";
 cin>>name;
 cout<<"Vvedite familiyu: ";
 cin>>fam;
 cout<<"Vvedite vozrast: ";
 cin>>age;
 Student student(name, fam, age);
 Gr.Add(&pend, student);
 }
 else if(key == 2){
 cout<<"Vvedite familiyu: ";
 cin>>fam;
 Gr.Remove(&pbeg, &pend, fam);
 }
 else if (key == 3)
 Gr.Print_lib(pbeg);
 else if (key != 4)
 cout<<"Vyberete deystvie!\n";
 } while (key != 4);
 system("pause");
 return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.01.2012, 14:18     Написать метод. #2
Цитата Сообщение от Actimel Посмотреть сообщение
age = "";
Кода это возраст человека стал на столько огромен, что понадобилась длинно-десятичная арифметика на строках?
Actimel
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 43
16.01.2012, 16:43  [ТС]     Написать метод. #3
Цитата Сообщение от taras atavin Посмотреть сообщение
Кода это возраст человека стал на столько огромен, что понадобилась длинно-десятичная арифметика на строках?
В данном случае это щас для меня не имеет значения. мне просто к завтрашнему дню сделать то задание что я написал выше. по поводу возраста препод сегодня ничего не сказал. а сам я пока не очень разбираюсь во всех тонкостях. так что не судите строго)

Добавлено через 2 часа 19 минут
что никто не может помочь?(
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.01.2012, 18:24     Написать метод. #4
C++
1
2
3
4
5
6
7
bool isGenious()
{
    for(int i = 0; i < 5; ++i)
        if(marks[i] < 4)
            return false;
    return true;
}
Как-то так. Функция в классе, разумеется.

Добавлено через 2 минуты
Цитата Сообщение от Actimel Посмотреть сообщение
Да, и оценки почему то тоже не привильно вводятся, то есть выводит что то непонятное.
Я не увидел, где вы их вводите.
Actimel
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 43
16.01.2012, 20:19  [ТС]     Написать метод. #5
Цитата Сообщение от soon Посмотреть сообщение
C++
1
2
3
4
5
6
7
bool isGenious()
{
    for(int i = 0; i < 5; ++i)
        if(marks[i] < 4)
            return false;
    return true;
}
Как-то так. Функция в классе, разумеется.
спасибо большое. а подскажите если не сложно как теперь вывести тех студентов у которых есть эти плохие оценки.

Добавлено через 2 минуты
Вот оценки вводятся тут:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int _tmain(int argc, _TCHAR* argv[])
{
 Group* pbeg = NULL;
 Group* pend = NULL;
 Group Gr;
 int kol_vo;
 cout<<"Vvedite kol-vo studentov: ";
 cin>>kol_vo;
 string name, fam, age, marks[5];
 for (int i = 0; i < kol_vo; i++){
 cout<<"Vvedite imya: ";
 cin>>name;
 cout<<"Vvedite familiyu: ";
 cin>>fam;
 cout<<"Vvedite vozrast: ";
 cin>>age;
 
         cout<<"Vvedite ocenki"<<"\n";
         {
 for (int j=0; j<5; j++)
         cin>>marks[i];
 }
но так наверно нельзя.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.01.2012, 20:44     Написать метод. #6
Цитата Сообщение от Actimel Посмотреть сообщение
но так наверно нельзя.
Разумеется. Задание скажите, так проще будет
Actimel
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 43
16.01.2012, 20:46  [ТС]     Написать метод. #7
Цитата Сообщение от soon Посмотреть сообщение
Разумеется. Задание скажите, так проще будет
в ту программу что в первом посте надо добавить метод, который будет выводить студентов , у которых есть неуд. оценки. Ну и эти оценки тоже надо как то ввести соответственно.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.01.2012, 21:13     Написать метод. #8
Это понятно. Полностью задание скажите.
Actimel
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 43
16.01.2012, 21:16  [ТС]     Написать метод. #9
Цитата Сообщение от soon Посмотреть сообщение
Это понятно. Полностью задание скажите.
Описать класс «Студенческая группа», частью которого является класс «Студент». Предусмотреть возможность работы с переменным числом студентов, поиска студента по фамилии, добавления и удаления записей, вывода информации о студентах на экран. Написать программу, демонстрирующую работу с этим классом. Использовать конструктор и методы класса.
Это изначально задание было такое. А сегодня мне еще сказали добавить студентам оценки(5 штук) и если у студента есть неуд. оценки то выводить его в некий черный список)
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.01.2012, 01:06     Написать метод. #10
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <cstdlib>
#include <string>
#include <iterator>
////////////////////////////////////////////////////////////////////////
typedef std::string     T_name;
typedef unsigned        T_mark;
////////////////////////////////////////////////////////////////////////
const   std::size_t     MARKS = 5;
const   T_mark          LAST_GOOD_MARK = 4;
////////////////////////////////////////////////////////////////////////
class Student
{
    T_name                  name;
    std::vector<T_mark>     marks;
 
public:
    Student()
    {
        marks.resize(MARKS);
    }
    //------------------------------------------------------------------
    bool isGenius()
    {
        return (std::find_if
                (
                    marks.begin(),
                    marks.end(),
                    std::bind2nd(std::less<T_mark>(), LAST_GOOD_MARK)
                ) == marks.end());
    }
    //------------------------------------------------------------------
    friend std::istream& operator >> 
    (
        std::istream& stream,
        Student& student
    )
    {
        stream >> student.name;
        for
        (
            std::vector<T_mark>::iterator it = student.marks.begin();
            it != student.marks.end();
            ++it
        )
            stream >> *it;
        return stream;
    }
    //------------------------------------------------------------------
    friend std::ostream& operator <<
    (
        std::ostream& stream,
        Student& student
    )
    {
        stream << student.name << " with marks: " << std::endl;
        std::copy
        (
            student.marks.begin(),
            student.marks.end(),
            std::ostream_iterator<T_mark>(stream, " ")
        );
        return stream;
    }
    //------------------------------------------------------------------
    bool operator == (const std::string& _name)
    {
        return name == _name;
    }
    //------------------------------------------------------------------
    std::string getName() { return name; }
};
////////////////////////////////////////////////////////////////////////
template <class T>
class GroupIterator;
////////////////////////////////////////////////////////////////////////
template <class T>
class Group
{
    std::vector<T> group;
 
public:
    Group()
    {
        
    }
    //------------------------------------------------------------------
    Group(const std::size_t& num)
    {
        group.resize(num);
    }
    //------------------------------------------------------------------
    void push_back(const T& t)
    {
        group.push_back(t);
    }
    //------------------------------------------------------------------
    void remove(GroupIterator<T> it)
    {
        group.erase(group.begin() + (it - begin()));
    }
    //------------------------------------------------------------------
    GroupIterator<T> begin()
    {
        return GroupIterator<T>(group.begin());
    }
    //------------------------------------------------------------------
    GroupIterator<T> end()
    {
        return GroupIterator<T>(group.end());
    }
    //------------------------------------------------------------------
    bool isEmpty()
    {
        return group.begin() == group.end();
    }
    //------------------------------------------------------------------
    template <class F>
    GroupIterator<T> find(F f)
    {
        return GroupIterator<T>(std::find(group.begin(), group.end(), f));
    }
    //------------------------------------------------------------------
    friend std::ostream& operator << 
    (
        std::ostream& stream,
        Group<T>& group
    )
    {
        for
        (
            GroupIterator<T> it = group.begin();
            it != group.end();
            ++it
        )
            stream << *it<< std::endl;
        return stream;
    }
    //------------------------------------------------------------------
    friend std::istream& operator >> 
    (
        std::istream& stream,
        Group<T>& group
    )
    {
        for
        (
            GroupIterator<T> it = group.begin();
            it != group.end();
            ++it
        )
            stream >> *it;
        return stream;
    }
};
////////////////////////////////////////////////////////////////////////
template <class T>
class GroupIterator: public std::iterator<std::input_iterator_tag, T>
{
    typename std::vector<T>::iterator it;
    
public:
    GroupIterator(typename std::vector<T>::iterator _it): it(_it)
    {
        
    }
    //------------------------------------------------------------------
    GroupIterator& operator++ () 
    {
        ++it;
        return *this;
    }
    //------------------------------------------------------------------
    GroupIterator operator++ (int) 
    {
        GroupIterator<T> tmp(*this); 
        operator++(); 
        return tmp;
    }
    //------------------------------------------------------------------
    GroupIterator& operator-- () 
    {
        --it;
        return *this;
    }
    //------------------------------------------------------------------
    GroupIterator operator-- (int) 
    {
        GroupIterator<T> tmp(*this); 
        operator--(); 
        return tmp;
    }
    //------------------------------------------------------------------
    GroupIterator operator - (const int& sh) 
    {
        return GroupIterator<T>(*this - sh); 
    }
    //------------------------------------------------------------------
    int operator - (const GroupIterator<T>& _it) 
    {
        return it - _it.it; 
    }
    //------------------------------------------------------------------
    bool operator == (const GroupIterator<T>& _it)
    {
        return it == _it.it;
    }
    //------------------------------------------------------------------
    bool operator != (const GroupIterator<T>& _it)
    {
        return it != _it.it;
    }
    //------------------------------------------------------------------
    T& operator * () { return *it; }
    //------------------------------------------------------------------
    typename std::vector<T>::iterator& operator -> () { return it; }
};
////////////////////////////////////////////////////////////////////////
int main()
{
    Group<Student> g(3);
    std::cout << "enter data of 3 students:" << std::endl;
    std::cin >> g;
    std::cout << "-------------------" << std::endl;
    std::cout << g << std::endl;
    Student student;
    std::cout << "enter data of 4th student:" << std::endl;
    std::cin >> student;
    g.push_back(student);
    std::cout << "-------------------" << std::endl;
    std::cout << "now group:" << std::endl;
    std::cout << g << std::endl;
    GroupIterator<Student> it = g.find(student.getName());
    if(it != g.end())
        g.remove(it);
    std::cout << "-------------------" << std::endl;
    std::cout << "after remove:" << std::endl;
    std::cout << g << std::endl;
    for(it = g.begin(); it != g.end(); ++it)
        if(!(it -> isGenius()))
            g.remove(it--);
    std::cout << "-------------------" << std::endl;
    std::cout << "only genius:" << std::endl;
    std::cout << g << std::endl;
    return 0;
}
out
Bash
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
enter data of 3 students:
a 1 2 3 4 5
b 3 4 5 6 7
c 4 5 4 5 4
-------------------
a with marks: 
1 2 3 4 5 
b with marks: 
3 4 5 6 7 
c with marks: 
4 5 4 5 4 
 
enter data of 4th student:
d 2 3 4 5 6
-------------------
now group:
a with marks: 
1 2 3 4 5 
b with marks: 
3 4 5 6 7 
c with marks: 
4 5 4 5 4 
d with marks: 
2 3 4 5 6 
 
-------------------
after remove:
a with marks: 
1 2 3 4 5 
b with marks: 
3 4 5 6 7 
c with marks: 
4 5 4 5 4 
 
-------------------
only genius:
c with marks: 
4 5 4 5 4
Actimel
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 43
17.01.2012, 02:07  [ТС]     Написать метод. #11
спасибо что откликнулись и решили помочь, но я учусь на первом курсе и не особо понимаю точнее сказать вообще почти не понимаю что вы написали( не могли бы вы как нибудь попроще и добавить прям в мой код чтобы безо всяких шаблонов и т. д.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.01.2012, 05:37     Написать метод. #12
Actimel, я же вам кинул код функции. Вам осталось пройти по всем ученикам в группе и для каждого вызвать ее. В соответствии с результатом либо оставить, либо удалить.
Ввод студентов вроде бы сделан правильно, я вчера не увидел, мои извинения. Было бы проще, если бы код был отформатирован.
Actimel
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 43
17.01.2012, 10:52  [ТС]     Написать метод. #13
А как добавить оценки? Как обычный массив не получается вроде
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2012, 12:35     Написать метод.
Еще ссылки по теме:

C++ Написать метод, чтобы получить ссылку на строку - поле класса
C++ Нужно написать программу на тему "Метод коллокации"

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

Или воспользуйтесь поиском по форуму:
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.01.2012, 12:35     Написать метод. #14
Если изучали перегрузку, то можно перегрузить >> для ввода данных о студенте.
В противном случае можно создать фукцию, которой будет передаваться указатель на массив с оценками, а она будет копировать их в оценки студента. Или в конструктор пихнуть.
Yandex
Объявления
17.01.2012, 12:35     Написать метод.
Ответ Создать тему
Опции темы

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