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

Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции. - C++

Восстановить пароль Регистрация
 
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
16.02.2014, 04:02     Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции. #1
Добрый вечер, друзья)
Прошу помочь с кодом, а именно с функцией search_winner.
Совсем запутался, в общем нужна помощь..
Задание к коду:
Протоколы конкурса имеют такую инфу: фамилия, имя, адрес, секция и набранный балл конкурсантов. Найти и вывести инфу о победителе в каждой секции. Найти средний балл каждой секции.
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
#include <iostream>
#include <conio.h>
using namespace std;
 
const int SIZE = 20;//допустим 20
enum section{football=1,basketball,atlethism};
 
struct competition{
       char surname[10];
       char name[10];
       char adress[10];
       section Section; 
       int score;
}aza[SIZE];
 
int display(int i);
     
       
void input()
{
     int i;
     for(i=0; i<SIZE; i++)
     {
              
     cout<<"\nFamiliya: ";
     cin>>aza[i].surname;
     
     cout<<"\nImya: ";
     cin>>aza[i].name;
     
     cout<<"\nAdress: ";
     cin>>aza[i].adress;
     int sc;
     do
     cout<<"\nSekciya: ";
     while(sc<1||sc>3);
     aza[i].Section=(section)sc;
     cin.get();
     
     cout<<"\nScore: ";
     cin>>aza[i].score;
     }
}
 
 
void search_winner()
{
     int i,max1=0,max2=0,max3=0,max4=0,max5=0,max6=0;
     
     if(aza[i].Section=(section)1)//хочу получить инфу по секции футбол
     {
            for(i=0; i<SIZE; i++)
            {
                if(aza[i].score<max)//хочу найти максимальный балл и вывести инфу по победителю
                max1=i;
            }
                
                cout<<"Winner of the football section:\n";
                display(i);}
     
                    for (i=0; i<SIZE; i++)//хочу узнать средний балл по секции
                    {
                        max2+=aza[i].score;
                    }
                        cout<<"The average score is: "<<max2;
      
      if(aza[i].Section=(section)2)
      {
            for(i=0; i<SIZE; i++)
            {
                if(aza[i].score<max)
                max3=i;
            }
     
                cout<<"Winner of the basketball section:\n";
                display(i);
      }
                    for (i=0; i<SIZE; i++)
                    {
                        max4+=aza[i].score;
                    }
     
                    cout<<"The average score is: "<<max4;
      
     if(aza[i].Section=(section)3)
     {
            for(i=0; i<SIZE; i++)
            {
                if(aza[i].score<max)
                max5=i;
            }
      
            cout<<"Winner of the athletism section:\n";
            display(i);
     }
            for (i=0; i<SIZE; i++)
            {
                max6+=aza[i].score;}
                cout<<"The average score is: "<<max6;
}            
 
 
int display(int i)
{
              cout<<aza[i].surname<<"\n";
              cout<<aza[i].name<<"\n";
              
              cout<<aza[i].adress<<"\n";
              cout<<aza[i].score<<"\n";
              
              cout<<"*************************"<<"\n";
              return 0;
}
 
int main()
{   
    input();
    cout<<"\nResults: \n";
    cout<<"************************\n";
    search_winner();
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2014, 04:02     Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции.
Посмотрите здесь:

C++ найти средний балл студента по заданной фамилии
C++ 7.Дан список студентов. Общие поля: Ф.И.О., дата рождения, группа, средний балл. Если средний балл 4 и выше, то указать размер стипендии. Если средний
C++ Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл
Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) C++
C++ В каждой строке найти минимальный элемент, затем среди них найти максимальное и вывести на экран индекс этого элемента
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ded_Vasilij
 Аватар для Ded_Vasilij
229 / 211 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
16.02.2014, 08:42     Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции. #2
Цитата Сообщение от aimbat Посмотреть сообщение
C++
1
2
3
4
5
for(i=0; i<SIZE; i++)
   {
      if(aza[i].score<max)//хочу найти максимальный балл и вывести инфу по победителю
         max1=i;
    }
Честно - не понял что Вы хотите здесь сделать.
stikkas
 Аватар для stikkas
19 / 19 / 6
Регистрация: 26.01.2014
Сообщений: 56
16.02.2014, 10:19     Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции. #3
во-первых для записи в массив символов правильней использовать
cin.getline(arr, size_of_array)

для подсчета очков в секции и кол-во участников можно использовать следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct Section {
  int numbers;
  int score;
  float average() {
    return float(score) / numbers;
}
};
 
Section getScoresOfSection(competition arr[], int size, section tip) {
 Section sec = {0, 0};
 
for (int i = 0; i < size; ++i)
 {
   if (arr[i].Section == tip) {
      sec.numbers++;
      sec.score += arr[i].score;
   }
 }
return sec;
}
Для нахождения победителя в каждой секции можно использовать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
competition getWinner(competition arr[], int size, section tip) {
   competition winner;
   bool found = false;
 for (int i = 0; i < size; ++i) {
    if (arr[i].Section == tip) {
        if (!found) {
          winner = arr[i];
          found = true;
        }
        else if (arr[i].score > winner.score)
          winner = arr[i];
   }
}
if (!found)
 throw "Winner not found";
return winner;
}
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
16.02.2014, 19:49  [ТС]     Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции. #4
stikkas
Подставил, скомпилировало, но виснет(
В чем проблема не подскажешь?
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
#include <iostream>
#include <conio.h>
using namespace std;
 
const int SIZE = 3;
enum section{football=1,basketball,atlethism};
 
struct competition{
       char surname[10];
       char name[10];
       char adress[10];
       section Section; 
       int score;
}aza[SIZE];
 
int display(int i);
     
       
void input(competition arr[], int SIZE)
{
     int i;
     for(i=0; i<SIZE; i++)
     {
              
     cout<<"Surname: \n";
     cin>>aza[i].surname;
     
     cout<<"Name: \n";
     cin>>aza[i].name;
     
     cout<<"Adress: \n";
     cin>>aza[i].adress;
     int sc;
     do{
      cout<<"Section: \n";
      cin>>sc;} while(sc<1||sc>3);
     aza[i].Section=(section)sc;
     cin.get();
     
     cout<<"Score: \n";
     cin>>aza[i].score;
     }
}
 
struct Section 
{
  int number;
  int score;
  float average() 
{
    return float(score) / number;
}
};
 
 
Section getScoresOfSection(competition arr[], int SIZE, section tip)
{
        Section sec = {0, 0};
 
for (int i = 0; i < SIZE; i++)
 {
   if (arr[i].Section == tip) 
   {
      sec.number++;
      sec.score += arr[i].score;
   }
 }
      return sec;
}
 
 
competition getWinner(competition arr[], int SIZE, section tip) 
{
   competition winner;
   bool found = false;
 for (int i = 0; i < SIZE; i++) 
 {
    if (arr[i].Section == tip) 
    {
        if (!found) {
          winner = arr[i];
          found = true;
        }
        else if (arr[i].score > winner.score)
          winner = arr[i];
   }
}
          if (!found)
          throw "Winner not found";
          return winner;
}         
 
 
int display(int i)
{
              cout<<aza[i].surname<<"\n";
              cout<<aza[i].name<<"\n";
              
              cout<<aza[i].adress<<"\n";
              cout<<aza[i].score<<"\n";
              
              cout<<"*************************"<<"\n";
              return 0;
}
 
int main()
{   
    competition *arr;
    int i;
    section tip;
    input(arr,SIZE);
    cout<<"\nResults: \n";
    cout<<"************************\n";
    getScoresOfSection(arr,SIZE,tip);
    getWinner(arr,SIZE,tip);
    getch();
}
stikkas
 Аватар для stikkas
19 / 19 / 6
Регистрация: 26.01.2014
Сообщений: 56
17.02.2014, 09:03     Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции. #5
Цитата Сообщение от aimbat Посмотреть сообщение
competition *arr;
для начало измени на это
C++
1
competition arr[SIZE]
Цитата Сообщение от aimbat Посмотреть сообщение
int i;
что это тут делает?
Цитата Сообщение от aimbat Посмотреть сообщение
aza[SIZE];
это убрать оставить только ;
Цитата Сообщение от aimbat Посмотреть сообщение
void input(competition arr[], int SIZE) { int i; for(i=0; i<SIZE; i++) { cout<<"Surname: \n"; cin>>aza[i].surname; cout<<"Name: \n"; cin>>aza[i].name; cout<<"Adress: \n"; cin>>aza[i].adress; int sc; do{ cout<<"Section: \n"; cin>>sc;} while(sc<1||sc>3); aza[i].Section=(section)sc; cin.get(); cout<<"Score: \n"; cin>>aza[i].score; } }
поменять aza на arr (для чего тогда вообще передовать arr?)
Пользоваться глобальными переменными в C++ - плохой тон.
Цитата Сообщение от aimbat Посмотреть сообщение
getScoresOfSection(arr,SIZE,tip); getWinner(arr,SIZE,tip);
перед вызовом этих функций не плохо бы инициализировать tip (неплохо читай как обязательно)
Цитата Сообщение от aimbat Посмотреть сообщение
competition getWinner(competition arr[], int SIZE, section tip)
Вызов этой функции заключить в try - catch (на случай если в секции которую смотришь нет участников)
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
21.02.2014, 03:32  [ТС]     Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции. #6
а как tip инициализировать?
Yandex
Объявления
21.02.2014, 03:32     Найти и вывести информацию о победителе в каждой секции. Найти средний балл каждой секции.
Ответ Создать тему
Опции темы

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