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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2010, 03:04   #1
xkpukx
 
Регистрация: 11.12.2010
Сообщений: 3
По умолчанию

Известно, что в начале строки s длиной не более 40 находиться не более 20 латинских букв, за которыми следуют пробелы. Напечатать эту строку, предварительно добавив после каждой буквы q букву u а после каждой буквы u букву q. В случае превышения исходной длины строки, выдать сообщение об ошибке.

Код:
program zamena;
 
uses crt;
 
var
 
 
s:string;
 
begin
 
clrscr;
 
write('vvedite ne bolee 20 latinskix bukv=');  readln(s);
 
          while ((pos('q',s)>0) or (pos('u',s)>0)) do
          begin
 
               if pos('q',s)>0 then
               begin
               insert('u',s,pos('q',s));
               delete(s,21,pos(' ',s));
               end;
 
               if pos('u',s)>0 then
               begin
               insert('q',s,pos('u',s));
               delete(s,21,pos(' ',s));
               end;
          end;
 
 
 
if length(s)>40 then
writeln('oshibka perevishena dlina simvolov(40)')
else
writeln(s);
readln;
end.
Вообще написал как я думал решение данной задачи, еслиб не одно но, когда в строке появляется u или q программа тупо виснит( исправте плиз или наставте на путь истинный..

Последний раз редактировалось Stilet; 14.12.2010 в 08:54.
xkpukx вне форума Ответить с цитированием
Старый 14.12.2010, 09:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну и правильно виснет!

меняйте алгоритм обработки (как минимум - условие в цикле while)
примерно так:
Код:
  if Length(s)>40 then begin
    WriteLn('Ошибка ввода строки - строка должна быть короче 40 символов');
    Halt(1);
  end;

  i:=Pos(' ',s);
  if i<0 then begin
     WriteLn('Ошибка ввода строки - в конце должны быть пробелы');
     Halt(1);
  end;
  while i>=1 do begin
     if s[i] = 'q' then begin
        if length(s)=40 then
            WriteLn('строка достигла максимальной длины - добавлять нельзя!')
        else Insert('u', s, i+1)
     end
     else
       if s[i] = 'u' then begin
          if length(s)=40 then
              WriteLn('строка достигла максимальной длины - добавлять нельзя!')
          else Insert('q', s, i+1)
       end;
     dec(i); 
  end;

  WriteLn(s);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2010, 02:32   #3
xkpukx
 
Регистрация: 11.12.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну и правильно виснет!

меняйте алгоритм обработки (как минимум - условие в цикле while)
примерно так:
Код:
  if Length(s)>40 then begin
    WriteLn('Ошибка ввода строки - строка должна быть короче 40 символов');
    Halt(1);
  end;

  i:=Pos(' ',s);
  if i<0 then begin
     WriteLn('Ошибка ввода строки - в конце должны быть пробелы');
     Halt(1);
  end;
  while i>=1 do begin
     if s[i] = 'q' then begin
        if length(s)=40 then
            WriteLn('строка достигла максимальной длины - добавлять нельзя!')
        else Insert('u', s, i+1)
     end
     else
       if s[i] = 'u' then begin
          if length(s)=40 then
              WriteLn('строка достигла максимальной длины - добавлять нельзя!')
          else Insert('q', s, i+1)
       end;
     dec(i); 
  end;

  WriteLn(s);

спс за указания, пока не чего не меняет, ну буду думать что изменить в предложенном варианте..
xkpukx вне форума Ответить с цитированием
Старый 15.12.2010, 07:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
спс за указания, пока не чего не меняет, ну буду думать что изменить в предложенном варианте..
1) она и не должна ничего менять!
в задании что сказано?!
Цитата:
добавив после каждой буквы q букву u а после каждой буквы u букву q.
вот предложенный вариант и ДОБАВЛЯЕТ буковки

2) в задании речь идёт о "маленьких" (строчных) буквах, поэтому в коде проверяется наличие только малых букв q и u

3) и последнее... Алгоритм ищет первый пробел в строке.
По заданию в строчке буквы, в конце пробелы(пробелы).
Если Вы ошибочно введёте пробел в середину строки (между буквами), то обрабатываться буде только та часть строки, которая слева от пробела (обработка будет идти от этого серединного пробела к началу строки).
Если хотите - можно добавить проверку на то, что между букв в строке нет пробелов...
всё в ваших руках!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена Яр|/||< (^_^) Паскаль, Turbo Pascal, PascalABC.NET 3 22.09.2009 13:25
ЗАМЕНА ing60 Microsoft Office Excel 3 22.04.2009 12:41
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
Замена Патрон Общие вопросы Delphi 6 05.11.2008 15:45
Замена Dr.Badnezz Общие вопросы Delphi 11 23.09.2008 17:17