Показать сообщение отдельно
иксуй!
Аватар для иксуй!
Сообщения: 9,553
Регистрация: 23.11.2007
Старый пост, нажмите что бы добавить к себе блог 6 октября 2011, 18:04
  #1602 (ПС)
-Цитата от The_Drot Посмотреть сообщение
Помогите, пожалуйста, школоте:
Нужно в паскале написать программу заменяющую в заданной строке все вхождения "ку" на "за" с помощью операции копирования, удаления и вставки.
как пытался сделать я:
Показать скрытый текст
program xz;
uses crt;
var a,b,c,s:string; i,d,q:integer;
begin
readln(a);
c:='za';
d:=length(a);
for i:=1 to d do
b:=copy(a,i,2);
if b='ky' then begin q:=pos(b,a);
a:=delete(a,q,2);
a:=insert(c,a,q);
(здесь ошибка 42)
end;
writeln(a);
readkey;
end.

а что ты присваиваешь, если у тебя delete и insert это процедуры и ничего не возвращают? они просто обрабатывают строку, переданную им.
это первое.
во-вторых избавляйся от таких имён переменных, которые ничего не говорят.
цикл у тебя только лишь копирует элементы и всё, ты begin там не поставил.
Вот так всё работает:
Код:
program xz;
uses crt;
var a,b,c,s:string; i,d,q:integer;
begin
  readln(a);
  c:='za';
  d:=length(a);
  for i:=1 to d do begin
      b:=copy(a,i,2);
      if b='ky' then begin
          q:=pos(b,a);
          delete(a,q,2);
          insert(c,a,q);
      end;
  end;
writeln(a);
readkey;
end.
А красивее так:
Показать скрытый текст

Код:
program xz;
uses crt;
var ins_sstr,curr_sstr,s:string;
     i,len,curr_pos:integer;
begin
  readln(s);
  ins_sstr:='za';
  len:=length(s);
  for i:=1 to len do begin
      curr_sstr:=copy(s,i,2);
      if curr_sstr='ky' then begin
          curr_pos:=pos(curr_sstr,s);
          delete(s,curr_pos,2);
          insert(ins_sstr,s,curr_pos);
      end;
  end;
writeln(s);
readkey;
end.

offline
Ответить с цитированием