Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43

Определить количество студентов второго курса

05.10.2021, 09:33. Показов 3677. Ответов 35
Метки с++ (Все метки)

Вопрос:

Количество строк: 4. Столбцы: Фамилия студента, Название вуза, Курс, Факультет. Определить количество студентов второго курса.

Ошибка на: 36 и 37 строке.

В вопросе написано определить кол-во студентов второго курса, н вывел int st, чтобы можно было самому выбрать курс.

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
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
struct rabota{
  string familia;
   string vyz;
   int kyrs;
   string fakultet;
};
 
void input(rabota *vw, int n){
    ifstream fin;
    fin.open("input.txt");
    for(int i=0; i<n; i++)
    {
        fin>>vw[i].familia>>vw[i].vyz>>vw[i].kyrs>>vw[i].fakultet;
        cout<<vw[i].familia<<" "<<vw[i].vyz<<" "<<vw[i].kyrs<<" "<<vw[i].fakultet<<endl;
    }
}
void output(rabota *vw, int n){
    ofstream fout;
    fout.open("output.txt");
    for(int i=0; i<n; i++)
    fout<<vw[i].familia<<" "<<vw[i].vyz<<" "<<vw[i].kyrs<<" "<<vw[i].fakultet<<endl;
    fout<<"File is written\n";
    cout<<"File is written\n";
}
 
void rachet(rabota *vw, int n){
    int summa = 0, st;
    for(int i = 0; i<n; i++){
    cin>>st;
    if(vw[i].familia = st){
        summa += vw[i].familia;
        }
    }
    cout<<summa;
}
 
void edit(rabota *vw, int n){
    int a;
    cout<<"Input number of the line: ";
    cin>>a;
    cout<<"Input familia: ";
    cin>>vw[1].familia;
    cout<<"Input vyz: ";
    cin>>vw[1].vyz;
    cout<<"Input kyrs: ";
    cin>>vw[1].kyrs;
    cout<<"Input fakultet: ";
    cin>>vw[1].fakultet;
}
 
void menu(rabota *vw, int n){
    int choice;
    do
    {
 
        cout<<" 1- Read file\n";
        cout<<"2 - students 2 kyrca\n";
        cout<<"3 - Edit file\n";
        cout<<"4 - Write file\n";
        cout<<"0 - Exit\n";
        cout<<" Choose an action: ";
        cin>>choice;
 
        switch(choice)
        {
        case 1:
            cout<<"\n";
            input(vw, n);
            cout<<"\n";
            break;
        case 2:
            cout<<"\n";
            rachet(vw, n);
            cout<<"\n";
            break;
        case 3:
            cout<<"\n";
            edit(vw,n);
            cout<<"\n";
            break;
        case 4:
            cout<<"\n";
            output(vw,n);
            cout<<"\n";
            break;
        case 0:
            exit(0);
            break;
        default:
            cout<<"\n";
            cout<<"Input another number\n";
        }
    }
    while(choice!=0);
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int n;
    cout<<"Input n: ";
    cin>>n;
 
    rabota *vw;
    vw = new rabota[n];
    menu(vw,n);
 
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2021, 09:33
Ответы с готовыми решениями:

Файл: По заданному массиву определить средний возраст студентов n курса.
Выполнить задания 6.2 для работы с большой базой данных, не помещающейся в оперативной памяти, храня записи в бинарном файле . 6.2....

Определить сколько студентов получит диплом в конце пятого курса
На первый курс факультета принимается K студентов. Каждую сес-сию N1% студентов получают хотя бы одну двойку. Деканат дает возможность...

Определить длину второго слова и количество слов длиннее второго
Ввести предложение длиной не более 80 символов. Определить длину его второго слова и количество слов длиннее второго. Вывести эти...

35
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
06.10.2021, 02:51  [ТС]
выфвфы

Добавлено через 2 минуты
То есть первый case подгружает, второй выводит?

Так ?

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
void menu (Student *data, int n){
    int choice;
    do
    {
        cout << " 1 - Read file\n";
    cout << " 2 - Print data\n";
        cout << " 3 - Calculation\n";
        cout << " 4 - Edit file\n";
        cout << " 5 - Write file\n";
        cout << " 0 - Exit\n";
        cout << " Choose an action: ";
        cin >> choice;
 
        switch(choice){
        case 1:
            cout << "\n";
            input(data, n);
            cout << "\n";
            break;
        case 2:
            cout << "\n";
            Print(data, n);
            cout << "\n";
            break;
        case 3:
            cout << "\ncount: " << Count(data,n) << "\n";
            break;
        case 4:
            cout << "\n";
            edit(data,n);
            cout << "\n";
            break;
        case 5:
            cout << "\n";
            output(data,n);
            cout << "\n";
            break;
        case 0:
            exit(0);
            break;
        default:
            cout << "\n";
            cout << "Input another number\n";
        }
    }
    while(choice!=0);
}
Добавлено через 43 секунды
Цитата Сообщение от Yetty Посмотреть сообщение
это я сбрасывал не для перехода на русский, а чтобы добавили пункт меню
3 часа ночи, режим тупости ВКЛ.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
06.10.2021, 03:01
Цитата Сообщение от hitmanEN Посмотреть сообщение
То есть первый case подгружает, второй выводит?
да, примерно так. читаем данные с файла 1 раз, печатать данные массива можно много раз, т.е. например выводить данные после каждого редактирования

Добавлено через 5 минут
...
1
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
06.10.2021, 03:10  [ТС]
Нереально )))) Спасибо Вам большоё! , все недочеты, которые Вы мне сказали я учёл, и буду стараться прежних ошибок не совершать, для дальнейшей учебы, в этом направлении.

