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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Struct,union and bytes. http://www.cyberforum.ru/cpp-beginners/thread85417.html
Разработать программу расчета закупки сырья промышленного предприятия. Данные о закупках хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру накладной использовать структуры, битовые поля и смеси; все логически законченные части программы оформить в виде отдельных функций Как отсортировать структуру по накладной котороя...
C++ Двумерный массив на С Помогите!!!Нужно напистать на языке С вот такую программу: Найти сумму двух разреженных полиномов порядка N и M заданых ненулевыми коэфициэнтами и их номерами. http://www.cyberforum.ru/cpp-beginners/thread85416.html
C++ Рекуректные формулы
http://s006.***********/i213/1001/37/ed7a99615df3t.jpg желательно на С, непойму как решить пример !
C++ с++ срубит ли дамка одну или оби пешки
...осталась белая дамка и 2 чёрные пешки, позицыи которых извесны. Сможет ли дамка срубить одну или сразу две пешки??? помогите перепрограмировать на с++ с паскаля.... uses crt; type Point = record x:word; y:word; end; var d,s1,s2:Point; begin
C++ Ошибка в коде програмы http://www.cyberforum.ru/cpp-beginners/thread85376.html
Чапаеву надо под прямым углом к фарватеру преодолеть реку Урал шириной b м.Его скорость в чтоячей воде V1 м/с; скорость течения реки - V2 м/с. Под каким углом к фарватеру он должен плыть чтобы его не "снесло"?Сколько времени займет переправа?Как изменится решение, если посредине реки Чапаева ранили в руку, и его скорость с V1 м/с упала до V3 v/c? Помогите пожалуйста #include <stdio.h>...
C++ Дано предложение, слова в нем разделены пробелом. Упорядочить слова по алфавиту (только по первой букве). Помогите, пожалуйста! подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
14.01.2010, 15:25     Составить списки трех груп, равномерно распределив студентов по успеваемости в каждую из груп
Получилось всё, как в жизни... В "А" ботаны собрались, в "В" - кому в первых двух классах места не нашлось... Но в принципе могло быть хуже...
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 минут
опечатку нашёл, поправил. от неё, правда, не горячо, не холодно, просто выглядело странно...
 
Текущее время: 16:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru