Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.05.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.007 c
15-1236051772
MBo
2009-03-03 06:42
2009.05.03
Конструктор массива


2-1237811538
Orion
2009-03-23 15:32
2009.05.03
Full Screen Mode


2-1237450478
Elun
2009-03-19 11:14
2009.05.03
Про WordApplication


2-1237446555
D@nger
2009-03-19 10:09
2009.05.03
Форматирование чисел


3-1220351355
Konrads
2008-09-02 14:29
2009.05.03
Самый быстрый запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский