Τρίτη 23 Νοεμβρίου 2021

Αναθεώρηση 42, Έκδοση 10

1.  Έγιναν μερικές μικρές διορθώσεις στο περιβάλλον για βελτιστοποίηση. 

2. Μπήκε μια νέα εντολή η Assert ή Αξίωση. Όταν θέλουμε σε ένα σημείο του κώδικα να συμβαίνουν υποχρεωτικά (αξιωματικά λόγω του αλγόριθμου που ετοιμάζουμε), συνθήκες τότε η εντολή αυτή ελέγχει τις συνθήκες και τερματίζει το πρόγραμμα αν βρει κάποιες που να μην ικανοποιούνται, και μας λέει ποιες δεν ικανοποιήθηκαν. Αν όμως τρέξουμε το πρόγραμμα με το πλήκτρο Esc να μην διακόπτει το πρόγραμμα, με την εντολή Διαφυγή Όχι (Escape Off) τότε η εντολή Assert ή Αξίωση δεν κοιτάει καθόλου τις συνθήκες, σαν να μην υπήρχαν.

Ουσιαστικά αν έχουμε ένα έτοιμο πρόγραμμα και το αποθηκεύσουμε κρυπτογραφημένο τότε στην εκκίνησή του από τον Explorer των Windows θα ξεκινήσει το σύστημα με ανενεργό το Esc, και το ctrl+ C καθώς και το Break. Οπότε οι εντολές Assert απλά δεν θα εκτελεστούν. Είναι βοηθήματα για τον προγραμματιστή!

Εδώ με τη Δες {}, η οποία κρατάει το λάθος εντός και το διαχειριζόμαστε δείχνοντας τι δεν πήγε καλά (εμφανίζει την ή τις συνθήκες που δεν πέρασαν). Δεν βάζουμε συνθήκη1 και συνθήκη2 και... γιατί όλες θα ελεγχθούν όπως και να έχει και θέλουμε να μας επιστρέψει αυτές που δεν πέρασαν. Ο αριθμός 0& είναι 32bit ακέραιος, και η Εισαγωγή δεν επιτρέπει σε ακέραιο να βάλουμε υποδιαστολή (και να πατήσουμε το πλήκτρο δεν θα το δει το σύστημα). Η Όνομα$ δημιουργείται από την Εισαγωγή. Η Ηλικία θα μπορούσε να δημιουργηθεί από την Εισαγωγή αλλά θα ήταν πραγματική. Στη Μ2000 δεν αλλάζει ο τύπος μετά την πρώτη καταχώρηση τιμής. Οπότε βάζουμε τον Μακρύ (long) και μετά πάμε για εισαγωγή. Στη Μ2000 αν βάλουμε τιμή που δεν χωράει στη μεταβλητή θα βγει λάθος υπερχείλισης!

Τμήμα Δοκιμή_Α {

      Ηλικία=0&
      Εισαγωγή "Δώσε όνομα:";Όνομα$
      Εισαγωγή "Δώσε ηλικία:", Ηλικία
      Δες οκ {
            Αξίωση Όνομα$<>"", Ηλικία>50
      }
      Αν όχι οκ τότε Τύπωσε Λάθος$: Ξεκίνα
      Τύπωσε "οκ"
}
Δοκιμή_Α

Όμως επειδή αυτή η  εντολή Αξίωση δεν θα παίξει σε τελικό πρόγραμμα θα το γράφαμε έτσι όπως παρακάτω, με δυο ετικέτες (100 και 200) είναι πιο συμμαζεμένος ο κώδικας. Στο δεύτερο Αν έχουμε το Αλλιώς μόνο, άρα κοιτάμε το αντίστροφο από αυτό που δίνει η συνθήκη στο Αν. Θα γραφόταν και έτσι Αν Όχι ηλικία>50 Τότε....

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

Τμήμα Δοκιμή_Α {
Ηλικία=0&
100 Εισαγωγή "Δώσε όνομα:";Όνομα$
Αν Όνομα$="" Τότε 100
200 Εισαγωγή "Δώσε ηλικία:", Ηλικία
Αν ηλικία>50 Αλλιώς Τύπωσε ">50": Προς 200
Τύπωσε "οκ"
}
Δοκιμή_Α

Μια παραλλαγή χωρίς ετικέτες. Η εντολή Έξοδος "χαλάει" τον δομημένο προγραμματισμό.

Τμήμα Δοκιμή_Α {
Ηλικία=0&
Επανέλαβε
Εισαγωγή "Δώσε όνομα:";Όνομα$
Όσο Όνομα$=""
Επανέλαβε
Εισαγωγή "Δώσε ηλικία:", Ηλικία
Αν ηλικία>50 Τότε Έξοδος
Τύπωσε ">50"
Πάντα
Τύπωσε "οκ"
}
Δοκιμή_Α

Για να είμαστε σωστοί ως προς τον Δομημένο Προγραμματισμό (χωρίς εντολή Έξοδος) πρέπει να μπει ή μια μεταβλητή ή στη θέση της μεταβλητής στη Μέχρι να μπει πάλι το ηλικία>50.

Τμήμα Δοκιμή_Α {
Ηλικία=0&
Επανέλαβε
Εισαγωγή "Δώσε όνομα:";Όνομα$
Όσο Όνομα$=""
οκ=ψευδές
Επανέλαβε
Εισαγωγή "Δώσε ηλικία:", Ηλικία
Αν ηλικία>50 Τότε
οκ=αληθές
Αλλιώς
Τύπωσε ">50"
Τέλος Αν
Μέχρι οκ
Τύπωσε "οκ"
}
Δοκιμή_Α


Στο αρχείο Info υπάρχει ένα τμήμα το NewAssert που δείχνει ένα συνδυασμό της Assert και της Stop. Η εντολή Stop σταματάει πρόσκαιρα την εκτέλεση και βγάζει στην κονσόλα όπου με exit συνεχίζει το πρόγραμμα. Μπορούμε όμως στο μεταξύ να αλλάξουμε τιμές σε μεταβλητές ή να φτιάξουμε μεταβλητές. Δηλαδή ενώ φαινομενικά γράφουμε στη κονσόλα, οι εντολές εκτελούνται στο κώδικα στο σημείο του Stop.



Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου