Αφιερωμένο στο Party "Θα γίνουμε όλοι 18"

zoro

Retro Member
Joined
20 Φεβ 2008
Μηνύματα
177
Αντιδράσεις
5
Με αφορμή το ομώνυμο πάρτι της Παρασκευής, σκέφθηκα ένα πρόγραμμα, στο οποίο, όσες και όποιες από τις τέσσερεις βασικές αριθμητικές πράξεις να κάνει κανείς, και με όποιους αριθμούς και να σκεφθεί κανείς, το αποτέλεσμα οδηγεί πάντα στον "μαγικό αριθμό" που χαρακτηρίζει το πάρτι, τον αριθμό 18 (με βασάνισε όλο το Σαββατοκύριακο να το φτιάξω, καθ' ότι "μαθητής" ακόμη).

Το πρόγραμμα έγινε με την Locomotive Basic του Amstrad 6128 και βασίζεται σε μία μαθηματική ιδιαιτερότητα. Όποιος την βρει και μου το πει το βραδυ του πάρτι, κερδίζει μιά... βόλτα!

Θεωρητικά, μπορεί κανείς να βάλει όποιον αριθμό θέλει (από το 1 έως το... άπειρο), χάριν όμως υπολογιστικης ευκολίας, καλό θα ήταν να βάλει μέχρι έναν διψήφιο αριθμό, και να μην ξεπεράσει τις πέντε πράξεις, ή τουλάχιστον, ας κάνει όσες πράξεις θέλει, αρκεί να προσέξει να μην γίνει τεράστιος ο αριθμός (σε μεγάλους E-nums το πρόγραμμα δεν ανταποκρίνεται).

10 MODE 2

20 INPUT "Give an Integer number (no more than two digits for easy calculating)";A

30 PRINT: PRINT

40 PRINT "Press (A) for +, (B) for -, © for *, (D) for /, (E) for final calculation": PRINT

50 A$=INKEY$

60 IF A$="" THEN GOTO 50

70 IF A$="A" OR A$="a" THEN GOTO 130

80 IF A$="B" OR A$="b" THEN GOTO 150

90 IF A$="C" OR A$="c" THEN GOTO 190

100 IF A$="D" OR A$="d" THEN GOTO 210

110 IF A$="E" OR A$="e" THEN GOTO 230

120 GOTO 50

130 INPUT "Give another number to calculate with: ";B:ADD=A+B: PRINT A;"+";B;"=";ADD:A=ADD

140 GOTO 40

150 INPUT "Give another number to calculate with: ";B

160 IF B>A OR B=A THEN PRINT "Give a smoller than the previous number":GOTO 150

170 AFF=ABS(A-B): PRINT A;"-";B;"=";AFF:A=AFF

180 GOTO 40

190 INPUT "Give another number to calculate with: ";B:MUL=A*B: PRINT A;"*";B;"=";MUL:A=MUL

200 GOTO 40

210 INPUT "Give another number to calculate with: ";B: DIV=ABS(INT(A/B)): PRINT A;"/";B;"=";DIV:A=DIV

220 GOTO 40

230 CLS: PRINT "CALCULATING and TRANSFORMING the numbers...":F=INT(A*9)

240 PRINT F;CHR$(243),

250 F$=STR$(F)

260 W=0

270 FOR X=1 TO LEN(F$)

280 V=VAL(MID$(F$,X,1))

290 PRINT V;CHR$(243),

300 WW=W+V

310 PRINT WW;CHR$(243),

320 W=WW

330 IF WW=9 THEN GOTO 350

340 NEXT X

350 LOCATE 17,12: PRINT "FINISHED!!! Press any key to give you the results..."

360 G$=STR$(WW)

370 WHILE INKEY$="":WEND

380 LOCATE 25,14: PRINT "Last number is:";ww;: PRINT "(";MID$(G$,2,1);"+";MID$(G$,3,1);")";" *2 = 18"

390 LOCATE 22,18: PRINT "THE MAGIC NUMBER *** 18 *** IS HERE!!!"

400 LOCATE 28,23: PRINT "Continue? (Y)es or (N)o"

410 A$=INKEY$

420 IF A$="" THEN GOTO 410

430 IF A$="Y" OR A$="y" THEN RUN

440 IF A$="N" OR A$="n" THEN MODE 1:END
Y.Γ : Ελπίζω να το έγραψα καλά, γιατί η οθόνη στο Internet Cafe είναι χάλια για τα γερασμένα μου μάτια!

Υ.Γ. 2: Έχω βάλει και συνοπτικό μήνυμα στο θέμα του πάρτυ.

Υ.Γ. 3: Shock, έκανα καλά που το έβαλα εδώ;
 
Zoro μια χαρά είναι εδώ. Αυτή τη στιγμή λόγω διαβάσματος δεν έχω χρόνο να το μεταφέρω στον caprice και να το δω, :cry:

...οπότε θα πας τον wally βόλτα :eek:
 
Ο Shock χρειαζεται μια βολτα (btw βλεπω να γινεται το GRM inside joke...εμ πως,μονο το AmigaHellas θα εχει? :D )
 
Δηλαδή κ.κ. Shock και Wally,

Είστε τόσο σίγουροι οτι θα βρείτε το "κλειδί" που κρύβεται στον μαθηματικό αλγόριθμο και θα κερδίσετε μία βόλτα;

Έχω φροντίσει επίτηδες να φαίνεται στην εξέλιξη του προγράμματος η μετατροπή των αριθμών, και με λίγη σκέψη μπορεί να βρεθεί...
 
όταν γυρίσω από τη δουλειά θα αναλάβω δράση zorro

Αλλά τη βόλτα δε θα τη στερήσω από τον Wally:cool:
 
Shock,

Όταν θέλω να βάλω σε παράθεση ένα πρόγραμμα, σε περιπτώσεις που πληκτρολογώ π.χ. : και μετά την εντολή PRINT , τότε στην θέση του : και του P βγαίνει φατσούλα, όπως βλέπεις εδώ :pRINT.

Προφανώς, επειδή εκ συμπτώσεως, η άνω-κάτω τελεία και το πρώτο γράμμα σημαινει οτι εδώ μπαίνει φατσούλα. Το ίδιο συμβαίνει και σε άλλες περιπτώσεις (π.χ. με το : και το D, το # και κάποια άλλα σύμβολα). Έτσι, αναγκάζομαι να βάλω κενό ανάμεσά τους (π.χ. : PRINT

ή : DIM), το οποίο είναι λάθος κατά την λογική της Basic, που τα θέλει κολλητά :) και αμέσως μετά PRINT).

Αν κάποιος πληκτρολογήσει το πρόγραμμα όπως το βλέπει, στα σημεία εκέινα, η Basic θα βγάλει Syntax Error.

Τι κάνουμε σε αυτές τις περιπτώσεις;
 
Τα listings καλο ειναι να μην μπαινουν σε Παραθεση αλλα σε Κωδικα (code). Δοκιμασες αν και εκει παρουσιαζεται το ιδιο φαινομενο ?
 
Telamonas.stokos είπε:
Τα listings καλο ειναι να μην μπαινουν σε Παραθεση αλλα σε Κωδικα (code). Δοκιμασες αν και εκει παρουσιαζεται το ιδιο φαινομενο ?

Πως το βάζουμε σε κώδικα;
 
Το βρήκα!

Κώδικας:
10 MODE 2
20 INPUT "Give an Integer number (no more than two digits for easy calculating)";A
30 PRINT:PRINT
40 PRINT "Press (A) for +, (B) for -, (C) for *, (D) for /, (E) for final calculation":PRINT
50 A$=INKEY$
60 IF A$="" THEN GOTO 50
70 IF A$="A" OR A$="a" THEN GOTO 130
80 IF A$="B" OR A$="b" THEN GOTO 150
90 IF A$="C" OR A$="c" THEN GOTO 190
100 IF A$="D" OR A$="d" THEN GOTO 210
110 IF A$="E" OR A$="e" THEN GOTO 230
120 GOTO 50
130 INPUT "Give another number to calculate with: ";B:ADD=A+B:PRINT A;"+";B;"=";ADD:A=ADD
140 GOTO 40
150 INPUT "Give another number to calculate with: ";B
160 IF B>A OR B=A THEN PRINT "Give a smoller than the previous number":GOTO 150
170 AFF=ABS(A-B):PRINT A;"-";B;"=";AFF:A=AFF
180 GOTO 40
190 INPUT "Give another number to calculate with: ";B:MUL=A*B:PRINT A;"*";B;"=";MUL:A=MUL
200 GOTO 40
210 INPUT "Give another number to calculate with: ";B:DIV=ABS(INT(A/B)):PRINT A;"/";B;"=";DIV:A=DIV
220 GOTO 40
230 CLS:PRINT "CALCULATING and TRANSFORMING the numbers...":F=INT(A*9)
240 PRINT F;CHR$(243),
250 F$=STR$(F)
260 W=0
270 FOR X=1 TO LEN(F$)
280 V=VAL(MID$(F$,X,1))
290 PRINT V;CHR$(243),
300 WW=W+V
310 PRINT WW;CHR$(243),
320 W=WW
330 IF WW=9 THEN GOTO 350
340 NEXT X
350 LOCATE 17,12:PRINT "FINISHED!!! Press any key to give you the results..."
360 G$=STR$(WW)
370 WHILE INKEY$="":WEND
380 LOCATE 25,14:PRINT "Last number is:";ww;:PRINT "(";MID$(G$,2,1);"+";MID$(G$,3,1);")";" *2 = 18"
390 LOCATE 22,18:PRINT "THE MAGIC NUMBER *** 18 *** IS HERE!!!"
400 LOCATE 28,23:PRINT "Continue? (Y)es or (N)o"
410 A$=INKEY$
420 IF A$="" THEN GOTO 410
430 IF A$="Y" OR A$="y" THEN RUN
440 IF A$="N" OR A$="n" THEN MODE 1:END
Μόνο που βγαίνουν οι ένοχλητικες μπάρες, και γίνεται δυσανάγνωστο...
 
Μπορείς να απενεργοποιήσεις τα smilies στο reply σου. Απλά checkαρε την επιλογή
 
Πίσω
Μπλουζα