Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2010, 10:55   #1
Сеня2007
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 16
По умолчанию Типизированные файлы

Вот сделал программу:
Код:
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 года.
Упорядочение линейного списка по возрастанию года рождения.
Вставка записей в список без нарушения упорядочения по году рождения.

Последний раз редактировалось Stilet; 28.11.2010 в 16:41.
Сеня2007 вне форума Ответить с цитированием
Старый 28.11.2010, 11:09   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Неужели идти на форум и создавать там тему проще и быстрее, нежели воспользоваться поиском в яндексе, гугле ?
И почему вы указываеете только номер ошибки, неужели паскаль не выдает что то вроде 'expected ;'?
Вообщее у вас не хватает end-ов, скорее всего в последней процедуре
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 28.11.2010, 14:57   #3
Сеня2007
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 16
По умолчанию

Вот переделал программу под другой вариант:
Код:
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.
Все работает, но косяк в том, что заполняет динамический массив криво!
http://s015.radikal.ru/i332/1011/6b/91ed12997085.jpg
В чем причина понять не могу! Из за этого поиск не делается!
Задание:
Фамилия имя отчество автора Название книги Год издания
строка символов строка символов число

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

Последний раз редактировалось Stilet; 28.11.2010 в 16:42.
Сеня2007 вне форума Ответить с цитированием
Старый 28.11.2010, 17:59   #4
Сеня2007
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 16
По умолчанию

Че никто помоч не может?
Сеня2007 вне форума Ответить с цитированием
Старый 28.11.2010, 23:45   #5
Сеня2007
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 16
По умолчанию

Народ вы где?!?!?
Сеня2007 вне форума Ответить с цитированием
Старый 29.11.2010, 08:06   #6
Сеня2007
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 16
По умолчанию

Плиз выручайте!!!
Сеня2007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типизированные файлы Asira Помощь студентам 0 06.06.2010 18:11
Файлы данных.Типизированные файлы. вылка Помощь студентам 6 17.05.2010 15:42
Типизированные файлы hidalgo Фриланс 6 16.03.2010 12:20
Типизированные файлы Ddr Общие вопросы Delphi 11 27.04.2009 20:38
типизированные файлы MyQwErTy Паскаль, Turbo Pascal, PascalABC.NET 7 11.11.2008 20:54