"Линейные однонаправленные списки" ошибка
31.10.2013, 12:27. Показов 824. Ответов 1
Не могу вывести в файл список.
фамилия....пол....оценка
................
................
................
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
| program p15;
type
Next=^mans;
mans=record
fam:string[15];
gender:string[1];
ocenki:string[5];
sled:next
end;
Var
uknach,ukdin:next;
Begin
assign(input, 'dan1.inp');
reset(input);
assign(output, 'res1.out');
rewrite(output);
new(ukdin);
uknach:=ukdin;
read(input,ukdin^.fam);
read(input,ukdin^.gender);
read(input,ukdin^.ocenki);
read(ukdin^.fam);
read(ukdin^.gender);
readln(ukdin^.ocenki);
write(output,ukdin^.fam);
write(output,ukdin^.gender);
writeln(output,ukdin^.ocenki);
ukdin^.sled:=nil;
end. |
|
Добавлено через 2 часа 36 минут
Или так, почему выводит только первую строчку? Как это исправить? Подскажите, пожайлуста.
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
| program p15;
type
Next=^mans;
mans=record
fam:string[15];
gender:string[1];
ocenki:string[5];
sled:next
end;
Var
uknach,ukdin:next;
Begin
assign(input, 'dan1.inp');
reset(input);
assign(output, 'res1.out');
rewrite(output);
New(ukdin);
uknach:=ukdin;
read(input, ukdin^.fam);
read(input, ukdin^.gender);
read(input, ukdin^.ocenki);
ukdin^.sled:=nil;
while not eoln(input) do
Begin
New(ukdin^.sled);
ukdin:=ukdin^.sled;
read(input, ukdin^.fam);
read(input, ukdin^.gender);
readln(input, ukdin^.ocenki);
ukdin^.sled:=nil;
end;
close(input);
ukdin:=uknach;
while ukdin<>nil do
Begin
write(output, ukdin^.fam);
write(output, ukdin^.gender);
writeln(output, ukdin^.ocenki);
ukdin:=ukdin^.sled;
end;
end. |
|
Добавлено через 4 часа 6 минут
апп
Добавлено через 14 часов 11 минут
Нашел ошибки:
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
| program p15;
type
Next=^mans;
mans=record
fam:string[15];
gender:string[1];
ocenki:string[5];
sled:next
end;
Var
uknach,ukdin:next;
Begin
assign(input, 'dan1.inp');
reset(input);
assign(output, 'res1.out');
rewrite(output);
New(ukdin);
uknach:=ukdin;
read(input, ukdin^.fam);
read(input, ukdin^.gender);
readln(input, ukdin^.ocenki); {тут "ln" дописать надо было, чтоб на след. строку переходил}
ukdin^.sled:=nil;
while not eof(input) do {конец файла, а не строки надо было}
Begin
New(ukdin^.sled);
ukdin:=ukdin^.sled;
read(input, ukdin^.fam);
read(input, ukdin^.gender);
readln(input, ukdin^.ocenki);
ukdin^.sled:=nil;
end;
close(input);
ukdin:=uknach;
while ukdin<>nil do
Begin
write(output, ukdin^.fam);
write(output, ukdin^.gender);
writeln(output, ukdin^.ocenki);
ukdin:=ukdin^.sled;
end;
end. |
|
Теперь надо средний балл вычислить в процедуре, пытаюсь через val(copy(ukdin^.ocenki,j,1),x,code)
Добавлено через 1 час 29 минут
Входной:
sidorov m 4545
mironov m 3232
nikitina w 5332
.....................................
..................................
Помогите найти ошибку, в подсчете среднего бала.
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
| program p15;
type
Next=^mans;
mans=record
fam:string[15];
gender:string[1];
ocenki:string[5];
srb:real;
sled:next
end;
Var
uknach,ukdin:next;
procedure ocenki(var uknach1,ukdin1:next);
Var
x:real;
j:byte;
code:integer;
Begin
ukdin1:=uknach1;
while ukdin1<>nil do
Begin
x:=0;
for j:=1 to 5 do
Begin
val(copy(ukdin1^.ocenki,j,1),x,code);
ukdin1^.srb:=ukdin1^.srb+x;
end;
ukdin1^.srb:=ukdin1^.srb/4;
ukdin1:=ukdin1^.sled
end;
end;
Begin
assign(input, 'dan1.inp');
reset(input);
assign(output, 'res1.out');
rewrite(output);
New(ukdin);
uknach:=ukdin;
read(input, ukdin^.fam);
read(input, ukdin^.gender);
readln(input, ukdin^.ocenki);
ukdin^.sled:=nil;
while not eof(input) do
Begin
New(ukdin^.sled);
ukdin:=ukdin^.sled;
read(input, ukdin^.fam);
read(input, ukdin^.gender);
readln(input, ukdin^.ocenki);
ukdin^.sled:=nil;
end;
close(input);
ocenki(uknach,ukdin);
ukdin:=uknach;
while ukdin<>nil do
Begin
write(output, ukdin^.fam);
write(output, ukdin^.gender);
write(output, ukdin^.ocenki);
writeln(output, ukdin^.srb:5:2);
ukdin:=ukdin^.sled;
end;
writeln('======================');
end.[/B] |
|
Добавлено через 41 минуту
Каждый раз при исполнении программы в выходном файле, ср.балл выдает разный
Добавлено через 3 часа 30 минут
Может быть я где то не обнулил просто указатели? Подскажите, добрые люди..
Добавлено через 16 часов 27 минут
Решил, подсчет среднего балла и сортировка по баллам всех полей, от большего к меньшему. Спасибо огромное форумчанам, сам спросил, сам разбирайся.
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
| program p15;
type
mans=record
fam:string[15];
gender:string[1];
ocenki:string[5];
srb:real;
end;
next=^mans1;
mans1=record
inf:mans;
sled:next
end;
Var
uknach,ukdin:next;
procedure ocenki(var uknach1,ukdin1:next);
Var
srb_test,t1:next;
p:mans;
x,c:real;
j:byte;
code:integer;
Begin
ukdin1:=uknach1;
while ukdin1<>nil do
Begin
ukdin1^.inf.srb:=0;
for j:=1 to 5 do
Begin
val(copy(ukdin1^.inf.ocenki,j,1),x,code);
ukdin1^.inf.srb:=ukdin1^.inf.srb+x;
end;
ukdin1^.inf.srb:=ukdin1^.inf.srb/4;
ukdin1:=ukdin1^.sled;
end;
srb_test:=uknach1;
while srb_test^.sled<>nil do
Begin
t1:=srb_test^.sled
while t1<>nil do
Begin
if srb_test^.inf.srb<t1^.inf.srb then
begin
p:=t1^.inf;
t1^.inf:=srb_test^.inf;
srb_test^.inf:=p;
end;
t1:=t1^.sled;
end;
srb_test:=srb_test^.sled;
end;
Begin
assign(input, 'dan1.inp');
reset(input);
assign(output, 'res1.out');
rewrite(output);
New(ukdin);
uknach:=ukdin;
read(input, ukdin^.inf.fam);
read(input, ukdin^.inf.gender);
readln(input, ukdin^.inf.ocenki);
ukdin^.sled:=nil;
while not eof(input) do
Begin
New(ukdin^.sled);
ukdin:=ukdin^.sled;
read(input, ukdin^.inf.fam);
read(input, ukdin^.inf.gender);
readln(input, ukdin^.inf.ocenki);
ukdin^.sled:=nil;
end;
close(input);
ocenki(uknach,ukdin);
ukdin:=uknach;
while ukdin<>nil do
Begin
write(output, ukdin^.inf.fam);
write(output, ukdin^.inf.gender);
write(output, ukdin^.inf.ocenki);
write(output,' ');
writeln(output, ukdin^.inf.srb:5:2);
ukdin:=ukdin^.sled;
end;
writeln('======================');
end. |
|
Добавлено через 1 минуту
Теперь надо сделать рекурсию во внутренним цикле сортировки.
Добавлено через 2 часа 52 минуты
Из внутреннего цикла надо сделать рекурсию, выдает ошибку, скорее всего из-за бесконечной рекурсии, не пойму как исправить в процедуре sort.
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
| Var
uknach,ukdin:next;
procedure sort (var srb_test1,t11:next; p1:mans);
Begin
if t11^.sled<>nil then {переполнение стека}
Begin
if srb_test1^.inf.srb<t11^.inf.srb then
begin
p1:=t11^.inf;
t11^.inf:=srb_test1^.inf;
srb_test1^.inf:=p1;
end;
t11:=t11^.sled
end;
sort(srb_test1,t11,p1)
end;
procedure ocenki(var uknach1,ukdin1:next);
Var
srb_test,t1:next;
p:mans;
x,c:real;
j:byte;
code:integer;
Begin
ukdin1:=uknach1;
while ukdin1<>nil do
Begin
ukdin1^.inf.srb:=0;
for j:=1 to 5 do
Begin
val(copy(ukdin1^.inf.ocenki,j,1),x,code);
ukdin1^.inf.srb:=ukdin1^.inf.srb+x;
end;
ukdin1^.inf.srb:=ukdin1^.inf.srb/4;
ukdin1:=ukdin1^.sled;
end;
srb_test:=uknach1;
while srb_test^.sled<>nil do
Begin
sort(srb_test, t1, p)
end;
end;
Begin
assign(input, 'dan1.inp');
reset(input);
assign(output, 'res1.out');
rewrite(output);
New(ukdin);
uknach:=ukdin;
read(input, ukdin^.inf.fam);
read(input, ukdin^.inf.gender);
readln(input, ukdin^.inf.ocenki);
ukdin^.sled:=nil;
while not eof(input) do
Begin
New(ukdin^.sled);
ukdin:=ukdin^.sled;
read(input, ukdin^.inf.fam);
read(input, ukdin^.inf.gender);
readln(input, ukdin^.inf.ocenki);
ukdin^.sled:=nil;
end;
close(input);
ocenki(uknach,ukdin);
ukdin:=uknach;
while ukdin<>nil do
Begin
write(output, ukdin^.inf.fam);
write(output, ukdin^.inf.gender);
write(output, ukdin^.inf.ocenki);
write(output,' ');
writeln(output, ukdin^.inf.srb:5:2);
ukdin:=ukdin^.sled;
end;
writeln('======================');
end. |
|
0
|