Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 8
1

Написать программу, подсчитывающую количество мужчин и женщин с высшим, средним и средне специальным образованием

28.08.2012, 22:04. Показов 1832. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток
Есть задача на работу с массивом структур и его сортировку: Написать программу, которая для любого набора записей, содержащих данные о людях, работающих на предприятии, подсчитывала количество мужчин и женщин, имеющих высшее, среднее и средне специальное образование.

В результате должно выводиться:
1. Количество мужчин с высшим образованием;
2. Количество мужчин со средним образованием;
3. Количество мужчин со средне специальным образованием;

1. Количество женщин с высшим образованием;
2. Количество женщин со средним образованием;
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
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
#include<stdlib.h>
#include<string.h>
typedef struct data
{
    char surname[30];
    char name[30];
    char education[30];
    char sex[30];
}staff;
 
//Объявление функций сравнения для каждого поля структуры//
int surname_cmp(const void *a, const void *b) 
{
    return strcmp(((staff*)a)->surname, ((staff*)b)->surname);
}
 
int name_cmp(const void *a, const void *b) 
{
    return strcmp(((staff*)a)->name, ((staff*)b)->name);
}
 
int education_cmp(const void *a, const void *b) 
{
    return strcmp(((staff*)a)->education, ((staff*)b)->education);
}
 
int sex_cmp(const void *a, const void *b) 
{
    return strcmp(((staff*)a)->sex, ((staff*)b)->sex);
}
 
//Основная функция//
void _tmain(int argc, _TCHAR* argv[])
{
    int const size = 4;
    struct data staff[size];
 
    for(int i = 0; i < size; i++)
    {
        printf("Enter surname: ");
        scanf("%s",&staff[i].surname);
        
        printf("Enter name: ");
        scanf("%s",&staff[i].name);
 
        printf("Enter education: ");
        scanf("%s",&staff[i].education);
 
        printf("Enter sex: ");
        scanf("%s",&staff[i].sex);
 
        printf("\n");
 
    }
 
    //Сортировка по полю surname//
    qsort(staff, 4, sizeof(data), surname_cmp);
 
    //Вывод отсортированного массива//
    printf("Sort by surname:\n");
    for(int i = 0; i < size; i++)
    {
        printf("Sort: %s\t%s\t%s\t%s\n", staff[i].surname, staff[i].name, staff[i].education, staff[i].sex);
    }
 
    printf("\n");
 
    //Сортировка по полю name//
    qsort(staff, 4, sizeof(data), name_cmp);
    //Вывод//
    printf("Sort by name:\n");
    for(int i = 0; i < size; i++)
    {
        printf("Sort: %s\t%s\t%s\t%s\n", staff[i].surname, staff[i].name, staff[i].education, staff[i].sex);
    }
 
    printf("\n");
 
    //Сортировка по полю education//
    qsort(staff, 4, sizeof(data), education_cmp);
    //Вывод//
    printf("Sort by education:\n");
    for(int i = 0; i < size; i++)
    {
        printf("Sort: %s\t%s\t%s\t%s\n", staff[i].surname, staff[i].name, staff[i].education, staff[i].sex);
    }
 
    printf("\n");
    //Сортировка по полю sex//
    qsort(staff, 4, sizeof(data), sex_cmp);
    //Вывод//
    printf("Sort by sex:\n");
    for(int i = 0; i < size; i++)
    {
        printf("Sort: %s\t%s\t%s\t%s\n", staff[i].surname, staff[i].name, staff[i].education, staff[i].sex);
    }
 
    printf("\n");
    //Обьявление переменных-счётчиков//
    int counthig = 0;
    int countmid = 0;
    int countsp = 0;
    //Сравнение поля education и подсчёт людей с высшим образованием//
    for(int i = 0; i < size; i++)
    {
        if(strcmp(staff[i].education, "highest"))
        {
            counthig++;
        }
    
    }
 
    //Сравнение поля education и подсчёт людей со средним образованием//
    for(int i = 0; i < size; i++)
    {
 
        if(strcmp(staff[i].education, "middle"))
        {
            countmid++;
        }
 
    }
 
    //Сравнение поля education и подсчёт людей со среднеспециальным образованием//
    for(int i = 0; i < size; i++)
    {
 
        if(strcmp(staff[i].education, "special"))
        {
            countsp++;
        }
 
    }
    //Вывод счётчиков//
    printf("With highest education: %d\n", counthig);
    printf("With middle education: %d\n", countmid);
    printf("With special education: %d\n", countsp);
}
Буду рада любому совету
Большое спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2012, 22:04
Ответы с готовыми решениями:

Сколькими способами можно выбрать комитет,включающий 6 мужчин и 8 женщин из группы, состоящий из 12 мужчин и 20 женщин?
Сколькими способами можно выбрать комитет,включающий 6 мужчин и 8 женщин из группы, состоящий из 12...

Жюри из 4 женщин и 5 мужчин должно быть выбрано из списка в 8 женщин и 11 мужчин
Жюри из 4 женщин и 5 мужчин должно быть выбрано из списка в 8 женщин и 11 мужчин. Сколько можно...

Определить имена людей с высшим образованием
Помогите решить задачу........нечего не могу придумать как ее сделать......... Описать переменную...

Данные о сотрудниках магазина с высшим образованием
Вывести все данные о сотрудниках магазина с высшим образованием и сотрудницах с высшим и средним...

4
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374
28.08.2012, 22:45 2
C
1
2
3
4
5
6
7
8
9
for(int i = 0; i < size; i++)
    {
 
        if(!strcmp(staff[i].education, "middle"))
        {
            countmid++;
        }
 
    }
Аналогично и два других условия
0
4 / 4 / 0
Регистрация: 24.10.2011
Сообщений: 84
28.08.2012, 22:49 3
Блин, точно... Я забыл, что
Значение Результат сравнения строк
Меньше нуля str1 меньше str2
Нуль str1 равен str2
Больше нуля str1 больше str2
Щас сидел тоже ковырял... Хотел же еще глянуть про strcmp()... Нет, на себя понадеялся
0
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
29.08.2012, 08:57 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<stdlib.h>
#include<string.h>
typedef struct data
{
    char surname[30];
    char name[30];
    char education[30];
    char sex[30];
}staff;
 
//Объявление функций сравнения для каждого поля структуры//
int surname_cmp(const void *a, const void *b) 
{
    return strcmp(((staff*)a)->surname, ((staff*)b)->surname);
}
 
int name_cmp(const void *a, const void *b) 
{
    return strcmp(((staff*)a)->name, ((staff*)b)->name);
}
 
int education_cmp(const void *a, const void *b) 
{
    return strcmp(((staff*)a)->education, ((staff*)b)->education);
}
 
int sex_cmp(const void *a, const void *b) 
{
    return strcmp(((staff*)a)->sex, ((staff*)b)->sex);
}
 
//Основная функция//
void _tmain(int argc, _TCHAR* argv[])
{
    int const size = 4;
    struct data staff[size];
 
    for(int i = 0; i < size; i++)
    {
        printf("Enter surname: ");
        scanf("%s",&staff[i].surname);
        
        printf("Enter name: ");
        scanf("%s",&staff[i].name);
 
        printf("Enter education: ");
        scanf("%s",&staff[i].education);
 
        printf("Enter sex: ");
        scanf("%s",&staff[i].sex);
 
        printf("\n");
 
    }
 
    //Сортировка по полю surname//
    qsort(staff, 4, sizeof(data), surname_cmp);
 
    //Вывод отсортированного массива//
    printf("Sort by surname:\n");
    for(int i = 0; i < size; i++)
    {
        printf("Sort: %s\t%s\t%s\t%s\n", staff[i].surname, staff[i].name, staff[i].education, staff[i].sex);
    }
 
    printf("\n");
 
    //Сортировка по полю name//
    qsort(staff, 4, sizeof(data), name_cmp);
    //Вывод//
    printf("Sort by name:\n");
    for(int i = 0; i < size; i++)
    {
        printf("Sort: %s\t%s\t%s\t%s\n", staff[i].surname, staff[i].name, staff[i].education, staff[i].sex);
    }
 
    printf("\n");
 
    //Сортировка по полю education//
    qsort(staff, 4, sizeof(data), education_cmp);
    //Вывод//
    printf("Sort by education:\n");
    for(int i = 0; i < size; i++)
    {
        printf("Sort: %s\t%s\t%s\t%s\n", staff[i].surname, staff[i].name, staff[i].education, staff[i].sex);
    }
 
    printf("\n");
    //Сортировка по полю sex//
    qsort(staff, 4, sizeof(data), sex_cmp);
    //Вывод//
    printf("Sort by sex:\n");
    for(int i = 0; i < size; i++)
    {
        printf("Sort: %s\t%s\t%s\t%s\n", staff[i].surname, staff[i].name, staff[i].education, staff[i].sex);
    }
 
    printf("\n");
 
    //Сравнение поля education и подсчёт людей с высшим образованием//
 
    char* psex[] = { "male", "female" };
    for (int q = 0; q < 2; q++)
    {
        //Обьявление переменных-счётчиков//
        int counthig = 0;
        int countmid = 0;
        int countsp = 0;
        
        for(int i = 0; i < size; i++)
        {
            if(!strcmp(staff[i].education, "highest") && 
               !strcmp(staff[i].sex,psex[q]))
            {
                counthig++;
            }
        }
 
        //Сравнение поля education и подсчёт людей со средним образованием//
        for(int i = 0; i < size; i++)
        {
            if(!strcmp(staff[i].education, "middle") &&
               !strcmp(staff[i].sex, psex[q]))
            {
                countmid++;
            }
        }
 
        //Сравнение поля education и подсчёт людей со среднеспециальным образованием//
        for(int i = 0; i < size; i++)
        {
            if(!strcmp(staff[i].education, "special") && 
               !strcmp(staff[i].sex, psex[q]))
            {
                countsp++;
            }
        }
 
        //Вывод счётчиков//
        printf("%s with highest education: %d\n", psex[q], counthig);
        printf("%s with middle education: %d\n", psex[q], countmid);
        printf("%s with special education: %d\n\n", psex[q], countsp);
    }
}
0
0 / 0 / 0
Регистрация: 02.06.2012
Сообщений: 8
29.08.2012, 22:54  [ТС] 5
Ещё раз большое спасибо
0
29.08.2012, 22:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2012, 22:54
Помогаю со студенческими работами здесь

Выдать список фамилий сотрудников с высшим образованием
Объект – анкета сотрудника. Известны фамилия, имя, отче-ство, отдел, должность, пол, образование....

Как вывести количество мужчин и женщин из dataGrid в форме?
как вывести количество мужчина и женщина из dataGrid в форме на C# база данных SQL

Посчитать количество мужчин и женщин на каждой должности в одном запросе
Есть 2 таблицы, таблица Контакти и таблица Робота. в таблице контакты есть поле роботаИД и...

Найти, в каком возрасте наибольшее количество мужчин и женщин городского насиления
Запрос. Мне нужно найти в каком возрасте наибольшее количество мужчин и женщин городского...


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

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