0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
1

Вывод на дисплей фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2

23.05.2017, 16:07. Показов 7289. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо описать код с помощью классов.
Задание:
1. Описать структуру с именем STUDENT, содержащую следующие поля:
• фамилия и инициалы;
• помер группы;
• успеваемость (массив из пяти элементов).
2. Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из десяти структур типа
STUDENT; записи должны быть упорядочены по алфавиту;
• вывод на дисплей фамилий и номеров групп для всех студентов, имеющих
хотя бы одну оценку 2;
• если таких студентов нет, вывести соответствующее сообщение.


Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
 
struct STUDENT
{
    char name[20];
    int group;
    char usp[5];
};
 
int main()
{
    int i,j;
    const int n=10;
    STUDENT st[n];
    
    //Ввод данных
    for(i=0;i<n;i++)
    {
        cout<<"Введите ФИО: ";
        cin>>st[i].name;
        cout<<"Введите номер группы: ";
        cin>>st[i].group;
        cout<<"Успеваемость"<<endl;
        for (j=0;j<5;j++)
        {
            cout<<"Оценка: ";
            cin>>st[i].usp[j];
        }
        cout<<endl;
    }
    cout<<endl;
 
    //Вывод в алфавитном порядке
       for(i=0;i<n;i++)
    {
        STUDENT min=st[i];
        int num=i;
        for(j=i;j<n;j++)
        {
            if(strcmp(st[j].name, min.name)<0)
            {
                min=st[j];
                num=j;
            }
        }
        st[num]=st[i];
        st[i]=min;
    }
    cout<<"ФИО студента "<<"Номер группы "<<"Успеваемость"<<endl;
    for(i=0;i<n;i++)
    {
    cout<<st[i].name<<setw(13)<<st[i].group<<setw(11)<<st[i].usp<<endl;
    }
   
    //Вывод студентов с оценками 2
    int f,a=0,S=0;
    cout<<endl<<"Студенты с оценками 2: "<<endl;
    for (i=0;i<n;i++)
    {
        f=0;
        for (j=0;j<5;j++)
        {
            if(st[i].usp[j]=='2')
            {
                f++;
                a=i;
            }
        }
        if(f>0)
        {
            cout<<st[a].name<<endl;
            cout<<st[a].group<<endl;
        }
        S=S+f;
    }
    if(S==0) cout<<endl<<"Студентов с 2 нет"<<endl;
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2017, 16:07
Ответы с готовыми решениями:

Структуры. Вывод на дисплей фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2.
1. Описать структуру с именем STUDENT, содержащую следующие поля: • NAME - фамилия и инициалы; •...

Файл: Вывод на дисплей фамилей и номеров групп для всех студентов, имеющих хотя бы одну оценку 2
Помогите пожалуйста.Надо сделать так чтоб это все сохранялось не в массиве а в файле.Буду очень...

Написать программу, выполняющую вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5
Доброго времени суток! есть просьба... кому не трудно помогите!!!!!!! написать прогу.... Буду очень...

Вывод на экран фамилий и номеров групп для всех студентов, включенных в базу данных
Описать класс Student, содержащий следующие поля: · Фамилия и инициалы · Номер...

5
4 / 4 / 2
Регистрация: 17.03.2015
Сообщений: 47
23.05.2017, 16:33 2
Лучший ответ Сообщение было отмечено Tulupovden как решение

Решение

сдавал в том году, вроде все работало
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
class student {
private:
    char FIname[18];
    char Nname[11];
    int  Mname[5];
public:
    void setM(int *M);
    void setFI(char *FI);
    void setN(char *N);
    void bad_m(student *spisok, int N);
    void sort(student *spisok, int N);
    void viev(student *spisok,  int N);
    ~student(){}
};
 
void student::setM(int *M) {
    for(int i=0;i<5;i++) {
        Mname[i]=M[i];
    }
}
 
void student::setFI(char *FI) {
    strcpy(FIname,FI);
}
 
void student::setN(char *N) {
    strcpy(Nname,N);
}
 
void student::sort(student *spisok, int N)
{
    int i,j; 
    student swap; 
    for(i=0;i<N-1;i++) 
    { 
        for(j=i+1;j<N;j++) 
        {
            if(strcmp(spisok[i].FIname,spisok[j].FIname)>0)
            {
                swap=spisok[i];
                spisok[i]=spisok[j];
                spisok[j]=swap;                 
            }
        }
    }
}
 
void student::viev(student *spisok,  int N)
{      
    sort(spisok, N);
    char x[11]=" ";
    cout<<"  ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄ¿"<<endl;
    cout<<"  ³ nomer ³     familya in.     ³   gruppa    ³   ocenki   ³"<<endl;
    for(int i=0;i<N;i++)
    {   
        for(int j=0;j<5;j++)
        {
            if(spisok[i].Mname[j]!=0)
            {
                x[2*j]=spisok[i].Mname[j]+48;
                x[2*j+1]=' ';
            }
        }
        cout<<"  ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´"<<endl;
        printf("  ³ %3d   ³ %18s  ³  %10s ³ %10s ³\n",i+1,spisok[i].FIname,spisok[i].Nname,x);
        for(int j=0;j<2*5;j++)
        {
            x[j]=NULL;
        }
    }
    cout<<"  ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÙ"<<endl;
}
 
void student::bad_m(student *spisok, int N)
{
    cout<<"Studenti, imeuchie ocenky 2"<<endl<<endl;
    cout<<"  ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"<<endl;
    cout<<"  ³ nomer ³     familya in.     ³   gruppa    ³"<<endl;
    int m=0,h=0;
    for (int i=0;i<N;i++)
    {
        for(int j=0;j<5;j++)
        {
            if (spisok[i].Mname[j]==2)
            {   
                m=1;
                cout<<"  ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´"<<endl;
                printf("  ³ %3d   ³ %18s  ³  %10s ³\n",i+1,spisok[i].FIname,spisok[i].Nname);
                break;
            }
            else m=0;
        }
        h+=m;
    }
    cout<<"  ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"<<endl;
 
    if (h==0)
    {
        cout<<"Studentov s dvoykami net)))"<<endl;
    }
}
 
void main(void)
{
    int N;
    cout<<"vvedite kolichestvo ludey v baze"<<endl;
    cin>>N;
    student *p= new student [N];
    char FIname[18]={NULL,};
    char Nname[11]={NULL,};
    int  Mname[5]={0,};
    cout<<"vvedite dannie v strukturu: "<<endl;
    for(int i=0;i<N;i++)
    {
        cout<<"Vvedite familiu i iniciali "<<i+1<<" studenta"<<endl;
        fflush(stdin);      cin.getline(FIname,18);
        cout<<"Vvedite nomer gruppi "<<endl;        cin>>Nname;
        cout<<"Vvedite 5 ocenok "<<endl;
        for(int j=0;j<5;j++)    {   cin>>Mname[j];  }
        p[i].setFI(FIname);
        p[i].setM(Mname);
        p[i].setN(Nname);
        cout<<"\n";
    }
    student p1;
    p1.viev(p,N);
    p1.bad_m(p,N);
    delete []p;
    system("PAUSE");
}
1
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
23.05.2017, 16:39  [ТС] 3
Athena, Спасибо, это то что нужно)
0
438 / 96 / 41
Регистрация: 04.10.2011
Сообщений: 343
25.05.2017, 11:45 4
Цитата Сообщение от Tulupovden Посмотреть сообщение
Athena, Спасибо, это то что нужно)
Уверены? А что если между строками:
C++
1
2
3
4
5
...
student *p= new student [N];
... // где то тут
delete []p;
...
возникнет исключение, которое может кинуть один из операторов <<, или >>, которые предоставляют всего лишь базовую гарантию относительно исключений, и/или произойдет аварийный выход из программы? Возможно даже препод, которому по большому счету фиолетово до вас примет такую работу, может он даже "не увидит" неустойчивой работы кода который принимает пользовательский ввод... но если вдруг, то вот попробуйте еще вариант (c++11 VS2015, GCC 5.4 ):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <algorithm>
#include <memory>
 
