Εισοδος Αλγορίθμου

Ξεκίνησε από Skara, 03 Οκτ 2008, 02:12:19 ΜΜ

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

Καρκαμάνης Γεώργιος

Πρώτα θα εκφράσω ένα <b>ευχαριστώ</b> στον Άλκη που  έκανε τον κόπο να ενοχλήσει τον συγγραφέα.

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

Σύμφωνα με την απάντηση......σκέφτομαι και αναρωτιέμαι:
α) ποια είναι είσοδος τελικά;
      Δεδομένα, Διάβασε, απλές αναθέσεις τιμών στην αρχή του αλγορίθμου, for/while ;
β) ποια δεν είναι είσοδος τελικά;
     εδώ;;;;;;;;;;;;;;;

alkisg

#46
Τα ίδια θα πω πάλι ουσιαστικά, απλά με άλλα λόγια. Ελπίζω να μην ακουστώ απότομος... :) :) :)

Παναγιώτη το ότι από το "άλλες απλές εντολές" συμπεραίνετε ότι μας κάνει μια οποιαδήποτε απλή εντολή είναι εντελώς μα εντελώς αυθαίρετο. Επίσης αυθαίρετο είναι το ότι διαλέγετε συγκεκριμένα την ανάθεση τιμής επειδή είναι απλή εντολή (είναι αλήθεια; υπάρχουν εντολές ανάθεσης με δεκάδες τελεστές και τελεστέους). Και τρίτη αυθαιρεσία είναι το ότι άλλοτε τη θεωρείτε εισόδου και άλλοτε όχι, και μάλιστα με έναν τελείως ασαφή τρόπο, ανάλογα π.χ. με το αν είναι στην αρχή του προγράμματος ή αν αναφέρεται στην εκφώνηση ή δεν ξέρω κι εγώ τι άλλο.

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


Γνώμη μου είναι ότι μιλάει για συγκεκριμένες απλές εντολές παρόμοιες με τη random και όχι οποιεσδήποτε. Για παράδειγμα, in al,θύρα (διάβασμα μιας πόρτας του Η/Υ - είτε ρολόι, είτε θερμοκρασία είτε ό,τι άλλο τυχαίο έχει).
Κι αυτό αυθαιρεσία είναι, δε λέω όχι. Αλλά τουλάχιστον είναι απλό, σαφές, μοιάζει και με τη λειτουργία της random και σέβεται και την έννοια της εισόδου (δεν είναι τυχαίο μάλιστα που η εντολή assembly λέγεται in).


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


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


Υ.Γ. δεν ξέρω ποιο πρόβλημα λύνει ο παραπάνω αλγόριθμος, αλλά αν κάποιος μαθητής στον έλυνε έτσι:
Αλγόριθμος  ΚΥΡΙΑΚΟΣ
   Εμφάνισε 1 + 2
Τέλος ΚΥΡΙΑΚΟΣ
τι θα του έλεγες για την είσοδο; Δεν είναι γελοίο που η είσοδος "εξαφανίζεται" γράφοντας διαφορετικά τον ίδιο αλγόριθμο;

Υ.Γ. #2 θα ήταν χρήσιμο να ακούσουμε κι άλλες γνώμες γι' αυτό που είπαμε πιο πριν με τον Κώστα, αν δηλαδή η είσοδος αφορά τον αλγόριθμο ή το πρόβλημα. Δηλαδή αν δεν ξέρουμε την εκφώνηση δεν μπορούμε να καταλάβουμε εάν μια εντολή sum <- 0 είναι είσοδος ή όχι;

gpapargi

Ο αλγόριθμος και το πρόβλημα είναι διαφορετικά πράγματα. Μπορεί το πρώτο να φτιάχνεται για να λύσει το δεύτερο αλλά αυτό δεν τα κάνει ίδια.
Υπάρχουν προβλήματα που δεν έχουν αλγόριθμο που να τα λύνει (πχ το μη υπολογίσιμο πρόβλημα του τερματισμού).
Υπάρχουν προβλήματα που λύνονται το καθένα από αυτά από 2 διαφορετικούς αλγορίθμους.
Επίσης υπάρχουν διαφορετικά προβλήματα που λύνονται από τον ίδιο ακριβώς αλγόριθμο. Μιλάω για προβλήματα που αν και έχουν τελείως διαφορετική περιγραφή τελικά έχουν κρυμμένο το ίδιο μαθηματικό μοντέλο από πίσω τους και η επίλυσή τους απαιτεί την εκτέλεση πανομοιότυπων βημάτων.

Ο αλγόριθμος είναι απλώς ένα σύνολο ενεργειών. Μπορώ να φτιάξω ένα σύνολο ενεργειών χωρίς εκφώνηση πχ να γίνονται κάποιες τυχαίες πολύπλοκες πράξεις χωρίς κάποιο φυσικό νόημα. Ακόμα κι αν τις δεις δε θα μπορείς να πεις τι κάνουν και θα περιοριστείς σε μια περιγραφή της μορφής «γίνεται η τάδε πράξη»… δηλαδή θα πεις με λόγια αυτό που κάνει η πράξη. 
Μόνο οι ενέργειες αυτές είναι αρκετές για να πούμε αν πληρείται ή όχι κάποιο κριτήριο. Τα κριτήρια αφορούν αλγορίθμους και όχι προβλήματα.

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

Τέλος να δώσω ένα παράδειγμα. Έστω το παρακάτω πρόβλημα:
«Να φτιαχτεί αλγόριθμος που διαβάζει ένα αριθμό και να εκτυπώνει το διπλάσιό του»

Και να ο αλγόριθμος σε ψευδογλώσσα:

Αλγόριθμος διπλασιασμός
Διάβασε x
y<-2
διπλάσιος <- y * x
Εμφάνισε διπλάσιος
Τέλος διπλασιασμός

Ποια είναι η είσοδος; Νομίζω πως κανείς δε θα πει ότι είναι και το x αλλά και το 2.

sstergou

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

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

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

Εκτός από αυτά τα "κριτήρια" ή χαρακτηριστικά (πιο σωστά) που αναφέρει το βιβλίο, νομίζω θα έπρεπε να προστεθεί ακόμη ένα το οποίο έχει να κάνει με την ποιότητα του αλγορίθμου :  η γενικότητα(generalness) ή αφαίρεση (abstraction).

Για μένα αλγόριθμος που βγάζει το ίδιο αποτέλεσμα κάθε φορά που εκτελείται δεν έχει νόημα. Τον εκτελείς μια φορά, σημειώνεις το αποτέλεσμα και τέλος.

P.Tsiotakis

Η διαφορά των 2 παρακάτω αλγορίθμων:
Αλγόριθμος διπλασιασμός1
Διάβασε x
διπλάσιος ← 5 * Τ_Ρ(x)
Εμφάνισε διπλάσιος
Τέλος διπλασιασμός1
       Αλγόριθμος διπλασιασμός2
x ← 1253
διπλάσιος ← 5 * Τ_Ρ(x)
Εμφάνισε διπλάσιος
Τέλος διπλασιασμός2

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

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

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

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

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

sstergou

#50
Τυπικά μιλώντας η εντολή :  x ← 1253 δεν είναι απαραίτητη


Κώδικας: Αλγόριθμος
Αλγόριθμος  διπλασιασμός1
 Διάβασε x
 διπλάσιος ← 5 * Τ_Ρ(x)
 Εμφάνισε διπλάσιος
 Τέλος διπλασιασμός1
Κώδικας: Αλγόριθμος
Αλγόριθμος  διπλασιασμός2
 x ← 1253
 διπλάσιος ← 5 * Τ_Ρ(x)
 Εμφάνισε διπλάσιος
Τέλος διπλασιασμός2
Κώδικας: Αλγόριθμος
Αλγόριθμος  διπλασιασμός3
Εμφάνισε 5 * Τ_Ρ(1253)
Τέλος διπλασιασμός3
Κώδικας: Αλγόριθμος
Αλγόριθμος  διπλασιασμός4
Εμφάνισε 176,98870020
Τέλος διπλασιασμός4

Ο αλγόριθμος διπλασιασμός4 είναι ισοδύναμος με τον διπλασιασμό2;Και οι δύο δίνουν την ίδια έξοδο όσες φορές και αν εκτελεστούν.Αν είναι έτσι, πώς γίνεται ένας αλγόριθμος με είσοδο να είναι ισοδύναμος με έναν που δεν έχει; Αν αυτό συμβαίνει σημαίνει πως η είσοδος είναι πλασματική, δεν παίζει κανένα ουσιαστικό ρόλο.

Μου φαίνεται πως πάμε να δικαιολογήσουμε τα αδικαιολόγητα ασφαλώς πάντα με καλή πρόθεση. Είναι σίγουρο πως ένας αλγόριθμος για να είναι χρήσιμος πρέπει να έχει είσοδο αλλά αυτή δεν δίνεται από τον προγραμματιστή, δίνεται από τον edit:χρήστη.
Δηλαδή κάθε φορά που πρέπει να αλλαχτούν τα δεδομένα εισόδου πρέπει να φωνάζουμε τον προγραμματιστή ή πρέπει να επιβαρύνουμε τον χρήστη με την "επίπονη" εργασία αλλαγής του κώδικα;

Κάτι σαν το λίνουξ μου ακούγεται  >:D

P.Tsiotakis

Κι αν ο προγραμματιστής γράφει έναν αλγόριθμο για την πάρτη του και είναι και εκτελεστής;

Και ναι, στο:
Αλγόριθμος  διπλασιασμός3
Εμφάνισε 5 * Τ_Ρ(1253)
Τέλος διπλασιασμός3

το "5 * Τ_Ρ(1253)" είναι είσοδος  :D

sstergou

Παίρνοντας την εξαίσια αυτή ιδέα ένα βήμα παραπέρα ,θα έλεγα ότι αν και δεν υπάρχει σαφής ένδειξη στον διπλασιασμό4 η είσοδος υπονοείται και είναι η ίδια με αυτή του διπλασιασμού2, απλά ο προγραμματιστής μη έχοντας κάπου να δώσει λογαριασμό, αφού ο ίδιος χρησιμοποιεί και εκτελεί τα προγράμματά του, αποφάσισε να μην τη βάλει  :D

Michael

Είσοδος (input). Καμία, μία ή περισσότερες τιμές δεδομένων πρέπει να δίνονται ως είσοδοι στον αλγόριθμο. Η περίπτωση που δεν δίνονται τιμές δεδομένων εμφανίζεται, όταν ο αλγόριθμος δημιουργεί και επεξεργάζεται κάποιες πρωτογενείς τιμές με τη βοήθεια συναρτήσεων παραγωγής τυχαίων αριθμών ή με τη βοήθεια άλλων απλών εντολών.

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

ntzios kostas

#54
Αν φύγουμε λίγο από την ψευδογλώσσα και πάμε σε αλγόριθμους που δεν λύνονται με υπολογιστή.
Παρασκευή συνταγής μαγειρικής. Προγραμματιστής: Αυτός που έγραψε το βιβλίο μαγειρικής
Υπολογιστής:Ο Μάγειρας
Χρήστης: Ο Πελάτης

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

Στο βιβλίο πάντως του Χαλάτση που είναι μετάφραση του ANDREW LISTER ως είσοδος του αλγόριθμου γράφει τα υλικά του μουσακά. Υλικά και ποσότητές που ο χρήστης δεν δίνει (ουτε ξέρει από τι αποτελείται ο μουσακάς), αλλά είναι καθορισμένα από το βιβλίο μαγειρικής και καθορίστηκαν από τον προγραμματιστή. Μελιτζάνες<- 2
Το μάθημα Ανάπτυξη Εφαρμογών δεν έχει σαν στόχο την εκμάθηση κάποιου συγκεκριμένου προγραμματιστικού περιβάλλοντος ούτε την καλλιέργεια προγραμματιστικών δεξιοτήτων από τη μεριά των μαθητών. Δεν αποσκοπεί στη λεπτομερειακή εξέταση της δομής, του ρεπερτορίου και των συντακτικων κανόνων κάποιας γλώσσας...

Michael

Τότε όμως γιατί η "είσοδος" θεωρείται κριτήριο? Αυτό είναι που δεν καταλαβαίνω. Μπορεί δηλαδή κάποιος να φτιάξει μια άσκηση (ερώτηση κατανόησης) που αποτελείται από μια ακολουθία εντολών και ικανοποιεί όλα τα άλλα κριτήρια πλην της εισόδου?

