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

Вниз

Как правильно создать оператор проверки?   Найти похожие ветки 

 
IIIakal   (2009-03-19 09:39) [0]

Здравствуйте! Помогите пожалуйста решить такую задачу:
имеется 10 переменных: s1, s2 и т.д. нужно сделать такую проверку


if s1>0 then
набор команд
else
if s2>0 then
набор команд
else
и т.д.


Т.е. если переменная больше 0 , то выполнять заданные действия.
Спасибо за внимание!


 
ЮЮ ©   (2009-03-19 09:41) [1]

if s1>0 then begin
 набор команд
end
else if s2>0 then begin
 набор команд
end
else

и т.д.


 
немо2   (2009-03-19 09:43) [2]

если переменная больше 0 , то выполнять заданные действия
и проверить следующую(по такому же принципу) иначе прекратить ?


 
IIIakal   (2009-03-19 09:46) [3]


> ЮЮ

не, я так писал, ругается на второе else: ";" expected "ELSE" found


 
IIIakal   (2009-03-19 09:46) [4]


> немо2

Да


 
ЮЮ ©   (2009-03-19 09:48) [5]

Или тебя смущает 10 if-oв? А "набор команд" везде свой?

Спасибо за внимание!
Пожалуйста! Лучше бы вопрос задал, вежливый ты наш :) В чем сут проблемы то?


 
ЮЮ ©   (2009-03-19 09:50) [6]


> не, я так писал, ругается на второе else: ";" expected "ELSE"
> found


значит не так писал


 
немо2   (2009-03-19 09:53) [7]

procedure TForm1.Button1Click(Sender: TObject);
var
a:array[1..3] of tMas;
i:integer;
procedure p1; begin  showmessage("1"); end;
procedure p2; begin  showmessage("2"); end;
procedure p3; begin  showmessage("3"); end;
begin
a[1].fa:=1;
a[1].fp:=@p1;
a[2].fa:=-1;
a[2].fp:=@p2;
a[3].fa:=1;
a[3].fp:=@p3;

for i:=1 to 3 do
 if a[i].fa<0
  then exit
  else a[i].fp;
end;


 
IIIakal   (2009-03-19 09:56) [8]


> В чем сут проблемы то?

Переменные получаем из БД, каждая переменная отвечает за показ картинки в разных image, т.е. если =0 то картинку не показывать, если любое другое число то выводится картинка....
> А "набор команд" везде свой?

да, s1 - передает параметры image1, s2 - image2 и т.д.


 
немо2   (2009-03-19 10:02) [9]

да,
 tMas=record
  fa:integer;
  fp:procedure;
 end;


 
ЮЮ ©   (2009-03-19 10:20) [10]


>
> Переменные получаем из БД


Врешь, из БД получаешь значения, а хранить их в переменных s1..s10 - это твое решение.

Хранить можно и в array of string и в TStrings, тем более, что алгоритм один и тот же.


 
Плохиш ©   (2009-03-19 10:22) [11]


> IIIakal   (19.03.09 09:56) [8]

А я так и не понял.
В чем сут проблемы то?


 
ЮЮ ©   (2009-03-19 10:28) [12]


> В чем сут проблемы то?


синтаксическая ошибка в коде
";" expected "ELSE" found";" expected "ELSE" found  
навела автора на мысль, что в дельфи трудно выразить очевидную логику автора.
дальнейшие реплики автора наводят на мысль, что цыклы он ещё не проходил, но уже знает if then else, однако о необходимости форматировать код, дабы избежать элементарных ошибок он тоже, похоже, не знает


 
IIIakal   (2009-03-19 10:34) [13]

Извините, я полный чайник в Дельфе/паскале, не спорю, поэтому и прошу помощи

> однако о необходимости форматировать код

форматировать? как?


 
ЮЮ ©   (2009-03-19 10:37) [14]


> форматировать? как?


Приведи код, который реально вызывал


> не, я так писал, ругается на второе else: ";" expected "ELSE"
> found
>


и я покажу как :)


 
IIIakal   (2009-03-19 10:44) [15]


if s1>0 then begin
slot1.Visible:=true;
label1.Visible:=true;
label1.Caption:=inttostr(k1);
image1.Picture.LoadFromFile("img/1.gif");
image1.Visible:=true;
end
else
begin
if s2>0 then
slot2.Visible:=true;
label2.Visible:=true;
label2.Caption:=inttostr(k2);
image2.Picture.LoadFromFile("img/2.gif");
image2.Visible:=true
end
else
begin
if s3>0 then
slot3.Visible:=true;
label3.Visible:=true;
label3.Caption:=inttostr(k3);
image3.Picture.LoadFromFile("img/3.gif");
image3.Visible:=true;
end
else
end;


 
{RASkov} ©   (2009-03-19 10:46) [16]

