Πέμπτη, 19 Νοεμβρίου 2015

Ταξινόμηση εγγράφου και αριθμός παραγράφου (Μ200)

Αυτό το θέμα είναι κάπως δύσκολο! Και αυτό γιατί αναφέρεται σε μια διπλή συνδεδεμένη λίστα, που συνδέει παραγράφους και λέγεται έγγραφο στη Μ2000.
Κάθε παράγραφος λαμβάνει έναν αριθμό παραγράφου ως μοναδικό αριθμό. Στην αρχή οι αριθμοί συμπίπτουν με τον αριθμό σειράς εμφάνισης. Αν έχουμε τρεις παραγράφους στο έγγραφο, τότε πάντα η πρώτη παράγραφος θα θεωρείται η πρώτη στη σειρά εμφάνισης. Όμως αν μιλάμε για αριθμό παραγράφου τότε αυτός δεν έχει να κάνει με τη σειρά αλλά με την θέση της παραγράφου κάπου στη μνήμη. Δεν μπορούμε να αλλάξουμε τον αριθμό παραγράφου, ενώ την σειρά έμφάνισης μπορούμε να την αλλάξουμε αν για παράδειγμα διαγράψουμε ιις προηγούμενες παραγράφους, η αν βάλουμε πίσω από αυτην που μας ενδιαφέρει άλλες παραγράφους.

Το  έγγραφο χρησιμοποιεί και ο διορθωτής τμημάτων και συναρτήσεων της Μ2000. Με τα πλήκτρα F6, F7, F8 βάζουμε "σελιδοδείκτη", στην ουσία καταχωρούμε χωρίς να βλέπουμε τον αριθμό παραγράφου. Οπότε αν σβήσουμε κάποια παράγραφο πριν ή αν βάλουμε μερικές, ο σελίδοδείκτης δεν θα χάσει το στόχο του, αφού θα δείχνει πάντα στη παράγραφο που έχουμε δείξει.

Στο πρόγραμμα παρακάτω έχουμε αρκετά κομάτια που  κάτι θέλουν να δείξουν. Το εκτελούμε και πατάμε ένα πλήκτρο κάθε φορά για να δούμε το επόμενο.

Αρχικά θα φτιάξουμε ένα έγγραφο, θα βγάλουμε ένα αντίγραφο, θα κάνουμε μερικές ταξινομήσεις.
Μετά θα διατρέξουμε το έγγραφο με χρήση δείκτη (αριθμό παραγράφου), και με χρήση αύξοντα αριθμού. Η ίδια συνάρτηση που δίνει μια παράγραφο, μπορεί να δώσει μια για αύξοντα αριθμό ή με έναν τρόπο που δείχνουμε με τον δείκτη. Και ενώ η χρήση του αύξοντα αριθμού φαίνεται και είναι απλή, η χρήση του δείκτη απαιτεί μια γνώση επί του θέματος. Η συγκεκριμένη συνάρτηση Παράγραφος$() όταν ψάχνει για κάποιον αριθμό σειράς εμφάνισης διατρέχει κάποιο άκρο για να το βρεί, ενώ όταν δώσουμε το δείκτη ξέρει επ ακριβώς που είναι και μπορεί να αλλάξει το δείκτη στο επόμενο βάσει της φοράς που θα ορίσουμε με μια από τις Μπροστά() και Πίσω().

Τεχνικά τώρα το πρόγραμμα χρησιμοποιεί χρωματισμό στην εμφάνιση στην οθόνη, τόσο στα γράμματα όσο και στο φόντο. Αντί να βάλω μια ρουτίνα να "κρύψω" την όλη αυτή επεξεργασία προτίμησα να φαίνεται. Υπάρχουν μάλιστα και επεξηγήσεις. Όταν αντιγραφεί στο διορθωτή της Μ2000 θα χρωματιστεί αυτόματα! (με την αναθεώρηση 94 έχουμε εξαγωγή σε Html με αντιγραφή)

Φορμα 60,32
Οθόνη 5, 0
\* Ταξινόμηση εντός περιβάλλοντος  *\
\\ Δηλαδή τα στοιχεία προς ταξινόμηση βρίσκονται σε μεταβλητή εντός περιβάλλοντος
\\ εδώ η μεταβλητή είναι τύπου Έγγραφο. Αυτός ο τύπος είναι πιο γενικός από το αλφαριθμητικό
\\ Εσωτερικά κρατάει σε ξεχωριστό αλφαριθμητικό κάθε παράγραφο. Δεν είναι πίνακας αλλά μια
\\ συνδεδεμένη λίστα, όπου κάθε παράγραφος είναι μια παρουσία. Έτσι η τυχόν μετακίνησή της δεν
\\ αλλάζει τον εσωτερικό αριθμό παρουσίας!
\\ Μπορούμε να αναβαθμίσουμε ένα αλφαριθμητικό σε έγγραφο, ή ένα οποιοδήποτε στοιχείο πίνακα
\\ αλφαριθμητικών σε έγγραφο αλλά όχι ένα  πίνακα σε πίνακα με έγγραφα.
\\ Όλες οι συναρτήσεις για τα αλφαριθμητικά ισχύουν και για τα έγγραφα
\\ Όμως τα έγγραφα έχουν επιπλέον μεθόδους και ιδιότητες! Είναι κατά μια έννοια αντικείμενα!
\\ Στη Μ2000 μπορούμε να δίνουμε αλφαριθμητικά με παραγράφους.
\\ Η θέση του άγγιστρου στο τέλος καθορίζει τα διαστήματα που θα αφαιρεθούν από αριστερά!
\\ Έτσι μπορούμε να έχουμε σε παραγράφους μετακίνηση δεξιά (επιλέγουμε όσες γραμμές θέλουμε και πατάμε TAB)
\\ Με Shift Και TAB, στον ενσωματωμένο διορθωτή, πάμε το κείμενο αριστερά (βγάζουμε διαστήματα).
Έγγραφο α$={One
            Two
            Three
            Four
            Five
            31
            20
            12
            }
