• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Строки

  • Автор темы Автор темы Dodje
  • Дата начала Дата начала

Dodje

Ученик
Регистрация
6 Май 2011
Сообщения
7
Реакции
0
Баллы
0
Строки

Доброго времени суток.
У меня возникла проблема с задачей,нужно ввести перед каждым восклицательным знаком слово "Привет".Я сделал,но получилось криво:"Привет пишется у меня только перед первым "!",а надо перед каждым.....что не так?
Program N71;
Uses crt;
Var
s,n:string;
i:integer;
Begin clrscr;
Writeln('Введите строку');
Readln(s);
n:='Привет';
for i:=1 to length(s) do
if s='!' then begin
insert(n,s,i);
end;
Writeln(s);
Readln;
End.
 
А не так вот что: Вы не учитываете, что после каждой вставки сбивается нумерация символов строки. Вот работающий вариант программы (кириллица заменена английским по причине проблем с кодировками. Исправьте, если надо):
Код:
Uses crt;
Var
 s,n:string;
 i:integer;
Begin
 clrscr;
 Writeln('Enter the string:');
 Readln(s);
 n:=' Hello';
 i:=0;
 Repeat
  Inc(i);
  if s[i]='!' then
   begin
    insert(n,s,i);
    Inc(i,Length(n));
   end;
 Until i=Length(s);
 Writeln(s);
 Readln;
End.
 
Да ..глупо написал) Не знал,как объяснить...
А Вы думаете, тут какая-то ирония? Да нет же, без всяких шуток - действительно красивое нешаблонное решение: идти по строке с "верхнего" конца. Тогда вставки не сбивают нумерацию, и всё получается. Я бы не додумался. Правда. Браво!
P.S. А еще есть операторы Dec(N) и Dec(N,m). Это когда не с плюсами, а с минусами, т.е. (N-1) и (N-m).
 
опа, Артем ты что ли? узнаю программу))))))
кстати я когда делал похожую задачу, мне паскаль вывел ошибку, что нужно вставить downto)
 
Назад
Сверху