Τρίτη 26 Ιανουαρίου 2016

Προγραμματισμός 0006

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

Στο παρακάτω πρόγραμμα φτιάχνουμε δυο συναρτήσεις, μια που υπολογίζει με τύπο το στοιχείο Χ της ακολουθίας Φιμπονάτσι, αλλά και με άλλο τρόπο, με επανάληψη (Ένώ  { } ).
Την συνάρτηση με τον ένα τύπο την γράφουμε με την Κάνε όπου μεταγράφει εσωτερικά την συνάρτηση έτσι: Συνάρτηση Ακ.Φιμπ {Διάβασε χ :  = ακ(απολ(Συζυγής_ΧΑ^χ-(-Συζυγής_ΧΑ^(-χ)))/ρ5) }

Στην δεύτερη συνάρτηση χρησιμοποιώ τον σωρό τιμών. Κάθε συνάρτηση ξεκινάει με δικό της σωρό. Ότι αφήσω στο σωρό στην επιστροφή από τη συνάρτηση θα διαγραφεί. Η Σειρά βάζει τα νούμερα στο τέλος του σωρού, η βάλε στην αρχή. Έτσι η Σειρά 5,4 θα βάλει τελευταίο στοιχείο το 4, ενώ η Βάλε 7, 8 θα αφήσει στη κορυφή (ή πρώτο στοιχείο) το 8. Με την Διάβασε διαβάζω από το σωρό. Όταν καλούμε μια συνάρτηση περνάμε όσες παραμέτρους θέλουμε. Δεν μετράει η Μ2000 τι και πόσα βάζουμε. Ότι δώσουμε τα αφήνει στο σωρό τιμών. Το πρόγραμμα που γράφουμε αναλαμβάνει τι να κάνει με το σωρό. Αν βάλουμε τη Διάβασε Χ απλά του λέμε πάρε την τιμή από την κορυφή και βάλς την στην Χ αν υπάρχει αλλιώς φτιάξε την πρώτα και μετά βάλε την!
Η Διάβασε δημιουργεί μεταβλητές αλλά όχι πίνακες. Μπορούμε να ορίσουμε έναν μηδενικό πίνακα με την Πίνακας Α() και να διαβάσουμε από το σωρό τον πίνακα που έχει αφήσει κάτι άλλο, με μια Διάβασε Α(). Η Βάλε Α() θα βάλει αντίγραφο του πίνακα στο σωρό. Ο πίνακας στο σωρό κρατάει μια μόνο θέση. Αν δώσουμε Πίνακας Β() και αργότερα Β()=Α() τότε παίρνουμε αντίγραφο του Α() στο Β(). Αν μέσα στο Α() υπάρχουν αντικείμενα (ομάδες) τότε θα πάρουμε αντίγραφα των ομάδων, και αυτά έχουν πίνακες και αντίγραφα των πινάκων...και αν αυτά έχουν αντικείμενα...αντίγραφα των αντικειμένων. Δεν υπάρχει περίπτωση κυκλικής αναφοράς! Δηλαδή να χρειαστεί να αντιγραφεί κάτι που έχει ήδη αντιγραφεί!  Και αυτό γιατί η Μ2000 δεν αντιγράφει δείκτες προς αντικείμενα (ομάδες λέγονται στην Μ2000) αλλά τα αντικείμενα! αν Α είναι μια ομάδα τότε το Β=Α δίνει μια νέα ομάδα αν το Β δεν είναι ομάδα  ή μια ένωση (αντιγράφει τιμές στις ίδιες ιδιότητες και προσθέτει εκείνες που δεν υπάρχουν στην Β). Μπορούμε να χρησιμοποιήσουμε αναφορές σε ομάδες, αλλά αυτές γίνονται σε ανοιχτές ομάδες, ενώ ότι είναι μέσα σε στοιχειο πίνακα ή στο σωρό είναι κλειστή ομάδα, ανώνυμη. Μια κλειστή ομάδα μπορεί να ανοίξει πρόσκαιρα και να περαστεί με αναφορά, όμως αυτό δεν εξασφαλίζει ότι κάπου αλλού ταυτόχρονα θα ανοίξει πάλι η ομάδα. Απλά στο δεύτερο άνοιγμα θα υπάρχει η αρχική κλειστή ομάδα, και τυχόν αλλαγές ενώ θα αποθηκευτούν μια φορά, θα αποθηκευτούν στο κλείσιμο και μια δεύτερη. Αν αυτά τα κάνουμε σε νήματα...απλά θα έχουμε απροσδιόριστη συμπεριφορά. Υπάρχει τρόπος όμως να εκτελείται ένα μέρος κώδικα χωρίς να επιτρέπεται άλλο μέρος με ην ίδια μεταβλητή χειρισμού να τρέξει αν πρώτα δεν τελειώσει αυτός που
έχει το "πάνω χέρι" στη μεταβλητή! Αυτή η εντολή λέγεται μέρος { }
Εδώ θα δούμε μόνο το οκ 2 και Αληθές. Η δομή μέρος { } ως μεταβλητή_χειρισμού αλλάζει την μεταβλητή σε αληθές, οπότε τα άλλα νήματα που τρέχουν στο ίδιο τμήμα και βλέπουν τις ίδιες μεταβλητές θα προσπεράσουν αυτό το κομμάτι! (αν έχουμε σχέδιο.νημάτων ταυτόχρονο και όχι διαδοχικό) μπορούμε να κάνουμε την Κ γενική (Γενική Κ=Αληθές)..και να έχουμε και σε κλήσεις μια παρόμοια συμπεριφορά! Π.χ να αποκλείται μια συγκεκριμένη λειτουργία αν έχει κληθεί μια συνάρτηση μέσα από μια μέρος { } ή αν έχουμε σε δικό μας χειρισμό την μεταβλητή (η μεταβητή είναι μια απλή μεταβλητή, που την αναγνωρίζει η Μέρος { } και στο τέλος του μπλοκ την κάνει Ψευδές).

Κ=Αληθές
μέρος {
      Τύπωσε "οκ 1", Κ
} ως Κ
Κ=Ψευδές
μέρος {
      Τύπωσε "οκ 2", Κ
} ως Κ


Σε αυτό το πρόγραμμα βλέπουμε ότι μετά το 74 στοιχείο οι δυο ρουτίνες έχουν μικρές διαφορές λόγω στρογγυλοποίησης. Κάνουμε προσθέσεις αλλά οι μεγάλοι αριθμοί στρογγυλοποιούνται άρα πρακτικά δεν παίρνουμε πραγματικό αριθμό Φιμπονάτσι αλλά κάποιον κοντινό!




Οθόνη 5,0
Περιθώριο {Οθόνη 5}
Πένα 14
Διαστιχο 0
Φόρμα 60 \\ δεν δίνουμε γραμμές για να βάλει όσες μπορεί!
\\ Κάνουμε δυο μεταβλητές γενικές για να τις διαβάζει η συνάρτηση παρακάτω
\\ Η εντολή Κάνε φτιάχνει μια συνάρτηση σε μια γραμμή αντί να την γράφαμε έτσι:
\\ Συνάρτηση Ακ.Φιμπ { Διάβασε χ : =ακ(απολ((Συζυγής_ΧΑ^χ-(-Συζυγής_ΧΑ^(-χ)))/ρ5)) }
Γενική ρ5=ριζα(5)
Γενική Συζυγής_ΧΑ=1/((1+ρ5)/2)
\\ αυτή είναι μια
Κάνε Ακ.Φιμπ(χ)=ακ(απολ(Συζυγής_ΧΑ^χ-(-Συζυγής_ΧΑ^(-χ)))/ρ5)
Συνάρτηση Φιμπ {
     Διάβασε Χ
     Σειρά 1,1
     Ενώ Χ>2 {
           Διαβασε Β, Α
           Βάλε Β, Β+Α
           Χ--
     }
      =Αριθμός
}
Χρυσή_Τομή=1/Συζυγής_ΧΑ
Τύπωσε Συζυγής_ΧΑ, Χρυσή_Τομή
Για ι=1 εως 100 {
      \\ η τύπωσε μέρος χειρίζεται στήλες με μεταβλητό πλάτος
      \\ εδώ η πρώτη έχει 6 χαρακτήρες και ακολουθούν οι άλλες με 24 χαρακτήρες
      \\ ο αριθμός 0 στην πρώτη $( ) δηλώνει ότι θα γραφει η Τύπωσε μη αναλογική γραφή
      \\ εξ ορισμού το νούμερο είναι 4 (με αναλογική γραφή) στις Τύπωσε μέρος/πάνω/υπό
      Τύπωσε μέρος $(0,6),ι, $(, 24), Ακ.Φιμπ(ι), Φιμπ(ι)
      \\ υποχρεωτικά μετά την Τύπωσε μέρος χρειάζεται αλλαγή γραμμής με μια απλή τύπωσε
      \\ διαφορετικά δεν αλλάζει γραμμή και πέφτουν όλα πάνω σε μια (χωρίς να σβήνουν τα προηγούμενα).
      Τύπωσε
}


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

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

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