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

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

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

Gnirut

Το κεφ.4 είναι εκτός ύλης.

Το αντιμετάθεσε στη σελίδα 68 αναφέρεται ως εντολή και επί της ουσίας χρησιμοποιείται σαν macro ή inline code αν θέλεις και όχι σαν μέθοδος κλήσης άλλου αλγόριθμου.
Άλλωστε ο τρόπος κλήσης δεν είναι σαφής όπως στο κεφ.4 που είναι διαφορετικός.

Τη χρησιμότητα του getch εννοείς σαν εντολή τύπου pause; Δεν παύει να είναι μια εντολή και όχι αλγόριθμος.

evry


Παράθεση
Παρεπιπτώντως η συνάρτηση getch() επιστρέφει τον ASCII κωδικό του χαρακτήρα που πατήθηκε.
ναι αλλά σπάνια χρησιμοποιείται για αυτό, δες και στην περιγραφή της, η χρήση της είναι να "τρώει" έναν χαρακτήρα, να τον αγνοεί. στα περισσότερα προγράμματα χρησιμοποιείται για αυτό, όπως π.χ. στο παρακάτω:
Κώδικας: C
#include<stdio.h>
#include<conio.h>
main()
{
          clrscr();
          int a,b;
          printf("Enter any two numbers\n");
         scanf("%d%d",&a,&b);
         printf("Please press any key to view out out\n");
         getch();
         clrscr();
         printf("The sum of the numbers you entered is %d",a+b);
         getch();
}

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

evry

#17
Παράθεση από: Gnirut στις 02 Απρ 2014, 06:10:48 ΜΜ
Το κεφ.4 είναι εκτός ύλης.
άρα τι? είναι λάθος? ή είναι λάθος ή σωστό δεν υπάρχει κάτι άλλο.

Όσο για την ύλη που λες, δεν είναι στην εξεταστέα ύλη!!!! στην ύλη ειναι γιατι αφενός αναφέρεται η δυαδική αναζήτηση στο κεφ.9, άρα μπορείς να τους τη δείξεις, αφετέρου, το αναλυτικό πρόγραμμα σπουδών δεν έχει αλλάξει , είναι το ίδιο, άσχετα αν κάποιοι καθηγητές δεν το έχουν διαβάσει ποτέ. Άρα δεν σημαίνει ότι επειδή δεν είναι κάτι στην εξεταστέα ύλη δεν μπορείς να το διδάξεις.

Αν ακολουθείς το ΑΠΣ είσαι εντάξει, άρα το επιχείρημα περί ύλης δεν ισχύει. Ένα βιβλίο δεν μπορεί να περιέχει αντιφάσεις.

όσο για το Αντιμετάθεσε εννοείς ότι δεν είναι αλγόριθμος?
Μα πληροί όλα τα αλγοριθμικά κριτήρια άρα είναι αλγόριθμος και έχουμε κλήση αλγορίθμου.
Αν δεν είναι αλγόριθμος κατά τη γνώμη σου, ποιο κριτήριο δεν πληροί ?

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

nikosxatz

H συνάρτηση getch() δεν είναι καν συνάρτηση της C!!!!!! Δεν υπάρχει σε ΚΑΝΕΝΑ πρότυπο της γλώσσας και απλά υποστηρίζεται από κάποιους compilers (βλέπε την αρχαία turbo C) ενάντια σε κάθε Standard! Δεν λέω βολεύει αλλά δεν είναι C!
H αντίστοιχη της ANSI C είναι η getchar() με πρότυπο int getchar(void) και επιστρέφει επίσης τον ASCII κωδικό του χαρακτήρα. Δεν έχει την ίδια λειτουργικότητα με τη getch() αλλά δυστυχώς είναι η μοναδική που διαθέτει η ANSI C.
Σε κάθε περίπτωση η χρήση είτε της μιας είτε της άλλης, απλά για να για να "φρενάρει" την εκτέλεση του προγράμματος, δεν αναιρεί το πρότυπο ούτε τη χρήση για την οποία έχει σχεδιαστεί.

apoldem

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

evry

Το αν ορίζεται στη C ή όχι δεν νομίζω να έχει ιδιαίτερη σημασία στην κουβέντα μας. Σημασία έχει η λειτουργία της.
Ας πούμε λοιπόν ότι υλοποιώ τη δική μου getch() στη C η οποία έχει την παρακάτω υπογραφή

void getch()

Δεν επιστρέφει τίποτα αλλά εσωτερικά διαβάζει το επόμενο keystroke που πάτησε ο χρήστης έτσι ώστε μόλις πατήσει κάποιος enter για να δει τα αποτελέσματα να μην κλείνει το παράθυρο.
Θυμίζω την readkey της pascal που την χρησιμοποιούσαμε σε command prompt.

Τώρα αυτή η συνάρτηση που όρισα κάνει κάτι χρήσιμο ναι ή όχι? εχει εξοδο?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

nikosxatz

Όχι έτσι που το θέτεις δεν έχει έξοδο! Αλλά δεν καταλαβαίνω τι σχέση έχει με το αρχικό post!

evry

ακριβως.
κάνει όμως κάτι χρήσιμο, μαζεύει τα σκουπίδια του input.
το αν θα το βαφτίσουμε αλγόριθμο είναι απλά θέμα ορισμού
Παράθεση από: nikosxatz στις 02 Απρ 2014, 09:10:35 ΜΜ
Όχι έτσι που το θέτεις δεν έχει έξοδο!
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

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

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

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

Τι ρόλο παίζει το μαύρο κουτί, αν όχι για να κρύψει τις εσωτερικές μεταβλητές, τον τρόπο υλοποίησης κλπ, από τα άλλα κομμάτια κώδικα; (και για το κυρίως πρόγραμμα, και από τον χρήστη; )
Δομημένος προγραμματισμός σημαίνει ότι πρέπει να μπορούμε να αναθέσουμε στον προγραμματιστή Α να υλοποιήσει τον αλγόριθμο Α,
και στον προγραμματιστή Β να υλοποιήσει τον αλγόριθμο Β ο οποίος όμως να καλεί τον αλγόριθμο Α,
και να μην μας νοιάζει καθόλου το τι εσωτερικές μεταβλητές έχει ο Α.
Να μας νοιάζει μόνο η είσοδος και η έξοδός του, δηλαδή η λίστα παραμέτρων του (ή, ανάλογα με τις συμβάσεις, τα "δεδομένα" ή "αποτελέσματά" του).
Αν ο προγραμματιστής του αλγορίθμου Α έπρεπε να δώσει στον Β όλη τη λίστα με τις 100 εσωτερικές μεταβλητές που χρησιμοποιεί, τους μετρητές, τους αθροιστές κλπ, επειδή τις μετέβαλλε και άρα θα θεωρούνταν έξοδος,
ο προγραμματιστής Β θα γούρλωνε τα μάτια και θα παραιτούνταν, δεν θα μπορούσε να γίνει καμία συνεργασία μεταξύ τους, δεν θα υπήρχε δομημένος προγραμματισμός.

Έξοδος είναι αυτά που είπε ο morfeus παραπάνω.

Gnirut

#24
Για να πάρουμε τα πράγματα από την αρχή.

Ο αλγόριθμος ΤΕΣΤ, είναι ...αλγόριθμος και είναι διατυπωμένος σε αυτό που ορίζει το βιβλίο ως "Ψευδογλώσσα". Δεν είναι δηλαδή πρόγραμμα.

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

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

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

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

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