HARIBOT

Ξεκίνησε από landreou, 20 Ιουλ 2013, 10:53:00 ΜΜ

« προηγούμενο - επόμενο »

landreou

Γεια σας . Εχω μία άσκηση που σαν να μου φανηκε ελλειπής
Η ΕΚΦΩΝΗΣΗ
Σε διαστημικό κέντρο ερευνών, κατά τη διάρκεια των πειραμάτων για την εύρεση του αρχικού σωματιδίου της ύλης χρησιμοποιήθηκαν οι αριθμοί Haribot.
Ένας ακέραιος αριθμός ονομάζεται Haribot, όταν διαιρούμενος με κάθε έναν αριθμό από το 2 έως και το 10, αφήνει υπόλοιπο κατά 1 μονάδα μικρότερο από το διαιρέτη. Δηλαδή ένας αριθμός Haribot όταν διαιρεθεί με το 2 αφήνει υπόλοιπο 1, όταν διαιρεθεί με το 3 αφήνει υπόλοιπο 2, όταν διαιρεθεί με το 4 αφήνει υπόλοιπο 3, ..., όταν διαιρεθεί με το 10 αφήνει υπόλοιπο 9.
Α. Να υλοποιήσετε υποπρόγραμμα το οποίο θα δέχεται έναν θετικό ακέραιο και θα επιστρέφει, εάν ο αριθμός αυτός είναι αριθμός Haribot ή όχι
Β. Να υλοποιήστε πρόγραμμα το οποίο:
1. Θα περιλαμβάνει τμήμα δηλώσεων
2. Θα υπολογίζει και εκτυπώνει τον μικρότερο αριθμό Haribot που υπάρχει. Για τον υπολογισμό θα χρησιμοποιήσετε το υποπρόγραμμα που υλοποιήσατε στο ερώτημα Α.

Ερώτηση.
Για να βρούμε ποιος είναι ο πίο μικρός HARIBOT δεν πρέπει να χρησιμοποιήσουμε ένα πίνακα ώστε να μπορούμε αφού βρούμε
κάμποσους να τους συγκρίνουμε  για να βρούμε το μικρότερο ;
η ΕΚΦΩΝΗΣΗ δε μιλάει καθολου για πίνακα και εμείς αν θέλουμε να φτιάξουμε τι διάσταση θα του δώσουμε ; αυθαίρετη ;
( έτσι όμως είμαστε εκτος εκφώνησης και θεματος πιστεύω)

Θα χρησιμοποιούσα συνάρτηση όπως μου λέει η θεωρία που να είναι ΛΟΓΙΚΗ και η παρακάτω

ΣΥΝΑΡΤΗΣΗ ΥΠΟΛΟΓΙΣΜΟΣ(ΑΡΙΘΜΟΣ):ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ

ΑΚΕΡΑΙΕΣ : ΑΡΙΘΜΟΣ,ΦΟΡΕΣ,Ι

ΑΡΧΗ
ΦΟΡΕΣ <- 0
ΓΙΑ Ι ΑΠΟ 2 ΜΕΧΡΙ 10
      ΑΝ (ΑΡΙΘΜΟΣ mod I = I - 1) ΤΟΤΕ
             ΦΟΡΕΣ <- ΦΟΡΕΣ + 1
       ΑΛΛΙΩΣ
             ΦΟΡΕΣ <- 0
       ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ ΦΟΡΕΣ = 9 ΤΟΤΕ
      ΥΠΟΛΟΓΙΣΜΟΣ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
      ΥΠΟΛΟΓΙΣΜΟΣ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


Dinos

ΚΑΛΗ ΑΣΚΗΣΟΥΛΑ.
1. Δεν χρειάζεται πίνακας για να βρεις τον μικρότερο αριθμό Haribot. Ξεκινάς από το 11 και αυξάνοντας κατά 1 κάθε φορά, ο πρώτος ακέραιος που θα συναντήσεις και θα κάνει τη συνάρτηση αληθή θα είναι και ο αριθμός Haribot που ζητάς. Για το κριτήριο της περατότητας βάλε ένα άνω όριο (π.χ. 1.000.000)

2. το ενδιαφέρον είναι ότι αν προσέξεις την εκφώνηση ο μικρότερος αριθμός Haribot που ζητάς είναι το Ε.Κ.Π. των ακεραίων 2, 3, 4, ...,10 μειωμένο κατά 1. Και γενικότερα οι αριθμοί Haribot κατά σειρά είναι τα πολλαπλάσια των 2,3,4,..., 10 ταυτόχρονα μειωμένα κατά 1.
Τρέχοντας ας πούμε τον αλγόριθμο θα δεις ότι από το 11 μέχρι το 1.000.000 υπάρχουν 396 αριθμοί Haribot, όσα είναι και τα ταυτόχρονα πολλαπλάσια των (2, 3, 4, ..., 10) και απέχουν κατά 1.
Το ζητούμενο είναι ο 2519.

3. Για να βρείς τώρα το Ε.Κ.Π.
α) είτε μπορείς να σαρώσεις όλους τους ακεραίους ξεκινώντας από το 1 και αυξάνοντας κατά 1 μέχρι να βρεις τον ακέραιο που κάνει τη συνάρτηση αληθή,
β) είτε να ξεκινήσεις από τον μεγαλύτερο ακέραιο (τον 10) και να πηγαίνεις προς τα πάνω με βήμα 10 μέχρι να .....
γ) είτε να παραγοντοποιήσεις τους 2, 3, 4, ....., 10  (γινόμενο πρώτων παραγόντων). Στη συνέχεια παίρνεις όλες τις βάσεις με εκθέτη το μεγαλύτερο:
2 --> 2
3 --> 3
4 --> 22
5 --> 5
6 --> 2 * 3
7 --> 7
8 --> 23
9 --> 32
10 --> 2 * 5

οπότε: ΕΚΠ (2, 3, ...., 10) = 23 * 32 * 5 * 7 = 2520,
οπότε ο μικρότερος αριθμός haribot = 2519

landreou

Δε μπορεσα να καταλάβω ότι πίσω απο αυτα κρύβεται το ΕΚΠ.
Αρα πρέπει να ξέρουμε για ΕΚΠ τι είναι πως βρίσκεται κλπ.

Πώς βρίσκουμε τον ΕΚΠ ;
Μια περιγραφή ( μάλλον όπως τον πο/λσμο αλα ρώσικα? ) για να το φτιαξω σε αλγόριθμο.


dpa2006

δες το παράδειγμα 3 σελ 9 του pdf(συνολικά σελ 44-45) (το παράδειγμα είναι σε Fortran)
Ορισμός ΕΚΠ
Επίσης εδώ παράδειγμα 3
και στο:
http://users.sch.gr/fergadioti/elm/index.php/katb1/56-theoriaar/147-gcd

Με την ευκαιρία αν δεν το έχεις ήδη βρει:
Λύσεις ασκήσεων του τετραδίου του μαθητή
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

landreou

#4
Πάλι δε κατάλαβα.

Ομως είπε ο φίλος πιο πάνω
"1. Δεν χρειάζεται πίνακας για να βρεις τον μικρότερο αριθμό Haribot. Ξεκινάς από το 11 και αυξάνοντας κατά 1 κάθε φορά, ο πρώτος ακέραιος που θα συναντήσεις και θα κάνει τη συνάρτηση αληθή θα είναι και ο αριθμός Haribot που ζητάς. Για το κριτήριο της περατότητας βάλε ένα άνω όριο (π.χ. 1.000.000) "

Αρα το παρακάτω τμήμα κώδικα είναι σωστό για τη λύση του προβλήματος ;

ι <- 11

ΟΣΟ ι <= 1.000.000 ΕΠΑΝΑΛΑΒΕ

κ <- 2

ΟΣΟ ( κ <= 10 ΚΑΙ βρεθηκε =  ΨΕΥΔΗΣ ) ΕΠΑΝΑΛΑΒΕ
   
   ΑΝ ( ι mod κ = κ - 1) ΤΟΤΕ

      βρεθηκε <- ΑΛΗΘΗΣ

      haribot <- ι

   ΤΕΛΟΣ_ΑΝ

κ <- κ + 1

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ι <- ι + 1

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΡΑΨΕ haribot

Dinos

Με τον κλασσικό τρόπο:

ΠΡΟΓΡΑΜΜΑ HARIBOT
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ι
  ΛΟΓΙΚΕΣ: ΒΡΕΘ
ΑΡΧΗ
  Ι <- 11
  ΒΡΕΘ <- ΨΕΥΔΗΣ
  ΟΣΟ Ι <= 1000000 ΚΑΙ ΒΡΕΘ = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
    ΑΝ ΕΙΝΑΙ(Ι) = ΑΛΗΘΗΣ ΤΟΤΕ
      ΓΡΑΨΕ Ι
      ΒΡΕΘ <- ΑΛΗΘΗΣ
    ΑΛΛΙΩΣ
      Ι <- Ι + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


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

ΣΥΝΑΡΤΗΣΗ ΕΙΝΑΙ(Α): ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Α, Ι
  ΛΟΓΙΚΕΣ: Κ
ΑΡΧΗ
  Κ <- ΑΛΗΘΗΣ
  Ι <- 2
  ΟΣΟ Ι <= 10 ΚΑΙ Κ = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
    ΑΝ Α mod Ι <> Ι - 1 ΤΟΤΕ
      Κ <- ΨΕΥΔΗΣ
    ΑΛΛΙΩΣ
      Ι <- Ι + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΕΙΝΑΙ <- Κ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Dinos

όσο για το Ε.Κ.Π.:
ζητάς τον αριθμό Α που διαιρούμενος με το 2 δίνει υπόλοιπο 2-1=1 και ταυτόχρονα διαιρούμενος με το 3 δίνει υπόλοιπο 3-1=2 και ....διαιρούμενος με το 10 δίνει υπόλοιπο 10-1=9.
ΆΡΑ
ο αριθμός Α+1 διαιρούμενος με το 2 θα δίνει υπόλοιπο 0 (διερεύνησέ το) και ταυτόχρονα διαιρούμενος με το 3 θα δίνει υπόλοιπο 0 και ........ διαιρούμενος με το 10 θα δίνει υπόλοιπο 0.
ΑΡΑ
ο αριθμός που ζητάς θα είναι ακέραιο πολλαπλάσιο και του 2 και του 3 και του ......... και του 10.
Επειδή τώρα εσύ ζητάς να είναι το μικρότερο Α, άρα ζητάς το Ε.Κ.Π.(2,3,4,....,10)

και στο 3. παρατίθενται διάφοροι τρόποι υπολογισμού του

landreou

Τι θα έλεγες για αυτή τη λύση ( δίχως ΕΚΠ και τετοια )
ΠΡΟΓΡΑΜΜΑ HARIBOT
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Ι
ΛΟΓΙΚΕΣ : ΕΙΝΑΙ_HARIBOT

ΑΡΧΗ

Ι <- 11
ΟΣΟ Ι <= 1000000 ΚΑΙ ΕΙΝΑΙ = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ

   ΕΙΝΑΙ <- EINAI_HARIBOT(I)

I<- I + 1

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΡΑΨΕ 'ΠΡΩΤΟΣ HARIBOT = ', I

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



ΣΥΝΑΡΤΗΣΗ ΕΙΝΑΙ_HARIBOT(Ι):ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ

ΑΚΕΡΑΙΕΣ : Κ

ΛΟΓΙΚΕΣ : ΒΡΕΘΗΚΕ

ΑΡΧΗ

κ <- 2

ΒΡΕΘΗΚΕ <- ΨΕΥΔΗΣ

ΟΣΟ κ <= 10 ΚΑΙ ΒΡΕΘΗΚΕ = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
   
   ΑΝ ( ι mod κ = k - 1) ΤΟΤΕ

      ΒΡΕΘΗΚΕ <- ΑΛΗΘΗΣ

   ΤΕΛΟΣ_ΑΝ

κ <- κ + 1

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΕΙΝΑΙ_HARIBOT <- ΒΡΕΘΗΚΕ

ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


Dinos

έτσι είναι

ΠΡΟΓΡΑΜΜΑ HARIBOT
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Ι
ΛΟΓΙΚΕΣ : ΕΙΝΑΙ

ΑΡΧΗ

Ι <- 10
ΟΣΟ Ι <= 1000000 ΚΑΙ ΕΙΝΑΙ = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
   I<- I + 1
   ΕΙΝΑΙ <- EINAI_HARIBOT(I)



ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΡΑΨΕ 'ΠΡΩΤΟΣ HARIBOT = ', I

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


ΣΥΝΑΡΤΗΣΗ ΕΙΝΑΙ_HARIBOT(Ι):ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ

ΑΚΕΡΑΙΕΣ : Κ, I

ΛΟΓΙΚΕΣ : ΒΡΕΘΗΚΕ

ΑΡΧΗ

κ <- 2

ΒΡΕΘΗΚΕ <- ΨΕΥΔΗΣ

ΟΣΟ κ <= 10 ΚΑΙ ΒΡΕΘΗΚΕ = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
   
   ΑΝ ( I mod κ = κ - 1) ΤΟΤΕ

      ΒΡΕΘΗΚΕ <- ΑΛΗΘΗΣ

   ΤΕΛΟΣ_ΑΝ

κ <- κ + 1

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΕΙΝΑΙ_HARIBOT <- ΒΡΕΘΗΚΕ

ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Dinos

+ μία αρχικοποίηση.

ΠΡΟΓΡΑΜΜΑ HARIBOT
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Ι
ΛΟΓΙΚΕΣ : ΕΙΝΑΙ

ΑΡΧΗ

ΕΙΝΑΙ <- ΨΕΥΔΗΣ
Ι <- 10
ΟΣΟ Ι <= 1000000 ΚΑΙ ΕΙΝΑΙ = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ

landreou

Από την τιμή 11 δεν ξεκινάμε  γιατι βάζεις Ι <- 10 πρίν το όσο και το αυξάνεις με το που εισέρχεσαι σ'αυτήν;

Σε ευχαριστώ παντως για την βοήθεια σου.

Dinos

Γιατί όπως το είχες υλοποιήσει εμφάνιζες όχι τον μικρότερο αριθμό Haribot, αλλά τον αμέσως επόμενο (Ι <--  Ι + 1). Επομένως πρώτα αύξηση, μετά έλεγχος αν είναι Haribot, διακοπή ή συνέχιση της επανάληψης, .........
Και μια προσωπική (;) ερώτηση. Είσαι συνάδελφος ή μαθητής;