select - case

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

select - case

Hozzászólás Szerző: szovhoz »

Ezt a select case kapcsolatot nem tudom az agyammal sehogy sem felfogni nincs róla valami szájbarágós doksi mert én nem találtam semmit sem.
Vagy valakinek nincs kedve róla írni valamit. Néztem a bascom sample között de akkor sem értettem meg nagyjából értem mire való de ennyi.

Szóval valami átfogó leírás sokat segítene köszi.
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00

Hozzászólás Szerző: DOGMAN »

Kicsit hosszú lesz, de ezért "szájbarágós", és teljesen "megvilágosodtam" tőle én is anno :D

A feltételes utasítások segítségével a programban lehetőség van bizonyos feltételek teljesülése esetén egy utasítás vagy egy programrészlet végrehajtására. Ezek az utasítások elágazásokat biztosítanak a programban. Ezen elágazásoknak két fajtája van: az if és a case.

Az if utasítás kétirányú, feltételes utasítást hajt végre. Általános formája:

if logikai kifejezés then utasítás1 else utasítás2

Az if után logikai változó vagy logikai kifejezés állhat, amelynek teljesülésétől függ, hogy melyik utasítás kerül végrehajtásra. Ha a feltétel igaz (true), akkor a then utáni utasítás1 fog végrehajtódni, ha a feltétel hamis (false), akkor az else utáni utasítás2 kerül végrehajtásra.

Egy példa az if-then-else szerkezetre:

Kód: Egész kijelölése

If X<Y then
   Min=X 
Else if X=Y then
   Min=X 
Else
   Min=Y
End
Az utasítás folyamatábrája:


Kép

Az if utasításnak egy egyszerűbb formája is használható, ha egy utasítást csak egy feltételtől függően végre akarunk hajtani, vagy át akarunk ugrani. Ez esetben így fest:

if logikai kifelyezés thenutasítás1

Egy példa az if-then szerkezetre:

Kód: Egész kijelölése

If Old=New then
   Print "A régi ertek ugyanaz mint az új" 
End
A folyamatábra:

Kép

A case utasítással többirányú elágazást hozhatunk létre a programunkban. A Select Case utasítás tartalmazza a szelektort, amelyet vizsgálunk. Ezt követi egy vagy több ún. case konstans és a hozzá tartozó utasítások és végül nem kötelezően egy else ág. A case utasítást az End Select zárja.

Általános formája:

Case szelektor
Case 1: utasítás_1
...
Case n: utasítás_n
Else utasítás_m
End

A case konstansok (címke) típusának meg kell egyeznie a szelektor típusával. Azon utasítás vagy utasítások kerülnek végrehajtásra, amelynek a címkéje megegyezik a szelektor értékével, ha nincs ilyen címke, az else utáni utasítás kerül végrehajtásra.

Egy példa a case szerkezetre:

Kód: Egész kijelölése

Select Case I
   Case 1 : Print "1"
   Case 2 : Print "2"
   Case 3 To 5 : Print "3-5"
   Case Is >= 10 : Print ">= 10"
   Case Else : Print "Not in Case statement"
End Select
Az utasítás folyamatábrája:

Kép
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Kis kiegészítés:

A case feltételek közt nem lehet átfedés! A case az tartományokat is le tud fedni...

Kód: Egész kijelölése

select case I
case 1:  utasítás 1
case 2 to 5:  utasítás 2
case 6 to 15: utasítás 3
case else : különben
end select
A case végrehajtás sokkal gyorsabb, mintha sok IF lenne egymás után....
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00

Hozzászólás Szerző: DOGMAN »

Mert nem kell mindkét irányt megvizsgálnia minden sorban, hanem csak egyezést???

Gépi kód rejtelmei ON :D
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Itt felhívnám még a figyelmet az „ON VALUE” utasításra!
Ami úgy biztosít elágazást, hogy nem tölti az időt feltétel vizsgálattal, hanem a megadott sorszámú címre, rutinra ugrik! Ezáltal igen gyors és kis memória igényű!
Bascom help:
ON var [GOTO] [GOSUB] label1 [, label2 ] [,CHECK]
:idea:
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

