Επανάληψη 'ΓΙΑ' -- αριθμός επαναλήψεων

Ξεκίνησε από sgsfak, 24 Οκτ 2005, 01:06:09 ΜΜ

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

sgsfak

Το βιβλίο λέει ότι όταν ο αριθμός των επαναλήψεων είναι γνωστός εκ των προτέρων τότε χρησιμοποιείται η ΓΙΑ. Αυτό σημαίνει ότι το παρακάτω δεν είναι σωστό (εφόσον δεν γνωρίζουμε χωρίς να εκτελέσουμε τον αλγόριθμο πόσες επαναλήψεις θα έχουμε);
[glossa]
ΔΙΑΒΑΣΕ Ν
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
[/glossa]
..ή ότι σε αυτές τις περιπτώσεις αποφεύγουμε τη ΓΙΑ και χρησιμοποιούμε ΟΣΟ (ή ΜΕΧΡΙΣ_ΟΤΟΥ); Τι συμβουλεύετε τα παιδιά;

ευχαριστώ
Στ.

gpapargi

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

P.Tsiotakis


Στέλιο, όταν σε έναν αλγόριθμο χρησιμοποιείται μια μεταβλητή Ν (και δεδομένου οτι έχει λάβει τιμή) δεν είναι άγνωστη - έχει μια τιμή

Επομένως στον αλγόριθμο που γράφεις, το πλήθος των επαναλήψεων είναι γνωστό και είναι Ν

Με εκτίμηση,


Φίλιππος

ΠαράθεσηΤο βιβλίο λέει ότι όταν ο αριθμός των επαναλήψεων είναι γνωστός εκ των προτέρων τότε χρησιμοποιείται η ΓΙΑ
Όταν είναι γνωστός ο αριθμός των επαναλήψεων μπορεί να χρησιμοποιηθεί οποιαδήποτε από τις τρείς δομές επανάληψης αλλά εξυπηρετεί (βολεύει) περισσότερο η χρήση της ΓΙΑ που 'εμπεριέχει' τη λογική της μέτρησης αριθμού επαναλήψεων.  

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

ΠαράθεσηΑυτό σημαίνει ότι το παρακάτω δεν είναι σωστό (εφόσον δεν γνωρίζουμε χωρίς να εκτελέσουμε τον αλγόριθμο πόσες επαναλήψεις θα έχουμε);
[glossa]
ΔΙΑΒΑΣΕ Ν
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
[/glossa]
ΟΧΙ, αυτό σημαίνει ότι το κομμάτι του αλγόριθμου που δίνεις είναι απόλυτα σωστό, αφού το όριο Ν είναι γνωστό, δηλαδή θα έχει τιμή, τη στιγμή που θα ξεκινήσει να εκτελείται ο βρόχος οπότε θα μπορέσει να υπολογιστεί η τιμή της συνθήκης συνέχειας I <= N


Παράθεση..ή ότι σε αυτές τις περιπτώσεις αποφεύγουμε τη ΓΙΑ και χρησιμοποιούμε ΟΣΟ (ή ΜΕΧΡΙΣ_ΟΤΟΥ); Τι συμβουλεύετε τα παιδιά;

Όταν δεν είναι γνωστός ο αριθμός των επαναλήψεων χρησιμοποιείται απαραίτητα η ΟΣΟ.
Η ΓΙΑ δε μπορεί να χρησιμοποιηθεί αφού στηρίζεται στη 'μη υπέρβαση' ενός δεδομένου ορίου επαναλήψεων (του ΜΕΧΡΙ) μέσα από αύξηση (όταν το βήμα είναι θετικό) ή τη μείωση (όταν είναι αρνητικό) της τιμής της μεταβλητής ελέγχου επομένως είναι αδύνατον να χρησιμοποιηθεί όταν δεν είναι γνωστό  αυτό το όριο (όταν ελέγχεται η συνθήκη).
Η ΜΕΧΡΙΣ_ΟΤΟΥ δε μπορεί να χρησιμοποιηθεί (αυτόνομα) αφού η δομή της επιβάλει την εκτέλεση του βρόχου κατ' ελάχιστον μία φορά.  Κατ' επέκταση, η ΜΕΧΡΙΣ_ΟΤΟΥ μπορεί να χρησιμοποιηθεί μόνον όταν η δομή του προβλήματος επιτρέπει την υπόθεση ότι ο βρόχος θα εκτελεστεί τουλάχιστον μία φορά.  Σε διαφορετική περίπτωση μπορεί να εκτελεστεί μόνο εμφωνευμένη σε απλή επιλογή:
ΑΝ ΟΧΙ Συνθήκη_Τερματισμού ΤΟΤΕ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ...
  ΜΕΧΡΙΣ_ΟΤΟΥ Συνθήκη_Τερματισμού
ΤΕΛΟΣ_ΑΝ

Όταν είναι γνωστός ο αριθμός των επαναλήψεων μπορεί να χρησιμοποιηθεί οποιαδήποτε από τις τρείς δομές επανάληψης αλλά εξυπηρετεί (βολεύει) περισσότερο η χρήση της ΓΙΑ που 'εμπεριέχει' τη λογική της μέτρησης αριθμού επαναλήψεων.