Что-то не получается... Условие Пусть элемент списка представлен следущим образом:
Telem=class private Left,Right:Telem; protected // Здесь, возможно, описаны методы. public // Здесь, возможно, определены методы. end;
Построить двунаправленный список таким образом, чтобы, определив потомков класса Telem и не переопределяя сам список, можно было решить следующую задачу: по заданной строке текста сформировать список из элементов, соответсвующих типу потомка, и вывести на экран. Решение задачи должно быть представленно как метод класс Список: Определить потомка TStrElem (звено,содержащие строку). Выбираются только те слова, которые не могут быть трактованы как целый числа или как логические значения (true и false).
Решение: модуль:
unit Uelem; interface
uses SysUtils,Classes;
type TStr=string[255]; pTelem=^Telem; Telem=class private Left,Right:pTelem; public constructor Create(var Elem:Tstr); end;
pTStrElem=^TStrElem; TStrElem=class(Telem) info:TStr; public constructor Create(var Elem:TStr); end;
implementation
constructor Telem.Create; begin Left:=nil; Right:=nil; end;
constructor Thead.Create; begin First:=nil; Last:=nil; end;
procedure Thead.Add(El:pTelem); begin if First=nil then begin First:=El; Last:=El; end else begin Last.Right:=El; El.Left:=Last; El.Right:=nil; end; end;
constructor TStrElem.Create(var Elem:TStr); begin info:=Elem; end;
procedure Thead.ProcessStr(var temp:textfile); const razdeliteli=[' ',',','.','!','?','-',';']; var str,cur_word:TStr; i,z:integer; ok_int,ok_bool:boolean;newEl: pTStrElem; begin reset(temp); readln(temp,str); cur_word:='';i:=1; while i<=length(str) do begin while str[i] in razdeliteli do inc(i); while (i<=length(str)) and not (str[i] in razdeliteli) do begin cur_word:=cur_word+str[i]; inc(i); end; ok_int:=false; ok_bool:=false; for z:=1 to i do if (cur_word[z]>='0') and (cur_word[z]<='9') then ok_int:=true; if (cur_word='true') or (cur_word='false') then ok_bool:=true; if (not ok_int) and (not ok_bool) then begin new(newEl); newEl:=TStrElem.Create(cur_word); Add(newEl); end; end; closefile(temp); end; end.
главная программа:
program Project1;
uses windows, Uelem,Classes;
var Head:Thead; f:textfile;
begin setconsolecp(1251); setconsoleoutputcp(1251); AssignFile(f,'input.txt'); Head:=Thead.create; Head.ProcessStr(f); end.
Не могли бы мне подсказать, как это сделать. И возможно ли преобразование типов? И что не так у меня с классом как список?
Сообщение отредактировано: volvo - 28.11.2009 11:52