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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.11.2011, 13:31   #1
Nancy90
 
Аватар для Nancy90
 
Регистрация: 21.11.2011
Сообщений: 9
По умолчанию Логические операторы в delphi

Задача такая: Даны натуральное число n , символы s1,s2...sn . Выяснить, верно ли, что в последовательности имеются пять идущих подряд букв е.
Написала код, но выдает ошибку( выделила жирным), а почему не понятно

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i,c,n:integer;
begin
n:=StrtoInt(Edit1.Text);
s:=Edit2.Text;
for i:=1 to n do
if s[i] and s[i-1]='e'
then c:=c+1;
if s[i] and s[i+1]<>'e'
then c:=0;
if c=5 then Label3.Caption:='Да'
else Label3.Caption:='Нет'
end;
Nancy90 вне форума
Старый 21.11.2011, 13:40   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Условие пишется немного иначе:
if (s[i]='e') and (s[i-1]='e') (если я правильно понял что Вам вообще нужно)
И не забываем скобки
благодарность - сюда (не забываем писать от кого)

Последний раз редактировалось Zer0; 21.11.2011 в 13:43.
Zer0 вне форума
Старый 21.11.2011, 14:58   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
if (s[i]='e') and (s[i-1]='e')
Zer0, формально, Вы абсолютно правы, теперь код начнёт компилироваться, но, т.к. цикл по I начинается от 1 до первое же s[i-1] даст s[0] - что, как минимум - некорректно..

Nancy90
такие задачи нужно решать, подсчитывая, сколько раз в цикле выполнилось условие.

примерно так:
Код:
MaxC := 0;
c := 0;
for i:=1 to Length(s)
  if s[i]='e' then begin 
     inc(c);
     if c>MaxC then MaxC := C;
  end
  else c := 0;

Label3.Caption:='Максимально подряд в данной строке встретилось '+IntToStr(MaxC)+' букв e';
ну и ещё разобрать (для себя) исходное условие. Если букв подряд будет не пять, а шесть или семь - какой ответ выдавать - есть в строке пять подряд идущих букв или нет?!
Если нужно строго пять подряд, не больше-не меньше, тогда if (MaxC=5) then ....
Serge_Bliznykov вне форума
Старый 21.11.2011, 15:20   #4
Nancy90
 
Аватар для Nancy90
 
Регистрация: 21.11.2011
Сообщений: 9
По умолчанию

Спасибо вам большое!))) Так действительно работает!) Нужно (как я поняла) что бы программа выдала есть или нет в строке 5 подряд идущих букв e...
Nancy90 вне форума
Старый 06.10.2012, 13:43   #5
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Код:
if (a<b) and (b<c) then 
  x1 := true;
и на будущее... не пишите свой вопрос в чужой теме....
пишу код не только за печеньки
VIK_aka_TOR вне форума
Старый 06.10.2012, 13:58   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Soft366rus
1. Будет лучше, если будешь создавать свою тему, см. кнопку "Новая тема".
2. Написал код, выдели его и нажми кнопку #, которая находится над окном редактируемого текста.
3. Переменные a, b, c - у тебя числа, а описаны как логические выражения:
Код:
Var a, b, c: integer;
         x1: boolean;
4. x1 - логическая переменная, которой ты присваиваешь значение:
Код:
if ((a<b) and (b<c)) then x1:=true;
Скобками пренебрегать не следует.
5. По условию задачи тебе надо проверить цифры заданного трехзначного числа. Т.е. надо уметь выделять цифры числа, например, так:
Код:
readln(Chislo);
a := Chislo MOD 10; {Получили остаток, т.е. десятки}
Chislo := Chislo DIV 10; {Поделили число на десять целочисленно}
b := Chislo MOD 10; {Выделили сотни}
Chislo := Chislo DIV 10; {Поделили число на десять целочисленно}
с := Chislo MOD 10; {Выделили тысячи}
Внимание, это только пример для понимания. Так, пользователь может ввести и одну цифру или 5 (пятизначное число). Это лучше проверять.
А если две цифры числа одинаковые а третье больше?
А может лучше выделение цифр оформить циклом While?


И т.д. ...
Как-то так, ...

Последний раз редактировалось ViktorR; 06.10.2012 в 14:01. Причина: Зря старались :-)
ViktorR вне форума
Старый 06.10.2012, 14:02   #7
Soft366rus
Новичок
Джуниор
 
Регистрация: 06.10.2012
Сообщений: 1
По умолчанию

я всё понял) спасибо большое!)
Soft366rus вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логические схемы и логические выражения. Александр95 Помощь студентам 6 28.04.2011 16:38
Логические операторы maxwel6064 Паскаль, Turbo Pascal, PascalABC.NET 16 25.03.2011 15:32
Операторы в Delphi neomaximus Помощь студентам 1 17.12.2008 20:55