sstergou

Η μόνη είσοδος που μπορώ να σκεφτώ στο παράδειγμά σου είναι ο αριθμός των μερίδων (οπότε και ποσότητα υλικών) και η επιθυμία του πελάτη.

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

ntzios kostas

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

sstergou

Για τον αλγόριθμο ΕκτέλεσεΣυνταγήΤσελεμεντέ η επιλογή συνταγής είναι είσοδος.
Για τον αλγόριθμο ΦτιάξεΜουσακά προφανώς δεν είναι. Σε αυτή την περίπτωση τότε μόνο ο αριθμός των μερίδων.

alkisg

Παράθεση από: Michael στις 13 Οκτ 2008, 08:33:41 ΜΜ
Τώρα, για την ουσία του πράγματος δεν έχω άποψη, αν δεν υπήρχε η τελευταία φράση ("ή με τη βοήθεια άλλων απλών εντολών") θα νόμιζα ότι αναφέρεται μόνο σε γεννήτριες τυχαίων αριθμών. Μέχρι να διευκρινιστούν ποιες απ όλες είναι αυτές οι "απλές εντολές", το μυστήριο για μένα θα παραμένει.

Michael φαντάσου ότι είσαι ένας αλγόριθμος:
Ο επεξεργαστής βαριεστημένα εκτελεί τις εντολές σου. Αναθέσεις τιμής, πράξεις, πίνακες κτλ απλά απασχολούν την ALU, τν FPU και γράφουν στη RAM, τίποτα σπουδαίο. Ξαφνικά όμως μια εντολή Διάβασε σου λέει να κάνεις κάτι συνταρακτικό, να έρθεις σε επαφή με τον έξω κόσμο! Εκτελείται λοιπόν μια εντολή in al,61h και διαβάζεις από τη θύρα του πληκτρολογίου. Να μια είσοδος, μια τιμή από ένα σύνολο τιμών η οποία μπορεί να αλλάξει τα αποτελέσματα του αλγορίθμου.
Στη συνέχεια έρχεται ένα interrupt που λέει ότι κουνήθηκε το ποντίκι. Διαβάζεις από τη σειριακή θύρα, in al,3f8h (σόρρυ δεν έχω ενημερωθεί για τις USB) και έχεις άλλη μία είσοδο.
Μετά ο αλγόριθμος γράφει στην οθόνη ή στον εκτυπωτή και έχεις έξοδο.
Αλλά έχει τελειώσει το χαρτί του εκτυπωτή, οπότε στέλνει σήμα και έχεις πάλι μια νέα πληροφορία που μπορεί να αλλάξει τα αποτελέσματα του αλγορίθμου.
Τότε καλείς έναν άλλο αλγόριθμο, ο οποίος θα βγάλει ένα διάλογο στο χρήστη και θα του ζητήσει να πατήσει "ΟΚ" ή "Ακύρωση εκτύπωσης". Η τιμή που σου επιστρέφει ο αλγόριθμος αυτός πάλι είναι είσοδος για σένα. Ενώ για τον αλγόριθμο "διάλογος", είσοδος ήταν το κουμπί που πάτησε ο χρήστης.

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


Για παράδειγμα αλγορίθμου χωρίς είσοδο, δες λίγο παραπάνω τα μηνύματα σχετικά με τον υπολογισμό των 10000 πρώτων αριθμών. Όσοι αλγόριθμοι δεν έχουν είσοδο, έχουν πάντα το ίδιο αποτέλεσμα, επομένως μπορούν να αντικατασταθούν από μία και μοναδική εντολή Εμφάνισε.
Και γι' αυτό η είσοδος είναι σημαντική, γιατί αλλιώς οι αλγόριθμοι είναι χρήσιμοι μόνο την πρώτη φορά που θα εκτελεστούν. Αφού τρέξουν μια φορά, τους πετάμε και σημειώνουμε κάπου το αποτέλεσμα... Δεν θα έλεγα ότι δεν είναι αλγόριθμοι, όπως ισχυρίζεται το βιβλίο (οπότε με αναγκάζει να το λέω κι εγώ), αλλά θα έλεγα ότι είναι κακοσχεδιασμένοι.