Σάββατο, 29 Απριλίου 2017

Απλά Μικρά Προγράμματα


Τα παρακάτω προγράμματα τα γράφουμε σε ένα τμήμα έστω Α και τα εκτελούμε με το όνομα του τμήματος.

Εισαγωγή Αριθμών με Δημιουργία Μεταβλητών

Εισαγωγή "Δώσε α , β: ", α, β
Τύπωσε "άθροισμα α+β="; α+β
Μπορούμε να δώσουμε και αριθμούς με δεκαδικά. Με την τελεία δίνουμε το σημείο δεκαδικών, μπορεί να είναι κόμμα ή τελεία. Με το κόμμα ή το Enter πάμε στην επόμενη εισαγωγή.

Εισαγωγή Ακεραίων Αριθμών με Δημιουργία Μεταβλητών

Εισαγωγή "Δώσε α , β: ", α%, β%
Τύπωσε "άθροισμα α+β="; α%+β%
Λίστα
Η εντολή Λίστα θα μας δείξει
τις μεταβλητές, με ! αμέσως μετά θα δείξει τις μεταβλητές με χρήση αναλογικής γραφής. (δοκιμάστε το Λίστα !)

Πράξεις με ακέραιες τιμές

Μ=1.3343
Τύπωσε Ακ(Μ) 'δίνει 1
Ζ=1.889
Τύπωσε Ακ(Ζ) ' δίνει 1
Τύπωσε Δεκ(Ζ) ' δίνει .889
Τύπωσε Στρογγ(Ζ,0) ' δίνει 2
Τύπωσε Στρογγ(Ζ,1) ' δίνει 1.9
Τύπωσε Στρογγ(Ζ,2) ' δίνει 1.89
Τύπωσε Στρογγ(-Ζ,2) ' δίνει -1.89
Τύπωσε Στρογγ(-Ζ,0) ' δίνει -2
Τύπωσε Ακ(-Ζ) 'δίνει -2, τον αμέσως κοντινότερο ακέραιο προς τα κάτω

Τύπωσε 5 δια 1.5 ' δίνει 5 γιατί πρώτα κάνει ακέραια την 1.5
Τύπωσε 6 δια -1.5 ' δίνει -3 γιατί κάνει το Ακ(-1.5) άρα το -2
Τύπωσε 7 υπόλ 2 ' δίνει  1
Τύπωσε 7 υπόλ -2 ' δίνει  1  
Τύπωσε -7 υπόλ 2 ' δίνει  -1



Και οι ακέραιες μεταβλητές και οι πραγματικές (κινητής υποδιαστολής) εσωτερικά είναι ίδιου τύπου (double, πραγματικές). Οι τελεστές Δια και Υπόλ (υπάρχει και ως Υπόλοιπο) δουλεύουν με πραγματικές και αφαιρούν τα δεκαδικά. Η Υπόλ ή Υπόλοιπο αφαιρεί και το πρόσημο στο διαιρέτη. Οι εντολές μπορούν να γραφούν με πεζά ή κεφαλαία, με τόνους ή χωρίς (και λάθος τόνος δεν μας πειράζει, ο διερμηνευτής αφαιρεί τους τόνους στα ελληνικά κατά την εκτέλεση)


Στις συγκρίσεις το διπλό ίσον == κάνει πρώτα στρογγυλοποίηση στις τιμές που θα συγκρίνει στο 13ο δεκαδικό, ενώ το απλό δεν κάνει καμία στρογγυλοποίηση.

Επανάληψη εντολών με μετρητή και βήμα

Για ι=1 έως 1000 ανά 2 {
      Τύπωσε ι,
}
Τύπωσε

Για ι=1000 έως 1 ανά 2 {
      Τύπωσε ι,
}
Τύπωσε
Στη Μ2000 αν η αρχή είναι μεγαλύτερη από το τέλος της μέτρησης, τότε κατεβαίνει ο μετρητής. Το όριο τέλους μετράει για την εκτέλεση του μπλοκ εντολών. Το βήμα είναι θετικό.
Το ι θα πάρει μετά το πέρας της επανάληψης/μέτρησης την επόμενη τιμή εκτός ορίου


Για ι=1 εως 1 ανά -1 {
      Τύπωσε ι \\ δίνει 1
}
Τύπωσε ι \\ δίνει 0


Υπάρχει μια περίπτωση που το βήμα μας ενδιαφέρει αν είναι θετικό ή αρνητικό, όταν έχουμε αρχή και τέλος ίδιο όριο. Τότε ο διερμηνευτής αποφασίζει ποια θα είναι η τιμή μετά το πέρας της επανάληψης (μια φορά θα εκτελεστεί το μπλοκ εντολών), και αλλάζει ανάλογα την τιμή του μετρητή.
Για ι=1 εως 1 ανά -1 {
      Τύπωσε ι \\ δίνει 1
}
Τύπωσε ι \\ δίνει 0


Μπορούμε να χρησιμοποιούμε αριθμούς με δεκαδικά, και βήμα με δεκαδικά.
Για ι=1.5 έως 10 ανά .3 {
      Τύπωσε ι,
}
Τύπωσε


Θα μας δώσει αυτό: 1.5, 1.8, 2.1, 2.4, 2.7, 3, 3.3, 3.6, 3.9, 4.2, 4.5, 4.8, 5.1, 5.4, 5.7, 6, 6.3, 6.6, 6.9, 7.2, 7.5, 7.8, 8.1, 8.4, 8.7, 9, 9.3, 9.6, 9.9

Εξαγωγή στο Πρόχειρο

Ο κώδικας για να μας κάνει εξαγωγή τα παραπάνω νούμερα στο πρόχειρο είναι αυτός:
Έγγραφο Ν$="1.5"
Για ι=1.8 έως 10 ανά .3 {
     Ν$=", "+Γραφη$(ι,"")
}
Πρόχειρο Ν$


Το έγγραφο παίρνει ότι δίνουμε και το βάζει στο τέλος. Έχει πολλές χρήσεις που θα δούμε αργότερα. Όταν διαβάζουμε όμως τιμή διαβάζεται ως αλφαριθμητικό (εκτός από ειδικές συναρτήσεις που αναγνωρίζουν ότι είναι αντικείμενο).


Αλφαριθμητικά Πολλαπλών Παραγράφων



\\ μπορούμε να δίνουμε αλφαριθμητικά πολλαπλών γραμμών
\\ η θέση του τελευταίου άγκιστρου δηλώνει πόσα κενά θα αφαιρεθούν
\\ από την δεύτερη παράγραφο και κάτω

Ν$={Κείμενο, Πρώτη παράγραφος
      Δεύτερη παράγραφος
      Τρίτη παράγραφος
      }
Αναφορά Ν$
Έγγραφο Ν$ ' αναβάθμιση σε Έγγραφο
Αναφορά Παραγραφος$(Ν$, 2)
Αναφορά Παραγραφος$(Ν$, 1)
\\ Αφαιρούμε τη δεύτερη παράγραφο
\\ ενώ μας την δίνει σε μια μεταβλητή αλφαριθμητική
παλιάπαράγραφος$=Παράγραφος$(Ν$,2,-1)
Αναφορά Ν$
\\ βάζουμε και μια αλλαγή γραμμής
Ν$=παλιάπαράγραφος$+{
}
Ν$=παλιάπαράγραφος$
Αναφορά Ν$


Μορφή Για/Επομενο

Για ι=10 έως 1 ανά 2
      Τύπωσε ι,
Επόμενο ι
Τύπωσε
Υπάρχει και η μορφή που ταιριάζει με την Basic (αλλά και εδώ τα όρια δηλώνουν την κατεύθυνση της μέτρησης, ενώ στην Basic πρέπει να δοθεί αρνητικό βήμα. Αν δώσουμε και εδώ -2, ο διερμηνευτής θα εξάγει το απόλυτο νούμερο (χωρίς το πρόσημο). Χρησιμοποιεί το πρόσημο μόνο αν έχουμε ίσα όρια.

Χρήση συνθήκης για επανάληψη με την Ενώ

Στην Ενώ συνθήκη { } υπάρχει περίπτωση να μην εκτελεστεί ποτέ το μπλοκ. Αυτό συμβαίνει αν δεν γίνει η συνθήκη αληθής.


Κ=3
Ενώ Κ<10 {
      Τύπωσε Κ
      Κ++
}


Λ=5
Κ=3
Ενώ Κ<10 και Λ>3 {
      Τύπωσε Κ
      Κ++
      Λ-=.8
}


Οι πράξεις γίνονται με πραγματικούς αριθμούς, ακόμα και αν βάλουμε μεταβλητή ακέραια (με % στο όνομα). Αποθηκεύονται τα αποτελέσματα ως ακέραια μόνο αν τα καταχωρούμε σε ακέραιες μεταβλητές ή τα περάσουμε από την Ακ()


Χρήση συνθήκης για επανάληψη τύπου Επανέλαβε/Μέχρι



Δ=0
Α=-10
Επανέλαβε {
      Α++
      Δ=Τυχαίος(1,5)
      Τύπωσε Α*Δ,
} Μέχρι Α>5 ή Δ=3
Τύπωσε


Η εντολή Επανέλαβε υπάρχει και σαν Επανάλαβε

Χρήση Αν συνθήκης Τότε σε επανάληψη τύπου Επανέλαβε/Πάντα



Δ=0
Α=-10
Επανέλαβε {
      Α++
      Δ=Τυχαίος(1,5)
      Αν Δ=3 Τότε Έξοδος
      Τύπωσε Α*Δ,
      Αν Α>5 Τότε Έξοδος
} Πάντα
Τύπωσε


Χρήση Τυχαίων με πρόσκαιρη δημιουργία τυχαίων βάσει μιας αρχής.



Με την εντολή Ν=Τυχαίος(!4567) θέτουμε τη γεννήτρια τυχαίων αριθμών από ένα σημείο που θα δώσει την ίδια σειρά αριθμών. Υπάρχει η δυνατότητα να κόψουμε πρόσκαιρα τη ροή τυχαίων, να τη βάλουμε σε μια ροή γνωστή και να γυρίσουμε στην προηγούμενη ροή (δεν κρατάει πάνω από ένα κόψιμο το σύστημα).


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


Ν=Τυχαίος(!1983874)
Τύπωσε Τυχαίος, Τυχαίος, Τυχαίος
Ν=Τυχαίος(!19742323)
Τύπωσε Τυχαίος, Τυχαίος, Τυχαίος
Ν=Τυχαίος(!)
Τύπωσε Τυχαίος, Τυχαίος, Τυχαίος

\\ χωρίς την προσωρινή αλλαγή
Ν=Τυχαίος(!1983874)
Τύπωσε Τυχαίος, Τυχαίος, Τυχαίος
\\Ν=Τυχαίος(!19742323)
\\Τύπωσε Τυχαίος, Τυχαίος, Τυχαίος
\\Ν=Τυχαίος(!)
Τύπωσε Τυχαίος, Τυχαίος, Τυχαίος


Η Τυχαίος δίνει έναν δεκαδικό αριθμό μη μηδενικό ακέραιο μέρος, ενώ η Τυχαίος(1, 5) θα δώσει έναν από τους 1,2,3,4,5. Αν δώσουμε τιμές με δεκαδικά στην Τυχαίος() αυτή θα πάρει τις τιμές ως ακέραιους (θα εκτελέσει το Ακ() εσωτερικά).

Γέμισμα πίνακα με τυχαίους αριθμούς και μέτρηση συχν. Εμφάνισης


Θα γεμίσουμε έναν πίνακα με τιμές από 1 έως 8 και θα μετρήσουμε πόσες φορές κάθε νούμερο υπάρχει στο πίνακα. Η συχνότητα εμφάνισης είναι ο λόγος πόσες φορές εμφανίζεται στο σύνολο των αριθμών (μέτρηση για το καθένα ξεχωριστό αριθμό προς συνολικό αριθμό)
Στο παράδειγμα ορίζουμε ότι η βάση των πινάκων θα είναι το 0 (Αυτό είναι εξ ορισμού). Μπορούμε όμως να ορίσουμε κάποιο πίνακα με βάση το 1 ειδικά για αυτόν (ομοίως αν είχαμε το 1 για όλους τους πίνακες).
Το γέμισμα του πίνακα γίνεται με το τελεστή << ο οποίος εκτελείται για κάθε στοιχείο, εδώ εκτελούμε την Τυχαίος(1,8) για κάθε στοιχείο.
Η μεταβλητή Ν κρατάει το νούμερο στοιχείων. Όσο μεγαλύτερη είναι η Ν τόσο στρώνουν οι συχνότητες.
Εδώ στο παράδειγμα ξεκινάμε με Ν=20000, δηλαδή θα φτιάξουμε έναν πίνακα με 20 χιλιάδες αριθμούς (η μνήμη που θα χρειαστεί είναι 12*20000 ή 234,375 kBytes). Κανονικά ο double θέλει 8 Bytes αλλά οι πίνακες της Μ2000 κρατούν εσωτερικά Variant (12 Bytes), για σκοπό που δεν γίνεται τώρα φανερός!
Βάση 0
Ν=20000
Πίνακας Α(Ν)<<Τυχαίος(1,8)
Πίνακας Βάση 1, Μετρ(8)
Για ι=0 έως Ν-1 {
      Μετρ(Α(ι))++
}
Για ι=1 έως 8 {
      Τύπωσε Μορφή$("Το {0} έχει συχνότητα {1:2}%",ι,Μετρ(ι)/Ν*100)
}

Ο τελεστής ++ αυξάνει κατά ένα το στοιχείο Α(ι) του πίνακα Μετρ(). Ξέρουμε ότι οι τιμές στον Α(ι) είναι από 1 έως 8, οπότε δεν θα προκύψει λάθος δείκτη. Η Μ2000 ελέγχει κάθε φορά αν ο δείκτης είναι εκτός ορίων.

 

Πίνακας Τριών διαστάσεων με ένα μόνο στοιχείο!


Οι διαστάσεις σε έναν πίνακα μπορεί να είναι από μηδέν (κενός πίνακας) έως και δέκα. Για κάθε διάσταση από ένα μέχρι δέκα ορίζεται ο αριθμός δεικτών (όχι στοιχείων, μόνο στους μονοδιάστατους ταυτίζεται ο αριθμός αυτός με τον αριθμό στοιχείων).
Μπορούμε να φτιάξουμε έναν πίνακα τριών διαστάσεων με ένα μόνο στοιχείο!
Πίνακας Βάση 1, Μ(1,1,1)=5
Τύπωσε Μήκος(Μ()) \\ 1
Τύπωσε Μ(1,1,1) \\ 5
\\ αλλάζουμε βάση χωρίς να σβήσουμε περιεχόμενα
Πίνακας Βάση 0, Μ(1,1,1)
Τύπωσε Μήκος(Μ()) \\ 1
Τύπωσε Μ(0,0,0) \\ 5
\\ Αλλάζουμε διάσταση χωρίς να σβήσουμε περιεχόμενα
Πίνακας Μ(1)
Τύπωσε Μήκος(Μ()) \\ 1
Τύπωσε Μ(0) \\ 5