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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
#1

Описать структуру с именем STUDENT - C++

29.01.2013, 23:44. Просмотров 2033. Ответов 22

1.Описать структуру с именем STUDENT, содержащую следующие поля:
• NAME – фамилия и инициалы;
• GROUP – номер группы;
• SES - успеваемость (массив из пяти элементов).
2. Написать программу, выполняющую следующие действия :
• ввод с клавиатуры данных в массив STUDENT, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по возрастанию содержимого поля GROUP;
• вывод на дисплей фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4,0;
• если таких нет, вывести соответствующее сообщение.

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
#include <iostream.h>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;
 
struct STUDENT 
{ 
    char name[10]; 
    int group; 
    float ses[5]; 
};
 
int main() 
{   
    const int size = 10; 
    STUDENT student[size];
    int i, j; 
    int n = 0; //s4et4ik stydentov
    int count = 0; 
 
    for ( i = 0; i < size; i++)  // vvod
    {  
        //cout << "Vvedi familiu " << endl; 
        cin >> student[n].name; 
        //cout << "Nomer gryppi " << endl; 
        cin >> student[n].group; 
        //cout << "Vvedi 5 ocenok " << endl; 
        for (int i = 0; i < 5; i++) 
        cin >> student[n].ses[i]; 
        n++;
        
    } 
    float sum = 0; //symma ocenok
    for ( i = 0; i < size; i++) 
    {
        for (j = 0; j < 5; j++) 
          sum += student[i].ses[j]; 
          
            if(sum / 5 > 4.0) //yslovie horowista
            { 
                cout << student[i].name <<" "; 
                cout << student[i].group << endl; 
            }  
            else  
                count++;
 
            sum = 0;
        } 
    if(count == size) 
        cout << "Net takih! " << endl; 
 
    return 0;
}
Помогите,пожалуйста, с : записи должны быть упорядочены по возрастанию содержимого поля GROUP;
Да знаю тем тоны, но я так и не нашёл рабочую сортировку с её выводом на экран.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
29.01.2013, 23:49     Описать структуру с именем STUDENT #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
#include <iostream>
#include <string>
#include <windows.h>
#include <cmath>
 
using namespace std;
 
const int m = 2;
 
struct STUDENT
{
    char lastname [256];
    int numgroup;
    float progress [5];
    float mid;
    
};
 
void sortb ();
void filling ();
 
 
void filling (STUDENT *fill)
{
    
    int i ;
    
 
        for (i=0; i<m; i++)
    {
        cout <<"       Заполните данные о "<<i+1<<" студенте             "<<endl;
        cout << " Введите Фамилию и инифиалы "<<i+1<<" студента "<<endl;
        cout<<">> ";
        cin.getline(fill[i].lastname, sizeof (fill[i].lastname));
 
        cout << " Введите Номер группы "<<i+1<<" студента "<<endl;
        cout<<">> ";
        cin>>fill[i].numgroup;
 
        cin.ignore();
        
        for(int p=0;p<5;p++)
        {
            cout << " Введите успеваемость "<<i+1<<" студента  "<<endl;
            cout<<"[ "<<p<<" ] >> ";
            cin >> fill[i].progress[p];
        }
            for(int p=0;p<5;p++)
            {
                fill[i].mid += fill[i].progress[p];
            }
 
        fill[i].mid /= 5;
        
        
 
    }
 
        return;
}
 
void sortb (STUDENT *sort)
{
    STUDENT t;
 
 
        for (int i=1 ; i<m ; i++)
    {
        for (int j=-1 ; j>=i ; j--)
        {
            if (sort[j-1].numgroup > sort [j].numgroup)
            {
                t=sort[j-1];
                sort[j-1]=sort[j];
                sort[j]=t;
            }
        }
    }
 
        return;
}
 
void main ()
{
    int i;
 
 
    STUDENT student [m];
 
    SetConsoleCP(1251); 
    SetConsoleOutputCP(1251);
 
 
    filling (student);
    sortb (student);
    
    for (i=0; i<m; i++) 
    {
        if (student[i].mid >= 4.0)
        {
                cout << "             Студент #   "<<i+1<<"                       "<<endl;
                cout <<" ФИО:  "<<student[i].lastname<<endl;
                cout <<" Группа:  "<<student[i].numgroup<<endl;
                cout <<" Средний бал:  "<<student[i].mid<<endl;
        }
        else
        cout<<" Студентов имеющих средний балл выше 4.0 в списке нет. "<<endl;
    }
 
    
 
    return;
}
3BEPb_TyTa
18 / 18 / 1
Регистрация: 18.05.2010
Сообщений: 83
30.01.2013, 00:32     Описать структуру с именем STUDENT #3
Цитата Сообщение от Greenli Посмотреть сообщение
for (int i=1 ; i<m ; i++)
* * {
* * * * for (int j=-1 ; j>=i ; j--)
не тестил, но разве это может работать? -) "j" всегда будет меньше "i" и цикл никогда не начнёт работать, разве нет?
Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
30.01.2013, 00:45     Описать структуру с именем STUDENT #4
Цитата Сообщение от 3BEPb_TyTa Посмотреть сообщение
не тестил, но разве это может работать? -) "j" всегда будет меньше "i" и цикл никогда не начнёт работать, разве нет?
да, прошу прощения видимо опечатка, там for (int j=m-1; j>i; j--), программа была написана мною на 1 курсе просто копи-паст с отчета, грубых ошибок нет думаю все неровности "напильником" поправит автор поста=)
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
30.01.2013, 10:16  [ТС]     Описать структуру с именем STUDENT #5
ругается на Sortb.

И всё же, может кто уже дописать рабочий вариант сортировки по группе людей по возрастанию.

Для примера:
Ввод:
Borisova 2 3 4 4 4 5
Kiselev 7 3 4 3 3 3
Ivanov 1 4 5 5 5 4
Radionov 6 2 3 5 5 5
Bobrova 5 4 4 4 4 4
Sidorova 1 5 5 5 5 5
Petrov 3 2 3 3 3 4
Moskvina 5 4 4 5 5 4
Aleksandrov 4 3 2 4 4 2
Smirnov 5 2 3 3 3 2

Вывод:
Ivanov 1 4 5 5 5 4
Sidorova 1 5 5 5 5 5
Borisova 2 3 4 4 4 5
Petrov 3 2 3 3 3 4
Aleksandrov 4 3 2 4 4 2
Moskvina 5 4 4 5 5 4
Bobrova 5 4 4 4 4 4
Smirnov 5 2 3 3 3 2
Radionov 6 2 3 5 5 5
Kiselev 7 3 4 3 3 3
Ivanov 1
Sidorova 1
Moskvina 5
Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
30.01.2013, 11:06     Описать структуру с именем STUDENT #6
у меня все отлично работает и сортирует по номеру группы (как в задании).

Цитата Сообщение от akiam Посмотреть сообщение
ругается на Sortb.
какую именно ошибку выдает компилятор?
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
30.01.2013, 11:15  [ТС]     Описать структуру с именем STUDENT #7
error C2601: 'sortb' : local function definitions are illegal

Добавлено через 46 секунд
ну всмысле я вашу сортировку, в мою программу воткнул, и вот ругается на sortb
Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
30.01.2013, 11:34     Описать структуру с именем STUDENT #8
Прототип функции сделали?
функцию объявили в main ?
Название переменных изменили ?
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
30.01.2013, 11:38  [ТС]     Описать структуру с именем STUDENT #9
не понял что и как)
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
#include <iostream.h>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;
 
struct STUDENT 
{ 
    char name[10]; 
    int group; 
    
    float ses[5]; 
};
void sortb ();
 
int main() 
{   
    const int size = 10; 
    STUDENT stud1[size];
    
    int i, j; 
    int n = 0; //s4et4ik stydentov
    int count = 0; 
 
    for ( i = 0; i < size; i++)  // vvod
    {  
        //cout << "Vvedi familiu " << endl; 
        cin >> stud1[n].name; 
        //cout << "Nomer gryppi " << endl; 
        cin >> stud1[n].group; 
        //cout << "Vvedi 5 ocenok " << endl; 
        for (int i = 0; i < 5; i++) 
        cin >> stud1[n].ses[i]; 
        n++;
        
    } 
    float sum = 0; //symma ocenok
    for ( i = 0; i < size; i++) 
    {
        for (j = 0; j < 5; j++) 
          sum += stud1[i].ses[j]; 
          
            if(sum / 5 > 4.0) //yslovie horowista
            { 
                cout << stud1[i].name <<" "; 
                cout << stud1[i].group << endl; 
            }  
            else  
                count++;
 
            sum = 0;
        } 
    void sortb (STUDENT *sort)
{
    STUDENT t;
 
 
        for (int i=1 ; i<m ; i++)
    {
        for (int j=m-1; j>i; j--)
        {
            if (sort[j-1].numgroup > sort [j].numgroup)
            {
                t=sort[j-1];
                sort[j-1]=sort[j];
                sort[j]=t;
            }
        }
    }
 cout<<sort[j]<<endl;
        return;
}
    if(count == size) 
        cout << "Net takih! " << endl; 
 
    return 0;
}
Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
30.01.2013, 11:47     Описать структуру с именем STUDENT #10
Цитата Сообщение от akiam Посмотреть сообщение
не понял что и как)
1. Зачем сорировку запихал в main если это отдельная функция и ее можно просто вызвать.
2. В программе у тебя нет переменной numgroup но есть аналогичная group поменяй названия в функции sortb
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
30.01.2013, 12:03  [ТС]     Описать структуру с именем STUDENT #11
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
#include <iostream.h>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;
 
