1 Востаннє редагувалося Shelleex (25.03.2019 12:19:39)

Тема: Лінійний односвязний список

Відомість абітурієнтів, які склали вступні іспити в коледж, містить: П.І.Б., адреса, оцінки. Визначити кількість абітурієнтів, які проживають. в місті і склали іспити з середнім балом не нижче 4.5, вивести їх прізвища в алфавітному порядку.

 
#include "pch.h"
#include "iostream"
#include <string.h>
#include <stdlib.h>
using namespace std;
 
struct Student
{
    char Name[20]; 
    char NameLast[30]; 
    int Age; 
    char home[30];
    int Mark[5];
    Student *Next; 
}  *Head, *p;
 
void Input(Student *El)
{
    cout << endl; 
                  
    cout << "Имя:  "; cin.getline(El->Name, 20); 
 
    cout << "Фамилия:  "; cin.getline(El->NameLast, 30); 
    cout << "Полных лет "; cin >> El->Age;  
    cin.ignore(); 
    for (int i = 0; i < 5 ; i++)
    {
    cout << "Оценки "; 
    cin >> El->Mark[i];
    cin.ignore();
    }
    cout << "Адрес "; cin.getline(El->home, 30);
    El->Next = NULL;
}
 
void del_stud()
{
    char c = 0;
    while (Head != NULL)
    {
        cout << Head->NameLast << " -изъято" << endl;
 
        Student *temp = Head->Next;
        delete Head;
        Head = temp;
        cout << "Продолжить извлечения y/n="; cin >> c;
        if (c == 'n') break;
    }
}
void del_stud_m(int n)
{
    int c = 0; Student *temp = Head;
    Student *pp = temp;
 
    while (temp != NULL)
    {
        c++;
        if (c == n)
        {
            pp->Next = temp->Next;
            cout << temp->NameLast << " -изъято" << endl; break;
        }
        else  pp = temp;
        temp = temp->Next;
    }
}
void del_stud_K(int n)
{
 
    Student *temp = Head;
    Student *pp = temp;
 
    while (temp != NULL)
    {
 
        if (temp->Age >= n)
        {
            if (temp == Head)
                pp->Next = temp->Next;
            cout << temp->NameLast << " -изъято" << endl; break;
        }
        else  pp = temp;
        temp = temp->Next;
    }
}
 
void Add1(Student *student)
{
    Student *temp = new Student; 
    temp = student;
    temp->Next = Head; 
 
    Head = temp; 
}
void Add_end(Student *student)
{
    Student *temp = new Student;
    if (Head == NULL) {
        Head = student;  exit(0);
    }
    else temp = Head;
    while (temp->Next != NULL)
    {
        temp = temp->Next;
    }
    temp->Next = student;
}
 
void Show()
{
    Student *temp = Head;
    cout << "Имя:  ";
    cout << "Фамилия:  ";
    cout << "Полных лет ";  cout << "Адрес " << endl;   
    while (temp != NULL)
    {
    
        cout << temp->Name << "\t"; 
        cout << temp->NameLast << "\t"; 
        cout << temp->Age << "\t" << "\t"; 
        cout << temp->home << endl;
        for (int i = 0; i<5; i++)
        {
        cout << "Оценки - ";
        cout << temp->Mark[i] << endl;
        }
        temp = temp->Next; 
    }
    cout << endl;
}
 
int main()
{
    bool l = 1;
    setlocale(LC_ALL, "RUS");
    Head = NULL;
    while (l)
    {
        cout << "1- Добавление n элементов" << endl;
        cout << "2- Добавление элементов к началу " << endl;
        cout << "3- Добавление элементов в конец " << endl;
        cout << "4- Удаление элемента с вершины " << endl;
        cout << "5- Вывод элементов списка " << endl;
        cout << "6- Изъятия при условии  " << endl;
        cout << "7- Изъятия за номером " << endl;
        cout << "8- Изъятия последнего элементов " << endl;
        cout << "10-Выход" << endl;
        cout << "Выберите режим работы " << endl;
        int k = 0;
        cin >> k;
        cin.ignore();
        switch (k)
        {
        case 1:
        { int N; 
        cout << "Введи число студентов N =";  cin >> N;
        cin.ignore();
 
        for (int i = 0; i < N; i++)
        {
            p = new Student;  Input(p); cout << i + 1 << endl; Add1(p); 
        } break;
        }
        case 2: { p = new Student;  Input(p); Add1(p); break; }
        case 3: { p = new Student;  Input(p); Add_end(p);  break; }
        case 4: { del_stud();        break; }
        case 5: { if (Head) Show(); else cout << " Пустой" << endl;     
            break; }
        case 6: {         break; }
        case 7: {  int m; cin >> m; del_stud_m(m);         break; }
        case 8: { del_stud();          break; }
        case 9: {         break; }
        case 10: { l = 0;  exit(0);       break; }
 
        }
    }
    system("PAUSE");
    return 0;
}
0

2

Re: Лінійний односвязний список

Невідкладно виправте порушення п.1.1 Правил.

3

Re: Лінійний односвязний список

Так я переправив)

4 Востаннє редагувалося Shelleex (25.03.2019 12:31:40)

Re: Лінійний односвязний список

У самому коді, пробачте забув вкл. укр або англ.

5 Востаннє редагувалося Fox (14.04.2019 20:17:50)

Re: Лінійний односвязний список

Shelleex написав:

пробачте забув вкл. укр

Прихований текст


Як би забули, то було би ось так:

cout << "Ым'я:  ";
.....
cout << "Адрес " << endl;

Хммм))
https://i.imgur.com/WIihBrg.png

В щитовій, яку зробив Вася після 2х бутилок легше розібратися ніж у вашому коді.
Де воно має виводити тих студентів ?

Визначити к-сть студентів, які проживають в місті.

cout << "Адрес "; cin.getline(El->home, 30);

Це ви не дописали, чи знову дурнувате завдання ? Як той код мая відрізнити місто від села ?