Problemstellung: Fünf Karten mit den Bildern Apfel, Birne, Clown, Dose und Esel werden verdeckt gezogen. Adam, Berta und Carl raten die Reihenfolge. Adam: Apfel. Esel, Birne, Clown, Dose (1 Karte richtig geraten) Berta: Esel. Birne, Clown, Apfel, Dose (2 Karten richtig geraten) Carl: Birne, Dose, Clown, Esel, Apfel (3 Karten richtig geraten) Wie war die richtige Reihenfolge aller Karten? Es gibt 120 Möglichkeiten, die fünf Karten in verschiedener Reihenfolge anzuordnen (5! =1*2*3*4*5=120). Bei sechs Karten würden es bereits 6! =720 Möglichkeiten. Natürlich läßt sich dieses Rätsel durch Denken lösen - schneller kann es der Computer, der die fünf Elemente A(pfel), B(irne),...,E(sel) durchprobiert, wie Listing 1 zeigt. In den Zeilen 170 - 190 können die zweiten »IF-Bedingungen« (if x < 1 then 210) fortfallen. Sie sollen nur die Ablaufgeschwindigkeit erhöhen, zeitigen jedoch bei der kurzen Arbeitszeit von etwa 7 Sekunden keine meßbaren Verbesserungen. Zeile 95 kann entfallen. Sie zählt lediglich die überprüften Kombinationen. Ebenfalls sind die Zeilen 20 und 390 entbehrlich, da sie nur - für Versuchszwecke - die Z4it messen. 10 MODE 1:PRINT 20 PRINT STRING$(38,"#") 30 PRINT"#";SPC(36)"#" 40 PRINT"# ";CHR$(24);" Dieses Programm ";CHR$(24);" #" 50 PRINT"# ";CHR$(24);"ermittelt Zahlen, die sich";CHR$(24);" #" 60 PRINT"# ";CHR$(24);"selbst vervielfachen, wenn";CHR$(24);" #" 70 PRINT"# ";CHR$(24);"man ihre letzte Ziffer an ";CHR$(24);" #" 80 PRINT"# ";CHR$(24);" die erste Stelle setzt. ";CHR$(24);" #" 90 PRINT"# ";CHR$(24);" Die Anzahl der Ziffern ";CHR$(24);" #" 100 PRINT"# ";CHR$(24);" bleibt also erhalten. ";CHR$(24);" #" 110 PRINT"# ";CHR$(24);"Die moeglichen Vervielfa- ";CHR$(24);" #" 120 PRINT"# ";CHR$(24);" fachungsfaktoren liegen ";CHR$(24);" #" 130 PRINT"# ";CHR$(24);" zwischen 2 und 9. ";CHR$(24);" #" 140 PRINT"# ";CHR$(24);" Der Rechner druckt die ";CHR$(24);" #" 150 PRINT"# ";CHR$(24);" Ursprungszahl aus. ";CHR$(24);" #" 160 PRINT"#";SPC(36)"# 170 PRINT"# Weiter auf Tastendruck ! #" 180 PRINT"#";SPC(36)"# 190 PRINT STRING$(38,"#") 200 GOSUB 460 210 MODE 2 220 WINDOW#3,2,80,5,15 230 WINDOW#2,8,60,18,24 240 LOCATE 10,3:PRINT"Welcher Faktor soll es sein ? "; 250 GOSUB 460 260 IF ASC(a$)<50 OR ASC(a$)>57 THEN 240 ELSE PRINT a$ 270 a$=RIGHT$(a$,1):v=VAL(a$) 280 FOR a=v TO 9:PRINT#3 290 a$=RIGHT$(STR$(a),1) 300 x=a:y=aç v:b=a MOD v 310 WHILE NOT (y=a AND b=0) 320 b=x MOD v 330 y=INT(x/v):y$=RIGHT$(STR$(y),1) 'naechste Ziffer 340 IF y=0 THEN y$="0" 350 z=10*b+y 360 a$=a$+y$ 370 PRINT#3,y$;" "; 380 x=z 390 WEND 400 NEXT 410 PRINT#2," Weitere Zahlen ? " 420 PRINT#2," Dann >j< eingeben, " 430 PRINT#2,"Jede andere Taste beendet das Programm . " 440 GOSUB 460 450 IF LOWER$(a$)="j" THEN 210 ELSE END 460 a$=INKEY$:IF a$="" THEN 460 470 RETURN10 'Knack die Nuss 2 20 EVERY 50 GOSUB 390 30 MODE 2:GOSUB 290 50 FOR a=1 TO 5 60 FOR b=1 TO 5:IF b=a THEN 250 70 FOR c=1 TO 5:IF c=b OR c=a THEN 240 80 FOR d=1 TO 5:IF d=c OR d=b OR d=a THEN 230 90 FOR e=1 TO 5:IF e=d OR e=c OR e=b OR e=a THEN 220 95 w=w+1:LOCATE 1,20:PRINT w 100 x=0:y=0:z=0 110 FOR I=1 TO 5 120 a$=b$(a)+b$(b)+b$(c)+b$(d)+b$(e) 130 aa$=MID$(a$,i,1) 140 bb$=MID$(a$(1),i,1) 150 cc$=MID$(a$(2),i,1) 160 dd$=MID$(a$(3),i,1) 170 IF aa$=bb$ THEN x=x+1:IF x > 1 THEN 210 180 IF aa$=cc$ THEN y=y+1:IF y > 2 THEN 210 190 IF aa$=dd$ THEN z=z+1:IF z > 3 THEN 210 200 IF x=1 AND y=2 AND z=3 THEN GOSUB 340 210 NEXT 220 NEXT 230 NEXT 240 NEXT 250 NEXT 260 NEXT 270 DATA c,k,q,s,w 280 END 290 RESTORE:FOR i=1 TO 5:READ a$:b$(i)=a$:NEXT 300 a$(1)="cwkqs" 310 a$(2)="wkqcs" 320 a$(3)="ksqwc" 330 RETURN 340 PRINT"Die Reihenfolge war : ";a$ 350 PRINT"Adams Reihe : ";a$(1) 360 PRINT"Bertas Reihe: ";a$(2) 370 PRINT"Carls Reihe : ";a$(3) 380 END 390 zei=zei+1:LOCATE 60,24:PRINT zei;" Sekunden" : RETURN CPCAI
| ★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser... |
|
|