Silmukka ongelma
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Silmukka ongelma
Miten saan aloitettua ja lopetettua silmukan, kun jokin ehto on tosi.(siis, kun yksi ehto on tosi niin aloitetaan ja kun toinen ehto on tosi niin lopetetaan.)
Jos koitan If lauseilla niin cb valittaa "Can't find missing if"
Kyse on While...Wend silmukasta.
Jos koitan If lauseilla niin cb valittaa "Can't find missing if"
Kyse on While...Wend silmukasta.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
-
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 3:53 pm
- Location: Suomi, Finland
- Contact:
Re: Silmukka ongelma
Code: Select all
Repeat
Text 0,0,"press space"
If var=1 Then
while var=1
Text 0,0,"press enter"
if KeyHit(cbkeyreturn) Then var=0
DrawScreen
Wend
EndIf
If KeyHit(cbkeyspace) Then var=1
DrawScreen
Forever
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Silmukka ongelma
Ei noin, vaan seuraavaan tapaan.(koodi ei vaan toimi)
Code: Select all
If aloita = 1 Then While ehto
koodia...
If lopeta = 1 Then Wend
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Re: Silmukka ongelma
Code: Select all
If aloita = 1 Then
While ehto
// plaaplaa...
If lopeta = 0 Then
koodia...
EndIf
Wend
EndIf
Re: Silmukka ongelma
Argh kirjottelen tässä romaania ja aina joku ehtii kirjottaa sinne väliin. Kaks kertaa oon jo painanu "lähetä"... No tässä tulee
Tuhoojabotti:
Miksi laittaa erikseen:
If var = 1 Then
While var = 1
Silmukkaa ei ikinä suoriteta jos var <> 1, ja If-lauseke ei ikinä toteudu jos var <> 1. Eli siinä tarkastetaan sama ehto kaksi kertaa peräkkäin.
Ja while - wend-silmukassa käyttäisin komentoa Exit sen sijaan että antaisin muuttujalle 'var' arvon 0, tosin sehän vaihtelee ihan käyttötarkoituksen mukaan. Jos annat muuttujalle arvon 0, silmukka käydään silti vielä yhden kerran läpi, kyse kun on while - wend-silmukasta. Komennolla Exit silmukasta poistutaan välittömästi.
Vertaa:
Eräs cb koodaaja:
Et voi tehdä noin. Jos aloitat silmukan, on se pakko myös lopettaa jossain vaiheessa, ja tuolla tavalla ei kummatkin ehdot välttämättä toteudu.
Joudut tekemään sen esim. näin:
Jos nyt ymmärsin oiken sen mitä yritit. Voimme ehkä kertoa paremmin miten asia kannattaa tehdä, jos selität meille mitä yrität tehdä.
Tuhoojabotti:
Miksi laittaa erikseen:
If var = 1 Then
While var = 1
Silmukkaa ei ikinä suoriteta jos var <> 1, ja If-lauseke ei ikinä toteudu jos var <> 1. Eli siinä tarkastetaan sama ehto kaksi kertaa peräkkäin.
Ja while - wend-silmukassa käyttäisin komentoa Exit sen sijaan että antaisin muuttujalle 'var' arvon 0, tosin sehän vaihtelee ihan käyttötarkoituksen mukaan. Jos annat muuttujalle arvon 0, silmukka käydään silti vielä yhden kerran läpi, kyse kun on while - wend-silmukasta. Komennolla Exit silmukasta poistutaan välittömästi.
Vertaa:
Code: Select all
While a = 0
If b = 2 Then a = 1
b + 1
Wend
Print "Kierroksia " + b
WaitKey
Code: Select all
While a = 0
If b = 2 Then Exit
b + 1
Wend
Print "Kierroksia: " + b
WaitKey
Et voi tehdä noin. Jos aloitat silmukan, on se pakko myös lopettaa jossain vaiheessa, ja tuolla tavalla ei kummatkin ehdot välttämättä toteudu.
Joudut tekemään sen esim. näin:
Code: Select all
//Vaihtoehto 1:
If aloita = 1 Then
While True
If lopeta Then Exit
Wend
EndIf
//Vaihtoehto 2:
While aloita
If lopeta Then Exit
Wend
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Silmukka ongelma
Idea on juuri tuo ja saan sen toimimaan noin. Onkohan mahdollista, että tämä "silmukkaa ei voi aloittaa, jollei sille ole varmaa lopetusta", voitaisiin laskea cb:n bugiksi?
Tein jo "kovalla vaivalla" syntaksin korjauksen(projuna on bf kääntäjä) joka tarkistaa, että silmukalla on varmasti aloitus ja lopetus pisteet(Purkka_kuminauha_jeesusteippi olisi jäänyt vähemmälle, jos sen olisi saanut suoraan toimimaan).
Kiitos vastauksista.
Tein jo "kovalla vaivalla" syntaksin korjauksen(projuna on bf kääntäjä) joka tarkistaa, että silmukalla on varmasti aloitus ja lopetus pisteet(Purkka_kuminauha_jeesusteippi olisi jäänyt vähemmälle, jos sen olisi saanut suoraan toimimaan).
Kiitos vastauksista.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Re: Silmukka ongelma
Se ei todellakaan ole bugi, vaan ihan normaali logiikkavirhe, jonka cb:n kääntäjä tunnistaa ja luonnollisesti heittää erroria, syystä jonka mainitsin edellisessä viestissäni.Onkohan mahdollista, että tämä "silmukkaa ei voi aloittaa, jollei sille ole varmaa lopetusta", voitaisiin laskea cb:n bugiksi?
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Silmukka ongelma
Olisihan se tietysti parempi jos sen voisi kiertää (Tiedän ehkä miten), mutta tiedetään tiedetään, cb on aloittelijoille suunnattu kieli.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
-
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 3:53 pm
- Location: Suomi, Finland
- Contact:
Re: Silmukka ongelma
OFFTOPIC:
joo oon ollu vähän tillin tallin nukuin bout 3 tuntii viime yönä...Jonez wrote: Tuhoojabotti:
Miksi laittaa erikseen:
If var = 1 Then
While var = 1
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Silmukka ongelma
Siis mielestäsi olisi hyvä ominaisuus, että voisit määritellä loopin, jolle ei koodissa määritellä varmaa loppua? Ja tämän ominaisuus johtuu siitä, että CB on aloittelijoille suunnattu? Yllätys yllätys: vaikkapa C++:ssa tämä on aivan yhtä mahdotonta. Kuten kuvitellakseni kaikissa kielissä. Ja mitä tällä edes saavutettaisiin? Sitä, että koodi suoritettaisiin vain kerran? Voithan laittaa loppuun tarkistuksen "If lopetetaan_ekalla Then Exit", sitten vain laitat tarvittaessa lopetetaan_ekalla -muuttujan arvoksi muun kuin nollan. Ta-daa.Eräs cb koodaaja wrote:Olisihan se tietysti parempi jos sen voisi kiertää (Tiedän ehkä miten), mutta tiedetään tiedetään, cb on aloittelijoille suunnattu kieli.
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Silmukka ongelma
Kyllä Juuri minun omassa projektissani(ja ehkä joidenkin muidenkin) olisi tästä hyötyä(ei tarvitse viritellä niin paljoa). Luonnollisesti, jos loopissa ei ole alkua tai loppua, sitä ei suoritettaisi kuin kerran.Siis mielestäsi olisi hyvä ominaisuus, että voisit määritellä loopin, jolle ei koodissa määritellä varmaa loppua?
En tarkoittanut siinä mielessä, että C++:lla voisi tehdä näin tuossa kohdassa:"CB on aloittelijoille suunnattu kieli", vaan sitä, että monimutkaisia ominaisuuksia ei ole niin paljon. Ja tuosta esimerkistä:Yllätys yllätys: vaikkapa C++:ssa tämä on aivan yhtä mahdotonta. Kuten kuvitellakseni kaikissa kielissä. Ja mitä tällä edes saavutettaisiin? Sitä, että koodi suoritettaisiin vain kerran?
Kyllä minä tuollaisia osaan tehdä(ohjelmointikokemusta n.3-4 vuotta), mutta jos kysyn täällä foorumilla asiallisesti jotain, eikö siihen voisi vastata asiallisesti.Voithan laittaa loppuun tarkistuksen "If lopetetaan_ekalla Then Exit", sitten vain laitat tarvittaessa lopetetaan_ekalla -muuttujan arvoksi muun kuin nollan. Ta-daa.
ps. Tämä on minun mielipiteeni asiasta
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Silmukka ongelma
No mikset sitten tee sellaista vaan yrität jotain kielen logiikan vastaista o: Ja IMHO tuo oli varsin asiallinen vastaus, ainoastaan lopussa oleva ta-daa olisi voinut viitata kettuiluun, mitä se ei edes ollut. Tokihan tuollaisen ominaisuuden voisi kieleen sisällyttää, muttet arvaakaan kuinka moneen virhetilanteeseen moinen johtaisi.
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Silmukka ongelma
En suoraan yritä tehdä logiikan vastaisesti, vaan vain viritellä sen toimimaan. Kyllä minä koodata osaan, mutta virittelyssä en ole kovin hyvä. Ja ymmärsin sen ta-daa -esiimerkkisi v*********, sori. Pystyn arvaamaan, montako virhetilannetta aloittelijat saisivat aikaa(=todella monta, jos komento olisi virheherkkä), mutta "osaavat" koodarit eivät varmasti montaakaan.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Re: Silmukka ongelma
Mutta minkä takia tämmöinen pitäisi olla? Looppi joka menee vain kerran läpi? Sehän on sama kuin ei olisi looppia ollenkaan! Alkaa minusta tuntua siltä että olette sekoittaneet termit keskenään, jos If lausekkeesta puhutaan.
Eli siis laitat alkuun sen ehdon, vaikkapa If var <> 1 ja iiihan koodin loppuun sen EndIf, mielummin kuin ei ollenkaan. Onko se nyt muka niin vaikeaa kirjoittaa yksi rivi lisää sinne koodin loppuun? Ei nyt tuota kannata mistään koodaamisesta alkaa hakemaan...
Anteeksi tekstini epäselvyys, pää vähän sekaisin
Eli siis laitat alkuun sen ehdon, vaikkapa If var <> 1 ja iiihan koodin loppuun sen EndIf, mielummin kuin ei ollenkaan. Onko se nyt muka niin vaikeaa kirjoittaa yksi rivi lisää sinne koodin loppuun? Ei nyt tuota kannata mistään koodaamisesta alkaa hakemaan...
Anteeksi tekstini epäselvyys, pää vähän sekaisin
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Silmukka ongelma
Siis looppia suoritettaisiin, jos molemmat päät löytyisivät. Jos alku tai loppu puuttuisi(tai molemmat) silmukka suoritettaisiin vain kerran. Termejä ei ole sekoitettu, vaan silmukan pitäisi toimia vaikka näin:
Code: Select all
If aloita = 1 Then While ehto
koodia...
If lopeta = 1 Then Wend
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
-
- Advanced Member
- Posts: 335
- Joined: Tue Aug 28, 2007 3:55 pm
- Location: Siellä jossain
Re: Silmukka ongelma
En ymmärrä mitä ideaa tuossa on:
Eihän tuota edes voi käyttää mihinkään vaikka toimisikin(?).
Code: Select all
Jos aloita=1 niin looppaa jos ehto on tosi
siirretään vaikka objektia
Jos lopeta=1 niin aloita looppi alusta
Projektit:
Joku projekti meneillään... Mitähän siitäkin tulee
Joku projekti meneillään... Mitähän siitäkin tulee
Re: Silmukka ongelma
miten olisi vain
Code: Select all
alku:
tee jotain
if aloita and lopeta then goto alku
CoolBasic henkilökuntaa
Kehittäjä
Kehittäjä
Re: Silmukka ongelma
Tai tuosta kehittelemällä:
EDIT: Aa, ymmärsin idean väärin.
Code: Select all
If looppialkaa = 0 Then goto loopinloppu
loopinalku:
'tee jotain loopissa
If looppiloppuu = 0 then goto loopinalku
loopinloppu:
Last edited by Harakka on Sun Jan 06, 2008 3:04 pm, edited 1 time in total.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Silmukka ongelma
1. Tuo ei ole ollenkaan mitä tarkoitettiin, tuossahan ei käydä koodia lainkaan läpi jos looppialkaa on 0, sehän kuului käydä kerran läpi. ja 2. Gotoa ei kannata käyttää looppeihin, se on hidas ja purkka. Itse tekisin asian näin:Harakka wrote:Tai tuosta kehittelemällä:Code: Select all
If looppialkaa = 0 Then goto loopinloppu loopinalku: 'tee jotain loopissa If looppiloppuu = 0 then goto loopinalku loopinloppu:
Code: Select all
While looppialkaa
'loopin sisältö
If Not looppiloppuu Then Exit
Wend
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Silmukka ongelma
Tuossa Harakan esimerkissä ei koodia suoriteta kertaakaan jos looppialkaa - muuttuja on nolla. Ideana siis oli, että jos silmukalle ei ole aloitus- tai lopetuspistettä niin silloin sen sisältö suoritettaisiin vain kerran(mutta suoritettaisiin kuitenkin). Sain itse jo sen toimimaan, mutta joudun kirjoittamaan saman koodin silmukan ulkopuolelle ja sisäpuolelle. Hyöty on siis siinä(omalla kohdallani), kun BF:ää suoritetaan, ja jos koodista löytyy silmukan aloituspiste, voidaan silmukka aloittaa siinä kohtaa ja lopettaa, kun lopetuspiste tulee. Syntaksin korjaus tarkistaa, että koodissa on sekä silmukan aloitus(jos on loppu) ja lopetus(jos on alku) pisteet.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit