1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| Krjuger |
17.05.2009 16:54
Сообщение
#1
|
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
В общем задача заключается в том что надо из текстового файла заполнить дек и взять последние "Б" элементов и записать их в стек.Суть вопроса заключается в том какую реализацию выбрать.первый скособ это создать процедуру котора берет элемент из дека и пишет в стек,а вторая уже выполняет первую до выполнения условия(достижение Б),либо сделать лиш одну процедуру,которая делает все сразу.
Вот описание стека и дека.Вопрос в том можно ли создать лиш одну буферную переменную или делать через две.каждого типа. |
![]() ![]() |
| Krjuger |
21.05.2009 18:49
Сообщение
#2
|
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Хорошо вот текстовый файл и оновленный вариант программы.
Код 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. Прикрепленные файлы
test.txt ( 212 байт )
Кол-во скачиваний: 194 |
Krjuger Задача на стек и дек. 17.05.2009 16:54
volvo Я уже задавал тебе этот вопрос, ты решил, что лучш... 17.05.2009 18:44
Krjuger Не, стек и дек обязательно должны быть,это принцип... 17.05.2009 21:38
volvo Нет, конечно... В смысле, неправильно. Сам же сказ... 18.05.2009 22:24
Krjuger Могу удивить он компилируется в легкую.Так насчет ... 18.05.2009 22:28
volvo Ты сказки-то будешь внукам рассказывать... Это ком... 18.05.2009 22:59
Krjuger Вот полная прога.Теперь, вроде, стек заполняется ,... 19.05.2009 12:50
volvo Если б работало так, как задумывал, может и пригод... 20.05.2009 17:38
Krjuger
Извини,с этим разделом я не знаком.Программа рабо... 20.05.2009 19:11
volvo Ты файл test.txt наконец покажешь или нет? Я ж не ... 21.05.2009 18:29
volvo В результате ты хочешь получить вот такой результа... 21.05.2009 19:04
Krjuger Вообще мне необходимо получить генеагогическое де... 21.05.2009 20:01
volvo Значит, так. Дерево создается неправильно, пересма... 21.05.2009 20:26
Krjuger В общем я почитал пяток другой факов и немного пер... 22.05.2009 15:42
volvo Если , то дерево в принципе не будет заполняться, ... 22.05.2009 16:49
Krjuger
Да это мой косяк,добавить добавил а упомянуть об ... 22.05.2009 17:22
Krjuger Вроде я понял о чем ты так усердно пытался мне ска... 22.05.2009 18:47
Krjuger При этом,если сделать в процедуре
Procedure AddS... 22.05.2009 19:24![]() ![]() |
|
Текстовая версия | 10.12.2025 22:32 |