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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.78
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
#1

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

27.04.2012, 22:44. Просмотров 4306. Ответов 38

Всем привет) Не могу решить задачу.
Описать структуру с именем STUDENT, содержащую следующие поля:
• фамилия и инициалы;
• номер группы;
• успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT;
• упорядочить записи по возрастанию номера группы;
• вывод на дисплей фамилий и номеров групп для всех студентов, включённых в массив, если средний бал студента больше 4.0; если таких студентов нет, то вывести соответствующее сообщение.
Я не могу перевести массив успеваемости в Int, чтобы посчитать средний балл.
Вот что у меня есть.
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
// andrei3.cpp : Defines the entry point for the console application.
//
// 2kontrol.cpp : Defines the entry point for the console application.
//
// 2 контрольная 2 семестра.
#include "stdafx.h"
#include <fstream>
#include <string>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
const int l_name = 15, l_ysp=5;
struct Student
{
        int num;
        char name[l_name];
        char ysp[l_ysp];
        int summ[5];
};
void selection_sort(Student *tr, const int sz);
 
int _tmain(int argc, _TCHAR* argv[])
 
{
    setlocale (LC_ALL, "Rus");
   // const int l_name = 9;  
    const int l_Student=100;
    Student dbase[l_Student];    
    int sr;
    //int summ=0;
    
    fstream infile;
    infile.open("dbase.txt", ios::in);
    if (!infile.is_open())
    {
        cout << "Error opening file\n";
        return 0;
    }
 
    int cnt = 0;
    while(!infile.eof())
    {
        infile >> dbase[cnt].name
               >> dbase[cnt].num
               >> dbase[cnt].ysp;
        ++cnt;
    };
    //selection_sort(dbase, cnt);       
    
    
 
    for (int i = 0; i < cnt; i++)
    {
        for (int k=0; k<l_ysp; k++)
        {
    //      dbase[k].summ=dbase[k].summ+dbase[k].ysp;
            
        }
    //  cout <<dbase[0].summ<<endl;        
    }
    
/*
    while (true) 
    {
        cout << "Введите средний балл студента или 0:"; cin >>sr;
        if (sr==0) return 0;
        bool not_found = true;
        for (int i = 0; i < cnt; i++)
        {
            if ( dbase[i].ysp>4)
            {               
                    cout << dbase[i].name <<' '<< dbase[i].num << ' ' << dbase[i].ysp << endl;
                    not_found = false;
                
            }
        }
 
    
    }
    */
    return 0;
}
 
/*
void selection_sort(Student *tr,const int sz)
{
    for (int i = 0; i < sz; ++i)
    {
        int minimum = i;
        for (int j = i + 1; j < sz; ++j)
        {
            if (strcmp(tr[j].num,tr[minimum].num) < 0)
            {
                Student temp = tr[minimum];
                tr[minimum] = tr[j];
                tr[j] = temp;
            }
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 22:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Описать структуру с именем STUDENT (C++):

Описать структуру с именем STUDENT - C++
Описать структуру с именем STUDENT, содержащую следующие поля:-фамилия и инициалы;-номер группы;-успеваемость (массив из пяти...

Описать структуру с именем STUDENT - C++
как подогнать это 1. Описать структуру с именем STUDENT, содержащую следующие поля: • NAME - фамилия и инициалы; • GROUP- номер...

Описать структуру с именем STUDENT - C++
Описать структуру с именем STUDENT, содержащую следующие поля: -фамилия и инициалы;-номер группы;-успеваемость (массив из пяти...

Описать структуру с именем STUDENT - C++
// sub22.cpp: определяет точку входа для консольного приложения. //Вариант 1 //1. Описать структуру с именем STUDENT, содержащую...

Описать структуру с именем Student - C++
Описать структуру с именем STUDENT, содержащую следующие поля: 1) фамилия и инициалы; 2) номер группы; 3) успеваемость (массив из...

Описать структуру с именем Student - C++
Описать структуру с именем Student, содержащую следующие поля: - фамилия и инициалы; - номер группы; - успеваемость (массив из пяти...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
27.04.2012, 23:36 #2
Что я увидел...
Получается, что ты создаешь массив структур на 100 элементов
C++
1
Student dbase[l_Student];
Здесь по всей видимости идет считывание и заполнение "базы" значениями из файла, одновременно подсчитывается число записей.
C++
1
2
3
4
5
6
7
8
int cnt = 0;
    while(!infile.eof())
    {
        infile >> dbase[cnt].name
               >> dbase[cnt].num
               >> dbase[cnt].ysp;
        ++cnt;
    };
Вот здесь, наверное, надо подсчитывать средний бал
C++
1
2
3
4
5
6
7
8
9
for (int i = 0; i < cnt; i++)
    {
        for (int k=0; k<l_ysp; k++)
        {
          dbase[k].summ=dbase[k].summ+dbase[k].ysp;
            
        }
      cout <<dbase[0].summ<<endl;        
    }
и что-то я не пойму.
Первое это то, что у нас cnt-струтур, т.е. массив dbase должен быть размером, способным хранить cnt-записей считанных из файла. Зачем же тогда
C++
1
Student dbase[l_Student];
А если у нас будет больше 100 записей, тогда вполне вероятно произойдет запись в ячейку памяти за пределы массива dbase. Второе
C++
1
dbase[k].summ=dbase[k].summ+dbase[k].ysp;
тут вообще какая-то ерунда. В первую очередь у нас cnt элементов dbase, а не k. k - это 5 и это размер массива
C++
1
summ
dbase[k].summ - обращаться нельзя. summ это адрес первого элемента массива. Дальше dbase[k].ysp имеет тип char и что-то к чему-то прибавлять не имеет смысла. Надо править
1
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
30.04.2012, 18:35  [ТС] #3
denys_l, так как тогда написать то??

Добавлено через 21 час 16 минут
Подскажите пожалуйста!

Добавлено через 22 часа 26 минут
Подскажите кто-нибудь то

Добавлено через 23 часа 4 минуты
Может кто-нибудь ответить то????
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
30.04.2012, 19:10 #4
KOPC1886, вот мое исполнение , "черновик " но
работает Ошибки в структурах и массивах
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
01.05.2012, 19:55  [ТС] #5
MrCold, а как отсортировать группы по номеру, в том топике код не сортирует.
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
01.05.2012, 20:28 #6
С файлом KOPC1886 уж сами как нибудь справляйтесь - тем много таких
0
Миниатюры
Описать структуру с именем STUDENT  
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
01.05.2012, 22:13 #7
Сортировку я вам переписал
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
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//           SORTIROVKA GRUP
        //
 
          cout << endl << "Sortirovka grup" << endl;
 
int evalbuf = 0, i;
int numbuf = 0;
char familybuffer[100];
bool flag = true;
     while(flag){
 
         flag = false;
for( i = 0; i < IND - 1; ++i)
    {
        if (stud[i + 1].numgroup < stud[i].numgroup) {
 
////////////////////////////////////////
        numbuf = stud[i].numgroup;
        evalbuf = mideval[i] ;
        strcpy(familybuffer,stud[i].family); 
/////////////////////////////////////////////
        stud[i].numgroup = stud[i + 1].numgroup;
        mideval[i] = mideval[i + 1];
        strcpy(stud[i].family,stud[i + 1].family);
 
////////////////////////////////////////////////////
        stud[i + 1].numgroup = numbuf;
        mideval[i + 1] = evalbuf;
        strcpy(stud[i + 1].family, familybuffer); 
 
        flag = true;
        }
    }
     }
        // ВЫВОД ДАННЫХ  
     for( i = 0; i < IND; ++i)
    {
        cout << endl << "Nomer gruppi\t" << stud[i].numgroup <<"\tfamilia\t"<<stud[i].family <<"\tsredniy bal\t"<< mideval[i] << endl;
     }
1
Миниатюры
Описать структуру с именем STUDENT  
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
04.05.2012, 21:18  [ТС] #8
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
// 2kontrol.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <fstream>
#include <string>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
const int l_name = 9, l_num=7, l_time=17, l_buf = l_name + l_num + l_time;
struct Train
{
        int num;
        char name[l_name+1];
        float time;
};
void selection_sort(Train *tr, const int sz);
 
int _tmain(int argc, _TCHAR* argv[])
 
{
    setlocale (LC_ALL, "Rus");
    const int l_name = 9, l_num=7, l_time=17, l_buf = l_name + l_num + l_time;
    
 
    const int l_Train=100;
    Train dbase[l_Train];    
    float time;
    int num;
    char name[l_name+1];
    
    
    fstream infile;
    infile.open("dbase.txt", ios::in);
    if (!infile.is_open())
    {
        cout << "Error opening file\n";
        return 0;
    }
 
    int cnt = 0;
    while(!infile.eof())
    {
        infile >> dbase[cnt].name
               >> dbase[cnt].num
               >> dbase[cnt].time;
        ++cnt;
    };
    selection_sort(dbase, cnt);
    
    
    while (true) 
    {
        cout << "Введите время отправки поезда или 0:"; cin >>time;
        if (time==0) return 0;
        bool not_found = true;
        for (int i = 0; i < cnt; i++)
        {
            if (dbase[i].time > time)
            {               
                    cout << dbase[i].name <<' '<< dbase[i].num << ' ' << dbase[i].time << endl;
                    not_found = false;
                
            }
        }
 
    
    }
    return 0;
}
 
 
void selection_sort(Train *tr,const int sz)
{
    for (int i = 0; i < sz; ++i)
    {
        int minimum = i;
        for (int j = i + 1; j < sz; ++j)
        {
            if (strcmp(tr[j].name,tr[minimum].name) < 0)
            {
                Train temp = tr[minimum];
                tr[minimum] = tr[j];
                tr[j] = temp;
            }
        }
    }
}
1
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
06.05.2012, 15:30  [ТС] #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
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
// andrei3.cpp : Defines the entry point for the console application.
//
// 2kontrol.cpp : Defines the entry point for the console application.
//
// 2 контрольная 2 семестра.
///ОСТАЛОСЬ ОТСОРТИРОВАТЬ ГРУППЫ ПО НОМЕРУ
#include "stdafx.h"
#include <fstream>
#include <string>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
const int l_name = 25, l_ysp=5;
struct trent
{
        int num;
        char name[l_name];
        char ysp[l_ysp];
        int summ[5];
};
void selection_sort(trent *tr, const int sz);
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "Rus");
   // const int l_name = 9;  
    const int l_trent=100;
    trent dbase[l_trent];    
    
    float sr;
    
    int ser=0;
    fstream infile;
    infile.open("dbase4.txt", ios::in);
    if (!infile.is_open())
    {
        cout << "Error opening file\n";
        return 0;
    }
 
    int cnt = 0;
    while(!infile.eof())
    {
        infile >> dbase[cnt].name
               >> dbase[cnt].num
               >> dbase[cnt].ysp;
        ++cnt;
    };
    selection_sort(dbase, cnt);     
    const int size=100;
    float summ[size];
 
    for (int i = 0; i < cnt; i++)
    {
        for (int k=0; k<l_ysp;k++)
        {
      
            ser=ser+dbase[i].ysp[k]-'0';    
        }
        
        summ[i]=ser/l_ysp;
        //cout <<summ[i]<<endl;
        ser=0;
        
    }
/*
    int evalbuf = 0, i;
    int numbuf = 0;
    char namebuffer[100];
    bool flag = true;
    while(flag)
    { 
        flag = false;
        for( i = 0; i < sz - 1; ++i)
        {
            if (dbase[i + 1].num < dbase[i].num)
            {
 
                
                numbuf = dbase[i].num;
                evalbuf = ysp[i] ;
                strcpy(namebuffer,dbase[i].name); 
        
                dbase[i].num = dbase[i + 1].num;
                ysp[i] = ysp[i + 1];
                strcpy(tr[i].name,tr[i + 1].name);       
    
                tr[i + 1].num = numbuf;
                ysp[i + 1] = evalbuf;
                strcpy(tr[i + 1].name, namebuffer);          
                flag = true;
            }
        }
    }
    */
 
    while (true) 
    {
        cout << "Введите средний балл студента или 0:"; cin >>sr;
        if (sr==0) return 0;
        bool not_found = true;
        for (int i = 0; i < cnt; i++)
        {
            if (summ[i]>sr)
            {               
                    cout << dbase[i].name <<' '<< dbase[i].num << ' ' << dbase[i].ysp << endl;
                    not_found = false;
                
            }
        }
 
    
    }
    
    
    return 0;
}
 
