2016-12-08 8 views
1

私は構造体と配列を使ってファイルから生徒の最大/最小等級を(そしてすぐに平均になるように)計算するプログラムを書いた。私は最小と最大の等級を把握していましたが、最高のグレードと最低のグレードを持つ学生を追加したいと思います。配列の行を見つけ、構造の.firstと。lastをどのように表示できますか?構造体の配列をC++でターゲットにする方法

#include <iostream> 
#include <string> 
#include <fstream> 
#include <array> 

using namespace std; 

struct student { 

    int id; 
    string first; 
    string last; 
    float grade; 
}; 

string getFileName(); 
void fillArrayFromFile(ifstream&, student[], int&); 
float calculateMaximumGrade(student[], int); 
float calculateMinimumGrade(student[], int); 
float calculateAverageGrade(student[], int); 



int main() { 

    int numofStudents = 5; 

    const int NUM_VALS = 5; 

    student studentArray[NUM_VALS]; 
    ifstream filename; 
    //filename.open(getFileName() + ".txt"); 

    fillArrayFromFile(filename, studentArray, numofStudents); 

cout << "Highest grade: " << calculateMaximumGrade(studentArray,  numofStudents) << endl; 
cout << "Lowest grade: " << calculateMinimumGrade(studentArray, numofStudents) << endl; 
//cout << "Average grade: " << calculateAverageGrade(studentArray, numofStudents) << endl; 

return 0; 
} 

string getFileName() 
{ 
// To be completed 

return 0; 
} 

void fillArrayFromFile(ifstream& ins, student studentArray[], int& numberOfStudents) 
{ 
ins.open("input.txt"); 



for (int i = 0; i < numberOfStudents; i++) { 

    ins >> studentArray[i].id; 
    ins >> studentArray[i].first; 
    ins >> studentArray[i].last; 
    ins >> studentArray[i].grade; 

} 

ins.close(); 

return; 
} 

// calculate the maximum grade in the array 
float calculateMaximumGrade(student studentArray[], int numberOfStudents) 
{ 
float max = 0; 
max = studentArray[0].grade; 

for (int i = 0; i < numberOfStudents; i++) { 

    if (studentArray[i].grade > max) { 

     max = studentArray[i].grade; 

    } 

} 
return max; 
} 

// calculate the minimum grade in the array 
float calculateMinimumGrade(student studentArray[], int numberOfStudents) 
{ 
float min = 0; 
min = studentArray[0].grade; 

for (int i = 0; i < numberOfStudents; i++) { 

    if (studentArray[i].grade < min) { 

     min = studentArray[i].grade; 

    } 

} 
return min; 
} 

// calculate the average grade in the array 
float calculateAverageGrade(student studentArray[], int numberOfStudents) 
{ 
// To be completed 
return 0; 
} 
+0

最後はstudentArray [numberOfStudents - 1]、最初はstudentArray [0] – brettmichaelgreen

+0

あなたは最大値を評価している間に最大値だけでなくグレードを割り当てたオブジェクト最大変数。このためには、学生タイプのオブジェクトletSay MaxObjectを作成し、MaxObject = student [i]をif側にmax = ...およびafterループで割り当てると、作成したオブジェクトのフィールドが表示されます。その関数に表示したくない場合は、生徒オブジェクトへの参照をこの関数に渡すことができます。この関数の終了後、送信された参照オブジェクトは最大生徒の値を保持します。 Min Studentを表示するのと同じ –

答えて

0

あなたcalculateMaximumGrade機能だけでなくmaxを保存する必要がありますが、また、そのmaxグレードを持っている要素のインデックス。 つまり:あなたが見たよう

int calculateMaximumGrade(student studentArray[], int numberOfStudents) 
{ 
    float max = studentArray[0].grade; 
    int index_of_max = 0; 

    for (int i = 0; i < numberOfStudents; i++) { 

     if (studentArray[i].grade > max) { 
      index_of_max = i; 
      max = studentArray[i].grade; 
     } 

    } 
    return index_of_max; 
} 

、あなたもmaxない返しますが、そのindexことができます。次に、あなたのmainで次の作業を行う必要があります。

int index_of_max = calculateMaximumGrade(studentArray,  numofStudents); 
cout << "Highest grade: " << studentArray[index_of_max].grade << ". Student, who got it: " << studentArray[index_of_max].first << " " << studentArray[index_of_max].last << endl; 

あなたがAverageMin機能と同じことを行う必要があります。

0

calculateMinimumGrade関数を変更して名前を変更して、最も低い成績の生徒のインデックスを記録し、それをグレード自体の代わりに返すことができます。

// find the student with the lowest grade 
int findLowestStudent(student studentArray[], int numberOfStudents) 
{ 
int lowest = 0; 
float min = 0; 
min = studentArray[0].grade; 

for (int i = 0; i < numberOfStudents; i++) { 

    if (studentArray[i].grade < min) { 

     min = studentArray[i].grade; 
     lowest = i; 
    } 

} 
return lowest; 
} 

このインデックスを使用して、学生の学年にアクセスすることができます。

int lowest = findLowestStudent(studentArray, numofStudents); 
cout << "Lowest grade: " << studentArray[lowest].grade << endl; 

同じインデックスを使用して、学生の名前にアクセスできます。明らかに、calculateMaximumGradeと同様の変更を加える必要があります。

関連する問題