Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Пегас
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
1

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

29.04.2015, 20:43. Просмотров 307. Ответов 5
Метки нет (Все метки)

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
#include <iostream>
#include <locale.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
 
 
using namespace std;
// Информация о сотрудниках предприятия содержит:
// -Ф.И.О
// - номер отдела
// - дату рождения.
// Вычислить средний возраст сотрудников по отделам.
 
 
struct Sotr
{
    char name[40];
    int numb_otd;
    int date;
};
 
void Pr_Sotr(Sotr *m, int n)
 {
     cout <<" \nFIO \tNomer otdela \tVozrast "<< endl;
     for (int i=0; i<n; i++)
     {
       cout <<m[i].name << "   \t"<<m[i].numb_otd << "\t\t"<<m[i].date << endl;
     }
 }
void Vn_Sotr(Sotr *m, int n)
 {
     cin.ignore();
      for (int i=0; i<n; i++)
      {
           cout << "FIO"<<"["<<i+1<<"]: ";
           cin.getline(m[i].name,40);
           cout << "Numb otdela: ";
           cin >> m[i].numb_otd;
           cin.ignore();
           cout << "Vozrast: ";
           cin >> m[i].date; cin.ignore();
      }
 }
 
void Sr_Sotr(Sotr *m, int n)
{
    int Sr_Vozrf = 0,Sr_Vozrs = 0,Sr_Vozrt = 0,Sr_Vozrfo = 0,Sr_Vozrfi = 0;
    int kolf = 0,kols = 0,kolt = 0,kolfo = 0,kolfi = 0;
    for (int i=0; i<n; i++)
    {
        if (m[i].numb_otd == 1){
            kolf++;
            Sr_Vozrf = (Sr_Vozrf + m[i].date)/kolf;
        }
        else
            if (m[i].numb_otd == 2){
            kols++;
            Sr_Vozrs = (Sr_Vozrs + m[i].date)/kols;
        }
        else
            if (m[i].numb_otd == 3){
            kolt++;
            Sr_Vozrt = (Sr_Vozrt + m[i].date)/kolt;
        }
        else
            if (m[i].numb_otd == 4){
            kolfo++;
            Sr_Vozrfo = (Sr_Vozrfo + m[i].date)/kolfo;
        }
        else
            if (m[i].numb_otd == 5){
            kolfi++;
            Sr_Vozrfi = (Sr_Vozrfi + m[i].date)/kolfi;
        }
    }
    cout << "Sredniy vozrast sotrudnikov 1 otdela = " << Sr_Vozrf << endl;
    cout << "Sredniy vozrast sotrudnikov 2 otdela = " << Sr_Vozrs << endl;
    cout << "Sredniy vozrast sotrudnikov 3 otdela = " << Sr_Vozrt << endl;
    cout << "Sredniy vozrast sotrudnikov 4 otdela = " << Sr_Vozrfo << endl;
    cout << "Sredniy vozrast sotrudnikov 5 otdela = " << Sr_Vozrfi << endl;
}
 
int main()
{
    system ("cls");
    int n;
    cout << "Vvedite kol sotrudnikov: ";
    cin >> n;
     Sotr *m = new Sotr[n];
     Vn_Sotr(m,n);
     Pr_Sotr(m,n);
     Sr_Sotr(m,n);
     delete[]m;
     system("PAUSE");
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2015, 20:43
Ответы с готовыми решениями:

Почему не работает цикл while для заполнения и do while для вывода массива?
//--------------------------------------------------------------------------- ...

Преобразовать массив цифр в строку для вывода на cout<<
Реализую класс длинных чисел (только+). Числа представляю в виде массиве, где...

Цикл для вывода min чисел в одномерный массив
Цикл для вывода min чисел в одномерный массив

Программа на цикл for (как добиться вывода на экран?)
Программа на цикл for(помогите добиться вывода на экран), повторять в цикле...

Фильтрация сотрудников по отделам
Имеются , два текстовых файла. В одном названия отделов, во втором список...

5
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
29.04.2015, 20:59 2
Сначала найди множество номеров отделов, затем в цикле проходишь по множеству и выводишь те записи, которые соответствуют текущему номеру.
Или отсортируй массив по номеру и при выводе, когда номер меняется, выводишь заголовок следующего отдела.
0
Пегас
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
30.04.2015, 18:14  [ТС] 3
nmcf, не выполняется до конца, в чем ошибка?
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
#include <iostream>
#include <locale.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <vector>
 
 
using namespace std;
// Информация о сотрудниках предприятия содержит:
// -Ф.И.О
// - номер отдела
// - дату рождения.
// Вычислить средний возраст сотрудников по отделам.
 
 
struct Sotr
{
    char name[40];
    int numb_otd;
    int date;
};
 
void Pr_Sotr(Sotr *m, int n)
 {
     cout <<" \nFIO \tNomer otdela \tVozrast "<< endl;
     for (int i=0; i<n; i++)
     {
       cout <<m[i].name << "   \t"<<m[i].numb_otd << "\t\t"<<m[i].date << endl;
     }
 }
void Vn_Sotr(Sotr *m, int n)
 {
     cin.ignore();
      for (int i=0; i<n; i++)
      {
           cout << "FIO"<<"["<<i+1<<"]: ";
           cin.getline(m[i].name,40);
           cout << "Numb otdela: ";
           cin >> m[i].numb_otd;
           cin.ignore();
           cout << "Vozrast: ";
           cin >> m[i].date; cin.ignore();
      }
 }
 
void Sr_Sotr(Sotr *m, int n)
{
vector<int> numOtdel;
    spawn:
    for(int i = 0; i <= n; i++){
        for(int j = 0; j <= numOtdel.size(); j++){
            if(numOtdel[j] == m[i].numb_otd){
                goto spawn;
            }
        }
        numOtdel.push_back(m[i].numb_otd);
    }
    for(int i = 0; i <= numOtdel.size(); i++){
        int count = 0, age = 0, sr =0;
        for(int j = 0; j <= n; j++){
            if(numOtdel[j] == m[i].numb_otd){
                age += m[i].date;
                count++;
            }
        }
        sr = age/count;
        cout << "Sredniy vozrast sotrudnikov  otdela = " << m[i].numb_otd << sr << endl;
    }
 
}
 
int main()
{
    system ("cls");
    int n;
    cout << "Vvedite kol sotrudnikov: ";
    cin >> n;
     Sotr *m = new Sotr[n];
     Vn_Sotr(m,n);
     Pr_Sotr(m,n);
     Sr_Sotr(m,n);
     delete[]m;
     system("PAUSE");
}
Добавлено через 3 часа 45 минут
Есть у кого какие идеи?
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
30.04.2015, 18:22 4
Цитата Сообщение от Пегас Посмотреть сообщение
for(int j = 0; j <= n; j++){
Равно н убрать - выход за массив (это во всех циклах)

Цитата Сообщение от Пегас Посмотреть сообщение
sr = age/count;
Велика вероятность деления на ноль
0
Пегас
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
01.05.2015, 10:50  [ТС] 5
_Valera_, да, действительно выход за пределы, результат не сходится с условием,что-то не так сделал

Добавлено через 3 часа 43 минуты
кто может подсказать как поправить цикл по вычислению среднего возраста по отделам?

Добавлено через 11 часов 47 минут
nmcf,
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 <locale.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <vector>
 
 
using namespace std;
// Информация о сотрудниках предприятия содержит:
// -Ф.И.О
// - номер отдела
// - дату рождения.
// Вычислить средний возраст сотрудников по отделам.
 
 
struct Sotr
{
    char name[40];
    int numb_otd;
    int date;
};
 
void Pr_Sotr(Sotr *m, int n)
 {
     cout <<" \nFIO \tNomer otdela \tVozrast "<< endl;
     for (int i=0; i<n; i++)
     {
       cout <<m[i].name << "   \t"<<m[i].numb_otd << "\t\t"<<m[i].date << endl;
     }
 }
void Vn_Sotr(Sotr *m, int n)
 {
     cin.ignore();
      for (int i=0; i<n; i++)
      {
           cout << "FIO"<<"["<<i+1<<"]: ";
           cin.getline(m[i].name,40);
           cout << "Numb otdela: ";
           cin >> m[i].numb_otd;
           cin.ignore();
           cout << "Vozrast: ";
           cin >> m[i].date; cin.ignore();
      }
 }
 
void Sr_Sotr(Sotr *m, int n)
{
vector<int> numOtdel;
    spawn:
    for(int i = 0; i < n; i++){
        for(int j = 0; j < numOtdel.size(); j++){
            if(numOtdel[j] == m[i].numb_otd){
                goto spawn;
            }
        }
        numOtdel.push_back(m[i].numb_otd);
    }
    for(int i = 0; i < numOtdel.size(); i++){
        int count = 0 , age = 0, sr =0;
        for(int j = 0; j < n; j++){
            if(numOtdel[j] == m[i].numb_otd){
                count++;
                age += m[i].date;
 
            }
        }
        sr = age/count;
        cout << "Sredniy vozrast sotrudnikov  otdela" << "[" << m[i].numb_otd << "]-" << sr << endl;
    }
 
}
 
int main()
{
    system ("cls");
    int n;
    cout << "Vvedite kol sotrudnikov: ";
    cin >> n;
     Sotr *m = new Sotr[n];
     Vn_Sotr(m,n);
     Pr_Sotr(m,n);
     Sr_Sotr(m,n);
     delete[]m;
     system("PAUSE");
}
Вроде все правильно, но не считает средний возраст, когда много сотрудников с одинаковым номером отдела?
0
Пегас
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
04.05.2015, 12:42  [ТС] 6
Как преобразовать цикл, чтобы при повторе записей высчитывался средний возраст отдела?
,
0
04.05.2015, 12:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2015, 12:42

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

Выведите список всех сотрудников и отделов, отсортированный по отделам
Приветствую всех. Возник вопрос. Как сделать имитацию связи много-ко-многим?...

Вывести список сотрудников по отделам в порядке убывания стажа
Информация о сотрудниках предприятия содержит: - Ф.И.О.; - номер отдела;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru