Skip to content

Instantly share code, notes, and snippets.

@vertrigo
Created December 11, 2012 19:27
Show Gist options
  • Select an option

  • Save vertrigo/4261309 to your computer and use it in GitHub Desktop.

Select an option

Save vertrigo/4261309 to your computer and use it in GitHub Desktop.
program dynamic_structures;
type
student=record
fam,name,group:string[20];
year:integer;
sr:real
end;
pstud=^dstud;
dstud=record
s:student;
p:pstud
end;
var stud:student;
f,g:text;
st:string;
{Вспомогательная процедура разделения строки}
procedure get_string(st:string;var s:student);
var kod:integer;
begin
with s do
begin
fam:=copy(st,1,pos(' ',st)-1);
delete(st,1,pos(' ',st));
name:=copy(st,1,pos(' ',st)-1);
delete(st,1,pos(' ',st));
group:=copy(st,1,pos(' ',st)-1);
delete(st,1,pos(' ',st));
val(copy(st,1,pos(' ',st)-1),year,kod);
delete(st,1,pos(' ',st));
val(st,sr,kod)
end;
end;
{Вспомогательная процедура для вывода заголовка в файл}
procedure put_header(header:string);
begin
writeln(g,header);
writeln(g,'|-----------------------------------------------');
writeln(g,'| Фамилия | Имя | Группа | Г.р. | С.р. |');
writeln(g,'|-----------------------------------------------');
end;
{Вспомогательная процедура для вывода строки в файл}
procedure put_string(s:student);
begin
with s do
writeln(g,'|',fam:11,'|',name:9,'|',group:10,'|',year:6,'|',sr:6:1,'|');
end;
{Вспомогательная процедура для вывода последних данных в файл}
procedure put_sub;
begin
writeln(g,'|-----------------------------------------------');
writeln(g);
end;
{Работа со стеком}
procedure LIFO;
var pTop1,pTop,pHelp:pstud;
begin
reset(f);
{Начальное формирование}
new(pTop);
pTop^.p:=nil;
readln(f,st);get_string(st,stud);
pTop^.s:=stud;
{Добавление данных}
while not eof(f) do
begin
readln(f,st);get_string(st,stud);
new(pHelp);
pHelp^.p:=pTop;
pTop:=pHelp;
pTop^.s:=stud
end;
pTop1:=pTop;
{Извлечение всех данных}
put_header('Исходные данные для стека:');
repeat
stud:=pTop^.s;
put_string(stud);
pTop:=pTop^.p
until pTop=nil;
put_sub;
{Извлечение данных по условию и удаление стека}
pTop:=pTop1;
put_header('Студенты, чьи фамилии начинаются с буквы "И":');
repeat
stud:=pTop^.s;
if stud.fam[1]='И' then put_string(stud);
pHelp:=pTop;
pTop:=pTop^.p;
dispose(pHelp)
until pTop=nil;
put_sub
end;
{Работа с очередью}
procedure FIFO;
var pBegin1,pBegin,pEnd,pHelp:pstud;
begin
reset(f);
{Начальное формирование}
new(pBegin);
pBegin^.p:=nil;
readln(f,st);get_string(st,stud);
pBegin^.s:=stud;
pEnd:=pBegin;
{Добавление данных}
while not eof(f) do
begin
readln(f,st);get_string(st,stud);
new(pHelp);
pHelp^.p:=nil; pHelp^.s:=stud;
pEnd^.p:=pHelp;
pEnd:=pHelp
end;
pBegin1:=pBegin;
{Извлечение всех данных}
put_header('Исходные данные для очереди:');
repeat
stud:=pBegin^.s;
put_string(stud);
pBegin:=pBegin^.p
until pBegin=nil;
put_sub;
{Извлечение данных по условию и удаление очереди}
pBegin:=pBegin1;
put_header('Студенты, чьи фамилии начинаются с буквы "И":');
repeat
stud:=pBegin^.s;
if stud.fam[1]='И' then put_string(stud);
pHelp:=pBegin; pBegin:=pBegin^.p;
dispose(pHelp)
until pBegin=nil;
put_sub
end;
{Главная программа}
begin
assign(g,'result.txt');
{$i-}append(g);{$i+} if ioresult <> 0 then rewrite(g);
assign(f,'data.txt');
LIFO; FIFO;
close(f);close(g); writeln('Ok')
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment