}

Ea adierazpen egokia lortzen duzun

1988/10/01 Arrojeria, Eustakio - Elhuyar Zientziaren Komunikazioa | Lizaso, Pili - Informatika SailaElhuyar Fundazioa Iturria: Elhuyar aldizkaria

Oraingo honetan zenbaki-joko batekin gatoz berriro. Nahikoa sinplea da, baina entretenigarria, eta oinarrizko eragiketak praktikatzeko egokia izan daitekeela uste dugu. Honez gain eta beti bezala, programako zenbait zati zuei azaltzen ere saiatuko gara.

Goazen bada jokoaren arauak aditzera ematera:

  1. 1etik 25era bitarteko 8 zenbakizko multzo bat agertuko zaizu.
  2. Programak hauetako lau zenbaki eta (+,–,*) eragileez osatutako adierazpen baten
    zenbakizko balioa kalkulatuko du.
  3. Emaitzatzat balio hori emango duen adierazpen bat lortu beharko duzu. Horretarako,
    multzoko 4 zenbaki eta (+,–,*) eragileak erabili ahal izango dituzu. Balio berbera emango
    duten adierazpen bat baino gehiago egon daitekeenez gero, hauetako edozein ontzat
    emango da, programak ebaluatutakoa ez izan arren.

Oharrak:

  • Zenbaki eta eragileak ezin dira errepikatu.
  • Eragile guztiak, hots (+,–,*) erabili beharko dira.
  • Adierazpena ebaluatzerakoan ez dira eragileen lehentasun-mailak kontutan hartuko.
    Ezkerretik eskuinera aplikatuko dira.
    Adib. 3 + 4 *2 = 14 izango da eta ez 11

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.

    40-50: Erabiliko diren zenbakiak eta ikurrak gorde
    60: Multzoko 8 zenbakien posizioak definitu
    70-130: 1etik 25erainoko zenbakietatik 8 aleatorioki hartu
    140-260: Adierazpena sortu ahala ebaluatu
    270-320: Aurkezpen-pantaila agertu eta erabiltzailearen erantzuna jaso
    330-510: Erabiltzaileak emandako adierazpena ebaluatu
  • 520-600: Erantzunaren egiaztapena

Erabiltzaileak emandako adierazpena ebaluatu

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

Gai honi buruzko eduki gehiago

Elhuyarrek garatutako teknologia