Конечный код: (Мб ещё какие-то ошибки, но если их нет, то это конечная и ответ на вопрос)

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
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
struct Student{
  string surname;
   string univer;
   int course;
   string faculty;
};
 
/*void ReadData(Student *data, int n){
    ifstream print;
    print.open("ReadData.txt");
    for(int i = 0; i < n; i++){
    print >> data[i].surname >> data[i].univer >> data[i].course >> data[i].faculty;
 
    cout << data[i].surname << " " << data[i].univer << " " << data[i].course << " " << data[i].faculty;
    }
}*/
 
void ReadData (Student *data, int n)
{
    ifstream fin ("input.txt");
    if (fin.is_open())
    {
        for (int i = 0; i < n; i++)
            fin >> data[i].surname >> data[i].univer >> data[i].course >> data[i].faculty;
    fin.close();
    }
    else cout << "Unable to open file\n";
}
 
void Print (Student *data, int n){
    for (int i = 0; i < n; i++){
        cout << data[i].surname << " " << data[i].univer << " " << data[i].course << " " << data[i].faculty << endl;
    }
}
 
void output (Student *data, int n){
    ofstream fout;
    fout.open("output.txt");
    for(int i = 0; i < n; i++)
    fout << data[i].surname << " " << data[i].univer << " " <<data[i].course << " " << data[i].faculty << endl;
    fout << "File is written\n";
    cout << "File is written\n";
}
 
int Count (Student *data, int n){
    int count=0;
    for (int i = 0; i < n; i++)
        if(data[i].course==2) count++;
    return count;
}
 
/*void calc(Student *data, int n){
    int sum = 0;
    for(int i = 0; i<n; i++){
    if(data[i].course == 2){
        sum += 1;
        }
    }
    cout<<sum;
}*/
 
void edit (Student *data, int n){
    int a;
    cout << "Input number of the line: ";
    cin >> a;
    cout << "Input surname: ";
    cin >> data[a-1].surname;
    cout << "Input univer: ";
    cin >> data[a-1].univer;
    cout << "Input course: ";
    cin >> data[a-1].course;
    cout << "Input faculty: ";
    cin >> data[a-1].faculty;
}
 
void menu (Student *data, int n){
    int choice;
    do
    {
        cout << " 1 - Read file\n";
        cout << " 2 - Print data\n";
        cout << " 3 - Calculation\n";
        cout << " 4 - Edit file\n";
        cout << " 5 - Write file\n";
        cout << " 0 - Exit\n";
        cout << " Choose an action: ";
        cin >> choice;
 
        switch(choice){
        case 1:
            cout << "\n";
            ReadData(data, n);
            cout << "\n";
            break;
        case 2:
            cout << "\n";
            Print(data, n);
            cout << "\n";
            break;
        case 3:
            cout << "\ncount: " << Count(data,n) << "\n";
            break;
        case 4:
            cout << "\n";
            edit(data,n);
            cout << "\n";
            break;
        case 5:
            cout << "\n";
            output(data,n);
            cout << "\n";
            break;
        case 0:
            exit(0);
            break;
        default:
            cout << "\n";
            cout << "Input another number\n";
        }
    }
    while(choice!=0);
}
 
