Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 20.02.2013, 16:10   #1
spaincome
 
Регистрация: 20.02.2013
Сообщений: 4
По умолчанию Замена символов в строке

Текст задачи: Написать программу которая считав строку преобразует ее следующим образом:

строка анализируется и преобразуется сначала и до тех пор, пока не встретиться символ #. данный символ обязательно присутствует в строке ;

символ точки, преобразуется на символ восклицательный знак;

восклицательный знак преобразуется в «два восклицательных знака подряд»;

символ запятой, преобразуется в символ «+»;

И в конце вывести количество преобразований

Формат ответа: файл с исходным кодом решения задачи на одном из допустимых языков программирования.

ЯП:Pascal

Входные данные (программа должна считать):

STR (тип данных : строка) — Строка для преобразования. Длина строки не превышает 255 символов

Выходные данные (программа должна вывести):

Преобразованная строка согласно правилам и количество проделанных преобразований.

Значения должны быть выведены каждый раз с новой строки и соблюдая приведенную выше последовательность
spaincome вне форума Ответить с цитированием
Старый 21.02.2013, 09:30   #2
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 404
По умолчанию

Код:
...
i:=1;
while s[i]<>'#' do begin
  if s[i]='!' then begin
     insert('!',s,i);
     i:=i+1;
  end
  else if s[i]='.' then s[i]='!'
         else if s[i]=',' then s[i]='+';
  i:=i+1;
end;
...
Хотите отблагодарить, нажмите на весы
rubius2008 вне форума Ответить с цитированием
Старый 21.02.2013, 10:04   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

во-первых, не проверял, но боюсь, что код
Цитата:
Код:
  if s[i]='!' then begin
     insert('!',s,i);
     i:=i+1;
  end
приведёт к бесконечному циклу, пока память под строку не переполнится (будет вставляться восклицательный знак и на следующем шаге он же и будет обрабатываться, значит, будель вставляться восклицательный знак и т.д.

а во-вторых, вы забываете подсчитать количество операций...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.02.2013, 14:04   #4
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 404
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, не проверял, но боюсь, что кодприведёт к бесконечному циклу, пока память под строку не переполнится (будет вставляться восклицательный знак и на следующем шаге он же и будет обрабатываться, значит, будель вставляться восклицательный знак и т.д.

а во-вторых, вы забываете подсчитать количество операций...
а еще ниже
Код:
i:=i+1;
Хотите отблагодарить, нажмите на весы
rubius2008 вне форума Ответить с цитированием
Старый 21.02.2013, 14:15   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от rubius2008 Посмотреть сообщение
а еще ниже
Код:
i:=i+1;
ага. точно. правда Ваша, я не обратил внимание, что в конце цикла наращивание идёт при любом символе.



p.s. замечание про подсчёт количества операций остаётся в силе!
впрочем, думаю, что автор темы вполне в состоянии его добавить самостоятельно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.02.2013, 14:26   #6
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 404
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. замечание про подсчёт количества операций остаётся в силе!
впрочем, думаю, что автор темы вполне в состоянии его добавить самостоятельно.
Да, проглядел, согласен, пусть сам немного подумает
Хотите отблагодарить, нажмите на весы
rubius2008 вне форума Ответить с цитированием
Старый 21.02.2013, 17:57   #7
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

Пишу на Pascal.

Код:
uses crt;
const n = 5;
var  x:string;
     a:array[1..n] of string;
     i,k:integer;
begin
   clrscr;
   write('Введите 5 элементов(вместе с #): ') ;
   for i:=1 to n do
      readln(a[i]);
   for i:=1 to n do   begin
        if a[i]<>'#' then begin
            if a[i]='!' then begin
                a[i]:='!!';
                k:=k+1;
            end;
            if a[i]='.' then begin
                a[i]:='!';
                k:=k+1;
            end;
            if a[i]=',' then begin
                a[i]:='+';
                k:=k+1;
            end;
        end
        else break;
   end;
   for i:=1 to n do
       writeln(a[i]);
   write('  Кол-во преобразований: ',k);
end.
Попробуйте так.
PavelDD вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замена символов в строке(ячейке) pooli Microsoft Office Excel 6 27.09.2010 07:46
Замена во вводимой строке всех повторяющихся символов их восьмеричными представлениями. С++ AquaticSoul Помощь студентам 4 07.03.2010 22:48
Замена символов на слова в строке Shihmars Общие вопросы C/C++ 3 24.01.2010 18:51
TASM: Замена символов в строке. APTEMUC Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 18.01.2010 05:48
замена символов в строке euhenia Помощь студентам 3 30.11.2009 20:59


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS