Created
December 11, 2012 19:27
-
-
Save vertrigo/4261309 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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