Σαφήνεια εκφώνησης άσκησης

Ξεκίνησε από olga_ath, 07 Δεκ 2009, 07:55:36 ΜΜ

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

olga_ath

Χαίρεται

επειδή μόλις τώρα κάνω τα πρώτα μου βήματα στην εκπαίδευση του προγραμματισμού θα ήθελα να ζητήσω την γνώμη σας όσον αφορά την σαφήνεια της παρακάτω εκφώνησης : Να αναπτύξετε πρόγραμμα  το οποίο θα ζήτάει από τον χρήστη έναν αριθμό και θα του εμφανίζει πόσες φορές διαιρείται ακριβώς με το 2.[/b]

Η δική μου αίσθηση διαβάζοντας αυτή την εκφώνηση είναι ότι το πρόγραμμα, στην περίπτωση που θα δωθεί ένας περιττός αριθμός δεν πρέπει να μπαίνει καθόλου σε βρόχο επανάληψης γιατί ένας περιττός δεν διαίρειται ακριβώς με το 2. Παρακαλώ διορθώστε με αν κάνω λάθος.

ευχαριστώ

Ολγα

ευχαριστώ θερμά

Ολγα
Doubt everyone and first of all yourself

P.Tsiotakis

θα μπορούσε και:

Να αναπτύξετε πρόγραμμα  το οποίο θα ζήτάει από το χρήστη έναν αριθμό και θα εμφανίζει πόσες φορές διαιρείται ακριβώς με το 2 ο αριθμός αυτός

(εβγαλα το "του")

Νίκος Αδαμόπουλος

Η γνώμη μου είναι ότι όντως υπάρχει πρόβλημα στη σαφήνεια... Δηλαδή αν δεν σχολίαζες τα περί βρόχου εγώ δεν θα καταλάβαινα ότι κολλάει σε δομή επανάληψης!

Βέβαια ακόμα δεν καταλαβαίνω τι λύση θέλεις...

Ο αριθμός  μπορεί να είναι και αρνητικός ή/και πραγματικός (βέβαια τότε δεν θα μίλαγες για περιττό!);

Δηλαδή αν είναι περιττός τι θέλεις να εμφανίζει;

olga_ath

καταρχάς σας ευχαριστώ και τους δύο για τις απαντήσεις σας :-).

Δεν είμαι η δημιουργός της ασκησης, την βρήκα στο net και η κύρια απορία μου είναι: αν είναι περιττός τότε δεν πρέπει να μπει στο βρόχο γτ κανένας περιττός  ΔΕΝ διαιρείται ακριβώς με το 2.

Παραθέτω παρακάτω την εκφώνηση αυτούσια και την λύση που προτείνετε περιμένοντας τις απόψεις σας.

Εκφώνηση
Ο χρήστης θα δώσει έναν αριθμό και εμείς πρέπει να του εμφανίσουμε πόσες φορές διαιρείται ακριβώς με το 2

Λύση
Για να το πετύχουμε αυτό, χρησιμοποιούμε τους αριθμητικούς τελεστές DIV και MOD. Ο DIV μας δίνει το πηλίκο, δηλαδή 7 DIV 3 = 2 και ο MOD μας δίνει το υπόλοιπο, δηλαδή 7 MOD 3 = 1. Όσον αφορά την δομή επανάληψης, επειδή δεν ξέρουμε πόσες επαναλήψεις θα γίνουν και μπορεί να μην γίνει και καμία (αν ο αριθμός είναι περιττός), επιλέγουμε την ΟΣΟ.

ΠΡΟΓΡΑΜΜΑ παραδειγμα
ΜΕΤΑΒΛΗΤΕΣ
   ΑΚΕΡΑΙΕΣ: αριθμός, ι
ΑΡΧΗ
   ΔΙΑΒΑΣΕ αριθμός
   ι<--0
   ΟΣΟ αριθμός MOD 2 <> 0 ΕΠΑΝΑΛΑΒΕ
      αριθμός <-- αριθμός DIV 2
      ι<-- ι+1
   ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
   ΓΡΑΨΕ ι
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ευχαριστώ εκ των προτέρων όλους όσους μπορούν να βοηθήσουν.
Doubt everyone and first of all yourself

lykos

Νομίζω πως η λύση είναι χειρότερη απ' την εκφώνιση!

Όλγα, στο net μπορεί ο καθένας (ή "ο κάθε πικραμένος") να γράφει ότι θέλει...

lykos

