1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 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('Элемент не найден.');