Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Строки (http://www.tehnari.ru/f41/t51341/)

Dodje 06.05.2011 23:42

Строки
 
Доброго времени суток.
У меня возникла проблема с задачей,нужно ввести перед каждым восклицательным знаком слово "Привет".Я сделал,но получилось криво:"Привет пишется у меня только перед первым "!",а надо перед каждым.....что не так?
Цитата:

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[i]='!' then begin
insert(n,s,i);
end;
Writeln(s);
Readln;
End.

Vladimir_S 07.05.2011 11:55

Цитата:

Сообщение от Dodje (Сообщение 515763)
что не так?

А не так вот что: Вы не учитываете, что после каждой вставки сбивается нумерация символов строки. Вот работающий вариант программы (кириллица заменена английским по причине проблем с кодировками. Исправьте, если надо):
Код:

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.


Dodje 07.05.2011 18:07

спасибо,но такое с INC мы еще не проходили,но у меня все заработало когда я в цикле поменял порядок цикла
то есть строчку
Цитата:

for i:=1 to length(s) do
написал как
Цитата:

for i:=length(s) downto 1 do
Вдруг кому пригодится)

Vladimir_S 07.05.2011 18:40

Цитата:

Сообщение от Dodje (Сообщение 516234)
спасибо,но такое с INC мы еще не проходили,

Inc(N) это то же, что N:=N+1;
Inc(N,m) это то же, что N:=N+m;
Цитата:

но у меня все заработало когда я в цикле поменял порядок цикла
Остроумно. Даже красиво. Поздравляю!

Dodje 07.05.2011 18:54

Цитата:

Сообщение от Vladimir_S (Сообщение 516252)
Inc(N) это то же, что N:=N+1;
Inc(N,m) это то же, что N:=N+m;

Буду знать теперь. :)
Цитата:

Остроумно. Даже красиво. Поздравляю![
Да ..глупо написал)
Не знал,как объяснить...

Vladimir_S 07.05.2011 19:58

Цитата:

Сообщение от Dodje (Сообщение 516258)
Да ..глупо написал) Не знал,как объяснить...

А Вы думаете, тут какая-то ирония? Да нет же, без всяких шуток - действительно красивое нешаблонное решение: идти по строке с "верхнего" конца. Тогда вставки не сбивают нумерацию, и всё получается. Я бы не додумался. Правда. Браво!
P.S. А еще есть операторы Dec(N) и Dec(N,m). Это когда не с плюсами, а с минусами, т.е. (N-1) и (N-m).

Андрей Романюк 13.05.2011 19:48

опа, Артем ты что ли? узнаю программу))))))
кстати я когда делал похожую задачу, мне паскаль вывел ошибку, что нужно вставить downto)


Часовой пояс GMT +4, время: 12:42.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.