Κριτήριο εξόδου

Ξεκίνησε από nikosxatz, 01 Απρ 2014, 07:11:30 ΜΜ

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

nikosxatz

Επειδή υπάρχουν αρκετές διαφωνίες θα ήθελα την άποψή σας αν ο ακόλουθος αλγόριθμος πληροί ή όχι το κριτήριο της εξόδου!

Αλγόριθμος ΤΕΣΤ
  Διάβασε Α
Τέλος ΤΕΣΤ


tdrivas

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

  • Εμφάνισε
  • Εκτύπωσε
  • Γράψε
  • Αποτέλεσματα
δεν υφίσταται ΕΞΟΔΟΣ.
Thanassis Drivas
BSc in Computer Science
MSc in Space Science Applications and Technologies
https://github.com/tdrivas

nikosxatz

Δεν θα συμφωνήσω διότι όλες αυτές οι εντολές εξόδου αναφέρονται προς τον χρήστη. Το "Αποτελέσματα" δεν είναι εντολή αλλά επακόλουθο των λοιπών εντολών του αλγορίθμου. Η τιμή της μεταβλητής Α ούτως ή άλλως αποτελεί Αποτέλεσμα του αλγορίθμου. Θα ήθελα τη γνώμη συναδέλφων. Με αυτό το σκεπτικό κάθε αλγόριθμος πρέπει υποχρεωτικά να έχει εντολή Γράψε.

petrosp13

Νομίζουμε ότι διυλίζουμε τον κώνωπα...
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

Gnirut

Ποιο πρόβλημα επιλύει ο αλγόριθμος ΤΕΣΤ; Κανένα.
Άρα δεν είναι αλγόριθμος, είναι μια σκέτη εντολή εισόδου.

evry

Η εντολή getch() στη C κάνει το ίδιο. Διαβάζει έναν χαρακτήρα και δεν υπολογίζει ή επιστρέφει κάτι. Και όμως είναι πολύ χρήσιμη. Λύνει κάποιο πρόβλημα. Είναι άραγε αλγόριθμος?
Επίσης με βάση το βιβλίο μπορεί να έχουμε αλγόριθμο χωρίς είσοδο.

Στα πλαίσια του βιβλίου η συζήτηση αυτή δεν έχει νόημα. Τα μόνα κριτήρια που μπορεί να ζητηθούν είναι της περατότητα και της καθοριστικότητας. Όλα τα υπόλοιπα έχουν πρόβλημα έτσι όπως δίνονται στο βιβλίο.



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

Νίκος Αδαμόπουλος

Παράθεση από: evry στις 02 Απρ 2014, 11:27:49 ΠΜ
Στα πλαίσια του βιβλίου η συζήτηση αυτή δεν έχει νόημα. Τα μόνα κριτήρια που μπορεί να ζητηθούν είναι της περατότητα και της καθοριστικότητας. Όλα τα υπόλοιπα έχουν πρόβλημα έτσι όπως δίνονται στο βιβλίο.

+1

Gnirut

Παράθεση από: evry στις 02 Απρ 2014, 11:27:49 ΠΜ
Στα πλαίσια του βιβλίου η συζήτηση αυτή δεν έχει νόημα.

Ίσα ίσα μόνο στα πλαίσια του βιβλίου (με τον "συμβολαιογραφικό" ορισμό του αλγόριθμου) έχει αυτή η συζήτηση νόημα.

Σε επίπεδο "αλγοριθμικής" η συζήτηση δεν έχει κανένα νόημα γιατί ο αλγόριθμος ΤΕΣΤ δεν επιλύει κανένα χρήσιμο πρόβλημα, ούτε μετασχηματίζει καμμία είσοδα σε κάποια έξοδο, εν ολίγοις δεν αποτελεί αλγόριθμο αλλά "κομμάτι κώδικα".

Στα πλαίσια του βιβλίου λοιπόν ο ΤΕΣΤ πληροί (σε ...φιλοσοφικό επίπεδο) όλα τα κριτήρια του βιβλίου:

1) Έχει καμμία είσοδο
2) Έχει έξοδο την τιμή που θα εισάγει ο χρήστης (η οποία βάσει του βιβλίου θα μπορούσε να αποτελεί αποτέλεσμα προς κάποιον άλλον αλγόριθμο).
3) Όλες οι εντολές είναι καθορισμένες.
4) Ο "αλγόριθμος" τελειώνει με την είσοδο του Α από το χρήστη (η περίπτωση ο χρήστης να είναι "πονηρός" και να μην εισάγει ποτέ κάποιο δεδομένο δεν ισχύει γιατί αν είναι έτσι όποιος αλγόριθμος έχει ΔΙΑΒΑΣΕ δεν θα είναι αλγόριθμος γιατί δεν θα ισχύει η περατοτητα...)
5) Κάθε μεμονωμένη εντολή είναι απλή και εκτελέσιμη.

alkisg

Παράθεση από: Gnirut στις 02 Απρ 2014, 02:00:43 ΜΜ
2) Έχει έξοδο την τιμή που θα εισάγει ο χρήστης (η οποία βάσει του βιβλίου θα μπορούσε να αποτελεί αποτέλεσμα προς κάποιον άλλον αλγόριθμο).

Δεν είναι όλες οι μεταβλητές των αλγορίθμων αυτόματα και αποτελέσματα.
Άλλες είναι είσοδοι (δεδομένα), άλλες είναι εσωτερικές μεταβλητές που δεν αποτελούν ούτε είσοδο ούτε έξοδο, και άλλες είναι έξοδοι (αποτελέσματα).
Για να σημειώσουμε μια μεταβλητή ως έξοδο (αποτέλεσμα) χρησιμοποιούμε κάποια από τις εντολές που ανάφερε ο morfeus παραπάνω,
ή, εάν πρόκειται για υποπρόγραμμα (διαδικασία/συνάρτηση) τη δηλώνουμε στη λίστα παραμέτρων του υποπρογράμματος.

Άρα ο παραπάνω κώδικας δεν έχει έξοδο.

Για το αν είναι αλγόριθμος ή όχι, no comment... :)

Gnirut

Παράθεση από: alkisg στις 02 Απρ 2014, 02:13:11 ΜΜ
Δεν είναι όλες οι μεταβλητές των αλγορίθμων αυτόματα και αποτελέσματα.

Στα πλαίσια του ...φιλοσοφικού σκεπτικού και της προηγούμενης απάντησής μου, αναφέρω κατά ...λέξη από το βιβλίο:

Έξοδος. Ο αλγόριθμος πρέπει να δημιουργεί τουλάχιστον μια τιμή δεδομένων ως αποτέλεσμα προς τον χρήστη ή προς έναν άλλον αλγόριθμο