Συγγνώμη για το "εκφώνιση"! Ημουν βιαστικός... (και ήταν και στο τίτλο!...)

olga_ath

Ευχαριστώ πολύ @lykos γιατί με αυτή η εκφώνηση-λύση με έκανε να αμφιβάλλω για τις μαθηματικές μου γνώσεις.

περιττός είναι ένας αριθμός ο οποίος δεν διαιρείται ακριβώς με το δυο, σωστά;

πχ το γεγονός ότι το 35 διαιρείται με το 2 17 φορές ακριβώς δεν μας επιτρέπει να πούμε και γενικά ότι το 35 διαιρείται ακριβώς με το 2. Για την συγκεκριμένενη εκφώνηση δημιούργησα την παρακάτω λύση, η οποία δεν έχει πουθενά επανάληψη, μου διαφέυγει κάτι που πρέπει να γίνει επαναληπτικά;;;

!Περιέργη Εκφώνηση:
!Ο χρήστης θα δώσει έναν αριθμό
!και εμείς πρέπει να του εμφανίσουμε πόσες φορές διαιρείται ακριβώς με το 2


ΠΡΟΓΡΑΜΜΑ Διαίρεση_με_το_2
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: x
ΑΡΧΗ
  ΔΙΑΒΑΣΕ x
  ΑΝ ((x mod 2)<> 0) ΤΟΤΕ
    ΓΡΑΨΕ   'Ο αριθμός', x, 'δεν διαίρειται ακριβώς με το 2'
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ  'Ο αριθμός',  x, 'διαίρειται ακριβώς με το 2', (x div 2), 'φορές'
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Διαίρεση_με_το_2


ΥΣ Η ορθογραφία δεν είναι και μένα το δυνατό μου σημείο  ;) γιαυτό υπάρχουν spellchekers !!!

ευχαριστώ
Doubt everyone and first of all yourself

gthal

Όλγα,
για το ότι το 35 δια του 2 δίνει πηλίκο 17, δεν λέμε ότι "το 35 διαιρείται 17 φορές με το 2".
Λέμε, ίσως, ότι το 2 "χωράει" 17 φορές στο 35 αλλά νομίζω δε ζητάει αυτό η άσκηση.
Στην ουσία το 35 δεν διαιρείται καμιά φορά με το 2 (ούτε μία  :) ) και εξηγώ:

Η δική μου αντίληψη για την άσκηση που παραθέτεις είναι η εξής:
πόσες φορές μπορώ να διαιρέσω τον αριθμό δια του 2 (εννοώντας να διαιρέσω ακριβώς)
καλύτερα με παραδείγματα:
Α) το 8 διαιρείται 3 φορές με το 2 γιατί 8 δια 2 δίνει 4, 4 δια δύο δίνει 2, και τέλος 2 δια 2 δίνει 1 (που δεν διαιρείται περισσότερο)
Β) το 12 διαιρείται 2 φορές με το 2 γιατί 12 δια 2 δίνει 6, και 6 δια δύο δίνει 3 που δεν διαιρείται περισσότερο (με το 2 πάντα)
Γ) το 15 δεν διαιρείται καμία φορά με το 2
Δ) το 34 διαιρείται μία φορά με το 2  γιατί δίνει 17 που δεν διαιρείται άλλο

Η λύση σαφώς θα έχει επανάληψη: όσο ο αριθμός διαιρείται με το 2, τον διαιρείς
(υποθέτω θέλεις να τη δοκιμάσεις οπότε δεν σου τη στέλνω  ;) )
Φιλικά,
Γιώργος Θαλασσινός

za√‘ag

#8
Και εγώ συμφωνώ με τον gthal

Το πρόγραμμα που έχεις βρει παραπάνω (από το internet) δίνει σωστή λύση αρκεί βέβαια να διορθώσεις τη γραμμή 7 στην παρακάτω

ΟΣΟ αριθμός MOD 2 = 0 ΕΠΑΝΑΛΑΒΕ


ΥΓ

Στην εκφώνηση λέει: θα του εμφανίζει πόσες φορές διαιρείται ακριβώς με το 2 δεν λέει να ελέγξει αν είναι άρτιος ή περιττός αλλά υπάρχει η ασάφεια με το "χωράει ακριβώς το 2 στον αριθμό" ... είναι αρκετά ασαφής εκφώνηση
«Δεν υπάρχει λόγος να θέλει κανείς έναν υπολογιστή στο σπίτι του»--Ken Olson, πρ. της DEC, 1977
«Τα 640KB RAM επαρκούν για να τρέξει κάθε πρόγραμμα»--Bill Gates
Δείτε κι άλλες ιστορικές ατάκες  εδώ