void selection_sort(trent *tr,const int sz)
{/*
    for (int i = 0; i < sz; ++i)
    {
        int pos = i;
        int tmp=0;      
        for (int j = i + 1; j < sz; ++j)
        {
            if (tr[j].num< tmp)
            {
                //pos=j;
                tmp = tr[j].num;
                tr[j].num = tr[i].num;
                tr[i].num = tmp;
            }  
        }       
    }*/
 
}
У меня не получается сделать сортировку по номерам групп.
0
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
06.05.2012, 16:12 #10
Цитата Сообщение от KOPC1886 Посмотреть сообщение
for (int i = 0; i < sz; ++i)
* * {
* * * * int pos = i;
* * * * int tmp=0;* * *
* * * * for (int j = i + 1; j < sz; ++j)
* * * * {
* * * * * * if (tr[j].num< tmp)
* * * * * * {
* * * * * * * * //pos=j;
* * * * * * * * tmp = tr[j].num;
* * * * * * * * tr[j].num = tr[i].num;
* * * * * * * * tr[i].num = tmp;
* * * * * * } *
* * * * } * * *
* * }*/
если надо поменять местами два составных элемента, то можно сделать так
memcpy(tmp_elem,elem1,sizeof(Elem));
memcpy(elem1,elem2,sizeof(Elem));
memcpy(elem2,tmp_elem,sizeof(Elem));

Добавлено через 2 минуты
KOPC1886, и ещё когда элементы меняются местами счётчик надо уменьшить на 1, чтобы элемент который мы поменяли сравался с другими элементами
цикл надо двойной делать.
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
06.05.2012, 16:25  [ТС] #11
Van111, Эм... я не очень понял)
0
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
06.05.2012, 16:42 #12
KOPC1886, может будет роботать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void selection_sort(trent *tr, const int sz)
{
    trent tmp;
for(int index=1;index>0;index=0)
for (int i=0;i<sz;i++)
{
    for (int j=0;j<sz;j++)
    {
        if (tr[i].num > tr[j].num)
        memcpy(tmp,tr[i],sizeof(trent);
        memcpy(tr[i],tr[j],sizeof(trent);
        memcpy(tr[j],tmp,sizeof(trent);
        index++;
    }
    
}
Добавлено через 10 минут
KOPC1886, я там чуть натупил -вот сортировка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void selection_sort(trent *tr, const int sz)
{
trent tmp;
int is=1
while(is)
{
is=0;
for (int i=1;i<=sz;i++)
{
        
        if (tr[i].num < tr[i-1].num)
        {
        memcpy(tmp,tr[i-1],sizeof(trent);
        memcpy(tr[i-1],tr[i],sizeof(trent);
        memcpy(tr[i],tmp,sizeof(trent);
        is=1;
        }
}
}    
   
    
}
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
06.05.2012, 18:19  [ТС] #13
Van111, у меня 3 ошибки выскакивают
0
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
06.05.2012, 19:14 #14
KOPC1886, include "windows.h"
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
06.05.2012, 22:15  [ТС] #15
Van111, все равно ошибки с memcpy
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2012, 22:15
Привет! Вот еще темы с ответами:

Описать структуру с именем Student - C++
Описать структуру с именем Student, содержащую следующие поля: имя, группа, успеваемость (массив из 4 элементов). Написать программу,...

Описать структуру с именем STUDENT - C++
Описать структуру с именем STUDENT, содержащую следующие поля: фамилии и инициалы; • номе группы; • успеваемость (массив и пят...

Описать структуру с именем STUDENT - C++
помогите,пожалуйста! написала прогу,она не работает(((( #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include&lt;conio.h&gt; ...

Описать структуру с именем STUDENT - C++
1. Описать структуру с именем STUDENT, содержащую следующие поля: • NAME - фамилия и инициалы; • GROUP- номер группы; • SES- успеваемость...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.05.2012, 22:15
Ответ Создать тему
Опции темы

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