Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Δομή επανάληψης => Μήνυμα ξεκίνησε από: kiro στις 08 Δεκ 2005, 02:07:47 ΠΜ

Τίτλος: Άσκηση στη Δομή Επανάληψης
Αποστολή από: kiro στις 08 Δεκ 2005, 02:07:47 ΠΜ
Γεια σας!

Να σας ρωτήσω τη γνώμη σας για μια ακόμα άσκηση. Στο βιβλίο του Λαζαρίνη υπάρχει η  παρακάτω άσκηση με την εξής εκφώνηση

Να γράφει ο αλγόριθμος ο οποίος θα διαβάζει το βάρος ενός πλήθους από αντικείμενα σε τόνους, κιλά και γραμμάρια και θα υπολογίζει και θα εμφανίζει το συνολικό βάρος σε τόνους. Ο αλγόριθμος θα τερματίζει όταν το βάρος ενός αντικειμένου ξεπερνά τους δέκα τόνους.

Για λύση δίνει την εξής

Αλγόριθμος Βάρη
Άθροισμα ί 0
Πλήθοςί 0
     Αρχή_Επανάληψης
     Διάβασε τόνοι, κιλά, γραμμάρια
        Βαρος_τονοι ί τονοι + κιλα/1000+γραμμαρια/1000000
     Εμφάνισε ΄΄Βαρος σε τονους είναι΄΄, Βαρος_τονοι
                  Μέχρις_ότου Βαρος_τονοι <10
 Τέλος Βάρη
Το άθροισμα και το πλήθος δεν τα χρησιμοποιεί πουθενά. Για τον υπολογισμό του  Βαρος_τονοι δε θα ήταν πιο σωστό στην αρχή αντί για άθροισμα και πλήθσς να δηλώσουμε βάροςί 0 και μετά το διάβασμα να πούμε

Βαρος_τονοι ί βάρος + (τόνοι + κιλα/1000+γραμμαρια/10^6)


Και κάτι ακόμα για μια άλλη άσκηση. Στην άσκηση από το τετράδιο μαθητή,  κεφαλαίο 2ασκησηΔΣ3 είναι απαραίτητο μετά την επανάληψη να πάρουμε την περίπτωση που το πόσο που ξοδέψαμε είναι μεγαλύτερο του 5000;

αν εξοδα>5000 τοτε
εξοδαί εξοδα- τιμη
τελος_αν


Συγνώμη που ρωτάω συνεχεία για ασκήσεις απλά δεν μπορώ να πάρω την ευθύνη να πω στα παιδία ότι είναι λάθος μια άσκηση αν δεν είμαι 100%

Σας ευχαριστώ πολύ!
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: kiro στις 08 Δεκ 2005, 02:11:11 ΠΜ
μαι διευκρινηση....το βελος δεν μπορω να το πετυχω  ::) και ειναι βαρος >10 και οχι μικροτερο
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: Laertis στις 08 Δεκ 2005, 09:05:12 ΠΜ
Μάλλον ο αλγόριθμος ζητά το συνολικό βάρος σε τόνους κάθε αντικειμένου, απο ότι κατάλαβα απο τη λύση που δίνει, οπότε η αρχικοποίηση πριν την επανάληψη είναι άσκοπη.
Αυτό που εννοείς εσύ είναι ότι θα έπρεπε ο αλγόριθμος να υπολογίζει και εμφανίζει το συνολικό βάρος όλων των αντικειμένων, οπότε και θα ίσχυε αυτό που προτείνεις με την εντολή εμφάνισε εκτός επανάληψης.
Δε ξέρω αν η εκφώνηση είναι ακριβώς έτσι όπως τη γράφεις, αλλά εγώ θα διάλεγα την Όσο για να την λύσω γιατί αυτός ο τρόπος που προτείνεται εμφανίζει και την τιμή τερματισμού (τιμή φρουρός) ενώ νομίζω ότι δε θα έπρεπε.

