Εισαγωγή στην Basic (Μέρος Γ)

Παιδια ο Markus ειναι φιλος του φορουμ.

Θα επικοινωνησουμε σημερα μαζι του,τοσο για το online οσο και αν μπορει να γινει paste κωδικας ωστε οι "βιαστικοι" :D να ειναι happy :)
 
Τελικα, τα κατάφερα να κλέψω λίγο χρόνο και να γράψω...

Σχετικά με την εντολή DEF (DEFine) που μου ζήτησε ο Shock, και συγκεκριμένα με την FN (FunctioN):

Πρόκειται γιά μία από τις πλέον χρήσιμες εντολές, η οποία μας παρέχει την δυνατότητα να κάνουμε υπολογισμούς, ορίζοντας μία μαθηματική συνάρτηση, σαν αυτές που μαθαίναμε στο σχολείο. Ουσιαστικά, πρόκειται για τον καθορισμό -από εμάς- ενός μαθηματικού τύπου, ο οποίος εκτελεί τις πράξεις που του έχουμε ορίσει, με τις τιμές που του παρέχουμε στις μεταβλητές που θα έχουμε τοποθετήσει μέσα του.

Το καλό με τις FN, είναι πως η ισχύς τους είναι "οικουμενική" και όχι "τοπική"! Η βασική φόρμα τους (ο μαθηματικός τύπος) αναγνωρίζεται οπουδήποτε και αν βρίσκονται μέσα στο πρόγραμμα, και όχι μόνο εντός μίας υπορουτίνας. Μπορούμε λοιπόν να τις καθορίσουμε στην αρχή ενός προγράμματος, και να τις καλούμε κατόπιν μέσα σε οποιαδήποτε υπορουτίνα. Εκεί, ο μαθηματικός τύπος τους θα παίρνει τις "τοπικές" μεταβλητές που θα έχουμε καθορίσει μέσα στην συγκεκριμένη υπορουτίνα και θα εκτελεί τις πράξεις με αυτές τις μεταβλητές (σε μία άλλη υπορουτίνα, θα παίρνει τις "δικές" της μεταβλητές, κ.ο.κ.). Ουσιαστικα, μπορούμε να κατασκευάζουμε κι εμείς δικές μας "εντολές" μέσα στο πρόγραμμα.

Μάλιστα, η Locomotive Basic έχει ήδη ενσωματωμένες κάποιες συναρτησεις, όπως για τον υπολογισμό ημιτόνου, συνημιτόνου, εφαπτομένης, συνεφαπτομένης και υπολογισμού λογαρίθμων, τις οποίες καλούμε με τα ονόματά τους (χωρίς να βλέπουμε, βέβαια, τον μαθηματικό τύπο που κάνει την αντίστοιχη πράξη).

Παραθέτω δύο παραδείγματα καθορισμού (DEF) συναρτήσεων (FN) που σκέφθηκα πρόχειρα, με δύο μικρές ρουτίνες:

1ο παράδειγμα:

10 CLS20 DEF FNzoro1=((a+b)*(b-a))

30 FOR a=1 TO 3

40 FOR b=1 TO 5 STEP 2

50 PRINT FNzoro1;"=";a+b;"*";b-a;"(a=";a;"b=";b;")"

60 NEXT b

70 NEXT a
Εδώ, η συνάρτηση με το όνομα "zoro1" (FNzoro1), εκτελεί τον μαθηματικό τύπο του πολλαπλασιασμού των δύο προσθαφαιρέσεων μεταξύ των μεταβλητών a και b, παίρνοντας αντίστοιχα τις τιμές τους από τους βρόγχους (FOR-NEXT)των γραμμών 30-70 και 40-60.

2ο παράδειγμα:

10 CLS

20 DEF FNzoro2=(10*x)

30 DEF FNzoro3=(FNzoro2-x)

40 FOR x=1 TO 5

50 PRINT FNzoro2;"and";FNzoro3

60 NEXT x
Με αυτό το παράδειγμα, ήθελα να δείξω πως μπορούμε να τοποθετήσουμε μία συνάρτηση (FNzoro2) μέσα στον μαθηματικό τύπο μίας άλλης συνάρτησης (της FNzoro3).

Τα παραδείγματα είναι απλά, αλλά μπορείτε να φαντασθείτε τις δυνατότητες που μας δίνει ο καθορισμός συναρτήσεων σε πιό "εξελιγμένο" επίπεδο προγραμματισμού.

Επίσης, με την DEF μπορούμε να καθορίσουμε και άλλα είδη συναρτήσεων, όπως είδα στο βιβλίο (DEF INT, DEF REAL και δεν ξέρω τι άλλο), αλλά, 1ον: δεν περιέχονται αναλυτικά για να τις κατανοήσω, και 2ον: δεν έχω χρόνο να ψάξω το θέμα (αυτός ο βραχνάς θα με πεθάνει). Αν κάποιος άλλος φίλος γνωρίζει και μπορεί να μας αναλύσει και αυτές τις περιπτώσεις, θα μας βοηθούσε πολύ...

Ευχαριστώ
 
Χωρίς να είχα φτάσει σ'αυτό το επίπεδο στον Amstrad νομίζω ότι DEF INT = Integer (ακεραιως) και DEF REAL = Πραγματικός, δεκαδικός. Αρα έχει να κάνει με το μέγεθος που μπορεί να αποθυκεύσει. Shock ?
 
AA+ είπε:
Χωρίς να είχα φτάσει σ'αυτό το επίπεδο στον Amstrad νομίζω ότι DEF INT = Integer (ακεραιως) και DEF REAL = Πραγματικός, δεκαδικός. Αρα έχει να κάνει με το μέγεθος που μπορεί να αποθυκεύσει. Shock ?
Μπορεί κανείς πιό προχωρημένος από μας, να μας αναφέρει αναλυτικά (και με μικρές ρουτίνες ως παραδείγματα) την χρήση των DEFINT, DEFREAL, DEFSTR; Βλέπω πως παίρνουν και διάφορες παραμέτρους (αυτό είναι πολύ σημαντικό).

HELP!!!
 
Παίζοντας χθες το βράδυ με τον CPC για να "ανακαλύψω" πάλι την Locomorive Basic, μου προέκυψε μία μικρή ρουτίνα που κάνει δεξιά στοίχιση σε μία κάθετη σειρά λέξεων, στο μέσον της οθόνης.

Την παραθέτω, μαζί με ένα quiz:

10 MODE 1

20 FOR x=1 to 6

30 READ a$

40 LOCATE 20-LEN(a$),X+10

50 PRINT a$

60 NEXT x

70 DATA Locomotive,Basic,for,Amstrad,CPC,6128
To Quiz είναι: Ποιά προσθήκη βάζουμε στην σειρά 40 για να κάνει κεντρική στοίχιση;
 
Ζορό αυτό που προσπαθείς να μας πεις είναι να σε βοηθήσεουμε να σχεδιάσεις έναν αλγόρυθμο που θα υλοποιεί κάτι. Εδώ είναι και το πιο ενδιαφέρον κομμάτι του προγραμματισμού! O σχεδιασμός των αλγοριθμων είναι puzzles με πολλές λύσεις και είναι ανεξάρτητοι της γλώσσας που γράφουμε το πρόγραμμα

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

  • Μήκος String (Len). Είναι προφανές ότι το "6128" θα πρέπει να μπει πιο δεξιά από το "Locomotive Basic".

  • Αριθμός χαρακτήρων κάθε γραμμής της οθόνης στο mode που δουλεύεις

  • Στρογγυλοποίηση (rounding)
 
Shock είπε:
Ζορό αυτό που προσπαθείς να μας πεις είναι να σε βοηθήσεουμε να σχεδιάσεις έναν αλγόρυθμο που θα υλοποιεί κάτι. Εδώ είναι και το πιο ενδιαφέρον κομμάτι του προγραμματισμού! O σχεδιασμός των αλγοριθμων είναι puzzles με πολλές λύσεις και είναι ανεξάρτητοι της γλώσσας που γράφουμε το πρόγραμμα
Για να σε βοηθήσω στη σκέψη σου θα σου πω κάποια στοιχεία που πρέπει να έχεις στο μυαλό σου για αυτό που ρώτησες.

  • Μήκος String (Len). Είναι προφανές ότι το "6128" θα πρέπει να μπει πιο δεξιά από το "Locomotive Basic".

  • Αριθμός χαρακτήρων κάθε γραμμής της οθόνης στο mode που δουλεύεις

  • Στρογγυλοποίηση (rounding)
Όχι,

Δεν ζητούσα τίποτα προς διευκρίνηση, απλά παρέθεσα ένα μικρό "τιπάκι" για το πως ανακάλυψα (σίγουρα υπάρχουν και άλλοι τρόποι) έναν τρόπο δεξιάς στοίχισης λέξεων, αν κανείς θέλει να τις βάλει με κάθετη σειρά.

Επίσης, βάζω και ένα quiz στους φίλους μας, για το πώς μπορεί να γίνει μία κεντρική στοίχιση λέξεων (ξέρω τον τρόπο), αν κανείς ενδιαφέρεται να τον βρεί, παίζοντας με την ρουτινίτσα.
 
Αυτό το Σαββατοκύριακο πήρα φόρα!

Η μελέτη στην locomotive Basic μου έδωσε την δυνατότητα να κατασκευάσω ένα πρόγραμμα επίλυσης ανοικτής όδευσης. Όσοι γνωρίζουν από τοπογραφία θα ξέρουν. Τα πρώτα χρόνια της δεκαετίας του '80 ήμουν τοπογράφος, όταν με κέρδισαν οι υπολογιστές το 1985 και έγινα γραφίστας, μέχρι σήμερα.

Το πρόγραμμα ήταν πολύ πιό εύκολο απ' ότι νόμιζα αρχικά, και μάλιστα έχει πολύ καλή ακρίβεια, που σημαίνει ότι ο υπολογισμός των δεκαδικών του Amstrad 6128 είναι αξιοπρεπέστατος. Δεν είναι δυνατόν να δημοσιεύσω το πρόγραμμα (είναι μεγάλο για postάρισμα), και ίσως δεν ενδιαφέρει κανέναν, αλλά δημοσιεύω μία μικρή ρουτίνα -σε βασική μορφή- που ρίχνει διπλές ζαριές, εκμεταλλευόμενη τις δυνατότητες των εντολών CINT και LEN. Σε σχέση με άλλες αντίστοιχες ρουτίνες, παρέχει ισόποσες πιθανότητες για όλους τους συνδυασμούς, βάσει της δυνατότητας της CINT.

10 z$="123456"

20 MODE 1

30 LOCATE 16,12

40 PRINT "Drop Dice?"

50 WHILE INKEY$="":WEND

60 zz1=CINT(RND*LEN(z$)):zz2=CINT(RND*LEN(Z$))

70 IF zz1*zz2=0 THEN GOTO 60

80 LOCATE 16,14

90 PRINT zz1;"and";zz2

100 GOTO 30
 
Μου περνάει από το μυαλό το εξής:

Αφού φτάσαμε ως εδώ το επέμενο βήμα είναι να πάμε σε μια καλύτερη γλώσσα πιο δομημένη και να συνεχίσουμε εκεί

Τα goto είναι retro αλλά μου φέρνει και μια αναγούλα :)

Αν θέλουμε να κάνουμε κάτι καλύτερο θα πρέπει να πάμε σε μια σύγχρονη γλώσσα υψηλού επιπέδου που μας παρέχει πιο ορθολογική σχεδίαση των προγραμμάτων μας.

Για μένα η ιδανική είναι η C αλλά θα μπλέξουμε άσχημα με τους compilers.

Τη Java την ψιλοαποφεύγω αν και δε θα έπρεπε.

Υπάρχει και η Python σαν διδακτικη γλώσσα και είναι και ελεύθερη.

Η τελευταία έχει και παρόμοια σύνταξη οπότε ίσως είναι καλή λύση.
 
Οχι νεο-ταξη-πραγματων-ικε.Θα σε καταγγειλω στο Λιακοπουλο. :D

We stay retro και παμε για SuperBasic QL
 
Shock είπε:
Μου περνάει από το μυαλό το εξής:Αφού φτάσαμε ως εδώ το επέμενο βήμα είναι να πάμε σε μια καλύτερη γλώσσα πιο δομημένη και να συνεχίσουμε εκεί

Τα goto είναι retro αλλά μου φέρνει και μια αναγούλα :)

Αν θέλουμε να κάνουμε κάτι καλύτερο θα πρέπει να πάμε σε μια σύγχρονη γλώσσα υψηλού επιπέδου που μας παρέχει πιο ορθολογική σχεδίαση των προγραμμάτων μας.

Για μένα η ιδανική είναι η C αλλά θα μπλέξουμε άσχημα με τους compilers.

Τη Java την ψιλοαποφεύγω αν και δε θα έπρεπε.

Υπάρχει και η Python σαν διδακτικη γλώσσα και είναι και ελεύθερη.

Η τελευταία έχει και παρόμοια σύνταξη οπότε ίσως είναι καλή λύση.
Εγώ παραμένω στην Locomotive Basic for Amstrad.

Το καλυτερο -και το έχω θέσει ως θέμα συζήτησης- είναι να χωρισθούν οι γλώσσες σε διαφορετικά πεδία, και ο καθένας να κάνει παιχνίδι στον χώρο που αρέσκεται π.χ.: Programming with: "SuperBasic for QL", "Locomotive Basic for Amstrad 464/6128", "C", "Python" κ.λπ.

Άλλωστε, αν πάμε σε πιό σύγχρονες γλώσσες, χάνουμε τον retro χαρακτήρα του forum.

Υ.Γ. (πάλι)

Τι γίνεται με τον on-line emulator για Locomotive Basic του Amstrad;
 
Ο Marcus ειναι μαλλον σε διακοπες και δε εμφανιζεται στο MSN.

Μην ανησυχεις ομως,εχουμε στησει ξωβεργες :)
 
Wally είπε:
Ο Marcus ειναι μαλλον σε διακοπες και δε εμφανιζεται στο MSN.Μην ανησυχεις ομως,εχουμε στησει ξωβεργες :)
O.K. Wally,

αναμένουμε (είναι και άλλοι που θα μπουν στο forum μόλις γίνει αυτό).
 
Πίσω
Μπλουζα