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

Поиск в массиве всех студентов с заданным номером группы. Классы С++ - C++

Восстановить пароль Регистрация
 
alexSo94
140 / 4 / 1
Регистрация: 24.02.2013
Сообщений: 46
17.04.2013, 17:08     Поиск в массиве всех студентов с заданным номером группы. Классы С++ #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
enum number_type{G1,G2}; //Группы студентов
 
class CStudent
{
    
    ...
    number_type number;
    ...
        
public:
    ...
    CStudent& find(int, int);
    number_type get_number(){return number;}
    ...
 
 
 
};
 
//Метод поиска студента с заданной фамилией nam  d в массиве размерности n
CStudent & CStudent::find(int numberr,  int n)
{
    for (int i=0; i<n; i++)
    if (this[i].number==numberr) {return this[i];}
    cout<<"\nСтудент с группой "<<numberr<< " не найден.";
    static CStudent s;
    return s;
}
 
case '7': 
            {
    
        
        if (n==0) cout<<"\nСписок студентов пуст";
        else 
        {
            int number;
            cout<<"\n Введите номер группы(0-Первая, 1-Вторая) : ";
    
        
    
    bool f;
    cin>>f;
    if (f==0)
    {
     number=G1;
    
    }
    else if (f==1)
    {
     number=G2;
    }
    else
    {
    cout<<"Ошибка!";
    return 0;
    }
    
CStudent s= students[0].find(number, n);
if (s.get_number()!= 0) 
            {   cout<<"\nСтудент найден:";
                s.output();
                
            }
            }
        break;
 
 
 
            }
Программа работает как то криво. Ищет только 1 студента с заданной группой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 17:08     Поиск в массиве всех студентов с заданным номером группы. Классы С++
Посмотрите здесь:

C++ В заданном двумерном массиве n*m поменять местами строку с номером k столбец с номером p этого массива
Распечатать анкетные данные студентов интересующей вас группы. Фамилии студентов начинаются с букв I, F и G C++
C++ Класс строки (удаление из строки слова с заданным номером и символа с заданным номером)
C++ Используя класс list, в котором храняться фамилии студентов группы, организовать поиск по фамилии
Поиск всех возможный комбинацай трехзначных чисел в массиве C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexSo94
140 / 4 / 1
Регистрация: 24.02.2013
Сообщений: 46
19.04.2013, 17:37  [ТС]     Поиск в массиве всех студентов с заданным номером группы. Классы С++ #2
Не у кого нет предложений в чем косяк ?
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
19.04.2013, 18:21     Поиск в массиве всех студентов с заданным номером группы. Классы С++ #3
В вашем коде.

Это пример того как такая взаимосвязь должна выглядеть.
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
#include <list>
#include <string>
#include <iostream>
 
class Group;
class Student
  {
  friend class Group;
 
  public:
    Student(const std::string& name)
      : _name(name) {}
 
    std::string name() const { return _name; }
    Group* groupd() const { return _group; }
 
  private:
    std::string _name;
    Group* _group;
  };
 
class Group 
  {
  friend std::ostream& operator<< (std::ostream& out, const Group& group);
 
  public:
    Group(unsigned id)
      : _id(id) {}
 
    unsigned id() const { return _id; }
 
    Student* add_student(Student* student)
      {
      student->_group = this;
      _students.push_back(student);
 
      return student;
      }
 
    Student* add_student(const std::string& name)
      {
      Student* student = new Student(name);
 
      student->_group = this;
      _students.push_back(student);
 
      return student;
      }
 
    void remove_student(Student* student)
      {
      student->_group = 0;
      _students.remove(student);
      }
 
     void remove_student(const std::string& name)
      {
      Student* finded = find(name);
      if (!finded)
        return;
      
      remove_student(finded);
      }
 
     Student* find(const std::string& name)
      {
      std::list<Student*>::iterator it = _students.begin();
      for ( ; it != _students.end(); ++it)
        {
        if ((*it)->_name == name)
          return *it;
        }
      
      return 0;
      }
 
     std::list<Student*> get_students() const { return _students; }
 
  private:
    unsigned _id;
    std::list<Student*> _students;
  };
 