Όσο για την άσκηση ΔΣ3 Κεφ.2 πρέπει να μου δώσεις ολόκληρο τον αλγόριθμο για να δω τι κάνει ( δεν έχω το βοήθημα για να ελέγξω). Αυτό απο μόνο του δε μου λέει τίποτα.

Φιλικά
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: EleniK στις 08 Δεκ 2005, 12:22:04 ΜΜ
Η ακριβής διατύπωση της άσκησης από το βιβλίο είναι η εξής:

Ν.γ.α. ο οποίος θα διαβάζει το βάρος ενός πλήθους από αντικείμενα σε τόνους, κιλά και γραμμάρια και θα υπολογίζει και θα εμφανίζει το συνολικό βάρος σε τόνους. Ο αλγόριθμος θα τερματίζει όταν το βάρος ενός αντικειμένου ξεπερνά τους 10 τόνους.

Εγώ από τη συγκεκριμένη άσκηση καταλαβαίνω ότι ζητάει το συνολικό βάρος όλων των αντικειμένων, αλλά ο αλγόριθμος τερματίζει όταν το βάρος ενός αντικειμένου ξεπερνα τους 10 τόνους. Έτσι θα την έκανα:

Αλγόριθμος Ασκηση
Sum <- 0
Αρχή_επανάληψης
Διάβασε τόνους, κιλά, γραμ
βάρος <- τόνους + κιλά/1000 + γραμ/10^6
Αν βάρος <= 10 τότε
Sum <- Sum + βάρος
τέλος_αν
μέχρις_ότου βάρος>10
Εμφάνισε Sum
Τέλος Άσκηση

Το πλήθος μπορεί να το υπολογίζει σε περίπτωση που θα ήθελε να εμφανίσει μήνυμα του τύπου:
Εμφάνισε 'Το συνολικό βάρος των', πλήθος, 'αντικειμένων είναι', Sum

Ελπίζω να βοήθησα.

Ελένη
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: P.Tsiotakis στις 08 Δεκ 2005, 03:38:03 ΜΜ
Μια άλλη προσέγγιση με την χρήση της ισχυρότερης δομής επανάληψης Όσο, είναι η εξής:

Αλγόριθμος Ασκηση
  Sum <- 0
  βάρος <- 0
  Όσο βάρος <= 10 επανάλαβε
     Sum <- Sum + βάρος
     Διάβασε τόνους, κιλά, γραμ
     βάρος <- τόνους + κιλά/1000 + γραμ/10^6
  Τέλος_επανάληψης
  Εμφάνισε Sum
Τέλος Άσκηση
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: P.Tsiotakis στις 08 Δεκ 2005, 05:18:33 ΜΜ
Για την ΔΣ3 Κεφ.2, στο βιβλίο μου παρουσιάζω την εξής προσέγγιση για την επίλυση τέτοιου είδους ασκήσεων:

Αλγόριθμος Πολυκατάστημα
  προϋπολογισμός <- 5000
  κόστος <- 0
  Διάβασε τιμή_προϊόντος
  Όσο κόστος + τιμή_προϊόντος <= προϋπολογισμός επανάλαβε
    κόστος <- κόστος + τιμή_προϊόντος
    Διάβασε τιμή_προϊόντος
  Τέλος_επανάληψης
  ρέστα <- προϋπολογισμός - κόστος
  Αποτελέσματα // κόστος, ρέστα //
Τέλος Πολυκατάστημα

Με ελεύθερο κείμενο: Όσο το συνολικό ποσό και η αξία του επόμενου προϊόντος δεν ξεπερνούν τον προϋπολογισμό, συνεχίζουμε την επανάληψη. Έτσι, δεν θα ξεπεραστεί η τιμή των 5000 !!

Η υλοποίηση με Μέχρις_ότου στην ιστοσελίδα
http://users.kor.sch.gr/ptsiotakis/aepp/aepp_tm_2.htm

Με εκτίμηση,
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: kiro στις 08 Δεκ 2005, 09:25:51 ΜΜ
Η εκφώνηση της άσκησης είναι ακριβως :

Να γράφει ο αλγόριθμος ο οποίος θα διαβάζει το βάρος ενός πλήθους από αντικείμενα σε τόνους, κιλά και γραμμάρια και θα υπολογίζει και θα εμφανίζει το συνολικό βάρος σε τόνους. Ο αλγόριθμος θα τερματίζει όταν το βάρος ενός αντικειμένου ξεπερνά τους δέκα τόνους.  

Και η λύση που δίνει είναι

Αλγόριθμος Βάρη
Άθροισμα <- 0
Πλήθος <-0
     Αρχή_Επανάληψης
        Διάβασε τόνοι, κιλά, γραμμάρια
        Βαρος_τονοι <- τονοι + κιλα/1000+γραμμαρια/1000000
        Εμφάνισε ΄΄Βαρος σε τονους είναι΄΄, Βαρος_τονοι
   Μέχρις_ότου Βαρος_τονοι >10
 Τέλος Βάρη

Άρα η λύση όπως τη δίνει είναι λάθος; Εγώ πιστεύω πως ναι&#8230; τα δηλώνει να δεν τα χρησιμοποιεί πουθενά και δεν υπολογίζει και το συνολικό βάρος.
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: P.Tsiotakis στις 09 Δεκ 2005, 09:59:05 ΠΜ

Προσωπικά, αντιλαμβάνομαι οτι αν βρεθεί βάρος φορτίου μεγαλύτερο από 10 τόνους πρέπει να τερματιστεί η επανάληψη και να μην προστεθεί αυτό. Σε αυτήν την περίπτωση η άσκηση είναι λυμένη λάθος.

Αν πρέπει να προστεθεί ως τελευταίο φορτίο τότε η άσκηση είναι σωστά λυμένη

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

Άλλη λάθος άσκηση έχεις ? Θα ήθελα να βάλουμε και κάποια από το βιβλίο μου, π.χ. την άσκηση με τις αμοιβάδες

Με εκτίμηση,
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: Sergio στις 09 Δεκ 2005, 10:28:14 ΠΜ
Δε νομίζω ότι η λύση που δίνει ο συνάδελφος στην άσκησή του είναι λάθος, μάλλον στην εκφώνηση υπάρχει κάποια ασάφεια.
 
Κρίνοντας από την απάντηση που προτείνει στην άσκησή του ο συνάδελφος, εκτιμώ ότι η έκφραση «...θα υπολογίζει και θα εμφανίζει το συνολικό βάρος σε τόνους...» ουσιαστικά εννοεί «...το βάρος του αντικειμένου...» και όχι «...το συνολικό βάρος των αντικειμένων που δόθηκαν...» όπως οι περισσότεροι υποθέσαμε διαβάζοντάς την.  Η χρήση του όρου «συνολικό» μας παρέπεμψε στη χρήση αθροιστή για τον υπολογισμό του συνολικού βάρους που «περνάει» από την άσκηση όμως η λύση που δίνει ο συνάδελφος μας δείχνει ότι χρησιμοποιεί τον όρο «συνολικό βάρος» εννοώντας κατ ουσίαν «αντίστοιχο βάρος σε ΜΙΑ μονάδα των τριών ποσοτήτων που δώθηκαν συνολικά για το αντικείμενο», δηλαδή υπονοεί «άθροιση» (με μετατροπή) των τριών ποσοτήτων για να βρεθεί το βάρος του αντικειμένου («συνολικά») σε μία μονάδα.

Εκτιμώ ότι μία εναλλακτική διατύπωση της εκφώνησης θα μπορούσε να είναι:

Να γράφει ο αλγόριθμος ο οποίος θα διαβάζει το βάρος ενός πλήθους από αντικείμενα σε τόνους, κιλά και γραμμάρια, θα υπολογίζει το βάρος του κάθε αντικειμένου σε τόνους και θα το εμφανίζει. Ο αλγόριθμος θα τερματίζει όταν το βάρος του αντικειμένου που δίνεται ξεπερνά τους δέκα τόνους.

Ένα δεύτερο στοιχείο αναφορικά με τη συγκεκριμένη άσκηση που προβλημάτισε εμένα όταν τη διάβασα ήταν κατά πόσο το «αντικείμενο τερματισμού» (ή «φρουρός» αν μπορούμε να το ονομάσουμε έτσι) πρέπει:
1. να «πάρει μέρος» στην επεξεργασία ή
2. απλά να «δηλώσει το τέλος» της άσκησης

Στην πρώτη περίπτωση είναι στη διακριτική ευχέρεια του «λύτη» να επιλέξει όποια από τις δύο δομές επανάληψης επιθυμεί αφού η επεξεργασία θα γίνει τουλάχιστον μία φορά, έστω και αν δοθεί κατ ευθείαν η «τιμή τερματισμού»

Στη δεύτερη περίπτωση όμως, θα πρέπει να χρησιμοποιήσει υποχρεωτικά τη δομή ΟΣΟ αφού η ΜΕΧΡΙΣ_ΟΤΟΥ θα εκτελέσει (εσφαλμένα) μία επανάληψη, ακόμη και αν δοθεί η τιμή που απλά σηματοδοτεί το τέλος της επανάληψης και άρα δεν πρέπει να υποστεί επεξεργασία.

Αν υποθέσουμε ότι ο χρήστης δίνει το βάρος του αντικειμένου όπως το διαβάζει από μία ηλεκτρονική ζυγαριά με ... τρια πεδία (τόνοι, κιλά, γραμμάρια), τότε είναι δυνατόν να ισχύει οποιαδήποτε από τις παραπάνω δύο υποθέσεις, αφού eξετάζοντας απευθείας την ποσότητα «τόνοι» μπορούμε να διαπιστώσουμε κατα εόσον πρέπει να τερματίσουμε.

Αν όμως δε βάλουμε περιορισμό στη «λογική» της εισόδου των στοιχείων, τότε ίσως υπονοείται η 1η περίπτωση αφού θα μπορούσε ο χρήστης να δώσει τιμές 9 (τόνοι), 2350 (κιλά), 1140 (γραμμάρια) οπότε, μόνο ο έλεγχος του πρώτου δεδομένου (τόνοι) δεν αρκεί αλλά θα πρέπει να γίνει η επεξεργασία τους που θα δώσει ως αποτέλεσμα 11,351140 πριν να είμαστε σε θέση να αποφασίσουμε ότι η επανάληψη πρέπει να τερματίσει.
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: amanou στις 09 Δεκ 2005, 03:17:19 ΜΜ
Γειά σας και από εμένα,

σχετικά με το αν μια τιμή τερματισμού επανάληψης πρέπει να συμμετέχει η όχι στους υπολογισμούς , το βιβλίο κάνει μια αναφορά στο Κεφάλαιο 8 όπου και αναφέρετε στην τιμή φρουρός. Σύμφωνα με το βιβλίο η τιμή αυτή πρέπει να είναι τέτοια που δεν πρέπει να υπολογίζεται στα αποτελέσματα. Οπότε θεωρώ ότι αν μια τιμή τερματίζει την επαναληπτική διαδικασία δεν θα πρέπει να συμμετέχει στους υπολογισμούς οπότε και θα πρέπει να υλοποιείται με την δομή Όσο , σε διαφορετική περίπτωση πρέπει η άσκηση να το αναφέρει ξεκαθαρα οπότε και να χρησιμοποιείται η Δομή Αρχή_επανάληψης. Πάντως πρέπει η άσκηση να αναφέρει ξεκάθαρα αν θα πρέπει η τιμή τερματισμού να συμμετέχει ή όχι, για να μην υπάρχουν διαφορετικές ερμηνείες.

Φιλικά,

Μανουσάκης Αντώνης
Ηλεκτρονικός Μηχ.
& Μηχανικός Υπολογιστών
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: EleniK στις 10 Δεκ 2005, 01:25:55 ΜΜ
Αγαπητέ συνάδελφε Αντώνη,

νομίζω ότι μπορείς να χρησιμοποιήσεις και τις δυο δομές επανάληψης είτε συμμετέχει η τιμή φρουρός είτε όχι. Ακόμα και στην Αρχή_επανάληψης χρησιμοποιώντας ένα Αν μπορείς να αποκλείσεις την τιμή τερματισμού (βλέπε απάντηση που έδωσα παραπάνω). Το θέμα είναι αν σου εξασφαλίζει η εκφώνηση ότι η ομάδα εντολών γίνεται τουλάχιστον μία φορά ή όχι. Και πάλι όμως υπάρχει τρόπος με το Αν. Απλά καλύτερη τακτική είναι όταν δεν συμμετέχει η τιμή -φρουρός να χρησιμοποιείς την Οσο.. επανάλαβε.

Ελένη
Τίτλος: για...από...μέχρι
Αποστολή από: επισκέπτης στις 14 Δεκ 2005, 12:46:33 ΜΜ
θέλω να ρωτήσω αν το παρακάτω τμήμα αλγορίθμου είναι εφικτό στην ΓΛΩΣΣΑ

για ι από 1 μέχρι 10
 γράψε ι
αν ι>5 τότε
ι<-- 11
τέλος_αν
τέλος_επανάληψης
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: EleniK στις 14 Δεκ 2005, 01:40:37 ΜΜ
Νομίζω ότι το παραπάνω τμήμα είτε είναι σαν αλγόριθμος είτε είναι στη Γλώσσα είναι εφικτό.

Αυτό που θα κάνει είναι το ι να πάρει την αρχική τιμή 1. Στη συνέχεια θα το εμφανίσει και και αφού ι>5 είναι ψευδής το ι θα γίνει 2 κ.ο.κ. μέχρι το ι να γίνει 6. Τότε η συνθήκη είναι αληθής και το ι θα πάρει την τιμή 11 και μετά θα κάνει το βήμα ι <-- ι+1, οπότε το ι θα γίνει 12. Ελέγχοντας 12<=10 (δηλ. τη συνθήκη της επανάληψης) θα βγει ψευδής οπότε και θα σταματήσει.

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

Ελένη
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: επισκέπτης στις 14 Δεκ 2005, 02:25:56 ΜΜ
Γνωρίζω ότι το συγκεκριμένο τμήμα αλγορίθμου πρόκειται για κακό προγραμματισμό και ότι σε τέτοιες περιπτώσεις πρέπει να χρησιμοποιούμε την (όσο) απλά είχα μια αντιπαράθεση με κάποιον που πιστεύει ότι το συγκεκριμένο δεν δουλεύει στον προγραμματισμό γενικά (σε κάποια άλλη γλώσσα προγραμματισμού δηλαδή) και άρα δεν δουλεύει και στην ΓΛΩΣΣΑ και αναρωτιέμαι αν κάτι τέτοιο τελικά ισχύει.
Τίτλος: Re: Άσκηση στη Δομή Επανάληψης
Αποστολή από: P.Tsiotakis στις 14 Δεκ 2005, 03:33:31 ΜΜ

Στο διδακτικό πακέτο αναφέρεται ρητά οτι σε έναν βρόχο Για δεν πρέπει να αλλάζει η τιμή του μετρητή, η αρχική τιμή, η τελική τιμή, και το βήμα εντός του βρόχου...    (μεταξύ άλλων σελ 77 τετράδιο μαθητή)

Την τιμή του μετρητή την διαχειρίζεται η δομή Για

Αν θέλουμε κάτι άλλο δεν χρησιμοποιούμε την δομή αυτή, αλλά προτιμούμε άλλη