Goazen bada jokoaren arauak aditzera ematera:
Oharrak:
Ohartuko zinenez, '/' eragilea ez da kontutan hartu eta honexegatik izan da: programak
adierazpena osatzerakoan zenbakiak eta eragileak aleatorioki hartzen ditu eta '/' erabiliz gero
gerta daiteke burutu beharreko zatiketak osoak ez izatea, zenbaki dezimalak emanez. Ez dugu
jokoa gehiegi konplikatu nahi izan eta horregatik kanpoan uztea egokiago iruditu zaigu.
Programa ondoko zatitan banatzen da.
Adierazpen hori (ERAN$) karaktere-katea izango da programarentzat. Beraz, tartean dauden
zuriguneak ere esanguratsuak dira. Katea karakterez karaktere aztertuz joan; gaiak
(zenbaki-kateak) eta eragileak (+,–,*) bereiztuz eta aldi berean adierazpenaren balioa
kalkulatuz joan beharko da.
Bereizketa honetarako zera eduki behar dugu kontutan: bi gairen tartean eragileak soilik
edota eragilearen aurretik eta atzetik zuriguneak egon daitezkeela.
10 REM ZENBAKIA LORTU
20 DIM DIG(25):DIM AUK(8):DIM POSI(8,2):DIM IKUR(3)
30 CLS:SCREEN 2:KEY OFF:RANDOMIZE TIMER
40 FOR I=1 TO 25:DIG(I)=I:NEXT I
50 FOR I=1 TO 3:IKUR(I)=I:NEXT I
60 POSI(1,1)=5:POSI(1,2)=15:POSI(2,1)=6:POSI(2,2)=8:POSI(3,1)=8:
POSI(3,2)=13:POSI(4,1)=7:POSI(4,2)
=20:POSI(5,1)=9:POSI(5,2)=5:POSI(6,1)=11:POSI(6,2)=8:POSI(7,1)=10:
POSI(7,2)=21:POSI(8,1)=12:POSI(8,2) =14
70 KOP=25
80 FOR J=1 TO 8
90 ALE=INT (RND*KOP)+1
100 AUK(J)=DIG(ALE)
110 FOR II=ALE TO KOP-1:DIG(II)=DIG(II+1):NEXT II
120 KOP=KOP-1
130 NEXT J
140 KOP=3
150 ZENB=AUK(1):ADIER$=STR$(AUK(1))
160 FOR K=2 TO 4
170 ALE=INT (RND*KOP) + 1 : ERAG=IKUR(ALE)
180 REM AUKERA
190 IF ERAG=1 THEN ZENB=ZENB+AUK(K):ADIER$=ADIER$+" +":
GOTO 220 200
IF ERAG=2 THEN ZENB=ZENB-AUK(K):ADIER$=ADIER$+" -":
GOTO 220 210
IF ERAG=3 THEN ZENB=ZENB*AUK(K):ADIER$=ADIER$+" *":GOTO 220
220 REM AMAUKERA
230 ADIER$=ADIER$+STR$(AUK(K))
240 FOR II=ALE TO KOP-1:IKUR(II)=IKUR(II+1):NEXT II
250 KOP=KOP-1
260 NEXT K
270 LOCATE 3,34:PRINT "ADIERAZPENAREN BILA":LOCATE 4,34,:
PRINT "-------------------"
280 CIRCLE (100,65),100
290 FOR I=1 TO 8:LOCATE POSI(I,1),POSI(I,2):PRINT AUK(I):NEXT I
300 LOCATE 16,5:PRINT "ZENBAKIA: ";ZENB
320 LOCATE 18,5:PRINT "Multzoko 4 zenbaki eta (+,-,*) eragileak erabiliz
emaitzatzat ";ZENB;" emango":LOCATE 19,5:PRINT "duen adierazpen bat idatzi
behar duzu: ":LOCATE 21,11:INPUT "",ERAN$
330 IF ERAN$="" THEN 520
340 ADIER1$="":I=1:GAIA$=""
350 WHILE ASC(MID$(ERAN$,I,1)) =48 AND ASC(MID$(ERAN$,I,1)) =57
360 GAIA$=GAIA$+MID$(ERAN$,I,1):I=I+1
370 WEND
380 ZENB1=VAL(GAIA$)
390 WHILE I =LEN(ERAN$)
400 A=ASC(MID$(ERAN$,I,1))
410 IF A=42 OR A=43 OR A=45 OR I LEN(ERAN$) THEN
420 ELSE I=I+1:GOTO 510 420 IF I =LEN(ERAN$) THEN IKUR$=
MID$(ERAN$,I,1) ELSE 510
430 GAIA$="":I=I+1
440 IF (ASC(MID$(ERAN$,I,1)) 48 OR ASC(MID$(ERAN$,I,1))
57 OR I LEN(ERAN$)) AND ASC(MID$
(ERAN$,I,1)) 32 THEN GOTO 460
450 GAIA$=GAIA$+MID$(ERAN$,I,1):I=I+1:IF I =LEN(ERAN$)
THEN 440
460 REM AUKERA
470 IF IKUR$="+" THEN ZENB1=ZENB1+VAL(GAIA$):GOTO 500
480 IF IKUR$="-" THEN ZENB1=ZENB1-VAL(GAIA$):GOTO 500
490 IF IKUR$="*" THEN ZENB1=ZENB1*VAL(GAIA$)
500 REM AMAUKERA
510 WEND
520 LOCATE 23,10:IF ZENB1=ZENB AND ERAN$ "" THEN PRINT "
ONGI!!! Lortu duzu"; ELSE PRINT
"Ez duzu asmatu. Adierazpena ";ADIER$;" izan daiteke.";
530 LOCATE 25,20:PRINT "Jarraitu nahi al duzu (B/E/?"
540 TE$=INKEY$:WHILE TE$ "":TE$=INKEY$:WEND
550 WHILE TE$ "B" AND TE$ "b" AND TE$ "E" AND TE$ "e":
TE$=INKEY$:WEND
560 IF TE$="B" OR TE$="b"THEN 30
570 LOCATE 23,1:PRINT SPC(79):LOCATE 25,1:PRINT SPC(79):LOCATE 22,30:
PRINT "Agur beste bat arte!";
580 END
600 REMN AMAIA ZENBAKIA LORTU