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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 5.00
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
08.01.2011, 05:56     Структуры и массивы, сортировка списка. #1
Задание звучит так...
Написать программу, в которой необходимо создать структуру, элементами которой являются: имя, фамилия, год рождения студента и оценки по пяти экзаменам. Объявить массив данных о студентах группы типа структуры и ввести значения его элементов. Определить сумму баллов за сессию каждого студента и отсортировать список студентов по баллам в порядке возрастания. Сортировку реализовать в отдельной функции. Предусмотреть меню. Результаты работы программы записать в файл.

Я не прошу писать программу полностью, прошу лишь показать как реализовать сортировку и не могу понять, что значит предусмотреть меню.
Заранее спасибо!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
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");
}
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
08.01.2011, 14:29  [ТС]     Структуры и массивы, сортировка списка. #3
silent_1991, Это примеры на Си, мне надо на С++, они существенно отличаются?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
08.01.2011, 14:30     Структуры и массивы, сортировка списка. #4
footbaler, Вводом-выводом. Но можно реализовать и интересные вещи, вроде перегрузки операторов, хотя здесь это по сути не нужно)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
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;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.01.2011, 14:44     Структуры и массивы, сортировка списка. #7
ForEveR, эх, началось))) Когда уже у меня руки до STL дойдут?)))
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
08.01.2011, 19:25  [ТС]     Структуры и массивы, сортировка списка. #8
silent_1991, ForEveR, спасибо вам за примеры, но что то мне тяжело пока это все собрать вместе.

Добавлено через 3 часа 19 минут
Помогите пожалуйста еще чем-нибудь, натолкните, что в начале надо писать, а то я уже потерялся, со вчерашнего дня сижу спал 4 часа.
footbaler
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 минуты
Все еще актуально.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.01.2011, 18:07     Структуры и массивы, сортировка списка. #10
Хм... А что тут добавить? Теперь сортировку пишите и меню - и будет вам счастье)))
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
09.01.2011, 18:12  [ТС]     Структуры и массивы, сортировка списка. #11
silent_1991, так вот я и пока не понимаю как правильно написать сортировку и меню, хоть и примеры приведены.
А еще как мне посчитать сумму оценок каждого студента, точнее я понимаю как ее найти, но вот куда мне это вписать?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
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).
footbaler
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;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.01.2011, 20:32     Структуры и массивы, сортировка списка. #14
Вообще-то не поле a в структуру надо было добавить, а в коде сортировки изменить поле, по которому будете сортировать... Да и с вы тоже туда зачем-то добавили...
footbaler
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;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.01.2011, 05:30     Структуры и массивы, сортировка списка. #16
footbaler, у вас в функции main n не инициализирована, но повсеместно используется. Не дело...
footbaler
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;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.01.2011, 05:53     Структуры и массивы, сортировка списка. #18
footbaler, у вас сумма неверно считается, потому что изначально переменная summa не инициализирована, и при прибавлении к ней очередной оценки получается мусор. В функции подсчёта суммы перед вложенным циклом инициализируйте переменную summa очередного студента нулём.
footbaler
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";
 }
но я не понял где именно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2011, 06:21     Структуры и массивы, сортировка списка.
Еще ссылки по теме:

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) C++
C++ Удаление структуры из двусвязного списка
"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
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, потом во внутреннем на пять... Короче, даже трудно словами описать, какой там хаос творился))) В выложенном коде поправил, скопируйте его вместо своего.
Yandex
Объявления
10.01.2011, 06:21     Структуры и массивы, сортировка списка.
Ответ Создать тему
Опции темы

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