Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
1

Вывести список сотрудников по убыванию вычисляемого поля количества полных лет

18.03.2016, 19:54. Показов 1914. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
С клавиатуры вводится следующая информация: фамилие работника, год рождения, оклад, премия. Премия начисляется если оклад<1000 грн, 5% от оклада, от 1000 до 2000, 10% от оклада, от 2000 до 3000, 15% от оклада, от 3000 - 20% от оклада. Вывести список сотрудников с общей суммой (оклад+премия)
Вывести список по убыванию вычисляемого поля количества полных лет, с годом рождения.
Премия начисляется если оклад<1000 грн, 5% от оклада, от 1000 до 2000, 10% от оклада, от 2000 до 3000, 15% от оклада, от 3000 - 20% от оклада. - можете помочь реализовать это условие, я формулу не представляю как она должна выглядеть.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2016, 19:54
Ответы с готовыми решениями:

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

Вывести: список сотрудников, возраст которых не менее K лет и не превышает L лет
20.Дан список N сотрудников с указанием фамилии, точной даты рождения, стажа работы и заработной...

Вывести список сотрудников, проработавших на предприятии более 20 лет.
8. Информация о сотрудниках предприятия содержит ФИО, номер отдела, должность, дату начала работы....

Вывести список сотрудников, проработавших на предприятии более 20 лет
Задача. Информация о сотрудниках предприятия содержит ФИО, номер отдела, должность, дату начала...

15
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
19.03.2016, 10:41 2
vladis23,
Цитата Сообщение от vladis23 Посмотреть сообщение
можете помочь реализовать это условие, я формулу не представляю как она должна выглядеть.
Это без списка по убыванию... Список по убыванию вычисляемого поля количества полных лет, с годом рождения реализовать сами сможете?

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
#include <iostream>
#include <string>
#include <time.h>
class office
{
private:
    std :: string fam;
    int dd,mm,yy,voz;
    char zn;
    double oklad,premiya;
    time_t t;
    tm *tk;
 
public:
    void get()
    {
        std :: cout<<"Введите фамилию сотрудника: ";
        std :: cin>>fam;
        std :: cout<<"Введите год рождения сотрудника в формате(DD/MM/YY): ";
        std :: cin>>dd>>zn>>mm>>zn>>yy;
        std :: cout<<"Введите оклад сотрудника: ";
        std :: cin>>oklad;
        std :: cout<<"Введите премия сотрудника: ";
        std :: cin>>premiya;
    }
    void push()
    {
        for (int i=0;i<)
        std :: cout<<"\nФамили сотрудника: ";
        std :: cout<<fam;
        std :: cout<<"\nПолная сумма  сотрудника:(оклад + премиальные) ";
        std :: cout<<oklad;
        std :: cout<<"\nДата рождения: ";
        std :: cout<<dd<<"."<<mm<<"."<<yy;
        std :: cout<<"\nПолных лет: ";
        std :: cout<<voz;
    }
    void premiy()
    {
        if (oklad<1000)
        oklad=((oklad/100)*5)+premiya+oklad;
        else
        if (oklad>=1000 && oklad<2000)
        oklad=((oklad/100)*10)+premiya+oklad;
        else
        if (oklad>=2000 && oklad<3000)
        oklad=((oklad/100)*15)+oklad+premiya;
        else
        if (oklad>=3000)
        oklad=((oklad/100)*20)+premiya+oklad;
    }
    void vozrast()
    {
        time(&t);
        tk=localtime(&t);
        voz=(1900+tk->tm_year)-yy;
    }
    void sort()
    {
        //Здесь сортировка, зделаете сами...
    }
};
 
 
int main()
{
    int N;
    setlocale(LC_ALL,"Russian");
    std :: cout<<"Введите количество сотрудников: ";
    std :: cin>>N;
    office *sotr=new office[N];
 
    for (int i=0;i<N;i++){
    sotr[i].get();
    sotr[i].premiy();
    sotr[i].vozrast();}
    
    for (int i=0;i<N;i++)
    sotr[i].push();
 
    delete [] sotr;
    std :: cout<< std :: endl;
    
    system("pause");
    return 0;
}
1
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
20.03.2016, 01:11  [ТС] 3
это пузырьковая сортировка? думаю смогу
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
20.03.2016, 01:44 4
vladis23, Да,можно применить пузырьковую, дерзайте.
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
21.03.2016, 19:41 5
vladis23,
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
#include <iostream>
#include <string>
#include <time.h>
class office
{
private:
    std :: string fam;
    int dd,mm,yy;
    char zn;
    double oklad,premiya;
    time_t t;
    tm *tk;
 
public:
    int voz;
    void get()
    {
        std :: cout<<"Введите фамилию сотрудника: ";
        std :: cin>>fam;
        std :: cout<<"Введите год рождения сотрудника в формате(DD/MM/YY): ";
        std :: cin>>dd>>zn>>mm>>zn>>yy;
        std :: cout<<"Введите оклад сотрудника: ";
        std :: cin>>oklad;
        std :: cout<<"Введите премия сотрудника: ";
        std :: cin>>premiya;
    }
    void push()
    {
        std :: cout<<"\nФамили сотрудника: ";
        std :: cout<<fam;
        std :: cout<<"\nПолная сумма  сотрудника:(оклад + премиальные) ";
        std :: cout<<oklad;
        std :: cout<<"\nДата рождения: ";
        std :: cout<<dd<<"."<<mm<<"."<<yy;
        std :: cout<<"\nПолных лет: ";
        std :: cout<<voz;
    }
    void premiy()
    {
        if (oklad<1000)
        oklad=((oklad/100)*5)+premiya+oklad;
        else
        if (oklad>=1000 && oklad<2000)
        oklad=((oklad/100)*10)+premiya+oklad;
        else
        if (oklad>=2000 && oklad<3000)
        oklad=((oklad/100)*15)+oklad+premiya;
        else
        if (oklad>=3000)
        oklad=((oklad/100)*20)+premiya+oklad;
    }
    void vozrast()
    {
        time(&t);
        tk=localtime(&t);
        voz=(1900+tk->tm_year)-yy;
    }
   
};
 
 
int main()
{
    int N;
    setlocale(LC_ALL,"Russian");
    std :: cout<<"Введите количество сотрудников: ";
    std :: cin>>N;
    office *sotr=new office[N];
    office temp;
 
    for (int i=0;i<N;i++){
    sotr[i].get();
    sotr[i].premiy();
    sotr[i].vozrast();}
    
    
    for (int i=0;i<N;i++){
    for (int j=0;j<N;j++)
    if (sotr[i].voz<sotr[i+1].voz){
    temp=sotr[i+1];
    sotr[i+1]=sotr[i];
    sotr[i]=temp;}}
    
 
    for (int i=0;i<N;i++)
    sotr[i].push();
    
 
    delete [] sotr;
    std :: cout<< std :: endl;
    
    system("pause");
    return 0;
}
1
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
22.03.2016, 00:28  [ТС] 6
Вот я так намудрил код
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
#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
struct rabotnik
{
    char fam[15];
    int god,let;
float oklad,premia;
 
 
};
int main()
{  SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
int n;
rabotnik mas[10];
cout<<"Введите количество записей: "<<endl;
cin>>n;
for (int i=0;i<n;i++)
{
 
 
cin.get();
cout<<"Введите фамилию сотрудника: ";
        cin.getline(mas[i].fam,15);
        cout<<"Введите год рождения сотрудника: ";
        cin>>mas[i].god;
        cout<<"Введите оклад сотрудника: ";
        cin>>mas[i].oklad;
        cout<<"Введите премия сотрудника: ";
        cin>>mas[i].premia;
        cout<<endl;
}
for (int i=0;i<n;i++)
{
 
if (mas[i].oklad<1000)
        mas[i].oklad=((mas[i].oklad/100)*5)+mas[i].premia+mas[i].oklad;
        else
        if (mas[i].oklad>=1000 && mas[i].oklad<=2000)
        mas[i].oklad=((mas[i].oklad/100)*10)+mas[i].premia+mas[i].oklad;
        else
        if (mas[i].oklad>=2000 && mas[i].oklad<=3000)
        mas[i].oklad=((mas[i].oklad/100)*15)+mas[i].oklad+mas[i].premia;
        else
        if (mas[i].oklad>=3000)
        mas[i].oklad=((mas[i].oklad/100)*20)+mas[i].premia+mas[i].oklad;
}
cout<<"\t\t\tОклад+Премия"<<endl;
for (int i=0;i<n;i++)
{
 
           cout<<i+1<<"\t"<<mas[i].fam<<"\t  "<<mas[i].god<<"\t  "<<mas[i].oklad<<endl;
 
cout<<endl;
 
}
cout<<"Вывод неотсортированных полных лет"<<endl;
for (int i=0;i<n;i++)
{
    mas[i].let=2016-mas[i].god;
  cout<<i+1<<"\t"<<mas[i].fam<<"\t  "<<mas[i].god<<"\t  "<<mas[i].let<<endl;
}
 
 
 
 
 
 
 
cout<<"Отсортированный массив сортировкой выбором"<<endl;
for (int i=0;i<n;i++)
{
    int minValueIndex=i;
    for (int j=i+1;j<n;j++)
    {
        if (mas[j].let>mas[minValueIndex].let)
        {
            minValueIndex=j;
        }
    }
swap(mas[i].let,mas[minValueIndex].let);
}
for (int i=0;i<n;i++)
{
    cout<<i+1<<"\tВозраст отсортированных лет\t"<<"\t"<<mas[i].let<<endl;
}
system("pause");
return 0;
}
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
22.03.2016, 00:41 7
vladis23,
Цитата Сообщение от vladis23 Посмотреть сообщение
намудрил
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
22.03.2016, 20:33  [ТС] 8
Хотел как она будет в главной функции работать, и она кстати работает,но тут по любому мне надо функции для этой задачи

Добавлено через 18 часов 33 минуты
-ДоМоВоЙ-, можно сделать через функции структуры, а не через класс?

Добавлено через 46 минут
не могу сделать через функции, не могу понять как же вводить массив записей струтуры которая состоит из 10 элементов
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
22.03.2016, 20:36 9
Цитата Сообщение от vladis23 Посмотреть сообщение
-ДоМоВоЙ-, можно сделать через функции структуры, а не через класс?
Срочно надо? классом же на много удобнее...
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
22.03.2016, 20:57  [ТС] 10
-ДоМоВоЙ-, да, я знаю класс удобный но я еще до классов не дошел только в Delphi использую классы

Добавлено через 10 минут
-ДоМоВоЙ-, можешь помочь через функции к структуре, я эту тему не сильно понял
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
22.03.2016, 21:16 11
Цитата Сообщение от vladis23 Посмотреть сообщение
-ДоМоВоЙ-, можешь помочь через функции к структуре, я эту тему не сильно понял
Вот пример работы...
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
#include <iostream>
 
struct man 
{
    int a;
};
 
void f1(struct man parm);
 
int main(void)
{
    int b;
    struct man arg; 
    std :: cin>>b;
    arg.a = b;
    f1(arg);
 
    system("pause");
    return 0;
}
 
void f1(struct man parm) 
{
    std :: cout<<parm.a;
}
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
22.03.2016, 21:27  [ТС] 12
а например массив так можно сделать?

Добавлено через 3 минуты
вот я пытался написать, чтоб вводить количество записей структуры
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
#include <iostream>
#include <cstdlib>
struct office
{
    char fam[15];
    int god,voz;
        double oklad,premiya;
 
};
void get();
void push();
void premiy(office mas[10]);
void vozrast();
    void get()
    {office mas[10];
        std::cin.get();
       std::cout<<"Введите фамилию сотрудника: ";
       std::cin.getline(mas->fam,15);
        std :: cout<<"Введите год рождения сотрудника: ";
        std::cin>>mas->god;
        std :: cout<<"Введите оклад сотрудника: ";
        std :: cin>>mas->oklad;
        std :: cout<<"Введите премия сотрудника: ";
        std :: cin>>mas->premiya;
    }
    void push()
    {
        office mas[10];
        std :: cout<<"\nФамили сотрудника: ";
        std :: cout<<mas->fam;
        std :: cout<<"\nПолная сумма  сотрудника:(оклад + премиальные) ";
        std :: cout<<mas->oklad;
        std :: cout<<"\nДата рождения: ";
        std :: cout<<mas->god<<"год"<<std::endl;
        std :: cout<<"\nПолных лет: ";
        std :: cout<<mas->voz;
    }
    void premiy(office mas[10])
    {
 
        if (mas->oklad<1000)
        mas->oklad=((mas->oklad/100)*5)+mas->premiya+mas->oklad;
        else
        if (mas->oklad>=1000 && mas->oklad<2000)
        mas->oklad=((mas->oklad/100)*10)+mas->premiya+mas->oklad;
        else
        if (mas->oklad>=2000 && mas->oklad<3000)
        mas->oklad=((mas->oklad/100)*15)+mas->oklad+mas->premiya;
        else
        if (mas->oklad>=3000)
        mas->oklad=((mas->oklad/100)*20)+mas->premiya+mas->oklad;
    }
    void vozrast(office mas[10])
    {
 
            mas->voz=2016-mas->god;
    }
 
 
 
 
int main()
{
    int N;
   office sotr[10];
    office temp;
    setlocale(LC_ALL,"Russian");
    std :: cout<<"Введите количество сотрудников: ";
    std :: cin>>N;
 
 
    for (int i=0;i<N;i++){
    get(sotr[10]);
    premiy(sotr[10]);
    vozrast(sotr[10]);}
 
 
    for (int i=0;i<N;i++){
    for (int j=0;j<N;j++)
    if (sotr[i].voz<sotr[i+1].voz){
    temp=sotr[i+1];
    sotr[i+1]=sotr[i];
    sotr[i]=temp;}}
 
 
    for (int i=0;i<N;i++)
    push();
 
 
        std :: cout<< std :: endl;
 
    system("pause");
    return 0;
}
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
22.03.2016, 21:39 13
Цитата Сообщение от vladis23 Посмотреть сообщение
а например массив так можно сделать?
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
#include <iostream>
 
struct man 
{
    char a[10];
    
};
 
void f1(struct man parm);
 
int main(void)
{
    struct man arg[3]; 
    for (int i=0;i<3;i++){
    std :: cin>>arg[i].a;}
 
    for (int i=0;i<3;i++)
    f1(arg[i]);
 
    system("pause");
    return 0;
}
 
void f1(struct man parm) 
{
    std :: cout<<parm.a<<std :: endl;
}
Добавлено через 6 минут
Цитата Сообщение от vladis23 Посмотреть сообщение
office sotr[10];
нужен указатель
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
22.03.2016, 21:44  [ТС] 14
А пример с указателем можешь показать?
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
22.03.2016, 21:53 15
Цитата Сообщение от vladis23 Посмотреть сообщение
А пример с указателем можешь показать?
C++
1
office *sotr[10];
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
22.03.2016, 22:02  [ТС] 16
можно сразу в параметр функции ввести?
0
22.03.2016, 22:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2016, 22:02
Помогаю со студенческими работами здесь

Вывести список сотрудников, проработавших на предприятии более 20 лет
Нужно вывести список сотрудников, проработавших на предприятии более 20 лет. У меня прерывается на...

Структуры. Вывести список сотрудников с рабочим стажем превышающим 20 лет
Всем привет. Помогите, пожалуйста, найти ошибку в коде. Задание: Описать структуру, включающую...

Вывести по алфавиту список сотрудников старше 35 лет и их среднюю заработную плату
Определить тип данных запись, имеющих поля фамилия, пол, зарплата, дата рождения. Определить массив...

Расчет количества полных лет в moment.js
Здравствуйте. Тестирую moment.js на количество глюков в библиотеке: let pairs = , //13 ,...

Вывести фамилии всех сотрудников, чей стаж работы не менее 3-х лет и возраст не более 25 лет
DELPHI HEILP Народ, спасайте, я тупой , как валенок в программировании , но надо сделать такую...

Вычисление точного количества полных лет на момент оказания услуги
Подскажите, пожалуйста, как сделать так, чтобы в &quot;Посещениях&quot; автоматически из &quot;даты оказания...


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

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