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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2015, 20:47   #11
Magenta
Пользователь
 
Регистрация: 25.03.2015
Сообщений: 14
По умолчанию

Magenta вне форума Ответить с цитированием
Старый 26.03.2015, 21:05   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Magenta
Слушай, задача в твоем условии не решаема. Проверку на вхождение все равно придется проверять, и проверка эта делается через IF, так что расслабься и купи препода.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.03.2015, 21:21   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Решаема (если только s2 не палиндром, еще нюансы есть)
Код:
var s,s2,s3: String;
    i,j,cnt: Integer;
begin
  вводим s и s2
  s3:=s2+s;
  cnt:=0;
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.03.2015 в 21:24.
Аватар вне форума Ответить с цитированием
Старый 26.03.2015, 21:35   #14
Magenta
Пользователь
 
Регистрация: 25.03.2015
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Решаема (если только s2 не палиндром, еще нюансы есть)
Код:
var s,s2,s3: String;
    i,j,cnt: Integer;
begin
  вводим s и s2
  s3:=s2+s;
  cnt:=0;
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);

Magenta вне форума Ответить с цитированием
Старый 26.03.2015, 21:40   #15
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Я не смотрел "50 оттенков", но мыслищи появляются:
1. Цикл заменить рекурсией.
2. IF заменить CASE
FPaul вне форума Ответить с цитированием
Старый 26.03.2015, 21:51   #16
Magenta
Пользователь
 
Регистрация: 25.03.2015
Сообщений: 14
По умолчанию

Код:
Program Lab4_1;
 Uses
  Crt;
 var
  s,s2,s3:String;
  i,j,cnt:Integer;
 begin
  Clrscr;
  Writeln('Введите строку до 12 символов');
  readln(s);
  Writeln('Введите подстроку из трёх символов');
  readln(s2);
  s3:=s2+s;
  cnt:=0;
  Writeln('Обратный порядок следования символов');
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  i:=Pos(s2,s); j:=Byte(i=0)+Byte(i>0)*3+i; s3[j]:=s2[3]; s3[j+2]:=s2[1]; s:=Copy(s3,4,12); cnt:=cnt+Byte(i>0);
  Writeln(s3);
  Writeln('Количество вхождений = ',cnt);
  readln;
 end.
Magenta вне форума Ответить с цитированием
Старый 26.03.2015, 22:02   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

вместо Writeln(s3);
Writeln(s);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.03.2015, 22:03   #18
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Если вызов самописной рекурсивной функции разрешён, то можно попробовать так
Код:
program SadoMazoStrings;

  function Recurse(S, SubS: string; var Sr: string): integer;
  var
    i, cnt: integer;
    c: char;

    procedure f;
    begin
      i := Pos(SubS, S);
      case i of
        0:
        begin
          Sr := Sr + S;
          exit;
        end;
        else
        begin
          Sr := Sr + Copy(S, 1, i - 1) + SubS[3] + SubS[2] + SubS[1];
          Delete(S, 1, i + 2);
          Inc(cnt);
          f;
        end;
      end;
    end;

  begin
    Sr  := '';
    cnt := 0;
    f;
    Recurse := cnt;
  end;

var
  Str, SubS, Sr: string;
begin
  Str  := 'abcbcbcabcbc';
  SubS := 'abc';
  writeln(Str);
  writeln(Recurse(Str, SubS, Sr));
  writeln(Sr);
end.

Последний раз редактировалось FPaul; 26.03.2015 в 22:30. Причина: уточнение программы
FPaul вне форума Ответить с цитированием
Старый 26.03.2015, 22:22   #19
Magenta
Пользователь
 
Регистрация: 25.03.2015
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
вместо Writeln(s3);
Writeln(s);
Получилось. Спасибо большое)
Magenta вне форума Ответить с цитированием
Старый 26.03.2015, 22:40   #20
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Интересно, а зачем даются задачи на "грязные хаки"? Олимпийская подготовка?
FPaul вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками Pascal ksenija15reg Помощь студентам 3 28.11.2013 23:25
работа со строками (Pascal) Вероника_94 Помощь студентам 2 25.01.2012 23:39
Pascal. Работа со строками. lisenog Помощь студентам 1 16.12.2010 15:56
Работа со строками. Pascal zevs116 Помощь студентам 1 19.11.2010 20:54
Работа со строками (pascal) Marlin Помощь студентам 7 03.06.2010 14:11