Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
ВнизОператор if then Найти похожие ветки
← →
lewka-serdceed (2008-05-17 20:05) [0]Привет!!!
У меня такая проблема с оператором if вот листинг:for i:=1 to StringGrid1.RowCount do begin
if StringGrid1.Cells[i,1]="" then a:=1 ;
if StringGrid1.Cells[i,1]<>"" then a:=0 end;
if a=1 then begin MessageDlg("Ошибка",mtError, mbOKCancel, 0);end;
при выполнении этого кода всегда не зависимо заполнена ячейка или нет появляется это сообщение. В чем я тут ошибся?
← →
Джо © (2008-05-17 20:09) [1]> [0] lewka-serdceed (17.05.08 20:05)
> В чем я тут ошибся?
В логике. Ибо после того, как встретилась пустая, может встретиться и непустая.
← →
Джо © (2008-05-17 20:11) [2]Вероятно, предполагается такое поведения?
for i:=1 to StringGrid1.RowCount-1 do
begin
if StringGrid1.Cells[i,1]="" then
begin
MessageDlg (...);
Break
end;
end;
← →
Джо © (2008-05-17 20:12) [3]Тьфу, совсем я запутался с таким оформлением и цель замысла осталась для меня осталась темной.
← →
lewka-serdceed (2008-05-17 20:13) [4]А как тогда мне переписать код? подскажите
← →
Джо © (2008-05-17 20:13) [5]> [4] lewka-serdceed (17.05.08 20:13)
> А как тогда мне переписать код? подскажите
Опиши простыми словами, что нужно.
← →
lewka-serdceed (2008-05-17 20:53) [6]Нужно выдать сообщение, если есть пустая ячейка. И ни чего дальше не делать, а если все ячейки заполнены, то выполнять следующие действия
← →
palva © (2008-05-17 21:17) [7]
> for i:=1 to StringGrid1.RowCount do begin
> if StringGrid1.Cells[i,1]="" then a:=1 ;
> if StringGrid1.Cells[i,1]<>"" then a:=0 end;
Скорее всего здесь пропущено elsefor i:=1 to StringGrid1.RowCount do begin
else if StringGrid1.Cells[i,1]="" then a:=1 ;
if StringGrid1.Cells[i,1]<>"" then a:=0 end;
Но все равно код будет излишне сложным. Наверно, вам подойдет код из [2]
← →
Германн © (2008-05-17 21:20) [8]
a:=0;
for i:=1 to StringGrid1.RowCount-1 do
begin
if StringGrid1.Cells[i,1]="" then
begin
a:=1;
Break
end;
end;
if a = 1 then MessageDlg("Ошибка",mtError, mbOKCancel, 0)
else begin
... //выполнять следующие действия
end;
← →
lewka-serdceed (2008-05-17 21:22) [9]Спасибо
← →
Германн © (2008-05-17 21:44) [10]
> lewka-serdceed (17.05.08 21:22) [9]
А вообще то изначально в сабже чушь. Счётчик цикла работает по количеству строк, а в самом цикле перебираются столбцы Cells[i,1]
← →
Amoeba © (2008-05-18 00:32) [11]Аватору вопроса персонально и безотносительно к его конкретному коду (просто кошмар, да и только!) и его обсуждению, просто на будущее. К великому сожалению, у "чайников" такое безобразие сплошь и рядом:
if StringGrid1.Cells[i,1]="" then a:=1 ;
if StringGrid1.Cells[i,1]<>"" then a:=0;
Если первое условие (if) выполнено, то нефиг раз за разом проверять альтернативные варианты. Соответственно используем конструкцию с else.if StringGrid1.Cells[i,1]="" then a:=1 else
if StringGrid1.Cells[i,1]<>"" then a:=0
← →
{RASkov} © (2008-05-18 00:46) [12]> Если первое условие (if) выполнено, то нефиг раз за разом
> проверять альтернативные варианты. Соответственно используем
> конструкцию с else.
> if StringGrid1.Cells[i,1]="" then a:=1 else
> if StringGrid1.Cells[i,1]<>"" then a:=0
подчеркнутое не нужно...
это раз, и второе - см. [1], [2] и [10].... Это я автору вопроса если что :)
← →
{RASkov} © (2008-05-18 00:51) [13]и переменная "а" тоже скорее не нужна вовсе.... в [2] вместо Break; - нужно Exit;
← →
Германн © (2008-05-18 00:59) [14]
> {RASkov} © (18.05.08 00:51) [13]
>
> и переменная "а" тоже скорее не нужна вовсе.... в [2] вместо
> Break; - нужно Exit;
>
Вот тут ты скорее всего неправ. Читай [6].
← →
Amoeba © (2008-05-18 01:16) [15]
> {RASkov} © (18.05.08 00:46) [12]
Это я прекрасно знаю и понимаю что пишу заведомый offtop. Поясняю, что реплика моя была абсолютно вне контекста данного вопроса, но наболело. Просто достало, когда вываливают штабель if ... then без else между ними (к данному коду напрямую это не отностися, но нечто аналогичное в нем присутствует).
← →
{RASkov} © (2008-05-18 01:38) [16]> [14] Германн © (18.05.08 00:59)
> Вот тут ты скорее всего неправ. Читай [6].begin
for i:=1 to StringGrid1.RowCount-1 do
begin
if StringGrid1.Cells[i,1]="" then // если есть пустая ячейка
begin
MessageDlg (...); // Нужно выдать сообщение,
Exit; // И ни чего дальше не делать,
end;
end;
.... // а если все ячейки заполнены, то выполнять следующие действия
end;
?
В принципе в [8] почти тоже самое же....
Зы: Не обращаем внимания на нестыковки в коде автора... указанные в [10] например....:)
← →
{RASkov} © (2008-05-18 01:42) [17]> [15] Amoeba © (18.05.08 01:16)
> > {RASkov} © (18.05.08 00:46) [12]
> Это я прекрасно знаю и понимаю что....
:)
А это[12] вообщето было автору вопроса адресовано ;)
← →
Германн © (2008-05-18 02:07) [18]
> {RASkov} © (18.05.08 01:38) [16]
>
> > [14] Германн © (18.05.08 00:59)
> > Вот тут ты скорее всего неправ. Читай [6].
>
> begin
> for i:=1 to StringGrid1.RowCount-1 do
> begin
> if StringGrid1.Cells[i,1]="" then // если есть пустая ячейка
> begin
> MessageDlg (...); // Нужно выдать сообщение,
> Exit; // И ни чего дальше не делать,
> end;
> end;
> .... // а если все ячейки заполнены, то выполнять следующие
> действия
> end;
> ?
> В принципе в [8] почти тоже самое же....
> Зы: Не обращаем внимания на нестыковки в коде автора...
> указанные в [10] например....:)
>
Теперь ты скорее всего прав.
← →
Умище (2008-05-18 11:33) [19]
> Amoeba © (18.05.08 01:16) [15]
> > {RASkov} © (18.05.08 00:46) [12]Это я прекрасно знаю
> и понимаю что пишу заведомый offtop. Поясняю, что реплика
> моя была абсолютно вне контекста данного вопроса, но наболело.
> Просто достало, когда вываливают штабель if ... then без
> else между ними (к данному коду напрямую это не отностися,
> но нечто аналогичное в нем присутствует).
Хотя подобный подход (if .. then ..; if .. then ..;) и увеличивает длительность выполнения кода, зато повышает читабельность и прозрачность программы.
В отличие от бесконечных else.
← →
Anatoly Podgoretsky © (2008-05-18 11:47) [20]> Умище (18.05.2008 11:33:19) [19]
Так не надо бесконечных else надо множество, хорошо множестов хорошо струтированых else if
if ... then ...
else if ... then ...
...
else if ... then ...
else ...
Это если case of использовать нельзя, что и является его эквивалентом.
← →
Sha © (2008-05-18 12:09) [21]> Умище (18.05.08 11:33) [19]
бывает, что ниif
ниelse
не нужны, а достаточноa:=(StringGrid1.Cells[i,1]="");
← →
Умище (2008-05-18 12:23) [22]
> бывает, что ни if ни else не нужны, а достаточно
Тем более-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.05 c