Παρασκευή, 4 Δεκεμβρίου 2015

Γενικός Απαριθμητής Συνδυασμών VI (Κλάση με πίνακες - διόρθωση)


Εδώ είναι η τελική λύση, με μια κλάση που τα έχει όλα. Είναι ο πιο γρήγορος αλλά δεν έχει την δυνατότητα όπως οι άλλοι να ξεκινήσουν από το δεύτερο ή άλλο εκτός από το πρώτο ψηφίο μέτρησης. Παρόλα αυτά έχει όλα τα άλλα με κέρδος ότι δεν κάνουμε κλήσεις σε κάθε γέμισμα ενός μετρητή για να αυξήσει τον αμέσως επόμενο. Η μετατροπή της προηγούμενης έκδοσης δεν πήρε πολύ! Τώρα έκανα τη συνάρτηση  Βαλε_Αρχική_Θέση()  ως τμήμα της κλάσης. Επειδή περνάω μεταβλητές τιμές την βάζω σε Σωρός Νέος {} έτσι για να μην γίνει λάθος και πάρει και άλλες τιμές!

Αλλάξτε το Bit=11 σε Bit =14
Βάλτε Φόρμα 80,40 για να βλέπετε περισσότερα
Αν θέλετε βάλτε ανά δέκα ή είκοσι μετρήσεις μια Π$=Κομ$ ώστε να περιμένει το σύστημα να πατήσετε ένα πλήκτρο για να συνεχίσει!

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

                                  .αρ(Ν)=(Αριθμός-.μηδ(Ν)) υπολ .μεγ(Ν) +.μηδ(Ν)
                           \\       .αρ(Ν)=Αριθμός υπολ (.μεγ(Ν)-.μηδ(Ν))
                                    Ν--
                              } μέχρι Ν<0
                        }
                        Αν όχι οκ τότε Άδειασε Λάθος : Λάθος "λάθος στην παράμετρο "+γραφη$(Ν)
                  } αλλιώς {
                        .μέτρησε Ν
                  }
            }
}
\\ κυρίως πρόγραμμα:
Bit=11
Α=ΠολυΜετρητής(Bit)
Για ι= 0 έως Bit-1 {
      Α.μετρ ι, 0, 2
}
Σωρός Νέος {
      Α.Βαλε_Αρχική_Θέση 1,0,0,1,1,0,0,0,0,0,0
      Α.Βαλε_Αρχική_Θέση 3 ' +3
}
Για Α {
      Για ι=1 Έως 10 {
            Τύπωσε .ολαμαζί$(), .σύνολο ' τυπώνει το σύνολο των μετρήσεων -1!
            .ΜετρησεΜόνο
      }
}



Ζάρια=2
Α=ΠολυΜετρητής(Ζάρια)
Για ι= 0 έως Ζάρια-1 {
      Α.μετρ ι, 1, 6
}
Για Α {
      Για ι=1 Έως 6**Ζάρια {
            Τύπωσε .ολαμαζί$(), .σύνολο+1 ' τυπώνει το σύνολο των μετρήσεων!
            .ΜετρησεΜόνο
            αν ι υπολ 10=0 τότε Π$=Κομ$
      }
}


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

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