Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2022, 18:08   #1
Lovskiy
Пользователь
 
Регистрация: 16.10.2021
Сообщений: 27
По умолчанию Объясните этот код

Условие: Описать структуру с именем STUD, содержащую поля: NAME – фамилия и инициалы; GROUP – группа; SES – оценки по пяти предметам (массив из пяти элементов). Написать программу, реализующую следующие действия отдельными функциями:
– ввод с клавиатуры данных в массив ST, состоящий из N переменных типа STUD;
– вывод на экран фамилий и номеров групп для всех студентов, средний балл которых больше 4.0; если таковых нет, то вывести сообщение.

Объясните этот код по строчкам, какая строчка за что отвечает и делает.

Код:
#include <iostream>
 
using namespace std;
struct stud
{
    char name[20];
    int group;
    int ses[5];
    stud *nxt;
};
stud *head = NULL;
stud *tail;
double sum=0;
int j=0;
 
stud *input(){
    stud*temp;
    temp=new stud;
    cout<<"Enter name: ";
    cin>>temp->name;
    cout<<"Enter group: ";
    cin>>temp->group;
    cout<<"Enter ses: ";
    for(int i=0;i<5;i++){
        cin>>temp->ses[i];
    }
    temp->nxt=NULL;
    return temp;
}
 
void input_list(int n){
    stud *temp;
    for(int i=0;i<n;i++){
        temp=input();
        if(head==NULL){
            head=temp;
            tail=temp;
        }
        else{
            tail->nxt=temp;
            tail=temp;
        }
    }
}
 
void display()
{
    stud *temp;
    temp=head;
    while(temp!=NULL)
    {
        cout<<"Name: "<<temp->name<<endl;
        cout<<"Group: "<<temp->group<<endl;
        cout<<"Ses: "<<endl;
        for(int i=0;i<5;i++) {
            cout << temp->ses[i]<<" ";
        }
        temp=temp->nxt;
    }
}
 
void final()
{
    stud *temp;
    temp=head;
    while(temp!=NULL)
    {
        sum=0;
        for(int i=0;i<5;i++) {
            sum += temp->ses[i];
        }
        if(sum/5>=4.0){
            cout<<"Name: "<<temp->name<<endl;
            cout<<"Group: "<<temp->group<<endl;
            j++;
        }
        if (j==0){
            cout<<"No students with average score greater than 4.0"<<endl;
        }
        temp=temp->nxt;
    }
}
int main()
{
    int n;
    cout<<"Enter how many students: ";
    cin>>n;
    input_list(n);
    display();
    final();
    return 0;
}
Lovskiy вне форума Ответить с цитированием
Старый 02.10.2022, 19:03   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
#include <iostream> // Подключение модуля с функциями ввода/вывода
 
using namespace std; // Вредная привычка
struct stud // Начало описания структуры
{ // На последующих строчках описаны поля структуры. Назначение полей следует из их имени (второго слова на строке))
    char name[20];
    int group;
    int ses[5];
    stud *nxt;
}; // Конец описания структуры
// Глобальные переменные
stud *head = NULL; // Переменная начала динамического списка структур
stud *tail; // Переменная конца динамического списка структур
double sum=0; // Переменная для подсчета суммы оценок
int j=0; // Переменная определения количества записей удовлетворяющих условию
 
stud *input(){ // Функция ввода одного элемента динамического списка
    stud*temp; // Объявление локальной переменной указателя на новый элемент
    temp=new stud; // Выделение памяти под эту переменную

    cout<<"Enter name: "; // Вывод приглашения к вводу
    cin>>temp->name; // Ввод запрошенного значения (одного из полей структуры)

    cout<<"Enter group: "; // см. описание на 2 строки выше
    cin>>temp->group; // см. описание на 2 строки выше

    cout<<"Enter ses: "; // см. описание на 4 строки выше
    for(int i=0;i<5;i++){ // Цикл ввода массива элементов
        cin>>temp->ses[i]; // см. описание на 5 трок выше
    }

    temp->nxt=NULL; // Обнуление указателя на следующую структуру
    return temp; // Возврат указателя на выделенную структуру
}
 
void input_list(int n){ // Функция ввода заданного количества записей
    stud *temp; // Объявление локальной переменной указателя на новый элемент
    for(int i=0;i<n;i++){ // Цикл ввода n элементов
        temp=input(); // Вызов функции ввода одного элемента динамического списка и сохранение результата в переменной temp
        if(head==NULL){ // Если элементы в списке отсутствуют
            head=temp; // Тогда присвоить указатель на единственный элемент списка в глобальные переменные head ...
            tail=temp; // ... и tail
        }
        else{ // Иначе
            tail->nxt=temp; // Обновляем в последней структуре указатель на следующий элемент
            tail=temp; // Присваиваем переменной tail указатель на введенный элемент
        }
    }
} // Таким образом строится список вида
// head -> {
//  name = "Имя 1";
//  group = 1;
//  ses[0] = 1;
//  ses[1] = 2;
//  ses[2] = 3;
//  ses[3] = 4;
//  ses[4] = 5;
//  next -> {
//   name = "Имя 2";
//   group = 2;
//   ses[0] = 5;
//   ses[1] = 4;
//   ses[2] = 3;
//   ses[3] = 2;
//   ses[4] = 1;
//   next -> {
//   ... { // Еще несколько подобных наборов переменных
//     name = "Имя N-1";
//     group = N-1;
//     ses[0] = 4;
//     ses[1] = 4;
//     ses[2] = 4;
//     ses[3] = 4;
//     ses[4] = 4;
//     tail = next -> {
//      name = "Имя N";
//      group = N;
//      ses[0] = 5;
//      ses[1] = 5;
//      ses[2] = 5;
//      ses[3] = 5;
//      ses[4] = 5;
//      next = NULL // Конец списка
//     }
//    }
//   }
//  }
// }
 
void display() // Функция вывода всех записей
{
    stud *temp; // Объявление локальной переменной указателя на новый элемент
    temp=head; // Инициализация значения локальной переменной
    while(temp!=NULL) // Цикл повторения до достижения конца списка
    {
        cout<<"Name: "<<temp->name<<endl; // Вывод "Name: Имя" и переход на новую строку
        cout<<"Group: "<<temp->group<<endl; // Вывод "Group: Группа" и переход на новую строку
        cout<<"Ses: "<<endl; // Вывод "Ses: " и переход на новую строку
        for(int i=0;i<5;i++) { // Цикл вывода оценок
            cout << temp->ses[i]<<" "; // Вывод ses[i] и пробел
        }
        temp=temp->nxt; // Переход к следующему элементу списка
    }
}
 
void final() // Функция вывода записей по условию
{
    stud *temp; // Объявление локальной переменной указателя на новый элемент
    temp=head; // Инициализация значения локальной переменной
    while(temp!=NULL) // Цикл повторения до достижения конца списка
    {
        sum=0; // Инициализация переменной, в которой будет вычислена сумма оценок
        for(int i=0;i<5;i++) { // Цикл суммирования
            sum += temp->ses[i]; // Вычисление суммы i-ой оценки
        }
        if(sum/5>=4.0){ // Проверка условия (средний балл > 4.0)
            cout<<"Name: "<<temp->name<<endl; // Вывод "Name: Имя" и переход на новую строку
            cout<<"Group: "<<temp->group<<endl; // Вывод "Group: Группа" и переход на новую строку
            j++; // Подсчет числа выведенных студентов
        }
        if (j==0){ // Логическая ошибка. Это должно быть после цикла. Если нет вывода, тогда ...
            cout<<"No students with average score greater than 4.0"<<endl; // Вывод особого сообщения
        }
        temp=temp->nxt; // Переход к следующему элементу списка
    }
}
int main() // Основная функция программы. С нее все начинается и в ней все заканчивается
{
    int n; // Объявление локальной переменной n
    cout<<"Enter how many students: "; // Вывод приглашения к вводу
    cin>>n; // Ввод запрошенного значения (количество записей в списке)
    input_list(n); // Вызов функции ввода заданного количества записей
    display(); // Вызов функции вывода всех записей
    final(); // Вызов функции вывода записей по условию
    return 0; // Выход из программы с кодом ошибки 0 (нет ошибок)
}
macomics вне форума Ответить с цитированием
Старый 02.10.2022, 19:11   #3
Lovskiy
Пользователь
 
Регистрация: 16.10.2021
Сообщений: 27
По умолчанию

macomics, Спасибо большое
Lovskiy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните, что делает этот код на Pascal igormel Помощь студентам 1 29.12.2016 21:28
Объясните, что делает этот код и напишите, пожалуйста, несколько комментариев narekkg Помощь студентам 0 12.06.2015 18:07
Ох уж этот access sabrishat Microsoft Office Access 1 27.11.2012 02:13
что значит этот вар? pufystyj PHP 2 18.02.2011 15:16