#if defined(_WIN32) || defined(_WIN64)
#include <string> // здесь компилятор MS ищет std::getline
const std::string EOF_INSTRUCTION = "Ctrl+Z";
#else
const std::string EOF_INSTRUCTION = "Ctrl+D";
#endif
 
// Очистка буфера входных данных от остатка данных строки
void clearBuffer(std::istream &is)
{ is.ignore(is.rdbuf()->in_avail(), '\n'); }
 
// Описать структуру с именем STUDENT:
struct STUDENT
{
    static const int PERF_SIZE = 5;
    // номер группы;
    int groupNum;
    // успеваемость (массив из пяти элементов).
    int performance[PERF_SIZE] = { 0 };
    // фамилия и инициалы;
    std::string FIO;
};
 
// ввод данных для структуры STUDENT
std::istream &operator >> (std::istream &is, STUDENT &student)
{
    std::cout << "Enter student's FIO (string line):";
    std::getline(is, student.FIO);
    if (!is) { return is; }
 
    std::cout << "Enter student's group number (digit):";
    is >> student.groupNum;
    if (!is) { return is; }
 
    clearBuffer(is);
 
    std::cout << "Performance data\n";
    for (int i = 0; i < student.PERF_SIZE && is; ++i)
    {
        std::cout << "\tEnter a digit (rest:"
                  << student.PERF_SIZE - i << ") or press "
                  << EOF_INSTRUCTION << ": ";
 
        is >> student.performance[i];
        clearBuffer(is);
    }
 
    if (is.bad()) { return is; }
 
    if (is.eof()) {
        std::cout << "\nSkip the remaining performance data.\n";
        is.clear();
    }
 
    clearBuffer(is);
    std::cout << "Enter success.\n";
 
    return is;
}
 
// вывод данных для структуры STUDENT
std::ostream &operator << (std::ostream &os, const STUDENT &student)
{
    os << " FIO: " << student.FIO << std::endl
       << " groupNum: " << student.groupNum << std::endl
       << " performance: ";
 
    for (int i = 0; i < student.PERF_SIZE; ++i)
    {
        os << student.performance[i] << " ";
    }
 
    return os << std::endl;
}
 
// в условии сказано о конкретном числе студентов
const std::size_t STUDENTS_COUNT = 10;
using student_t = std::shared_ptr<STUDENT>;
 
int main()
{
#if __USE_GNU
    // для корректировки работы sdt::cin.rdbuf()->in_avail()
    std::cin.sync_with_stdio(false);
#endif
 
    student_t array[STUDENTS_COUNT];
 
    // ввод с клавиатуры данных в массив,
    // состоящий из десяти структур типа STUDENT
    for (int i = 0; i < STUDENTS_COUNT; ++i) {
        auto student = new STUDENT;
        std::cin >> *student;
 
        if (std::cin.fail()) {
            std::cerr << "Input error try again." << "\n";
            std::cin.clear(); --i;
            clearBuffer(std::cin);
            continue;
        }
 
        array[i] = student_t{ student };
    }
 
    // записи должны быть упорядочены по алфавиту;
    std::sort(std::begin(array), std::end(array),
              [](const student_t& a, const student_t& b) {
                  return a.get()->FIO < b.get()->FIO;
              }
    );
 
    bool exists = false;
    const int NEED_NUM = 2;
 
    // вывод на дисплей фамилий и номеров групп для всех студентов...
    for (int i = 0; i < STUDENTS_COUNT; ++i)
    {
        auto & subject = array[i].get()->performance;
 
        // ... студентов, имеющих хотя бы одну оценку 2;
        auto existsTwo = std::find(
                std::begin(subject),
                std::end(subject), NEED_NUM
        ) != std::end(subject);
 
        if (existsTwo) {
            std::cout << std::string(79, '.') << "\n"
                      << *(array[i].get()) << "\n";
            exists = true;
        }
    }
 
    // если таких студентов нет, вывести соответствующее сообщение.
    if (!exists) { std::cout << "\n\tStudents with '2' do not exist\n\n"; }
 
    std::cout << "Press Enter to exit ... ";
    std::cin.get();
 
    return 0;
}
0
599 / 436 / 136
Регистрация: 22.11.2017
Сообщений: 1,340
04.02.2019, 13:28 5
Цитата Сообщение от moskitos80 Посмотреть сообщение
// Очистка буфера входных данных от остатка данных строки
void clearBuffer(std::istream &is)
{ is.ignore(is.rdbuf()->in_avail(), '\n'); }
Почему некоторые компиляторы оставляют в буфере потока символ '\n', другие нет?
Почему одни компиляторы на запрос is.rdbuf()->in_avail() показывают наполненный объём буфера, другие пишут всегда 0u, а может буфер всегда у них чист?
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
04.02.2019, 13:46 6
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Почему некоторые компиляторы оставляют в буфере потока символ '\n', другие нет?
Дело не в компиляторах, а в особеностях ввода. Когда вводим используя std::cin - он оставляет символ новой строки, тк этот символ не часть самого вводимого значения, для оcтального есть getline.
0
04.02.2019, 13:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2019, 13:46
Помогаю со студенческими работами здесь

Для студентов, имеющих хотя бы одну неудовлетворительную оценку, заменить величину стипендии на ноль
для студентов,имеющих хотя бы одну неудовлетворительную оценку, заменить величину степендии на ноль...

Создать класс с STUDENT, вывести на экран фамилии и номеров групп для всех студентов, имеющих оценки 4 и 5
Не могу, жизни и смерти, я не понимаю как это сделать, помогите Класс с именем STUDENT, содержащий...

Структуры, вывести фамилии и номера групп студентов, которые имеют хотя бы одну плохую оценку
Добрый день всем... Прошу помощи с заданием... Описать структуру с именем STUDENT, которая имеет...

Структура: вывод на дисплей фамилии и номеров групп студентов, если средний балл выше 4
Описать структуру содержащую поля фамилия и инициалы номер группы успеваемость(массив из 5 цифр)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru