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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2008, 23:42   #1
fleur
 
Регистрация: 17.12.2008
Сообщений: 3
По умолчанию замена ph на f, ed на ing

Помогите, пожалуйста, решить задачу:

type stroka=packed array[1..80] of char;
var s:stroka;

Известно, что в начале строки s находится не более 40 латинских букв, за которыми следуют пробелы. Напечатать эту строку, заменив все вхождения ph на f, а все вхождения ed на ing.

Я написала так:

uses
SysUtils;
type
stroka=packed array[1..80] of char;
var
s:stroka;
kol,i:integer;
a,b:char;
begin
kol:=0;
writeln('vvesti stroku');
for i:=1 to 80 do
begin
read(s[i]);
if (s[i]>'a') and (s[i]<'z') then kol:=kol+1
end;
if kol>40 then writeln('oshibka')
else
begin
i:=1;
while i<=80 do
begin
if s[i]='p'then
if s[i+1]='h' then
begin
s[i]:='f';
while (i+1)<80 do
begin
s[i+1]:=s[i+2];
i:=i+1
end;
s[80]:=' '
end;
if s[i]='e' then
if s[i+1]='d' then
begin
s[i]:='i';
s[i+1]:='n';
a:=s[i+2];
b:=s[i+3];
s[i+2]:='g';
while (i+3)<=80 do
begin
s[i+3]:=a;
a:=b;
if (i+4)<=80 then b:=s[i+4];
i:=i+1
end
end;
i:=i+1
end
end;
writeln('novaya stroka:');
for i:=1 to 80 do
if s[i]=' ' then write('=') {это для препода, чтобы он видел,что там пробелы}
else write(s[i])
end.

Но после введения строки программа сама закрывается
Что делать?
fleur вне форума Ответить с цитированием
Старый 18.12.2008, 00:30   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Но после введения строки программа сама закрывается
Что делать?
просто допишите в конце программы:
Код:
WriteLn('For continue press ENTER');
Readln;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2008, 00:40   #3
fleur
 
Регистрация: 17.12.2008
Сообщений: 3
По умолчанию

спасибо, попробовала, но все то же самое.
чисто для проверки убирала сам цикл замены этих вхождений, но даже так строка не печатается..(((
fleur вне форума Ответить с цитированием
Старый 18.12.2008, 23:48   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а скажите, чем Вам тип String не угодил?! зачем Вам свой тип Stroka ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.12.2008, 00:24   #5
fleur
 
Регистрация: 17.12.2008
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а скажите, чем Вам тип String не угодил?! зачем Вам свой тип Stroka ?!
это не я тип создавала, в задаче такое условие:
type stroka=packed array[1..80] of char;
var s:stroka;

кстати, задачу доработала, теперь меняет что надо, но только первое встречающееся сочетание
да, плохой из меня программист..
fleur вне форума Ответить с цитированием
Старый 21.12.2008, 11:39   #6
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

Держи подправленную твою программу:
Код:
uses crt;
type
  stroka= string[80];
var
  s:stroka;
  i,j:integer;

begin
  clrscr;
  writeln('vvesti stroku');
  readln(s);

  for i:=1 to 80 do
    if ((s[i]<'a')or(s[i]>'z'))and((s[i]<'A')or(s[i]>'Z')) then break;

  if i>40 then writeln('oshibka')
  else
  begin
    i:=1;
    while i<80 do
    begin
      if (s[i]='p')and(s[i+1]='h') then
      begin
        s[i]:='f';
        for j:=i+1 to 79 do
          s[j]:=s[j+1];
        s[80]:=' ';
      end;

      if (s[i]='e')and(s[i+1]='d')and(i<79) then
      begin
        s[i]:='i';
        s[i+1]:='n';
        for j:=80 downto i+3 do
          s[j]:=s[j-1];
        s[i+2]:='g';
        i:=i+2;
      end;
      i:=i+1;
    end;
    writeln('novaya stroka:');
    for i:=1 to 80 do
      if s[i]=' ' then write('=')
      else write(s[i]);
  end;
  readkey;
end.
Будут вопросы - спрашивай
Да, и еще, скажи честно, ты сама программу писала?
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)

Последний раз редактировалось bag; 21.12.2008 в 11:51.
bag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена Патрон Общие вопросы Delphi 6 05.11.2008 15:45
Замена Dr.Badnezz Общие вопросы Delphi 11 23.09.2008 17:17
Замена по маске Drain Общие вопросы Delphi 1 14.02.2008 16:08
ЗАмена в мемо Drain Общие вопросы Delphi 2 29.01.2008 16:22
Замена переменных NoName_emaNoN Win Api 4 18.01.2008 09:05