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

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

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

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

27.04.2012, 22:44. Просмотров 4329. Ответов 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, содержащую следующие поля: - фамилия и инициалы; - номер группы; - успеваемость (массив из пяти...

38
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
07.05.2012, 16:59 #16
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Van111, все равно ошибки с memcpy
какие именно?

Добавлено через 34 секунды
а понял надо вместо tmp поставить &tmp
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
07.05.2012, 18:21  [ТС] #17
Van111, везде или где?
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
07.05.2012, 18:27 #18
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Van111, везде или где?
там где memcpy
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
07.05.2012, 18:31  [ТС] #19
Van111, поставил все равно ошибки
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
07.05.2012, 18:51 #20
KOPC1886 . Вот сортировка для двух студентов (скрин) как
видите все работает . Посмотрите на номера групп

код

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
/*
-------------   ОПИСАНИЕ РАБОТЫ  ---------
 
    1) СЧИТАЛИ С  ФАЙЛА --  ВЫВОД НА ЭКРАН 
 
    2) ОТСОРТИРОВАЛИ  --  ВЫВОД НА ЭКРАН 
 
    3) ВЫВОД НА ЭКРАН  СТУДЕНТОВ СО СР. БАЛЛОМ  БОЛЬШЕ 4.0
      ЕСЛИ НЕТ ВЫВОД СООБЩЕНИЯ,  ЧТО ТАКИХ НЕТ 
 
      ххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххх
      
      Файл должен содержать 10 строк :
      фамилия студента ,  номер группы и 5 оценок :
      Например :
 
      Ivanov 4 5 7 1.5 1 1
      Petrov 2 8 2 2 3 4
      Sidorov 3 3 3 3.1 3 1
 
              и т.д.
 
 
*/
#include <iostream>
#include <string.h>
#include <fstream>
#define SIZE 10  // кол-во структур 
#define ESIZE 5   // кол-во оценок 
 
   struct Student 
{ 
     char *family;   //  ФАМИЛИЯ 
     int numgroup;  // НОМЕР ГРУППЫ  
     float *eval;     // ОЦЕНКИ 
     float  avgrade;// average grade  СРЕДНИЙ БАЛ 
    Student()
     { 
         avgrade = 0.0;//  НАЧАЛЬНАЯ ИНИЦИАЛИЗАЦИЯ  
         numgroup = 0;
         family = new char[100];
         eval = new float[ESIZE];
         
     }
     ~Student(){
         delete[]family;
         delete[]eval;} 
 
 };
 
   void readFile(Student*,const char*);// ЧТЕНИЕ ИЗ ФАЙЛА и ВЫВОД НА ЭКРАН 
   void sortData(Student*);   // СОРТИРОВКА ПО НОМЕРУ ГРУППЫ 
   void outData(Student*);   // ВЫВОД НА ЭКРАН 
   void average_grade(Student*);     // СРЕДНИЙ БАЛЛ
   void outDataAvGrade(Student* ); // ВЫВОД  ПО  СРЕДНЕМУ БАЛЛУ
 
int main()
{ 
    Student stud[SIZE];
    char filename[70] = "file.txt";
    readFile(stud, filename);
    sortData(stud );
    outData(stud );
    average_grade(stud);
    outDataAvGrade(stud);
    return 0;
}
/////////////////////////////////////////////////////////
/////   ЧТЕНИЕ ИЗ ФАЙЛА и ВЫВОД НА ЭКРАН 
void readFile(Student* stud,const char* fname)
{    
   std::ifstream infile(fname);
    for(size_t i = 0; i < SIZE; i++)
    {
    std::cout << "\nStudent's family : ";
    infile >> stud[i].family ;
    std::cout << stud[i].family ;
    std::cout << "\nGroup's number : ";
    infile >> stud[i].numgroup ;
    std::cout << stud[i].numgroup ;
    std::cout << "\nA 5 evaluations : ";
    for(size_t j = 0; j < ESIZE; j++)
    {
    infile >> stud[i].eval[j] ;
    std::cout << stud[i].eval[j] << ' ';
    }
    std::cout  << std::endl;
    }
};
 
/////////////////////////////////////////////////////////
/////    СОРТИРОВКА ПО НОМЕРУ ГРУППЫ 
/////    фамилия , оценки и номер группы 
void sortData(Student* stud)
    {
    float evalbuf[ESIZE] = {{0.0}};
    size_t numbuf = 0, i, j;
    char familybuffer[100];
    bool flag = true;
     while(flag){
 
         flag = false;
for( i = 0; i < SIZE - 1; ++i)
    {
        if (stud[i + 1].numgroup < stud[i].numgroup) {
 
        numbuf = stud[i].numgroup;
        for( j = 0; j < ESIZE; j++)
        evalbuf[j] = stud[i].eval[j] ;
        strcpy(familybuffer,stud[i].family); 
 
        stud[i].numgroup = stud[i + 1].numgroup;
        for( j = 0; j < ESIZE; j++)
        stud[i].eval[j] = stud[i + 1].eval[j] ;
        strcpy(stud[i].family,stud[i + 1].family);
 
 
        stud[i + 1].numgroup = numbuf;
        for( j = 0; j < ESIZE; j++)
        stud[i + 1].eval[j] = evalbuf[j] ;
        strcpy(stud[i + 1].family, familybuffer); 
 
        flag = true;
        }
    }
     }
    }
///////////////////////////////////////////////////////////
    //   ВЫВОД ФАМИЛИИ, НОМЕРА ГРУППЫ И ОЦЕНОК  
        //      ПОСЛЕ СОРТИРОВКИ  
void outData(Student* stud)
{     std::cout << "\nAfter sort :\n";
     for(size_t i = 0; i < SIZE; i++)
     {
         
    std::cout << "\nStudent's family : " << stud[i].family ;
    std::cout << "\nGroup's number : " << stud[i].numgroup ;
    std::cout << "\nA 5 evaluations :\n";
    for(size_t j = 0; j < ESIZE; j++)
    std::cout <<  stud[i].eval[j] << ' ';
    std::cout  << std::endl;
    }
}
 
////////////////////////////////////////////////////
    // СРЕДНИЙ БАЛЛ КАЖДОГО СТУДЕНТА  
void average_grade(Student* stud)
{
     for(size_t i = 0; i < SIZE; i++)
     {
        for(size_t j = 0; j < ESIZE; j++)
        {
        stud[i].avgrade += stud[i].eval[j];
        }
     stud[i].avgrade /=  ESIZE;
     }
}
 
///////////////////////////////////////////////////////////
    //   ВЫВОД ФАМИЛИИ  СТУДЕНТОВ СО СР. БАЛЛОМ  БОЛЬШЕ 4.0
    // ЕСЛИ НЕТ -  ВЫВОД СООБЩЕНИЯ,  ЧТО ТАКИХ НЕТ 
void outDataAvGrade(Student* stud)
{    
    bool fl = false;
    std::cout << "\nStudents with average grade > 4.0  :\n";
     for(size_t i = 0; i < SIZE; i++)
     {
        if(stud[i].avgrade > 4.0) 
        {
            fl = true;
    std::cout  << " Family  "<< stud[i].family <<  " average grade " << stud[i].avgrade;
    std::cout  << std::endl;
        }
    }
     if(!fl) std::cout << " \tnot found .";
}
0
Миниатюры
Описать структуру с именем STUDENT  
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
07.05.2012, 18:57  [ТС] #21
MrCold, и где же она тут работает? 22, 2 ,2 ,22?
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
07.05.2012, 19:00 #22
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Van111, поставил все равно ошибки
какие?
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
07.05.2012, 19:05 #23
22 и 2 это номера групп


заполните файл самостоятельно и все поймете

Добавлено через 2 минуты
Уже вам писал
Цитата Сообщение от MrCold Посмотреть сообщение
Файл должен содержать 10 строк :
* * * фамилия студента , *номер группы и 5 оценок :
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
07.05.2012, 19:09  [ТС] #24
Van111, с memcpy
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
07.05.2012, 22:41 #25
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Van111, с memcpy
напишите саму ошибку ,что выдаёт компилятор(поконкретнее)?
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
07.05.2012, 22:53  [ТС] #26
Van111, error C2664: 'memcpy' : cannot convert parameter 1 from 'trent' to 'void *'
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
08.05.2012, 18:48 #27
KOPC1886, блин корс вы же не новичёк, 200 сообщений на счету а с указателями запутались
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;
        }
}
}    
   
    
}
я заметил у вас там структура trent поменялась на структуру student следственно в коде тоже надо все trent на student поменять
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
08.05.2012, 19:54  [ТС] #28
Van111, причем тут сообщения) А вот с указателями да..я не очень с ними.
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
08.05.2012, 20:01 #29
Цитата Сообщение от KOPC1886 Посмотреть сообщение
причем тут сообщения)
ну раз 200 сообщений то значит что то кодете на форуме, значит опыт есть)
0
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
08.05.2012, 20:38  [ТС] #30
Van111, чего то у меня после сортировки не всё выводится
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2012, 20:38
Привет! Вот еще темы с ответами:

Описать структуру с именем 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- успеваемость...


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

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

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