Условие
Пусть элемент списка представлен следущим образом:
Telem=classПостроить двунаправленный список таким образом, чтобы, определив потомков класса Telem и не переопределяя сам список, можно было решить следующую задачу: по заданной строке текста сформировать список из элементов, соответсвующих типу потомка, и вывести на экран. Решение задачи должно быть представленно как метод класс Список:
private
Left,Right:Telem;
protected
// Здесь, возможно, описаны методы.
public
// Здесь, возможно, определены методы.
end;
Определить потомка 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;
Thead=class
private
First,Last:pTelem;
public
constructor Create;
procedure ProcessStr(var temp:textfile);
procedure Add(El:pTelem);
//procedure PrintList;
//destructor Destroy;
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 -