Κώστα επειδή οι οδηγίες μαγειρικής δεν ικανοποιούν όλα τα "κριτήρια" των αλγορίθμων, είναι ακατάλληλοι σαν παραδείγματα, καλύτερα να μη συζητάμε γι' αυτούς αλλά για κάποιο άλλο παρόμοιο παράδειγμα των Η/Υ.
Ας πούμε λοιπόν ότι κάποιος ζητάει αλγόριθμο για το κακοδιατυπωμένο πρόβλημα του "να τυπώνει πάντα μια συγκεκριμένη σελίδα στον εκτυπωτή".
Σε αντιστοιχία με την μαγειρική, το αποτέλεσμα (=πάστα) είναι η σελίδα, τα υλικά είναι τα γράμματα και τα σχέδια που θέλουμε να έχει η σελίδα, και δουλειά του αλγορίθμου είναι να μετατρέψει αυτά τα υλικά σε δισδιάστατο πίνακα από pixels, δηλαδή να κάνει rasterize τις γραμματοσειρές, να ζωγραφίσει κύκλους και ορθογώνια κτλ. Δηλαδή με ορολογία Πληροφορικής ο αλγόριθμος είναι ένα πρόγραμμα postscript to bitmap.
Δεν αντιλέγω ότι ο "πελάτης" που ζητάει το συγκεκριμένο αλγόριθμο θεωρεί ότι είναι χρήσιμος: ναι, θέλουμε να φάμε πολλές πάστες. Ναι, θέλουμε να εκτυπώνουμε κάθε μέρα πολλές φορές την ίδια σελίδα.
Ο σχεδιαστής όμως του αλγορίθμου θα πρέπει να σκεφτεί διαφορετικά. Αφού θα φτιάξει που θα φτιάξει postscript to bitmap converter, δεν έχει κανένα νόημα να τον περιορίσει by hardcoding την είσοδο.
Φτιάχνει λοιπόν έναν αλγόριθμο
Αλγόριθμος ΣχεδίασεΣελίδα
Δεδομένα //postscript//
...
Αποτελέσματα //bitmap//
Τέλος ΣχεδίασεΣελίδα
Ναι αλλά ο πελάτης δεν θέλει να πληκτρολογεί κάθε φορά τα δεδομένα.
Αυτός λοιπόν είναι ο ρόλος των αρχείων, και γι' αυτό βάζουμε τα δεδομένα που θέλει ο πελάτης σε ένα αρχείο .ps (ή .pdf ή .doc κτλ).
Επομένως ο τελικός μας αλγόριθμος θα ήταν
Αλγόριθμος ΤύπωσεΣελίδα
Δεδομένα //όνομα αρχείου postscript//
..
Αποτελέσματα //bitmap//
Τέλος
Ναι αλλά ο πελάτης δεν θέλει ούτε καν να ανοίγει το συγκεκριμένο αρχείο, θέλει να κάνει διπλό κλικ σε μια συντόμευση στην επιφάνεια εργασίας και να τυπώνεται χωρίς να πληκτρολογεί δεδομένα.
Εδώ λοιπόν μπαίνει στο παιχνίδι το user interface του λειτουργικού, που είναι άλλος αλγόριθμος.
Συγκεκριμένα στα Windows θα κάναμε συντόμευση για το πρόγραμμα ΤύπωσεΣελίδα, και θα του δίναμε παράμετρο (=πάλι είσοδος) το όνομα αρχείου της σελίδας του πελάτη.
Δηλαδή
C:\TupwseSelida.exe C:\Users\Pelatns\Documents\Arxeio.ps
Κι αν δεν μιλάμε για Windows αλλά για μηχάνημα κατασκευής καφέ, το user interface αντιστοιχεί το κουμπάκι που πατάει ο χρήστης για να διαλέξει τι καφέ θέλει.
Αυτό που λέω είναι ότι ακόμα και για κακοδιατυπωμένα προβλήματα δεν πρέπει να σχεδιάζουμε κακοσχεδιασμένους αλγορίθμους (όχι ΤύπωσεΣελίδαΣυγκεκριμένουΠελάτη αλλά ΤύπωσεΣελίδα).
Το σωστότερο βέβαια ειδικά στην εκπαίδευση είναι να μην δίνουμε καν κακοδιατυπωμένα προβλήματα στους μαθητές...
Παρεμπιπτόντως, το ερώτημα του αν ένας (καλοσχεδιασμένος) αλγόριθμος που δεν έχει είσοδο μπορεί να θεωρηθεί αλγόριθμος, θεωρώ ότι είναι ισοδύναμο με το κατά πόσο μια συντόμευση των Windows (ή μία εντολή του DOS) μπορεί να χαρακτηριστεί αλγόριθμος.