Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by Vanya ( 16 years ago )
//програма для сортування списку студентів за рейтинговим балом та
//видалення з нього студентів, що мають більше ніж дві двійки
#include <iostream>
#include <fstream>
//#include <stdlib.h>
using namespace std;
//опис структури студентів
struct Students
{
string name [20];
string surname [20];
string birthdate [11];
int marks[5];
int rating;
bool printed;
struct Students * pNext;
struct Students * pPrev;
};
//оголошення функцій
void DeleteWith2 (Students **);
Students * GetList();
void SortAndPrint(Students *);
bool CheckData(Students *);
//головна функція
int main()
{
Students * pBegin = GetList();
if (!CheckData(pBegin))
{
cout << "Виправте дані помилки у файлі input.txt та спробуйте ще раз" << endl;
return 0;
}
else
{
cout << "Програма успішно завершилась, результат у файлі output.txt" << endl;
}
DeleteWith2(&pBegin;);
SortAndPrint(pBegin);
return 0;
}
//функція для видалення зі списку студентів, що мають більше ніж дві двійки
void DeleteWith2(Students **pFirst)
{
Students *pTemp = *pFirst;
while (pTemp)
{
int amount2 = 0;
for (int i = 0; i < 5; i++)
if (pTemp->marks[i] == 2)
amount2++;
if (amount2 >= 2)
{
if(pTemp != *pFirst)
{
pTemp->pPrev->pNext = pTemp->pNext;
if (pTemp->pNext)
pTemp->pNext->pPrev = pTemp->pPrev;
delete pTemp;
}
else
{
*pFirst=pTemp->pNext;
delete pTemp;
}
}
pTemp=pTemp->pNext;
}
}
//функція для отримання даних про студентів
Students * GetList()
{
ifstream fInput ("input.txt", ifstream::in);
int n = 4;
Students *pBegin;
Students *pRun;
Students *pEnd;
for (int i = 0; i < n; i++)
{
pRun = new Students;
pRun->printed=false;
fInput >> *pRun->name >> *pRun->surname >> *pRun->birthdate;
int pTemp = 0;
for (int j = 0; j < 5; j++)
{
fInput >> pRun->marks[j];
pTemp += pRun->marks[j];
}
pRun->rating = pTemp; pTemp = 0;
if (i == 0)
{
pBegin = pEnd = pRun;
pRun->pNext = pRun->pPrev = NULL;
}
else
{
pEnd->pNext = pRun;
pRun->pPrev = pEnd;
pRun->pNext = NULL;
pEnd = pRun;
}
}
fInput.close();
return pBegin;
}
//функція для друку у файл результату
void SortAndPrint(Students *pFirst)
{
ofstream fOutput ("output.txt", ofstream::out);
Students *pRun= pFirst, *pTemp = pFirst;
int temp=-1;
for (int i = 0; i < 5; i++)
{
while (pRun)
{
if (pRun->rating > temp && !pRun->printed)
temp = pRun->rating;
pRun = pRun->pNext;
}
while (pTemp)
{
if (pTemp->rating == temp)
{
fOutput << *pTemp->name << "\t" << *pTemp->surname << "\t" << *pTemp->birthdate << "\t";
for (int j = 0; j < 5; j++)
fOutput << pTemp->marks[j] << " ";
fOutput << "\t" << pTemp->rating << endl;
pTemp->printed = true;
}
pTemp = pTemp->pNext;
}
temp=-1;
pRun=pTemp=pFirst;
}
fOutput.close();
}
bool CheckData(Students *pFirst)
{
bool flag = true;
Students *pTemp = pFirst;
while (pTemp)
{
for (int i = 0; ;i++)
{
if ((*pTemp->name)[i]=='\0') break;
if (!((int)(*pTemp->name)[i]>=65 && (int)(*pTemp->name)[i]<=90) &&
!((int)(*pTemp->name)[i]>=97 && (int)(*pTemp->name)[i]<=122))
{
cout << "Помилка! Ім’я \"" << *pTemp->name << "\" містить недопустимі символи" << endl;
flag = false;
break;
}
}
for (int i = 0; ;i++)
{
if ((*pTemp->name)[i]=='\0') break;
if (!((int)(*pTemp->surname)[i]>=65 && (int)(*pTemp->surname)[i]<=90) &&
!((int)(*pTemp->surname)[i]>=97 && (int)(*pTemp->surname)[i]<=122))
{
cout << "Помилка! Фамілія \"" << *pTemp->surname << "\" містить недопустимі символи" << endl;
flag = false;
break;
}
}
for (int i = 0; ;i++)
{
if ((*pTemp->name)[i]=='\0') break;
if (i==2 || i==5) continue;
if (!((int)(*pTemp->birthdate)[i]>=48 && (int)(*pTemp->birthdate)[i]<=57))
{
cout << "Помилка в даті народження \"" << *pTemp->birthdate << "\"" << endl;
flag = false;
break;
}
}
for (int i = 0; i < 5; i++)
if (!(pTemp->marks[i]<=5 && pTemp->marks[i]>=0))
{
cout << "Помилка! Недопустима оцінка \"" << pTemp->marks[i] << "\"" << endl;
flag = false;
break;
}
pTemp = pTemp->pNext;
}
return flag;
}
Revise this Paste
Parent: 17294