1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
В общем задача заключается в том что надо из текстового файла заполнить дек и взять последние "Б" элементов и записать их в стек.Суть вопроса заключается в том какую реализацию выбрать.первый скособ это создать процедуру котора берет элемент из дека и пишет в стек,а вторая уже выполняет первую до выполнения условия(достижение Б),либо сделать лиш одну процедуру,которая делает все сразу.
var fin : text; root : TTree; list : Tinf; walk : TTree; {-------------------------------------------------------------------------} Procedure ReadFile(var fin: text; var str: string); var tmp: char; begin str:=''; repeat read(fin, tmp); if not (tmp = ' ') and not (tmp=';') then str:=str+tmp; until (tmp=' ') or eoln(fin) or (tmp=';'); end;
Procedure Show(List: TInf);{Отображение данных записи} Begin Write(List.pol,' ',List.name,' ',list.BirthB,' ',list.BirthD); WriteLn; {Перевод строки} End;
Procedure Input(Var list: TInf);{Заполнение записи путём ввода данных из файла} Begin Readfile(fin,list.pol); Readfile(fin,list.name); Read(fin,list.BirthB); Read(fin,list.BirthD); readln(fin); End;
Function SignKey(B: TInf): Boolean; Begin SignKey:=False; If B.pol='male' then SignKey:=True; End;
Function FindKey(A: TInf): Boolean; Begin FindKey:=False; If (A.BirthB<1942) and (A.BirthD>1942) then FindKey:=True; End;
Function NewSheet(X:TInf): TTree; {размещение в куче нового элемента} Var Temp: TTree; Begin New (Temp); Temp^.Inf:=X; Temp^.Right:=Nil; Temp^.Left:=Nil; NewSheet:=Temp; End;
Procedure AddSheet(Var Root: TTree; tmp: TInf);{размещение нового элемента (листа) в структуре} Begin If Root<>Nil then begin If SignKey(tmp) then begin If Root^.Left=Nil then Root^.Left:=NewSheet(tmp) else AddSheet(Root^.Left,tmp); end else begin If Root^.Right=Nil then Root^.Right:=NewSheet(tmp) else AddSheet(Root^.Right,tmp); end; end else begin {дерево не создано, создаем его} Root:=NewSheet(tmp); end; End;
Procedure AddTree(Var Root: TTree; New: TTree);{размещение нового в структуре} Begin If Root<>Nil then begin If New<>Nil then begin If SignKey(New^.Inf) then begin If Root^.Left=Nil then Root^.Left:=New else AddTree(Root^.Left,New); end else begin If Root^.Right=Nil then Root^.Right:=New else AddTree(Root^.Right,New); end; end; end else begin {дерево не создано, пытаемся создать его} Root:=New; end; End;
Function Find(Root: TTree): TTree;{Поиск элемента} Var temp: Ttree; Begin temp:=Nil; If Root<>Nil then begin {Если дерево не пустое} If FindKey(Root^.Inf) then begin {Проверяем значение ключевого поля} temp:=Root; {Если нашли нужный элемент, запоминаем его значение} end else begin {если не нашли} temp:=Find(Root^.Left); {пытаемся найти в других ветвях дерева (сначала слева)} If temp=Nil then temp:=Find(Root^.Right); {Потом справа, если слева ничего не нашли} end; end; Find:=temp; {Результат функции - значение временной переменной temp} End;
Procedure ShowTree(R: TTree); {Вывод дерева на экран} Begin If R<>Nil then begin {Если ветвь не пуста} Show(R^.Inf); {выводим информацию} If R^.Left <> nil then ShowTree(R^.Left); {если слева имеется сук, выводим и его} If R^.Right <> nil then ShowTree(R^.Right);{тоже самое справа...} end; End;
Procedure Print(T: TTree; g: integer); {Печать дерева. G-глубина (по лекции)} Begin If T=nil then Writeln ('Дерево пустое') else begin g:=g+1; If T^.Right <> nil then Print (T^.Right, g);
Writeln (T^.Inf.pol,' ', T^.Inf.name); If T^.Left <> nil then Print (T^.Left,g);
begin ClrScr; {Основная программа} assign(fin,'C:\Tpascal\test.txt'); reset(fin); Root:=Nil; {Начальные условия - пустое дерево} while not eof(fin) do begin {В цикле вводим записи } Input(list); AddSheet(Root,list);{Добовляем данные} end; WriteLn; WriteLn('Введённые данные: '); ShowTree(Root); WriteLn; ReadLn;
WriteLn('Отображение в виде дерева:'); Print(Root,0); ReadLn;
Walk:=Find(Root); If Walk=Nil Then WriteLn('Элемент не найден.');