int main (){
    int n;
    cout << "Input n: ";
    cin >> n;
 
    Student *data;
    data = new Student[n];
    menu(data,n);
 
    return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
06.10.2021, 06:12
hitmanEN, добавьте форматирование вывода для выравнивания, посмотрите (setw(), left)
уберите строку:
Цитата Сообщение от hitmanEN Посмотреть сообщение
fout << "File is written\n";
это:
Цитата Сообщение от hitmanEN Посмотреть сообщение
ofstream fout;
    fout.open("output.txt");
можно так:
C++
1
ofstream fout ("output.txt");
проверку на успешное открытие тоже можно добавить

в конце программы освободите память:
C++
1
delete[] data;
все названия функций начинайте с заглавных или строчных букв, лучше заглавных, я бы заменил переменную 'a' на num (это конечно субъективно)

решите свою задачу для произвольного (заранее неизвестного) количества строк в файле
0
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
06.10.2021, 06:19  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
уберите строку:
Убрал.

Цитата Сообщение от Yetty Посмотреть сообщение
можно так:
Спасибо буду знать! Ещё вопрос именно по output, нужно ли так же сделать как с чтением, то есть cout и output отдельно выводить?

Цитата Сообщение от Yetty Посмотреть сообщение
в конце программы освободите память:
Вроде туда пихнул, чуть позже ещё разберусь с ней, чтобы точно понять, а так всё хорошо.

Цитата Сообщение от Yetty Посмотреть сообщение
все названия функций начинайте с заглавных или строчных букв, лучше заглавных, я бы заменил переменную 'a' на num (это конечно субъективно)
По Вашему совету изменил a на num. Насчёт функций вроде все назвал с большой, с заглавных это для красоты или так следует делать? мне привыкать к этому?

Цитата Сообщение от Yetty Посмотреть сообщение
решите свою задачу для произвольного (заранее неизвестного) количества строк в файле
То есть выставить:

C++
1
const int n = 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
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
struct Student{
  string Surname;
   string Univer;
   int Course;
   string Faculty;
};
 
void ReadData (Student *data, int n){
    ifstream fin ("input.txt");
    if (fin.is_open())
    {
        for (int i = 0; i < n; i++)
            fin >> data[i].Surname >> data[i].Univer >> data[i].Course >> data[i].Faculty;
    fin.close();
    }
    else cout << "Unable to open file\n";
}
 
void Print (Student *data, int n){
    for (int i = 0; i < n; i++){
        cout << data[i].Surname << " " << data[i].Univer << " " << data[i].Course << " " << data[i].Faculty << endl;
    }
}
 
void Output (Student *data, int n){
    ofstream fout ("output.txt");
    for(int i = 0; i < n; i++)
    fout << data[i].Surname << " " << data[i].Univer << " " <<data[i].Course << " " << data[i].Faculty << endl;
    cout << "File is written\n";
}
 
int Count (Student *data, int n){
    int count=0;
    for (int i = 0; i < n; i++)
        if(data[i].Course==2) count++;
    return count;
}
 
void Edit (Student *data, int n){
    int num;
    cout << "Input number of the line: ";
    cin >> num;
    cout << "Input Surname: ";
    cin >> data[num-1].Surname;
    cout << "Input Univer: ";
    cin >> data[num-1].Univer;
    cout << "Input Course: ";
    cin >> data[num-1].Course;
    cout << "Input Faculty: ";
    cin >> data[num-1].Faculty;
}
 
void Menu (Student *data, int n){
    int choice;
    do
    {
        cout << " 1 - Read file\n";
        cout << " 2 - Print data\n";
        cout << " 3 - Calculation\n";
        cout << " 4 - Edit file\n";
        cout << " 5 - Write file\n";
        cout << " 0 - Exit\n";
        cout << " Choose an action: ";
        cin >> choice;
 
        switch(choice){
        case 1:
            cout << "\n";
            ReadData(data, n);
            cout << "\n";
            break;
        case 2:
            cout << "\n";
            Print(data, n);
            cout << "\n";
            break;
        case 3:
            cout << "\ncount: " << Count(data,n) << "\n";
            break;
        case 4:
            cout << "\n";
            Edit(data,n);
            cout << "\n";
            break;
        case 5:
            cout << "\n";
            Output(data,n);
            cout << "\n";
            break;
        case 0:
            exit(0);
            break;
        default:
            cout << "\n";
            cout << "Input another number\n";
        }
    }
    while(choice!=0);
}
 
int main (){
    const int n=4;
 
    Student *data;
    data = new Student[n];
    Menu(data,n);
    delete[] data;
 
    return 0;
}
Цитата Сообщение от Yetty Посмотреть сообщение
добавьте форматирование вывода чтобы колонки были ровными, посмотрите (setw(), left)
Я пока что читаю и разбираюсь, чуть позже переделаю.
0
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
06.10.2021, 06:28  [ТС]
P.S Добавил форматирование, не уверен что правильно.

Косячок какой-то(Фотки приложил)

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
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
struct Student{
  string Surname;
   string Univer;
   int Course;
   string Faculty;
};
 
void ReadData (Student *data, int n){
    ifstream fin ("input.txt");
    if (fin.is_open())
    {
        for (int i = 0; i < n; i++)
            fin >> data[i].Surname >> data[i].Univer >> data[i].Course >> data[i].Faculty;
    fin.close();
    }
    else cout << "Unable to open file\n";
}
 
void Print (Student *data, int n){
    for (int i = 0; i < n; i++){
        cout << data[i].Surname << " " << data[i].Univer << " " << data[i].Course << " " << data[i].Faculty << endl;
    }
}
 
void Output (Student *data, int n){
    ofstream fout ("output.txt");
    for(int i = 0; i < n; i++)
    fout << data[i].Surname << " " << data[i].Univer << " " <<data[i].Course << " " << data[i].Faculty << endl;
    cout << "File is written\n";
}
 
int Count (Student *data, int n){
    int count=0;
    for (int i = 0; i < n; i++)
        if(data[i].Course==2) count++;
    return count;
}
 
void Edit (Student *data, int n){
    int num;
    cout << "Input number of the line: ";
    cin >> num;
    cout << "Input Surname: ";
    cin >> data[num-1].Surname;
    cout << "Input Univer: ";
    cin >> data[num-1].Univer;
    cout << "Input Course: ";
    cin >> data[num-1].Course;
    cout << "Input Faculty: ";
    cin >> data[num-1].Faculty;
}
 
void Menu (Student *data, int n){
    int choice;
    do
    {
        cout << " 1 - Read file\n";
        cout << " 2 - Print data\n";
        cout << " 3 - Calculation\n";
        cout << " 4 - Edit file\n";
        cout << " 5 - Write file\n";
        cout << " 0 - Exit\n";
        cout << " Choose an action: ";
        cin >> choice;
 
        switch(choice){
        case 1:
            cout << "\n";
            ReadData(data, n);
            cout << "\n";
            break;
        case 2:
            cout << "\n";
            Print(data, n);
            cout << "\n";
            break;
        case 3:
            cout << "\ncount: " << Count(data,n) << "\n";
            break;
        case 4:
            cout << "\n";
            Edit(data,n);
            cout << "\n";
            break;
        case 5:
            cout << "\n";
            Output(data,n);
            cout << "\n";
            break;
        case 0:
            exit(0);
            break;
        default:
            cout << "\n";
            cout << "Input another number\n";
        }
    }
    while(choice!=0);
}
 
int main (){
    cout.setf(ios::left);
    cout.width(40);
    const int n=4;
 
    Student *data;
    data = new Student[n];
    Menu(data,n);
    delete[] data;
 
    return 0;
}
Миниатюры
Определить количество студентов второго курса  
0
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
06.10.2021, 23:00  [ТС]
Yetty, Взгляни.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
06.10.2021, 23:08
Цитата Сообщение от hitmanEN Посмотреть сообщение
Добавил форматирование
добавляйте прямо в строку 28 перед каждым значением кроме последнего, например:
C++
1
cout << setw(20) << left << data[i].Surname ... // и т.д.
почему поля стали с заглавных ? верните назад
Цитата Сообщение от Yetty Посмотреть сообщение
проверку на успешное открытие тоже можно добавить
это я про output.txt
Цитата Сообщение от hitmanEN Посмотреть сообщение
нужно ли так же сделать как с чтением, то есть cout и output отдельно выводить?
не нужно, там с cout одна строка cout << "File is written\n"; пусть остаётся
Цитата Сообщение от hitmanEN Посмотреть сообщение
изменил a на num
обычно для ввода целочисленных переменных используются буквы k,n,m (конечно это необязательно, просто так принято). с num тоже как-то не очень выглядит, давайте заменим на k
Цитата Сообщение от hitmanEN Посмотреть сообщение
То есть выставить: const int n = 4;
Вы меня не поняли. есть файл. сколько в нём строк неизвестно. попробуйте решить Вашу задачу для такого файла
0
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
07.10.2021, 00:24  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
добавляйте прямо в строку 28 перед каждым значением кроме последнего, например:
Так ? Только для одной строчки ?
C++
1
cout << setw(20) << left << data[i].Surname << " " << setw(20) << left << data[i].Univer << " " << setw(20) << left << data[i].Course << " " << setw(20) << left << data[i].Faculty << endl;
Цитата Сообщение от Yetty Посмотреть сообщение
обычно для ввода целочисленных переменных используются буквы k,n,m (конечно это необязательно, просто так принято). с num тоже как-то не очень выглядит, давайте заменим на k
Исправил!

Цитата Сообщение от Yetty Посмотреть сообщение
почему поля стали с заглавных ? верните назад
void ReadData типо этого?

или

C++
1
2
3
4
string Surname;
    string Univer;
    int Course;
    string Faculty;

Цитата Сообщение от Yetty Посмотреть сообщение
это я про output.txt
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
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
struct Student{
    string Surname;
    string Univer;
    int Course;
    string Faculty;
};
 
void ReadData (Student *data, int n){
    ifstream fin ("input.txt");
    if (fin.is_open())
    {
        for (int i = 0; i < n; i++)
            fin >> data[i].Surname >> data[i].Univer >> data[i].Course >> data[i].Faculty;
    fin.close();
    }
    else cout << "Unable to open file\n";
}
 
void Print (Student *data, int n){
    for (int i = 0; i < n; i++){
        cout << setw(20) << left << data[i].Surname << " " << setw(20) << left << data[i].Univer << " " << setw(20) << left << data[i].Course << " " << setw(20) << left << data[i].Faculty << endl;
    }
}
 
void Output (Student *data, int n){
    ofstream fout ("output.txt");
    if (fout.is_open())
    {
        for(int i = 0; i < n; i++)
            fout << data[i].Surname << " " << data[i].Univer << " " <<data[i].Course << " " << data[i].Faculty << endl;
            cout << "File is written\n";
    fout.close();
    }
    else cout << "Unable to open file\n";
}
 
int Count (Student *data, int n){
    int count = 0;
    for (int i = 0; i < n; i++)
        if(data[i].Course == 2) count++;
    return count;
}
 
void Edit (Student *data, int n){
    int k;
    cout << "Input number of the line: ";
    cin >> k;
    cout << "Input Surname: ";
    cin >> data[k-1].Surname;
    cout << "Input Univer: ";
    cin >> data[k-1].Univer;
    cout << "Input Course: ";
    cin >> data[k-1].Course;
    cout << "Input Faculty: ";
    cin >> data[k-1].Faculty;
}
 
void Menu (Student *data, int n){
    int choice;
    do
    {
        cout << "Select an action: " << "\n\n";
        cout << " 1 - Read file\n";
        cout << " 2 - Print data\n";
        cout << " 3 - Calculation\n";
        cout << " 4 - Edit file\n";
        cout << " 5 - Write file\n";
        cout << " 0 - Exit\n\n";
        cout << " Choose an action: ";
        cin >> choice;
 
        switch(choice){
        case 1:
            cout << "\n";
            ReadData(data, n);
            cout << "\n";
            break;
        case 2:
            cout << "\n";
            Print(data, n);
            cout << "\n";
            break;
        case 3:
            cout << "\nCount: " << Count(data,n) << "\n\n";
            break;
        case 4:
            cout << "\n";
            Edit(data, n);
            cout << "\n";
            break;
        case 5:
            cout << "\n";
            Output(data, n);
            cout << "\n";
            break;
        case 0:
            exit(0);
            break;
        default:
            cout << "\n";
            cout << "Input another number\n";
        }
    }
    while(choice!=0);
}
 
int main (){
    const int n = 4;
    Student *data;
    data = new Student[n];
    Menu(data,n);
    delete[] data;
 
    return 0;
}
Цитата Сообщение от Yetty Посмотреть сообщение
Вы меня не поняли. есть файл. сколько в нём строк неизвестно. попробуйте решить Вашу задачу для такого файла
До сих пор до конца не понимаю, то есть мы полность убираем переменную n ?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.10.2021, 09:37
ReadData - наименование функции

C++
1
2
3
4
5
6
struct Student{
    string surname; 
    string univer;
    int course;
    string faculty;
};
surname - наименование поля структуры

C++
1
2
cout << setw(15) << left << data[i].surname << setw(30) << left << data[i].univer 
<< setw(5) << left << data[i].course << data[i].faculty << "\n";
аргументы setw поставьте на своё усмотрение

Цитата Сообщение от hitmanEN Посмотреть сообщение
exit(0);
не рекомендуется

для размера динамического массива не используйте const
C++
1
2
3
4
5
6
7
8
9
10
11
int main ()
{
    int n=4;
 
    Student *data = new Student[n];
    
    Menu(data,n);
 
delete[] data; 
return 0;
}
Цитата Сообщение от hitmanEN Посмотреть сообщение
полность убираем переменную n ?
не убираем, а определяем (находим)

Вам подходит что название ВУЗа и факультет состоят из одного слова ?
0
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
07.10.2021, 09:45  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
surname - наименование поля структуры
Поправил.

Цитата Сообщение от Yetty Посмотреть сообщение
аргументы setw поставьте на своё усмотрение
Попробовал, выглядит красиво.

Цитата Сообщение от Yetty Посмотреть сообщение
не рекомендуется
Меню получается не полноценное, с таким же успехом я могу написать в консоле просто exit или же закрыть копилятор, я в чём проблема? Программа не на постоянное использование)) Или это мне на будущее?

Цитата Сообщение от Yetty Посмотреть сообщение
Для размера динамического массива не используйте const
Поправил.

Цитата Сообщение от Yetty Посмотреть сообщение
не убираем, а определяем (находим)
Теперь я понял задачу, чуть позже займусь за это и пришлю, а пока вот что получилось:

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
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
struct Student{
    string surname;
    string univer;
    int course;
    string faculty;
};
 
void ReadData (Student *data, int n){
    ifstream fin ("input.txt");
    if (fin.is_open())
    {
        for (int i = 0; i < n; i++)
            fin >> data[i].surname >> data[i].univer >> data[i].course >> data[i].faculty;
    fin.close();
    }
    else cout << "Unable to open file\n";
}
 
void Print (Student *data, int n){
    for (int i = 0; i < n; i++){
        cout << setw(10) << left << data[i].surname << setw(10) << left << data[i].univer << setw(5) << left << data[i].course << data[i].faculty << "\n";
    }
}
 
void Output (Student *data, int n){
    ofstream fout ("output.txt");
    if (fout.is_open())
    {
        for(int i = 0; i < n; i++)
            fout << data[i].surname << " " << data[i].univer << " " <<data[i].course << " " << data[i].faculty << endl;
            cout << "File is written\n";
    fout.close();
    }
    else cout << "Unable to open file\n";
}
 
int Count (Student *data, int n){
    int count = 0;
    for (int i = 0; i < n; i++)
        if(data[i].course == 2) count++;
    return count;
}
 
void Edit (Student *data, int n){
    int k;
    cout << "Input number of the line: ";
    cin >> k;
    cout << "Input surname: ";
    cin >> data[k-1].surname;
    cout << "Input univer: ";
    cin >> data[k-1].univer;
    cout << "Input course: ";
    cin >> data[k-1].course;
    cout << "Input faculty: ";
    cin >> data[k-1].faculty;
}
 
void Menu (Student *data, int n){
    int choice;
    do
    {
        cout << "Select an action: " << "\n\n";
        cout << " 1 - Read file\n";
        cout << " 2 - Print data\n";
        cout << " 3 - Calculation\n";
        cout << " 4 - Edit file\n";
        cout << " 5 - Write file\n\n";
        cout << " Choose an action: ";
        cin >> choice;
 
        switch(choice){
        case 1:
            cout << "\n";
            ReadData(data, n);
            cout << "\n";
            break;
        case 2:
            cout << "\n";
            Print(data, n);
            cout << "\n";
            break;
        case 3:
            cout << "\nCount: " << Count(data,n) << "\n\n";
            break;
        case 4:
            cout << "\n";
            Edit(data, n);
            cout << "\n";
            break;
        case 5:
            cout << "\n";
            Output(data, n);
            cout << "\n";
            break;
        default:
            cout << "\n";
            cout << "Input another number\n";
        }
    }
    while(choice!=0);
}
 
int main (){
    int n = 4;
 
    Student *data = new Student[n];
 
    Menu(data,n);
 
delete[] data;
return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.10.2021, 09:56
во всех case уберите строки cout << "\n";

слишком длинные строки разбивайте на несколько (см. пример выше)

Цитата Сообщение от hitmanEN Посмотреть сообщение
Меню получается не полноценное
уберите только строку exit(0);
Цитата Сообщение от Yetty Посмотреть сообщение
Вам подходит что название ВУЗа и факультет состоят из одного слова ?
ответьте пожалуйста на вопрос
1
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
07.10.2021, 11:29  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
ответьте пожалуйста на вопрос
Нет, название вуза отличается от названия факультета, я буду писать реальные данные.

Цитата Сообщение от Yetty Посмотреть сообщение
уберите только строку exit(0);
Хорошо.

Цитата Сообщение от Yetty Посмотреть сообщение
во всех case уберите строки cout << "\n";
слишком длинные строки разбивайте на несколько (см. пример выше)
Выполнил!

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
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
struct Student{
    string surname;
    string univer;
    int course;
    string faculty;
};
 
void ReadData (Student *data, int n){
    ifstream fin ("input.txt");
    if (fin.is_open())
    {
        for (int i = 0; i < n; i++)
            fin >> data[i].surname >> data[i].univer >> data[i].course >> data[i].faculty;
    fin.close();
    }
    else cout << "\nUnable to open file\n\n";
}
 
void Print (Student *data, int n){
    for (int i = 0; i < n; i++){
        cout << " " << setw(10) << left << data[i].surname << setw(10) << left << data[i].univer
        << setw(5) << left << data[i].course << data[i].faculty << endl;
    }
}
 
void OutPut (Student *data, int n){
    ofstream fout ("OutPut.txt");
    if (fout.is_open())
    {
        for(int i = 0; i < n; i++)
            fout << data[i].surname << " " << data[i].univer << " "
            << data[i].course << " " << data[i].faculty << endl;
            cout << "\nFile is written\n\n";
    fout.close();
    }
    else cout << "\nUnable to open file\n\n";
}
 
int Count (Student *data, int n){
    int count = 0;
    for (int i = 0; i < n; i++)
        if(data[i].course == 2) count++;
    return count;
}
 
void Edit (Student *data, int n){
    int k;
    cout << "\nInput number of the line: ";
    cin >> k;
    cout << "Input surname: ";
    cin >> data[k-1].surname;
    cout << "Input univer: ";
    cin >> data[k-1].univer;
    cout << "Input course: ";
    cin >> data[k-1].course;
    cout << "Input faculty: ";
    cin >> data[k-1].faculty;
}
 
void Menu (Student *data, int n){
    int choice;
    do
    {
        cout << "Select an action: " << "\n\n";
        cout << " 1 - Read file\n";
        cout << " 2 - Print data\n";
        cout << " 3 - Calculation\n";
        cout << " 4 - Edit file\n";
        cout << " 5 - Write file\n";
        cout << " 0 - Exit\n\n";
        cout << " Choose an action: ";
        cin >> choice;
 
        switch(choice){
        case 1:
            ReadData(data, n);
            break;
        case 2:
            Print(data, n);
            break;
        case 3:
            cout << "\nCount: " << Count(data,n) << "\n\n";
            break;
        case 4:
            Edit(data, n);
            break;
        case 5:
            OutPut(data, n);
            break;
        case 0:
            break;
        default:
            cout << "\nInput another number\n\n";
        }
    }
    while(choice!=0);
}
 
int main (){
    int n = 4;
 
    Student *data = new Student[n];
 
    Menu(data,n);
 
delete[] data;
return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.10.2021, 12:09
зачем переименовали результирующий файл ? верните как было раньше

в строке 28 уберите << " "

setw(10) для фамилии сделайте ширину поля побольше, для названия ВУЗа тем более

Цитата Сообщение от hitmanEN Посмотреть сообщение
название вуза отличается от названия факультета
это очевидно. я говорил том, что название ВУЗа (как и название факультета) может состоять из нескольких слов, поэтому читать нужно по-другому
0
Баба-Яга
 Аватар для hitmanEN
8 / 5 / 3
Регистрация: 05.10.2021
Сообщений: 43
07.10.2021, 12:15  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
это очевидно. я говорил том, что название ВУЗа (как и название факультета) может состоять из нескольких слов, поэтому читать нужно по-другому
Будут только сокращенные названия(состоящие из одного слова), поэтому с этим нет проблем.

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
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
struct Student{
    string surname;
    string univer;
    int course;
    string faculty;
};
 
void ReadData (Student *data, int n){
    ifstream fin ("input.txt");
    if (fin.is_open())
    {
        for (int i = 0; i < n; i++)
            fin >> data[i].surname >> data[i].univer >> data[i].course >> data[i].faculty;
    fin.close();
    }
    else cout << "\nUnable to open file\n\n";
}
 
void Print (Student *data, int n){
    for (int i = 0; i < n; i++){
        cout << setw(20) << left << data[i].surname << setw(10) << left << data[i].univer
        << setw(5) << left << data[i].course << data[i].faculty << endl;
    }
}
 
void OutPut (Student *data, int n){
    ofstream fout ("output.txt");
    if (fout.is_open())
    {
        for(int i = 0; i < n; i++)
            fout << data[i].surname << " " << data[i].univer << " "
            << data[i].course << " " << data[i].faculty << endl;
            cout << "\nFile is written\n\n";
    fout.close();
    }
    else cout << "\nUnable to open file\n\n";
}
 
int Count (Student *data, int n){
    int count = 0;
    for (int i = 0; i < n; i++)
        if(data[i].course == 2) count++;
    return count;
}
 
void Edit (Student *data, int n){
    int k;
    cout << "\nInput number of the line: ";
    cin >> k;
    cout << "Input surname: ";
    cin >> data[k-1].surname;
    cout << "Input univer: ";
    cin >> data[k-1].univer;
    cout << "Input course: ";
    cin >> data[k-1].course;
    cout << "Input faculty: ";
    cin >> data[k-1].faculty;
}
 
void Menu (Student *data, int n){
    int choice;
    do
    {
        cout << "Select an action: " << "\n\n";
        cout << " 1 - Read file\n";
        cout << " 2 - Print data\n";
        cout << " 3 - Calculation\n";
        cout << " 4 - Edit file\n";
        cout << " 5 - Write file\n";
        cout << " 0 - Exit\n\n";
        cout << " Choose an action: ";
        cin >> choice;
 
        switch(choice){
        case 1:
            ReadData(data, n);
            break;
        case 2:
            Print(data, n);
            break;
        case 3:
            cout << "\nCount: " << Count(data,n) << "\n\n";
            break;
        case 4:
            Edit(data, n);
            break;
        case 5:
            OutPut(data, n);
            break;
        case 0:
            break;
        default:
            cout << "\nInput another number\n\n";
        }
    }
    while(choice!=0);
}
 
int main (){
    int n = 4;
 
    Student *data = new Student[n];
 
    Menu(data,n);
 
delete[] data;
return 0;
}
Сделал.

Цитата Сообщение от Yetty Посмотреть сообщение
в строке 28 уберите << " "
setw(10) для фамилии сделайте ширину поля побольше
Я менял void output на OutPut, дабы не изменять каждый вручную, поменял сразу все и забыл проверить, что есть output.txt

Цитата Сообщение от Yetty Посмотреть сообщение
зачем переименовали результирующий файл ? верните как было раньше
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.10.2021, 12:19
Цитата Сообщение от hitmanEN Посмотреть сообщение
поменял сразу все и забыл проверить
поэтому функции лучше сразу давать название соответствующее тому, что она делает, например WriteFile
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2021, 12:19

Задачка второго курса
При умножении вектора на матрицу выходят заоблачные значения. Чего не так и как исправить? #include &lt;iostream&gt; #include...

Определить количество студентов второго курса, возраст которых не превышает средний возраст студенток второго курса
Количество студентов второго курса, возраст которых не превышает средний возраст студенток второго курса

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

Вывести фамилии студентов второго курса
uses crt; type adres=record gorod:string; ylica:string; dom: byte; kvartira:byte; ...

Перенести студентов второго курса в конец списка
Проблема с программой... Цель: Студентов второго курса перенести в конец списка Program Z1; const n=2; type spec=^sp; ...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru