Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/38: Рейтинг темы: голосов - 38, средняя оценка - 4.74
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
1

Структуры и массивы, сортировка списка.

08.01.2011, 05:56. Показов 7784. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание звучит так...
Написать программу, в которой необходимо создать структуру, элементами которой являются: имя, фамилия, год рождения студента и оценки по пяти экзаменам. Объявить массив данных о студентах группы типа структуры и ввести значения его элементов. Определить сумму баллов за сессию каждого студента и отсортировать список студентов по баллам в порядке возрастания. Сортировку реализовать в отдельной функции. Предусмотреть меню. Результаты работы программы записать в файл.

Я не прошу писать программу полностью, прошу лишь показать как реализовать сортировку и не могу понять, что значит предусмотреть меню.
Заранее спасибо!
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2011, 05:56
Ответы с готовыми решениями:

Структуры, массивы, сортировка
Люди Help! Уже второй день сижу над задачей и не могу понять в чём проблема. Задача такая: 1)...

Структуры данных: сортировка однонаправленного списка
значит так, есть вот эта программа: #include <stdio.h> #include <conio.h> #include <math.h>...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры)
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом...

Структуры, массивы, указатели, динамические массивы структур
Помогите с решением задачи (прикрепляю условие). Заранее спасибо.

37
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.01.2011, 06:53 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
#include <stdio.h>
 
typedef struct _A A;
 
void sort(A *, int);
 
typedef struct _A
{
    int a;
    char c;
} A;
 
#define N 5
 
int main(void)
{
    A arr[N];
    int i;
 
    for (i = 0; i < N; ++i)
    {
        printf("arr[%d].a = ", i);
        scanf("%d", &arr[i].a);
        printf("arr[%d].c = ", i);
        scanf("\n%c", &arr[i].c);
    }
 
    sort(arr, N);
 
    for (i = 0; i < N; ++i)
        printf("arr[%d].a = %d\tarr[%d].c = %c\n", i, arr[i].a, i, arr[i].c);
 
    return 0;
}
 
void sort(A *arr, int n)
{
    A temp;
    int i, j;
 
    for (i = 0; i < n; ++i)
    {
        for (j = n - 1; j > i; --j)
        {
            if (arr[j - 1].a > arr[j].a)
            {
                temp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = temp;
            }
        }
    }
}
Предусмотреть меню - это значит, что пользователь должен выбирать, какую операцию в данный момент должна совершить программа, ввести значения элементов массива, вывести сумму баллов каждого студента или отсортировать список студентов.

Пример меню:

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
#include <stdio.h>
 
void function1();
void function2();
void function3();
void exit();
 
int main(void)
{
    int v;
 
    do
    {
        printf("\nMain menu:\n");
        printf("1. Item 1\n");
        printf("2. Item 2\n");
        printf("3. Item 3\n");
        printf("4. Exit\n");
        printf("Choise: ");
        scanf("%d", &v);
 
        switch (v)
        {
        case 1:
            function1();
            break;
        case 2:
            function2();
            break;
        case 3:
            function3();
            break;
        case 4:
            exit();
            break;
        default:
            printf("You must enter a number from 1 to 4\nTry again\n\n");
            continue;
        }
    }
    while (v != 4);
 
    return 0;
}
 
void function1()
{
    printf("\nCall function 1...\n");
}
 
void function2()
{
    printf("\nCall function 2...\n");
}
 
void function3()
{
    printf("\nCall function 3...\n");
}
 
void exit()
{
    printf("\nExit...\n");
}
2
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
08.01.2011, 14:29  [ТС] 3
silent_1991, Это примеры на Си, мне надо на С++, они существенно отличаются?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.01.2011, 14:30 4
footbaler, Вводом-выводом. Но можно реализовать и интересные вещи, вроде перегрузки операторов, хотя здесь это по сути не нужно)
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.01.2011, 14:39 5
Да практически ничем. В первом примере изобрёл велосипед и вынес обмен переменных местами в самописный шаблонный swap:

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
#include <iostream>
 
struct A
{
    int a;
    char c;
};
 
void sort(A *, int);
template< typename T > void swap(T &, T &);
 
const int N = 5;
 
int main()
{
    A arr[N];
 
    for (int i = 0; i < N; ++i)
    {
        std::cout << "arr[" << i << "].a = ";
        std::cin >> arr[i].a;
        std::cout << "arr[" << i << "].c = ";
        std::cin >> arr[i].c;
    }
 
    sort(arr, N);
 
    for (int i = 0; i < N; ++i)
        std::cout << "arr[" << i << "].a = " << arr[i].a << "\tarr[" << i << "].c = " << arr[i].c << std::endl;
 
    return 0;
}
 
void sort(A *arr, int n)
{
    for (int i = 0; i < n; ++i)
        for (int j = n - 1; j > i; --j)
            if (arr[j - 1].a > arr[j].a)
                swap(arr[j - 1], arr[j]);
}
 
template< typename T >
void swap(T &left, T &right)
{
    T temp = left;
    left = right;
    right = temp;
}
Второй:

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
#include <iostream>
 
void function1();
void function2();
void function3();
void exit();
 
int main()
{
    int v;
 
    do
    {
        std::cout << std::endl <<
                     "Main menu:" << std::endl <<
                     "1. Item 1"  << std::endl <<
                     "2. Item 2"  << std::endl <<
                     "3. Item 3"  << std::endl <<
                     "4. Exit"    << std::endl <<
                     "Choise: ";
        std::cin >> v;
 
        switch (v)
        {
        case 1:
            function1();
            break;
        case 2:
            function2();
            break;
        case 3:
            function3();
            break;
        case 4:
            exit();
            break;
        default:
            std::cout << "You must enter a number from 1 to 4\nTry again" << std::endl << std::endl;
            continue;
        }
    }
    while (v != 4);
 
    return 0;
}
 
void function1()
{
    std::cout << std::endl << "Call function 1..." << std::endl;
}
 
void function2()
{
    std::cout << std::endl << "Call function 2..." << std::endl;
}
 
void function3()
{
    std::cout << std::endl << "Call function 3..." << std::endl;
}
 
void exit()
{
    std::cout << std::endl << "Exit..." << std::endl;
}
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.01.2011, 14:40 6
Лучший ответ Сообщение было отмечено как решение

Решение

Но если уж С++
тогда

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
struct some
{
    some(int a_=0):a(a_)
    {
    }
    int a;
    some& operator =(const some& other)
    {
        if(this == &other)
            return *this;
        a=other.a;
        return *this;
    }
};
 
bool operator <(const some& first, const some& second)
{
    return first.a < second.a;
}
 
std::ostream& operator <<(std::ostream& os, const some& one)
{
    os<<one.a<<'\n';
    return os;
}
 
std::istream& operator >>(std::istream& is, some& one)
{
    std::cout<<"Enter a: ";
    is>>one.a;
    return is;
}
 
int main()
{
    typedef std::vector<some> T_vec;
    T_vec vec((std::istream_iterator<some>(std::cin)), std::istream_iterator<some>());
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<some>(std::cout));
    std::sort(vec.begin(), vec.end());
    std::cout<<"After sort\n";
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<some>(std::cout));
    return 0;
}
3
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.01.2011, 14:44 7
ForEveR, эх, началось))) Когда уже у меня руки до STL дойдут?)))
0
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
08.01.2011, 19:25  [ТС] 8
silent_1991, ForEveR, спасибо вам за примеры, но что то мне тяжело пока это все собрать вместе.

Добавлено через 3 часа 19 минут
Помогите пожалуйста еще чем-нибудь, натолкните, что в начале надо писать, а то я уже потерялся, со вчерашнего дня сижу спал 4 часа.
0
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
09.01.2011, 13:21  [ТС] 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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
 
struct STUDENT
{
   char name[15];
   char surname[15];
   int god_r;
   int ocenki;
};
 
int main()
{
  int n, i, j;
  cout<<"Ââåäèòå êîëè÷åñòâî ñòóäåíòîâ: ";
  cin>>n;
  STUDENT *students;
  students = new STUDENT[n]; 
  for(i=0;i<n;i++)
  {
    cout<<"Ñòóäåíò ¹ "<<i+1<<"\n";
    cout<<"Ââåäèòå ôàìèëèþ ñòóäåíòà: \n";
    cin>>students[i].surname;
    cout<<"Ââåäèòå èìÿ ñòóäåíòà: \n";
    cin>>students[i].name;
    cout<<"Ââåäèòå ãîä ðîæäåíèÿ: \n";      
    cin>>students[i].god_r;
    for(j=0; j<5; j++)
    {
      cout<<"Ââåäèòå îöåíêè ïî ýêçàìåíó "<<j+1<<" \n";
      cin>>students[i].ocenki;
    }
  }
  for(i=0;i<n;i++)
  {    
    cout<<"| "<<students[i].surname<<" "<<students[i].name<<" "<<students[i].god_r
    <<" "<<students[i].ocenki<<endl;
  }
  getch(); 
  return 0;
}
Кто что может добавить? Буду благодарен любой помощи!

Добавлено через 13 часов 4 минуты
Все еще актуально.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2011, 18:07 10
Хм... А что тут добавить? Теперь сортировку пишите и меню - и будет вам счастье)))
1
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
09.01.2011, 18:12  [ТС] 11
silent_1991, так вот я и пока не понимаю как правильно написать сортировку и меню, хоть и примеры приведены.
А еще как мне посчитать сумму оценок каждого студента, точнее я понимаю как ее найти, но вот куда мне это вписать?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2011, 18:55 12
footbaler, делаете на каждую возможность вашей программы функцию. Например надо отсортировать - пишите функцию сортировки. Надо удалить элемент - пишите функцию удаления. Надо посчитать какую-нибудь сумму - пишите такую функцию. Потом на каждую же возможность делаете пункт меню. И когда пользователь выберет желаемый пункт меню - запускаете соответствующую функцию. Простенький пример:

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
#include <stdio.h>
 
int sum(int, int);
int subtract(int, int);
int multiply(int, int);
int divide(int, int);
 
int main()
{
    int a, b;
    int v;
 
    printf("Enter two numbers: ");
    scanf("%d%d", &a, &b);
 
    do
    {
        printf("Enter action:\n");
        printf("1. Sum\n");
        printf("2. Subtract\n");
        printf("3. Multiply\n");
        printf("4. Divide\n");
        printf("5. Exit\n");
        printf("Your choise: ");
        scanf("%d", &v);
 
        switch (v)
        {
        case 1:
            printf("\n%d + %d = %d\n\n", a, b, sum(a, b));
            break;
        case 2:
            printf("\n%d - %d = %d\n\n", a, b, subtract(a, b));
            break;
        case 3:
            printf("\n%d * %d = %d\n\n", a, b, multiply(a, b));
            break;
        case 4:
            printf("\n%d / %d = %d\n\n", a, b, divide(a, b));
            break;
        case 5:
            break;
        default:
            printf("\nUnknown action!\nTry again\n\n");
            continue;
        }
    }
    while (v != 5);
 
    return 0;
}
 
int sum(int a, int b)
{
    return a + b;
}
 
int subtract(int a, int b)
{
    return a - b;
}
 
int multiply(int a, int b)
{
    return a * b;
}
 
int divide(int a, int b)
{
    return a / b;
}
Добавлено через 1 минуту
Сортировку я вам написал, просто вставляйте в свою программу и тип массива, который сортируется, и временного элемента temp измените (у меня был A, замените на STUDENT).
1
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
09.01.2011, 20:26  [ТС] 13
Дополненный кусок текста, получилось что то непонятное, скажите я на правильном пути или получилась чушь?
Ошибок не выдает...
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
 
struct STUDENT
{
  char name[15];
  char surname[15];
  int god_r;
  int ocenki;
  int a;
  char c;
 };
void sort(STUDENT *, int);
void swap(STUDENT &, STUDENT &);
const int N = 5;
int main()
{
  STUDENT st[15];
  int n;
  cout<<"Ââåäèòå êîëè÷åñòâî ñòóäåíòîâ: ";
  cin>>n;
  for(int i=0;i<n;i++)
  {
    cout<<"Ñòóäåíò ¹ "<<i+1<<"\n";
    cout<<"Ââåäèòå ôàìèëèþ ñòóäåíòà: \n";
    cin>>st[i].surname;
    cout<<"Ââåäèòå èìÿ ñòóäåíòà: \n";
    cin>>st[i].name;
    cout<<"Ââåäèòå ãîä ðîæäåíèÿ: \n";      
    cin>>st[i].god_r;
    for(int j=0; j<5; j++)
    {
      cout<<"Ââåäèòå îöåíêè ïî ýêçàìåíó "<<j+1<<" \n";
      cin>>st[i].ocenki;
     } 
   }
 
  sort(st, N);
  for (i = 0; i < N; ++i)
  cout << "st[" << i << "].a = " << st[i].a << "\tarr[" << i << "].c = "<<st[i].c<<endl;
  return 0;
}
 
void sort(STUDENT *st, int n)
{
    for (int i = 0; i < n; ++i)
        for (int j = n - 1; j > i; --j)
            if (st[j - 1].a > st[j].a)
                swap(st[j - 1], st[j]);
}
 
