Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 29.10.2013
Сообщений: 5
1

"Линейные однонаправленные списки" ошибка

31.10.2013, 12:27. Показов 824. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу вывести в файл список.
фамилия....пол....оценка
................
................
................
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2013, 12:27
Ответы с готовыми решениями:

Однонаправленные линейные списки (доделать код)
Программа должна выводить список имен и их количество в файле, используются списки Помогите...

Ошибка. Линейные списки - удаляется два элемента вместо второго
Procedure Udal_2; {Удаление из Списка 1,2,Пред. Последнего и Последнего} Begin...

Динамическая память, однонаправленные и двунаправленные списки
Разработать программу, используя однонаправленные и двунаправленные списки. Начав написание...

Даны однонаправленные списки K1 и K2. Сформировать список K=K1∩K2
Даны однонаправленные списки K1 и K2. Сформировать список K=K1∩K2. ∩-знак пересечения.

Однонаправленные списки. сколько чисел из первого списка содержится во втором
Задание: создать два однонаправленных списка, состоящих из целых чисел. Посчитать сколько чисел из...

1
0 / 0 / 1
Регистрация: 29.10.2013
Сообщений: 5
06.11.2013, 10:31  [ТС] 2
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
113
114
115
116
117
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 sort (var srb_test1, t11:next; p1:mans);
 procedure bug (var srb_test1, t11:next; p1:mans);
 Begin
 if t11 <>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;
              bug (srb_test1,t11^.sled, p1);
         end;
  end;
 Begin
 t11:=srb_test1^.sled;
       bug (srb_test1,t11, p1);
 
      srb_test1:=srb_test1^.sled
              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
06.11.2013, 10:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2013, 10:31
Помогаю со студенческими работами здесь

Линейные списки в Turbo Pascal
Помогите написать подпрограмму, которая проверяет на равенство списки М1 и М2 или которая копирует...

Списки однонаправленные. Вставить новый элемент перед последним элементом со значением E, если такой элемент есть в списке.
Данный список А, состоящий из записей: первое поле - число, второе - адрес следующего элемента....

Линейные списки: проверить наличие в списке двух одинаковых элементов
здравствуйте ребята прошу помогиTе Дан список L, состоящий из записей: первое поле –...

Имеются линейные однонаправленные списки
Имеются линейные однонаправленные списки: type p=^item; item=record ...

Однонаправленные списки
Ребята, помогите написать код к этому заданию Вообще если добавить в начало или после заданного...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru