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

Γενικό Λύκειο => Δομή επανάληψης => Γ΄ Λυκείου => Εντολή ΓΙΑ...ΑΠΟ...ΜΕΧΡΙ => Μήνυμα ξεκίνησε από: ΑΕΠΠ στις 09 Φεβ 2006, 11:15:37 μμ

Τίτλος: Δομή Επαναληψης ΓΙΑ
Αποστολή από: ΑΕΠΠ στις 09 Φεβ 2006, 11:15:37 μμ
Μπορούμε να χρησιμοποιήσουμε τη μεταβλητή για και μέσα στον βρόχό;;;
π.χ.

Για ι από 3 μέχρι 0 με βήμα -1
ι <- ι-1
Εμφάνισε ι
Τέλος_επανάληψης
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: andreas_p στις 10 Φεβ 2006, 10:14:09 πμ
OXI. Βλέπε ΤΜ σελ 77  Παράγ. 8.3  "Συμβουλές - υποδείξεις"  6ο  bullet.

Ανδρέας
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: xaidi στις 10 Φεβ 2006, 12:32:57 μμ
Για ποιο λόγο να μην μπορούμε?
Με αυτή τη μορφή?
Εκτός αν δεν κατάλαβα καλά την ερώτηση.
Π.χ.

ΓΙΑ Ι ΑΠΟ 2 ΜΕΧΡΙ 10 ΜΕ ΒΗΜΑ 2
ΓΡΑΨΕ Ι
ΤΕΛΟΣ ΕΠΑΝΑΛΗΨΗΣ

Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: ΑΕΠΠ στις 10 Φεβ 2006, 01:14:51 μμ
Ευχαριστώ πολύ!!!
Αυτό το τμήμα αλγορίθμου έχει βάλει ένας καθηγητής στο διαγώνισμα και ζητούσε να βρούμε τι εμφανίζει!!(Η απάντηση που έδωσε ήταν 2 0)
Για ι από 3 μέχρι 0 με βήμα -1(σύμφωνα με το βιβλίο θα κάνει 4 επαναλήψεις), επομένως δεν είναι σωστό να μεταβάλεται η τιμή του μετρητη μέσα στον βρόχο.
Θα ήθελα να μου πείτε και εσείς τη γνώμη σας!!!
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: evry στις 10 Φεβ 2006, 04:40:32 μμ
Μπορεί να είναι κακή πρακτική αλλά δεν είναι λάθος. Κατ'αρχήν είναι σίγουρα αλγόριθμος αφού δεν παραβιάζει κάποιο από τα κριτήρια.
Κατά δεύτερον ισχύει σε όλες τις γλώσσες προγραμματισμού. Η παράγραφος που λες νομίζω ότι λέει για συμβουλές-υποδείξεις. Απλά δίνει κατευθύνσεις στον μαθητή για το πως θα χρησιμοποιήσει τις δομές.

OXI. Βλέπε ΤΜ σελ 77  Παράγ. 8.3  "Συμβουλές - υποδείξεις"  6ο  bullet.

Ανδρέας
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: ΑΕΠΠ στις 10 Φεβ 2006, 09:36:35 μμ
Ωραία συμφωνώ με όσα λέτε!!
Όμως το βιβλίο αναφέρει πως γνωρίζουμε τον αριθμό των επαναλήψεων στη δομή Για, ενώ μέσα απο αυτό το παράδειγμα καταλαβαίνουμε ότι αυτό δε συμβαίνει πάντα!
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: P.Tsiotakis στις 11 Φεβ 2006, 11:24:32 πμ
Στο τετράδιο μαθητή, που παρουσίασε ο Ανδρέας, λέει οτι ΠΟΤΕ να μην τροποποιείται η τιμή του μετρητή εντός του βρόχου. Ας πάει ο μαθητής (εσύ μάλλον είσαι ο μαθητής) το σχετικό βιβλίο στον καθηγητή του και ας του διαβάσει την σχετική σελίδα.

Ίσως έτσι, ξυπνήσει ο καθηγητής σου και μάθει να διαβάζει ...
Μπορείς να του διαβιβάσεις και τα χαιρετίσματά μου και τον ενθουσιασμό μου για τις πονηρές ασκήσεις που βάζει

Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: ΑΕΠΠ στις 11 Φεβ 2006, 01:10:01 μμ
Κ.Ptsiotaki θέλω να σας δώσω τα συγχαρητηριά μου, πιστεύω πως έχετε προσφέρει πάρα πολλά πάνω σε αυτό το μάθημα!!
Ευχαριστώ πάρα πολύ για τις απαντήσεις όλων σας!!!
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: Laertis στις 11 Φεβ 2006, 03:18:38 μμ
Χμμμ, ζήλεψα και σκέφτομαι ποια άσκηση να βάλω για να ταλαιπωρήσω το μυαλουδάκι των μαθητών μου.

Μια αρκούδα η οποία τρέχει με 30Km/sec κυνηγάει έναν λαγό o οποίος τρέχει με 70 Km/sec. Η αρκούδα ζυγίζει 200 kg ενώ ο λαγός 20 kg.
Να γραφεί αλγόριθμος ο οποίος αφού θεωρήσει δεδομένα τα παραπάνω στοιχεία, να διαβάζει την απόσταση που διένυσε η αρκούδα ( θα τα φτύσει σίγουρα, σιγά μην το πιάσει το λαγό) και να υπολογίζει και να εμφανίζει τι χρώματος είναι η αρκούδα.

Μια χαρά διαθεματική άσκηση Φυσικής και ΑΕΠΠ ...

Ελπίζω φίλε Παναγιώτη να σε ενθουσίασα περισσότερο  ;)

Υ.Γ. : Και μετά μας φταίει (εμάς τους καθηγητές πληροφορικής) το βιβλίο ή το κακό το ριζικό μας κλπ.
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: P.Tsiotakis στις 11 Φεβ 2006, 05:36:05 μμ


Μήπως ήταν πολική αρκούδα;

Ο λαγός θα γλυστράει στον πάγο και έτσι θα τον πιάσει σίγουρα. Στο τέλος, θα τον κάνει λαγοπαγάκια...

Αγαπητέ μου φίλε σ'ευχαριστώ για τα καλά σου λόγια, αλλά με κάνεις και κοκκινίζω
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: evry στις 13 Φεβ 2006, 06:58:31 μμ
Πράγματι πολύ κακώς ο καθηγητής έβαλε μια τέτοια άσκηση. Επειδή η αλλαγή του μετρητή αποτελεί κακή πρακτική στον προγραμματισμό για αυτόν ακριβώς το λόγο δεν την χρησιμοποιούμε σε καμία άσκηση και λέμε στους μαθητές να κάνουν το ίδιο. Αυτό όμως σημαίνει ότι είναι λάθος αν το κάνει κάποιος; Ας δούμε για παράδειγμα το παρακάτω τμήμα αλγορίθμου αναζήτησης

index <-- 0
Για i από 1 μέχρι n επανάλαβε
   Αν  (table = key) τότε
      index <-- i
      i <-- n
   Τέλος_αν
Τέλος_Επαναλήψης

Αν κάποιος μαθητής απαντήσει έτσι θα του κόψετε βαθμό; Πριν το κάνετε σκεφτείτε το εξής: Είναι η λύση επιστημονικά ορθή; Δηλαδή 1) παραβιάζει κάποιον κανόνα της αλγοριθμικής; 2) βγάζει το σωστό αποτέλεσμα;

Τέλος όσον αφορά το τετράδιο του μαθητή στη σελίδα 78 λέει το εξής:


1ον : Η εντολή ΓΙΑ χρησιμοποιείται μόνο για προκαθορισμένο αριθμό επαναλήψεων . Αν λοιπόν ξέρεις τον αριθμό των επαναλήψεων ή μπορείς να τον υπολογίσεις, τότε να χρησιμοποιείς την εντολή ΓΙΑ.

Δηλαδή αν ο μαθητής χρησιμοποιήσει την εντολή Όσο…επανάλαβε για προκαθορισμένο αριθμό επαναλήψεων είναι λάθος;


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


Το 2 όπως και το 1 είναι απλά προτροπές προς τον μαθητή όπως λένε στους φοιτητές να μην χρησιμοποιούν την εντολή goto. Οι “μερικές” γλώσσες προγραμματισμού είναι οι Pascal, C, C++, Java, C# και ειλικρινά δεν μπορώ να φανταστώ κάποια άλλη δημοφιλής γλώσσα η οποία δεν σε αφήνει να πειράξεις το μετρητή της δομής επανάληψης.
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: evry στις 13 Φεβ 2006, 07:55:54 μμ
Μάλλον μου ξέφυγε το   οπότε όπου table είναι table

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

index <-- 0
Για i από 1 μέχρι n επανάλαβε
   Αν (table = key) τότε
      index <-- i
      i <-- n
   Τέλος_αν
Τέλος_Επαναλήψης

Αν κάποιος μαθητής απαντήσει έτσι θα του κόψετε βαθμό; Πριν το κάνετε σκεφτείτε το εξής: Είναι η λύση επιστημονικά ορθή; Δηλαδή 1) παραβιάζει κάποιον κανόνα της αλγοριθμικής; 2) βγάζει το σωστό αποτέλεσμα;

Τέλος όσον αφορά το τετράδιο του μαθητή στη σελίδα 78 λέει το εξής:


1ον : Η εντολή ΓΙΑ χρησιμοποιείται μόνο για προκαθορισμένο αριθμό επαναλήψεων . Αν λοιπόν ξέρεις τον αριθμό των επαναλήψεων ή μπορείς να τον υπολογίσεις, τότε να χρησιμοποιείς την εντολή ΓΙΑ.

Δηλαδή αν ο μαθητής χρησιμοποιήσει την εντολή Όσο…επανάλαβε για προκαθορισμένο αριθμό επαναλήψεων είναι λάθος;


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


Το 2 όπως και το 1 είναι απλά προτροπές προς τον μαθητή όπως λένε στους φοιτητές να μην χρησιμοποιούν την εντολή goto. Οι “μερικές” γλώσσες προγραμματισμού είναι οι Pascal, C, C++, Java, C# και ειλικρινά δεν μπορώ να φανταστώ κάποια άλλη δημοφιλής γλώσσα η οποία δεν σε αφήνει να πειράξεις το μετρητή της δομής επανάληψης.

Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: andreas_p στις 14 Φεβ 2006, 12:02:23 μμ
index <-- 0
Για i από 1 μέχρι n επανάλαβε
   Αν  (table) = key) τότε
      index <-- i
      i <-- n      ! ΔΕΝ βγαίνεις με n
   Τέλος_αν
Τέλος_Επαναλήψης

ΔΕΝ  μπορείς     i <-- n

ΟΜΩΣ  μπορείς ...

index <-- 0
i <--1
Όσο  i<= n επανάλαβε
   Αν  table = key  τότε
      index <-- i
      i <-- n+1
  αλλιώς
     i <--i+1
  Τέλος_αν
Τέλος_Επαναλήψης
Αν  index=0 τότε
   Εμφάνισε  'ΔΕΝ βρέθηκε'
αλλιώς
  Εμφάνισε 'Το στοιχείο ' , key,' βρέθηκε στη θέση ', index
Τέλος_αν

Ανδρέας
Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: evry στις 14 Φεβ 2006, 12:27:47 μμ
Πρόσεξε, σύμφωνα με το βιβλίο μετά το ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ το i αυξάνεται και μετά ελέγχεται οπότε η εντολή που ακολουθεί μετά το i<-- n είναι αμέσως η i<-- i+1 οπότε θα γίνει i=n+1 πριν από τον έλεγχο.
   Για να καταλάβεις τι λέω προσπάθησε να μετατρέψεις αυτό που έγραψα σε δομή Όσο...Επανάλαβε.
    Αυτό συμβαίνει γιατί η τελευταία εντολή είναι πάντα η i <-- i+1

Δηλαδή

index <-- 0
Για i από 1 μέχρι n επανάλαβε
   Αν  (table) = key) τότε
      index <-- i
      i <-- n          ! i = n
   Τέλος_αν
Τέλος_Επαναλήψης   ! Αμέσως μετά i++ οπότε έχω  i=n+1

Το σκεπτικό που περιγράφεις νομίζω ότι ισχύει μόνο σε γλώσσες του στυλ ALGOL, PL/Ι, Pascal κλπ. Τουλάχιστον στην Pascal από ότι θυμάμαι ο μετρητής του for βγαίνει με τιμή n και όχι n+1 και αυτή είναι μια λεπτή αλλά σημαντική διαφορά της Pascal από τη ΓΛΩΣΣΑ

index <-- 0
Για i από 1 μέχρι n επανάλαβε
 Αν (table) = key) τότε
 index <-- i
 i <-- n ! ΔΕΝ βγαίνεις με n
 Τέλος_αν
Τέλος_Επαναλήψης

ΔΕΝ μπορείς i <-- n

ΟΜΩΣ μπορείς ...

index <-- 0
i <--1
Όσο i<= n επανάλαβε
 Αν table = key τότε
 index <-- i
 i <-- n+1
 αλλιώς
 i <--i+1
 Τέλος_αν
Τέλος_Επαναλήψης
Αν index=0 τότε
 Εμφάνισε 'ΔΕΝ βρέθηκε'
αλλιώς
 Εμφάνισε 'Το στοιχείο ' , key,' βρέθηκε στη θέση ', index
Τέλος_αν

Ανδρέας

Τίτλος: Απ: Δομή Επαναληψης ΓΙΑ
Αποστολή από: klitos στις 14 Φεβ 2006, 12:37:04 μμ
το εχουμε εξαντλήσει το θέμα με την δομή επανάληψης ΓΙΑ ...
ελεος...
1ο )συμφωνώ λοιπόν οτι η ρίζα του κακού ειναι οι καθηγητές της ( εμείς ) που πρέπει να διδάσκουμε και οχι να "εξετάζουμε"...

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

3ο) οι μαθητές ( τουλάχιστον της Γ Λυκείου ) εργάζονται πολύ σκληρά ... πρέπει να τους βοηθάμε και οχι να τους απογοητεύουμε με πονηρές ασκήσεις