ΑΕΠΠ-ΓΛΩΣΣΑ


Εδώ υπάρχουν προγράμματα σε ΓΛΩΣΣΑ
Προγράμματα σε ΑΕΠΠ

Παρακάτω θα προσθέσω το πως μπορεί η Μ2000 να υποστηρίξει το βιβλίο, στη θέση της ΓΛΩΣΣΑΣ.

\\ Εύρεση 3+6+9+..+999
α=999
β=3
κ=0

Τύπωσε "Με επανάληψη"
Για ι=3 Έως 999 Ανά 3
      κ+=ι
Επόμενο
Τύπωσε κ

Τύπωσε "Χωρίς επανάληψη"  ' 999/3=333 ... 333*334/2*3
Τύπωσε α*(α/β+1)/2=κ ' Αληθής



Πολλαπλασιασμός αλά Ρωσικά με ολισθήσεις, χρήση του δυαδικού και για εύρεση μονού, και δυαδικής πρόσθεσης (χωρίς υπερχείλιση, γίνεται αποκοπή των 32bit)

Εμφανίζει ενδιάμεσα μερικά αποτελέσματα σε δεκαεξαδικό. Κάνει χρήση προσήμων.

Το Σ είναι εντολή (Σ ή Συγγραφή) αλλά εδώ την προγραμματίζουμε ως μεταβλητή, και ισχύει μόνο για αυτό το τμήμα (είναι τοπική μεταβλητή σε ένα τμήμα έστω Α)..Τα προγράμματα τα γράφουμε σε τμήματα, και μπορούμε να έχουμε ταυτόχρονα πολλά τμήματα. πχ εκδόσεις του ίδιου προγράμματος.

\\ Πολλαπλασιασμός αλά Ρωσικά
α=Τυχαίος(-100,90)
β=Τυχαίος(-35,40)
Τύπωσε α*β
γ=0
σ=Σημ(α)*Σημ(β)
Αν σ<>0 Τότε
      α=Απολ(α)
      β=Απολ(β)
      Επαναλαβε
           Δεκαεξ α, β,
            Αν ΔΥΑΔΙΚΟ.ΚΑΙ(β,1)=1 Τότε γ=ΔΥΑΔΙΚΟ.ΠΡΟΣΘΕΣΗ(γ,α) : Δεκαεξ α Αλλιως Τύπωσε
            α= ΔΥΑΔΙΚΟ.ΟΛΙΣΘΗΣΗ(α,1) \\  <<
            β= ΔΥΑΔΙΚΟ.ΟΛΙΣΘΗΣΗ(β,-1) \\ >>
      μέχρι β=0
Τέλος Αν
Τύπωσε "Αποτέλεσμα:";γ*σ



Η Μ2000 έχει μια δομή δεδομένων που ταιριάζει με αυτή του βιβλίου στο κεφάλαιο:
 3.2 | Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα
Όπου αναφέρει τις βασικές λειτουργίες

  • Εισαγωγή
  • Διαγραφή
  • Αναζήτηση
  • Ταξινόμηση
  • Αντιγραφή
  • Συγχώνευση 
  • Διαχωρισμός

Στη Μ2000 μπορούμε να φτιάξουμε τη δομή Σωρός, η οποία είναι μια λίστα στην οποία μπορούμε να προσθέτουμε, να αφαιρούμε και να μετακινούμε εύκολα στοιχεία.
Η αναζήτηση είναι σειριακή  (άρα στη χειρότερη τα διαβάζουμε όλα), αλλά μπορούμε να επιλέξουμε αν θα ψάξουμε από την αρχή ή από το τέλος πχ το κ=κάθε(α, -1, 1) θα κάνει την αναζήτηση να ψάχνει από το τέλος προς την αρχή.

Η Σωρός α  { } φυλάει τον τρέχον σωρό και παίρνει αυτόν του α και τον κάνει τρέχον, αφήνοντας έναν κενό στο α. Μόλις τελειώσει το μπλοκ ο α παίρνει ότι αφήσαμε στον τρέχον και ο τρέχον ξαναπαίρνει τον φυλαγμένο. Οι αλλαγές γίνονται εσωτερικά με δείκτες, οπότε δεν έχουμε καθυστερήσεις.

Η Βάλε βάζει στη κορυφή, η Σειρά στο τέλος, η Διάβασε παίρνει τη κορυφή και τη βάζει σε μεταβλητή,  η ΤιμήΣωρού() διαβάζει χωρίς να βγάζει, η ΤιμήΣωρού$() διαβάζει αλφαριθμητικά. Η Πέτα πετάει τιμές από το σωρό, πχ Πέτα 5 θα πετάξει 5 από την κορυφή.

Με τη Βάλε έχουμε LIFO ενώ με την Σειρά έχουμε FIFO. Η Άδειασε αδειάζει το σωρό. Η Κενό επιστρέφει Αληθές αν ο σωρός είναι κενός. Μπορούμε στην α να διαβάσουμε το μήκος με την Μήκος(α), όπου αν μας δώσει 0 τότε σημαίνει πως έχουμε άδειο σωρό.

Η Σωρός()  δίνει ένα νέο, από έναν άλλο, ή από πολλούς άλλους σωρούς, ή από έναν αλλά όχι ολόκληρο αλλά μέρος αυτού

Η Τύπωσε α τυπώνει τα στοιχεία του σωρού χωρίς να τα πειράζει. (χρησιμοποιεί εσωτερικό επαναλήπτη και γεμίζει όσες στήλες χρειάζεται). Η Φέρε μετακινεί στην κορυφή και η ΦέρεΠίσω μετακινεί από την κορυφή. Πχ θέλουμε να αλλάξουμε το τέταρτο με το πέμπτο. Φέρε 4 φέρνει το 4ο ως πρώτο και το ΦέρεΠισω 5 κάνει το πρώτο πέμπτη. Μπορούμε να δώσουμε και δεύτερη παράμετρο το πόσα στοιχεία θα μεταφερθούν και με πρόσημο (το - αλλάζει τη φορά των στοιχείων κατά τη μετακίνηση).

Τα αντικείμενα σωρός στη Μ2000 μπορούν να βρίσκονται ως τιμές (με δείκτη) σε οποιοδήποτε αντικείμενο όπως Σωρός, Κατάσταση, Πίνακας. Πχ αν το Α(3) έχει αντικείμενο σωρό τότε το Κ=Α(3) δίνει στο Κ τον ίδιο δείκτη στο Α(3). Τα αντικείμενα αυτά διαγράφονται όταν δεν υπάρχει δείκτης να τα δείχνει! (με τη διαγραφή του τελευταίου δείκτη, έχουν μετρητή εσωτερικά).


α=σωρός:=1000,200,30,4
Τύπωσε α
\\ Προσπέλαση - το 2 στοιχείο
Τύπωσε ΤιμήΣωρού(α, 2)=200
\\ Εισαγωγή - μετά τη θέση 3 θα βάλουμε το 25
Σωρός α {
      Βάλε 25
      ΦέρεΠίσω 3+1
}
Τύπωσε α
\\ διαγραφή - θα αφαιρέσουμε το 4ο στοιχείο (το 25)
Σωρός α {
      Φέρε 4
      Πέτα
}
Τύπωσε α
\\ Αναζήτηση του 200 (σειριακά)
που=0
τι=200
κ=κάθε(α)
\\ πρέπει να συμβαίνουν και τα δύο, το πρώτο είναι αντικείμενο, που το θέλει χωριστά η ενώ.
\\ το δεύτερο θα μπορούσε να είναι αντικείμενο επίσης.
ενώ κ, που=0
      αν ΤιμήΣωρού(κ)=τι τότε που=1+κ^
τέλος ενώ
Αν που<>0 τότε
      Τύπωσε "Το βρήκα στη θέση: ";που, τιμήΣωρού(α, που)
Αλλιώς
      Τύπωσε "Δεν το βρήκα"
Τέλος Αν

\\ ταξινόμηση
Σωρος α {
      \\ [] σηκώνει τα στοιχία, το Πίνακας() τα βάζει σε πίνακα, το #Ταξινόμηση() δίνει νέο πίνακα
      \\ το ! βάζει το πίνακα ως στοιχεία πάλι στο σωρό
      Σειρά !Πίνακας([])#Ταξινόμηση()
}
Τύπωσε α
\\ Αντιγραφή όλο
β=Σωρός(α)
Τύπωσε β
Τύπωσε α είναι β ' λάθος
\\ Αντιγραφή τα δυο πρώτα στοιχεία σε νέο
γ=Σωρός(α,2) ' τα δυο πρώτα
Τυπωσε γ
\\ Αντιγραφή τα δυο τελευταία (αλλά αντίστροφα) σε νέο
δ=Σωρός(α,-2) ' τα δυο τελευταία αντιγραφή με αντιστροφή
Σωρός δ {ΦέρεΠίσω 2,2} ' αντιστροφή χωρίς αντιγραφή
Τύπωσε δ
\\ Αντιγραφή δυο σωρών μαζί σε νέο
ζ=Σωρός(γ,δ) ' αντιγραφή σε νέο σωρό των γ και δ
Τύπωσε ζ
\\  Συγχώνευση του δ στο γ
Σωρός γ {
      Σειρά !δ ' στο 4 30 βάζει το 200 1000
}
Τύπωσε γ
Τύπωσε Μήκος(δ)=0 ' αληθές γιατί πήγαν στο γ
\\ διαχωρισμός (με ΑΝΩ αν θα πάρουμε τα στοιχεία μέχρι το νούμερο , ή Κάτω αν θα πάρουμε από το νούμερο μέχρι το τέλος)
\\ νέος δείκτης
δ=Σωρός Κάτω γ, 3
Τύπωσε γ ' 4 30
Τυπωσε δ ' 200 1000
\\ διαχωρισμός και φόρτωση σε υπάρχον δείκτη σε σωρό
Σωρός δ {
      Σειρά ! Σωρός Κάτω γ, 2
}
Τύπωσε γ ' 4
Τύπωσε δ ' 200 1000 30