Έγγραφο β$=α$
\\ Η εντολή Ταξινόμηση κάνει ταξινόμηση σε έγγραφα και μόνο
\\ Η εντολή Αναφορά δουλεύει για αλφαριθμητικές εκφράσεις, άρα και για έγγραφα
\\ Η Αναφορά εμφανίζει κείμενο με παραγράφους με διάφορους τρόπους στοίχισης και σε διαφορετικά πλάτη
\\ Μπορεί μάλιστα να εμφανίζει το φορμαρισμένο κείμενο από κάποια γραμμή έως κάποια γραμμή
\\ και έτσι να φτιάχνουμε στήλες κειμένου! Αλλά εδώ απλά θα μας δώσει το αποτέλεσμα!
\\ Η Αναφορά στην οθόνη δείχνει τα 3/4 των γραμμών και περιμένει διάστημα ή κλικ με το ποντίκι για να δείξει τα επόμενα
Ν=Εγγράφου.Παρ(α$) \\ θέλουμε τον αριθμό παραγράφων
Τύπωσε Πάνω ~(12,2), {Ταξινόμηση α$,1,5}
Τυπωσε
Ταξινόμηση α$,1,5 ' από το 1 έως το 5
Πένα 14 : Αναφορά α$
γ$=κομ$ \\ περιμένουμε ένα πλήκτρο
Τύπωσε Πάνω ~(12,2),{Ταξινόμηση α$,6,8}
Τύπωσε
Ταξινόμηση α$,6,8 ' από το 6 έως το 8
Πένα 14 : Αναφορά α$
γ$=κομ$ \\ περιμένουμε ένα πλήκτρο
Τύπωσε Πάνω ~(12,2),{Ταξινόμηση α$,6,8,2}
Τύπωσε
Ταξινόμηση α$,6,8,2 ' από το 6 έως το 8 αλλά από το δεύτερο χαρακτήρα
Πένα 14 : Αναφορά α$
γ$=κομ$ \\ περιμένουμε ένα πλήκτρο
Οθόνη \\ καθαρίζουμε τη οθόνη μας!
Μακρύς μΑ=0 ' χρησιμοποιούμε ένα Μακρύ
αν Μπροστά(α$, μΑ) τότε { '  η Μπροστά() γυρίζει αληθές αν δεν είναι άδειο το αλφαριθμητικό
      Ενώ μΑ>0 {
            Τύπωσε μέρος "Άυξων αριθμός παραγράφου και πραγματικός αριθμός παραγράφου ", Αριθμός.Παράγραφου(α$,μΑ), μΑ
            Τύπωσε υπο
            \\ όταν χρησιμοποιούμε την μορφή (μΑ) εδώ είναι μια ειδική περίπτωση για τη Παράγραφο$()
            \\ Δηλώνει ότι είναι η μεταβλητή "περάσματος", το (μΑ) αντιστοιχεί στο Αριθμός.Παράγραφου(α$,μΑ)
            \\ και επιπλέον στο πέρας της εκτέλεσης η μΑ θα έχει τον επόμενο πραγματικό αριθμό, ή το 0
            \\ όπου το 0 δηλώνει το τέλος της δυναμικής λίστας (συνδεμένη λίστα, Linked List, με δυο δείκτες, για μπρος και πίσω
            Αναφορά Παράγραφος$(α$, (μΑ)) '
            γ$=κομ$ \\ περιμένουμε ένα πλήκτρο            
      }
}
Οθόνη
Τύπωσε Πάνω ~(12,2),"Τώρα θα δούμε τη λίστα, να την διατρέχουμε με την Για Εως {} "
Τύπωσε Υπό
Πενα 14
Για ι=1 εως Ν {
      Αναφορά Παράγραφος$(α$, ι) ' εδώ ο αριθμός ι είναι ο αύξων
}
γ$=κομ$ \\ περιμένουμε ένα πλήκτρο
\\ Τώρα θα πάμε προς τα πίσω
Τύπωσε Πάνω ~(12,2),"Τώρα θα πάμε προς τα πίσω"
Τύπωσε Υπό
Πενα 14
Μακρύς μΑ=0 ' χρησιμοποιούμε ένα Μακρύ
αν Πίσω(α$, μΑ) τότε { '  η Πίσω() γυρίζει αληθές αν δεν είναι άδειο το αλφαριθμητικό
      Ενώ μΑ>0 {
        \\    Τύπωσε "Άυξων αριθμός παραγράφου και πραγματικός αριθμός παραγράφου ", Αριθμός.Παράγραφου(α$,μΑ), μΑ
            \\ όταν χρησιμοποιούμε την μορφή (μΑ) εδώ είναι μια ειδική περίπτωση για τη Παράγραφο$()
            \\ Δηλώνει ότι είναι η μεταβλητή "περάσματος", το (μΑ) αντιστοιχεί στο Αριθμός.Παράγραφου(α$,μΑ)
            \\ και επιπλέον στο πέρας της εκτέλεσης η μΑ θα έχει τον επόμενο πραγματικό αριθμό, ή το 0
            \\ όπου το 0 δηλώνει το τέλος της δυναμικής λίστας (συνδεμένη λίστα, Linked List, με δυο δείκτες, για μπρος και πίσω
            Αναφορά Παράγραφος$(α$, (μΑ)) '
      }
}
\\ Ενώ ο αύξων αριθμός είναι ένας υπαρκτός αριθμός για μια παράγραφο αλλά αλλάζει με την εισαγωγή η διαγραφή άλλων παραγράφων, ο πραγματικός αριθμός ακολουθεί μια παράγραφο όσο "υπάρχει", ανεξάρτητα από τη θέση που είναι.
\\ Η τελευταία παράγραφος (με το 9) είναι το κενό αλφαριθμητικό. Βλέπουμε στην ουσία 8 λέξεις και 8 αλλαγές παραγράφου
\\ άρα υπάρχουν 9 παράγραφοι με την τελευταία να είναι κενή!
γ$=κομ$ \\ περιμένουμε ένα πλήκτρο
Οθόνη
Τύπωσε Πάνω ~(12,2),"Έλεγχος"
Τύπωσε Υπό
Πενα 14
Για ι=1 εως Ν {
  Τύπωσε ι, Παράγραφος(α$, ι)
}
      Για ι=1 εως Ν {
      Πένα 11 {
      Αν ι=5 τοτε {
      Τύπωσε μερος ι,Παραγραφος$(α$,ι), ~(13),Παραγραφος$(α$,Αριθμός.Παράγραφου(α$, ι)), ~(11,4,15),Παραγραφος$(β$,Παράγραφος(β$, ι))
      } αλλιώς Τύπωσε μερος ι, Παραγραφος$(α$,ι), ~(13),Παραγραφος$(α$,Αριθμός.Παράγραφου(α$, ι)), ~(11,4),Παραγραφος$(β$,Παράγραφος(β$, ι))
        Τυπωσε
        }
      }    
      Τύπωσε μέρος "Η πρώτη παράγραφος στο α$"
      Τυπωσε υπο
      Ε$=Παράγραφος$(α$,1) \\ αντιγράφουμε τη πρώτη παράγραφο (εδώ ο αριθμός είναι ο πραγματικός)
      Πένα 10 { Αναφορα Ε$ }
      Τύπωσε μέρος "Η παράγραφος με αριθμό παραγράφου 5 στο α$"
      Τυπωσε υπο
      μοναδικός.αριθμός=5 ' το ξέρουμε εδώ - μπορεί σε ένα έγγραφο να μην δίνει παράγραφο, γιατί π.χ. την έχουμε διαγράψει.
      Αν Όχι μοναδικός.αριθμός=Παράγραφος(α$,1) τότε Λάθος "Την πάτησες"
      \\ η συνάρτηση Αριθμός.Παράγραφου() δέχεται μόνο μεταβλητές και όχι εκφράσεις.
      \\ Εδώ δεν έχει νόημα η μαθηματική έκφραση. Ο μοναδικός αριθμός αποδίδεται από το έγγραφο
      Ε$=Παράγραφος$(α$,Αριθμός.Παράγραφου(α$, μοναδικός.αριθμός))
      Πένα 10 { Αναφορα Ε$ }
      Τύπωσε μέρος "Η παράγραφος με αριθμό παραγράφου 5 στο α$, με χρήση δείκτη"
      Τυπωσε υπο
      μοναδικός.αριθμός=5 ' το ξέρουμε εδώ - μπορεί σε ένα έγγραφο να μην δίνει παράγραφο, γιατί π.χ. την έχουμε διαγράψει.
      Ε$=Παράγραφος$(α$,(μοναδικός.αριθμός))
      Πένα 10 { Αναφορα Ε$ }
      Τύπωσε μέρος μοναδικός.αριθμός, "τυπώνει 0 γιατί δεν ορίσαμε φορά!"
      Τύπωσε υπό
      μοναδικός.αριθμός=5 ' θα πάμε μπροστά χωρίς να ξέρουμε τον αύξοντα αριθμό.
      \\ Οι συναρτήσεις Μπροστά() και Πίσω() ορίζουν φορά
      \\ Όταν φθάσουμε στο άκρο τότε η φορά μηδενίζει..(δεν κάνει κύκλο).
      \\ Με την χρήση των μοναδικών αριθμών έχουμε γρηγοτότερη κίνηση
      \\ στο έγγραφο.
      \\ Αν χρησιμοποιούσαμε τον Αύξοντα αριθμό, τότε κάθε φορά θα έπεπε να διατρέξει
      \\ ο διερμηνευτής τις παραγράφους,να τις μετράει και να σταματήσει στο Α/Α που ζητάμε
      \\ ο μοναδικός αριθμός ουσιαστικά είναι δείκτης σε παράγραφο.
      \\ κάθε φορά που τον χρησιμοποιούμε στη Παράγραφος$() δείχνει την επόμενη παράγραφο ή το μηδέν
      αν Μπροστά(α$, μοναδικός.αριθμός) τότε {
            Ενώ μοναδικός.αριθμός> 0 {
                  Ε$=Παράγραφος$(α$,(μοναδικός.αριθμός))
                  Πένα 10 { Αναφορα Ε$ }
            }
      }

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

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