Αντιμετάθεσε

Ξεκίνησε από EleniK, 01 Φεβ 2006, 12:02:34 ΜΜ

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

EleniK

Ήθελα να ρωτήσω τους συναδέλφους, η εντολή αντιμετάθεσε ισχύει για πρόγραμμα (ξέρω ότι ισχύει για αλγόριθμο); Στο 9ο κεφάλαιο όταν αναφέρει άσκηση ταξινόμησης δεν χρησιμοποιεί την αντιμετάθεσε αλλά τις τρεις εντολές στις οποίες αναλύεται. Τι γνώμη έχετε;

Πάντως μέχρι τώρα συνιστούσα στους μαθητές να χρησιμοποιούν τις 3 εντολές, καθότι μπορεί να μπει και σαν ερώτηση θεωρίας 'σε ποιες εντολές αναλύεται η αντιμετάθεσε'.

Εσείς τι προτείνετε;
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

evry

Στην περίπτωση προγράμματος θα πρέπει να ορίσεις την Αντιμετάθεσε ως υποπρόγραμμα (διαδικασία).
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis


Η εντολή "Αντιμετάθεσε" ΔΕΝ ισχύει σε πρόγραμμα, μπορεί να χρησιμοποιηθεί μόνο σε ψευδογλώσσα

EleniK

Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

dafnib4

Καταρχήν ο τρόπος που τη χρησιμοποιεί στους αλγορίθμους στο κεφάλαιο 3, στο σημείο που περιγράφει τη bubble sort είναι σωστός;

Αντιμετάθεσε j-1, j

Τί σημαίνουν τα παραπάνω;΄Ούτε παρενθέσεις,
ούτε το όνομα του πίνακα, μόνο οι δείκτες, είναι
συνάρτηση, διαδικασία, ακόμη και για τις απαιτήσεις
του αλγορίθμου (που δεν είναι τόσο αυστηρός όσο
η ΓΛΩΣΣΑ) νομίζω ότι είναι λάθος και μπερδεύει τα παιδιά. Τα τελευταία - και με το δίκιο τους- λένε
ότι αφού το λέει το βιβλίο έτσι θα το γράψουν, γιατί
να γράψουν τρεις εντολές, ...... Τα ξέρετε. Πώς να
τους εξηγήσεις επίσης ότι ναι μεν είναι ΟΚ για τους
αλγορίθμους για το ΠΡΟΓΡΑΜΜΑ όμως όχι ;;;;

Τόσα προβλήματα ...... για ποιό λόγο;



Laertis

Φίλη Dafni,

ή εγώ δεν κατάλαβα καλά ή εσύ έχεις άλλο βιβλίο. Στο 3ο Κεφάλαιο την εντολή αντιμετάθεσης την γράφει ως εξής :

αντιμετάθεσε table[j-1],table[j]

και ακολουθεί περίπου την σύνταξη της εντολής swap αν θυμάμαι καλά γιατί έχω πλέον και μια ηλικία... ;)
( και όπως λέει το τραγούδι μεγάλωσαν τα γένια μας κι η ψυχή μας αλλιώτεψε... )

Εμένα μια χάρα μου φαίνεται πάντως

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

panosz

Καλησπέρα,
Πρώτα από όλα Συγχαρητήρια στο Δημιουργό, στους Συντονιστές και στους Συμμετέχοντες του forum !!!

Θα ήθελα την γνώμη σας για το παρακάτω

ΠΡΟΓΡΑΜΜΑ ΠΧ_1
ΜΕΤΑΒΛΗΤΕΣ
    ΑΚΕΡΑΙΕΣ: Α[100], ι, j
..........
ΓΙΑ ι ΑΠΟ 2 ΜΕΧΡΙ 100
     ΓΙΑ j ΑΠΟ 100 ΜΕΧΡΙ ι ΜΕ ΒΗΜΑ -1
          ΑΝ Α[j-1] > Α[j] ΤΟΤΕ
               ΚΑΛΕΣΕ ΑΝΤΙΜΕΤΑΘΕΣΗ (Α,j)
                ή
               ΚΑΛΕΣΕ ΑΝΤΙΜΕΤΑΘΕΣΗ_2 (Α[j-1],Α[j])
          ΤΕΛΟΣ_ΑΝ
     ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
