Δομή δένδρου σε ένα αλφαριθμητικό!

Γενικά θέματα για τις γλώσσες προγραμματισμού που δεν καλύπτονται από τις άλλες περιοχές της κατηγορίας.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Bugman
Δημοσιεύσεις: 362
Εγγραφή: 01 Ιούλ 2003 20:39
Τοποθεσία: Πρέβεζα
Επικοινωνία:

Δομή δένδρου σε ένα αλφαριθμητικό!

Δημοσίευση από Bugman » 03 Νοέμ 2005 13:40

Μια δομή δένδρου μπορεί να φτιαχτεί χωρίς την χρήση δεικτών (pointers).
Παρακάτω είναι μια ομάδα τμημάτων και συναρτήσεων γραμμένες στην Μ2000 για να διαχειρίζεται δένδρα πληροφοριών μέσα σε ένα αλφαριθμητικό! Το κόλπο εδώ είναι η χρήση "φρουρών". Φρουρό λέμε το χαρατήρα εκείνο που σηματοδοτεί το τέλος μιας ενότητας.
Εδώ το δένδρο θα το λέμε πακέτο!
Το κάθε ΠΑΚΕΤΟ$ μπορεί να περιέχει μια ή περισσότερες εγγραφές του τύπου Αναγνωριστικό+Χαρακτήρας 13+ Χαρακτήρας 10+Τιμή+Χαρακτήρας 13+ Χαρακτήρας 10. Η τιμή μπορεί να είναι ένα άλλο πακέτο! Το ζήτημα των φρουρών που πρέπει να περιέχονται μέσα στην τιμή, όταν αυτή είναι πακέτο, και να μην λογαριάζονται όταν διαβάζουμε το πατρικό πακέτο, το ξεπερνάμε με την χρήση της κρυπτογράφησης. Η συνάρτηση ΚΡΥΨΕ δέχεται ένα αλφαριθμητικό και δυο κλειδιά, ένα αλφαριθμητικό και ένα αριθμητικό, και παράγει ένα αλφαριμθητικό διπλού μήκους, όπου κάθε χαρακτήρας είναι μεγαλύτερος από 127.

Κώδικας: Επιλογή όλων

ΤΜΗΜΑ ΚΛΑΔΕΨΕ {
ΔΙΑΒΑΣΕ Τ$, Κ$
Κ=ΜΟΙΡΑΣΕ.ΜΕ.ΚΕΝΑ%(Τ$)
ΑΝ Κ=0 ΤΟΤΕ ΒΑΛΕ "": ΕΞΟΔΟΣ
Τ$="" : ΝΓ$=ΧΑΡ$(13)+ΧΑΡ$(10)
ΓΙΑ Ι=1 ΕΩΣ Κ ΑΝΑ 2 {
ΔΙΑΒΑΣΕ Λ$, Μ$
ΑΝ Μ$<>Κ$ ΤΟΤΕ Τ$=Τ$+Λ$+ΝΓ$+Μ$+ΝΓ$
&#125;
ΒΑΛΕ Τ$
&#125;
ΤΜΗΜΑ ΑΛΛΑΞΕ &#123;
ΔΙΑΒΑΣΕ ΜΟΝΟΠΑΤΙ$, ΝΕΑΤΙΜΗ$, ΠΑΚ$
ΜΟΝΟΠΑΤΙ$=ΑΛΛΑΓΗ$&#40;".",ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;,ΜΟΝΟΠΑΤΙ$&#41;
Λ=ΜΟΙΡΑΣΕ.ΜΕ.ΚΕΝΑ%&#40;ΜΟΝΟΠΑΤΙ$&#41;
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΕΠΙ$=""
ΑΝ Λ=0 ΤΟΤΕ ΒΑΛΕ ΠΑΚ$&#58; ΕΞΟΔΟΣ
ΛΛ=Λ
ΕΝΩ Λ>0 &#123;
ΔΙΑΒΑΣΕ ΠΙΟ$
ΕΠΙ$=ΣΤΟ.ΠΑΚΕΤΟ$&#40;ΕΠΙ$,ΓΡΑΦΗ$&#40;ΛΛ-Λ+1,"0"&#41;,ΣΤΟ.ΠΑΚΕΤΟ$&#40;"",ΠΙΟ$,ΠΑΚ$&#41;&#41;
ΠΑΚ$=ΑΠΟ.ΠΑΚΕΤΟ$&#40;ΠΑΚ$,ΠΙΟ$&#41;
ΑΝ ΤΕΜΑΧΙΑ%&#40;ΠΑΚ$&#41;=0 ΤΟΤΕ ΠΑΚ$=""
Λ=Λ-1
&#125;
Λ=ΛΛ
ΕΝΩ Λ>0 &#123;
ΠΑΚ$=ΑΠΟ.ΠΑΚΕΤΟ$&#40;ΕΠΙ$, ΓΡΑΦΗ$&#40;Λ,"0"&#41;&#41;
Κ=ΜΟΙΡΑΣΕ.ΠΑΚΕΤΟ%&#40;ΠΑΚ$,1,1&#41;
ΔΙΑΒΑΣΕ ΠΙΟ$, ΠΑΚΕΤΟ$
ΝΕΑΤΙΜΗ$=ΣΤΟ.ΠΑΚΕΤΟ$&#40;ΠΑΚΕΤΟ$, ΠΙΟ$, ΝΕΑΤΙΜΗ$&#41;
Λ=Λ-1
&#125;
ΒΑΛΕ ΝΕΑΤΙΜΗ$
&#125;
ΣΥΝΑΡΤΗΣΗ ΕΠΙΛΟΓΗ.ΑΠΟ.ΠΑΚΕΤΟ$ &#123;
ΔΙΑΒΑΣΕ ΤΙ$
Κ=ΜΟΙΡΑΣΕ.ΜΕ.ΚΕΝΑ%&#40;ΤΙ$&#41;
ΕΠΙΛΟΓΗ
Ε$=""
ΑΝ Κ>0 ΤΟΤΕ &#123;
Κ=Κ/2
ΕΝΩ Κ>0 &#123;
ΔΙΑΒΑΣΕ ΠΕΤΑ1$, ΕΠ$
ΕΠΙΛΟΓΗ + ΕΠ$
Κ=Κ-1
&#125;
ΕΠΙΛΟΓΗ !
ΑΝ ΕΠΙΛΟΓΗ>0 ΤΟΤΕ Ε$=ΕΠΙΛΟΓΗ$&#40;ΕΠΙΛΟΓΗ&#41;
&#125;
=Ε$
&#125;
ΣΥΝΑΡΤΗΣΗ ΔΕΝΔΡΟ &#123;
' Οι συναρτήσεις έχουν την δυνατότητα της αναδρομής &#40;τα τμήματα όχι&#41;
' Αναδρομή είναι η κλήση μιας συνάρτησης του εαυτού της
ΔΙΑΒΑΣΕ Τ1$, ΠΑΤΕΡΑΣ$
Ο=ΤΕΜΑΧΙΑ%&#40;Τ1$&#41;
Ο=ΜΟΙΡΑΣΕ.ΠΑΚΕΤΟ%&#40;Τ1$,1,Ο&#41;
ΑΝ Ο>0 ΤΟΤΕ &#123;
ΓΙΑ Ι=1 ΕΩΣ Ο &#123;
ΔΙΑΒΑΣΕ ΕΚΕΙΝΟ$, ΑΥΤΟ$
ΑΝ ΠΑΤΕΡΑΣ$<>"" ΤΟΤΕ ΕΚΕΙΝΟ$=ΠΑΤΕΡΑΣ$+"."+ΕΚΕΙΝΟ$
Λ=ΤΕΜΑΧΙΑ%&#40;ΑΥΤΟ$&#41;
ΑΝ Λ=0 ΤΟΤΕ &#123;
ΑΝ ΜΗΚΟΣ&#40;ΑΥΤΟ$&#41;>10 ΤΟΤΕ &#123; ΤΥΠΩΣΕ ΕΚΕΙΝΟ$;"&#58;";ΑΡΙΣ$&#40;ΑΥΤΟ$,7&#41;+"..."&#125; ΑΛΛΙΩΣ ΤΥΠΩΣΕ ΕΚΕΙΝΟ$;"&#58;";ΑΥΤΟ$
&#125; ΑΛΛΙΩΣ Χ=ΔΕΝΔΡΟ&#40;ΑΥΤΟ$, ΕΚΕΙΝΟ$&#41;
&#125;
&#125;
=Ο
&#125;
ΣΥΝΑΡΤΗΣΗ Α.ΚΛΕΙΔΙΟΥ$ &#123;
ΔΙΑΒΑΣΕ Τ1$, ΠΑΤΕΡΑΣ$, ΠΙΟ$
ΑΝΑΝΕΩΣΗ
Κ$=""
Ο=ΤΕΜΑΧΙΑ%&#40;Τ1$&#41;
Ο=ΜΟΙΡΑΣΕ.ΠΑΚΕΤΟ%&#40;Τ1$,1,Ο&#41;
ΑΝ Ο>0 ΤΟΤΕ &#123;
ΓΙΑ Ι=1 ΕΩΣ Ο &#123;
ΔΙΑΒΑΣΕ ΕΚΕΙΝΟ$, ΑΥΤΟ$
ΑΝ ΠΑΤΕΡΑΣ$<>"" ΤΟΤΕ ΕΚΕΙΝΟ$=ΠΑΤΕΡΑΣ$+"."+ΕΚΕΙΝΟ$
Λ=ΤΕΜΑΧΙΑ%&#40;ΑΥΤΟ$&#41;
ΑΝ Λ=0 ΤΟΤΕ &#123;
ΑΝ ΘΕΣΗ&#40;ΕΚΕΙΝΟ$,ΠΙΟ$&#41;>0 ΤΟΤΕ Κ$=Κ$+ΕΚΕΙΝΟ$+ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
&#125; ΑΛΛΙΩΣ Κ$=Κ$+Α.ΚΛΕΙΔΙΟΥ$&#40;ΑΥΤΟ$,ΕΚΕΙΝΟ$, ΠΙΟ$&#41;
&#125;
&#125;
=Κ$
&#125;
ΣΥΝΑΡΤΗΣΗ ΕΥΡΕΣΗ$ &#123;
ΔΙΑΒΑΣΕ Δ$, ΜΟΝΟΠΑΤΙ$
ΜΟΝΟΠΑΤΙ$=ΑΛΛΑΓΗ$&#40;".",ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;,ΜΟΝΟΠΑΤΙ$&#41;
Λ=ΜΟΙΡΑΣΕ.ΜΕ.ΚΕΝΑ%&#40;ΜΟΝΟΠΑΤΙ$&#41;
ΑΝ Λ=0 ΤΟΤΕ =""&#58;ΕΞΟΔΟΣ
ΕΝΩ Λ>0 &#123;
ΔΙΑΒΑΣΕ ΠΙΟ$
Δ$=ΑΠΟ.ΠΑΚΕΤΟ$&#40;Δ$, ΠΙΟ$&#41;
ΑΝ Δ$="" ΤΟΤΕ &#123;
Λ=Λ-1
ΕΝΩ Λ>0 &#123;ΔΙΑΒΑΣΕ ΠΕΤΑ1$&#58; Λ=Λ-1&#125;
&#125;
Λ=Λ-1
&#125;
=Δ$
&#125;
ΣΥΝΑΡΤΗΣΗ ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ% &#123;
ΔΙΑΒΑΣΕ Α$
ΑΝ ΜΗΚΟΣ&#40;Α$&#41;>2 ΤΟΤΕ &#123;
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΑΝ ΜΕΣ$&#40;Α$,ΜΗΚΟΣ&#40;Α$&#41;-1&#41;<>ΝΓ$ ΤΟΤΕ Α$=Α$+ΝΓ$
Μ=ΜΗΚΟΣ&#40;Α$&#41;
Α$=ΑΛΛΑΓΗ$&#40;ΝΓ$,"",Α$&#41;
=&#40;Μ-ΜΗΚΟΣ&#40;Α$&#41;&#41;/2
&#125; ΑΛΛΙΩΣ =0
&#125;
ΣΥΝΑΡΤΗΣΗ ΓΡΑΜΜΕΣ% &#123;
ΔΙΑΒΑΣΕ Α$
ΑΝ ΜΗΚΟΣ&#40;Α$&#41;>2 ΤΟΤΕ &#123;
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΕΝΩ ΘΕΣΗ&#40;Α$,ΝΓ$&#41;=1 &#123;Α$=ΜΕΣ$&#40;Α$,3&#41;&#125;
Β$=Α$+ΝΓ$
&#123;
Α$=Β$
Β$=ΑΛΛΑΓΗ$&#40;ΝΓ$+ΝΓ$, ΝΓ$, Α$&#41;
ΑΝ Β$<>Α$ ΤΟΤΕ ΚΥΚΛΙΚΑ
&#125;
Μ=ΜΗΚΟΣ&#40;Α$&#41;
Α$=ΑΛΛΑΓΗ$&#40;ΝΓ$,"",Α$&#41;
=&#40;Μ-ΜΗΚΟΣ&#40;Α$&#41;&#41;/2
&#125; ΑΛΛΙΩΣ =0
&#125;
ΣΥΝΑΡΤΗΣΗ ΕΙΝΑΙ.ΚΕΙΜΕΝΟ &#123;
ΔΙΑΒΑΣΕ ΑΥΤΟ$
=ΘΕΣΗ&#40;ΑΥΤΟ$,ΧΑΡ$&#40;13&#41;&#41;=0
&#125;
ΣΥΝΑΡΤΗΣΗ ΔΙΠΛΩΣΕ.ΚΕΙΜΕΝΟ$ &#123;
ΔΙΑΒΑΣΕ ΑΥΤΟ$
=ΑΛΛΑΓΗ$&#40;ΧΑΡ$&#40;13&#41;,"",ΑΥΤΟ$&#41;
&#125;
ΣΥΝΑΡΤΗΣΗ ΞΕΔΙΠΛΩΣΕ.ΚΕΙΜΕΝΟ$ &#123;
ΔΙΑΒΑΣΕ ΑΥΤΟ$
=ΑΛΛΑΓΗ$&#40;ΧΑΡ$&#40;10&#41;,ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;,ΑΥΤΟ$&#41;
&#125;
ΣΥΝΑΡΤΗΣΗ ΦΤΙΑΞΕ.ΚΕΙΜΕΝΟ$ &#123;
ΔΙΑΒΑΣΕ ΠΟΣΑ
' Η ΓΡΑΜΜΑ$ διαβάζει την κορυφή του σωρού &#40;εφόσον είναι αλφαριθμητικό&#41;
' διαφορετικά αν ο σωρός είναι άδειος ή έχει αριθμητική τιμή βγαίνει λάθος
Κ$=""
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΕΝΩ ΠΟΣΑ>0 &#123;
Κ$=Κ$+ΓΡΑΜΜΑ$+ΝΓ$
ΠΟΣΑ=ΠΟΣΑ-1
&#125;
=Κ$
&#125;
ΣΥΝΑΡΤΗΣΗ ΜΟΙΡΑΣΕ.ΜΕ.ΚΕΝΑ% &#123;
ΔΙΑΒΑΣΕ ΤΙ$
Κ=ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ%&#40;ΤΙ$&#41;
ΑΝ Κ=0 ΤΟΤΕ =0&#58;ΕΞΟΔΟΣ
ΠΙΝΑΚΑΣ Α$&#40;Κ&#41;
Ι=0
Λ=0
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΑΝ ΔΕΞΙ$&#40;ΤΙ$,2&#41;<>ΝΓ$ ΤΟΤΕ ΤΙ$=ΤΙ$+ΝΓ$
&#123;
ΑΝ ΤΙ$="" ΤΟΤΕ ΕΞΟΔΟΣ
Λ=ΘΕΣΗ&#40;ΤΙ$,ΝΓ$&#41;
Α$&#40;Ι&#41;=ΑΠΟΚ$&#40;ΜΕΣ$&#40;ΤΙ$,1,Λ-1&#41;&#41;
Ι=Ι+1
ΤΙ$=ΜΕΣ$&#40;ΤΙ$,Λ+2&#41;
ΚΥΚΛΙΚΑ
&#125;
Λ=Ι-1
ΓΙΑ Κ=Λ ΕΩΣ 0 &#123;
ΒΑΛΕ Α$&#40;Κ&#41;
&#125;
=Ι
&#125;
ΣΥΝΑΡΤΗΣΗ ΜΟΙΡΑΣΕ.ΧΩΡΙΣ.ΚΕΝΑ% &#123;
ΔΙΑΒΑΣΕ ΤΙ$
Κ=ΓΡΑΜΜΕΣ%&#40;ΤΙ$&#41;
ΑΝ Κ=0 ΤΟΤΕ =0&#58;ΕΞΟΔΟΣ
ΠΙΝΑΚΑΣ Α$&#40;Κ&#41;
Ι=0
Λ=0
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΑΝ ΔΕΞΙ$&#40;ΤΙ$,2&#41;<>ΝΓ$ ΤΟΤΕ ΤΙ$=ΤΙ$+ΝΓ$
&#123;
ΑΝ ΤΙ$="" ΤΟΤΕ ΕΞΟΔΟΣ
Λ=ΘΕΣΗ&#40;ΤΙ$,ΝΓ$&#41;
Α$=ΑΠΟΚ$&#40;ΜΕΣ$&#40;ΤΙ$,1,Λ-1&#41;&#41;
ΑΝ Α$<>"" ΤΟΤΕ &#123;
Α$&#40;Ι&#41;=Α$
Ι=Ι+1
&#125;
ΤΙ$=ΜΕΣ$&#40;ΤΙ$,Λ+2&#41;
ΚΥΚΛΙΚΑ
&#125;
Λ=Ι-1
ΓΙΑ Κ=Λ ΕΩΣ 0 &#123;
ΒΑΛΕ Α$&#40;Κ&#41;
&#125;
=Ι
&#125;
ΣΥΝΑΡΤΗΣΗ ΜΟΙΡΑΣΕ.ΑΛΛΙΩΣ% &#123;
ΔΙΑΒΑΣΕ ΤΙ$
Ι=0
Λ=0
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΑΝ ΔΕΞΙ$&#40;ΤΙ$,2&#41;<>ΝΓ$ ΤΟΤΕ ΤΙ$=ΤΙ$+ΝΓ$
&#123;
ΑΝ ΤΙ$="" ΤΟΤΕ ΕΞΟΔΟΣ
Λ=ΘΕΣΗ&#40;ΤΙ$,ΝΓ$&#41;
ΒΑΛΕ ΑΠΟΚ$&#40;ΜΕΣ$&#40;ΤΙ$,1,Λ-1&#41;&#41;
Ι=Ι+1
ΤΙ$=ΜΕΣ$&#40;ΤΙ$,Λ+2&#41;
ΚΥΚΛΙΚΑ
&#125;
=Ι
&#125;
ΣΥΝΑΡΤΗΣΗ ΘΕΣΗ.ΣΤΟ.ΠΑΚΕΤΟ% &#123;
ΔΙΑΒΑΣΕ ΤΙ$, ΠΙΟ$ 
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΤΙ$=ΝΓ$+ΤΙ$+ΝΓ$
Τ%=ΘΕΣΗ&#40;ΤΙ$,ΝΓ$+ΠΙΟ$+ΝΓ$&#41;
ΤΙ$=ΜΕΣ$&#40;ΤΙ$,3,Τ%-3&#41;
ΑΝ Τ%=0 ΤΟΤΕ &#123;
=0
&#125; ΑΛΛΙΩΣ &#123;
=ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ%&#40;ΤΙ$&#41;/2+1
&#125;
&#125;
ΣΥΝΑΡΤΗΣΗ ΑΠΟ.ΠΑΚΕΤΟ$ &#123;
ΔΙΑΒΑΣΕ ΤΙ$, ΠΙΟ$ 
Κ=ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ%&#40;ΤΙ$&#41;
ΑΝ Κ=0 ΤΟΤΕ =""&#58; ΕΞΟΔΟΣ
ΠΙΝΑΚΑΣ Α$&#40;Κ&#41;
Ι=0
Λ=0
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΤΙ$=ΤΙ$+ΝΓ$
&#123;
ΕΝΩ ΘΕΣΗ&#40;ΤΙ$,ΝΓ$&#41;=1 &#123; ΤΙ$=ΜΕΣ$&#40;ΤΙ$,3&#41; &#125;
ΑΝ ΤΙ$="" ΤΟΤΕ ΕΞΟΔΟΣ
Λ=ΘΕΣΗ&#40;ΤΙ$,ΝΓ$&#41;
Α$&#40;Ι&#41;=ΑΠΟΚ$&#40;ΜΕΣ$&#40;ΤΙ$,1,Λ-1&#41;&#41;
Ι=Ι+1
ΤΙ$=ΜΕΣ$&#40;ΤΙ$,Λ+2&#41;
ΚΥΚΛΙΚΑ
&#125;
Λ=Ι-1
ΤΕΛΙΚΟ$=""
ΓΙΑ Κ=Λ ΕΩΣ 0 ΑΝΑ 2 &#123;
ΑΝ Α$&#40;Κ&#41;=ΠΙΟ$ ΤΟΤΕ ΤΕΛΙΚΟ$=ΦΑΝΕΡΟ$&#40;Α$&#40;Κ-1&#41;,"ΑΛΦΑ",1&#41;
&#125;
=ΤΕΛΙΚΟ$
&#125;
ΣΥΝΑΡΤΗΣΗ ΣΤΟ.ΠΑΚΕΤΟ$ &#123;
ΔΙΑΒΑΣΕ ΤΙ$, ΠΙΟ$, ΑΥΤΟ$
ΑΝ ΠΙΟ$="" ΤΟΤΕ =""&#58; ΕΞΟΔΟΣ
ΑΝ ΑΥΤΟ$<>"" ΤΟΤΕ ΑΥΤΟ$=ΚΡΥΦΟ$&#40;ΑΥΤΟ$,"ΑΛΦΑ",1&#41;
Κ=ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ%&#40;ΤΙ$&#41;
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
ΑΝ Κ=0 ΤΟΤΕ &#123;
ΤΕΛΙΚΟ$=ΑΥΤΟ$+ΝΓ$+ΠΙΟ$+ΝΓ$
&#125; ΑΛΛΙΩΣ &#123;
ΠΙΝΑΚΑΣ Α$&#40;Κ&#41;
Ι=0
Λ=0
&#123;
ΑΝ ΤΙ$="" ΤΟΤΕ ΕΞΟΔΟΣ
Λ=ΘΕΣΗ&#40;ΤΙ$,ΝΓ$&#41;
ΑΝ Λ=0 ΤΟΤΕ Λ=ΜΗΚΟΣ&#40;ΤΙ$&#41;+1
Α$&#40;Ι&#41;=ΑΠΟΚ$&#40;ΜΕΣ$&#40;ΤΙ$,1,Λ-1&#41;&#41;
Ι=Ι+1
ΤΙ$=ΜΕΣ$&#40;ΤΙ$,Λ+2&#41;
ΚΥΚΛΙΚΑ
&#125;
ΤΕΛΙΚΟ$=""
ΕΥΡΗΚΑ=ΨΕΥΔΗΣ
ΓΙΑ Λ=Κ-1 ΕΩΣ 0 ΑΝΑ 2 &#123;
ΑΝ Α$&#40;Λ&#41;=ΠΙΟ$ ΤΟΤΕ Α$&#40;Λ-1&#41;=ΑΥΤΟ$&#58; ΕΥΡΗΚΑ=ΑΛΗΘΗΣ
ΤΕΛΙΚΟ$=Α$&#40;Λ-1&#41;+ΝΓ$+Α$&#40;Λ&#41;+ΝΓ$+ΤΕΛΙΚΟ$
&#125;
ΑΝ ΔΕΝ ΕΥΡΗΚΑ ΤΟΤΕ ΤΕΛΙΚΟ$=ΤΕΛΙΚΟ$+ΑΥΤΟ$+ΝΓ$+ΠΙΟ$+ΝΓ$
&#125;
=ΤΕΛΙΚΟ$
&#125;
ΣΥΝΑΡΤΗΣΗ ΤΕΜΑΧΙΑ% &#123;
Κ=ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ%&#40;&#41;
=Κ/2
&#125;
ΣΥΝΑΡΤΗΣΗ ΜΟΙΡΑΣΕ.ΠΑΚΕΤΟ% &#123;
ΔΙΑΒΑΣΕ ΤΙ$, ΑΡΧ%, ΤΕΛ%
Κ=ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ%&#40;ΤΙ$&#41;

ΑΝ ΑΡΧ%>ΤΕΛ% ΤΟΤΕ =0 &#58; ΕΞΟΔΟΣ
ΑΡΧ%=ΑΡΧ%*2
ΤΕΛ%=ΤΕΛ%*2
ΑΝ ΤΕΛ%>Κ ΤΟΤΕ ΤΕΛ%=Κ
ΑΝ ΑΡΧ%>Κ ΤΟΤΕ =0 &#58; ΕΞΟΔΟΣ
ΑΡΧ%=ΑΡΧ%-1
ΤΕΛ%=ΤΕΛ%-1
ΑΝ Κ=0 ΤΟΤΕ ΕΞΟΔΟΣ
ΠΙΝΑΚΑΣ Α$&#40;Κ&#41;
Ι=0
Λ=0
ΝΓ$=ΧΑΡ$&#40;13&#41;+ΧΑΡ$&#40;10&#41;
&#123;
ΑΝ ΤΙ$="" ΤΟΤΕ ΕΞΟΔΟΣ
Λ=ΘΕΣΗ&#40;ΤΙ$,ΝΓ$&#41;
ΑΝ Λ=0 ΤΟΤΕ Λ=ΜΗΚΟΣ&#40;ΤΙ$&#41;+1
Α$&#40;Ι&#41;=ΑΠΟΚ$&#40;ΜΕΣ$&#40;ΤΙ$,1,Λ-1&#41;&#41;
Ι=Ι+1
ΤΙ$=ΜΕΣ$&#40;ΤΙ$,Λ+2&#41;
ΚΥΚΛΙΚΑ
&#125;
ΓΙΑ Λ=ΤΕΛ% ΕΩΣ ΑΡΧ% ΑΝΑ 2 &#123;
ΒΑΛΕ ΦΑΝΕΡΟ$&#40;Α$&#40;Λ-1&#41;,"ΑΛΦΑ",1&#41;,Α$&#40;Λ&#41;
&#125;
=&#40;ΤΕΛ%-ΑΡΧ%&#41;/2+1
&#125;


Παρακάτω είναι ένα παράδειγμα (βάζουμε τους ορισμούς μαζί με το παράδειγμα σε ένα text αρχείο και το μετονομάζουμε σε gsb και το τρέχουμε με διπλό κλικ, ή ανοίγουμε τον διορθωτή george (το IDE της Μ2000) το αντιγράφουμε και το τρέχουμε με F4

Κώδικας: Επιλογή όλων

Τμημα ΠΑΡΑΔΕΙΓΜΑ.ΔΕΝΔΡΟΥ &#123;
Αναψε
ΤΥΠΩΣΕ"......"
ΠΑΚΕΤΟ$=""
ΠΑΚΕΤΟ$=ΣΤΟ.ΠΑΚΕΤΟ$&#40;ΠΑΚΕΤΟ$,"ΑΛΦΑ","115"&#41;
ΑΛΛΑΞΕ "ΓΙΩΡΓΟΣ.ΟΙΚΟΓΕΝΕΙΑ.1","ΑΛΕΞΑΝΔΡΟΣ", ΠΑΚΕΤΟ$
' Το τμήμα ΑΛΛΑΞΕ αφήνει στο σωρό την τιμή του νέου Πακέτου.
' οπότε η επόμενη ΑΛΛΑΞΕ που ζητάει τρεις παραμέτρους
' από το σωρό θα βρεί την τρίτη εκεί
ΑΛΛΑΞΕ "ΓΙΩΡΓΟΣ.ΟΙΚΟΓΕΝΕΙΑ.2","ΣΟΦΙΑ"
ΑΛΛΑΞΕ "ΓΙΩΡΓΟΣ.ΟΙΚΟΓΕΝΕΙΑ.3","ΦΩΤΕΙΝΗ"
ΑΛΛΑΞΕ "ΓΙΩΡΓΟΣ.ΟΙΚΙΑ.ΠΟΛΗ","ΠΡΕΒΕΖΑ"
ΑΛΛΑΞΕ "ΓΙΩΡΓΟΣ.ΑΥΤΟΚΙΝΗΤΟ.ΤΥΠΟΣ","ΣΚΟΝΤΑ"
ΑΛΛΑΞΕ "ΓΙΩΡΓΟΣ.ΟΙΚΙΑ.ΟΔΟΣ","ΜΑΝΟΠΟΥΛΟΥ 23"
ΑΛΛΑΞΕ "ΓΙΩΡΓΟΣ.ΟΙΚΙΑ.ΟΡΟΦΟΣ","ΤΡΙΤΟΣ"
ΑΛΛΑΞΕ "ΓΙΩΡΓΟΣ.ΟΙΚΙΑ.ΤΚ","48100"
' η ΑΛΛΑΞΕ αν δεν βρει την εγγραφή την προσθέτει!
ΑΛΛΑΞΕ "ΠΕΤΡΟΣ","12345"
ΑΛΛΑΞΕ "ΜΗΤΣΟΣ","05"
ΔΙΑΒΑΣΕ ΠΑΚΕΤΟ$
Ν=ΔΕΝΔΡΟ&#40;ΠΑΚΕΤΟ$,"ΑΡΧΗ"&#41;
ΚΛΕΙΔΙ$="ΓΙΩΡΓΟΣ.ΟΙΚΙΑ."
Κ$=Α.ΚΛΕΙΔΙΟΥ$&#40;ΠΑΚΕΤΟ$,"",ΚΛΕΙΔΙ$&#41;
ΤΥΠΩΣΕ "ΑΝΑΖΗΤΗΣΗ ΓΙΩΡΓΟΣ.ΟΙΚΙΑ.", ΓΡΑΜΜΕΣ%&#40;Κ$&#41;
Κ=ΜΟΙΡΑΣΕ.ΧΩΡΙΣ.ΚΕΝΑ%&#40;Κ$&#41;
ΠΙΝΑΚΑΣ Ε$&#40;Κ+1&#41;
ΕΠΙΛΟΓΗ
ΓΙΑ Ι=1 ΕΩΣ Κ &#123;ΔΙΑΒΑΣΕ Ε$&#40;Ι&#41;&#58; ΕΠΙΛΟΓΗ + ΑΛΛΑΓΗ$&#40;ΚΛΕΙΔΙ$,"",Ε$&#40;Ι&#41;&#41;&#125;
ΕΠΙΛΟΓΗ !
ΑΝ ΕΠΙΛΟΓΗ>0 ΤΟΤΕ ΤΥΠΩΣΕ ΕΥΡΕΣΗ$&#40;ΠΑΚΕΤΟ$,Ε$&#40;ΕΠΙΛΟΓΗ&#41;&#41;
Α$=ΚΟΜ$
ΟΘΟΝΗ
ΓΙΑ Ι=1 ΕΩΣ 4 &#123;
ΤΥΠΩΣΕ "ΕΠΙΛΟΓΗ"
ΜΟΝΟΠΑΤΙ$=""
ΜΙΚΡΟ.ΠΑΚΕΤΟ$=ΠΑΚΕΤΟ$
Α$=ΕΠΙΛΟΓΗ.ΑΠΟ.ΠΑΚΕΤΟ$&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$&#41;
&#123;
ΑΝ Α$="" ΤΟΤΕ ΕΞΟΔΟΣ
ΤΥΠΩΣΕ "Η ΕΠΙΛΟΓΗ ΣΟΥ&#58;";Α$
ΕΠΙΛΟΓΗ "ΣΒΗΝΩ", "ΔΕΙΧΝΩ"
ΑΝ ΕΠΙΛΟΓΗ=1 ΤΟΤΕ &#123; 
ΑΝ ΜΟΝΟΠΑΤΙ$="" ΤΟΤΕ &#123;
ΚΛΑΔΕΨΕ ΠΑΚΕΤΟ$, Α$ &#58; ΔΙΑΒΑΣΕ ΠΑΚΕΤΟ$
&#125; ΑΛΛΙΩΣ &#123;
ΚΛΑΔΕΨΕ ΜΙΚΡΟ.ΠΑΚΕΤΟ$, Α$ &#58; ΔΙΑΒΑΣΕ ΜΙΚΡΟ.ΠΑΚΕΤΟ$
ΑΛΛΑΞΕ ΜΟΝΟΠΑΤΙ$,ΜΙΚΡΟ.ΠΑΚΕΤΟ$ ,ΠΑΚΕΤΟ$&#58; ΔΙΑΒΑΣΕ ΠΑΚΕΤΟ$ 
&#125;
Α$=""
&#125;
ΑΝ Α$="" ΤΟΤΕ ΕΞΟΔΟΣ
ΑΝ ΜΟΝΟΠΑΤΙ$="" ΤΟΤΕ &#123; ΜΟΝΟΠΑΤΙ$=Α$ &#125; ΑΛΛΙΩΣ ΜΟΝΟΠΑΤΙ$=ΜΟΝΟΠΑΤΙ$+"."+Α$
ΤΥΠΩΣΕ "ΜΟΝΟΠΑΤΙ&#58;";ΜΟΝΟΠΑΤΙ$
ΜΙΚΡΟ.ΠΑΚΕΤΟ$=ΑΠΟ.ΠΑΚΕΤΟ$&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$, Α$&#41;
ΑΝ ΤΕΜΑΧΙΑ%&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$&#41;=0 ΤΟΤΕ ΤΥΠΩΣΕ "ΔΙΝΕΙ ΑΥΤΟ&#58;";ΜΙΚΡΟ.ΠΑΚΕΤΟ$ &#58; ΕΞΟΔΟΣ
Α$=ΕΠΙΛΟΓΗ.ΑΠΟ.ΠΑΚΕΤΟ$&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$&#41;
ΚΥΚΛΙΚΑ
&#125;
&#125;
Α$=ΚΟΜ$
Χ=ΔΕΝΔΡΟ&#40;ΠΑΚΕΤΟ$,""&#41;
Α$=ΚΟΜ$
' εξαγωγή μικρού πακέτου
ΜΙΚΡΟ.ΠΑΚΕΤΟ$=ΕΥΡΕΣΗ$&#40;ΠΑΚΕΤΟ$,"ΓΙΩΡΓΟΣ.ΟΙΚΟΓΕΝΕΙΑ"&#41;
Ν=ΔΕΝΔΡΟ&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$,"ΜΙΚΡΟ"&#41;
ΤΥΠΩΣΕ ΤΕΜΑΧΙΑ%&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$&#41;
Ν=ΜΟΙΡΑΣΕ.ΠΑΚΕΤΟ%&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$,2,2&#41;
ΤΥΠΩΣΕ "ΒΡΗΚΑ ";Ν
ΕΝΩ Ν>0 &#123;
ΔΙΑΒΑΣΕ Α$, Β$
ΑΝ ΤΕΜΑΧΙΑ%&#40;Β$&#41;>0 ΤΟΤΕ &#123; ΤΥΠΩΣΕ Α$, "ΠΑΚΕΤΟ" &#125; ΑΛΛΙΩΣ ΤΥΠΩΣΕ Α$, Β$
Ν=Ν-1
&#125;
ΜΙΚΡΟ.ΠΑΚΕΤΟ$=ΕΥΡΕΣΗ$&#40;ΠΑΚΕΤΟ$,"ΓΙΩΡΓΟΣ"&#41;
Ν=ΜΟΙΡΑΣΕ.ΠΑΚΕΤΟ%&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$,2,1&#41;
ΤΥΠΩΣΕ "ΒΡΗΚΑ ";Ν
Ν=ΜΟΙΡΑΣΕ.ΠΑΚΕΤΟ%&#40;ΜΙΚΡΟ.ΠΑΚΕΤΟ$,1,1&#41;
ΤΥΠΩΣΕ "ΒΡΗΚΑ ";Ν
ΕΝΩ Ν>0 &#123;
ΔΙΑΒΑΣΕ Α$, Β$
ΑΝ ΤΕΜΑΧΙΑ%&#40;Β$&#41;>0 ΤΟΤΕ &#123; ΤΥΠΩΣΕ Α$, "ΠΑΚΕΤΟ" &#125; ΑΛΛΙΩΣ ΤΥΠΩΣΕ Α$, Β$
Ν=Ν-1
&#125;
ΑΜΕΣΟ.ΚΕΙΜΕΝΟ$ = &#123;ΠΡΩΤΗ ΓΡΑΜΜΗ
ΔΕΥΤΕΡΗ ΓΡΑΜΜΗ

ΤΡΙΤΗ ΓΡΑΜΜΗ

ΤΕΤΑΡΤΗ ΓΡΑΜΜΗ
&#125;
Ν=ΓΡΑΜΜΕΣ%&#40;ΑΜΕΣΟ.ΚΕΙΜΕΝΟ$&#41;
Μ=ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ%&#40;ΑΜΕΣΟ.ΚΕΙΜΕΝΟ$&#41;
ΤΥΠΩΣΕ "ΣΤΟ ΑΜΕΣΟ.ΚΕΙΜΕΝΟ ΥΠΑΡΧΟΥΝ&#58;";Μ-Ν;" ΚΕΝΕΣ ΓΡΑΜΜΕΣ"
ΑΜΕΣΟ.ΚΕΙΜΕΝΟ$=ΦΤΙΑΞΕ.ΚΕΙΜΕΝΟ$&#40;ΜΟΙΡΑΣΕ.ΧΩΡΙΣ.ΚΕΝΑ%&#40;ΑΜΕΣΟ.ΚΕΙΜΕΝΟ$&#41;&#41;
ΑΛΛΟ.ΚΕΙΜΕΝΟ$=ΦΤΙΑΞΕ.ΚΕΙΜΕΝΟ$&#40;3,"ΑΑΑ","ΒΒΒ","ΓΓΓ"&#41;
ΤΥΠΩΣΕ "ΕΦΤΙΑΞΑ ΑΛΛΟ.ΚΕΙΜΕΝΟ ΜΕ ";ΓΡΑΜΜΕΣ%&#40;ΑΛΛΟ.ΚΕΙΜΕΝΟ$&#41;;" ΓΡΑΜΜΕΣ"
' Ετοιμασία κειμένου για να μπει σε πακέτο χωρίς να γίνει πακέτο!
ΑΛΛΟ.ΚΕΙΜΕΝΟ$=ΔΙΠΛΩΣΕ.ΚΕΙΜΕΝΟ$&#40;ΑΛΛΟ.ΚΕΙΜΕΝΟ$&#41;
ΑΛΛΑΞΕ "ΝΕΟ.ΕΔΩ.ΕΚΕΙ", ΑΛΛΟ.ΚΕΙΜΕΝΟ$ , ΠΑΚΕΤΟ$
' Υποχρεωτικά πρέπει να ανανεώσουμε το πακέτο με τη διάβασε
ΔΙΑΒΑΣΕ ΠΑΚΕΤΟ$
ΤΥΠΩΣΕ "ΤΟ ΚΑΤΑΧΩΡΗΣΑ ΣΤΟ ΝΕΟ.ΕΔΩ.ΕΚΕΙ"
' Ανάκτηση κειμένου
Α$=ΕΥΡΕΣΗ$&#40;ΠΑΚΕΤΟ$,"ΝΕΟ.ΕΔΩ.ΕΚΕΙ"&#41;
ΑΝ ΕΙΝΑΙ.ΚΕΙΜΕΝΟ&#40;Α$&#41; ΤΟΤΕ &#123;
Α$=ΞΕΔΙΠΛΩΣΕ.ΚΕΙΜΕΝΟ$&#40;Α$&#41;
ΤΥΠΩΣΕ "ΒΡΗΚΑ ΚΕΙΜΕΝΟ ΜΕ ";ΓΡΑΜΜΕΣ.ΜΕ.ΚΕΝΑ%&#40;Α$&#41;;" ΓΡΑΜΜΕΣ"
&#125;
Τυπωσε"ΟΚ"&#58;α$=κομ$
&#125;
ΠΑΡΑΔΕΙΓΜΑ.ΔΕΝΔΡΟΥ&#58; ΤΕΛΟΣ
Μια μικρή εξήγηση του τρόπου που τρέχει ένα πρόγραμμα η Μ2000:
Όταν κάνουμε διπλό κλικ σε ένα αρχείο gsb, ένα αρχείο txt με κατάληξη gsb, τρέχει το πρόγραμμα. Στην ουσία δίνουμε ένα Batch αρχείο στον μεταφραστή. Όπου δει ο μεταφραστής ΣΥΝΑΡΤΗΣΗ ή ΤΜΗΜΑ δημιουργεί τα αντίστοιχα, και όταν δει απλές εντολές τις εκτελεί. Στο παράδειγμα παραπάνω εκτελεί το τμήμα ΠΑΡΑΔΕΙΓΜΑ. ΔΕΝΔΡΟΥ και μετά το ΤΕΛΟΣ. Το τμήμα έχει φορτωθεί κατά την ανάγνωση του αρχείου πριν.


Ενδιαφέρον παρουσιάζει το τμήμα ΑΛΛΑΞΕ που δημιουργεί το δένδρο, με μονοπάτι και τιμή. Αν δώσουμε μονοπάτι με κλάδους που δεν υπάρχουν στο δένδρο, θα φτιαχνούν όλοι και θα μπει η τιμή. Αν υπάρχουν όλοι οι κλάδοι τότε θα αλλαχτεί η τιμή με την νέα! Το αποτέλεσμα του τμήματος είναι ένα νέο αλφαριθμητικό με την αλλαγή που έχουμε δώσει και βρίσκεται στο σωρό τιμών. (Η Μ2000 έχιε έναν σωρό στον οποίο δεν βάζει δείκτες σε τιμές αλλά ολόκληρες τις τιμές, αλφαριθμητικές ή αριθμητικές! Ο σωρός μπορεί να περιλαμβάνει εκατομμύρια τιμές!)

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες