Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Задача: на символьную обработку


Автор: ADAfonin 17.10.2006, 23:46
Суть задачи:

Удалить все слова, которые начинаются и заканчиваются одной и той же буквой, и продублировать все остальные слова.


Код

Program                                       labaratornayarabora_pyat;
Var
  r, z, w, st: string;
 b, i, j, d, l: integer;
    begin 
      readln (st);
      st:=st + ‘ ‘;
      l:=length(st);
i:=1;
while i <= l do
    begin
      b:=i;
      While st[i] < > ‘ ‘ do
      i: = i +1;
d:=i-B;
Copy:=W(st, b, d);
V:=’’;
For j:=1 to d do
If W[1]=W[n] then
V:=V+W[j];
If m > 0 then
Delete (st, b, d);
Insert (v, st, b);
I:=i-d+m;
End;
End;
End;
I:=i+1;
End;
Writeln (st);
End.


Не работает, что не так? Может я что-то не так сделал?
Заранее благодарен.

Автор: Coder 18.10.2006, 02:31
где храняться слова? каждое слово нужно вводить с клавиатуры? что это за конструкция Copy:=W(st, b, d);

если писать программу строго следуя: "Удалить все слова, которые начинаются и заканчиваются одной и той же буквой, и продублировать все остальные слова.", то:
Код

var
  st : string;
begin
  readln(st);
  if st[1]=st[length(st)] then
    // удалить откуда-то это слово
  else
    writeln(st);// продублировать .... на экране
end.



Автор: Zero 18.10.2006, 13:17
ADAfonin, мюдрёная слишком у тебя прога... smile хотел переделать, чтобы тебе понятнее было, но всётаки, лучше без наворотов сделать как надо:
Код

program pr;
var
  s,buf:string;
Begin
  write('Введите строку S: ');
  readln(s);
  s:=s+' ';
  while s<>'' do
    begin
      buf := copy(s,1,pos(' ',s)-1);
      delete(s,1,pos(' ',s));
      if buf[1] <> buf[length(buf)] then
        write(buf,' ');
    end;
end.

Автор: volvo877 18.10.2006, 15:15
Цитата(Coder @  18.10.2006,  01:31 Найти цитируемый пост)
если писать программу строго следуя: "Удалить все слова, которые начинаются и заканчиваются одной и той же буквой, и продублировать все остальные слова.", то:
То ЧТО? Ты вводишь строку, сравниваешь первый и последний символ СТРОКИ, и что этим добиваешься?

А я введу
"start test finish sos", что сделает твоя программа?

Автор: Hidrag 18.10.2006, 16:33
Код не проверял писал сразу  на форум, но думаю должно работать...

Код

program proga;
var
  strstart, strend,temp,slovo:String;
  i:integer;

procedure builder(s:string);
var
  a,b:string;
begin
  a:=copy(s,1,1);
  b:=copy(s,length(s)-1,1);
  if a<>b then strend:=strend + s+' '+s+' ';
end;

BEGIN
  Readln(strstart);
  strend:='';
  temp:='';
  slovo:='';
  for i:=1 to Length(strstart) do begin
    temp:=copy(strstart,i,1);
    if temp<>' ' then slovo:=slovo+temp
    else begin
      Builder(slovo);
      slovo:='';
    end;
  end;
  Writeln(strend);
END.

Автор: volvo877 18.10.2006, 17:34
Цитата(Hidrag @  18.10.2006,  15:33 Найти цитируемый пост)
думаю должно работать...

Не работает оно... Вот результат:
Код
start test finish sos
start start test test finish finish
И что? test удалился? Нет, продублировался...

Автор: Zero 18.10.2006, 18:25
Господа, что вы паритесь над 2*2, я уже привёл рабочую прогу.

Автор: Hidrag 18.10.2006, 19:10
Zero, Почитай внимательно условие задачи....

Вот подправил:
Код

program Project1;

var
  strstart, strend,temp,slovo:String;
  i:integer;

procedure builder(s:string);
var
  a,b:string;
begin
  a:=copy(s,1,1);
  b:=copy(s,length(s),1);
  if a<>b then strend:=strend + s+' '+s+' ';
end;

begin
  Readln(strstart);
  strend:='';
  temp:='';
  slovo:='';
  for i:=1 to Length(strstart) do begin
    temp:=copy(strstart,i,1);
    if temp<>' ' then slovo:=slovo+temp
    else begin
      Builder(slovo);
      writeln(slovo);
      slovo:='';
    end;
  end;
  Writeln(strend);
  readln;
end.

Автор: Zero 18.10.2006, 19:30
Цитата(Hidrag @  18.10.2006,  20:10 Найти цитируемый пост)
Почитай внимательно условие задачи....

И что же там не так???

Автор: Hidrag 18.10.2006, 20:32
Zero, 
Цитата(ADAfonin @  17.10.2006,  23:46 Найти цитируемый пост)
 и продублировать все остальные слова.


Вот этот момент пропустил...

Автор: Coder 19.10.2006, 06:25
Цитата(volvo877 @ 18.10.2006,  15:15)
Цитата(Coder @  18.10.2006,  01:31 Найти цитируемый пост)
если писать программу строго следуя: "Удалить все слова, которые начинаются и заканчиваются одной и той же буквой, и продублировать все остальные слова.", то:
То ЧТО? Ты вводишь строку, сравниваешь первый и последний символ СТРОКИ, и что этим добиваешься?

А я введу
"start test finish sos", что сделает твоя программа?

все, понял, был не прав.
[я не до конца понял задачу - откуда должны поступать слова]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)