ez tetszik csinélhatnánk pár ilyen jellegű doksit a kezdők számára néhány alap ilyenre mint ez vagy a for next vagy if then else. Másoknak sok segyítség lenne én most perpill ezzel baban voltam mert nem hasznéltam de jól jönne szívesen vállalok egyet ha mondjuk bettesszük a könyvbe!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Egy WikiPedia szerű gyűjtemény is lehetne...

A kezdő TippekTrükkök fejezetbe készítek egy ilyet éppen... ~4 oldalnál jérok (abban is van select case).
Bár itt a feltételes elágazások(IfThen / SelectCase), ismétlődések (For/Next / DoLoop / DoLoopUntil) érdekes lehet....

ha valai tud ilyen önálló szerkesztőcsomagot külön vagy PHPNuke alá, ne kíméljen, Olyan ami mintegy nyomkövetéssel menne, hogy ki és mikor mit változtatott.... :P
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

Kód: Egész kijelölése

Sub 010vadc(byref Channel5 As Word , Z As Word )

Z = 0
Z = Getadc(channel5)
If Z > 1 Then Autoled = 1

Select Case Z

Case Is < 4 : Exit Sub
Case 5 To 46 : ide hogyan tegyem be 




Case Else : Exit Sub
End Select


ezt ?

If A < 1imp10 Then
If A > 1imp9 And A < 1imp11 Then
1motorfel = 1
1motorle = 1
Else
1motorfel = 0
1motorle = 1
End If
End If
If A > 1imp10 Then
If A > 1imp9 And A < 1imp11 Then
1motorfel = 1
1motorle = 1
Else
1motorfel = 1
1motorle = 0
End If
End If
If B < 2imp10 Then
If B > 2imp9 And B < 2imp11 Then
2motorfel = 1
2motorle = 1
Else
2motorfel = 0
2motorle = 1
End If
End If
If B > 2imp10 Then
If B > 2imp9 And B < 2imp11 Then
2motorfel = 1
2motorle = 1
Else
2motorfel = 1
2motorle = 0
End If
End If

Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

Robert írta:Egy WikiPedia szerű gyűjtemény is lehetne...

A kezdő TippekTrükkök fejezetbe készítek egy ilyet éppen... ~4 oldalnál jérok (abban is van select case).
Bár itt a feltételes elágazások(IfThen / SelectCase), ismétlődések (For/Next / DoLoop / DoLoopUntil) érdekes lehet....

ha valai tud ilyen önálló szerkesztőcsomagot külön vagy PHPNuke alá, ne kíméljen, Olyan ami mintegy nyomkövetéssel menne, hogy ki és mikor mit változtatott.... :P
a wiki ingyenes cms
opensourceforge.net
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

„Case 5 To 46 : ide hogyan tegyem be ezt!”
Na ne már! Mondjuk : gosub ezt

Ezt:

return
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. március 6. péntek, 17:13-kor.
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

nem akakrok subbot ezt csak próbaként mondtam ennél durvább a cucc ez csak egy része ez! Kb még vagy 500 ilyen sor van utánna! csak akartam rövidíteni!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Mondjuk Bascom így is elfogadta:

Kód: Egész kijelölése

Select Case I

   Case 1 : Print "1"

   Case 2 : Print "2"
        : Print "3-5"
        : Print ">= 10"



   Case 3 To 5 : Print "3-5"

   Case Is >= 10 : Print ">= 10"

   Case Else : Print "Not in Case statement"

End Select
És szimulátorban mükszik! :lol:
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Üdv!

Hogyan lehetne megoldani egy olyen elágazást IF utasítással amely a következő lenne :

Kód: Egész kijelölése

Ha commnad értéke nagyobb mint 0 de kisebb mint 255 akkor ugrás a xy ponta

Kód: Egész kijelölése

 if command > 0 ................ then gosub XY
Hogy is van ez?
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Végülis ha command értéke 0 és 255 közé esik és ez váltja ki az ugrást akkor lehet az utasítás?

Kód: Egész kijelölése

 IF command <255 THEN GOTO XY '???
??
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Működik az utasítás és működik a két avr is egy infra vevővel.
Válasz küldése