Τώρα είναι Πέμ 28 Μαρ 2024 08:47 pm

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]




Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 1 Δημοσίευση ] 
Συγγραφέας Μήνυμα
ΔημοσίευσηΔημοσιεύτηκε: Τετ 19 Μάιος 2004 12:16 pm 
Χωρίς σύνδεση

Εγγραφή: Πέμ 22 Απρ 2004 11:16 am
Δημοσιεύσεις: 60
Τοποθεσία: Θεσσαλονίκη
Syntax: [ Download ] [ Hide ]
!===================================================================================================================================
! Στον αλγόριθμο συμπίεσης RLE ελέγχεται μια ακολουθία χαρακτήρων και οι συνεχόμενες επαναλήψεις ενός χαρακτήρα
! αντικαθίστανται με το πλήθος τους ακολουθούμενο από το χαρακτήρα.
! Για παράδειγμα η πρόταση "βββββεεεεααα  φφφφαααα" (22 χαρακτήρες) θα συμπιεστεί ως "5β4ε3α2 4φ4α"(12 χαρακτήρες)
! στην οποία πετυχαίνουμε συμπίεση 45.4%. Να αναπτύξετε πρόγραμμα το οποίο:
! α)θα δημιουργεί ένα μονοδιάστατο πίνακα 40 χαρακτήρων. (είτε διαβάζεται, είτε τον δημιουργείτε με δικά σας κριτήρια)
! β)θα προσδιορίζει και θα εμφανίζει τη συμπίεση κατά τον αλγόριθμο RLE. (νέος συμπιεσμένος πίνακας)
! γ)αν η συμπίεση είναι μεγαλύτερη του 50% θα εμφανίζει το μήνυμα "Πολύ καλή συμπίεση", όπως και το ποσοστό συμπίεσης που επιτεύχθηκε.
!===================================================================================================================================

ΠΡΟΓΡΑΜΜΑ Συμπίεση_RLE
ΣΤΑΘΕΡΕΣ
  Ν=40
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i,ιδια,διαφ,ΤΠ1[Ν]
  ΧΑΡΑΚΤΗΡΕΣ:Π[Ν],ΤΠ2[Ν]
  ΛΟΓΙΚΕΣ:όμοιο
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν   !δημιουργία αρχικού πίνακα
    ΑΝ i<=9 ΤΟΤΕ
      Π[i] <-- 'a'                  ! ------ Εναλλακτικός τρόπος -----
    ΑΛΛΙΩΣ_ΑΝ i<=17 ΤΟΤΕ            ! ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
      Π[i] <-- 'b'                  !    ΓΡΑΨΕ 'Δώσε ',i,'o χαρακτήρα'
    ΑΛΛΙΩΣ_ΑΝ i<=21 ΤΟΤΕ            !    ΔΙΑΒΑΣΕ Π[i]
      Π[i] <-- 'κ'                  ! ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΛΛΙΩΣ_ΑΝ i<=32 ΤΟΤΕ            ! --------------------------------
      Π[i] <-- 'y'
    ΑΛΛΙΩΣ
      Π[i] <-- 'd'
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  διαφ <-- 0                 ! πληθος συνολικών διαφορετικών χαρακτήρων
  ιδια <-- 1                 ! πλήθος όμοιων συνεχόμενων χαρακτήρων
  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν
    όμοιο <-- ψευδής
    ΑΝ Π[i-1]=Π[i] ΤΟΤΕ      ! έλεγχος ομοιότητας ακολουθίας χαρακτήρων
      ιδια <-- ιδια+1        ! αν πχ το Π[1]=Π[2], αυξάνουμε το πλήθος των ομοιων συνεχόμεων χαρακτήρων κατά 1
      όμοιο <-- αληθής
    ΑΛΛΙΩΣ
      διαφ <-- διαφ+1        ! αλλίως έχουμε ακόμη ένα διαφορετικό
    ΤΕΛΟΣ_ΑΝ
                !Θα μπορούσαμε ισοδύναμα να ελέξουμε ως εξής: ΑΝ Π[i-1]<>Π[i] ΤΟΤΕ... και να είναι περιττή η λογική μεταβλητή όμοιο
    ΑΝ ΟΧΙ όμοιο ΤΟΤΕ        ! αν δεν έχουμε όμοιο
      ΤΠ1[διαφ] <-- ιδια     ! καταχωρούμε το πληθος των προηγούμενων όμοιων σε ένα μονοδιαστατο πίνακα ακεραίων ΤΠ1
      ΤΠ2[διαφ] <-- Π[i-1]   ! και τον προηγούμενο χαράκτηρα σε ένα δευτερο μονοδιαστάτο χαρακτήρα
      ιδια <-- 1             ! ο μετρητής των επόμενων όμοιων πρέπει να επανακινήσει από 1
    ΤΕΛΟΣ_ΑΝ

    ΑΝ i=Ν ΤΟΤΕ              ! δυστυχώς κάποια στιγμή θα φτάσουμε στο Ν-οστο χαρακτήρα και καθώς δεν θα υπάρχει Ν+1 χαρακτήρας
      διαφ <-- διαφ+1        ! πρέπει μονοι μας να δηλώσουμε ότι είναι διαφορετικός !!!!
      ΤΠ1[διαφ] <-- ιδια
      ΤΠ2[διαφ] <-- Π[i]
    ΤΕΛΟΣ_ΑΝ
               !ενδιαφέρον παρουσίαζει να απεργοποιήσει κανείς το συγκεκριμένο έλεγχο "Αν" και να παρατηρήσει τα αποτελέσματα του!
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΡΑΨΕ 'Ο αρχικός πίνακας είναι ο:'       ! παρουσίαση του αρχικού ασυμπίεστου πίνακα
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΓΡΑΨΕ_ Π[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ

  ΓΡΑΨΕ
  ΓΡΑΨΕ 'Ο τελικός πίνακας είναι ο:'       ! παρουσίαση του τελικού συμπιεσμένου πίνακα
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ διαφ
    ΓΡΑΨΕ_ ΤΠ1[i],ΤΠ2[i]                   ! o οποίος θα είναι η σύνθεση των πινάκων ΤΠ1 και ΤΠ2
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΡΑΨΕ      ! παρουσίαση ποσοστού σύμπιεσης
  ΓΡΑΨΕ      ! Η ποσότητα 2*διαφ εκφράζει το συμπίεσμένο μέγεθος: θεωρούμε πως πχ η ποσότητα "17b3α" έχει μέγεθος 4 και όχι 5
  ΑΝ 2*διαφ<50/100*Ν ΤΟΤΕ
    ΓΡΑΨΕ 'πολύ καλή συμπίεση ', (Ν-2*διαφ)/Ν*100,' %'
  ΤΕΛΟΣ_ΑΝ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

 


Είναι φανερό πως αν το μέγιστο πλήθος των χαρακτήρων Ν, δεν είναι εκ των προτέρων γνωστό, δεν μπορούν να χρησιμοποιηθούν οι πίνακες Π, ΤΠ1 και ΤΠ2, αλλα θα πρέπει να εμφανίζουμε τη συμπίεση κάθε χαράκτήρα, πχ αααα >> 4α, κατά τη διάρκεια εισαγωγής και ελέγχου του αρχικού ασυμπίεστου πίνακα, αφού διαβάσουμε το πλήθος τους Ν και τον πρώτο χαρακτήρα έξω από την επαναληπτική διαδικασια ΓΙΑ i AΠO 2 ΜΕΧΡΙ Ν...


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
Τελευταίες δημοσιεύσεις:  Ταξινόμηση ανά  
Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 1 Δημοσίευση ] 

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]


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

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


Δεν μπορείτε να δημοσιεύετε νέα θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να απαντάτε σε θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επεξεργάζεστε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να διαγράφετε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επισυνάπτετε αρχεία σε αυτή τη Δ. Συζήτηση

Αναζήτηση για:
Μετάβαση σε:  
Προβολές: