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

Turbo Pascal

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

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

11.02.2014, 03:08. Просмотров 1157. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2014, 03:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка списка группы студентов по среднему баллу нескольких экзаменов (Turbo Pascal):

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

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

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

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

Упорядочить список студентов по среднему баллу - Pascal
я бы не назвал их сложными но что то не получается здесь 3 задачки Процедуры 1) Сформировать матрицы {aij}n,m , {bij}k,l , где...

Сортировка методом Шелла списка студентов группы - Pascal
Доброго времени суток, нужно написать программу для сортировки методом Шелла массива, состоящий из студентов группы (25 человек)...

2
Puporev
Модератор
54019 / 41652 / 14730
Регистрация: 18.05.2008
Сообщений: 97,916
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
DanielTe
0 / 0 / 0
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 22:20
Привет! Вот еще темы с ответами:

Сессия. Результаты сессии, состоящей из трех экзаменов, для группы из n студентов представлены матрицей K(n,3). - Turbo Pascal
Сессия. Результаты сессии, состоящей из трех экзаменов, для группы из n студентов представлены матрицей K(n,3). Оценка ставится по...

Сформировать файл, содержащий фамилии нескольких студентов вашей группы - Turbo Pascal
Люди! Помогите написать след. Программу: сформировать файл, содержащий фамилии нескольких студентов вашей группы.

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

Из списка группы вывести фамилии студентов не старше 18 лет - Turbo Pascal
Помогите пожалуйста: Из списка группы вывести фамилии студентов не старше 18 лет Чесно скажу я чуть не могу понять как задавать пока...


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

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

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