Αριστερή στοίχιση κειμένου

Έστω, ότι μας δίνεται κείμενο το οποίο βρίσκεται αποθηκευμένο σε έναν πίνακα 32 θέσεων. Κάθε θέση του πίνακα έχει έναν χαρακτήρα από το κείμενο. Για παράδειγμα η φράση «ΕΝΑ ΒΗΜΑ ΑΡΚΕΙ ΝΑ ΦΕΡΕΙ ΝΕΑ ΟΡΙΑ» αναπαρίσταται ως ακολούθως:

ΕΝΑΒΗΜΑΑΡΚΕΙΝΑΦΕΡΕΙΝΕΑΟΡΙΑ

Σκοπός της άσκησης είναι, η δημιουργία αλγορίθμου που με δεδομένο το κείμενο του πίνακα θα το μεταφέρει σε ένα νέο, δισδιάστατο 5 γραμμών και 8 στηλών. Όταν μία λέξη δεν χωράει στην τρέχουσα γραμμή του πίνακα τότε αυτή θα πρέπει να κατεβαίνει στην επόμενη γραμμή ολόκληρη, δεν θα πρέπει δηλαδή να κόβεται στην μέση. Υποθέστε πως δεν θα υπάρχει λέξη με περισσότερους από 8 χαρακτήρες και ούτε θα χρειαστείτε περισσότερες από 5 γραμμές. Επίσης η αλλαγή γραμμής λειτουργεί ως κενό, δηλαδή μεταξύ 2 λέξεων που χωρίζονται με γραμμές δεν χρειάζεται να υπάρχει κενό.
Δείτε το παραγόμενο αποτέλεσμα για την παραπάνω έκφραση:

ΕΝΑΒΗΜΑ
ΑΡΚΕΙΝΑ
ΦΕΡΕΙ
ΝΕΑΟΡΙΑ
Αλγόριθμος κείμενο
   Δεδομένα // ΠΡΟΤΑΣΗ //
   ! πριν την επανάληψη αρχικοποιούνται 3 μεταβλητές
   ! από ποια θέση του μονοδιάστατου πίνακα θα αντιγράψουμε
   χαρακτήρας_προς_αντιγραφή <- 1
   ! σε ποια θέση του δισδιάστατου πίνακα θα μεταφέρουμε τον χαρακτήρα
   θέση_χαρακτήρα <- 1
   γραμμή_χαρακτήρα <- 1
 
   Όσο χαρακτήρας_προς_αντιγραφή <= 32 επανάλαβε
      ! αν η θέση του πίνακα δεν περιέχει κενό, τότε απλά αντέγραψε το περιεχόμενο στον νέο πίνακα
      Αν ΠΡΟΤΑΣΗ[χαρακτήρας_προς_αντιγραφή] <> " " τότε
         ΣΤΟΙΧΗΣΜΕΝΗ_ΠΡΟΤΑΣΗ[γραμμή_χαρακτήρα, θέση_χαρακτήρα] <- ΠΡΟΤΑΣΗ[χαρακτήρας_προς_αντιγραφή]
         θέση_χαρακτήρα <- θέση_χαρακτήρα + 1
 
      Αλλιώς
         ! ο τρέχων χαρακτήρας είναι το κενό
         ! βρες τη θέση του επόμενου κενού ώστε να βρούμε το μήκος της επόμενης λέξης
         βρέθηκε <- ΨΕΥΔΗΣ
         i <- χαρακτήρας_προς_αντιγραφή + 1
         Όσο i <= 32 ΚΑΙ βρέθηκε = ΨΕΥΔΗΣ επανάλαβε
            Αν ΠΡΟΤΑΣΗ[i] = " " τότε
               βρέθηκε <- ΑΛΗΘΗΣ
               θέση_που_βρέθηκε <- i
            Τέλος_αν
            i <- i + 1
         Τέλος_επανάληψης
         Αν βρέθηκε = ΑΛΗΘΗΣ τότε
            μήκος_επόμενης_λέξης <- (θέση_που_βρέθηκε - 1) - χαρακτήρας_προς_αντιγραφή
         Αλλιώς
            ! δεν βρέθηκε άλλο κενό, συνεπώς θεώρησε πως η τελευταία λέξη εκτείνεται μέχρι το τέλος
            μήκος_επόμενης_λέξης <- 32 - χαρακτήρας_προς_αντιγραφή
         Τέλος_αν
         Αν χαρακτήρας_προς_αντιγραφή + μήκος_επόμενης_λέξης <= 8 τότε
            ! η λέξη χωράει στην τρέχουσα γραμμή
            ΣΤΟΙΧΗΣΜΕΝΗ_ΠΡΟΤΑΣΗ[γραμμή_χαρακτήρα, θέση_χαρακτήρα] <- " "
            θέση_χαρακτήρα <- θέση_χαρακτήρα + 1
         Αλλιώς
            ! γέμισε ό,τι απομένει με κενά 
            Για i από θέση_χαρακτήρα μέχρι 8
               ΣΤΟΙΧΗΣΜΕΝΗ_ΠΡΟΤΑΣΗ[γραμμή_χαρακτήρα, i] <- " "
            Τέλος_επανάληψης
            ! και άλλαξε γραμμή
            γραμμή_χαρακτήρα <- γραμμή_χαρακτήρα + 1
            θέση_χαρακτήρα <- 1
         Τέλος_αν
      Τέλος_αν
 
      ! εξέτασε τον επόμενο χαρακτήρα
      χαρακτήρας_προς_αντιγραφή <- χαρακτήρας_προς_αντιγραφή + 1
   Τέλος_επανάληψης
Τέλος κείμενο

1 σχόλιο για το άρθρο “Αριστερή στοίχιση κειμένου

  • 07/04/2014 at 14:04
    Permalink

    Πολύ καλή άσκηση, συγχαρητήρια στους δημιουργούς!

Αφήστε μια απάντηση

Η ηλ. διεύθυνσή σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *