![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Krjuger |
![]()
Сообщение
#1
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
В общем задача заключается в том что надо из текстового файла заполнить дек и взять последние "Б" элементов и записать их в стек.Суть вопроса заключается в том какую реализацию выбрать.первый скособ это создать процедуру котора берет элемент из дека и пишет в стек,а вторая уже выполняет первую до выполнения условия(достижение Б),либо сделать лиш одну процедуру,которая делает все сразу.
Вот описание стека и дека.Вопрос в том можно ли создать лиш одну буферную переменную или делать через две.каждого типа. |
![]() ![]() |
Krjuger |
![]()
Сообщение
#2
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Хорошо вот текстовый файл и оновленный вариант программы.
Код program laba11; Uses CRT; type DTree = record Data: integer; Name: string; stat: String; end; PTree = ^TTree; TTree = record head : DTree; left,right: PTree; end; var fin:text; temp:PTree; root:PTree; ch: char; Procedure Trash(var ch:char); begin if (ch =#13) or (ch =#10) or (ch =' ') or (ch =#0) then begin read(fin,ch); Trash(ch); end; end; Procedure ReadStat(var fin: text; ch : char; var str: string); begin str:=''; read(fin, ch); Trash(ch); str:=str+ch; repeat read(fin, ch); if not (ch = ' ') and not (ch=';') then str:=str+ch; until (ch=' ') or eoln(fin) or (ch=';'); end; Procedure ReadFile(var fin: text; ch : char; var str: string); begin str:=''; repeat read(fin, ch); if not (ch = ' ') and not (ch=';') then str:=str+ch; until (ch=' ') or eoln(fin) or (ch=';'); end; Procedure CreateNode(temp : PTree;var root:PTree); Begin new(root); root^.head.stat := temp^.head.stat; root^.head.name := temp^.head.name; root^.head.data := temp^.head.data; root^.left := nil; root^.right := nil; End; Procedure AddItem(Var root: PTree; temp: PTree); { Функция, создающая новый лист дерева с заданным значением Data } var parent, pwalk: PTree; Begin if root = nil then CreateNode(temp,root) else begin pWalk := root; { "гулять" начнем с корня } while pWalk <> nil do begin { пока не добрались до пустого указателя - делаем следующее } parent := pWalk; if pWalk^.head.stat='male' then pWalk := pWalk^.left else pWalk := pWalk^.right end; if temp^.head.stat='male' then CreateNode(temp,root^.left) else CreateNode(temp,root^.right); end; End; Procedure CreateTree(var root: PTree;var fin : text); var temp : PTree; begin new(temp); while not eof(fin) do begin readstat(fin,ch,temp^.head.stat); readfile(fin,ch,temp^.head.name); read(fin,temp^.head.data); AddItem(root,temp); end; end; procedure printKLP(root:PTree); begin if (root<>NIL) then (* Если дерево не пустое *) begin write(root^.head.name,' '); (* Распечатать корень дерево *) printKLP(root^.left); (* Распечатать левое поддерево *) printKLP(root^.right);(* Распечатать правое поддерево *) end; end; procedure printKLP_wrapper(root:PTree); begin clrscr; if (root=NIL) then (* Если дерево пустое *) writeln('Дерево пусто!') (* Сообщить об этом *) else (* Иначе *) PrintKLP(root); (* Распечатать дерево *) writeln; writeln('Нажмите любую клавишу для выхода в главное меню'); end; begin clrscr; chdir('C:\TPascal'); assign(fin,'test.txt'); reset(fin); CreateTree(root,fin); printKLP_wrapper(root); close(fin); readkey; end. Прикрепленные файлы ![]() |
![]() ![]() |
![]() |
Текстовая версия | 12.08.2025 8:22 |