Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Op1um
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 9
#1

Составить списки трех груп, равномерно распределив студентов по успеваемости в каждую из груп - C++

13.01.2010, 17:03. Просмотров 559. Ответов 6
Метки нет (Все метки)

Кто поможет написать алгоритм?Очень надо!
Задан список из N абитуриентов, поступивших в вуз (в алфавитном порядке) для каждого студента задан средний бал, вступительных экзаменов. Составить списки трех груп, равномерно распределив студентов по успеваемости в каждую из груп!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2010, 17:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Составить списки трех груп, равномерно распределив студентов по успеваемости в каждую из груп (C++):

Составить файл об информаций студентов в группе. Найти самый высокий и самый низкий уровень успеваемости студентов в группе - C++
блииин ничего непонела !!на языки С нужно написать программу на тему ввод и ввывод файловых возможности! задание - нужно составить файл об...

Программа выводит неверный ответ (дан массив структур, содержащий сведения об успеваемости студентов - вывести список неуспевающих студентов) - C++
Задача: Дан массив структур, содержащий сведения об успеваемости по информатике группы из 25 студентов. Структура содержит следующие...

Радио Груп - Delphi
два edit-а, в них вводятся цифры на RadioGroup нужно выбрать 1 из 3х пунктов сложить умножить вычесть после нажатия кнопки...

Помогите с груп бай! - SQL Server
Всем доброго времени суток! Давно не занималась SQL, застряла с, в общем, несложным запросом. Суть в том, чтоб выделить, скажем, из базы...

Задача бега на дистанцию 100м 2 груп универа - MS Excel
Помогите решить задачю а то задали сделать а я в экселе чесно вопще ничего не понимаю.буду очень блогадарен. 1)Найти среднее значение,...

Читать m груп по n штук в групе вещественвених чисел в фиксированом формате - Turbo Pascal
Читать m груп(2≤m≤10) по n штук(4≤n≤50) в групе вещественвених чисел в фиксированом формате(k позиций (6≤k≤15) отводится под все число і l...

6
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
13.01.2010, 17:18 #2
смотря какой критерий равномерного распределения. если там один отличник, а остальные троешники, то о какой равномерности может идти речь?

одно ясно, надо отсортировать студентов по успеваемости и начиная с максимального балла распихивать их по группам. то есть если три чела с равными балами то они в разные группы, а вот если меньше трёх, то тут вопрос что прозвучал выше
1
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,819
13.01.2010, 17:44 #3
Цитата Сообщение от TanT Посмотреть сообщение
одно ясно, надо отсортировать студентов по успеваемости и начиная с максимального балла распихивать их по группам. то есть если три чела с равными балами то они в разные группы, а вот если меньше трёх, то тут вопрос что прозвучал выше
А я бы не мудрствуя лукаво отсортировал список, а потом тупо по одному в каждую из трёх групп дёргал. Ну а там уже, как сложится...
1
Op1um
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 9
13.01.2010, 18:24  [ТС] #4
мне хотя бы увидеть как примерно примерно будет выглядеть алгоритм
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,819
14.01.2010, 15:25 #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
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
    
/*
    Задан список из N абитуриентов, поступивших в вуз (в алфавитном порядке) 
    для каждого студента задан средний бал, вступительных экзаменов. 
    Составить списки трех груп, равномерно распределив студентов по успеваемости в каждую из груп
*/
#define STRLEN 128
#define GROUPS 3
    
/* структура */
typedef struct _student {
    char *name;
    double average;
    struct _student *next;
} Student_t;
 
Student_t *Student(const char *name, double average){
    Student_t *s;
    if ( ( s = (Student_t*)malloc(sizeof(Student_t)) ) == NULL )
        return NULL;
    if ( ( s->name = strdup(name) ) == NULL ){
        free(s);
        return NULL;
    }
    s->average = average;
    s->next = NULL;
    return s;
}
 
void killAll(Student_t *s){
    Student_t *n;
    while ( s ){
        n = s->next;
        if ( s->name )
            free(s->name);
        free(s);
        s = n;
    }
}
 
double groupAverage(const Student_t *s){
    int cnt;
    double sum;
    for ( cnt = 0, sum = 0.0; s != NULL; s = s->next ){
        sum += s->average;
        ++cnt;
    }
    return sum / (double)cnt;
}
 
Student_t *firstName(const Student_t *s){
    const Student_t *f = s;
    while ( s = s->next )
        if ( strcmp(s->name, f->name) < 0 )
            f = s;
    return (Student_t*)f;
}
 
Student_t *maxAverage(const Student_t *s){
    const Student_t *m = s;
    while ( s = s->next )
        if ( s->average > m->average )
            m = s;
    return (Student_t*)m;
}
 
void swapStudents(Student_t *a, Student_t *b){
    Student_t s;
    s.name = a->name;
    s.average = a->average;
    a->name = b->name;
    a->average = b->average;
    b->name = s.name;
    b->average = s.average;
}
 
Student_t *dupStudent(const Student_t *s){
    Student_t *d;
    if ( ( d = (Student_t*)malloc(sizeof(Student_t)) ) == NULL )
        return NULL;
    if ( ( d->name = strdup(s->name) ) == NULL ){
        free(d);
        return NULL;
    }
    d->average = s->average;
    d->next = NULL;
    return d;
}
 
void sortByName(Student_t *s){
    Student_t *f;
    while ( s->next ){
        f = firstName(s);
        if ( f != s )
            swapStudents(f, s);
        s = s->next;
    }
}
 
void sortByAverage(Student_t *s){
    Student_t *m;
    while ( s->next ){
        m = maxAverage(s);
        if ( m != s )
            swapStudents(m, s);
        s = s->next;
    }
}
 
void printGroup(Student_t *s){
    printf("\nФИО                           Средний балл\n--------------------------------------------------\n");
    while ( s ){
        printf("%-30s%.1f\n", s->name, s->average);
        s = s->next;
    }
    printf("--------------------------------------------------\n");
}
 
int main(void){
    Student_t *s, *d, *all, *last, *grp[GROUPS], *lst[GROUPS];
    char buf[STRLEN], *p;
    double avg;
    int cnt, i;
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    printf("\nВсего студентов: ");
    if ( scanf("%d%*c", &cnt) != 1 || cnt < GROUPS ){
        fprintf(stderr, "Wrong data!\n");
        exit(1);
    }
    all = last = NULL;
    while( cnt-- ){
        printf("\nФИО: ");
        if ( !fgets(buf, sizeof(buf), stdin) ){
            fprintf(stderr, "Bad string\n");
            exit(1);
        }
        if ( p = strrchr(buf, '\n') )
            *p = '\0';
        if ( !*buf ){
            fprintf(stderr, "Empty string!\n");
            exit(1);
        }
        printf("Средний балл: ");
        if ( scanf("%lf%*c", &avg) != 1 ){
            fprintf(stderr, "Wrong data!\n");
            exit(1);
        }
        if ( ( s = Student(buf, avg) ) == NULL ){
            printf("Shit happens!\n");
            exit(1);
        }
        if ( !all )
            all = s;
        if ( !last )
            last = s;
        else {
            last->next = s;
            last = last->next;
        }
    }
    
    sortByName(all);
    printf("\nВсе студенты:\n");
    printGroup(all);
    printf("Средний балл для всех студентов: %.1f\n", groupAverage(all));
    printf("Press ENTER");
    getchar();
    
    sortByAverage(all);
    for ( i = 0; i < GROUPS; ++i )
        grp[i] = lst[i] = NULL;
    
    for ( s = all, i = 0; s != NULL; s = s->next ){
        if ( ( d = dupStudent(s) ) == NULL ){
            fprintf(stderr, "Can't duplicate data!\n");
            exit(1);
        }
        if ( grp[i] == NULL )
            grp[i] = d;
        if ( lst[i] == NULL )
            lst[i] = d;
        else {
            lst[i]->next = d;
            lst[i] = lst[i]->next;
        }
        if ( ++i == GROUPS )
            i = 0;
    }
    
    for ( i = 0; i < GROUPS; ++i ){
        sortByName(grp[i]);
        printf("\n\nГруппа #%d:\n", i + 1);
        printGroup(grp[i]);
        printf("Средний балл для группы: %.1f\n", groupAverage(grp[i]));
        printf("Press ENTER");
        getchar();
    }
    
    for ( i = 0; i < GROUPS; ++i )
        killAll(grp[i]);
    killAll(all);
    
    exit(0);
}
Добавлено через 3 часа 20 минут
опечатку нашёл, поправил. от неё, правда, не горячо, не холодно, просто выглядело странно...
1
Op1um
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 9
14.01.2010, 21:39  [ТС] #6
Блин при компилировании выдает в строках 57:20,
65:20,
129:22,
130:28,
144:25,
211:2
может нужен другой компилятор?

Добавлено через 24 секунды
ты на чем писал?
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,819
14.01.2010, 23:27 #7
Op1um, на всякий случай отсюда скопировал, скомпилил cl микрософтовским - всё, как надо...
1
14.01.2010, 23:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2010, 23:27
Привет! Вот еще темы с ответами:

Нарисовать основные графические примитивы, равномерно распределив их на экране, с поясняющим текстом - Turbo Pascal
Нарисовать основные графические примитивы, равномерно распределив их на экране, с поясняющим текстом. координаты графических примитивов...

Составить таблицу успеваемости студентов. Поставить "зачет" студентам, у которых все лабораторные сданы на 4 и 5 - MS Excel
помогите сделать задание Составить таблицу успеваемости студентов. Поставить «зачет» студентам, у которых все лабораторные сданы на 4...

Написать программу которое составить список студентов оставшийся на пересдачу более трех предметов - VBA
написать программу которое составить список студентов оставшийся на пересдачу более трех предметов.

Программа об успеваемости студентов - C++
вот код программы #include &lt;iostream&gt; struct student { char name; char ocenki; int number; };


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

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

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