PDA

نسخه کامل مشاهده نسخه کامل : تبدیل ++C به C



qosmio
28-12-2013, 01:58
سلام دوستان . اگه میشه برنامه زیر رو از ++C ببرید به C.
لطفا چک کنید که برنامه هم درست نوشته شده یا خیر
صورت سوال :برنامه ای بنویسید که تعداد دانشجویان یک کلاس را از ورودی گرفته، نمرات ان ها را از ورودی دریافت نماید .(کنترل کند که حتما نمره در بازه ی 0 تا بیست باشد) و سپس نمرات را سورت نزولی کند و در خروجی چاپ کند .
با تشکر

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

struct StudentGrades
{
string name;
double grade;
};

void sort (StudentGrades *score, int size);
double average (StudentGrades *score, int size);

int main ()
{
StudentGrades *sGrade;
int mass;

cout << "How many test scores do you wish to enter? \n";
cin >> mass;
sGrade = new StudentGrades[mass];

for (int index = 0; index < mass; index ++)
{
cout << "Please enter the name of student #" << (index + 1) << ": ";
cin >> (sGrade + index)->name;
cout << "Please enter the score of student #" << (index + 1) << ": ";
cin >> (sGrade + index)->grade;

while (sGrade[index].grade < 0 || sGrade[index].grade > 20)
{
cout << "enter a valid score 0-20 \n";
cin >> (sGrade + index)->grade;
}
}

cout << "The sorted names and scores are:";
cout << endl;

sort (sGrade, mass);
//cout << fixed << showpoint << setprecision(2);
cout << "The average of all the student's scores are:" << average (sGrade, mass);
cout << endl;

delete []sGrade;
sGrade = 0;
cout << "The End";
return 0;
}

void sort (StudentGrades *score, int size)
{
int minIdx;
double minGrade;
string id;

for (int scan = 0; scan < (size - 1); scan ++)
{
minIdx = scan;
minGrade = (score + scan)->grade;

for (int count = scan + 1; count < size; count ++)
{
if ((score + count)->grade < minGrade)
{
minGrade = (score + count)->grade;
minIdx = count;
id = (score + count)->name;
}
}

(score + minIdx)->grade = (score + scan)->grade;
(score + scan)->grade = minGrade;
(score + minIdx)->name = (score + scan)->name;
(score + scan)->name = id;
id = "close";
}

for (int count = 0; count < size; count ++)
{
cout << (score + count)->name << " ";
cout << (score + count)->grade << " ";
cout << endl;
}
}

double average (StudentGrades *score, int size)
{
double total = 0.0,
average;

for (int count = 0; count <size; count ++)
{
total += (score + count)->grade;
}

average = total / size;
return average;
}

qosmio
28-12-2013, 17:32
کسی نبود ؟ لطفا کمک کنید