Έχω να προτείνω κάτι πιο γρήγορο για μεγαλύτερους αριθμούς αλλά πρώτα θα ήθελα να πω 3 αλλαγές που πιστεύω ότι πρέπει να κάνεις ώστε να δουλεύει πιο σωστά το παραπάνω.
1) Νομίζω ότι πρέπει μετά το αρχή να δηλώνεις την μεταβλητή Β ως ψευδής ( Β <-- ψευδής ) γιατί εάν δοθεί θετικός αριθμός τότε στην γραμμή 16 λέει ότι η μεταβλητή Β είναι Μη-αρχικοποιημένη.
2) Επίσης στην γραμμή 13
πρέπει να γίνει
γιατί εάν δοθεί ακέραιος αριθμός ως Α τότε στο τέλος δίνει ότι το ακέραιο μέρος είναι ο αριθμός που δώσαμε -1 π.χ. αν δώσουμε 1 για Α τότε στο τέλος θα μας γράψει: ΑΚΕΡΑΙΟ ΜΕΡΟΣ 1 : 0
3) Τέλος καλό θα ήταν καλό να προστεθεί μετά την γραμμή 17
η γραμμή :
ώστε όταν δίνουμε αρνητικό αριθμό να μην λέει π.χ. ΑΚΕΡΑΙΟ ΜΕΡΟΣ 3 : -3 όταν δίνουμε -3.
Δηλαδή να γίνει έτσι:
(οι γραμμές που έχουν αλλάξει είναι αυτές με το ! δίπλα)
ΠΡΟΓΡΑΜΜΑ ΑΚΕΡΑΙΟ_ΜΕΡΟΣ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:Ι
ΠΡΑΓΜΑΤΙΚΕΣ:Α
ΛΟΓΙΚΕΣ: Β
ΑΡΧΗ
Β <-- ΨΕΥΔΗΣ !
ΔΙΑΒΑΣΕ Α
ΑΝ Α<0 ΤΟΤΕ
Α <-- -Α
Β <-- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
Ι <-- 0
ΟΣΟ (Α-Ι>=1) ΕΠΑΝΑΛΑΒΕ !
Ι <-- Ι+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ Β = ΑΛΗΘΗΣ ΤΟΤΕ
Ι <-- -Ι
Α <-- -Α !
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ 'ΑΚΕΡΑΙΟ ΜΕΡΟΣ',Α,' :',Ι
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΑΚΕΡΑΙΟ_ΜΕΡΟΣ
Όσο για κάποιο πιο γρήγορο τρόπο έχω να προτείνω το παρακάτω. Νομίζω ότι είναι πιο γρήγορο για μεγάλους αριθμούς (ή πολύ μικρούς όταν αυτοί είναι αρνητικοί). Κάθε σχόλιο και διόρθωση ευπρόσδεκτη.
ΠΡΟΓΡΑΜΜΑ ΑΚΕΡΑΙΟ_ΜΕΡΟΣ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Α
ΑΚΕΡΑΙΕΣ: Ι1, Ι2, Τ
ΛΟΓΙΚΕΣ: Β
ΑΡΧΗ
ΔΙΑΒΑΣΕ Α
Β <-- ΨΕΥΔΗΣ
ΑΝ Α<0 ΤΟΤΕ
Α <-- -Α
Β <-- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
Ι1 <-- 0
Ι2 <-- 1
Τ <-- 1
ΟΣΟ ΟΧΙ(Ι1=Ι2-1 ΚΑΙ Ι1 <= Α ΚΑΙ Ι2 > Α) ΕΠΑΝΑΛΑΒΕ
ΑΝ Ι2<Α ΤΟΤΕ
Ι1 <-- Ι2
ΑΝ Τ < Α ΤΟΤΕ
Ι2 <-- Ι2*2
ΑΛΛΙΩΣ
Ι2 <-- Τ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΑΝ Ι2>Α ΚΑΙ Ι2<>Ι1+1 ΤΟΤΕ
Τ <-- Ι2
Ι2 <-- Ι1 +(( Ι2-Ι1) DIV 2)
ΤΕΛΟΣ_ΑΝ
ΑΝ Ι2=Α ΤΟΤΕ
Ι1 <-- Ι2
Ι2 <-- Ι2 +1
ΤΕΛΟΣ_ΑΝ
ΑΝ Α=Ι1 ΤΟΤΕ
Ι2 <-- Ι1 + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ Β = ΑΛΗΘΗΣ ΤΟΤΕ
Ι1 <-- -Ι1
Α <-- -Α
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ 'ΑΚΕΡΑΙΟ ΜΕΡΟΣ',Α,' :',Ι1
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