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

В чем ошибка? - C++

Восстановить пароль Регистрация
 
special one
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
10.04.2013, 15:38     В чем ошибка? #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
#include <iostream>
#include <string.h>
#include <cstring>
#include <stdio.h>
#include <fstream>
#include <sstream>
#include <conio.h>
using namespace std;
class table
{
    public:
    char fio[40];
    char gr[40];
    int oc;
    void vvod1(void);
    void pokaz1(void);
    //void srbal (void);
    void vyvod(void);
    void pokaz2(void);
};
void table::vvod1(void)
{
   cout << "ФИО студента: ";
   cin >> fio;
   cout << "Группа: ";
   cin >> gr;
   cout << "Оценки: ";
   for (int i=0;i<4;++i)
   cin >> oc;
};
 
void table::pokaz1(void)
{
  cout << endl << fio << " " << gr << " " << oc << endl;
};
 
void table::vyvod()
{
      ofstream f("таблица.txt",ios::app);
      f << fio << "\n";
      f << gr << "\n";
      f << oc << "\n";
    f.close();
 
};
void table::pokaz2()
{
      fstream f( "таблица.txt", ios::app);
      f.open( "таблица.txt", ios_base::in);
        f >> fio;
        f >> gr;
        f >> oc;
      f.close();
};
 
void clear_f()
{
    fstream f("таблица.txt", ios_base::out);
    f.open( "таблица.txt", ios_base::out);
    f.close();
    cout << "Файл очищен";
    getch();
};
int main()
{
    setlocale(LC_ALL,"Russian");
    table kol[2];
    int n=2;
    int q,w;
    do{cout << "1) Ввод данных  " << "2) Вывод на экран  " << "\n"
     << "3) Сохранить  "<<"4) Сортировка по ФИО " << "5) Очистить файл "<<"6) Средний бал\n";
     cin>>q;
     switch(q)
     {
    case 1:
      for(int i=0; i<n; ++i) {
      kol[i].vvod1();
     }
      break;
      case 2:
     for(int i=0; i<n; ++i) {
     kol[i].pokaz1();
         }
      getch();
      break;
      case 3:
    for ( int i = 0; i < n; ++i)
     {
    kol[i].vyvod();
     }
 
     for ( int i = 0; i < n; ++i )
      {
    kol[i].pokaz2();
      }
 
    cout << "Содержимое файла: " << "\n";
    for ( int i = 0; i < n; ++i )
    cout << endl << kol[i].fio << " " << kol[i].gr << " " << kol[i].oc << endl;
     cout << "\n" << "Для продолжения нажмите любую клавишу " << endl;
    getch();
 
    break;
    case 4:
    for ( int i=0; i <=n; ++i)
    {
    for (int j=0; j<n-1; ++j)
    {
    if ( kol[j].fio > kol[j+1].fio)
    {
    table b;
    b = kol[j];
    kol[j] = kol[j+1];
    kol[j+1] = b;
            }
       }
for ( int i=0; i <n; ++i)
cout<<kol[i].fio;
    }
  break;
  case 5:
  clear_f();
  break;
 
     }
     }while(q!=6);
       return(0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2013, 15:38     В чем ошибка?
Посмотрите здесь:

C++ в чем ошибка?
В чем ошибка? C++
C++ в чем ошибка?
C++ в чем ошибка ?
В чем ошибка? C++
C++ В чем ошибка?
В чем ошибка? C++
C++ В чем ошибка?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
10.04.2013, 16:33     В чем ошибка? #2
1) вместо
C
1
2
    char fio[40];
    char gr[40];
используйте
C++
1
2
   std::string fio;
   std::string gr;
2) вместо этой структуры
C++
1
 table kol[2];
воспользуйтесь
C++
1
 std::vector <table> kol;
заведите в класс предикат такого плана
C++
1
bool table::namecompare (table& a,table& b) { return (a.fio<b.fio); }
и воспользуйтесь стандартной сортировкой std::sort - http://www.cplusplus.com/reference/a.../sort/?kw=sort

C++
1
std::sort(kol.begin(),kol.end(),table::namecompare)
3) места подсчёта среднего я что-то не нашёл, вместо этого по цифре 6 выходит я так понимаю из программы
C++
1
2
     }while(q!=6);
       return(0);
Добавлено через 6 минут
да и ещё у вас вот что странно
в классе заведена одна переменная под оценки
C++
1
int oc;
а пишете вы туда аж 4
C++
1
2
for (int i=0;i<4;++i)
   cin >> oc;
или я что-то не уловил в этой программе, или он запишет только последнюю и речи о среднем не имеют смысла
special one
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
11.04.2013, 07:33  [ТС]     В чем ошибка? #3
Средний бал нужно посчитать по каждому студенту , у него должно быть 4 оценки

Добавлено через 12 часов 27 минут
Цитата Сообщение от abit Посмотреть сообщение
1) вместо
C
1
2
    char fio[40];
    char gr[40];
используйте
C++
1
2
   std::string fio;
   std::string gr;
2) вместо этой структуры
C++
1
 table kol[2];
воспользуйтесь
C++
1
 std::vector <table> kol;
заведите в класс предикат такого плана
C++
1
bool table::namecompare (table& a,table& b) { return (a.fio<b.fio); }
и воспользуйтесь стандартной сортировкой std::sort - http://www.cplusplus.com/reference/a.../sort/?kw=sort

C++
1
std::sort(kol.begin(),kol.end(),table::namecompare)
3) места подсчёта среднего я что-то не нашёл, вместо этого по цифре 6 выходит я так понимаю из программы
C++
1
2
     }while(q!=6);
       return(0);
Добавлено через 6 минут
да и ещё у вас вот что странно
в классе заведена одна переменная под оценки
C++
1
int oc;
а пишете вы туда аж 4
C++
1
2
for (int i=0;i<4;++i)
   cin >> oc;
или я что-то не уловил в этой программе, или он запишет только последнюю и речи о среднем не имеют смысла

Средний бал нашел,но сортировка не получается:

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
class table
{
    public:
    //char fio[40];
    //char gr[40];
    string fio;
    string gr;
    int oc1;
    int oc2;
    int oc3;
    int oc4;
    int oc5;
    void vvod1(void);
    void pokaz1(void);
    //void srbal (void);
    bool namecompare (table& a,table& b) ;
    void vyvod(void);
    void pokaz2(void);
};
 
bool table::namecompare (table& a,table& b)
{
return (a.fio<b.fio);
}
   case 4:
 for ( int i = 0; i < n; ++i )
    {
 sort(kol.begin(),kol.end(),table::namecompare);
 
 }
Yandex
Объявления
11.04.2013, 07:33     В чем ошибка?
Ответ Создать тему
Опции темы

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