Welcome, Guest. Please login or register.


Author Topic: BASIC (Read 162420 times)

Offline ergoGnomik

  • EP lover
  • *
  • Posts: 762
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.3 Windows NT 6.3
  • Browser:
  • Vivaldi 2.3.1440.61 Vivaldi 2.3.1440.61
    • View Profile
Re: BASIC
« Reply #1350 on: 2019.March.16. 11:47:45 »
Ha nem lesz végtelen ciklus, akkor nem telhet be a verem az ilyen önmagát meghívó eljárástól, akkor sem, ha sokszor hívja meg önmagát?
Pontosabb azt mondani, hogy ha a rekurzív hívások száma nem haladja meg a kritikus értéket, akkor a program futása nem fog emiatt hibával megszakadni.

Offline szipucsu

  • EP addict
  • *
  • Posts: 7628
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #1351 on: 2019.March.16. 12:00:45 »
Pontosabb azt mondani, hogy ha a rekurzív hívások száma nem haladja meg a kritikus értéket, akkor a program futása nem fog emiatt hibával megszakadni.
Szerintem sok rekurzív hívás volt abban a kukacos játékban, ahogy teszteltem, direkt úgy játszottam, hogy sok legyen, de nem lett gond. Nem is hibával szakadna meg olyankor, nekem teljesen le is fagyott, amikor elérte a 39 körüli értéket a lentebbi program, és csak a reset segített, még a STOP-ra sem reagált.
Na, de majd abba a topikba kicsit konkrétabban leírom a helyzetet.
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos
OPEL #1:"Audi(o):" ACCESS DENIED

Offline IstvanV

  • EP addict
  • *
  • Posts: 4859
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: BASIC
« Reply #1352 on: 2019.March.16. 12:34:39 »
A lényeg, hogy legyen valamilyen kilépési feltétel, ami megakadályozza a végtelen ciklust. Elsősorban olyan problémánál érdemes ilyen megoldást használni, ami egyszerűen leírható "rekurzív" módon. Például az alábbi programban a FILL() területet tölt fel a PLOT PAINT utasításhoz hasonlóan, bár a megvalósítás nem hatékony (ennél nagyobb területnél le is fagy, de ez csak egy egyszerű példa):

23066-0

Offline szipucsu

  • EP addict
  • *
  • Posts: 7628
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #1353 on: 2019.March.16. 13:17:41 »
A lényeg, hogy legyen valamilyen kilépési feltétel, ami megakadályozza a végtelen ciklust.
Tehát ha például 30-szor meghívja önmagát az eljárás, utána a program másik részéhez kerül a végrehajtás, majd később újra meghívja 30-szor önmagát az eljárás, akkor a kétszer 30 nem adódik össze, hogy így túllépje a 39-et és lefagyjon?
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos
OPEL #1:"Audi(o):" ACCESS DENIED

Offline IstvanV

  • EP addict
  • *
  • Posts: 4859
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: BASIC
« Reply #1354 on: 2019.March.16. 13:26:46 »
Tehát ha például 30-szor meghívja önmagát az eljárás, utána a program másik részéhez kerül a végrehajtás, majd később újra meghívja 30-szor önmagát az eljárás, akkor a kétszer 30 nem adódik össze, hogy így túllépje a 39-et és lefagyjon?

Ha az első 30 hívás visszatért, akkor nem.

Offline szipucsu

  • EP addict
  • *
  • Posts: 7628
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #1355 on: 2019.March.18. 12:10:02 »
Valakinek van ötlete, hogy lehetne a következőt egyszerűbben, rövidebben megcsinálni?

Code: [Select]
4210   SET CHARACTER 0,102,255,255,159,15,159,255,255,102
 4230   SET CHARACTER 0,0,102,255,255,159,15,159,255,255
 4250   SET CHARACTER 0,0,0,102,255,255,159,15,159,255
 4270   SET CHARACTER 0,0,0,0,102,255,255,159,15,159
 4290   SET CHARACTER 0,0,0,0,0,102,255,255,159,15
 4310   SET CHARACTER 0,0,0,0,0,0,102,255,255,159
 4330   SET CHARACTER 0,0,0,0,0,0,0,102,255,255
 4350   SET CHARACTER 0,0,0,0,0,0,0,0,102,255
 4370   SET CHARACTER 0,0,0,0,0,0,0,0,0,102

A lényeg, hogy karakteres animációval a karaktert elsüllyeszti. A végéről az utolsó szám eltűnik, az elejére (a karakter kódja után) pedig nulla kerül. (Itt most pont a karakter kódja is 0, ezért több 0 van az elején.)
Az se lenne baj, ha a számokat nem kell megadni, hanem a memóriából kiolvassa, mi van ott, bár nem létfontosságú, ahhoz sok speek kell.
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos
OPEL #1:"Audi(o):" ACCESS DENIED

Online Zozosoft

  • EP addict
  • *
  • Posts: 13313
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #1356 on: 2019.March.18. 12:36:15 »
Én valami ilyesmire gondolnék:
Code: [Select]
4210 NUMERIC C(9)
4220 C(1)=102:C(2)=255:C(3)=255:C(4)=159:C(5)=15:C(6)=159:C(7)=255:C(8)=255:C(9)=102
4230 FOR I=1 TO 9
4240   SET CHARACTER 0,C(1),C(2),C(3),C(4),C(5),C(6),C(7),C(8),C(9)
4250   FOR J=9 TO 2 STEP -1
4260     C(J)=C(J-1)
4270   NEXT J
4280   C(1)=0
4290 NEXT I
C-t lehetne ciklusban SPEEK-kel tölteni.

Offline ergoGnomik

  • EP lover
  • *
  • Posts: 762
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Vivaldi 2.3.1440.60 Vivaldi 2.3.1440.60
    • View Profile
Re: BASIC
« Reply #1357 on: 2019.March.18. 12:44:49 »
Felvehetnél egy tömböt, aminek az első felét nullával töltöd fel, a második felét pedig a karakter definiciójának adataival. A karakter definiálásánál a tömböt úgy olvasod ki, hogy az animáció fázisával megnöveled az indexet. [Zozó kódjának alapján SET CHARACTER 0,C(1+I),C(2+I),C(3+I),C(4+I),C(5+I),C(6+I),C(7+I),C(8+I),C(9+I)] A süllyesztést a fázis [az előbbi kódban I] értékének csökkentésével kezelheted.