Τετάρτη 4 Μαΐου 2016

Πρώτη αναθεώρηση για την έκδοση 8.1 και Παράδειγμα "Πόλεις"

Σε αυτή την μικρή αναθεώρηση διόρθωσα μερικά πραγματάκια όπως το μήκος της Κατάστασης (λίστα αντικειμένων-αριθμών-λέξεων). Και έβαλα μια εντολή άμεσα να κάνει ταξινόμηση


Να και ένα ωραίο παράδειγμα στα ελληνικά. Φτιάχνουμε μια κατάσταση Πόλεις. Με εντολή Αφαίρεση Πόλεις, "Βόλος" μπορούμε να αφαιρέσουμε άμεσα μια πόλη. Η αφαίρεση κάνει το εξής...βάζει στη θέση του "Βόλος" αυτό που είναι στο τέλος της Κατάστασης. Αν μας ενδιαφέρει η σειρά, τότε θα πρέπει να κάνουμε ταξινόμηση. Όμως γενικά δεν μας ενδιαφέρει η ταξινόμηση, αλλά το αν υπάρχει κάτι και το πόσο γρήγορα το βρίσκω ώστε να πάρω πληροφορίες. Σε αυτό η Κατάσταση είναι πολύ γρήγορη αφού χρησιμοποιεί πίνακα Κατακερματισμού. (Hash Table).  Πρώτη φορά έγραψα το Hash Table σε M2000, και από τότε το εφαρμόζω με παραλλαγές και στο κώδικα της Μ2000 (δείτε εδώ)

Καθαρό

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


\\ Εδώ είναι μια Λάμδα που παράγει ενάν αριθμό
Κωδικός=Λάμδα Κ=Τυχαίος(10000) ->{=Κ : Κ++ }


\\ Η κλάση αυτή παράγει μια ομάδα
\\ Το τμήμα με το ίδιο όνομα είναι ο κατασκευαστής της.
Κλάση Πληροφορίες {
      Κάτοικοι, Έκταση, Κωδικός
      Τμήμα Πληροφορίες {
            Διάβασε .Κάτοικοι, .Έκταση, .Κωδικός
      }
}
Κατάσταση Πόλεις="Πάτρα","Αθήνα","Βόλος","Καβάλα"
Προσθήκη Πόλεις, "Ιωάννινα"


Ταξινόμηση Πόλεις
\\ η Κατάσταση Πόλεις έχει μόνο ονόματα για την ώρα
\\ θα δούμε ότι έχει (το όνομα) και ταυτόχρονα βάζουμε και Πληροφορίες
\\ το ! στο Πόλεις$() δηλώνει ότι ο αριθμός δεν είναι κλειδί αλλά αριθμός σειράς
Για ι = 0 έως Μήκος(Πόλεις)-1
      Τύπωσε Πόλεις$(ι!)
      Επιστροφή Πόλεις :=Πληροφορίες(τυχαίος(10,50)*1000, τυχαίος(2,7)*10000, Κωδικός())
Επόμενο ι


Για Πόλεις("Αθήνα") {
      .Κάτοικοι=1000000
      .Έκταση=200000
      .Κωδικός=12345
}
Τύπωσε Πόλεις("Αθήνα").Έκταση


\\ Με ! λέμε στο διερμηνευτή ότι δίνουμε αριθμό σειράς και όχι κλειδί
Ελαχ=Πόλεις(0!).Κάτοικοι
Ελαχ_Π=0
Για ι = 1 έως Μήκος(Πόλεις)-1
      Αν Ελαχ>Πόλεις(ι!).Κάτοικοι τότε {
            Ελαχ=Πόλεις(ι!).Κάτοικοι
            Ελαχ_Π=ι
      }
Επόμενο ι
\\ τώρα δεν δουλεύει το Πόλεις$(ι!) γιατί κάθε κλειδί έχει μια ομάδα,
\\ ενώ πριν δεν είχε και έτσι έδειχνε το όνομά του!
Για Πόλεις(Ελαχ_Π!) {
      \\ αφού τώρα υπάρχει μετακίνηση του δείκτη στο σωστό
      \\ δουλεύει το Εκφρ$(Πόλεις!) που δείχνει το κλειδί
      Τύπωσε "Πόλη με λιγότερους κάτοικους:",Εκφρ$(Πόλεις!)
      Τύπωσε "Έχει: "; .Κάτοικοι
}


\\ Μπορούμε να βρούμε τον αριθμό σειράς με το κλειδί:
Αν Υπάρχει(Πόλεις, "Βόλος") τότε {
      Σ=Εκφρ(Πόλεις!)
      Τύπωσε Γραφή$(Πόλεις(Σ!).Κάτοικοι=Πόλεις("Βόλος").Κάτοικοι,";Ναί;Όχι;")
      \\ επειδή ακόμα ο δείκτης εσωτερικά δείχνει το "Βόλος"
      Τύπωσε Πόλεις().Κάτοικοι
      \\ αλλά όχι στην αριστερή θέση
      Πόλεις("Βόλος").Κάτοικοι+=2000
      Τύπωσε Πόλεις().Κάτοικοι
}


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.