2014-11-17 2 views
1

Я не могу понять, как вернуть мой код и распечатать студента (ов) с наивысшим классом. Я был очень болен в этом семестре (моно), поэтому я пропустил немало лекций. Мне было интересно, сможет ли кто-нибудь помочь мне напечатать студента с наивысшим классом, сортным и средним. Спасибо!C++ найти наибольшее значение

Привет, я не могу заставить мой код распечатать ученика с самым высоким средним значением. Он печатает кучу чисел, а средний и буквенный листы не верны. Если бы кто-нибудь мог объяснить мне, что происходит, было бы замечательно!

#include <iostream> 
#include <iomanip> 
#include <string.h> 
#include <fstream> 
#include <stdio.h> 
using namespace std; 

struct Student { 
    string fName; 
    string lName; 
    int score1; 
    int score2; 
    int score3; 
    int score4; 
    int score5; 
    char letterGrade; 
    int averageTest; 
}; 

void avgAndassignGrade(Student array[], int size); 
void sortAlpha(Student array[], int size); 
void PrintStudents(Student arr[], int size); 
int findHighest(Student arr[], int size); 
void PrintStudentsHighest(Student arr[], int grade, int size); 

int main() 
{ 
    int counter=0; 
    Student class120[50]; 

    ifstream file("grades.txt"); 
    string line; 

    if (!file) 
     cout<<"No file found."; 
    if (file.is_open()) 
    { 
     while (getline (file,line)) 
     { 
      file >> class120[counter].fName 
       >> class120[counter].lName 
       >> class120[counter].score1 
       >> class120[counter].score2 
       >> class120[counter].score3 
       >> class120[counter].score4 
       >> class120[counter].score5; 
      counter++; 
     } 
     file.close(); 
    } 
    avgAndassignGrade(class120, counter); 
    sortAlpha(class120, counter); 
    int grade = findHighest(class120, counter); 
    PrintStudents(class120, counter); 
    PrintStudentsHighest(class120, grade, counter); 
} 

void avgAndassignGrade(Student array[], int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     int total = array[i].score1 + array[i].score2 + array[i].score3 + array[i].score4 
        + array[i].score5; 
     array[i].averageTest = total/5; 
     if (array[i].averageTest > 89 && array[i].averageTest < 100) 
      array[i].letterGrade = 'A'; 
     if (array[i].averageTest > 79 && array[i].averageTest < 90) 
      array[i].letterGrade= 'B'; 
     if (array[i].averageTest > 69 && array[i].averageTest < 80) 
      array[i].letterGrade= 'C'; 
     if (array[i].averageTest > 59 && array[i].averageTest < 70) 
      array[i].letterGrade = 'D'; 
     if (array[i].averageTest < 60) 
      array[i].letterGrade = 'E'; 
    } 
} 

void sortAlpha(Student array[],int size) 
{ 
    Student temp; 
    for (int j = 0; j < size - 1; j++) 
    { 
     for (int l = 0; l < size - 1; l++) 
     { 
      if (array[l].lName > array[l+1].lName) 
      { 
       temp = array[l]; 
       array[l] = array[l+1]; 
       array[l+1] = temp; 
      } 
     } 
    } 
} 

int findHighest(Student arr[], int size) 
{ 
    int large = arr[0].averageTest; 
    for (int i = 0; i < size; i++) 
    { 
     if (large < arr[i].averageTest) { 
      large = arr[i].averageTest; 
     } 
    } 
    return large; 
} 

void PrintStudents(Student arr[], int size) { 
    cout << "Name" << "\t\t" << "Average" << "\t\t" << "Grade" << "\n"; 
    for (int i = 1; i < size; i++) 
    { 
     cout << arr[i].lName + "," + arr[i].fName << "\t\t" << arr[i].averageTest << "\t\t" 
      << arr[i].letterGrade <<"\n"; 
    } 
} 

void PrintStudentsHighest(Student arr[], int grade, int size) { 
    Student high; 

    for (int i = 0; i < size; i++) 
    { 
     if(arr[i].averageTest == grade) 
      high=arr[i]; 
    } 
    cout << "The student(s) with the highest grade."<< '\n' 
     << "Name"<<"\t\t"<<"Average"<<"\t\t"<<"Grade"<<"\n" 
     << high.lName + "," + high.fName << "\t\t" << high.averageTest << "\t\t" 
     << high.letterGrade << endl; 
} 

редактировать: Я изменил код. Теперь он печатает что-то для самого высокого уровня, но это всего лишь беспорядочный беспорядок чисел. Я пытаюсь найти Студента с HighhestAverage и распечатать его/ее имя в среднем и буквом.

+2

Рассматривали ли вы разговор со своим профессором? Это их работа, чтобы помочь вам учиться. Если вы пропустили некоторые классы из-за болезни, большинство профессоров будут рады провести с вами дополнительное время, чтобы помочь вам изучить материал, который вы пропустили. – cdhowie

+1

Вы также можете сравнить свою программу с программами, представленными другими людьми. Поиск StackOverflow для «массива классов C++» –

+1

Существует много дубликатов, попробуйте выполнить поиск: https://www.google.com/search?q=stackoverflow+c%2B%2B+grade&ie=utf-8&oe=utf-8&aq= t & rls = org.mozilla: ru-US: official & client = firefox-a & channel = sb –

ответ

0

Я не знаю точно, что вы пытаетесь сделать ... Но если вы пытаетесь найти наибольшее значение между многими цифрами, которые вы должны сделать что-то вроде этого:

int max = 0; 
if (grade > max) 
    max = grade; 

и вы можете создать массив для замены score1, score2 .... так что это так:

int scores[5]; //it's so easier to deal with :) 

затем добавляющие оценки будет с петлей для (5 петель) !!!

Для получения дополнительной помощи ... вы можете больше узнать о своей программе, чтобы помочь вам больше! Надеюсь, это поможет вам!

+0

Привет, Мохаммад! Я сравниваю средние ученики, чтобы узнать, кто из них самый высокий. –

+0

Я получаю это ... Это так просто ... По нашей жизни, если мы хотим получить наивысшую ценность многих ценностей, мы смотрим один за другим, чтобы узнать наивысший ... И в программировании это одно и то же ... Так что если мы столкнулись с любым самым высоким значением, которое мы его сохраняем .. поэтому у нас будет, наконец, самый высокий среди значений, с которыми мы имеем дело ... Так что просто зацикливайтесь на всех значениях, как вы делали в findHighest, и если вы столкнулись со значением, большим, чем большое значение сохранить его .. поэтому, когда вы закончите цикл, вы получите самый высокий! –

+1

Благодарим вас за помощь Мохаммад! Я понял! –

Смежные вопросы