Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 46

Определить фамилию мужчины с самой большой зарплатой

19.11.2021, 16:44. Показов 2481. Ответов 12
Метки c++, с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Известны данные о работниках фирмы (фамилия, зарплата и пол).
Определить фамилию мужчины с самой большой зарплатой (считать, что он единственный).
Сортировать данные в алфавитном порядке по фамилии и вывести на экран.Я уже написала часть кода, но он неправильно работает((
может кто-нибудь пожалуйста помочь его усовершенствовать?

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
struct Staff
{
    string lastname;
    int salary;
    string sex;
};
 
void InputStaff(Staff& x)
{ 
    cout << "sex (w/m): ";
    if (cin.peek() == '\n') cin.ignore();
    getline(cin, x.sex);
 
    cout << "lastname: ";
    if (cin.peek() == '\n') cin.ignore();
    getline(cin, x.lastname);
 
    cout << "salary: ";
    cin >> x.salary;
   
}
 
void OutputStaff(Staff x)
{
    cout << x.lastname << "  salary: " << x.salary << "  sex: " << x.sex << endl;
}
 
void BestStaff(Staff* x, int size)
{
    int max = 0;
    cout << "\nBest workman: \n";
    for (int i = 0; i < size; i++) {
        if ((x[i].salary > max) && (x[i].sex = 'm'))
            max = x[i].salary;
        cout << x[i].lastname << endl;
    }
       
    
}
int main()
{
    Staff* s;
    int n;
    cout << "n?  ";
    cin >> n;
    s = new Staff[n];
 
 
     for(int i=0; i<n; i++)
         InputStaff(s[i]);
 
    for (int i = 0; i < n; i++)
        OutputStaff(s[i]);
 
    BestStaff(s, n);
 
    system("pause");
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2021, 16:44
Ответы с готовыми решениями:

Структуры: определить двух людей с самой высокой зарплатой
Определить, 2 человек с самой высокой зарплатой. Определить количество отработанных дней.

ФИО мужчины с самой большой зарплатой
Помогите разобраться: Известны данные о N сотрудниках фирмы(ФИО, зарплаты и пол) Определить: ФИО мужчины с самой большой...

Напишите код который находит работника с самой большой зарплатой и с самой маленькой зарплатой.
У нас есть объект, в котором хранятся зарплаты нашей команды: let salaries = { John: 1100, Ann: 1160, Pete: 1130 Olga:...

12
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.11.2021, 06:23
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <utility>
using namespace std;
 
struct Worker
{
    string surname;
    int salary;
    char sex;
};
 
void inputData (Worker* s, int n)
{ 
    for (int i = 0; i < n; i++)
    {
        cin.ignore();
        cout << "Worker " << i+1 << ":\n";    
        cout << "Surname: ";
        getline(cin, s[i].surname);
        cout << "Salary: ";
        cin >> s[i].salary;        
        cout << "Sex: "; 
        cin >> s[i].sex;
    }  
}
 
void find (Worker* s, int n)
{
    int max=0, imax=0;
    cout << "The highest salary among men has: ";
    for (int i = 0; i < n; i++)    
        if (s[i].sex == 'm' && s[i].salary > max) {max=s[i].salary;imax=i;}
        
    cout << s[imax].surname << "\n";
}
 
void sortData (Worker* s, int n)
{
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - i - 1; j++)
            if (s[j].surname > s[j+1].surname) 
                swap(s[j],s[j+1]);
}
 
void printData (Worker* s, int n)
{
    cout << "SURNAME             SALARY    SEX:\n";
    for (int i = 0; i < n; i++)    
        cout << setw(20) << left << s[i].surname << setw(10) << left << s[i].salary << " " << s[i].sex << "\n";          
}
 
int main()
{    
    int n;
    cout << "n="; cin >> n;   
    
    Worker* s = new Worker[n];
    
    inputData(s,n);
    find(s,n);
    sortData(s,n);
    cout << "SORTED LIST:\n";
    printData(s,n);
    
    delete[]s;
system("pause");
return 0;
}
Добавлено через 4 минуты
Rabbit2, обратите внимание что при сравнении ставится двойное равно ==
1
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 46
20.11.2021, 12:23  [ТС]
Добавлено через 43 секунды
Yetty, СПАСИБО ВАМ ОГРОМНОЕ!!!
только не пойму что ето такое:
cout << setw(20) << left << s[i].surname << setw(10) << left << s[i].salary << " " << s[i].sex << "\n";
setw(??
и какая библиотека нужна для етого
0
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 46
09.02.2022, 14:59  [ТС]
Очень нужна помощь, пожалуйста

Есть текстовый файл в котором слова отделены друг от друга запятыми, а в конце точка.
Распечатать все слова наименьшей длины.
0
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 46
09.02.2022, 15:12  [ТС]
Очень буду благодарен за помощь, никак не могу сделать

изменить данную программу таким образом:

1. ввод массива объектов должен быть из текстового файла

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
//Известны данные о работниках фирмы (фамилия, зарплата и пол)
//Определить фамилию мужчины с самой большой зарплатой (считать, что он единственный).
//Посортировать данные в алфавитном порядке по фамилии и вывести на экран.
 
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
 
struct Worker
{
    string surname;
    int salary;
    char sex;
};
 
void inputData(Worker* s, int n)
{
    for (int i = 0; i < n; i++)
    {
        cin.ignore();
        cout << "Worker " << i + 1 << ":\n";
        cout << "Surname: ";
        getline(cin, s[i].surname);
        cout << "Salary: ";
        cin >> s[i].salary;
        cout << "Sex(m/w): ";
        cin >> s[i].sex;
    }
}
//робітник з найбільшою зарплатою
void find(Worker* s, int n)
{
    int max = 0, imax = 0;
    cout << "The highest salary among men has: ";
    for (int i = 0; i < n; i++)
        if (s[i].sex == 'm' && s[i].salary > max) {
            max = s[i].salary; imax = i;
        }
 
    cout << s[imax].surname << "\n";
}
 
/// сортування по прізвищу
void sortData(Worker* s, int n)
{
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - i - 1; j++)
            if (s[j].surname > s[j + 1].surname)
                swap(s[j], s[j + 1]);
}
 
void printData(Worker* s, int n)
{
    cout << "SURNAME  SALARY       SEX:\n";
    for (int i = 0; i < n; i++)
        cout << setw(20) << left << s[i].surname << setw(10) << left << s[i].salary << " " << s[i].sex << "\n";
}
 
int main()
{
    int n;
    cout << "How many employees are in the company? "; cin >> n;
 
    Worker* s = new Worker[n];
 
    inputData(s, n);
    find(s, n);
    sortData(s, n);
    cout << "SORTED LIST:\n";
    printData(s, n);
 
    delete[] s;
    system("pause");
    return 0;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
09.02.2022, 15:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char ch;
string min_words, word;
size_t min_len;
while(file>>ch) {
  if (ch=='.') break;
  if (ch==',') {
    if (min_words.empty() || word.size()<min_len) {
        min_len=word.size();
        min_words = word;
    } else if (min_len==word.size()) 
        min_words += ", " + word;
     word.clear();
  } else
     word+=ch;
}
cout<<min_words<<endl;
0
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 46
09.02.2022, 15:36  [ТС]
Помоги пожалуйста, что еще нужно добавить чтобы считывалось из файла и работало правильно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
using namespace std;
int main() {
    char ch;
    string max_words, word;
    size_t min_len;
    while (file >> ch) {
        if (ch == '.') break;
        if (ch == ',') {
            if (max_words.empty() || word.size() < min_len) {
                max_len = word.size();
                max_words = word;
            }
            else if (min_len == word.size())
                max_words += ", " + word;
            word.clear();
        }
        else
            word += ch;
    }
    cout << max_words << endl;
}
Добавлено через 1 минуту
Kuzia domovenok,
Помоги пожалуйста, что еще нужно добавить чтобы считывалось из файла и работало правильно
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
09.02.2022, 17:29
Лучший ответ Сообщение было отмечено Rabbit2 как решение

Решение

А ты вообще что ли работу с файлами не изучал? Регистрация 2 мес. назад.
Что ж ты делал 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
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream file("input.txt");
char ch;
string min_words, word;
size_t min_len;
while(file>>ch) {
  if (ch==',' || ch=='.') {
    if (min_words.empty() || word.size()<min_len) {
        min_len=word.size();
        min_words = word;
    } else if (min_len==word.size()) 
        min_words += ", " + word;
     word.clear();
  } else
     word+=ch;
  if (ch=='.') break;
}
cout<<min_words<<endl;
return 0;
}
1
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 46
10.02.2022, 06:06  [ТС]
Очень буду благодарен за помощь, никак не могу сделать

Изменить данную программу таким образом:

1. ввод массива объектов должен быть из текстового файла

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
//Известны данные о работниках фирмы (фамилия, зарплата и пол)
//Определить фамилию мужчины с самой большой зарплатой (считать, что он единственный).
//Посортировать данные в алфавитном порядке по фамилии и вывести на экран.
 
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
 
struct Worker
{
string surname;
int salary;
char sex;
};
 
void inputData(Worker* s, int n)
{
for (int i = 0; i < n; i++)
{
cin.ignore();
cout << "Worker " << i + 1 << ":\n";
cout << "Surname: ";
getline(cin, s[i].surname);
cout << "Salary: ";
cin >> s[i].salary;
cout << "Sex(m/w): ";
cin >> s[i].sex;
}
}
//робітник з найбільшою зарплатою
void find(Worker* s, int n)
{
int max = 0, imax = 0;
cout << "The highest salary among men has: ";
for (int i = 0; i < n; i++)
if (s[i].sex == 'm' && s[i].salary > max) {
max = s[i].salary; imax = i;
}
 
cout << s[imax].surname << "\n";
}
 
/// сортування по прізвищу
void sortData(Worker* s, int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - i - 1; j++)
if (s[j].surname > s[j + 1].surname)
swap(s[j], s[j + 1]);
}
 
void printData(Worker* s, int n)
{
cout << "SURNAME SALARY SEX:\n";
for (int i = 0; i < n; i++)
cout << setw(20) << left << s[i].surname << setw(10) << left << s[i].salary << " " << s[i].sex << "\n";
}
 
int main()
{
int n;
cout << "How many employees are in the company? "; cin >> n;
 
Worker* s = new Worker[n];
 
inputData(s, n);
find(s, n);
sortData(s, n);
cout << "SORTED LIST:\n";
printData(s, n);
 
delete[] s;
system("pause");
return 0;
}
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
10.02.2022, 07:10
Почему это вызывает трудности?
Ввод из файла (объект класса ifstream)
не отличается от ввода с консоли (cin - экземпляр класс istream).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void inputData(Worker* s, int n)
{
   ifstream fin("file.txt");
   if(fin)
   {
       for (int i = 0; i < n; i++)
      {
          getline(fin, s[i].surname);
          fin >> s[i].salary;
          fin >> s[i].sex;
          fin.get(); // пропуск '\n' или fin.ignore();
      }
      fin.close();
   }
}
Кстати, в Вашем варианте
Цитата Сообщение от Rabbit2 Посмотреть сообщение
for (int i = 0; i < n; i++)
{
cin.ignore();
Вы первую строку читали без первого символа.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
10.02.2022, 11:27
Цитата Сообщение от zss Посмотреть сообщение
Вы первую строку читали без первого символа
нет. после ввода cin >> n в потоке остался символ \n

другое дело что если только фамилия getline не очень то и нужен
1
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 46
10.02.2022, 13:25  [ТС]
Очень буду благодарен за помощь, никак не могу сделать

Изменить данную программу таким образом:

1. ввод массива объектов должен быть из текстового файла

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
//Известны данные о работниках фирмы (фамилия, зарплата и пол)
//Определить фамилию мужчины с самой большой зарплатой (считать, что он единственный).
//Посортировать данные в алфавитном порядке по фамилии и вывести на экран.
 
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
 
struct Worker
{
string surname;
int salary;
char sex;
};
 
void inputData(Worker* s, int n)
{
for (int i = 0; i < n; i++)
{
cin.ignore();
cout << "Worker " << i + 1 << ":\n";
cout << "Surname: ";
getline(cin, s[i].surname);
cout << "Salary: ";
cin >> s[i].salary;
cout << "Sex(m/w): ";
cin >> s[i].sex;
}
}
//робітник з найбільшою зарплатою
void find(Worker* s, int n)
{
int max = 0, imax = 0;
cout << "The highest salary among men has: ";
for (int i = 0; i < n; i++)
if (s[i].sex == 'm' && s[i].salary > max) {
max = s[i].salary; imax = i;
}
 
cout << s[imax].surname << "\n";
}
 
/// сортування по прізвищу
void sortData(Worker* s, int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - i - 1; j++)
if (s[j].surname > s[j + 1].surname)
swap(s[j], s[j + 1]);
}
 
void printData(Worker* s, int n)
{
cout << "SURNAME SALARY SEX:\n";
for (int i = 0; i < n; i++)
cout << setw(20) << left << s[i].surname << setw(10) << left << s[i].salary << " " << s[i].sex << "\n";
}
 
int main()
{
int n;
cout << "How many employees are in the company? "; cin >> n;
 
Worker* s = new Worker[n];
 
inputData(s, n);
find(s, n);
sortData(s, n);
cout << "SORTED LIST:\n";
printData(s, n);
 
delete[] s;
system("pause");
return 0;
}
0
168 / 73 / 33
Регистрация: 13.04.2019
Сообщений: 370
10.02.2022, 22:16
Добавить ввод и вывод из текстового файла готовой задачи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2022, 22:16
Помогаю со студенческими работами здесь

Найти фамилию и имя работника с самой большой платой за день
Я не могу найти формулу, для которой стоит у меня задание. &quot;Фамилия и им'я работника с самой большой платой за день&quot; Какая формула...

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

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

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

Определить фамилию мужчины, имеющего самую большую зарплату
Составить программу, использующую массив записей.Организовать ввод информации с клавиатуры, вывод всей информации на экран в форме таблицы...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru