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

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




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

Εγγραφή: Πέμ 22 Απρ 2004 11:16 am
Δημοσιεύσεις: 60
Τοποθεσία: Θεσσαλονίκη
Για την μετατροπή ενός αριθμού από δεκαδικό σύστημα σε κάποιο άλλο σύστημα (δυαδικό, πενταδικό, δεκαεξαδικό κλπ), έχουν προταθεί αρκετοί αλγόριθμοι, ακόμη και μέσα στο συγκεκριμένο forum. Ο πρώτος αλγόριθμος που ακολουθεί, κάνει χρήση ενός πίνακα για να αποθηκεύσει τα ψηφία του αριθμού στο νέο σύστημα, και είναι αρκετά εκτενής (ως προς τον τρόπο παρουσίασης αποτελεσματων) προσπαθώντας να μας θυμίσει τα αυτονόητα, που συχνα για τους μαθητές μας δεν είναι !!!!
Syntax: [ Download ] [ Hide ]
!================================================================================================
! Να γραφεί ένα πρόγραμμα το οποίο να δέχεται έναν ακέραιο αριθμό Ν και μία βάση μετατροπής b,
! όπου 2<=b<=16 και να μετατρέπει τον αριθμό N σε σύστημα αρίθμησης με βάση b.
! Υπόδειξη: ο αριθμός να ελέγχεται ότι είναι ακέραιος και θετικός.
!
! (Δραστηριότητα ΔΣ4, από το σχολικό ΤΕΤΡΑΔΙΟ του ΜΑΘΗΤΗ, σελιδα 96, κεφ. 9, Πίνακες)
!================================================================================================


ΠΡΟΓΡΑΜΜΑ ΔεκαδικόΣυστημα_σε_ΑλλοΣυστημα
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:i,b,Δ,Ν,ψ,num[30]
  ΧΑΡΑΚΤΗΡΕΣ:Α[6]
  ΠΡΑΓΜΑΤΙΚΕΣ: temp
ΑΡΧΗ

  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'Δώσε ακέραιο αριθμό σε δεκαδικό σύστημα'
    ΔΙΑΒΑΣΕ temp
  ΜΕΧΡΙΣ_ΟΤΟΥ (temp>=1) ΚΑΙ (Α_Μ(temp)=temp)

  Ν <-- Α_Μ(temp)
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'Δώσε βάση μετατροπής (2:δυαδικό, 3:τριαδικό....... 16: δεδακαεξαδικό σύστημα)'
    ΔΙΑΒΑΣΕ b
  ΜΕΧΡΙΣ_ΟΤΟΥ (b>=2) ΚΑΙ (b<=16)

  Α[1] <-- 'Α'
  Α[2] <-- 'Β'                              
  Α[3] <-- 'C'
  Α[4] <-- 'D'
  Α[5] <-- 'E'
  Α[6] <-- 'F'

  i <-- 1
  ΟΣΟ Ν>=(b^i) ΕΠΑΝΑΛΑΒΕ
    i <-- i+1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  Δ <-- i-1

  ΓΡΑΨΕ Α_Μ(b^Δ),'<=',Ν,'<=',Α_Μ(b^i)

  ΓΡΑΨΕ
  ΓΙΑ i ΑΠΟ Δ ΜΕΧΡΙ 0 ΜΕ ΒΗΜΑ -1
    ψ <-- Ν DIV Α_Μ(b^i)
    ΑΝ ψ<10 ΤΟΤΕ
      ΑΝ ψ=1 ΤΟΤΕ
        ΓΡΑΨΕ ψ,' ',Α_Μ(b^i),'αδα'
      ΑΛΛΙΩΣ
        ΓΡΑΨΕ ψ,' ',Α_Μ(b^i),'αδες'
      ΤΕΛΟΣ_ΑΝ
      num[i+1] <-- ψ
    ΑΛΛΙΩΣ
      ΓΡΑΨΕ Α[ψ-9],' ',Α_Μ(b^i),'αδες'
    ΤΕΛΟΣ_ΑΝ
    Ν <-- Ν MOD Α_Μ(b^i)
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


  ΑΝ b<=10 ΤΟΤΕ
    ΓΡΑΨΕ
    ΓΡΑΨΕ_ 'ο αριθμός ',Α_Μ(temp), ' στο ',b, 'αδικό σύστημα γράφεται : '
    ΓΙΑ i ΑΠΟ Δ+1  ΜΕΧΡΙ 1 ΜΕ ΒΗΜΑ -1
      ΓΡΑΨΕ_ num[i]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΑΝ

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


Δυστυχώς όμως ο πίνακας num περιορίζει τις δυνατότητες του προγράμματος, αφού ενας αριθμός στο δεκαδικό σύστημα απαιτεί πολλάπλασια ψηφία για να παρασταθεί πχ στο δυαδικό σύστημα. Ο παρακάτω αλγόριθμος είναι λιγοτερος παραστατικός (όσον αφορά τον τρόπο παρουσίασης) και δεν περιορίζεται από το μέγεθος των ψηφίων που απαιτούνται, αφού δεν χρησιμοποιεί πίνακα για να αποθηκεύει τα ψηφια.
Syntax: [ Download ] [ Hide ]
ΠΡΟΓΡΑΜΜΑ ΔεκαδικόΣυστημα_σε_ΑλλοΣυστημα
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:i,b,Δ,Ν,ψ
  ΧΑΡΑΚΤΗΡΕΣ:Α[6]
  ΠΡΑΓΜΑΤΙΚΕΣ: temp
ΑΡΧΗ

  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'Δώσε ακέραιο αριθμό σε δεκαδικό σύστημα'
    ΔΙΑΒΑΣΕ temp
  ΜΕΧΡΙΣ_ΟΤΟΥ (temp>=1) ΚΑΙ (Α_Μ(temp)=temp)

  Ν <-- Α_Μ(temp)
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'Δώσε βάση μετατροπής (2:δυαδικό, 3:τριαδικό....... 16: δεδακαεξαδικό σύστημα)'
    ΔΙΑΒΑΣΕ b
  ΜΕΧΡΙΣ_ΟΤΟΥ (b>=2) ΚΑΙ (b<=16)

  Α[1] <-- 'Α'
  Α[2] <-- 'Β'                                
  Α[3] <-- 'C'
  Α[4] <-- 'D'
  Α[5] <-- 'E'
  Α[6] <-- 'F'

  i <-- 1
  ΟΣΟ Ν>=(b^i) ΕΠΑΝΑΛΑΒΕ
    i <-- i+1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  Δ <-- i-1
  ΓΡΑΨΕ
  ΓΡΑΨΕ 'ο αριθμός ',Α_Μ(temp), ' στο ',b, 'αδικό σύστημα γράφεται : '

  ΓΙΑ i ΑΠΟ Δ ΜΕΧΡΙ 0 ΜΕ ΒΗΜΑ -1
    ψ <-- Ν DIV Α_Μ(b^i)
    ΑΝ ψ<10 ΤΟΤΕ
      ΓΡΑΨΕ_ ψ
    ΑΛΛΙΩΣ
      ΓΡΑΨΕ_ Α[ψ-9]
    ΤΕΛΟΣ_ΑΝ
    Ν <-- Ν MOD Α_Μ(b^i)
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

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




 


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

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


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

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


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

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