gpapargi

#9
Κι εγώ αυτό που καταλαβαίνω είναι πόσες φορές ο αριθμός έχει το 2 για παράγοντα. Με άλλα λόγια αν ο αριθμός αναλυθεί σε γινόμενο πρώτων παραγόντων πόσες φορές είναι παράγοντας ο 2.
Ίσως θα μπορούσε να διατυπωθεί και ως εξής: "ποια είναι η μέγιστη δύναμη του 2 που δεν ξεπερνάει τον αριθμό;"

Μια ενδιαφέρουσα (ελπίζω) παρατήρηση είναι ότι αν ο αριθμός ήταν στο δυαδικό σύστημα η λύση θα ήταν ορατή δια γυμνού οφθαλμού.  Θα ήταν το πλήθος των συνεχόμενων μηδενικών στο τέλος του  ;)

Νίκος Αδαμόπουλος

Παράθεση από: gpapargi στις 09 Δεκ 2009, 09:10:45 ΠΜ
Μια ενδιαφέρουσα (ελπίζω) παρατήρηση είναι ότι αν ο αριθμός ήταν στο δυαδικό σύστημα η λύση θα ήταν ορατή δια γυμνού οφθαλμού.  Θα ήταν το πλήθος των συνεχόμενων μηδενικών στο τέλος του  ;)

Τι εννοείς;

gpapargi

Ένας αριθμός στο δυαδικό σύστημα έχει μόνο άσσους και μηδενικά. Αν τελειώνει σε 0 είναι άρτιος λόγω του ότι ο όρος α0*2^0 (της αναπαράσης α0*2^0 + α1*2^1 + α2*2^2 ...) είναι 0.

Αν του κάνεις διαίρεση με 2 απλά φεύγει το 0 (δεξιά ολίσθηση). Αν αυτό το κάνεις συνέχεια μπορείς να διαιρέσεις με 2 τόσες φορές όσα είναι τα μηδενικά στο τέλος.

Είμαστε αρκετά εξοικιωμένοι με αυτό στο δεκαδικό σύστημα αρίθμησης. Διαίρεση με 10 κάνεις απλά σβήνοντας το μηδενικό στο τέλος. Μπορείς πόσες φορές είναι παράγοντας το 10 απλά μετρώντας τα μηδενικά στο τέλος. Δεν αλλάζει κάτι παρά η βάση του συστήματος αρίθμησης. Αν βάλεις ένα μηδενικό στο τέλος ουσιαστικά πολλαπλασιάζεις με τη βάση του συστήματος αρίθμησης (με 10 στο δεκαδικό, με 2 στο δυαδικό). Τους λέω διάφορα τέτοια στον πολλαπλασιασμό αλά ρωσικά... έτσι για να φτιάξουμε ατμόσφαιρα :) (εννοείται πάντα σε όσους μπορούν να τα καταλάβουν και γουστάρουν). 

Νίκος Αδαμόπουλος

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

Δηλαδή το σκεπτικό σου νομίζω ότι δεν ισχύει και ανάποδα. Π.χ. ο αριθμός 1111111110 προφανώς ΔΕΝ διαιρείται μόνο μία φορά με το 2 επειδή έχει ένα μόνο μηδενικό στο τέλος!!!

Νίκος Αδαμόπουλος

Εξαρτάται βέβαια πώς ερμηνεύουμε το "ακριβώς"...  :(

gpapargi

Παράθεση από: Νίκος Αδαμόπουλος στις 09 Δεκ 2009, 01:48:08 ΜΜ
Γιώργο καταλαβαίνω όσα εξηγείς, αλλά αυτά δεν... εξηγούν την αρχική σου πρόταση!

Δηλαδή το σκεπτικό σου νομίζω ότι δεν ισχύει και ανάποδα. Π.χ. ο αριθμός 1111111110 προφανώς ΔΕΝ διαιρείται μόνο μία φορά με το 2 επειδή έχει ένα μόνο μηδενικό στο τέλος!!!

Δεν καταλαβαίνω. Το 1111111110 είναι το 1022. Μια φορά διαιρείται με το 2. Μετά μένει 511. Δεν έχει άλλο 2αρι μέσα του το 1022. Μήπως λέμε κάτι άλλο;