Forum studentów informatyki UE WrocÅ‚aw Strona G³ówna


Poprzedni temat «» Nastêpny temat
Pomoc potrzebna
Autor Wiadomo¶æ
Maciou 
[Bartosz Maciołek]

Wiek: 36
Do³±czy³: 03 Pa¼ 2009
Posty: 763
Otrzyma³ 62 piw(a)
Sk±d: W-W
Wys³any: 2010-12-09, 18:30   Pomoc potrzebna

Czy da się w jakiś sposób zapętlić 3x if...then...else?

bo chcę zrobić coś takiego (tylko mi nie działa):

begin
if (wyrażenie) then
begin
{ciÄ…g instrukcji}
end
else
begin
if (wyrażenie) then
{ciÄ…g instrukcji}
end
else
begin
{ciÄ…g instrukcji}
end;
end;
1. czemu to nie działa?
2. co zrobić żeby zadziałało?
3. lub jak taki sam efekt osiągnąć inną metodą? (bo wydaje mi się, że da się to zrobić za pomocą case...of)
Postaw piwo autorowi tego posta
 
 
     
zynklu 


Wiek: 35
Do³±czy³: 29 Wrz 2009
Posty: 251
Otrzyma³ 30 piw(a)
Wys³any: 2010-12-09, 18:37   

begin
if (wyrażenie) then
begin
{ciÄ…g instrukcji}
end
else
begin
if (wyrażenie) then
BEGIN
{ciÄ…g instrukcji}
end
else
begin
{ciÄ…g instrukcji}
end;
end;
END;

co chcesz zrobic bo to badziewnie wyglada i na pewno mozna zrobic lepiej :)
_________________
- Wodzu! Jesteśmy otoczeni!
- Świetnie, możemy atakować w każdym kierunku
Postaw piwo autorowi tego posta
 
     
e^x 

Do³±czy³: 09 Sie 2009
Posty: 220
Otrzyma³ 14 piw(a)
Sk±d: Lublin
Wys³any: 2010-12-09, 19:02   

Maciou, użyj "and" ,to powinno ułatwić sprawę
np. if warunek1 then instrukcja1
if ( not warunek1 and warunek2) then instrukcja2
if (not warunek1 and not warunek2 and warunek3) then instrukcja
Postaw piwo autorowi tego posta
 
 
     
e^x 

Do³±czy³: 09 Sie 2009
Posty: 220
Otrzyma³ 14 piw(a)
Sk±d: Lublin
Wys³any: 2010-12-09, 19:11   

Case też da się zrobić, ja bym zrobił tak:
zmienna:=tab [1..3] of boolean;
i:=integer;

zmienna[1]:=wyrazenie1;
zmienna[2]:=wyrazenie2;
zmienna[3]:=wyrazenie3;

case zmienna of:
[1,0,0] or [1,1,1] or [1,1,0] or [1,0,1] : instrukcja1
[0,1,0] or [0,1,1] : instrukcja2
[0,0,1] : instrukcja3

pewnie mam literówki ale chyba bardziej o sposób ci chodziło niż o zapis

a przy okazji wie ktoś jak w tym kodzie zapisać np. [1, 0 lub 1 , 0 lub 1] ? czyli dowolna wartość.
i jeszcze jedno pytanie, jak zadeklarować zmienną globalną WEWNĄTRZ FUNKCJI ?
Postaw piwo autorowi tego posta
 
 
     
Maciou 
[Bartosz Maciołek]

Wiek: 36
Do³±czy³: 03 Pa¼ 2009
Posty: 763
Otrzyma³ 62 piw(a)
Sk±d: W-W
Wys³any: 2010-12-09, 19:31   

Ten program ma najpierw sprawdzać
- czy x jest większa od random(99)

---- jeśli tak to czy y + random(9) jest większe od z
------------ jeśli tak to żeby wypisywał wynik y+random(9) -z
------------ jeśli nie to żeby wypisywał y+random(9)<z

---- jeśli nie to komunikat w Memo 'x<ran'
Postaw piwo autorowi tego posta
 
 
     
zynklu 


Wiek: 35
Do³±czy³: 29 Wrz 2009
Posty: 251
Otrzyma³ 30 piw(a)
Wys³any: 2010-12-09, 22:08   

maciou w ogole nie kminie o co ci chodzi, ale jesli x,y,z podajesz to : procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z,pom:integer;
begin
x:=strtoint(edit1.text);
y:=strtoint(edit2.text);
z:=strtoint(edit3.text);

randomize;
if x > random(99) then
begin
pom:=random(9);
if (y + pom > z ) then
showmessage('wynik to: ' + inttostr(y+pom-z))
else
showmessage('wynik to: ' + inttostr (y+pom) + ' < z');
end
else memo1.lines.add('x<ran');




end;


nie mozna deklarowac zmiennych globalbych w procedurach / funkcjach etc.

var
Form1: TForm1;
zmienna_globalna:string;
implementation


robisz to miedzy var i implementation
_________________
- Wodzu! Jesteśmy otoczeni!
- Świetnie, możemy atakować w każdym kierunku
Postaw piwo autorowi tego posta
 
     
e^x 

Do³±czy³: 09 Sie 2009
Posty: 220
Otrzyma³ 14 piw(a)
Sk±d: Lublin
Wys³any: 2010-12-09, 22:18   

Jesteś pewien ,że nie można? W wielu innych językach się da ,a w Pascalu nie? To przydatna rzecz.
Postaw piwo autorowi tego posta
 
 
     
zynklu 


Wiek: 35
Do³±czy³: 29 Wrz 2009
Posty: 251
Otrzyma³ 30 piw(a)
Wys³any: 2010-12-09, 22:24   

tak, nie mozna
,z wiki
"W języku Pascal (również w Object Pascal) deklaracje zmiennych są umieszczone przed blokiem kodu danego podprogramu lub programu głównego (w przeciwieństwie do C/C++ i Javy)." wiec globalne (dla calego programu) przed programem, nie w trakcie
_________________
- Wodzu! Jesteśmy otoczeni!
- Świetnie, możemy atakować w każdym kierunku
Postaw piwo autorowi tego posta
 
     
e^x 

Do³±czy³: 09 Sie 2009
Posty: 220
Otrzyma³ 14 piw(a)
Sk±d: Lublin
Wys³any: 2010-12-09, 22:34   

Tak, ale w niektórych językach można deklarować na początku programu oraz w trakcie np. w funkcji/procedurze. Przydaje się np. gdy chcemy niejawnie zmienić jakieś globalne wartości, bez pobierania ich, oraz bez ich zwracania.
Postaw piwo autorowi tego posta
 
 
     
zynklu 


Wiek: 35
Do³±czy³: 29 Wrz 2009
Posty: 251
Otrzyma³ 30 piw(a)
Wys³any: 2010-12-09, 22:37   

ale tu nie mozna

po raz 3ci
_________________
- Wodzu! Jesteśmy otoczeni!
- Świetnie, możemy atakować w każdym kierunku
Postaw piwo autorowi tego posta
 
     
e^x 

Do³±czy³: 09 Sie 2009
Posty: 220
Otrzyma³ 14 piw(a)
Sk±d: Lublin
Wys³any: 2010-12-09, 22:40   

Dobra zrozumiałem, szkoda.
Postaw piwo autorowi tego posta
 
 
     
SARTO 


Wiek: 39
Do³±czy³: 30 Wrz 2009
Posty: 274
Otrzyma³ 62 piw(a)
Sk±d: WrocÅ‚aw
Wys³any: 2010-12-11, 09:19   

Yo, piszę program wykonujący operacje na pliku (*.dat). Najpierw otwieramy plik i można się bawić :-P Ale jest masa problemów przy użyciu pewnych opcji kiedy nie powinno się - np. kliknięcie zamknij plik, kiedy nie jest jeszcze otwarty. Chciałem więc zrobić obsługę błędów na zasadzie jeżeli otwarty/używany to zamknij (a jeżeli nie to olej :-P )

if plik_jest_otwarty then CloseFile(plik);
else ShowMessage('żaden plik nie jest używany');

I tu kłopot - co ma być w miejscu 'plik_jest_otwarty' :?:
Myślałem, że to bedzie proste... pewnie jest. Ale nigdzie nie mogę znaleźć jak to zrobić :evil: Help :!:
Postaw piwo autorowi tego posta
 
 
     
maciu 

Wiek: 37
Do³±czy³: 16 Sie 2009
Posty: 60
Otrzyma³ 7 piw(a)
Sk±d: Zgorzelec/WrocÅ‚aw
Wys³any: 2010-12-11, 16:36   

pierwsze co mi przyszlo do glowy: wprowadzic dodatkowa zmienna boolean domyslnie ustawiona na false i zmieniac ja na true przy otwieraniu pliku i w Twoim if`ie bym sprawdzal jaka wartosc ma owa zmienna..
Postaw piwo autorowi tego posta
 
 
     
Wy¶wietl szczegó³y
e^x 

Do³±czy³: 09 Sie 2009
Posty: 220
Otrzyma³ 14 piw(a)
Sk±d: Lublin
Wys³any: 2010-12-11, 17:21   

SARTO, a nie działa:

try
closefile(plik);
except
MessageBox.Show('Wystapil blad, prawopodobnie podany plik nie jest otwarty');
end;

?
Postaw piwo autorowi tego posta
 
 
     
SARTO 


Wiek: 39
Do³±czy³: 30 Wrz 2009
Posty: 274
Otrzyma³ 62 piw(a)
Sk±d: WrocÅ‚aw
Wys³any: 2010-12-11, 18:23   

maciu, proste i genialne XD właśnie o takie rozwiązanie mi chodziło, będzie to łatwo użyć w wielu miejscach kodu :mrgreen:

e^x, niestety try nie przynosi żadnego rezultatu, program się sypie w taki sam sposób :-/

Dzieki za odpowiedzi :-D
Postaw piwo autorowi tego posta
 
 
     
Wy¶wietl posty z ostatnich:   
Odpowiedz do tematu
Nie mo¿esz pisaæ nowych tematów
Nie mo¿esz odpowiadaæ w tematach
Nie mo¿esz zmieniaæ swoich postów
Nie mo¿esz usuwaæ swoich postów
Nie mo¿esz g³osowaæ w ankietach
Nie mo¿esz za³±czaæ plików na tym forum
Mo¿esz ¶ci±gaæ za³±czniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Strona wygenerowana w 0,08 sekundy. Zapytañ do SQL: 13