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

Обращение к элементам массива структур - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 694
10.03.2013, 02:20     Обращение к элементам массива структур #1
Вводим n-ое количество имен и количество оценок каждому из имен.(студент - оценки)

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
#include <iostream>
 
using namespace std;
 
int main()
{
int i,j,k,n=2;
int sr;
struct student
{
char fio[25];
int otc[25];
} mas[10];
for (i=0;i<n;i++)
{
cout << "Fio"<<endl;
cin>>mas[i+1].fio;
cout << "10 otcenok"<<endl;
for (j=0;j<n;j++)
{
cin>>mas[j].otc[j];
}
}
for (k=0;k<n;k++)
{
cout<<"Sredn"<<" "<<mas[k+1].fio<<" "<<endl;
}
}
Найти среднее значение по каждому студенту и среднее значение по каждому предмету (каждая оценка - отдельный предмет, количество оценок и студентов = n)

Ввести - ввел, а как обращаться к элементам массива оценок в структуре и оперировать с ними - не ясно...
Получилось лишь обращение к массиву имен...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,892
Записей в блоге: 1
10.03.2013, 03:29     Обращение к элементам массива структур #2
Цитата Сообщение от Satansoft Посмотреть сообщение
как обращаться к элементам массива оценок в структуре
К элементам структуры в массиве.

Структура должна описывать одного студента. Размерность массива = числу студентов. Один студент --> один элемент массива.
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 694
10.03.2013, 04:40  [ТС]     Обращение к элементам массива структур #3
Все верно, массив структур на 10 элементов, каждая структура соответствует студенту и n количества оценок, я не пойму как обращаться к элементам массива оценок в структуре (mas.otc)...
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,892
Записей в блоге: 1
10.03.2013, 17:01     Обращение к элементам массива структур #4
Цитата Сообщение от Satansoft Посмотреть сообщение
как обращаться к элементам массива оценок в структуре
К элементам массива - по индексу, к элементам структуры - по имени.

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
#include <iostream>
 
using namespace std;
 
#define MAX_SURNAME_LEN             (25)
#define MAX_STUDENT_COUNT           (10)
 
struct STUDENT
{
   char     pszSurname[MAX_SURNAME_LEN + 1];
   int      iEstimate;
};
 
int main()
{
   STUDENT     pStudents[MAX_STUDENT_COUNT];
 
   for (int ii = 0; ii < MAX_STUDENT_COUNT; ++ii)
   {
      cout << "Enter surname and estimate for this student:" << endl;
 
      cin >> pStudents[ii].pszSurname;
      cin >> pStudents[ii].iEstimate;
   }
 
   double   fAverage = 0.0;
 
   for (int jj = 0; jj < MAX_STUDENT_COUNT; ++jj)
   {
      fAverage += (double)pStudents[jj].iEstimate;
   }
 
   if (MAX_STUDENT_COUNT > 0)
   {
      fAverage /= (double)MAX_STUDENT_COUNT;
 
      cout << "Average student estimate is: " << fAverage << endl;
   }
 
   return 0;
}
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 694
10.03.2013, 17:23  [ТС]     Обращение к элементам массива структур #5
Количество студентов = количеству оценок КАЖДОМУ, то есть 10 студентов и каждому по 10 оценок и нужно найти среднее на каждом i-ом шаге, вот где загвоздка...
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,892
Записей в блоге: 1
10.03.2013, 18:21     Обращение к элементам массива структур #6
И все вводятся с клавиатуры? Да, вы - маньяк :-) Сделайте чтение из файла.

Измените
C++
1
int      iEstimate;
на
C++
1
int      piEstimate[MAX_ESTIMATE_COUNT];
и считайте на каждом шаге ввода среднее по студенту (добавится еще цикл ввода оценок).

Добавлено через 26 минут
P.S.

Если хранение всех оценок не требуется, сохраняйте только среднюю для каждого студента:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
pStudents[ii].fAverage = 0.0;
 
for (int jj = 0; jj < MAX_ESTIMATE_COUNT; ++jj)
{
   pStudents[ii].fAverage += <введенная_оценка>;
}
 
if (MAX_ESTMATE_COUNT > 0)
{
   pStudents[ii].fAverage /= (double)MAX_ESTIMATE_COUNT;
 
   cout << "Average student estimate is: " << pStudents[ii].fAverage << endl;
}
Satansoft
 Аватар для Satansoft
7 / 7 / 1
Регистрация: 27.02.2012
Сообщений: 694
10.03.2013, 19:35  [ТС]     Обращение к элементам массива структур #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
#include <iostream>
 
using namespace std;
 
int main()
{
int i,j,k,n=2;
double sr=0.0, srp=0.0;
struct student
{
char fio[25];
int otc[225];
} mas[10];
for (i=0;i<n;i++)
{
cout << "Name:"<<endl;
cin>>mas[i].fio;
cout <<n<<" evaluations:"<<endl;
for (j=0;j<n;j++)
{
cin>>mas[j].otc[j];
}
}
for (k=0;k<n;++k)
{
    srp=mas[k].otc[k];
    sr+=mas[k].otc[k];
cout<<"Average:"<<" "<<mas[k].fio<<" "<<srp/n<<" "<<sr/n<<endl;
}
}
Добавлено через 4 минуты
Алгоритм явный, кагбэ, но видимо обращаюсь не верно, может в k-й цикл ещё один вложить надо?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2013, 20:07     Обращение к элементам массива структур
Еще ссылки по теме:

Доступ к элементам динамического массива из структур C++
Обращение к элементам массива через биты некоторого числа C++
Обращение к элементам матрицы C++

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

Или воспользуйтесь поиском по форуму:
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,892
Записей в блоге: 1
10.03.2013, 20:07     Обращение к элементам массива структур #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
int main()
{
   STUDENT     pStudents[MAX_STUDENT_COUNT];
 
   for (int ii = 0; ii < MAX_STUDENT_COUNT; ++ii)
   {
      cout << "Enter surname and estimate series for this student:" << endl;
 
      cin >> pStudents[ii].pszSurname;
 
      pStudents[ii].fAverageEstimate = 0.0;
 
      for (int jj = 0; jj < MAX_ESTIMATE_COUNT; ++jj)
      {
         int      iEstimate = 0;
 
         cin >> iEstimate;
 
         pStudents[ii].fAverageEstimate += (double)iEstimate;
      }
 
      pStudents[ii].fAverageEstimate /= (double)MAX_ESTIMATE_COUNT;
 
      cout << "Average student estimate is: " << pStudents[ii].fAverageEstimate << endl;
   }
 
   return 0;
}
Yandex
Объявления
10.03.2013, 20:07     Обращение к элементам массива структур
Ответ Создать тему
Опции темы

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