std::ostream& operator<< (std::ostream& out, const Group& group)
  {
  out << "Group with id " << group._id << " contains " << group._students.size() << " students:" << std::endl;
 
  std::list<Student*>::const_iterator it = group._students.cbegin();
  for ( ; it != group._students.cend(); ++it)
    out << (*it)->name() << std::endl;
 
  return out;
  }
 
int main()
  {
  Student *one = new Student("One");
  Student *two = 0;
  Student *three = 0;
 
  Group group(1);
  group.add_student(one);
  two = group.add_student(new Student("Two"));
  three = group.add_student("three");
 
  std::cout << group << std::endl;
 
  delete one;
  delete two;
  delete three;
 
  return 0;
  }
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
19.04.2013, 18:36     Поиск в массиве всех студентов с заданным номером группы. Классы С++ #4
и вправду, нечитабельный же код
alexSo94
140 / 4 / 1
Регистрация: 24.02.2013
Сообщений: 46
19.04.2013, 19:58  [ТС]     Поиск в массиве всех студентов с заданным номером группы. Классы С++ #5
NeonLost,
stima, я выложил не весь код, а только его часть. Проще говоря мне просто не удается найти в массиве студентов с одинаковой группой.

Добавлено через 31 минуту
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
        
 
 В файл CStudent.h  добавим заголовок  данного метода: 
CStudent& find(int, int);//метод поиска в массиве студента с заданной фамилией 
 
В файл CStudent.cpp  добавим определение  метода
 
//Метод поиска студента с заданной фамилией nam  d в массиве размерности n
CStudent & CStudent::find(int numberr,  int n)
{
    for (int i=0; i<n; i++)
    if (this[i].number==numberr) {return this[i];}
    cout<<"\nСтудент с группой "<<numberr<< " не найден.";
    static CStudent s;
    return s;
}
 
 
Метод написан таким образом, что если студент с заданной фамилией не найден в мас сиве, то на экран выводится соотвествующее сообщение и возвращается «пустой» студент.
 
Протестируем метод в  ветви  case 6 функции main (файла main.cpp):
case '7': 
            {
    
        
        if (n==0) cout<<"\nСписок студентов пуст";
        else 
        {
            int number;
            cout<<"\n Введите номер группы(0-Первая, 1-Вторая) : ";
    
        
    
    bool f;
    cin>>f;
    if (f==0)
    {
     number=G1;
    
    }
    else if (f==1)
    {
     number=G2;
    }
    else
    {
    cout<<"Ошибка!";
    return 0;
    }
    
CStudent s= students[0].find(number, n); // Массив студентов CStudent students[N];
if (s.get_number()!= 0) 
            {   cout<<"\nСтудент найден:";
                s.output();
                
            }
            }
        break;
 
 
 
            }
Так вот у меня ищет студента только до 1 найденного . Косяк наверно где то здесь CStudent s= students[0].find(number, n);
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
19.04.2013, 23:42     Поиск в массиве всех студентов с заданным номером группы. Классы С++ #6
Вы понимаете, что Вы пишете? " Студент найди себя "
Я вам еще раз говорю Вы не правильно составили класс, это раз, у Вас не понятные методы это два.

Добавлено через 2 минуты
Цитата Сообщение от alexSo94 Посмотреть сообщение
static CStudent s;
* * return s;
Это улыбнуло)) Найден или не найден студент вы возвращаете чье-то тело.
Проанализируйте мой код, я не просто так его писал.
Yandex
Объявления
19.04.2013, 23:42     Поиск в массиве всех студентов с заданным номером группы. Классы С++
Ответ Создать тему
Опции темы

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