Αποστολέας Θέμα: Δομή Επαναληψης ΓΙΑ  (Αναγνώστηκε 5723 φορές)

ΑΕΠΠ

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

Για ι από 3 μέχρι 0 με βήμα -1
ι <- ι-1
Εμφάνισε ι
Τέλος_επανάληψης

andreas_p

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 1053
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #1 στις: 10 Φεβ 2006, 10:14:09 πμ »
OXI. Βλέπε ΤΜ σελ 77  Παράγ. 8.3  "Συμβουλές - υποδείξεις"  6ο  bullet.

Ανδρέας

xaidi

  • Ομάδα διαγωνισμάτων 2009
  • *
  • Μηνύματα: 111
  • who is WHO!!!!!!
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #2 στις: 10 Φεβ 2006, 12:32:57 μμ »
Για ποιο λόγο να μην μπορούμε?
Με αυτή τη μορφή?
Εκτός αν δεν κατάλαβα καλά την ερώτηση.
Π.χ.

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

Ευχαριστώ,

ΑΕΠΠ

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

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3514
  • to Iterate is human to Recurse divine
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #4 στις: 10 Φεβ 2006, 04:40:32 μμ »
Μπορεί να είναι κακή πρακτική αλλά δεν είναι λάθος. Κατ'αρχήν είναι σίγουρα αλγόριθμος αφού δεν παραβιάζει κάποιο από τα κριτήρια.
Κατά δεύτερον ισχύει σε όλες τις γλώσσες προγραμματισμού. Η παράγραφος που λες νομίζω ότι λέει για συμβουλές-υποδείξεις. Απλά δίνει κατευθύνσεις στον μαθητή για το πως θα χρησιμοποιήσει τις δομές.

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

Ανδρέας
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

ΑΕΠΠ

  • Επισκέπτης
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #5 στις: 10 Φεβ 2006, 09:36:35 μμ »
Ωραία συμφωνώ με όσα λέτε!!
Όμως το βιβλίο αναφέρει πως γνωρίζουμε τον αριθμό των επαναλήψεων στη δομή Για, ενώ μέσα απο αυτό το παράδειγμα καταλαβαίνουμε ότι αυτό δε συμβαίνει πάντα!

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3302
  • agent romanoff you miss me?
    • P.Tsiotakis
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #6 στις: 11 Φεβ 2006, 11:24:32 πμ »
Στο τετράδιο μαθητή, που παρουσίασε ο Ανδρέας, λέει οτι ΠΟΤΕ να μην τροποποιείται η τιμή του μετρητή εντός του βρόχου. Ας πάει ο μαθητής (εσύ μάλλον είσαι ο μαθητής) το σχετικό βιβλίο στον καθηγητή του και ας του διαβάσει την σχετική σελίδα.

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


ΑΕΠΠ

  • Επισκέπτης
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #7 στις: 11 Φεβ 2006, 01:10:01 μμ »
Κ.Ptsiotaki θέλω να σας δώσω τα συγχαρητηριά μου, πιστεύω πως έχετε προσφέρει πάρα πολλά πάνω σε αυτό το μάθημα!!
Ευχαριστώ πάρα πολύ για τις απαντήσεις όλων σας!!!

Laertis

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 1516
  • Sky's the limit
    • ΑΣΚΗΣΕΙΣ-ΘΕΜΑΤΑ ΑΕΠΠ
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #8 στις: 11 Φεβ 2006, 03:18:38 μμ »
Χμμμ, ζήλεψα και σκέφτομαι ποια άσκηση να βάλω για να ταλαιπωρήσω το μυαλουδάκι των μαθητών μου.

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

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

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

Υ.Γ. : Και μετά μας φταίει (εμάς τους καθηγητές πληροφορικής) το βιβλίο ή το κακό το ριζικό μας κλπ.
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3302
  • agent romanoff you miss me?
    • P.Tsiotakis
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #9 στις: 11 Φεβ 2006, 05:36:05 μμ »


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

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

Αγαπητέ μου φίλε σ'ευχαριστώ για τα καλά σου λόγια, αλλά με κάνεις και κοκκινίζω

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3514
  • to Iterate is human to Recurse divine
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #10 στις: 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# και ειλικρινά δεν μπορώ να φανταστώ κάποια άλλη δημοφιλής γλώσσα η οποία δεν σε αφήνει να πειράξεις το μετρητή της δομής επανάληψης.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3514
  • to Iterate is human to Recurse divine
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #11 στις: 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# και ειλικρινά δεν μπορώ να φανταστώ κάποια άλλη δημοφιλής γλώσσα η οποία δεν σε αφήνει να πειράξεις το μετρητή της δομής επανάληψης.

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

andreas_p

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 1053
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #12 στις: 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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3514
  • to Iterate is human to Recurse divine
Απ: Δομή Επαναληψης ΓΙΑ
« Απάντηση #13 στις: 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
Τέλος_αν

Ανδρέας

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

klitos

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

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

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