Πέμπτη 3 Δεκεμβρίου 2015

Γενικός Απαριθμητής Συνδυασμών II (με κλάση -Νέο)

Σε αυτό το παράδειγμα έχουμε μια κλάση και φτιάχνουμε ξεχωριστές οντότητεςόπου η καθεμία είναι ένας μετρητής. Ο πρώτος που φτιάχνουμε σε αυτό το παράδειγμα θα μετράει από το 1 και για 3 βήματα. Ο δεύτερος το ίδιο αλλά όταν περνάει στο τέταρτο βήμα τότε δίνει εντολή στον προηγούμενο να μετρήσει! Αυτό γίνεται με την ισχνή αναφορά. Λέγεται ισχνή διότι δίνεται μόνο το όνομα αλλά δεν γίνεται η αναφορά. Και εδώ στην ουσία τη χρησιμοποιούμε με την εντολή Ένθεση (Inline) για να παρεμβάλουμε κώδικα! Στην μεταβλητή της κλάσης (του κάθε αντικειμένου) .ισχνή$ θα είναι το πραγματικό όνομα του μετρητή που θέλουμε να εκτελείται η "μέτρησε".

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

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

Διόρθωση  - Βελτιστοποιήθηκε

Κλάση μετρ {
      αρ,μηδ=0,μεγ=1,μεγ1=0,ισχνή$
      συνολο
      Τμήμα μετρησε { κ=0
            Αν Ταύτιση("Α") Τότε διαβασε κ
            \\ ένα μπλοκ με την κυκλικά κάνει επανάληψη
            \\ η εντολή κυκλικά αλλάζει μια σημαία εσωτερικά
            \\ ο έλεγχος της σημαίας γίνεται στο τέλος του μπλοκ
            {
                  κ--
                  .αρ++
                  .συνολο++
                  Αν .αρ>.μεγ1 Τότε {
                        .αρ<=.μηδ
                        Αν .ισχνη$<>"" Τότε ενθεση .ισχνη$+".μέτρησε"
                  }
                  Αν κ>0 Τότε κυκλικά
                  }
      }
      Τμήμα μετρ {
            Αν Ταύτιση("ΑΑ") Τότε {
                  διάβασε .μηδ, .μεγ : .μεγ1<=.μεγ-1+.μηδ
                  .αρ<=.μηδ
            } Αλλιώς.Αν Ταύτιση("Α") Τότε {
                  διάβασε .μεγ : .μεγ1<=.μεγ-1
                  .αρ=.μηδ
            }
            Αν Ταύτιση("Γ") Τότε {
                  Διάβασε .ισχνη$
            }
      }
      Συνάρτηση ολαμαζί$ {
            α$=""
            Αν .ισχνη$<>"" Τότε ενθεση "α$= "+.ισχνη$+".ολαμαζι$()"
            Αν α$="" Τότε {
                  =α$+Μορφή$("{0}",.αρ)
            } Αλλιώς {
                  =α$+Μορφή$(", {0}",.αρ)
            }
      }
}


Α1=μετρ(1,3)
Α2=μετρ(1,3,&Α1)
Α3=μετρ(1,3,&Α2)
Α4=μετρ(1,3,&Α3)
Α5=μετρ(1,3,&Α4)
α5.μετρησε 100
Για α5 {
      Για ι=1 Έως 100 {
      Τύπωσε .ολαμαζί$(), .συνολο
      .μετρησε
      }
}




\\ Μετρητής δυαδικός 8bit


Α1=μετρ(0,2)
Α2=μετρ(0,2,&Α1)
Α3=μετρ(0,2,&Α2)
Α4=μετρ(0,2,&Α3)
Α5=μετρ(0,2,&Α4)
Α6=μετρ(0,2,&Α5)
Α7=μετρ(0,2,&Α6)
Α8=μετρ(0,2,&Α7)
Α8.μετρησε 128


Για Α8 {
      Για ι=1 Έως 10 {
      Τύπωσε .ολαμαζί$(), .συνολο
      .μετρησε
      }
}




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

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

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