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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2012, 20:37   #1
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию Задача на delphi

Здравствуйте!

Есть такая задачка:
Цитата:
Даны символы s1, s2, ... . Известно, что символ s1 отличен от восклицательного знака и что среди s2, s3, ... есть по крайней мере один восклицательный знак. Пусть s1, s2,...,sn символы данной последовательности, предшествующие первому восклицательному знаку (n заранее неизвестно). Выяснить, имеется ли среди s1, s2,...,sn пара соседствующих букв но и он.
Написал код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  i,n:integer;
begin
  s:=Edit1.Text;
  n:=length(s);
  For i:=1 to n do
    if s[1]='!' then Label1.Caption:='Первый символ не должен быть "!"' else
    begin
      if s[i]='!' then
          begin
        if (s[i-1]='н') and (s[i-2]='о') or (s[i-1]='о') and (s[i-2]='н') then

        Label1.Caption:='Есть сочетание символов "но" или "он" "!"'
          else
        Label1.Caption:='Нет сочетание символов "но" или "он" "!"';
          end;

    end;

end;
При поиске обрабатывает символы не только перед первым восклицательным знаком, но и перед всеми последующими, в ответ идет обработка символов перед последним восклицательным знаком.
Подскажите, пожалуйста, где ошибка?

Последний раз редактировалось anthonyk; 18.12.2012 в 20:59.
anthonyk вне форума Ответить с цитированием
Старый 18.12.2012, 20:48   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А так?

Код:
if ((s[i-1]='í') and (s[i-2]='î')) or ((s[i-1]='î') and (s[i-2]='í')) then
Не знаю пока, что там с кодом, но недоставленные скобки сразу бросились в глаза
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.12.2012, 20:55   #3
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию

Спасибо! Действительно, скобки не доставил. Но программа упорно не хочет работать как надо.
anthonyk вне форума Ответить с цитированием
Старый 18.12.2012, 21:01   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Предложу свой вариант:

Код:
k:=0; {счетчик символов}
n:=pos('!',s); {получаем позицию первого восклзнака в строке}
{и делаем цикл только до предыдущего перед ним символа}
if n>1 then
  for i:=2 to n-1 do 
     if ((s[i-1]='н') and (s[i]='о')) or ((s[i-1]='о') and (s[i]='н')) then inc(k);
if k>0 then Label1.Caption:='Есть сочетание символов "но" или "он" перед "!" в количестве: '+IntToStr(k)
else Label1.Caption:='Нет сочетание символов "но" или "он" "!"';

И кстати говоря, пока писал - понял: в Вашем коде ошибка как раз в этих [i-1] и [i-2]. Цикл то идет от 1. А сколько будет 1-1? Тем более 1-2?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 19.12.2012 в 10:26.
Sciv вне форума Ответить с цитированием
Старый 18.12.2012, 21:19   #5
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию

А я и не обратил внимания на то, сколько я отнимаю от i, и, что само i может и 2 равняться. И про функцию pos совсем забыл. Спасибо большое!
anthonyk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача в Delphi Ambros Помощь студентам 3 03.12.2012 20:03
задача delphi 999 Помощь студентам 15 23.01.2012 17:01
Задача Delphi HannibalSmith23 Помощь студентам 0 14.03.2011 18:38
Задача - в Delphi Костянн Общие вопросы Delphi 4 28.11.2010 15:00
Задача в Delphi stscolt Помощь студентам 1 28.04.2009 21:11