Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
1

Поиск и вывод на экран записей о всех людях, родившихся в мае 1975 года

28.11.2010, 10:55. Показов 878. Ответов 6
Метки нет (Все метки)

Вот сделал программу:
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
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
Uses crt;
Type
T_info=record
num:string;
fio:string;
chislo:string;
mesjac:string;
god:string;
end;
T_ukaz=^T_elem;
T_elem=record
info:T_info;
ukaz:t_ukaz;
end;
Var Beg_Spis,St,Sp:T_ukaz; i,j:integer;
 
Procedure vvod_iz_f;
Var f:text;
BEGIN
j:=0;
Assign(f,'RUR.txt');
Reset(f);
New(st);
Beg_spis:=st;
While not(eof(f)) do
  Begin
  With st^.info do
     begin
     Readln(f,num);
     Readln(f,fio);
     Readln(f,chislo);
     Readln(f,mesjac);
     Readln(f,god);
     end;
  sp:=st;
  New(st);
  Sp^.ukaz:=St; inc(j)
  End;
Sp^.ukaz:=NIL;
Close(f);
END;
 
Procedure vivod;
BEGIN
Writeln('Номер':5,'Ф.И.О.':17,'Число':10,'Месяц':9,'Год':7);
St:=Beg_spis;
While St<>nil do
      Begin
With St^.info do
     begin
if (mesjac='5') and (god='1975') then
   begin Write(num:5,fio:20,chislo:5,mesjac:10,god:9); Writeln; end;
     end;
St:=St^.ukaz;
      End;
END;
 
Procedure udalenie;
BEGIN
st:=Beg_spis; sp:=st;
If (st^.info.god='1975') and (st^.info.mesjac='1') then
   begin
st:=st^.ukaz;
Beg_spis:=st;
   end;
While St<>nil do
      Begin
if st^.info.god='1975' then sp^.ukaz:=st^.ukaz;
Sp:=st;
St:=st^.ukaz;
      End;
END;
 
Procedure vivod2;
BEGIN
Writeln('Номер':5,'Ф.И.О.':17,'Число':10,'Месяц':9,'Год':7);
St:=Beg_spis;
While St<>nil do
Begin
With St^.info do
Write(num:5,fio:20,chislo:5,mesjac:10,god:9); Writeln;
St:=St^.ukaz;
End;
END;
 
Procedure sort;
Var key:boolean;buf,ss:T_ukaz;
BEGIN
For i:=1 to j do begin
Repeat
key:=False;
st:=Beg_spis; ss:=st^.ukaz;
While ss<>Nil do
Begin
if st^.info.god>ss^.info.god then
begin
if st=Beg_spis then
begin
Beg_spis:=ss;
buf:=ss^.ukaz;
ss^.ukaz:=st;
st^.ukaz:=buf;
sp:=ss; ss:=st^.ukaz;
end
else begin
buf:=ss^.ukaz;
sp^.ukaz:=ss;
ss^.ukaz:=st;
st^.ukaz:=buf;
sp:=ss; ss:=st^.ukaz;
end;
end
else begin
sp:=st; st:=ss;
ss:=st^.ukaz;
end;
End;
Until key=False;
end;
END;
 
Procedure vstavka;
Var key:boolean; ins,ss:T_ukaz; num1,fio1,chislo1,mesjac1,god1:string; kol:byte;
BEGIN
Writeln('ger'); Readln(kol);
For i:=1 to kol do begin
St:=Beg_spis; Ss:=st^.ukaz;
Writeln('Vvedite nomer');
Readln(num1);
Writeln('dwed');
Readln(fio1);
Writeln('dwe');
Readln(chislo1);
Writeln('dwed');
Readln(mesjac1);
Writeln('dwed');
Readln(god1);
key:=False;
if st^.info.god>god1 then
begin
New(ins);
With ins^.info do
begin
num:=num1;
fio:=fio1;
chislo:=chislo1;
mesjac:=mesjac1;
god:=god1;
end;
ins^.ukaz:=Beg_spis;
Beg_spis:=ins;
key:=True;
end
else
While ss^.ukaz<>nil do
begin
if (st^.info.god<=god1) and (ss^.info.god>=god1)then
begin
New(ins);
With ins^.info do
begin
num:=num1;
fio:=fio1;
chislo:=chislo1;
mesjac:=mesjac1;
god:=god1;
end;
ins^.ukaz:=st^.ukaz;
st^.ukaz:=ins;
key:=True; break;
end
else begin
st:=st^.ukaz; ss:=ss^.ukaz;
end;
end;
 
Begin
vvod_iz_f;
vivod;
udalenie;
vivod2;
sort;
vivod;
vstavka;
vivod;
END.
После последнего END на точке встает указатель и 85 ошибка не пойму в чем дело? Помогите!!!!

Вот навсякий случай задание:

Номер Фамилия имя отчество Дата рождения
целое строка - 20 символов число месяц год

Поиск и вывод на экран записей о всех людях, родившихся в мае 1975 года.
Удаление из списка записей о родившихся в январе 1973 года.
Упорядочение линейного списка по возрастанию года рождения.
Вставка записей в список без нарушения упорядочения по году рождения.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2010, 10:55
Ответы с готовыми решениями:

Поиск и вывод на экран сведений о людях в массиве, родившихся не ранее указанного года
Создать класс с данными о человеке. В классе должны отражаться следующие сведения:...

Отдел кадров: Поиск и вывод на экран записей о всех студентах, родившихся в 1982 г
Вариант 2:gmad: Номер п/п|Личный шифрстудента|Фамилияимя, отчество|Дата рождения число|6...

Поиск всех граждан из списка, родившихся до 1950 года
Вариант 4 1. Дан список, содержащий не менее 10 записей, каждая из которых имеет ...

Поиск всех граждан из списка, родившихся до 1950 года
Дан список, содержащий 10 записей, каждая из которых имеет структуру: Ф.И.О. Домашний адрес Номер...

6
19 / 19 / 7
Регистрация: 17.10.2008
Сообщений: 97
28.11.2010, 11:09 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
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
program Project2;
 
{$APPTYPE CONSOLE}
 
 
Type
T_info=record
num:string;
fio:string;
chislo:string;
mesjac:string;
god:string;
end;
 
 
type
T_elem=record
info:T_info;
ukaz: T_Ukaz;
end;
T_Ukaz = ^T_elem;
 
 
 
Var Beg_Spis,St,Sp:T_ukaz; i,j:integer;
 
Procedure vvod_iz_f;
Var f:text;
BEGIN
j:=0;
Assign(f,'RUR.txt');
Reset(f);
New(st);
Beg_spis:=st;
While not(eof(f)) do
  Begin
  With st^.info do
     begin
     Readln(f,num);
     Readln(f,fio);
     Readln(f,chislo);
     Readln(f,mesjac);
     Readln(f,god);
     end;
  sp:=st;
  New(st);
  Sp^.ukaz:=St; inc(j)
  End;
Sp^.ukaz:=NIL;
Close(f);
END;
 
Procedure vivod;
BEGIN
Writeln('?????':5,'?.?.?.':17,'?????':10,'?????':9,'???':7);
St:=Beg_spis;
While St<>nil do
      Begin
With St^.info do
     begin
if (mesjac='5') and (god='1975') then
   begin Write(num:5,fio:20,chislo:5,mesjac:10,god:9); Writeln; end;
     end;
St:=St^.ukaz;
      End;
END;
 
Procedure udalenie;
BEGIN
st:=Beg_spis; sp:=st;
If (st^.info.god='1975') and (st^.info.mesjac='1') then
   begin
st:=st^.ukaz;
Beg_spis:=st;
   end;
While St<>nil do
      Begin
if st^.info.god='1975' then sp^.ukaz:=st^.ukaz;
Sp:=st;
St:=st^.ukaz;
      End;
END;
 
Procedure vivod2;
BEGIN
Writeln('?????':5,'?.?.?.':17,'?????':10,'?????':9,'???':7);
St:=Beg_spis;
While St<>nil do
Begin
With St^.info do
Write(num:5,fio:20,chislo:5,mesjac:10,god:9); Writeln;
St:=St^.ukaz;
End;
END;
 
Procedure sort;
Var key:boolean;buf,ss:T_ukaz;
i: integer;
BEGIN
For i:=1 to j do begin
Repeat
key:=False;
st:=Beg_spis; ss:=st^.ukaz;
While ss<>Nil do
Begin
if st^.info.god>ss^.info.god then
begin
if st=Beg_spis then
begin
Beg_spis:=ss;
buf:=ss^.ukaz;
ss^.ukaz:=st;
st^.ukaz:=buf;
sp:=ss; ss:=st^.ukaz;
end
else begin
buf:=ss^.ukaz;
sp^.ukaz:=ss;
ss^.ukaz:=st;
st^.ukaz:=buf;
sp:=ss; ss:=st^.ukaz;
end;
end
else begin
sp:=st; st:=ss;
ss:=st^.ukaz;
end;
End;
Until key=False;
end;
END;
 
Procedure vstavka;
Var key:boolean; ins,ss:T_ukaz; num1,fio1,chislo1,mesjac1,god1:string; kol:byte;
i: integer;
BEGIN
Writeln('ger'); Readln(kol);
For i:=1 to kol do begin
St:=Beg_spis; Ss:=st^.ukaz;
Writeln('Vvedite nomer');
Readln(num1);
Writeln('dwed');
Readln(fio1);
Writeln('dwe');
Readln(chislo1);
Writeln('dwed');
Readln(mesjac1);
Writeln('dwed');
Readln(god1);
key:=False;
if st^.info.god>god1 then
begin
New(ins);
With ins^.info do
begin
num:=num1;
fio:=fio1;
chislo:=chislo1;
mesjac:=mesjac1;
god:=god1;
end;
ins^.ukaz:=Beg_spis;
Beg_spis:=ins;
key:=True;
end
else
While ss^.ukaz<>nil do
begin
if (st^.info.god<=god1) and (ss^.info.god>=god1)then
begin
New(ins);
With ins^.info do
begin
num:=num1;
fio:=fio1;
chislo:=chislo1;
mesjac:=mesjac1;
god:=god1;
end;
ins^.ukaz:=st^.ukaz;
st^.ukaz:=ins;
key:=True; break;
end
else begin
st:=st^.ukaz; ss:=ss^.ukaz;
end;
end;
 
Begin
vvod_iz_f;
vivod;
udalenie;
vivod2;
sort;
vivod;
vstavka;
vivod;
END.
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
28.11.2010, 23:46  [ТС] 3
Нет теперь там в T_ukaz ошибка.. Я исправил там end"ов 2 штуки в последней процедуре не хватало

Добавлено через 3 часа 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
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
Uses crt;
Type
T_info=record
fio:string;
nazv:string;
god:string;
end;
T_ukaz=^T_elem;
T_elem=record
info:T_info;
ukaz:t_ukaz;
end;
Var Beg_Spis,St,Sp:T_ukaz; i,j:integer;
 
Procedure vvod_iz_f;
Var f:text;
BEGIN
j:=0;
Assign(f,'RUR.txt');
Reset(f);
New(st);
Beg_spis:=st;
While not(eof(f)) do
  Begin
    With st^.info do
     begin
     Readln(f,fio);
     Readln(f,nazv);
     Readln(f,god);
     end;
  sp:=st;
  New(st);
  Sp^.ukaz:=St; inc(j)
  End;
Sp^.ukaz:=NIL;
Close(f);
END;
 
Procedure vivod;
BEGIN
Writeln('FIO':15,'Nazvanie knigi':20,'God izdaniya':4);
St:=Beg_spis;
While St<>nil do
      Begin
With St^.info do
     begin
if god<'1985' then
   begin Write(fio:15,nazv:20,god:4); Writeln; end;
     end;
St:=St^.ukaz;
      End;
END;
 
Procedure udalenie;
BEGIN
st:=Beg_spis; sp:=st;
If pos('Ivanov',st^.info.fio)>0 then
   begin
st:=st^.ukaz;
Beg_spis:=st;
   end;
While St<>nil do
      Begin
if pos('Ivanov',st^.info.fio)>0 then sp^.ukaz:=st^.ukaz;
Sp:=st;
St:=st^.ukaz;
      End;
END;
 
Procedure vivod2;
BEGIN
Writeln('FIO':15,'Nazvanie knigi':20,'God izdaniya':4);
St:=Beg_spis;
While St<>nil do
Begin
With St^.info do
Write(fio:15,nazv:20,god:4); Writeln;
St:=St^.ukaz;
End;
END;
 
Procedure sort;
Var key:boolean;buf,ss:T_ukaz;
BEGIN
For i:=1 to j do begin
Repeat
key:=False;
st:=Beg_spis; ss:=st^.ukaz;
While ss<>Nil do
Begin
if st^.info.god<ss^.info.god then
begin
if st=Beg_spis then
begin
Beg_spis:=ss;
buf:=ss^.ukaz;
ss^.ukaz:=st;
st^.ukaz:=buf;
sp:=ss; ss:=st^.ukaz;
end
else begin
buf:=ss^.ukaz;
sp^.ukaz:=ss;
ss^.ukaz:=st;
st^.ukaz:=buf;
sp:=ss; ss:=st^.ukaz;
end;
end
else begin
sp:=st; st:=ss;
ss:=st^.ukaz;
end;
End;
Until key=False;
end;
END;
 
Procedure vstavka;
Var key:boolean; ins,ss:T_ukaz; fio1,nazv1,god1:string; kol:byte;
BEGIN
Writeln('Vvedite kol-vo zapisey'); Readln(kol);
For i:=1 to kol do begin
St:=Beg_spis; Ss:=st^.ukaz;
Writeln('Vvedite FIO');
Readln(fio1);
Writeln('Vvedite nazv');
Readln(nazv1);
Writeln('Vvedite god');
Readln(god1);
key:=False;
if st^.info.god>god1 then
begin
New(ins);
With ins^.info do
begin
fio:=fio1;
nazv:=nazv1;
god:=god1;
end;
ins^.ukaz:=Beg_spis;
Beg_spis:=ins;
key:=True;
end
else
While ss^.ukaz<>nil do
begin
if (st^.info.god<=god1) and (ss^.info.god>=god1)then
begin
New(ins);
With ins^.info do
begin
fio:=fio1;
nazv:=nazv1;
god:=god1;
end;
ins^.ukaz:=st^.ukaz;
st^.ukaz:=ins;
key:=True; break;
end
else begin
st:=st^.ukaz; ss:=ss^.ukaz;
end;
end;
end;
end;
 
Begin
clrscr;
vvod_iz_f;
vivod2;
readkey;
vivod;
readkey;
udalenie;
vivod2;
readkey;
sort;
vivod2;
readkey;
vstavka;
vivod2;
readkey;
END.
Все работает, но косяк в том, что заполняет динамический массив криво!

В чем причина понять не могу! Из за этого поиск не делается!
Задание:
Фамилия имя отчество автора Название книги Год издания
строка символов строка символов число

Поиск в линейном списке и вывод на экран записей о всех книгах, изданных до 1985 года.
Удаление из списка записей о книгах, с фамилией автора “Иванов”.
Упорядочение линейного списка по убыванию года издания.
Вставка записей в список без нарушения упорядочения по году издания.

Добавлено через 3 часа 2 минуты
Народ вы где!?!?!?

Добавлено через 5 часов 46 минут
выручайте!!!
0
19 / 19 / 7
Регистрация: 17.10.2008
Сообщений: 97
29.11.2010, 05:30 4
Цитата Сообщение от Сеня 2007 Посмотреть сообщение
Pascal
1
2
3
4
Procedure vvod_iz_f;
Var f:text;
BEGIN
j:=0;



Цитата Сообщение от Сеня 2007 Посмотреть сообщение
Pascal
1
2
3
4
Procedure sort;
Var key:boolean;buf,ss:T_ukaz;
BEGIN
For i:=1 to j do begin
//С вводом сам ничего не понял, но капни в сортировке... (input from 0, sort from 1);

Добавлено через 16 минут
Ошибка ввода в строчках 31 .. 35:


Цитата Сообщение от Сеня 2007 Посмотреть сообщение
Pascal
1
2
3
4
5
sp:=st;
  New(st);
  Sp^.ukaz:=St; inc(j)
  End;
Sp^.ukaz:=NIL;

ты же вроде их пишешь со смещение в st, соответственно и выводишь из st...
j я на твоем месте совсем убрал для более оптимального кода
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
29.11.2010, 08:08  [ТС] 5
Так че нада исправить я чет не совсем понял?
Я еще пробовал длину описывать строк, тож не помогает!
0
19 / 19 / 7
Регистрация: 17.10.2008
Сообщений: 97
29.11.2010, 08:17 6
Сортировка идет с первого элемента, а ввод с нулевого. А в вводе вроде все правильно, но не пашет
0
1 / 1 / 0
Регистрация: 06.10.2010
Сообщений: 67
11.12.2010, 19:28 7
процедуры должны передаваться через параметры
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2010, 19:28

Вывести на экран информации о людях, родившихся под заданым знаком зодиака
Требования к разработке Логически законченные фрагменты оформить в виде подпрограмм, которым все...

Поиск и вывод на экран записей о всех студентах, имеющих шифр, начинающийся с символов "ВС".
Здравствуйте! Помогите разобраться,понимаю,что тема несложная,но у меня есть вопросы....


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

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

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