Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неправильно работает программа на структуры 
:(
    Опции темы
dima2308
Дата 5.12.2014, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;
}
PM MAIL   Вверх
feodorv
Дата 5.12.2014, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dima2308 @  5.12.2014,  21:36 Найти цитируемый пост)
то не выводит сообщение

Ну тут понятно:
Цитата(dima2308 @  5.12.2014,  21:36 Найти цитируемый пост)
          else
            k++;

В результате k считает оценки, а не число студентов.


Цитата(dima2308 @  5.12.2014,  21:36 Найти цитируемый пост)
то не выводит фамилиии

А здесь не понятно. Приведите пример входных данных, когда это происходит.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dima2308
Дата 5.12.2014, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.12.2014

Репутация: нет
Всего: нет



То есть надо так?
else
{
            k++;
            break;
}

Вот данные в файле, выводит только одну фамилию, хотя должен выводить все три.
Заметил, что выводит правильно, если первая оценка 4 или 5. А на дальнейшие не реагирует никак...



Это сообщение отредактировал(а) dima2308 - 5.12.2014, 22:36

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Безымянный.png 227,80 Kb
PM MAIL   Вверх
feodorv
Дата 6.12.2014, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dima2308 @  5.12.2014,  22:34 Найти цитируемый пост)
То есть надо так?

Нет. Вам нужно увеличивать k после внутреннего цикла только в случае, если j стало 5 (если о меньше, то встретилась хорошая/отличная оценка).


Цитата(dima2308 @  5.12.2014,  22:34 Найти цитируемый пост)
А на дальнейшие не реагирует никак...

Ага. break лишний:
Цитата(dima2308 @  5.12.2014,  21:36 Найти цитируемый пост)
        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;
        
    }
    




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dima2308
Дата 6.12.2014, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 не может принять в себя значение имени студента. Как выйти из этой ситуации?

PM MAIL   Вверх
feodorv
Дата 7.12.2014, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dima2308 @  6.12.2014,  19:36 Найти цитируемый пост)
Возникают такие ошибки:
error C2106: =: левый операнд должен быть левосторонним значением    
error C2106: =: левый операнд должен быть левосторонним значением    

Ну, так конечно нельзя:
Цитата(dima2308 @  6.12.2014,  19:36 Найти цитируемый пост)
student[i].name=student[j].name;
         student[j].name=bufs;



Сделайте подпрограмму swap, в которой копируются целиком структуры STUDENT. Поскольку в ней никаких классов с конструкторами/деструкторами нет, то можно через memcpy или прямое копирование структуры:
Код

void student_swap( STUDENT &s1, STUDENT &s2)
{
  STUDENT tmp;
  tmp = s1;
  s1 = s2;
  s2 = tmp;
}




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.4094 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.