Welcome, guest! Login / Register - Why register?
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
Your Name: Code Language: