Τώρα είναι Παρ 26 Απρ 2024 02:53 am

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




Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 9 Δημοσιεύσεις ] 
Συγγραφέας Μήνυμα
ΔημοσίευσηΔημοσιεύτηκε: Τρί 09 Ιαν 2007 03:18 pm 
Πρόκειται για μια εισαγωγική άσκηση που είχα δει ως θέμα της πρώτης σειράς ασκήσεων, σε πρωτοετείς φοιτητές ενός τμήματος πληροφορικής.

Η εκφώνηση έχει ως εξής:

Παράθεση:
Γράψ'τε ένα πρόγραμμα που να υπολογίζει πειραματικά το π με τον παρακάτω τρόπο.
Αρχικά, θα δίνεται από το πληκτρολόγιο ένας θετικός αριθμός (έστω Ν). Στη συνέχεια, για τόσες φορές όσες υποδεικνύει ο ακέραιος, θα επιλέγετε ένα τυχαίο σημείο στο δυσδιάστατο σύστημα συντεταγμένων (Δηλαδή, ένα σημείο (x, y) με x και y δεκαδικούς αριθμούς μεταξύ -1 και 1). Μετά από κάθε επιλογή σημείου, πρέπει να ελέγχετε εάν αυτό ανήκει στον κύκλο με κέντρο το (0, 0) και ακτίνα 1. Σε μία μεταβλητή (έστω σημείαΣτονΚύκλο) θα αποθηκεύετε τον αριθμό των σημείων που βρίσκονταν μέσα στον κύκλο. Στο τέλος, μετά από τις επαναλήψεις, το π θα προκείψει από τον παρακάτω τύπο:
π = 4*σημείαΣτονΚύκλο/Ν


Αυτό το θέμα, ξεπερνά τη δυσκολία ασκήσεων που σχετίζονται με το μάθημα ΑΕΠΠ. Ωστόσο, προτείνω σε όλους τους μαθητές που θέλουν να αρχοληθούν επαγγελματικά με τον προγραμματισμό να κάνουν μία προσπάθεια.

Ρωτήστε με για οποιαδήποτε διευκρίνιση. Τη δική μου λύση θα τη δώσω σε 2-3 βδομάδες περίπου. Μέχρι τότε, κάθε δική σας λύση είναι ευπρόσδεκτη. :)


Κορυφή
  
Απάντηση με παράθεση  
ΔημοσίευσηΔημοσιεύτηκε: Πέμ 11 Ιαν 2007 01:50 am 
Χωρίς σύνδεση

Εγγραφή: Σάβ 04 Νοέμ 2006 01:07 am
Δημοσιεύσεις: 20
Γεια σου esogos, ενδιαφέρουσα άσκηση, θα επιχειρήσω να την λύσω!

Ομως

Παράθεση:
για τόσες φορές όσες υποδεικνύει ο ακέραιος


Τι εννοείς ακριβώς?


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Πέμ 11 Ιαν 2007 07:53 pm 
Syntax: [ Download ] [ Hide ]
Στη συνέχεια, για τόσες φορές όσες υποδεικνύει ο ακέραιος


Εννοώ τον αριθμό Ν. Δηλαδή, για Ν φορές, θα επιλέγετε ένα σημείο (x, y), διαφορετικό κάθε φορά και θα προσθέτετε 1 στη μεταβλητή σημείαΣτονΚύκλο.


Επίσης, ενδιαφέρον θα ήταν να σκεφτείτε, έστω και διαισθητικά γιατί το π προκύπτει από τον τύπο αυτό...


Κορυφή
  
Απάντηση με παράθεση  
ΔημοσίευσηΔημοσιεύτηκε: Κυρ 14 Ιαν 2007 01:54 am 
Χωρίς σύνδεση

Εγγραφή: Κυρ 24 Δεκ 2006 05:34 pm
Δημοσιεύσεις: 10
Τοποθεσία: Πειραιας
ΑΝ ΚΑΙ ΔΕΝ ΚΑΤΑΛΑΒΑ ΚΑΛΑ ΤΙ ΖΗΤΑΕΙ ΠΡΟΣΠΑΘΗΣΑ ΝΑ ΤΟ ΛΥΣΩ.
Syntax: [ Download ] [ Hide ]
ΠΡΟΓΡΑΜΜΑ Π

ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν,Ι,σημείαΣτονΚύκλο
  ΠΡΑΓΜΑΤΙΚΕΣ: Χ,Υ,Δ,Π


ΑΡΧΗ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'ΔΩΣΤΕ ΕΝΑΝ ΘΕΤΙΚΟ ΑΚΕΡΑΙΟ ΑΡΙΘΜΟ'
    ΔΙΑΒΑΣΕ Ν
  ΜΕΧΡΙΣ_ΟΤΟΥ Ν>0
  σημείαΣτονΚύκλο <-- 0
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      ΓΡΑΨΕ 'ΔΩΣΤΕ Χ'
      ΔΙΑΒΑΣΕ Χ
    ΜΕΧΡΙΣ_ΟΤΟΥ Χ>=-1 ΚΑΙ Χ<=1
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      ΓΡΑΨΕ 'ΔΩΣΤΕ Υ'
      ΔΙΑΒΑΣΕ Υ
    ΜΕΧΡΙΣ_ΟΤΟΥ Υ>=-1 ΚΑΙ Υ<=1
    Δ <-- Τ_Ρ(Χ^2 + Υ^2)
    ΑΝ Δ<1 ΤΟΤΕ
      σημείαΣτονΚύκλο <-- σημείαΣτονΚύκλο+1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Π <-- 4*(σημείαΣτονΚύκλο/Ν)
  ΓΡΑΨΕ Π
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 

ΑΥΤΟ ΠΟΥ ΔΕΝ ΜΠΟΡΕΣΑ ΝΑ ΚΑΤΑΛΑΒΩ ΕΙΝΑΙ ΓΙΑΤΙ ΘΑ ΒΓΕΙ ΤΟ Π ΑΦΟΥ Η ΜΕΤΑΒΛΗΤΗ σημείαΣτονΚύκλο ΜΕΤΑΒΑΛΛΕΤΑΙ ΑΝΑΛΟΓΑ ΜΕ ΤΙ ΣΗΜΕΙΑ ΔΙΝΕΙΣ.


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Κυρ 14 Ιαν 2007 03:38 pm 
Παράθεση:
ΑΥΤΟ ΠΟΥ ΔΕΝ ΜΠΟΡΕΣΑ ΝΑ ΚΑΤΑΛΑΒΩ ΕΙΝΑΙ ΓΙΑΤΙ ΘΑ ΒΓΕΙ ΤΟ Π ΑΦΟΥ Η ΜΕΤΑΒΛΗΤΗ σημείαΣτονΚύκλο ΜΕΤΑΒΑΛΛΕΤΑΙ ΑΝΑΛΟΓΑ ΜΕ ΤΙ ΣΗΜΕΙΑ ΔΙΝΕΙΣ.


Έχεις απόλυτο δίκαιο! Για να βγει σωστό το αποτέλεσμα δεν πρέπει να δίνει ο χρήστης σημεία, αλλά να μπαίνουν τυχαία. Έτσι, κάθε σημείο έχει την ίδια πιθανότητα να επιλεγεί.

Η λύση σου κατά τ'άλλα είναι απολύτος σωστή. Απλά, άλλαξε την είσοδο των x και y με εύρεση τυχαίου πραγματικού.

Σχετικά με την εύρεση τυχαίων αριθμών:
Αν θέλετε θεωρήστε ότι υπάρχει μία συνάρτηση
ΠΡΑΓΜΑΤΙΚΟΣ τυχαίος_πραγματικός(ΠΡΑΓΜΑΤΙΚΟΣ άνωΌριο).
Πχ
ΠΡΑΓΜΑΤΙΚΟΣ α
α = τυχαίος_πραγματικός(11.4)

Το α θα έχει τιμή μεταξύ 0.0 και 11.4.

Το δίνω αυτό γιατί νομίζω ότι δεν υπάρχει γεννήτρια τυχαίων για πραγματικούς αριθμούς. Αν θέλετε να τρέχει και σε γλωσσομάθεια (για έλεγχο αποτελεσμάτων), δίνω το παρακάτω παράδειγμα:

Παράδειγμα: Εύρεση τυχαίου δεκαδικού μεταξύ 0.0 και 5.0.

ΠΡΑΓΜΑΤΙΚΟΣ α
α = τυχαίος(5000)/1000

--------------------------------------------------

(Στη δοσμένη άσκηση υπάρχει μία επιπλέον δυσκολία, καθώς οι τυχαίοι δεν πρέπει να ξεκινάνε από 0.0, αλλά από -1.0)


Κορυφή
  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Κυρ 14 Ιαν 2007 04:36 pm 
Χωρίς σύνδεση

Εγγραφή: Κυρ 24 Δεκ 2006 05:34 pm
Δημοσιεύσεις: 10
Τοποθεσία: Πειραιας
ΕΥΧΑΡΙΣΤΩ ΓΙΑ ΤΗΝ ΔΙΕΥΚΡΙΝΗΣΗ. ΤΩΡΑ ΔΟΥΛΕΥΕΙ ΜΑΛΛΟΝ ΣΩΣΤΑ :D . ΟΡΙΣΤΕ Ο ΣΩΣΤΟΣ ΚΩΔΙΚΑΣ:
Syntax: [ Download ] [ Hide ]
ΠΡΟΓΡΑΜΜΑ ΥΠΟΛΟΓΙΣΜΟΣ_Π

ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν,Ι,σημείαΣτονΚύκλο,ΠΡΧ,ΠΡΥ
  ΠΡΑΓΜΑΤΙΚΕΣ:Χ,Υ,Δ,Π


ΑΡΧΗ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'ΔΩΣΤΕ ΕΝΑΝ ΘΕΤΙΚΟ ΑΚΕΡΑΙΟ ΑΡΙΘΜΟ'
    ΔΙΑΒΑΣΕ Ν
  ΜΕΧΡΙΣ_ΟΤΟΥ Ν>0
  σημείαΣτονΚύκλο <-- 0
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      ΠΡΧ <--  ΤΥΧΑΙΟΣ(3)
    ΜΕΧΡΙΣ_ΟΤΟΥ ΠΡΧ=1 Η ΠΡΧ=2
    ΑΝ ΠΡΧ=1 ΤΟΤΕ
      Χ <-- ΤΥΧΑΙΟΣ(10000)/10000
    ΑΛΛΙΩΣ
      Χ <-- -ΤΥΧΑΙΟΣ(10000)/10000
    ΤΕΛΟΣ_ΑΝ
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      ΠΡΥ <--  ΤΥΧΑΙΟΣ(3)
    ΜΕΧΡΙΣ_ΟΤΟΥ ΠΡΥ=1 Η ΠΡΥ=2
    ΑΝ ΠΡΥ=1 ΤΟΤΕ
      Υ <-- ΤΥΧΑΙΟΣ(10000)/10000
    ΑΛΛΙΩΣ
      Υ <-- -ΤΥΧΑΙΟΣ(10000)/10000
    ΤΕΛΟΣ_ΑΝ
    Δ <-- Τ_Ρ(Χ^2 + Υ^2)
    ΑΝ Δ<1 ΤΟΤΕ
      σημείαΣτονΚύκλο <-- σημείαΣτονΚύκλο+1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Π <-- 4*(σημείαΣτονΚύκλο/Ν)
  ΓΡΑΨΕ Π
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ    
 

ΤΟ Π ΒΓΑΙΝΕΙ ΣΩΣΤΟ ΓΙΑ ΜΕΓΑΛΑ Ν


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Δευτ 15 Ιαν 2007 03:38 am 
Χωρίς σύνδεση

Εγγραφή: Κυρ 14 Ιαν 2007 03:43 pm
Δημοσιεύσεις: 18
Τοποθεσία: Κομοτηνή
Φίλε buluba89 συγχαρητήρια για τη λύση σου! Όντως δουλεύει σωστά και όπως ήδη παρατήρησες, για μεγάλες τιμές του Ν βγάζει ολοένα και ακριβέστερα αποτελέσματα του π.

Ωστόσο, μπορείς να κάνεις δύο βελτιώσεις στο πρόγραμμά σου. Την πρώτη θα στην πω και τη δεύτερη αν έχεις όρεξη μπορείς να τη βρεις μόνος σου, ή και κάποιος άλλος, δηλαδή.

Το ΠΡΧ θέλεις να έχει μία από τις τιμές 1 ή 2, σωστά; Το τυχαίος(3) επιστρέφει έναν από τους αριθμούς 0, 1 ή 2. Έτσι, έχεις μία άρχηστη τιμή, την 0 και έτσι, αναγκάζεσαι να βάλεις μία ΑΝ ΑΛΛΙΩΣ. Μία έξυπνη σκέψη για να το αποφύγεις αυτό είναι να κάνει το εξής:

ΠΡΧ = τυχαίος(2) + 1

Τα αποτελέσματα του τυχαίος(2) θα είναι 0 ή 1. Έτσι, προσθέτοντας 1 έχουμε ως αποτέλεσμα 1 ή 2.


Παράδειγμα χωρίς λύση 1: Βρείτε ένα τυχαίο ακέραιο Ν μετάξύ α και β.
(α <= Ν < β)


Αν λύσεις το παραπάνω παράδειγμα, τότε μπορείς να κάνεις και μία δεύτερη βελτίωση: Να μη χρειαστείς παρά μόνο δύο κλήσεις της συνάρτησης τυχαίος() στο πρόγραμμά σου (ανά επανάληψη, φυσικά), μία για το x και μία για το y και να αποφύγεις και την άλλη ΑΝ ΑΛΛΙΩΣ:

ΑΝ ΠΡΧ=1 ΤΟΤΕ
Χ <-- ΤΥΧΑΙΟΣ(10000)/10000
ΑΛΛΙΩΣ
Χ <-- -ΤΥΧΑΙΟΣ(10000)/10000
ΤΕΛΟΣ_ΑΝ


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Δευτ 15 Ιαν 2007 01:01 pm 
Χωρίς σύνδεση

Εγγραφή: Κυρ 24 Δεκ 2006 05:34 pm
Δημοσιεύσεις: 10
Τοποθεσία: Πειραιας
esogos ευχαριστώ που βοήθας να βελτιώσω την λύση μου.Για τρίτη φορα :lol: λοιπόν ,η λύση :
Syntax: [ Download ] [ Hide ]
ΠΡΟΓΡΑΜΜΑ ΥΠΟΛΟΓΙΣΜΟΣ_Π

ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν,Ι,σημείαΣτονΚύκλο
  ΠΡΑΓΜΑΤΙΚΕΣ:Χ,Υ,Δ,Π

ΑΡΧΗ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'ΔΩΣΤΕ ΕΝΑΝ ΘΕΤΙΚΟ ΑΚΕΡΑΙΟ ΑΡΙΘΜΟ'
    ΔΙΑΒΑΣΕ Ν
  ΜΕΧΡΙΣ_ΟΤΟΥ Ν>0
  σημείαΣτονΚύκλο <-- 0
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
    Χ <-- ΤΥΧΑΙΟΣ(20000)/10000 - 1
    Υ <-- ΤΥΧΑΙΟΣ(20000)/10000 - 1
    Δ <-- Τ_Ρ(Χ^2 + Υ^2)
    ΑΝ Δ<1 ΤΟΤΕ
      σημείαΣτονΚύκλο <-- σημείαΣτονΚύκλο+1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Π <-- 4*(σημείαΣτονΚύκλο/Ν)
  ΓΡΑΨΕ Π
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
 Θέμα δημοσίευσης:
ΔημοσίευσηΔημοσιεύτηκε: Δευτ 15 Ιαν 2007 06:33 pm 
Χωρίς σύνδεση

Εγγραφή: Κυρ 14 Ιαν 2007 03:43 pm
Δημοσιεύσεις: 18
Τοποθεσία: Κομοτηνή
Τώρα είναι τέλεια! :)

Γενικά, για να βρεις έναν τυχαίο ακέραιο μεταξύ του α και του β (α <= x <= β), αρκεί να κάνεις το εξής:

Syntax: [ Download ] [ Hide ]
ΑΚΕΡΑΙΟΣ x <-- τυχαίος(β - α + 1) + α



Για να βρεις τυχαίο πραγματικό. Συνήθως, στις διάφορες γλώσσες προγραμματισμού, παρέχεται μία συνάρτηση που να επιστρέφει έναν τυχαίο από το 0.0 μέχρι το 1.0. Έτσι, αν θέλουμε να βρούμε ενα τυχαίο νούμερο μεταξύ 0 και β, θα μπορούσαμε να κάνουμε

Syntax: [ Download ] [ Hide ]
ΠΡΑΓΜΑΤΙΚΟΣ x <-- τυχαίοςΠραγματικός() * β


Αν θέλαμε έναν πραγματικό μεταξύ α και β θα είχαμε το παρακάτω

Syntax: [ Download ] [ Hide ]
ΠΡΑΓΜΑΤΙΚΟΣ x <-- τυχαίοςΠραγματικός() * (β - α) + α


Προσέξτε ότι δουλεύει και για αρνητικές τιμές των α και β.

(Προφανώς θεωρώ ότι α < β)


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

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


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

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


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

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