> [15] IIIakal   (19.03.09 10:44)
> if s1>0 then begin
> slot1.Visible:=true;
> label1.Visible:=true;
> label1.Caption:=inttostr(k1);
> image1.Picture.LoadFromFile("img/1.gif");
> image1.Visible:=true;
> end
> else
> begin
> if s2>0 then
> slot2.Visible:=true;
> label2.Visible:=true;
> label2.Caption:=inttostr(k2);
> image2.Picture.LoadFromFile("img/2.gif");
> image2.Visible:=true
> end
> else
> begin
> if s3>0 then
> slot3.Visible:=true;
> label3.Visible:=true;
> label3.Caption:=inttostr(k3);
> image3.Picture.LoadFromFile("img/3.gif");
> image3.Visible:=true;
> end
> else
> end;

не в том месте бегины понаставил..... горе программист :)


 
Плохиш ©   (2009-03-19 10:48) [17]


> IIIakal   (19.03.09 10:44) [15]

Или читаепь про оператор if then else или занимайся своими прямыми обязанностями.


 
Плохиш ©   (2009-03-19 10:49) [18]


> {RASkov} ©   (19.03.09 10:46) [16]

бегины-то тут при чём, к тому же поставленные синтаксически верно.


 
{RASkov} ©   (2009-03-19 10:50) [19]

> [18] Плохиш ©   (19.03.09 10:49)

Синтаксически верно, но логически нет....

Автору вопроса достаточно внимательно посмотреть на [1]...


 
Плохиш ©   (2009-03-19 10:53) [20]


> {RASkov} ©   (19.03.09 10:50) [19]

Действительно, извиняюсь, дальше второй комбинации else begin мой взгляд и опускаться не стал :-)


 
Плохиш ©   (2009-03-19 10:55) [21]


> {RASkov} ©   (19.03.09 10:50) [19]

Хотя скажем так "не в том месте энды понаставил..... горе программист" ;-)


 
ЮЮ ©   (2009-03-19 10:59) [22]

 if s1>0 then begin
   slot1.Visible:=true;
   label1.Visible:=true;
   label1.Caption:=inttostr(k1);
   image1.Picture.LoadFromFile("img/1.gif");
   image1.Visible:=true;
 end
 else begin
   if s2>0 then
     slot2.Visible:=true;
   label2.Visible:=true;
   label2.Caption:=inttostr(k2);
   image2.Picture.LoadFromFile("img/2.gif");
   image2.Visible:=true
 end
 else begin
   if s3>0 then
     slot3.Visible:=true;
   label3.Visible:=true;
   label3.Caption:=inttostr(k3);
   image3.Picture.LoadFromFile("img/3.gif");
   image3.Visible:=true;
 end
 else
 end;


Подчеркнуте - не к селу, не к городу.
Твой код не соответствует subj-у
Должно быть

 if s1>0 then begin
   slot1.Visible:=true;
   label1.Visible:=true;
   label1.Caption:=inttostr(k1);
   image1.Picture.LoadFromFile("img/1.gif");
   image1.Visible:=true;
 end
 else if s2>0 then begin
     slot2.Visible:=true;
   label2.Visible:=true;
   label2.Caption:=inttostr(k2);
   image2.Picture.LoadFromFile("img/2.gif");
   image2.Visible:=true
 end
 else if s3>0 then begin
   slot3.Visible:=true;
   label3.Visible:=true;
   label3.Caption:=inttostr(k3);
   image3.Picture.LoadFromFile("img/3.gif");
   image3.Visible:=true;
 end
 ...


при условии, что изначально установлено
   slot1.Visible:=false;
   label1.Visible:=false;
и т.д.

но код всё-же может и должен быть переписан так, чтобы было
for i := 1 to 10 do begin
 <код должен использовать переменную i>
end;


 
IIIakal   (2009-03-19 11:07) [23]

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

if s[1]>0 then begin
slot1.Visible:=true;
label1.Visible:=true;
label1.Caption:=inttostr(k[1]);
image1.Picture.LoadFromFile("img/noj.gif");
image1.Visible:=true;
end
else if s[2]>0 then begin
slot2.Visible:=true;
label2.Visible:=true;
label2.Caption:=inttostr(k[2]);
image2.Picture.LoadFromFile("img/noj.gif");
image2.Visible:=true
end
else if s[3]>0 then begin
slot3.Visible:=true;
label3.Visible:=true;
label3.Caption:=inttostr(k[3]);
image3.Picture.LoadFromFile("img/noj.gif");
image3.Visible:=true;
end

end;


 
Медвежонок Пятачок ©   (2009-03-19 11:11) [24]

все верно

если s[1]>0, то другие ветки ифа просто не выполняются.

букварь-то покури....


 
ЮЮ ©   (2009-03-19 11:12) [25]


> Убрал переменные, создал два массива....программа компилируется,
>  но отоброжатеся только первый image///


else здесь не нужен

if s[1]>0 then begin
 slot1.Visible:=true;
 label1.Visible:=true;
 label1.Caption:=inttostr(k[1]);
 image1.Picture.LoadFromFile("img/noj.gif");
 image1.Visible:=true;
end;

if s[2]>0 then begin
 slot2.Visible:=true;
 label2.Visible:=true;
 label2.Caption:=inttostr(k[2]);
 image2.Picture.LoadFromFile("img/noj.gif");
 image2.Visible:=true
end;


а отступу внутри блока begin ... end - ОЮЯЗАТЕЛЬНЫ


 
IIIakal   (2009-03-19 11:13) [26]

а как тогда сделать, может через метки?


 
ЮЮ ©   (2009-03-19 11:13) [27]

"img/noj.gif"

верни как было :)


 
IIIakal   (2009-03-19 11:21) [28]

Ура заработало!!! Всем огромное спасибо за помощь)))


 
{RASkov} ©   (2009-03-19 11:24) [29]

Вот примерно так попробуй:
f:=S[1]>0;
for N:=Low(S) to High(S) do begin
Label[N].Visible:=F;
Image[N].Visible:=F;
if F then begin
 F:=S[N]>0;
 Label[N].Caption:=IntToStr(K[N]);
 Image[N].Picture.LoadFromFile(<сформированное имя>);
end;
end;


где
Label: array [1..10] Of TLabel;
Image: array [1..10] of TImage;
S, K: array [1..10] of Integer;
F: boolean;


 
IIIakal   (2009-03-19 11:45) [30]


> {RASkov}

по моему нельзя создать массив с именем Label...


 
ЮЮ ©   (2009-03-19 11:52) [31]


>
> по моему нельзя создать массив с именем Label


создай с другим. А по моему нельзя 10 раз подряд копипастить один и тот же код. Тем более, что завтра слотов потребуется 100, а послезавтра их количестово будет задаваться динамически в зависимости от записей, возвращаемых запросом. Но тебя же это не останавливает :)


 
IIIakal   (2009-03-19 14:08) [32]


> for N:=Low(S) to High(S) do begin

N - что это?


 
Медвежонок Пятачок ©   (2009-03-19 14:15) [33]

буква


 
IIIakal   (2009-03-19 14:16) [34]

смешно


 
Медвежонок Пятачок ©   (2009-03-19 14:19) [35]

переменная цикла, принимающая значения от Low(S) до High(S)


 
IIIakal   (2009-03-19 14:21) [36]

спс


 
Медвежонок Пятачок ©   (2009-03-19 14:24) [37]

а то типа сразу было не понятно


 
IIIakal   (2009-03-19 14:36) [38]

не я понял что от минимума до максимума массива s
а как и где она объявляется?

я написал вот так:

var
Kol: array [1..10] Of TLabel;
Image: array [1..10] of TImage;
S, K: array [1..10] of integer;
F: boolean;
N: integer;

begin
запись значений в массив

:=S[1]>0;
for N:=Low(S) to High(S) do begin
Kol[N].Visible:=f;
Image[N].Visible:=f;
if F then begin
F:=S[N]>0;
Kol[N].Caption:=IntToStr(K[N]);
Image[N].Picture.LoadFromFile("img/1.jpg");
end;

вылетает с ошибкой при выполнение...


 
IIIakal   (2009-03-19 14:38) [39]


> запись значений в массив
>
> :=S[1]>0;

*
f:=s[1]>0;

нескаприровался


 
Anatoly Podgoretsky ©   (2009-03-19 14:41) [40]

Зря ты это с программированием связался, не твое это.



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

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

Наверх




Память: 0.56 MB
Время: 0.035 c
2-1237446555
D@nger
2009-03-19 10:09
2009.05.03
Форматирование чисел


15-1235971946
TELOvek
2009-03-02 08:32
2009.05.03
Получить картинку из Word


2-1237973324
чебурашка картман
2009-03-25 12:28
2009.05.03
WinInet - не все странички могу получить


6-1202735762
gear
2008-02-11 16:16
2009.05.03
Как выключить HTTP/1.1 и включить HTTP/1.0 в WININET?


15-1236051772
MBo
2009-03-03 06:42
2009.05.03
Конструктор массива