Ταξινόμηση Φυσαλίδας (3.7)
Η ΓΛΩΣΣΑ έχει πίνακες με βάση το 1, έτσι για 5 στοιχεία θα έχουμε δείκτες από το 1 έως το 5. Πολλές γλώσσες έχουν πίνακες από το 0. Η Μ2000 εξ ορισμού έχει πίνακες με βάση το 0, όμως μπορούμε να δηλώσουμε βάση σε μια εντολή Πίνακας, ή σε κάθε διάσταση αντί για το μέγεθός της  να δώσουμε περιοχή τιμών πχ το Πίνακας α(-5 έως 5) θα έχει 11 στοιχεία σε δείκτες -5,-4,-3,-2,-1,0,1,2,3,4,5

Παρακάτω είναι δυο προγράμματα. Ένα πιο κοντά στη ΓΛΩΣΣΑ, και ένα δεύτερο πιο κοντά στη Μ2000, πιο περιγραφικό το οποίο δουλεύει για οποιοδήποτε βάση, εδώ είναι το 5 για παράδειγμα!



\\ Ταξινόμηση Φυσαλίδας
Πίνακας Βάση 1, α(5)
Για τελικό_στοιχείο=1 έως 5
      α(τελικό_στοιχείο)=τελικό_στοιχείο
Επόμενο
Για τελικό_στοιχείο=2 έως 5
      Για νο_στοιχείου=5 έως τελικό_στοιχείο ανά -1
            Αν α(νο_στοιχείου-1)>α(νο_στοιχείου)Τότε
                  Άλλαξε α(νο_στοιχείου-1), α(νο_στοιχείου)
            Τέλος Αν
      Επόμενο
Επόμενο
Για τελικό_στοιχείο=1 έως 5
      Τύπωσε α(τελικό_στοιχείο),
Επόμενο τελικό_στοιχείο
\\ αλλαγή γραμμής
Τύπωσε


\\ Πιο  Μ2000 τρόπος
\\ πιο σωστός, με μεταβλητές που περιγράφουν τι είναι
\\ για οποιαδήποτε βάση, εδώ από 5 ώς 9
Πίνακας α(5 έως 9) ' κενός
α(5)=5,4,3,2,1

\\ δείκτες στοιχείων: μέγιστου και ελάχιστου

μέγιστο_στοιχείο=Διάσταση(α(),1,1)
ελάχιστο_στοιχείο=Διάσταση(α(),1,0)

\\ δεν χρειάζεται το ανά -1, γιατί όταν το αρχικό είναι μεγαλύτερο από το τελικό
\\ η Μ2000 βάζει αυτόματα το βήμα στο -1, το έχουμε όμως για να φαίνεται!
\\ επίσης το πρόσημο στο βήμα παίζει ρόλο μόνο αν το αρχικό είναι ίσο με το τελικό
\\ για να αποφασίσει ο διερμηνευτής πως θα αφήσει τη μεταβλητή μετά την έξοδο από τη ΓΙΑ
\\ δουλεύει εφόσον το μέγιστο_στοιχείο>ελάχιστο_στοιχείο

Αν μέγιστο_στοιχείο<=ελάχιστο_στοιχείο Τότε Λάθος "δεν υπάρχουν τουλάχιστον δυο στοιχεία"
Για τελικό_στοιχείο=ελάχιστο_στοιχείο+1 έως μέγιστο_στοιχείο
      Για νο_στοιχείου=μέγιστο_στοιχείο έως τελικό_στοιχείο ανά -1
            Αν α(νο_στοιχείου-1)>α(νο_στοιχείου)Τότε
                  Άλλαξε α(νο_στοιχείου-1), α(νο_στοιχείου)
            Τέλος Αν
      Επόμενο
Επόμενο
Τύπωσε α()





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

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