void swap(STUDENT &left, STUDENT &right)
{
    STUDENT temp = left;
    left = right;
    right = temp;
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
09.01.2011, 20:32 14
Вообще-то не поле a в структуру надо было добавить, а в коде сортировки изменить поле, по которому будете сортировать... Да и с вы тоже туда зачем-то добавили...
1
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
10.01.2011, 05:26  [ТС] 15
silent_1991, все, я похоже понял, скоро отпишу...

Добавлено через 8 часов 14 минут
Похоже все таки не понял.
Вот что получилось. Меню появляется, данные, о студенте, дает ввести, не находит сумму баллов (никак не могу понять как это реализовать), т.к. нет суммы баллов, не сортирует, но сортировка по моему правильно сделана... Скажите, я хоть что то правильно написал или меня не туда понесло?
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
 
struct STUDENT
{                
  char name[15];  
  char surname[15];
  int god_r;
  int ocenka;
  int summa;
 };
 
void vvod(STUDENT *, int);
void summa(STUDENT *, int);
void sort(STUDENT *, int);
void exit();
void swap(STUDENT &, STUDENT &);
 
int main()
{
  STUDENT st[30];
  int v, n;
  do
  {
    cout<<
    "Ââåäèòå 1-3"<<endl<<
    "1. Ââåñòè äàííûå î ñòóäåíòàõ"<<endl<<
    "2. Ïîñ÷èòàòü ñóììó áàëîâ"<<endl<<
    "3. Îòñîðòèðîâàòü ñïèñîê ñòóäåíòîâ"<<endl<<
    "4. Âûõîä"<<endl<<
    "Choise: ";
    cin >> v;
    switch (v)
    {
      case 1:
    vvod(st, n);
    break;
      case 2:
        summa(st, n);
      case 3:
    sort(st, n);
    for (int i = 0; i < n; ++i)
  cout <<st[i].surname<<"  "<<st[i].name<<" "<<st[i].god_r<<" "<<st[i].summa<<endl;
        break;
      case 4:
        exit();
        break;
      default:
    cout << "You must enter a number from 1 to 4\nTry again" << endl << endl;
        continue;
     }
   }
  while (v != 4);
  return 0;
}
 
void vvod(STUDENT *st, int n)
{
  cout<<"Ââåäèòå êîëè÷åñòâî ñòóäåíòîâ: ";
  cin>>n;
  for(int i=0; i<n; i++)
  {
    cout<<"Ñòóäåíò ¹ "<<i+1<<"\n";
    cout<<"Ââåäèòå ôàìèëèþ ñòóäåíòà: \n";
    cin>>st[i].surname;
    cout<<"Ââåäèòå èìÿ ñòóäåíòà: \n";
    cin>>st[i].name;
    cout<<"Ââåäèòå ãîä ðîæäåíèÿ ñòóäåíòà: \n";      
    cin>>st[i].god_r;
    for(int j=0; j<5; j++)
    {
      cout<<"Ââåäèòå îöåíêó ïî ýêçàìåíó "<<j+1<<" \n";
      cin>>st[i].ocenka;
      }
   }
}
 
void summa(STUDENT *st, int n)
{
for(int i=0; i<n; i++)
      for(i=0; i<5; i++)
       st[i].summa+=st[i].ocenka;
     cout<<"Ñóììà áàëëîâ="<<st[i].summa<<"\n";
 }
void sort(STUDENT *st, int n)
{
    for (int i = 0; i < n; ++i)
        for (int j = n - 1; j > i; --j)
       if (st[j - 1].summa > st[j].summa)
        swap(st[j - 1], st[j]);
}
void swap(STUDENT &left, STUDENT &right)
{
    STUDENT temp = left;
    left = right;
    right = temp;
}
 
void exit()
{
    cout << endl << "Âûõîä..." << endl;
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2011, 05:30 16
footbaler, у вас в функции main n не инициализирована, но повсеместно используется. Не дело...
1
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
10.01.2011, 05:50  [ТС] 17
silent_1991, вот исправил, и изменил русские буквы на латинские... подскажете что у меня еще не так в тексте?
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
 
struct STUDENT
{                
  char name[15];  
  char surname[15];
  int god_r;
  int ocenka;
  int summa;
 };
 
void vvod(STUDENT *, int);
void summa(STUDENT *, int);
void sort(STUDENT *, int);
void exit();
void swap(STUDENT &, STUDENT &);
 
int main()
{
  STUDENT st[30];
  int v, n;
  cout<<"Vvedite kolihestvo studentov: ";
  cin>>n;
  do
  {
    cout<<
    "Vvedite punkt menu 1-4"<<endl<<
    "1. Vvesti dannie o studentax"<<endl<<
    "2. Poshcitat' summu ballov kajdogo studenta"<<endl<<
    "3. Otsortirovaty spisok studentov"<<endl<<
    "4. Exit"<<endl<<
    "Choise: ";
    cin >> v;
    switch (v)
    {
      case 1:
    vvod(st, n);
    break;
      case 2:
           summa(st, n);
           break;
      case 3:
    sort(st, n);
    for (int i = 0; i < n; ++i)
  cout <<st[i].surname<<"  "<<st[i].name<<" "<<st[i].god_r<<" "<<st[i].summa<<endl;
        break;
      case 4:
        exit();
        break;
      default:
    cout << "You must enter a number from 1 to 4\nTry again" << endl << endl;
        continue;
     }
   }
  while (v != 4);
  return 0;
}
 
void vvod(STUDENT *st, int n)
{
  for(int i=0; i<n; i++)
  {
    cout<<"Student ¹: "<<i+1<<"\n";
    cout<<"Vvedite familiu studenta: \n";
    cin>>st[i].surname;
    cout<<"Vvedite imya studenta: \n";
    cin>>st[i].name;
    cout<<"Vvedite god rojdeniya studenta: \n";      
    cin>>st[i].god_r;
    for(int j=0; j<5; j++)
    {
      cout<<"Vvedite ocenku po ekzamenu "<<j+1<<" \n";
      cin>>st[i].ocenka;
      }
   }
}
 
void summa(STUDENT *st, int n)
{
for(int i=0; i<n; i++)
      for(i=0; i<5; i++)
       st[i].summa+=st[i].ocenka;
     cout<<"Summa ballov="<<st[i].summa<<"\n";
 }
void sort(STUDENT *st, int n)
{
    for (int i = 0; i < n; ++i)
        for (int j = n - 1; j > i; --j)
       if (st[j - 1].summa > st[j].summa)
        swap(st[j - 1], st[j]);
}
void swap(STUDENT &left, STUDENT &right)
{
    STUDENT temp = left;
    left = right;
    right = temp;
}
 
void exit()
{
    cout << endl << "Exit..." << endl;
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2011, 05:53 18
footbaler, у вас сумма неверно считается, потому что изначально переменная summa не инициализирована, и при прибавлении к ней очередной оценки получается мусор. В функции подсчёта суммы перед вложенным циклом инициализируйте переменную summa очередного студента нулём.
1
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
10.01.2011, 06:17  [ТС] 19
silent_1991, Извините, я понял что это надо сделать здесь,
C++
1
2
3
4
5
6
7
void summa(STUDENT *st, int n)
{
for(int i=0; i<n; i++)
      for(i=0; i<5; i++)
       st[i].summa+=st[i].ocenka;
     cout<<"Summa ballov="<<st[i].summa<<"\n";
 }
но я не понял где именно.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2011, 06:21 20
C++
1
2
3
4
5
6
7
8
9
10
11
12
void summa(STUDENT *st, int n)
{
    for(int i=0; i<n; i++)
    {
        st[i].summa = 0;
 
        for(int j=0; j<5; j++)
            st[i].summa+=st[j].ocenka;
 
        cout<<"Summa ballov="<<st[i].summa<<"\n";
    }
}
Добавлено через 2 минуты
К тому же вы как во внешнем, так и во внутреннем цикле используете счётчик i - а это логическая ошибка, поскольку во внутреннем цикле мы пробегаем по другим значениям другого массива, нежели во внешнем. А то у вас получается, что во внешнем цикле i увеличили на 1, потом во внутреннем на пять... Короче, даже трудно словами описать, какой там хаос творился))) В выложенном коде поправил, скопируйте его вместо своего.
0
10.01.2011, 06:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2011, 06:21
Помогаю со студенческими работами здесь

Структуры. Сортировка массива структуры
Здравствуйте! В чем моя ошибка?? Нужно отсортировать массив структуры по возрастанию среднего...

"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка
Здравствуйте! Возникла проблема с программой. Тема: &quot;Сортировка двусвязного списка путем исключения...

структуры и массивы
Условия задачи: 1. Создать перечисление должностей Vacancies {Manager, Boss, Clerk, Salesman,...

структуры и массивы
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; struct Worker{ char fio; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru