![]() |
|
Модераторы: bsa |
![]()
|
|
| dima2308 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 5.12.2014 Репутация: нет Всего: нет |
Есть код, который должен выводить фамилии и группы тех студентов, которые имеют оценки 4 и 5; если таких нет, то вывести сообщение об этом.
Программа неправильно работает, то есть то не выводит сообщение, то не выводит фамилиии. Прошу помочь! #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; const int N=3; struct STUDENT { char name[30]; int gruppa; int ocenki[5]; }; int main() { STUDENT student[N]; for (int i=0; i<N; i++) { cout << "Enter FIO: "; cin >> student[i].name; cout << "Enter nomer: "; cin >> student[i].gruppa; cout << "Enter ocenki: \n"; for (int j=0; j<5; j++) cin >> student[i].ocenki[j]; } cout << "\n"; int k=0; for (int i = 0; i < N; i++) for (int j = 0; j < 5; j++) { if (student[i].ocenki[j] == 4 || student[i].ocenki[j] == 5) { cout << student[i].name << ", gruppa "; cout << student[i].gruppa << "\n"; break; } else k++; break; } if (k==N) cout << "Net takix"; getch(); return 0; } |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну тут понятно: В результате k считает оценки, а не число студентов. А здесь не понятно. Приведите пример входных данных, когда это происходит. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| dima2308 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 5.12.2014 Репутация: нет Всего: нет |
То есть надо так?
else { k++; break; } Вот данные в файле, выводит только одну фамилию, хотя должен выводить все три. Заметил, что выводит правильно, если первая оценка 4 или 5. А на дальнейшие не реагирует никак... Это сообщение отредактировал(а) dima2308 - 5.12.2014, 22:36 Присоединённый файл ( Кол-во скачиваний: 5 )
Безымянный.png 227,80 Kb |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Нет. Вам нужно увеличивать k после внутреннего цикла только в случае, если j стало 5 (если о меньше, то встретилась хорошая/отличная оценка). Ага. break лишний: -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| dima2308 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 5.12.2014 Репутация: нет Всего: нет |
С этим разобрался.
Но теперь ещё одна проблема. Требуется упорядочить записи по возрастанию среднего балла. Написал код, но часть не работает. int s1=0,s2=0; string bufs; int TempG; for (int i=0; i<N-1; i++) for (int j=i+1; j<N; j++) { for (int m=0; m<5; m++) { s1+=student[i].ocenki[m]; s2+=student[j].ocenki[m]; } if(s1>s2) { bufs=student[i].name; student[i].name=student[j].name; student[j].name=bufs; TempG=student[i].gruppa; student[i].gruppa=student[j].gruppa; student[j].gruppa=TempG; for (int k=0; k<5; k++) { TempG=student[i].ocenki[k]; student[i].ocenki[k]=student[j].ocenki[k]; student[j].ocenki[k]=TempG; } } s1=0; s2=0; } Возникают такие ошибки: error C2106: =: левый операнд должен быть левосторонним значением error C2106: =: левый операнд должен быть левосторонним значением То есть переменная bufi не может принять в себя значение имени студента. Как выйти из этой ситуации? |
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну, так конечно нельзя: Сделайте подпрограмму swap, в которой копируются целиком структуры STUDENT. Поскольку в ней никаких классов с конструкторами/деструкторами нет, то можно через memcpy или прямое копирование структуры:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |