Το παράδειγμα από εδώ έγινε προγραμματιστικά με την Μ2000. Με λίγα λόγια δίνουμε δυο σειρές δεδομένων, και μας επιστρέφουν τιμές όπως ελάχιστη, μέση, μέγιστη, τυπική απόκλιση, τυπική ελάχιστη (ως διαφορά μέσης με τυπική απόκλιση), και τυπική μέγιστη (ως άθροισμα μέσης και τυπικής απόκλισης)
Τοι πρόγραμμα το γράφουμε σε ένα τμήμα έστω Α (Σ Α enter και αντιγράφουμε, μετά πατάμε το Esc και επιστρέφουμε στην γραμμή εντολών και γράφουμε Α enter και έτσι το εκτελούμε)
Περιλαμβάνει μια συνάρτηση που δίνει τέσσερα νούμερα ενώ δέχεται ένα δείκτη σε πίνακα δειγμάτων (αριθμητικών τιμών). Δίνει λάθος αν δεν υπάρχουν τουλάχιστον δυο στοιχεία.
Επίσης υπάρχει και μια ρουτίνα που κάνει την όλη εργασία για κάθε σύνολο τιμών. Δέχεται δυο δεδομένα, την επιγραφή και το πίνακα δειγμάτων.
Εξ ορισμού μια τιμή 1 είναι τύπου double, δεν χρειάζεται να βάλουμε το 1.0 τιμές άλλων τύπων έχουν χαρακτήρες όπως πχ το # για τιμή τύπου λογιστικό (Currency) έτσι το 10.45# είναι λογιστικό.
Το ΔΙΑ είναι η ακέραια διαίρεση, όχι ειδικά για ακέραιους, και επιστρέφει τιμή
πχ το μ είναι Single (αν είχαμε δώσει 10~ δια 2 θα ήταν double, αλλά τώρα και οι δυο αριθμοί είναι single). Οι συγκρίσεις γυρίζουν boolean, και εδώ συγκρίνουμε έναν single με έναν double.
μ=10~ δια 2~
Τύπωσε Τύπος$(μ)="Single", μ=5
Επίσης το ΔΙΑ στο 10 ΔΙΑ 2.5 δίνει 4, όπως και στο 11 ΔΙΑ 2.5 δίνει 4 και το 11 ΥΠΟΛ 2.5 δίνει 1.
,
Το Μήκος(Δείκτης) δίνει τον αριθμό στοιχείων του πίνακα που δείχνει ο Δείκτης (τον βλέπει ως μιας διάστασης ακόμα και αν είχε περισσότερες ή γυρίζει 0 αν δεν έχει κανένα στοιχείο)
Η Δείγμα#Αθρ() βγάζει άμεσα το άθροισμα όλων των στοιχείων στο πίνακα.
Το κ=Κάθε(Δείγμα) φτιάχνει το κ ως απαριθμητής του πίνακα που δείχνει η μεταβλητή Δείγμα. Για να λειτουργήσει η κ πρέπει να μπει σε μια Ενώ. Όταν φθάσει στο τέλος απαρίθμησης δίνει ψευδές οπότε η Ενώ τερματίζει (όπως η ΟΣΟ στη ΓΛΩΣΣΑ του σχολείου). Μπορούμε με το κ^ να πάρουμε το νούμερο απαρίθμησης (το κ είναι αντικείμενο οπότε το ^ εδώ δεν είναι η ύψωση σε δύναμη, αλλά τελεστής του αντικειμένου). Εδώ θα πάρουμε την τιμή με την Πίνακας(α). Η Πίνακας(Δείγμα) δίνει το πρώτο (στοιχείο στο 0) ενώ το Πίνακας(Δείγμα, 1) δίνει το 1, αλλά η Πίνακας() όταν βλέπει ότι έχει να κάνει με απαριθμητή πίνακα παίρνει το νούμερο από τον απαριθμητή. Δείτε στην ρουτίνα πιο κάτω ότι το ΑΠ που είναι δείκτης σε πίνακα όπως το Δείκτης. Εκεί το ΑΠ#Τιμή(0) είναι το ίδιο με το Πίνακας(ΑΠ) ενώ το ΑΠ#Τιμή(1) είναι το Πίνακας(ΑΠ,1). Και για τιμές αλφαριθμητικών έχουμε τα αντίστοιχα #Τιμή$() και Πίνακας$().
\\ Τυπική απόκλιση δειγμάτων
\\ Δίνουμε ένα δείκτη σε πίνακα (tuple)
\\ Λαμβάνουμε έναν άλλο δείκτη σε πίνακα (τις απαντήσεις)
\\ Η συνάρτηση έχει δικό της όνομα χώρου, έτσι οι μεταβλητές που ορίζουμε
\\ δεν μπλέκονται με άλλες εκτός συνάρτησης
\\ Η συνάρτηση πρέπει να οριστεί πριν την χρήση της
\\ αυτό συμβαίνει γιατί η Μ2000 είναι δυναμική γλώσσα, έτσι ώστε
\\ για να υπάρχει μια συνάρτηση πρέπει να εκτελεστεί ο ορισμός της.
\\ Αυτό σημαίνει ότι μπορούμε να επιλέγουμε ορισμούς δυναμικά.
\\ Το ίδιο γίνεται και με τα τμήματα.
\\ Τα τμήματα δεν γυρίζουν τιμές σε εκφράσεις αλλά χειρίζονται τον σωρό τιμών
\\ έτσι μπορούν να βάλουν τιμές σε αυτόν ως επιστροφή
\\ Οι ρουτίνες διαφέρουν γιατί δεν μπορούν να αλλάξουν δυναμικά.
\\ Έχουν μόνο έναν ορισμό και για το λόγο αυτό βρίσκονται στο τέλος του τμήματος
\\ ή της συνάρτησης που ανήκουν.
\\ Επιπλέον μια ρουτίνα βλέπει ότι υπάρχει στο τμήμα, και τον εαυτό της.
\\ Οι τυπικές παράμετροι της ρουτίνας σκιάζουν οποιεσδήποτε μεταβλητές με το ίδιο όνομα
\\ Εδώ φτιάχνουμε μια επιπλέον τοπική το ΠΛ. Όταν η ρουτίνα τερματίσει οι τυπικές παράμετροι και το ΠΛ θα σβηστούν.
\\ Ο σωρός τιμών όπως και στα τμήματα έτσι και στις ρουτίνες δίνεται ως έχει και είναι θέμα της ρουτίνας για το πώς θα τον πειράξει. Εδώ "σηκώνουμε" δυο μεταβλητές (ως τυπικές παραμέτρους).
Συνάρτηση Υπολογισμός_Τυπικής_Απόκλισης (Δείγμα) {
Αν Μήκος(Δείγμα)<2 τότε Λάθος "Αριθμός δειγμάτων μικρότερος του 2"
Μέσος_Όρος=Δείγμα#Αθρ()/Μήκος(Δείγμα)
Τ_Απόκλιση=0
κ=κάθε(Δείγμα)
Ενώ κ {
Τ_Απόκλιση+=(Πίνακας(κ)-Μέσος_Όρος)**2
}
Τ_Απόκλιση/=Μήκος(Δείγμα)-1
Τ_Απόκλιση=Ρίζα(Τ_Απόκλιση)
=Τ_Απόκλιση,Μέσος_Όρος, Δείγμα#Μικ(), Δείγμα#Μεγ()
}
\\ η απαρίθμηση είναι σταθερές με μια "συνέχεια" προηγούμενου-επόμενου
\\ εδώ λειτουργούν απλά σαν σταθερές με τιμές 0,1,2,3
\\ και τις βάζουμε στον πίνακα που μας επιστρέφει η συνάρτηση
\\ Υπολογισμός_Τυπικής_Απόκλισης()
Απαρ Τιμές {Απόκλιση=0, Μέση, Ελάχιστη, Μέγιστη}
\\ αρχικά αδειάζουμε το σωρό τιμών
Άδειασε
\\ χρήση σωρού τιμών ως FIFO
\\ Βάζουμε τέσσερα πράγματα, αλφαριθμητικό, δείκτης σε πίνακα, αλφαριθμητικό, δείκτης σε πίνακα
Σειρά "Γυναίκες", (727.7, 1086.5, 1091, 1361.3,1490.5,1956.1)
Σειρά "Άνδρες", (525.8, 605.7, 843.3, 1195.5, 1945.6, 2135.6, 2308.7, 2950.0)
Σημ Σωρός \\ δείχνει τι έχει ο σωρός, στους πίνακες δίνει το *[mArray] όπου το * λέει δείκτης, και το mArray είναι το αντικείμενο πίνακας. Βγάλτε το Σημ η πατήστε ένα enter ώστε να κατέβει γραμμή η Σωρός.
\\ όσο ο σωρός δεν είναι κενός θα καλούμε το ΔείξεΤιμές()
Ενώ όχι κενό
ΔείξεΤιμές() ' ήδη είναι στο σωρό τιμών τα δεδομένα
Τέλος Ενώ
Τέλος
Ρουτίνα ΔείξεΤιμές(Κειμ$, Απ)
Απ=Υπολογισμός_Τυπικής_Απόκλισης(Απ)
\\ χωρίζουμε την οθόνη σε τέσσερις στήλες
Τοπική Πλ=Πλάτος Δια 4
Τύπωσε Πάνω $(6), Κειμ$ ' κεντραρισμένο σε όλο το πλάτος
Τύπωσε Υπό ' υπογράμμιση
\\ κεντραρισμένοι τίτλοι στις στήλες με αναλογική γραφή
Τύπωσε $(6,ΠΛ),"Τυπική Ελάχιστη","Μέση Τιμή", "Τυπική Μέγιστη","Τυπική Απόκλιση"
Τύπωσε $("#.00"),$(0),Απ#Τιμή(Μέση)-Απ#Τιμή(Απόκλιση), Απ#Τιμή(Μέση), Απ#Τιμή(Μέση)+Απ#Τιμή(Απόκλιση), Απ#Τιμή(Απόκλιση)
Τύπωσε $(6), "Ελάχιστη Τιμή","Μέση Τιμή","Μέγιστη Τιμή"
\\ επαναφέρουμε τη στρογγύλευση στο αρχικό με το $("") και το απαραίτητο διπλό κόμα.
Τύπωσε $(0),Απ#Τιμή(Ελάχιστη), Απ#Τιμή(Μέση), Απ#Τιμή(Μέγιστη)
Τύπωσε $("")
Τύπωσε
Τέλος Ρουτίνας
Τοι πρόγραμμα το γράφουμε σε ένα τμήμα έστω Α (Σ Α enter και αντιγράφουμε, μετά πατάμε το Esc και επιστρέφουμε στην γραμμή εντολών και γράφουμε Α enter και έτσι το εκτελούμε)
Περιλαμβάνει μια συνάρτηση που δίνει τέσσερα νούμερα ενώ δέχεται ένα δείκτη σε πίνακα δειγμάτων (αριθμητικών τιμών). Δίνει λάθος αν δεν υπάρχουν τουλάχιστον δυο στοιχεία.
Επίσης υπάρχει και μια ρουτίνα που κάνει την όλη εργασία για κάθε σύνολο τιμών. Δέχεται δυο δεδομένα, την επιγραφή και το πίνακα δειγμάτων.
Εξ ορισμού μια τιμή 1 είναι τύπου double, δεν χρειάζεται να βάλουμε το 1.0 τιμές άλλων τύπων έχουν χαρακτήρες όπως πχ το # για τιμή τύπου λογιστικό (Currency) έτσι το 10.45# είναι λογιστικό.
Το ΔΙΑ είναι η ακέραια διαίρεση, όχι ειδικά για ακέραιους, και επιστρέφει τιμή
πχ το μ είναι Single (αν είχαμε δώσει 10~ δια 2 θα ήταν double, αλλά τώρα και οι δυο αριθμοί είναι single). Οι συγκρίσεις γυρίζουν boolean, και εδώ συγκρίνουμε έναν single με έναν double.
μ=10~ δια 2~
Τύπωσε Τύπος$(μ)="Single", μ=5
Επίσης το ΔΙΑ στο 10 ΔΙΑ 2.5 δίνει 4, όπως και στο 11 ΔΙΑ 2.5 δίνει 4 και το 11 ΥΠΟΛ 2.5 δίνει 1.
,
Το Μήκος(Δείκτης) δίνει τον αριθμό στοιχείων του πίνακα που δείχνει ο Δείκτης (τον βλέπει ως μιας διάστασης ακόμα και αν είχε περισσότερες ή γυρίζει 0 αν δεν έχει κανένα στοιχείο)
Η Δείγμα#Αθρ() βγάζει άμεσα το άθροισμα όλων των στοιχείων στο πίνακα.
Το κ=Κάθε(Δείγμα) φτιάχνει το κ ως απαριθμητής του πίνακα που δείχνει η μεταβλητή Δείγμα. Για να λειτουργήσει η κ πρέπει να μπει σε μια Ενώ. Όταν φθάσει στο τέλος απαρίθμησης δίνει ψευδές οπότε η Ενώ τερματίζει (όπως η ΟΣΟ στη ΓΛΩΣΣΑ του σχολείου). Μπορούμε με το κ^ να πάρουμε το νούμερο απαρίθμησης (το κ είναι αντικείμενο οπότε το ^ εδώ δεν είναι η ύψωση σε δύναμη, αλλά τελεστής του αντικειμένου). Εδώ θα πάρουμε την τιμή με την Πίνακας(α). Η Πίνακας(Δείγμα) δίνει το πρώτο (στοιχείο στο 0) ενώ το Πίνακας(Δείγμα, 1) δίνει το 1, αλλά η Πίνακας() όταν βλέπει ότι έχει να κάνει με απαριθμητή πίνακα παίρνει το νούμερο από τον απαριθμητή. Δείτε στην ρουτίνα πιο κάτω ότι το ΑΠ που είναι δείκτης σε πίνακα όπως το Δείκτης. Εκεί το ΑΠ#Τιμή(0) είναι το ίδιο με το Πίνακας(ΑΠ) ενώ το ΑΠ#Τιμή(1) είναι το Πίνακας(ΑΠ,1). Και για τιμές αλφαριθμητικών έχουμε τα αντίστοιχα #Τιμή$() και Πίνακας$().
\\ Δίνουμε ένα δείκτη σε πίνακα (tuple)
\\ Λαμβάνουμε έναν άλλο δείκτη σε πίνακα (τις απαντήσεις)
\\ Η συνάρτηση έχει δικό της όνομα χώρου, έτσι οι μεταβλητές που ορίζουμε
\\ δεν μπλέκονται με άλλες εκτός συνάρτησης
\\ Η συνάρτηση πρέπει να οριστεί πριν την χρήση της
\\ αυτό συμβαίνει γιατί η Μ2000 είναι δυναμική γλώσσα, έτσι ώστε
\\ για να υπάρχει μια συνάρτηση πρέπει να εκτελεστεί ο ορισμός της.
\\ Αυτό σημαίνει ότι μπορούμε να επιλέγουμε ορισμούς δυναμικά.
\\ Το ίδιο γίνεται και με τα τμήματα.
\\ Τα τμήματα δεν γυρίζουν τιμές σε εκφράσεις αλλά χειρίζονται τον σωρό τιμών
\\ έτσι μπορούν να βάλουν τιμές σε αυτόν ως επιστροφή
\\ Οι ρουτίνες διαφέρουν γιατί δεν μπορούν να αλλάξουν δυναμικά.
\\ Έχουν μόνο έναν ορισμό και για το λόγο αυτό βρίσκονται στο τέλος του τμήματος
\\ ή της συνάρτησης που ανήκουν.
\\ Επιπλέον μια ρουτίνα βλέπει ότι υπάρχει στο τμήμα, και τον εαυτό της.
\\ Οι τυπικές παράμετροι της ρουτίνας σκιάζουν οποιεσδήποτε μεταβλητές με το ίδιο όνομα
\\ Εδώ φτιάχνουμε μια επιπλέον τοπική το ΠΛ. Όταν η ρουτίνα τερματίσει οι τυπικές παράμετροι και το ΠΛ θα σβηστούν.
\\ Ο σωρός τιμών όπως και στα τμήματα έτσι και στις ρουτίνες δίνεται ως έχει και είναι θέμα της ρουτίνας για το πώς θα τον πειράξει. Εδώ "σηκώνουμε" δυο μεταβλητές (ως τυπικές παραμέτρους).
Συνάρτηση Υπολογισμός_Τυπικής_Απόκλισης (Δείγμα) {
Αν Μήκος(Δείγμα)<2 τότε Λάθος "Αριθμός δειγμάτων μικρότερος του 2"
Μέσος_Όρος=Δείγμα#Αθρ()/Μήκος(Δείγμα)
Τ_Απόκλιση=0
κ=κάθε(Δείγμα)
Ενώ κ {
Τ_Απόκλιση+=(Πίνακας(κ)-Μέσος_Όρος)**2
}
Τ_Απόκλιση/=Μήκος(Δείγμα)-1
Τ_Απόκλιση=Ρίζα(Τ_Απόκλιση)
=Τ_Απόκλιση,Μέσος_Όρος, Δείγμα#Μικ(), Δείγμα#Μεγ()
}
\\ η απαρίθμηση είναι σταθερές με μια "συνέχεια" προηγούμενου-επόμενου
\\ εδώ λειτουργούν απλά σαν σταθερές με τιμές 0,1,2,3
\\ και τις βάζουμε στον πίνακα που μας επιστρέφει η συνάρτηση
\\ Υπολογισμός_Τυπικής_Απόκλισης()
Απαρ Τιμές {Απόκλιση=0, Μέση, Ελάχιστη, Μέγιστη}
\\ αρχικά αδειάζουμε το σωρό τιμών
Άδειασε
\\ χρήση σωρού τιμών ως FIFO
\\ Βάζουμε τέσσερα πράγματα, αλφαριθμητικό, δείκτης σε πίνακα, αλφαριθμητικό, δείκτης σε πίνακα
Σειρά "Γυναίκες", (727.7, 1086.5, 1091, 1361.3,1490.5,1956.1)
Σειρά "Άνδρες", (525.8, 605.7, 843.3, 1195.5, 1945.6, 2135.6, 2308.7, 2950.0)
Σημ Σωρός \\ δείχνει τι έχει ο σωρός, στους πίνακες δίνει το *[mArray] όπου το * λέει δείκτης, και το mArray είναι το αντικείμενο πίνακας. Βγάλτε το Σημ η πατήστε ένα enter ώστε να κατέβει γραμμή η Σωρός.
\\ όσο ο σωρός δεν είναι κενός θα καλούμε το ΔείξεΤιμές()
Ενώ όχι κενό
ΔείξεΤιμές() ' ήδη είναι στο σωρό τιμών τα δεδομένα
Τέλος Ενώ
Τέλος
Ρουτίνα ΔείξεΤιμές(Κειμ$, Απ)
Απ=Υπολογισμός_Τυπικής_Απόκλισης(Απ)
\\ χωρίζουμε την οθόνη σε τέσσερις στήλες
Τοπική Πλ=Πλάτος Δια 4
Τύπωσε Πάνω $(6), Κειμ$ ' κεντραρισμένο σε όλο το πλάτος
Τύπωσε Υπό ' υπογράμμιση
\\ κεντραρισμένοι τίτλοι στις στήλες με αναλογική γραφή
Τύπωσε $(6,ΠΛ),"Τυπική Ελάχιστη","Μέση Τιμή", "Τυπική Μέγιστη","Τυπική Απόκλιση"
Τύπωσε $("#.00"),$(0),Απ#Τιμή(Μέση)-Απ#Τιμή(Απόκλιση), Απ#Τιμή(Μέση), Απ#Τιμή(Μέση)+Απ#Τιμή(Απόκλιση), Απ#Τιμή(Απόκλιση)
Τύπωσε $(6), "Ελάχιστη Τιμή","Μέση Τιμή","Μέγιστη Τιμή"
\\ επαναφέρουμε τη στρογγύλευση στο αρχικό με το $("") και το απαραίτητο διπλό κόμα.
Τύπωσε $(0),Απ#Τιμή(Ελάχιστη), Απ#Τιμή(Μέση), Απ#Τιμή(Μέγιστη)
Τύπωσε $("")
Τύπωσε
Τέλος Ρουτίνας