Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 4 / 1
Регистрация: 06.01.2014
Сообщений: 427
1

Вложенные условия

16.10.2016, 16:36. Показов 2572. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Проблема такая.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Button8Click(Sender: TObject);
var
NaF, KoF, RezF :Double;
begin
Label47.Caption:='0';
if (Edit11.Text='') or(Edit12.Text='') or (Edit11.Text='0') and (Edit12.Text<>'')
 then begin
 Application.MessageBox('Введите данные!', 'Внимание !', MB_OK);
  end;
 if  (Edit11.Text='0') and (Edit12.Text='0') then
Label47.Caption:=('ФЧ бесконечное!');
 
if (Edit11.Text<>'') and (Edit12.Text='0') then
Label47.Caption:=('Дисциллят!');
Exit;
 
  NaF:=StrToFloat(Edit11.Text);
KoF:=StrToFloat(Edit12.Text);
RezF:= NaF / KoF;
Label47.Caption:=FloatToStr(RoundTo(RezF, -2));
 end;
Есть два Едита: Edit11.Text И Edit12.Text
По фрагменту кода, когда в едитах стоят нули не выводится сообщение Label47.Caption:=('ФЧ бесконечное!');
а если в едитах ставишь числа не идет вычисление. Вероятно из за Exit;. В чем моя ошибка?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2016, 16:36
Ответы с готовыми решениями:

Вложенные условия
Здравствуйте, начал изучение JS. Решаю вот такую задачу. Введите 3 числа. Если они могут быть...