............
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΑΝΤΙΜΕΤΑΘΕΣΗ (Χ,Υ)
ΜΕΤΑΒΛΗΤΕΣ
     ΑΚΕΡΑΙΕΣ: Χ[100], Υ, Τ
ΑΡΧΗ
Τ <- Χ[Υ-1]
Χ[Υ-1] <- Χ[Υ]
Χ[Υ] <- Τ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ή

ΔΙΑΔΙΚΑΣΙΑ ΑΝΤΙΜΕΤΑΘΕΣΗ_2 (Χ,Υ)
ΜΕΤΑΒΛΗΤΕΣ
     ΑΚΕΡΑΙΕΣ: Χ, Υ, Τ
ΑΡΧΗ
Τ <- Χ
Χ <- Υ
Υ <- Τ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


Ευχαριστώ προκαταβολικά για τον χρόνο σας
       
Panos

evry

  Και τα δυο είναι σωστά με μια πρώτη ματιά, αλλά η ΑΝΤΙΜΕΤΑΘΕΣΗ_2 είναι καλύτερη για το συγκεκριμένο μάθημα (κατά τη γνώμη μου) για 3 λόγους

1) Έτσι ορίζεται στον αλγόριθμο της ταξινόμησης στο κεφ.3 οπότε δεν υπάρχει τρόπος να μπερδέψουμε τα παιδιά ορίζοντας διαφορετικά την ανταλλαγή
2) Γενικά όποιο βιβλίο προγραμματισμού και να ανοίξεις ο ορισμός της swap είναι ο 2ος
3) Στην περίπτωση της ΑΝΤΙΜΕΤΑΘΕΣΕ περνάμε σαν παράμετρο έναν πίνακα και έναν ακέραιο αριθμό. Δηλαδή δημιουργείται ένα αντίγραφο για ολόκληρο τον πίνακα κάθε φορά που καλείται η αντιμετάθεσε στην ταξινόμηση, δηλαδή στην χειρότερη περίπτωση περίπου Ν2
φορές.

Το 3 είναι ένα καλό επιχείρημα για να πείσουμε οποιοδήποτε "κακόβουλο"-πονηρό μαθητή που θα θέλει να χρησιμοποιήσει την ΑΝΤΙΜΕΤΑΘΕΣΕ_1.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gpapargi

Επαυξάνω:

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

Ο δεύτερος τρόπος αντιμεταθέτει 2 αριθμούς υπό οποιεσδήποτε συνθήκες. Ο πρώτος τους αντιμεταθέτει μόνο όταν είναι στοιχεία ενός πίνακα 100 θέσεων. Γιατί να το περιορίσουμε τόσο; Η αντιμετάθεση δεν είναι κάτι που συμβαίνει αποκλειστικά σε στοιχεία πίνακα. Συμβαίνει και σε άλλες περιπτώσεις. Έτσι, ο δεύτερος τρόπος μπορεί να χρησιμοποιηθεί για να φτιάξεις βιβλιοθήκη υποπρογραμμάτων ενώ ο πρώτος όχι.

Πέρα από αυτό, στον πρώτο τρόπο, ο χρήστης την ώρα που φτιάχνει το υποπρόγραμμα έχει συνέχεια κατά νου τις λεπτομέρειες του κυρίως προγράμματος. Δε βγάζει από το μυαλό του ότι κάνει δουλειά σε πίνακα. Άσε που πρέπει να έχει κατά νου το ότι ο πίνακας είναι 100 θέσεων και να κάνει ανάλογη δήλωση. Το υποπρόγραμμα δεν είναι ανεξάρτητο από το πρόγραμμα.

Ο πρώτος τρόπος είναι κακός τρόπος. Ο δεύτερος είναι ο ενδεδειγμένος. Ο προγραμματισμός έχει φιλοσοφία μέσα του.