Σε επίπεδο ψευδογλώσσας (σε ψευδογλώσσα είναι γραμμένος ο ΤΕΣΤ) δεν υπάρχει στο βιβλίο συγκεκριμένος τρόπος να περάσει κανείς δεδομένα από έναν αλγόριθμο σε κάποιον άλλον (παρ'ολο που το βιβλίο αναφέρει στο κριτήριο της Εξόδου ότι γίνεται).

Υπό το παραπάνω πρίσμα και αυθαίρετα και με μπόλικη ...φιλοσοφική διάθεση θα μπορούσε να θεωρήσει κάποιος ότι απλή αναφορά της μεταβλητής Α σε κάποιον άλλον αλγόριθμο σημαίνει και πέρασμα της τιμής σε αυτόν.

Κατά τα άλλα και πέρα από τις ...φιλοσοφίες εαν μου το έβαζε εμένα κανείς σε εξετασεις για θέμα θα απαντούσα αυτό που ανάφερα και παραπάνω δηλαδή ότι:

Ο αλγόριθμος ΤΕΣΤ δεν επιλύει κανένα χρήσιμο πρόβλημα, ούτε μετασχηματίζει καμμία είσοδα σε κάποια έξοδο, εν ολίγοις δεν αποτελεί αλγόριθμο αλλά "κομμάτι κώδικα".

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

Gnirut

Επεκτείνοντας, π.χ. τα παρακάτω είναι αλγόριθμοι:
Αλγόριθμος Εξίσωση
  Εμφάνισε "Βάλε τον συντελεστή της εξίσωσης χ+α=0: "
  Διαβασε α
  χ <-- -α
  Εμφάνισε χ
Τέλος Εξίσωση


Αλγόριθμος Εξίσωση
  Εμφάνισε "Βάλε τον συντελεστή της εξίσωσης χ+α=0: "
  Διαβασε α
  χ <-- -α
  Αποτελέσματα // χ //
Τέλος Εξίσωση



το παρακάτω είναι αλγόριθμος ή δεν είναι;

Αλγόριθμος Εξίσωση
  Εμφάνισε "Βάλε τον συντελεστή της εξίσωσης χ+α=0: "
  Διαβασε α
  χ <-- -α
Τέλος Εξίσωση


το παρακάτω;

Αλγόριθμος Εξίσωση
  Διαβασε α
  χ <-- -α
Τέλος Εξίσωση

nikosxatz

Ένας αλγόριθμος δεν είναι πάντα ένα πρόγραμμα ώστε να έχουμε μεταβλητές με συγκριμένη εμβέλεια. Είναι μια γενικότερη έννοια που ισχύει σε κάθε διαδικασία του πραγματικού κόσμου. Κατά την άποψη μου οποιαδήποτε ενέργεια μεταβάλει τη κατάσταση του περιβάλλοντος είναι έξοδος. Αν μπει κάποιος σε ένα δωμάτιο και βγει χωρίς να κάνει απολύτως τίποτα δεν είναι αλγόριθμος. Αν όμως μπει μετακινήσει μια καρέκλα ή βάλει κάτι σε ένα συρτάρι τότε έχει έξοδο διότι ο επόμενος που θα μπει θα βρει κάτι αλλαγμένο ή κάποια επιπλέον πληροφορία (αυτή μέσα στο συρτάρι)!

Εφόσον μιλάμε γενικά για αλγοριθμικά κριτήρια ας μη τα περιορίζουμε σε αλγορίθμους που εκφράζονται σε ψευδογλώσσα ή κάποια γλώσσα προγραμματισμού! Ίσως έτσι το σκεφτούμε από άλλη οπτική γωνία!

evry

Παράθεση από: Gnirut στις 02 Απρ 2014, 02:00:43 ΜΜ
Σε επίπεδο "αλγοριθμικής" η συζήτηση δεν έχει κανένα νόημα γιατί ο αλγόριθμος ΤΕΣΤ δεν επιλύει κανένα χρήσιμο πρόβλημα
Σου έγραψα πριν για τη συνάρτηση getch() στη C η οποία κάνει το ίδιο με την ΤΕΣΤ και θα έλεγα ότι είναι εξαιρετικά χρήσιμη και λύνει πολλά προβλήματα αλλά μάλλον το αγνόησες

Παράθεση
Σε επίπεδο ψευδογλώσσας (σε ψευδογλώσσα είναι γραμμένος ο ΤΕΣΤ) δεν υπάρχει στο βιβλίο συγκεκριμένος τρόπος να περάσει κανείς δεδομένα από έναν αλγόριθμο σε κάποιον άλλον (παρ'ολο που το βιβλίο αναφέρει στο κριτήριο της Εξόδου ότι γίνεται).
Κάνεις λάθος. Προφανώς και υπάρχει τρόπος να περάσεις δεδομένα από έναν αλγόριθμο σε έναν άλλον. Η κλήση της Αντιμετάθεσε τι είναι? δεν είναι κλήση αλγορίθμου? δεν περνάς ως παραμέτρους τα στοιχεία που θα αντιμεταθέσεις?
Δες και στη σελίδα 86 του βιβλίου την δυαδική αναζήτηση που έχει κλήση αλγορίθμου από αλγόριθμο.
Άλλωστε στο στέκι έχει ξαναειπωθεί ότι τα Δεδομένα/Αποτελέσματα αναφέρονται στη λίστα παραμέτρων του υποπρογράμματος που κωδικοποιεί τον αλγόριθμο
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

Προφανώς αναφέρεσαι σε παρενέργειες των υποπρογραμμάτων, (side effects). Αυτές όμως έχουν νόημα όταν τα αντικείμενα στα οποία συμβαίνουν είναι μόνιμα (static, global). Το πρόβλημα με το παράδειγμά σου είναι ότι όταν μπω στο δωμάτιο (κλήση διαδικασίας) ότι και να κάνω (αλλαγή τοπικών μεταβλητών) θα χαθεί όταν κλείσω την πόρτα. Ο επόμενος που θα μπει δεν θα βρει τίποτα. Αν δε χαθεί σημαίνει ότι το υποπρόγραμμα επικοινωνεί με κάποια εξωτερική οντότητα άρα έχει έξοδο.

Παράθεση από: nikosxatz στις 02 Απρ 2014, 05:06:08 ΜΜ
Κατά την άποψη μου οποιαδήποτε ενέργεια μεταβάλει τη κατάσταση του περιβάλλοντος είναι έξοδος. Αν μπει κάποιος σε ένα δωμάτιο και βγει χωρίς να κάνει απολύτως τίποτα δεν είναι αλγόριθμος. Αν όμως μπει μετακινήσει μια καρέκλα ή βάλει κάτι σε ένα συρτάρι τότε έχει έξοδο διότι ο επόμενος που θα μπει θα βρει κάτι αλλαγμένο ή κάποια επιπλέον πληροφορία (αυτή μέσα στο συρτάρι)!

Νομίζω ότι έχουμε ξανα-αναφέρει ότι τα "λεγόμενα" κριτήρια αλγορίθμων είναι λάθος μετάφραση των features του Knuth, για αυτό και η συζήτηση δεν έχει νόημα.
Αυτό άλλωστε φαίνεται ξεκάθαρα όταν το βιβλίο λέει ότι ο αλγόριθμος πρέπει να έχει το χαρακτηριστικό της είσοδου, και μετά λέει ότι μπορεί να μην έχει και είσοδο. Τι σοι κριτήριο είναι αυτό?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

nikosxatz

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

Παρεπιπτώντως η συνάρτηση getch() επιστρέφει τον ASCII κωδικό του χαρακτήρα που πατήθηκε.