Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

if else   Найти похожие ветки 

 
pqpqp   (2006-09-30 18:54) [0]

Глупый вопрос, в приведенном коде else работает для if x = 0, а как для первого  if x < 5 then сделать else. Без begin ... end не обойтись?
 x := 10;
 y := 10;
 if x < 5 then
 if x = 0 then y := 0
 else
 y := 5;


 
Dmitrij_K   (2006-09-30 18:59) [1]

 x := 10;
y := 10;
if x < 5 then
if x = 0 then y := 0 else
else
y := 5;


 
Anatoly Podgoretsky ©   (2006-09-30 19:09) [2]

А используй ты операторные скобки, что бы не было подобного рода проблем.


 
Vovan#1   (2006-09-30 19:16) [3]

Иногда помогает
[code]
x := 10;
y := 10;
if x >= 5 then
y := 5
 else
  if x = 0 then y := 0;
[/code]

А так да, из разряда Delphi suxx.


 
Kolan ©   (2006-09-30 19:19) [4]


> Без begin ... end не обойтись?

Нет.


 
TUser ©   (2006-09-30 21:29) [5]

> Нет.

запросто

label a, b;
begin
...
if x < 5 then goto a
if x = 0 then y := 0
goto b;
a: // else
y := 5;
b:
end;


 
Kolan ©   (2006-09-30 21:41) [6]


> TUser ©   (30.09.06 21:29) [5]

:)

 X := 10;
 Y := 10;
 if X < 5 then
 begin
   if X = 0 then
     Y := 0
 end
 else
   Y := 5;


 
palva ©   (2006-09-30 21:53) [7]

Dmitrij_K   (30.09.06 18:59) [1]
По-моему самый естественный вариант.


 
Kolan ©   (2006-09-30 22:06) [8]


> По-моему самый естественный вариант.

А он правильно работает? У меня ума не хватает понять его..

var
 X, Y: Integer;
begin
 x := 11;
y := 10;
if x < 5 then
 if x = 11 then
   y := 0
 else
   Y := 3
else
 y := 5;

ShowMessage(IntToStr(Y));
end;


Зачем тада if x = 11


 
palva ©   (2006-09-30 22:12) [9]

Между двумя else стоит пустой оператор. По правилам языка паскаль пустое место является оператором.


 
Kolan ©   (2006-09-30 22:16) [10]


> palva ©   (30.09.06 22:12) [9]

Знаю одно. Сам часто обжигался на том что условия срабатываюбт неверно только потому что я не поставил операторные скобки. Конкретные примеры не помню, но для себя правило выработал. Чуть сложне if ... then ... else я их ставлю :). И сё больше не ошибаюсь.


 
palva ©   (2006-09-30 22:20) [11]

Конечно, надо ставить. В некоторых корпоративных стандартах они просто обязательны. В некоторых языках (c, perl) вместо begin end используются {}. Так вот, в c они не обязательны, а в perl и, по-моему в c# обязательны, чтоб не было у программиста соблазна экономить на спичках.


 
TUser ©   (2006-09-30 23:45) [12]

> Так вот, в c они не обязательны

И, кстати, в паскале тоже, что не есть гуд. Тут привлекался я в качестве светлой головы для поиска ошибки. Считалось что-то не так. Было написано (на си)
if (...);
{
while (...)
 {
   ...
 }
}

Понятно, что точка-запятая поставлена на автопилоте и сделано это зря.
И паскаль аналогично будет в случае
while ... do;
А был бы обязателен непустой оператор (хотя бы {}) - не было бы такой проблемы.

Так что пустые операторы - все-таки нехорошо. Необходимости в них нет, а проблемы возникнуть могут.



Страницы: 1 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
15-1158740215
Ega23
2006-09-20 12:16
2006.10.15
Зачем по уентральным каналам крутят рекламу ГазПрома?


15-1158668942
vidiv
2006-09-19 16:29
2006.10.15
Приготовление блюд в микроволновке


2-1159557331
Мурзилка
2006-09-29 23:15
2006.10.15
вместо русского появляются одни знаки ????????????????


15-1159032226
vidiv
2006-09-23 21:23
2006.10.15
Подскажите, как максимально просто сделать звонок (на дверь)...


15-1158895814
страстно жаждущий все знать
2006-09-22 07:30
2006.10.15
докумсентация по 1с