Δομή Επαναληψης ΓΙΑ

Ξεκίνησε από ΑΕΠΠ, 09 Φεβ 2006, 11:15:37 ΜΜ

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

ΑΕΠΠ

Μπορούμε να χρησιμοποιήσουμε τη μεταβλητή για και μέσα στον βρόχό;;;
π.χ.

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

andreas_p

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

Ανδρέας

xaidi

Για ποιο λόγο να μην μπορούμε?
Με αυτή τη μορφή?
Εκτός αν δεν κατάλαβα καλά την ερώτηση.
Π.χ.

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

Ευχαριστώ,

ΑΕΠΠ

Ευχαριστώ πολύ!!!
Αυτό το τμήμα αλγορίθμου έχει βάλει ένας καθηγητής στο διαγώνισμα και ζητούσε να βρούμε τι εμφανίζει!!(Η απάντηση που έδωσε ήταν 2 0)
Για ι από 3 μέχρι 0 με βήμα -1(σύμφωνα με το βιβλίο θα κάνει 4 επαναλήψεις), επομένως δεν είναι σωστό να μεταβάλεται η τιμή του μετρητη μέσα στον βρόχο.
Θα ήθελα να μου πείτε και εσείς τη γνώμη σας!!!

evry

Μπορεί να είναι κακή πρακτική αλλά δεν είναι λάθος. Κατ'αρχήν είναι σίγουρα αλγόριθμος αφού δεν παραβιάζει κάποιο από τα κριτήρια.
Κατά δεύτερον ισχύει σε όλες τις γλώσσες προγραμματισμού. Η παράγραφος που λες νομίζω ότι λέει για συμβουλές-υποδείξεις. Απλά δίνει κατευθύνσεις στον μαθητή για το πως θα χρησιμοποιήσει τις δομές.

Παράθεση από: andreas_p στις 10 Φεβ 2006, 10:14:09 ΠΜ
OXI. Βλέπε ΤΜ σελ 77  Παράγ. 8.3  "Συμβουλές - υποδείξεις"  6ο  bullet.

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

ΑΕΠΠ

Ωραία συμφωνώ με όσα λέτε!!
Όμως το βιβλίο αναφέρει πως γνωρίζουμε τον αριθμό των επαναλήψεων στη δομή Για, ενώ μέσα απο αυτό το παράδειγμα καταλαβαίνουμε ότι αυτό δε συμβαίνει πάντα!

P.Tsiotakis

Στο τετράδιο μαθητή, που παρουσίασε ο Ανδρέας, λέει οτι ΠΟΤΕ να μην τροποποιείται η τιμή του μετρητή εντός του βρόχου. Ας πάει ο μαθητής (εσύ μάλλον είσαι ο μαθητής) το σχετικό βιβλίο στον καθηγητή του και ας του διαβάσει την σχετική σελίδα.

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


ΑΕΠΠ

Κ.Ptsiotaki θέλω να σας δώσω τα συγχαρητηριά μου, πιστεύω πως έχετε προσφέρει πάρα πολλά πάνω σε αυτό το μάθημα!!
Ευχαριστώ πάρα πολύ για τις απαντήσεις όλων σας!!!

Laertis

Χμμμ, ζήλεψα και σκέφτομαι ποια άσκηση να βάλω για να ταλαιπωρήσω το μυαλουδάκι των μαθητών μου.

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

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

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

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

P.Tsiotakis



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

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

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

evry

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

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

Μάλλον μου ξέφυγε το   οπότε όπου table είναι table

Παράθεση από: 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# και ειλικρινά δεν μπορώ να φανταστώ κάποια άλλη δημοφιλής γλώσσα η οποία δεν σε αφήνει να πειράξεις το μετρητή της δομής επανάληψης.

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

andreas_p

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

Πρόσεξε, σύμφωνα με το βιβλίο μετά το ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ το 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 από τη ΓΛΩΣΣΑ

Παράθεση από: 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
Τέλος_αν

Ανδρέας

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

klitos

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

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

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