0

プログラミングクラスの課題に取り組んでいます。クラスで説明されているように、成績平均プログラムを実装します。成績情報は入力ファイルにあり、各生徒の情報は2行にまたがっています。1行目は名ミドルネーム姓の形式の生徒名で、2行目は生徒の成績(整数)です。(ミドルネームがない場合があります。)最大20名の生徒がおり、各生徒の成績は10点です。プログラムは、ユーザーに入力ファイルの名前を要求する必要があります。各生徒について、全体の平均を計算します(各課題は同じポイント数の価値があると想定します)。情報を画面に出力します。各行は生徒ごとに1行で、各行は「名前」です(姓、名ミドルネームのイニシャル、10の成績、平均 姓でソート。平均は小数点以下2桁で実行し、両方を表示する必要があります(つまり、3.1は3.10として出力されます)。説明したように、この問題には3つの配列を使用し、適切な関数のセットを使用する必要があります。これは私がこれまでに持っているものです。

#include <iostream>
#include <string>
#include <fstream>
#include <climits>
#include <iomanip>

using namespace std;

const int NGrades= 10;
const int maxStudents=20;

string reformat(string& s);

int main(){

int num_of_students = 0;
string fullName;
double sum=0;

string names[maxStudents];
int grades[maxStudents][NGrades];
double average[maxStudents];

string fileName;
ifstream inputFile;

cout<< "Please type the file name including extension(such as .txt)."<<endl;
cout<< "If your file is in a different directory please specify the path:"; //asking          user for file name. seperated into two cout statments for readibility
getline(cin,fileName);
inputFile.open(fileName.c_str());

if (!inputFile){                                   //produce an error if the file name is invalid
 cout<<"Cannot open "<<fileName<<"."<<endl;
 return 1;
}

while(getline(inputFile, fullName)){
    names[num_of_students]=reformat(fullName);
    cout << setw(20)<< names[num_of_students]<<" "<< setw(20);
    for (int i = 0; i < NGrades; ++i){
        inputFile >> grades[num_of_students][i];
        cout <<setw(4)<<grades[num_of_students][i];
        sum = sum + grades[num_of_students][i];
    }
    average[num_of_students]= sum/NGrades;
    sum=0;
    cout <<setw(15);
    cout<< fixed << showpoint;
    cout << setprecision(2);
    cout <<average[num_of_students]<< endl;
    inputFile.ignore(INT_MAX, '\n');
    ++num_of_students;
 }

 inputFile.close();

 return 0;
 }
 string reformat(string& s){
    int pos, posTwo;
    string first_Middle;
    string lastname;
    string finished;
    pos = s.find_first_of(' ');
    first_Middle=s.substr(0,pos+2);
    posTwo=s.find_first_of(' ', pos+1);
    lastname=s.substr(posTwo+1);
    finished=lastname+ ", "+first_Middle;
    return finished;
 }

私が今やらなければならないことは、スワップを使用して名前を姓のアルファベット順に並べることです。構造体などの使用は許可されていません。

4

1 に答える 1

0

最初にこれを読んでください: http://en.wikipedia.org/wiki/Selection_sort

すべてのデータを 3 つの配列コンテナーに格納する必要があります。次に、並べ替えアルゴリズムを使用して、プログラムは出力を適切に印刷する必要があります。

文字列を比較する方法など、より具体的な質問をしてください。誰かがあなたのコードを書き直しても、あなたは知識を得ることができません。

于 2013-02-14T07:28:12.533 に答える