ΑΠΟΡΙΑ ΣΤΟΝ ΤΡΟΠΟ ΣΥΝΤΑΞΗΣ ΤΩΝ ΣΥΝΘΗΚΩΝ

Ξεκίνησε από d_bam, 19 Οκτ 2007, 12:50:07 ΜΜ

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

d_bam

Σε ασκήσεις που έχουν πέσει κατά καιρούς, υπάρχει πίνακας της μορφής:

μονάδες                    χρέωση ανα μοναδα
0 - 500                               10
501 - 1000                          20
πάνω από 1000                    30

και η άσκηση δεν εξασφαλίζει ότι οι μονάδες είναι πάντα μη αρνητικός αριθμός, ούτε λέει να γίνει έλεγχος

Σε μια τέτοια άσκηση, οι περιπτώσεις που θα πάρω θα πρέπει να  συμπεριλαμβάνουν το μηδέν ή όχι;

Είναι σωστό να πω:  ??????????????

Αν Μ<=500 τότε
     Χ <-- Μ*10
αλλιώς_αν Μ<=1000 τότε
     Χ <-- Μ*20
αλλιώς
     Χ <-- Μ*30
Τέλος_αν

thomas_lar

Νομίζω ότι σ'αυτές τις περιπτώσεις πρέπει να κάνουμε ξεχωριστά έλεγχο για τις αρνητικές τιμές και όχι να τις συμπεριλάβουμε σε μία συνθήκη (όπως έκανες εσύ).
Δηλαδή να πάρουμε περιπτώσεις για τα 3 διαστήματα ( 0,500 - 501,1000 -  >1000 ) με Αν , Αλλιώς_Αν και στο Αλλιώς να ελέγξουμε την συμπεριφορά του αλγορίθμου για τις αρνητικές τιμές.

nikosx

Η λύση σου είναι σωστή αφού και 0 να είναι οι μονάδες η χρέωση θα υπολογιστεί ως 0. Υπάρχουν βέβαια και ασκήσεις στις οποίες η εκφώνηση αναφέρει τι πρέπει να γίνει αν μπεί το 0 ή αρνητικός αριθμός ως είσιδος στον αλγόριθμο. Εκεί λειτουργείς ανάλογα.
Νίκος Ξένος
Καθηγητής Πληροφορικής
nxenos@sch.gr

Τhanos

Σε περιπτωση ομως που η χρεωση που ζητειται στην δοθεισα ασκηση ειναι κλιμακωτη η λυση που προανεφερες δεν πρεπει να ειναι σωστη καθως π.χ. για 700 μοναδες με κλιμακωτη χρεωση θα πρεπει να χρεωθουν οι 500 πρωτες για 10 και επομενες 200 για 20.Αυτη ειναι η αποψη μου.Παντως υπο κανονικες συνθηκες (δλδ δεν ζητειται η χρεωση να γινει κλιμακωτα) πιστευω οτι η λυση σου στεκει! ;)
Σαραντόπουλος Θανάσης
Μαθητής Γ΄Λυκείου

ppan

Προφανώς η άσκηση, έτσι όπως την αναφέρεις, αφορά οπωσδήποτε κλιμακωτό υπολογισμό. Έτσι η σωστή λύση είναι (θεωρώντας ότι οι μονάδες που διαβάζονται είναι μη αρνητικός αριθμός):
Αν Μ<=500 τότε
     Χ <-- Μ*10
αλλιώς_αν Μ<=1000 τότε
     Χ <-- 500*10  + (Μ-500)*20
αλλιώς
     Χ <-- 500*10  + 500*20 + (Μ-1000)*30
Τέλος_αν

Αν βέβαια θέλεις να εξασφαλίσης ότι οι μονάδες Μ είναι οπωσδήποτε μη αρνητικός αριθμός τότε χρησιμοποιώντας μόνο δομή επιλογής θα είναι:

Αν  Μ<0 τότε
    Εμφάνισε  "μη αποδεκτή ποσότητα"
αλλιώς_αν Μ<=500 τότε
    Χ <-- Μ*10
αλλιώς_αν Μ<=1000 τότε
    Χ <-- 500*10  + (Μ-500)*20
αλλιώς
    Χ <-- 500*10  + 500*20 + (Μ-1000)*30
Τέλος_αν

ενώ με χρήση του ελέγχου ορθής καταχώρησης δεδομένων:

Αρχή_επανάληψης
   Διάβασε  Μ
Μέχρις_ότου  Μ>0
Αν Μ<=500 τότε
     Χ <-- Μ*10
αλλιώς_αν Μ<=1000 τότε
     Χ <-- 500*10  + (Μ-500)*20
αλλιώς
     Χ <-- 500*10  + 500*20 + (Μ-1000)*30
Τέλος_αν.