struct STUDENT 
{ 
    char name[10]; 
    int group; 
    
    float ses[5]; 
};
void sortb ();
 
int main() 
{   
    const int size = 10; 
    STUDENT stud1[size];
    
    int i, j; 
    int n = 0; //s4et4ik stydentov
    int count = 0; 
 
    for ( i = 0; i < size; i++)  // vvod
    {  
        //cout << "Vvedi familiu " << endl; 
        cin >> stud1[n].name; 
        //cout << "Nomer gryppi " << endl; 
        cin >> stud1[n].group; 
        //cout << "Vvedi 5 ocenok " << endl; 
        for (int i = 0; i < 5; i++) 
        cin >> stud1[n].ses[i]; 
        n++;
        
    } 
    float sum = 0; //symma ocenok
    for ( i = 0; i < size; i++) 
    {
        for (j = 0; j < 5; j++) 
          sum += stud1[i].ses[j]; 
          
            if(sum / 5 > 4.0) //yslovie horowista
            { 
                cout << stud1[i].name <<" "; 
                cout << stud1[i].group << endl; 
            }  
            else  
                count++;
 
            sum = 0;
        } 
 
    if(count == size) 
        cout << "Net takih! " << endl; 
 
    return 0;
}
 
   void sortb (STUDENT *sort)
{
    STUDENT t;
 
 
        for (int i=1 ; i<10 ; i++)
    {
        for (int j=10-1; j>i; j--)
        {
            if (sort[j-1].group > sort [j].group)
            {
                t=sort[j-1];
                sort[j-1]=sort[j];
                sort[j]=t;
            }
        }
    }
 cout<<t<<endl;
 return;}
теперь (77):error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'struct STUDENT' (or there is no acceptable conversion)
Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
30.01.2013, 12:14     Описать структуру с именем STUDENT #12
теперь (77):error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'struct STUDENT' (or there is no acceptable conversion)[/QUOTE]

t - временная переменная, это не массив, тебе нужно выводить массив структур вот так
C++
1
2
3
4
5
6
7
for (i=0; i<m; i++) 
    {
                cout <<" ФИО:  "<<student[i].name<<endl;
                cout <<" Группа:  "<<student[i].group<<endl;
                cout <<" Средний бал:  "<<student[i].ses<<endl;
 
    }
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
30.01.2013, 14:03  [ТС]     Описать структуру с именем STUDENT #13
а можно показать? а то я уже не соображаю

Добавлено через 1 час 25 минут
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
#include <iostream.h>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;
 
struct STUDENT 
{ 
    char name[10]; 
    int group; 
    
    float ses[5]; 
};
 
int main() 
{   
    const int size = 10; 
    STUDENT student[size];
    int i, j; 
    int n = 0; //s4et4ik stydentov
    int count = 0; 
 
    for ( i = 0; i < size; i++)  // vvod zna4enii
    {  
        //cout << "Vvedi familiu " << endl; 
        cin >> student[n].name; 
        //cout << "Nomer gryppi " << endl; 
        cin >> student[n].group; 
        //cout << "Vvedi 5 ocenok " << endl; 
        for (int i = 0; i < 5; i++) 
        cin >> student[n].ses[i]; 
        n++;
        
    } 
 
    float sum = 0; //symma ocenok
    for ( i = 0; i < size; i++) 
    {
        for (j = 0; j < 5; j++) 
          sum += student[i].ses[j]; 
          
            if(sum / 5 > 4.0) //yslovie horowista
            { 
                cout << student[i].name <<" "; 
                cout << student[i].group << endl; 
            } 
           else  
                count++;
 
            sum = 0;
        }  
    for (i =0; i<n; i++)
        {
        for (int j =0; j<n; j++)
            {
            if (student[i].group<student[j].group) 
                {
                STUDENT c=student[i];
                student[i]=student[j];
                student[j]=c;
                }
           }
      }
    for (i=0; i<n; i++)
        {
        cout<<student[i].name<<" ";
        cout<<student[i].group<<" ";
        for (int j =0; j<5; j++) 
        cout<<student[j].ses;
        cout<<endl;
        }
    if(count == size) 
        cout << "Net takih! " << endl; 
 getch();
    return 0;
}
Всё почти круто, но оценки выводятся в непонятном формате, не могу понять из-за чего
Greenli
7 / 7 / 1
Регистрация: 21.01.2013
Сообщений: 27
30.01.2013, 14:49     Описать структуру с именем STUDENT #14
Цитата Сообщение от akiam Посмотреть сообщение
оценки выводятся в непонятном формате
скрин фстудию
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
30.01.2013, 14:51  [ТС]     Описать структуру с именем STUDENT #15
вот
Миниатюры
Описать структуру с именем STUDENT  
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.01.2013, 14:59     Описать структуру с именем STUDENT #16
Цитата Сообщение от akiam Посмотреть сообщение
Всё почти круто, но оценки выводятся в непонятном формате,
А если так?
C++
1
cout << student[i].ses[j] << " ";
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
30.01.2013, 15:04  [ТС]     Описать структуру с именем STUDENT #17
спасибо огромное, а на будущее можете объяснить в чём ошибка была?)
MrGluck
Ворчун
Эксперт CЭксперт С++
6675 / 3856 / 510
Регистрация: 29.11.2010
Сообщений: 10,214
30.01.2013, 15:07     Описать структуру с именем STUDENT #18
Цитата Сообщение от akiam Посмотреть сообщение
спасибо огромное, а на будущее можете объяснить в чём ошибка была?)
вы пробовали вывести массив, а надо было элементы массива в цикле.
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.01.2013, 15:12     Описать структуру с именем STUDENT #19
Суть в том, что ses является массивом, поэтому к нему тоже нужно применять индексацию.
C++
1
student[i].ses[j] // доступ к j-му элементу массива ses i-го элемента массива student
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2013, 15:21     Описать структуру с именем STUDENT
Еще ссылки по теме:

C++ Описать структуру с именем Student
C++ Описать структуру с именем STUDENT
C++ Описать структуру с именем STUDENT
Описать структуру с именем Student C++
Описать структуру с именем STUDENT C++

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

Или воспользуйтесь поиском по форуму:
akiam
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 39
30.01.2013, 15:21  [ТС]     Описать структуру с именем STUDENT #20
Конечный вариант, работает 100% на Visual studio 2006.
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
#include <iostream.h>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;
 
struct STUDENT 
{ 
    char name[50]; 
    int group; 
    
    float ses[5]; 
};
 
int main() 
{   
    const int size = 10; 
    STUDENT student[size];
    int i, j; 
    int n = 0; //s4et4ik stydentov
    int count = 0; 
 
    for ( i = 0; i < size; i++)  // vvod zna4enii
    {  
        //cout << "Vvedi familiu " << endl; 
        cin >> student[n].name; 
        //cout << "Nomer gryppi " << endl; 
        cin >> student[n].group; 
        //cout << "Vvedi 5 ocenok " << endl; 
        for (int i = 0; i < 5; i++) 
        cin >> student[n].ses[i]; 
        n++;
        
    } 
 for (i =0; i<n; i++)
        {
        for (int j =0; j<n; j++)
            {
            if (student[i].group<student[j].group) 
                {
                STUDENT c=student[i];
                student[i]=student[j];
                student[j]=c;
                }
           }
      }
    for (i=0; i<n; i++)
        {
        cout<<student[i].name<<" ";
        cout<<student[i].group<<" ";
        for (int j =0; j<5; j++) 
        cout << student[i].ses[j] << " ";
        cout<<endl;
        }
    float sum = 0; //symma ocenok
    for ( i = 0; i < size; i++) 
    {
        for (j = 0; j < 5; j++) 
          sum += student[i].ses[j]; 
          
            if(sum / 5 > 4.0) //yslovie horowista
            { 
                cout << student[i].name <<" "; 
                cout << student[i].group << endl; 
            } 
           else  
                count++;
 
            sum = 0;
        }  
    
    if(count ==size) 
        cout << "No " << endl; 
 getch();
    return 0;
}
Добавлено через 12 секунд
Всем спасибо.
Yandex
Объявления
30.01.2013, 15:21     Описать структуру с именем STUDENT
Ответ Создать тему
Опции темы

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