Другие языки программирования и технологии

паскаль... строки...функция delete. не подскажете, почему в этой программе она не выполняется,что опять не так тут?(((

program Strings; var razd:set of char; kol_sl, i, kol_pal,dl_sl, beg_wrd : integer; st,wrd, inv_wrd : string; begin razd:=[' ',',','.',':','!']; writeln('введите строку'); Readln (st); kol_sl:=0; kol_pal := 0; i:=1; while (i <= length(st)) do begin dl_sl:=0; wrd := ''; inv_wrd := ''; beg_wrd :=i; while (i<=length(st)) and (not (st in razd)) do begin dl_sl:= dl_sl+1; wrd := wrd + st; inv_wrd := st + inv_wrd; i:=i+1; end; if dl_sl > 0 then begin kol_sl:= kol_sl+1; inv_wrd:= st+wrd; if wrd = inv_wrd then begin kol_pal := kol_pal + 1; if wrd=inv_wrd then delete(inv_wrd,kol_sl,kol_pal); end; writeln('это строка без палиндрома: '); writeln(st); readln; end; writeln('­пока'); readln; end; end.
Vpzhuk Pet
Vpzhuk Pet
1 714
if wrd = inv_wrd
then begin

kol_pal := kol_pal + 1;
if wrd=inv_wrd then delete(inv_wrd,kol_sl,kol_pal);
end;

Что у тебя делает 2-ой иф?
Я забыл значение оператора delete (ещё же есть Del), но если ты ответишь, тебе и самой станет понятнее.
1ый аргумент - это строка? почему инвертированная?
2ой аргумент - это позиция в строке? не надо ли увеличить указатель на 1?
Дмитрий Заболотских
Дмитрий Заболотских
26 625
Лучший ответ
Vpzhuk Pet второй иф потому что с ним прога работае нормально
Женя, не пренебрегай привести и условие задачи, а не только код. А то напоминает игру, когда одна размахивает руками, а другие стараются угадать, кого она изображает ;) Да еще через испорченный телевизор движка "Ответов" ;)

var s:string; i,n:integer; b:boolean;
begin
readln(s); i:=1;
repeat if s[ i]<'A' then delete(s,i,1) else inc(i); until i>length(s);
b:=true; n:=length(s); for i:=1 to n div 2 do if s[ i] <> s[n-i+1] then b:=false;
if b then writeln('It is a palinrom') else writeln('It is not a palindrom'); readln
end.

P.S. Сравнение я сделал без множеств, просто исходя из того, что все твои специальные знаки в алфавите имеют коды меньше, чем коды букв. Лучше делать более просто, чем более сложно ;)
Однако если вам нужны именно множества, то замени s[ i]<'A' на s[ i] in [' ',',','.',':','!'] , а еще лучше на s[ i] in [' '..'?'] , и не надо никакого специального объявления множества rasd.
Ar
Aretemman
89 659
Vpzhuk Pet я замучила тут всех)))))))))))) у меня получилось, удаляет слова-палиндромы,как надо! Но удаляет почему - то тока ОДНО а не все имеющиесяааа(((((( вот код...
program Strings;
var
razd:set of char;
kol_sl, i, kol_pal,dl_sl, beg_wrd : integer;
st,wrd, inv_wrd : string;

begin

razd:=[' ',',','.',':','!'];

writeln('‚ўҐ¤ЁвҐ бва®Єг ¤«п ®Ўа Ў®вЄЁ');
Readln (st);
kol_sl:=0;
kol_pal := 0;

i:=1;
while (i
Vpzhuk Pet then begin
kol_sl:= kol_sl+1;
inv_wrd:= st+wrd;

if wrd = inv_wrd
then begin

kol_pal := kol_pal + 1;
if wrd=inv_wrd then delete(inv_wrd,kol_sl,kol_pal);

end;

writeln('бва®Є  ЎҐ§ Ї «Ё­¤а®¬®ў: ');
writeln(inv_wrd);
readln;

end;
writeln('­ ¦¬ЁвҐ Enter ¤«п ўл室 ');
readln;

end;

end.
Vpzhuk Pet я делала все по алгоритму который в вузе дали! пусть все буит как требуют они....