Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2012, 20:09   #1
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию добавить в программу выполнение задачи

задача такая: дано текст, который заканчивается знаком %. Среди слов этого текста знак * означает, что предыдущее слово следует удалить, а если знаков несколько подряд, удаляются несколько слов. вывести тот же текст в обратном порядке с учетом знаков *.
вот мои наработки:
Код:
type
  file=text;
   el=string;
    link=^blist;
    blist=record
     inf:el;
     next:link;
     pred:link;
    end;
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f:file;
  u:Char; sp:link; n:Integer;

implementation

{$R *.dfm}

procedure init_file(var nf:file);
var b:Char;
begin
  Rewrite(nf);
  while not Eof do
   begin
      read(b);
      write(nf,b);
   end;
Close(nf); Reset(Input);
end;
procedure inbefor(var young, old:link);//вставка перед
begin
  young^.next:=old;
  young^.pred:=old^.pred;
  old^.pred^.next:=young;
  old^.pred:=young;
end;
procedure init_sp(var nf:file; var l:link);
var a:Char; n:string; q:link;
begin
  n:='';
  Reset(nf);
  while not Eof(nf) do
   begin
     read(nf,a);
     write(a);
     if a<>' '
     then n:=n+a;
     if a=' ' then
      begin
        New(q);
        q^.inf:=n;
        inbefor(q,sp);
        n:='';
      end;
   end;
 New(q);
 q^.inf:=n;
 inbefor(q,sp);
 Close(nf); Reset(Input);
end;
procedure Dr_sp(var l:link);//печать списка в противоположном направлении
begin
 while(l^.pred<>nil) do
   begin
     write(l^.inf,' ');
   end;
  write(l^.inf);
end;
procedure Dr_sp2(var l:link);//печать списка
begin
  while(l^.next<>nil) do
   begin
     write(l^.inf,' ');
     l:=l^.next;
   end;
  write(l^.inf);
end;
procedure Delete(var old:link);
begin
  old^.next^.pred:=old^.pred;
  old^.pred^.next:=old^.next;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
new(sp);
sp^.inf:='';
sp^.next:=nil;
sp^.pred:=nil;
Assign(f,'c:data');
init_file(f);
init_sp(f,sp);
 Dr_sp(sp);
//тут нужно, чтобы выполнялось основное условие задачи, но я не могу понять, во-первых, как сделать, 
//чтобы начальный список выводился в Memo1, а переделанный в Memo2. также помогите с тем, чтобы
// разделять на слова , потом то понятно, что if символ='*' then delete(предыдущее слово), но вот что тут написать тоже неясно.
end.
поможете?

Последний раз редактировалось Stilet; 13.10.2012 в 20:53.
gylayko вне форума Ответить с цитированием
Старый 13.10.2012, 20:55   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Я так понимаю везде идет работа со списком sp?
Цитата:
чтобы начальный список выводился в Memo1
Код:
While sp <> nil do
Begin
  Memo1.Lines.Add(sp^.inf);
  sp:=sp^.next
End;
Разделять строки на слова( я так понимаю из того же списка) можно примерно так
Код:
while sp <> nil do
Begin
  tmpst:=sp^.inf;
  for i:=1 to Length(tmpst) do
    if (tmpst[i] <> ' ') and (tmpst[i] <> '*') then newword:=newword+tmpst[i] //cчитаем что разделителем  является пробел. Лучше конечно проверять на целую группу разделителей.
   else
  if (tmpst[i] = '*') then //удаляем предыдущие слова
  sp:=sp^.next
End;
Код несовершенен, но надеюсь идея ясна. Еще я бы например найденные в строке слова хранил в массиве(думаю от туда их будет легче удалять). А после того как пробежались по всем символам строки, из оставшихся элементов массива(если они конечно) формируем новую строку и заносим её в Memo2
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить 1 переменную в программу (делфи) TonyF Помощь студентам 2 08.06.2012 20:55
добавить в трей программу kta87 Общие вопросы Delphi 11 22.03.2012 18:33
Нужно добавить объект в программу Jumper9091 Паскаль, Turbo Pascal, PascalABC.NET 1 18.03.2012 15:29
Добавить в программу сортировку Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 2 16.03.2012 22:59
Распараллелить выполнение задачи и осуществить синхронизация подзадач по сети. UDP. [C++ Builder] Radisson Фриланс 1 12.01.2012 04:51