Φυσικη γλωσσα κατα βηματα

Ξεκίνησε από theoni, 31 Μαΐου 2017, 10:36:09 ΜΜ

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

theoni

Καλησπέρα σας μια ερώτηση θέλω να κάνω σε μια άσκηση του περσινού οεφε  η ασκηση ελεγε να μετατρέψετε απο φυσική γλώσσα σε ισοδύναμο  αλγοριθμο με τη χρήση δομημενου προγραμματισμού
Βημα 1:διαβασε α,β
Βημα 2:αν α>0 και β>0τοτε πήγαινε στο βημα 3αλλιώς πήγαινε στο βήμα1
Βημα 3:s<--0
B ημα 4:αν βmod2=1 τοτε πηγαινε στο βήμα 5 αλλιώς  πήγαινε στο βήμα 6
Βημα 5: s<--s+α
Βημα 6: α<--α*2
Βημα7:β<--βdiv2
Βημα8: αν β=0τοτε πήγαινε στο βημα 9 αλλιως πηγαινε στο βημα 4
Βημα9:εμφανισε s
Οι επισημες λύσεις δίνουν σαν απάντηση
Αρχη επαναληψης
  Διαβασε α,β
Μεχρις οτου α>0 και β>0
S<--0
Αρχη επαναληψης
   Αν β mod2=1 τοτε
       S<--s+α
   Τελος αν
   α<-- α*2
   Β<--βdiv2
Μεχρις οτου β=0
Εμφανισε s
  Η ερώτηση μου είναι η εξής γιατί χρησιμοποιεί αν τελος αν και οχι αν αλλιως  τελος αν το τεταρτο βήμα με μπερδεύει

bagelis

Το βήμα 6 θα εκτελεστεί ούτως ή άλλως ανεξαρτήτως της τιμής της συνθήκης του βήματος 4.
Αν η συνθήκη στο βήμα 4 είναι ψευδής τότε θα εκτελεστεί το 6
Αν η συνθήκη στο βήμα 4 είναι αληθής τότε θα εκτελεστεί το 5 και ακολούθως το 6
Άρα το 6 εκτελείται πάντα, άρα είναι έξω από το ΑΝ

Απλά ακόμα και σαν αδόμητος προγραμματισμός έτσι όπως γράφτηκε αρχικά δεν θα το έκανε (φαντάζομαι) κανείς εκείνη την εποχή γιατί μπορεί να γραφεί εξ' αρχής ως:

Bημα 4:αν βmod2=1 τοτε s<--s+α


theoni

Πως θα ήταν  η φυσκικη γλώσσα  γραμμένη για να χρησιμοποιούσα αν  αλλιως;;;;

bugman

Υπάρχει ο τελεστής Όχι (ή Not) οπότε μια ΑΝ όχι Α>5 τότε ...Όμως σε ορισμένες γλώσσες πιάνει το If (συνθήκη) Else...
Το ΟΧΙ μπορεί να είναι σύμβολο (έτσι είναι στη C και στη Java)
https://stackoverflow.com/questions/4775379/using-not-operator-in-if-conditions
https://www.tutorialspoint.com/cprogramming/c_operators.htm δες τo logical not
Το Όχι, ή Not λέγεται unary operator επειδή μπορεί να υπάρχει στην αρχή έκφρασης (ενώ πχ το DIV δεν ανήκει σε αυτούς τους τελεστές γιατί θέλει αριστρά και δεξιά έκφραση).
https://en.wikipedia.org/wiki/Unary_operation
Επίσης λέγεται logical negation https://en.wikipedia.org/wiki/Negation
Στη φυσική γλώσσα θα ήταν Αν οχι το α μεγαλύτερο β τότε... (δεν μπορεί να γίνει Αν α μεγαλύτερο β διαφορετικά, δεν στέκει συντακτικά στη φυσική γλώσσα)

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

petrosp13

Παράθεση από: theoni στις 31 Μαΐου 2017, 11:24:10 ΜΜ
Πως θα ήταν  η φυσκικη γλώσσα  γραμμένη για να χρησιμοποιούσα αν  αλλιως;;;;

Bημα 4:αν βmod2=1 τοτε πηγαινε στο βήμα 5 αλλιώς  πήγαινε στο βήμα 7
Βημα 5: s<--s+α
Βήμα 6: Πήγαινε στο βήμα 8
Βημα 7: α<--α*2
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

gthal

Μια ιδέα είναι να φτιάχνεις το διάγραμμα ώστε να καταλάβεις πραγματικά τη ροή
Φιλικά,
Γιώργος Θαλασσινός

petrosp13

Μια καλύτερη ιδέα είναι να μην ξαναζητηθεί ποτέ τέτοιο αναχρονιστικό θέμα
>:D >:D >:D
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

gthal

Φιλικά,
Γιώργος Θαλασσινός