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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2013, 07:46   #1
Uzver004
 
Регистрация: 02.01.2013
Сообщений: 4
Вопрос Ошибка 42 в процедуре delete

Задача: Удвоить кол-во символов "о" в задаваемом тексте. Вот мой код, на коменты по прежнему внимания не обращайте, это для преподавателя.

Код:
program lr3_3; {Заголовок программы}
  uses crt; {Подключение модуля управления экраном}
  var s,s1,s2:string; i,j,n:integer; k:byte; {Раздел описания переменных}
begin {Начало программы}
  clrscr; {Очистка экрана}
  writeln('Программа удвоения символа "о" в задаваемой пользователем строке текста, с последующим подсчетом кол-ва символов');
  write('Введите исходную строку:'); {Вывод на экран пользовательского текста}
  readln(s); {Считывание строки}
  for i:=1 to length(s) do
    if s[i]='o' then
      begin
        n:=length(s)-i;
        s1:=delete(s,i,n);
        s2:=copy(s,i,n);
        s:=concat(s1,'o',s2);
        i:=i+2
      end;
  k:=length(s);
  writeln('Полученная строка:'); {Вывод на экран пользовательского текста}
  writeln(s); {Вывод на экран обновленной строки}
  writeln('Кол-во символов в обновленной строке k=',k); {Вывод на экран результата}
  readln {Задержка изображения на экране}
end. {Конец программы}
На подчеркнутом участке останавливается, зараза. Я думаю что и на ф-ции copy тоже скорее всего остановится. Опять же с типами вроде все в порядке. Не пойму в чем дело. Компилировал в ТП7. Смотрел примеры для FreePascal, так там вобще эту процедуру еще до тела программы объявляют - зачем? Неужели она не стандартная?
Uzver004 вне форума Ответить с цитированием
Старый 04.01.2013, 08:48   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

На ваш алгоримт не всматривался. (но все на первый взгляд замудренно)
delete - процедура, а не функция.
А вы вызываете ее как функцию.
Цитата:
Смотрел примеры для FreePascal, так там вобще эту процедуру еще до тела программы объявляют - зачем? Неужели она не стандартная?
Что в вашем понимании "объявляют"?
Ее вызов или же описание самой п/п? (тогда просто для демонстрации описали свою польз. процедуру и ее же в дальнейшем используют)
Скорей всего ее просто использовали, так как это требовалось для реализации алгоритма решения поставленной задачи.

Последний раз редактировалось Базиля; 04.01.2013 в 08:53.
Базиля вне форума Ответить с цитированием
Старый 04.01.2013, 11:06   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
...
readln(s); {Считывание строки}
for i:=length(s) downto 1 do
    if s[i]='o' then insert('o', s, i);
k:=length(s);
...
eoln вне форума Ответить с цитированием
Старый 05.01.2013, 01:20   #4
Uzver004
 
Регистрация: 02.01.2013
Сообщений: 4
По умолчанию

eoln, огромное спасибо! Все работает на ура, не могу только понять почему мой препод в своей кривой методичке (там примеры даже не в едином стиле выполнены, явно с инета надергал) не указал такую замечательную команду insert.
В общем я все понял, надо еще и в книгах покопаться, методы мало иногда оказывается!

to Базиля :
я еще раз пересмотрел тот пример, там видимо как раз то о чем вы говорили:
Цитата:
тогда просто для демонстрации описали свою польз. процедуру и ее же в дальнейшем используют
Uzver004 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в процедуре C++ Karina89 Помощь студентам 4 24.11.2011 18:25
Ошибка в процедуре Yalovick Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2011 20:38
Ошибка в процедуре H_U_M_M_E_R Помощь студентам 2 02.06.2010 18:51
Ошибка в процедуре GAGARIN-NEW Помощь студентам 2 21.12.2007 09:23