Вложенные условия ( if-else )
В уроке прописано следующее: if (x &gt; 0) { if (y &gt; 0) // x &gt; 0 , y &gt; 0 { cout...

Вложенные условия
Какой из предложенных вариантов проверки истинности лучше (в каких ситуациях): вложенная инструкция...

Вложенные циклы и условия
здравствуйте. есть скрипт, в котором один цикл должен быть вложен в другой, а в нём таже...

5
botsik
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
16.10.2016, 16:59 2
Цитата Сообщение от xxx_73 Посмотреть сообщение
if (Edit11.Text='') or(Edit12.Text='') or (Edit11.Text='0') and (Edit12.Text<>'')
не правильно поставлено условие
Delphi
1
if (Edit11.Text='') or (Edit12.Text='') or [B]([/B] (Edit11.Text='0') and (Edit12.Text<>'')
1
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,802
Записей в блоге: 3
16.10.2016, 18:31 3
xxx_73, вот первое, что в глаза бросилось...
Цитата Сообщение от xxx_73 Посмотреть сообщение
if (Edit11.Text='') or(Edit12.Text='') or (Edit11.Text='0') and (Edit12.Text<>'')
then begin
Application.MessageBox('Введите данные!', 'Внимание !', MB_OK);
end;
(Кстати, на счет скобок тебе cfbogd совершенно правильно указал)
Проверка на заполненность полей не прошла - вывелось сообщение и что? Код продолжает выполняться дальше...
Вот после вывода сообщения как раз и необходим Exit.
А вот второе:
Delphi
1
if  (Edit11.Text='0') and (Edit12.Text='0') then Label47.Caption:=('ФЧ бесконечное!');
Если в Эдитах и там и там стоит 0, то, по идее, должна получиться запись в метке "ФЧ бесконечное".
Но следом-то идет вторая проверка:
Цитата Сообщение от xxx_73 Посмотреть сообщение
if (Edit11.Text<>'') and (Edit12.Text='0') then Label47.Caption:=('Дисциллят!');
А т.к. в Edit11 у нас записан 0, то условие Edit11.Text<>'' заведомо истинное и в итоге ты не увидишь сообщения о "ФЧ", а увидишь сообщение о каком-то "Дисциллят"-е...

Добавлено через 8 минут
Цитата Сообщение от xxx_73 Посмотреть сообщение
Вероятно из за Exit
Да уж, вестимо из за него...
Delphi
1
if (Edit11.Text<>'') and (Edit12.Text='0') then ...
прошла эта проверка или нет - неважно, в любом случае Exit будет следующим оператором, т.е. процедура прерывается.
Правильней было бы вот так:
Delphi
1
2
3
4
5
if (Edit11.Text<>'') and (Edit12.Text='0')
then begin
         Label47.Caption:=('Дисциллят!');
         Exit;
       end;
и то же самое надо сделать с первой проверкой:
Delphi
1
2
3
4
5
if  (Edit11.Text='0') and (Edit12.Text='0') 
then begin
         Label47.Caption:=('ФЧ бесконечное!');
         Exit;
       end;
иначе тут же схлопочешь вылет "Деление на 0"
1
1 / 4 / 1
Регистрация: 06.01.2014
Сообщений: 427
16.10.2016, 19:42  [ТС] 4
Цитата Сообщение от D1973 Посмотреть сообщение
иначе тут же схлопочешь вылет "Деление на 0"
ну да..было такое. В целом по вашим советом все сделал..но фрагмент
Delphi
1
2
3
4
5
6
7
8
9
10
11
DelphiВыделить код
1
2
3
4
5
if  (Edit11.Text='0') and (Edit12.Text='0') 
then begin
         Label47.Caption:=('ФЧ бесконечное!');
         Exit;
       end;
все равно не работает..выводится сообщение
Delphi
1
Application.MessageBox('Введите данные!', 'Внимание !', MB_OK);
0
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,802
Записей в блоге: 3
16.10.2016, 20:38 5
Лучший ответ Сообщение было отмечено xxx_73 как решение

Решение

Цитата Сообщение от xxx_73 Посмотреть сообщение
все равно не работает..выводится сообщение...
Delphi
1
if (Edit11.Text='') or(Edit12.Text='') or ((Edit11.Text='0') and (Edit12.Text<>''))
Ну вот сам посмотри, почему у тебя оно может возникать (буквальный перевод на русский):
Если (Эдит11 пустой) или (Эдит12 пустой) или ((В Эдит11 внесен 0) и (в Эдит12 внесено что угодно))
Если выполнится хоть одно из 3-х условий, выделенных синим цветом, то возникнет твое сообщение об ошибке.
Ты вводишь 0 в Эдит11 и в Эдит12. Значит первые 2 условия не срабатывают: Эдиты не пусты. И вот он - момент true: Эдит12 у тебя не пуст, а в Эдит11 внесен 0, а это, по твоей задумке, должно приводить к появлению сообщения об ошибке...
Так что пересматривай условие!

Добавлено через 2 минуты
Как по мне, дык эта третья проверка тут нужна, как зайцу стоп-сигнал
1
1 / 4 / 1
Регистрация: 06.01.2014
Сообщений: 427
16.10.2016, 21:14  [ТС] 6
Цитата Сообщение от D1973 Посмотреть сообщение
((В Эдит11 внесен 0) и (в Эдит12 внесено что угодно))
вот блин..и точно же..получается накладка..что угодно может быть и ноль..истинна где то рядом..=))) только после того как конкретно тыкнули в место -увидел.. Но условие не поменять..в том то и дело.
Цитата Сообщение от D1973 Посмотреть сообщение
or ((Edit11.Text='0') and (Edit12.Text<>''))
пришлось убрать этот фрагмент. Более или менее. Спасибо всем, кто учил меня уму разуму.
0
16.10.2016, 21:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2016, 21:14
Помогаю со студенческими работами здесь

Странно работают вложенные условия в bat-файле
Доброго времени суток! Вот решил обновить/подтянуть свои знание в области командной строки...

Внутри проверки условия не производится ещё одна проверка условия
Как задумывалось - при нажатии на джойстик просто должны были остановится движки, но если при...

Вложенные классы и статические вложенные классы - нужен пример
Добрый вечер, форумчане! :) Поделитесь примерами практических задач, при решении которых полезно...

Описать оператор выбора, в котором при истинности второго условия выполняются действия и третьего условия тоже
помогите пожалуйста ответить на вопрос 2. Описать оператор выбора, в котором при истинности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru