0 / 0 / 1
Регистрация: 17.04.2013
Сообщений: 16
1

Сортировка списка группы студентов по среднему баллу нескольких экзаменов

11.02.2014, 03:08. Показов 2495. Ответов 2
Метки нет (Все метки)

Доброго времени суток. Задали в школе задачу, есть мысль, но не могу воплотить в код
Есть задача:
Сформировать файл, в котором будет список студентов академической группы в порядке убывания среднего балла студентов по результатам экзаменационной сессии, состоящей из n экзаменов, в случае равенства среднего балла учитывать алфавитный порядок для фамилии. Вычисление среднего балла студента и сортировку массива по убыванию оформить в виде подпрограмм.Текст задания, исходные данные и результат вывести на экран и в текстовый файл.

Моя идея в том, что я делаю матрицу m*n, где m- кол-во экзаменов, а n- кол-во студентов.
Номер строки это фамилия студента, номер столбца - название экзамена. Дальше находим среднее значение в каждой строке и сравниваем друг между другом, выводим по убыванию. Если значение совпадает, то сортируем название строк, в которых значения совпали, по символам.

Как вам алгоритм? Есть ли получше идеи, если вдруг изъявите желание написать свое готовое решение, то буду очень благодарен, при чем, учиться на программиста я не буду, я играю в футбол)

Добавлено через 1 час 5 минут
получается помимо матрицы, у меня еще будет 2 текстовых массива на имена студентов и экзаменов

Добавлено через 5 часов 10 минут
Pascal
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
program z1;
const nmax=20;
var a,g:array[1..nmax,1..nmax] of integer;
    b,c:array[1..nmax] of string;
    d:array[1..nmax] of integer;
   z, m,n,i,j,k:byte;
    x:integer;
    sum:real;
begin
randomize;
repeat
write('koli4estvo studentov',nmax,' m=');
readln(m);
for i:=1 to m  do
begin
write ('vvedite im9 ',i,'-go studenta ');
readln(c[i]);
end;
until m in [1..nmax];
repeat
write('koli4estvo ekzamenov do ',nmax,' n=');
readln(n);
for i:=1 to n  do
begin
write ('vvedite nazvanie ',i,'-go ekzamena ');
readln(b[i]);
end;
until n in [1..nmax];
 
writeln ('students:');
for i:=1 to m do
begin
writeln ('student ',c[i],'  ');
for j:=1 to n  do
begin
 
writeln('vvedite ocenky za ekzame ',b[j],' ');
readln(a[i,j]);
end;
end;
 
writeln;
for i:=1 to n do
begin
write ('         ',b[i],'       ');
end;
writeln;
for i:=1 to m do
begin
write ('  ',c[i],'   ');
for j:=1 to n  do
begin
write(a[i,j]:4);
end;
writeln;
end;
 
for i:=1 to m do
 
begin
   d[i]:=0;
for j:=1 to n do
begin
  d[i]:=d[i]+a[i,j];
 
end;
   writeln('summma ',d[i]/n:1:2,'');
 
end;
 
for i:=1 to n-1 do
begin
for j:=1+1 to m do
if d[i]<d[j] then
begin
z:=d[i];
d[i]:=d[j];
d[j]:=z;
end;
end;
 
for i:=1 to m do
writeln (d[i]/n:1:2);
 
readln;
writeln;
end.
Добавлено через 1 минуту
чего я добился, добился сортировки среднего значения. Вопрос... как теперь с текстовым массивом для студентов это связать? Кто может подправить код немного? ребята ну я не реально не программист, мне в футбик завтра на соревах играть, а я тут этим занимаюсь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2014, 03:08
Ответы с готовыми решениями:

Сортировка по возрастанию студентов по среднему баллу
Доброго времени суток. В общем, есть средние баллы(в самом низу программы), но сортировку я...

Сортировка списка студентов по среднему баллу
Дан список студентов. Необходимо отсортировать студенток по среднему баллу и вывести на экран...

Сортировка студентов по среднему баллу. При одинаковом балле выводит только одну фамилию
Доброе время суток! Помогите исправить программу. Суть в чем: есть база фактов: студент+список...

Отсортировать студентов по среднему баллу
uses crt; const n = 3; type FName = record //...

2
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
11.02.2014, 10:13 2
Цитата Сообщение от DanielTe Посмотреть сообщение
получается помимо матрицы, у меня еще будет 2 текстовых массива на имена студентов и экзаменов
А может проще объявить тип запись
Pascal
1
2
3
4
5
type stud=record
               fam:string[20];
               ocn:array[1..10] of byte;
               srb:real;
               end;
0
0 / 0 / 1
Регистрация: 17.04.2013
Сообщений: 16
11.02.2014, 22:20  [ТС] 3
Pascal
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
program z1;
const nmax=20;
var a,g:array[1..nmax,1..nmax] of integer;
   c2, b,c:array[1..nmax] of string;
    d:array[1..nmax] of integer;
   z, m,n,i,j,k:byte;
    x,y:string;
    tt:string;
    sum:real;
begin
randomize;
repeat
write('koli4estvo studentov',nmax,' m=');
readln(m);
for i:=1 to m  do
begin
write ('vvedite im9 ',i,'-go studenta ');
readln(c[i]);
end;
until m in [1..nmax];
repeat
write('koli4estvo ekzamenov do ',nmax,' n=');
readln(n);
for i:=1 to n  do
begin
write ('vvedite nazvanie ',i,'-go ekzamena ');
readln(b[i]);
end;
until n in [1..nmax];
 
writeln ('students:');
for i:=1 to m do
begin
writeln ('student ',c[i],'  ');
for j:=1 to n  do
begin
 
writeln('vvedite ocenky za ekzame ',b[j],' ');
readln(a[i,j]);
end;
end;
 
writeln;
for i:=1 to n do
begin
write ('         ',b[i],'       ');
end;
writeln;
for i:=1 to m do
begin
write ('  ',c[i],'   ');
for j:=1 to n  do
begin
write(a[i,j]:4);
end;
writeln;
end;
 
for i:=1 to m do
 
begin
   d[i]:=0;
for j:=1 to n do
begin
  d[i]:=d[i]+a[i,j];
 
end;
   writeln('summma ',d[i]/n:1:2,'');
 
end;
 
for i:=1 to n-1 do
begin
for j:=1+1 to m do
if d[i]<d[j] then
begin
 
z:=d[i];
d[i]:=d[j];
d[j]:=z;
tt:=c[i];
c[i]:=c[j];
c[j]:=tt;
 
 
{ for i:=1 to m do
 begin
 c2[i]:='';
 for j:=1 to length(c[i]) do
 c2[i]:=c2[i]+Upcase(c[i][j]);
 end;
 for i:=1 to m-1 do
 for j:=1 to m-1 do
 if (c2[j]>c2[j+1]) then
 begin
 x:=c[j];c[j]:=c[j+1];c[j+1]:=x;
 y:=c2[j];c2[j]:=c2[j+1];c2[j+1]:=y;
 end;}
 
 
 
end;
end;
 
for i:=1 to m do
writeln (d[i]/n:1:2);
for i:=1 to m do
writeln(c[i]);
 
readln;
writeln;
end.
сделал сортировку фамилий и среднего балла, как теперь сделать, чтобы при равных средних баллах у нас срабатывал код в {}(сортировка по алфавиту)

Добавлено через 45 секунд
а еще не хочет сортировать, если у нас только 1 экзамен

Добавлено через 4 часа 31 минуту
Pascal
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
program z1;
const nmax=20;
var a,g:array[1..nmax,1..nmax] of integer;
   c2, b,c:array[1..nmax] of string;
    d:array[1..nmax] of integer;
   z, m,n,i,j,k:byte;
    x,y:string;
    tt:string;
    sum:real;
begin
randomize;
repeat
write('koli4estvo studentov',nmax,' m=');
readln(m);
for i:=1 to m  do
begin
write ('vvedite im9 ',i,'-go studenta ');
readln(c[i]);
end;
until m in [1..nmax];
repeat
write('koli4estvo ekzamenov do ',nmax,' n=');
readln(n);
for i:=1 to n  do
begin
write ('vvedite nazvanie ',i,'-go ekzamena ');
readln(b[i]);
end;
until n in [1..nmax];
 
writeln ('students:');
for i:=1 to m do
begin
writeln ('student ',c[i],'  ');
for j:=1 to n  do
begin
 
writeln('vvedite ocenky za ekzame ',b[j],' ');
readln(a[i,j]);
end;
end;
 
writeln;
for i:=1 to n do
begin
write ('         ',b[i],'       ');
end;
writeln;
for i:=1 to m do
begin
write ('  ',c[i],'   ');
for j:=1 to n  do
begin
write(a[i,j]:4);
end;
writeln;
end;
 
for i:=1 to m do
 
begin
   d[i]:=0;
for j:=1 to n do
begin
  d[i]:=d[i]+a[i,j];
 
end;
   writeln('summma ',d[i]/n:1:2,'');
 
end;
 
for i:=1 to n-1 do
begin
for j:=1+1 to m do
if d[i]<d[j] then
begin
 
z:=d[i];
d[i]:=d[j];
d[j]:=z;
tt:=c[i];
c[i]:=c[j];
c[j]:=tt;
 
 end;
 end;
 {
 if d[i+1]=d[i] then
 for j:=1 to m do
 begin
 c2[i]:='';
 for j:=1 to length(c[i]) do
 c2[i]:=c2[i]+Upcase(c[i][j]);
 end;
 for i:=1 to m-1 do
 for j:=1 to m-1 do
 if (c2[j]>c2[j+1]) then
 begin
 x:=c[j];c[j]:=c[j+1];c[j+1]:=x;
 y:=c2[j];c2[j]:=c2[j+1];c2[j+1]:=y;
 
 end;
}
 
for i:=1 to m do
writeln (d[i]/n:1:2);
for i:=1 to m do
writeln(c[i]);
 
readln;
writeln;
end.
не могу довести до ума, помогите пожалуйста
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2014, 22:20
Помогаю со студенческими работами здесь

Список группы сортировать по среднему баллу
Ребят, суть задачки вот такая: составить список учебной группы, включающей 25 человек. Для каждого...

Упорядочить список студентов по среднему баллу
я бы не назвал их сложными но что то не получается здесь 3 задачки Процедуры 1) Сформировать...

Расставить студентов в списке по среднему баллу
Ввести массив FIO(N) для фамилий N студентов, Ball(N) для подсчета их среднего балла, Oc(5) –для...

Упорядочить список студентов по среднему баллу
Упорядочить студентов по величине среднего балла (по одной дисциплине).

Упорядочить список студентов по среднему баллу и распечатать его
Здравствуйте! Задачка: На диске имеется файл данных STUDENT.DAT. В нем записана информация о...

Сортировка по среднему баллу
Не получаетса доделать сортировку по среднем бале. Оно сортирует но не правельно. Вот что у меня...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru