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

неправильный цикл for - C++

Восстановить пароль Регистрация
 
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
21.12.2012, 00:59     неправильный цикл for #1
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
class anketa: public fio, public svedeniya
{
    public:
        friend void run(anketa object1[],  int n);
        
        double sort(anketa *,int n);    // прототип функции сортировки по среднему балу
        double horoshist(anketa *,int n); // прототип функции вывод студентов у которых 4 и 5
    
};
double anketa::sort(anketa* ob2,int  n)
{
         double s; //перемееная для подсчета суммы балов каждого студента
         double *avg = new double [n]; //выделяем память под массив хранящщего средние балы каждого студента
    
         //находим средний бал каждого студента
         for(int  i = 0; i < n; i++)
         {
            s = 0.;
            for(int j = 0; j < 4; j++)
            {
                s += ob2[i].srball[j];
                avg[i] = s / 4;
            }
        }
 
        bool flag = true; //обьявляем булевую переменную и даем есть значение "истина"
        
        while(flag) //пока "истина" делаем
        {
            flag = false;  //устанавливаем переменную в "ложь"
                    
            for(int i = 0; i < n - 1; ++i)
            {
                if(avg[i] > avg[i + 1]) //если элемент массива большн следующий элемент, тогда
                {
                    //меняем массивы в объекте местами
                    anketa x = ob2[i];
                    ob2[i] = ob2[i + 1];
                    ob2[i + 1] = x;
                    
                    //а также меняем местами и элементы в массиве средних оценок 
                    double temp = avg[i];
                    avg[i] = avg[i + 1];
                    avg[i + 1] = temp;
           
                    flag = true; //устанавлюем в "истина"
                }
            }
        }
        //выводим на экран отсортированную 
        for(int i = 0; i < n; i++)
        { 
            cout << ob2[i].name << '\t' << ob2[i].group; 
            for(int j = 0; j < 4; j++)
            {
                cout << '\t' << ob2[i].srball[j];
                
            }
            cout << "\t" << avg[i]; //выводим на экран средний бал
            cout << endl;
        }  
        delete [] avg; //освобождаем память
   return 0;
}
}
void anketa::set(anketa ob1[], int n)
{
    cout<<"Введите фамилию: ";
    cin>>lastname;
    cout<<"Введите имя: ";
    cin>>name;
    cout<<"Введите отчество: ";
    cin>>middlename;
    cout<<"Номер группы: ";
    cin>>group;
    cout<<"Средний балл студента: ";
    int i=0;
    for(i = 0; i < n; i++)
    { 
        for(int j = 0; j < 4; j++)
        {
            cin>>ob1[i].srball[j];
        }
   }   
    
    cout<<"Доход на каждого члена семьи: ";
    cin>>dohod;
}
 
 
int main()
{ 
    int n,i,j;
    cout << "Введите количество студетов: ";
    cin >> n;
    cout<<endl;
    anketa *ob1 = new anketa [n]; //выделение динамической памяти под массив объектов
    cout<<"Введите сведения о студенте!"<<endl;
    for(i=0; i<n; i++)
    {
        ob1[i].set(ob1,n);
        cout<<"/////////////////////////////////"<<endl;
    }
     anketa a;
     a.sort(ob1, n); //вызываем функцию сортировки
    
 
    
    getch();
    return 0;
}
когда ввожу оценки, вводиться в 2 раза больше.
как можно исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2012, 00:59     неправильный цикл for
Посмотрите здесь:

Неправильный результат C++
неправильный отчет C++
Неправильный вывод C++
C++ Неправильный результат
C++ Цикл: цикл for вообще никак не воспринимается транслятором
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
21.12.2012, 01:02     неправильный цикл for #2
Цитата Сообщение от 9cbka Посмотреть сообщение
когда ввожу оценки, вводиться в 2 раза больше.
как можно исправить?
Вводить в два раза меньше.

Что за функция, где что происходит?
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
21.12.2012, 01:12  [ТС]     неправильный цикл for #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Вводить в два раза меньше.

Что за функция, где что происходит?

Функция
C++
1
set
это ввод значений;
Функция
C++
1
sort
сортировка студентов по среднему баллу;
вот и всё
в зависимости от введённого числа студентов n , увеличиваеться ввод оценок.
получаеться если у меня будет
C++
1
n=10;
то ввод
C++
1
ob1[i].srball[j]
увеличиться до 40 хотя мне нужно всего 4 оценки.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
21.12.2012, 01:26     неправильный цикл for #4
C++
1
2
3
4
         for(int  i = 0; i < n; i++)
         {
            s = 0.;
            for(int j = 0; j < 4; j++)
Ну так Вы и проходите n*4 раз. У Вас же один цикл вложенный
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
21.12.2012, 01:31  [ТС]     неправильный цикл for #5
А как мне записать, чтобы проходил n раз и для всех студентов.
Yandex
Объявления
21.12.2012, 01:31     неправильный цикл for
Ответ Создать тему
Опции темы

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