Главная страница
    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]

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


 
IIIakal   (2009-03-19 14:45) [41]


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

Ну да, такие советы проще всего давать.....


 
Anatoly Podgoretsky ©   (2009-03-19 14:53) [42]

> IIIakal  (19.03.2009 14:45:41)  [41]

Других дать нельзя, ты вообще должен на меня молиться, столько времени удастся съэкомить, не будет жалко бесцельно прожитых лет, лучше дворником.


 
IIIakal   (2009-03-19 14:59) [43]

а ты считаешь, что дворником работать - не бесцельно проживешь?
мести от забора до обеда....


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

а как и где она объявляется?

перед бегином объявляется.

если в массиве лежат лопаты, то переменная должна быть типа "метла"

если в массиве метлы, то переменная должна быть типа "лопата"


 
IIIakal   (2009-03-19 16:12) [45]

))))))))))))))


 
Anatoly Podgoretsky ©   (2009-03-19 16:14) [46]

Ну если

> мести от забора до обеда....

то тебе прямой путь в олигархи.


 
IIIakal   (2009-03-19 16:19) [47]


> то тебе прямой путь в олигархи.

нет уж, спасибо...
я и так не плохо устроился....дворик у меня небольшой, метла хорошая, новая...:-\


 
IIIakal   (2009-03-20 11:34) [48]

Блин, народ, ну объясните дураку пожалуйста, почему не работает цикл


var
s, k:array[1..10] of integer;
slot: array[1..10] of TBevel;
p, i: integer;

begin
"Присвоение значений массивам S, K";

p:=0;
for i:=1 to 10 do
begin
p:=p+1;
if s[p]>0 then
slot[p].Visible:=true;
end;

end;


компилируется, но при выполнение этого кода вылетает....


 
Сергей М. ©   (2009-03-20 11:37) [49]


> при выполнение этого кода вылетает


Кто, куда и каким рейсом ?


 
IIIakal   (2009-03-20 11:41) [50]


> Кто, куда и каким рейсом ?

Системное сообщение:
Access violation at addres 00443303 in module "Project1.exe". Read of address00000057.


 
ЮЮ ©   (2009-03-20 11:41) [51]

в AV, прямым рейсом.
Ведь все его массивы заполнены nil-ами. Про то, что надо
slot[1] := Slot1; ...
никто не сказал :)


 
Сергей М. ©   (2009-03-20 11:45) [52]


> IIIakal   (20.03.09 11:41) [50]


С первого раза выговорить эту абракадабру, наверно, не получилось ?)

см. [51]


 
IIIakal   (2009-03-20 11:54) [53]

спс вот так

p:=0;
for i:=1 to 10 do
begin
p:=p+1;
if s[i]>0 then
slot[1]:=slot1;
slot[2]:=slot2;
slot[3]:=slot3;
slot[4]:=slot4;
slot[5]:=slot5;
slot[6]:=slot6;
slot[7]:=slot7;
slot[8]:=slot8;
slot[9]:=slot9;
slot[10]:=slot10;
slot[p].Visible:=true;

но почему то не работает оператор if, все 10 slot:=true


 
Сергей М. ©   (2009-03-20 11:56) [54]


> почему то не работает оператор if


Это он тебе сам сказал, что не он работает ?


 
ЮЮ ©   (2009-03-20 11:59) [55]

пжлст, всё не так

slot[1]:=slot1;
slot[2]:=slot2;
slot[3]:=slot3;
slot[4]:=slot4;
slot[5]:=slot5;
slot[6]:=slot6;
slot[7]:=slot7;
slot[8]:=slot8;
slot[9]:=slot9;
slot[10]:=slot10;

for i:=1 to 10 do
begin
 slot[i].Visible:=s[i]>0;
end


 
IIIakal   (2009-03-20 12:00) [56]


> Это он тебе сам сказал, что не он работает ?

нет...значения массива только первых 5>0 , остальные 0, а значение visible:=true присваивается всем 10....


 
{RASkov} ©   (2009-03-20 12:02) [57]

> [53] IIIakal   (20.03.09 11:54)

Это прикол или ты действительно двоешник? :)


 
IIIakal   (2009-03-20 12:02) [58]


> ЮЮ

Спасибо бАльшущее)))


 
IIIakal   (2009-03-20 12:04) [59]


> Это прикол или ты действительно двоешник? :)

я просто только что причитал главу про циклы, закрепляю на практике)))))


 
Сергей М. ©   (2009-03-20 12:06) [60]


> IIIakal   (20.03.09 12:04) [59]



> только что причитал главу про циклы


Только что ?!

Ты всегда сначала что-то делаешь, а потом читаешь про то как надо или как не надо было делать ?


 
IIIakal   (2009-03-20 12:15) [61]


> Ты всегда сначала что-то делаешь, а потом читаешь про то
> как надо или как не надо было делать ?

не я просто сначала делал так

if s1>0 then begin
  slot1.Visible:=true;
  end
else if s2>0 then begin
    slot2.Visible:=true;
  end
else if s3>0 then begin
    slot3.Visible:=true;

Но после сообщения [12] только узнал про циклы....))))
ну я же только учусь....


 
Игорь Шевченко ©   (2009-03-20 13:12) [62]


> ну я же только учусь....


Вот и учись.



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

Форум: "Начинающим";
Текущий архив: 2009.05.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.009 c
2-1237554328
StriderMan
2009-03-20 16:05
2009.05.03
Действия над группой объектов


2-1237447399
И. Павел
2009-03-19 10:23
2009.05.03
Вызов SQL-функции с меняющимся аргументом


8-1193906616
fff
2007-11-01 11:43
2009.05.03
playlist


11-1200007217
!Pharaon!
2008-01-11 02:20
2009.05.03
ListView и Thumbnail (Эскизы изображений)


4-1208928035
AlexK
2008-04-23 09:20
2009.05.03
TSWStringArray (LPWSTR)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский