σύντομη περιγραφή: Παρακαλώ που ήρθατε στο μάθημα της πληροφορικής. Χαίρομαι πραγματικά που σας βλέπω εδώ. Ελπίζω να μπορέσουμε έτσι να συνεχίσουμε μέχρι το τέλος. Σήμερα, σύμφωνα με το πρόγραμμά μας, θα δούμε πράγματα που αφορούν, στο πρώτο μέρος, λογικές εκφράσεις, ιδιαίτεροι ενδιαφέροντος από το πρόγραμμά μας. Παρακαλώ που ήρθατε στο μάθημα της πληροφορικής. Χαίρομαι πραγματικά που σας βλέπω εδώ. Σήμερα, σύμφωνα με το πρόγραμμά μας, θα δούμε πράγματα που αφορούν, στο πρώτο μέρος, λογικές εκφράσεις, ιδιαίτεροι ενδιαφέροντος αυτές οι διαδικασίες, διότι είναι απαραίτητες για να μπορέσουμε να δουλέψουμε τις δομές μας. Και, στο δεύτερο μέρος, θα δούμε τις δομές αυτές καθ' αυτές. Ενώ, βέβαια, στο εργαστήριο που έχει προγραμματιστεί για αυτή την εβδομάδα, το αντικείμενό σας θα είναι δομές επανάληψης και ελέγχου. Στο χροναδέ, όσοι δεν έχετε δει ακόμη το θέμα και όσες παρακαλώ να το δείτε, διότι και εκεί θα βρείτε ένα έτημα το οποίο αφορά τη χρήση δομών. Λογικές εκφράσεις, λοιπόν. Τι είναι οι λογικές εκφράσεις? Αναπόσπαστο μέρος των δομών ελέγχου και όχι μόνο. Για την κατασκευή τους απαιτούνται δύο πράγματα. Οι τελεστές και οι τελεστέοι. Οι τελεστές είναι σχεσιακοί και λογικοί. Είναι οι operators, αν θέλετε, τον αγγλικό όρο. Και οι τελεστέοι είναι οι μεταβλητές, οι σταθερές. Είναι οι ποσότητες επί των οποίων λαμβάνουν χώρα οι ενέργειες των τελεστών. Για να δούμε όμως λεπτομέρειες. Έχουμε πρώτα απ' όλα τους σχεσιακούς τελεστές. Το όνομα το ίσιο μας εξηγεί ήδη σε πρώτη φάση το τι είναι και το τι κάνουν. Πρόκειται για τελεστές οι οποίοι επιτελούν συγκρίσεις σε σχέσεις. Πρόκειται λοιπόν για τον τελεστή της ισότητας, το διπλό ίσο, το οποίο συνεπάγεται πως η ποσότητα αριστερά του διπλού ίσων ελέγχεται ως προς το εάν είναι ταυτόσιμη η ίδια με την ποσότητα δεξιά του ίσων. Μπορείς να λέω ότι προφανώς δεν πρόκειται για ανάθεση. Είναι άλλο λοιπόν όταν θα πούμε χαπλό ίσον 5. Αναθέτω στη μεταβλητή χ την τιμή 5 ενώ το χ διπλό ίσον 5 είναι μία σύγκριση. Έχω το περιεχόμενο της μεταβλητής 5 και το συγκρίνω με την τιμή 5. Το αποτέλεσμα στην περίπτωση χρήσης των σχεσιακών σε τελεστών είναι πάντοτε μία λογική ποσότητα, μία λογική μεταβλητή που φέρει την τιμή είτε true είτε false, είτε αληθές είτε ψευδές. Η τιμή false με θερμηνεύεται από τον υπολογιστή σε 0 και η τιμή true σε 1. Άρα η απάντηση εδώ θα είναι 1 μετά την ανάθεση της τιμής χ ίσον με 5. Ο έλεγχος του εάν το χ φέρει την τιμή 5 συνεπάγεται πως το περιεχόμενο ελέγχεται ως προς την ισότητά του με το 5 αυτό θα γίνει και προφανώς είναι αληθές. Άρα το αποτέλεσμα θα είναι true. Με την ίδια λογική και θα δούμε πολλά παραδείγματα στη συνέχεια, γίνεται η χρήση του μικρότερου από, μικρότερου ή ίσο από, μεγαλύτερου από, μεγαλύτερου ή ίσου από και του όχι ίσο, που έχει αυτό το πολύ ενδιαφέροντα συμβολισμό, περισπομένη ίσον. Τώρα οι σχεσιακοί τελεστές προφανώς εμπλέκονται σε εκφράσεις με στόχο να ελέγχουν το περιεχόμενο της μεταβλητής αριστερά τους σε σχέση με κάτι που βρίσκεται δεξιά αυτών. Και όπως ήδη έχω πει, ο έλεγχος που γίνεται έχει μόνο δύο δυνατά αποτελέσματα, είτε true είτε false, τίποτε άλλο δεν μπορεί να συμβεί. Άρα, λοιπόν, κάθε φορά που θα βλέπουμε μπροστά μας αυτούς τους τελεστές, εμείς θα μεθερμηνεύουμε την ύπαρξη και τις πράξεις που γίνονται, ως το αιτούμενο του να γίνει μια σύγκριση με λογικό αποτέλεσμα. Είναι αληθές ή ψευδές αυτό το αποτέλεσμα της πράξης, το οποίο μπορεί να είναι μια απλή πράξη, μια απλή μορφή, ή κάτι σύνθετο. Θα δούμε. Δείτε λίγο αυτό. Α ίσον 4, Β ίσον 5, Α μεγαλύτερο ίσο του Β. Πώς το ερμηνεύουμε εδώ. Φέρουν δύο τιμές, η Α 4, η Β 5. Διεγονός, Α μεγαλύτερο ίσο του Β. Άρα, για τον υπολογιστή μας αυτό ερμηνεύεται ως εξής. Πηγαίνω και ελέγχω το περιεχόμενο της μεταβλητής αριστερά του τελεστή. Α. Ποια είναι η τιμή? 4. Το περιεχόμενο της μεταβλητής δεξιά του τελεστή, 5. Και αυτό που μου ζητά ο τελεστής να κάνω, να συγκρίνω εάν το περιεχόμενο της Α είναι μεγαλύτερο ίσο από το περιεχόμενο της Β. Υσχύει, αληθεύει? Στην περίπτωσή μας, με Α4 και Β5, είναι το Α μεγαλύτερο ίσο του Β. Είναι το 4 μεγαλύτερο ίσο του 5. Όχι. Άρα, η απάντηση που θα λάβουμε εδώ, εάν το πληκτρολογίσουμε, θα είναι τι, 0.1. 0. 0. Πολύ σωστά. Εδώ, Α ίσον 4, πάλι. Β ίσον 5, πάλι. Α διάφορο του Β. Προσέξτε, εδώ είναι μία άλλη σχέση αυτή που χρησιμοποιείται, η οποία μας ζητά απλά να συγκρίνουμε το περιεχόμενο αυτών των δύο, ως προς το εάν ταυτίζεται ή όχι. Είναι ίδιο ή είναι διάφορο. Εδώ είναι διάφορο. Άρα, είναι διάφορο του Β. Βεβαίως, είναι λοιπόν true, είναι αληθές, το ότι είναι διάφορο το περιεχόμενο του Α από το περιεχόμενο της Β. Το αποτέλεσμα, λοιπόν, θα είναι μονάδα. Έχω εδώ μία αριθμητική μεταβλητή, την μίτσος. Αναθέτω την τιμή μίτσος στη μεταβλητή Χ, όπως ακριβώς ανέθεσα την τιμή 5 στη μεταβλητή Χ. Ακριβώς τα ίδια πράγματα συμβαίνουν για τις συμβολοστηρές, για τις αλφαριθμητικού χαρακτήρα μεταβλητές. Το μόνο που αλλάζει είναι ότι λόγω της φύσης τους, ο υπολογιστής μας ζητά τις τιμές ενάμεσα σε εισαγωγικά. Αμέσως μετά ελέγχω το εάν το περιεχόμενο της μεταβλητής Χ είναι ίσο με μίτσος. Και μάλλον θα μας ξαφνιάσει το αποτέλεσμα και θεωρώ ότι θα μας ξαφνιάσει ευχάριστα. Πρώτα απ' όλα, τι είναι η μεταβλητή Χ, ίση με μίτσος προφανώς. Άρα το περιεχόμενο είναι αυτό που περιμένουμε, είναι true η σύγκριση. Μόνο που κοιτάξτε πώς γίνεται η σύγκριση. Στιχείο προς στοιχείο. Άρα, ελέγχεται το MITSOS της συγκρινόμενης τιμής ως προς το περιεχόμενο της Χ. Και για κάθε αληθές στοιχείο, η σύγκριση τρέχει και παράγει ένα αποτέλεσμα. Είναι true ή είναι false. Άρα λοιπόν, πώς μπορείτε να κάνετε μία σύγκριση που εάν ένα όνομα σε μία βάση δεδομένων είναι το ζητούμενο. Αν γνωρίζετε το μήκος του ονόματος σε χαρακτήρες έστω δέκα χαρακτήρες και τότε θέλετε να ελέγξετε αν το όνομα αυτό φέρει εδώ πέντε έξι χαρακτήρες, προσέξτε λίγο, αν ξέρατε ότι το περιεχόμενο της Χ είναι μία τιμή με έξι χαρακτήρες και σας έλεγα ότι το αποτέλεσμα της true αθρίζει έξι. Είμαστε σίγουροι-σίγουροι ότι το περιεχόμενο είναι μήτσος. Πρέπει δε να σας πω ότι η σύγκριση γίνεται στοιχείο προς στοιχείο, θέση προς θέση. Άρα λοιπόν, εφόσον το πρώτο στοιχείο είναι ένα, τότε σίγουρα ο πρώτος χαρακτήρες είναι σωστός. Εφόσον το δεύτερο στοιχείο είναι ένα, τότε σίγουρα ο δεύτερος χαρακτήρες είναι σωστός. Άρα το αποτέλεσμα της πράξης, εφόσον έχουμε συνολικό μήκος έξι, θα πρέπει να θρίζει έξι. Όπως εδώ, είναι ένας έμεσος έλεγχος, λοιπόν, περιεχωμένου μεταβλητών αρθαριθμητικού χαρακτήρα. Κοιτάξτε αυτό, επίσης ιδιαίτερο ενδιαφέροντος. Προσέξτε, έχω. Το διάνισμα α, το διάνισμα α φέρει τις τιμές από ένα έως τέσσερα. Α λοιπόν, ίσον με ένα, δύο, τρία, τέσσερα. Το διάνισμα β φέρει τις τιμές από τέσσερα, αρχική τιμή, τελική ένα, το δήμα μειών ένα. Άρα το διάνισμα β φέρει τις τιμές τέσσερα, τρία, δύο, ένα. Και εγώ βλέπω αμέσως μετά ότι ζητείται ο υπολογισμός αυτός. Ζητείται δηλαδή το να επιτελεστεί η σύγκριση ως προς το εάν το α είναι μεγαλύτερο του β. Επειδή όμως είναι διανείσματα, η σύγκριση, όπως στην περίπτωση του Μίτσου, θα γίνει στοιχείο προς στοιχείο. Είναι το ένα μεγαλύτερο του τέσσερα. Όχι, false. Είναι το δύο μεγαλύτερο του τρία, false. Είναι το τρία μεγαλύτερο του δύο, true. Είναι το τέσσερα μεγαλύτερο του ένα, true. Και επειδή βέβαια ο υπολογιστής μας αυτά τα αρμηνεύει σε μηδέν και ένα, περιμένω αυτό το αποτέλεσμα, το οποίο θα είναι και το αποτέλεσμα που θα λάβω. Άρα η απάντηση σε αυτή τη σύγκριση θα είναι μηδέν μηδέν, ένα ένα. Λοιπόν, τα ξέρω ότι τα δύο πρώτα στοιχεία του α δεν είναι μεγαλύτερα από τα αντίστοιχα του β, ενώ αντιθέτως το τρίτο και το τέταρτο στοιχείο του α είναι μεγαλύτερα από τα αντίστοιχα του β. Βλέπετε ότι έχει ενδιαφέρον και κάνει τη ζωή μας εύκολη. Περότιμα. Μπορούμε αυτή τη πράξη να την εκχωρίσουμε και να την εκχωρίσουμε και να την εκχωρίσουμε. Ρωτάω ως συναδεφό σας αν τη σύγκριση αυτή μπορούμε να την εκχωρίσουμε, και το αποτέλεσμα της σύγκρισης αυτής μπορούμε να το εκχωρίσουμε σε άλλο πίνακα ή μεταβλητή. Βεβαίως, ναι, όπως μπορούμε να κάνουμε για οποιαδήποτε άλλη πράξη σύγκριση. Ακριβώς όπως εδώ η εξορισμού μεταβλητή φέρει την τιμή answer, επειδή εμείς δεν δώσαμε κάποια. Άρα η answer είναι μια μεταβλητή. Έτσι θα μπορούσαμε να του πούμε βρασίδας, ίσον α μεγαλύτερο του β. Και ο βρασίδας θα ήταν ένας πίνακας, διάνισμα εδώ, με αυτές τις τέσσερις τιμές. Θα το δούμε στη συνέχεια. Βλέπουμε λοιπόν πόσο πιο εύκολα και άμεσα γίνονται συγκρίσεις, οι οποίες μέχρι τώρα, ακόμη και για εσάς που έχετε μία εξηγείωση, δεν γινόταν με τέτοιον τρόπο. Προσέξτε τώρα τι γίνεται όταν εμπλουτίσουμε τις συγκρίσεις μας με τους λογικούς τελεστές. Μέχρι τώρα βλέπαμε τους σχεσιακούς τελεστές. Άρα ίσο, μεγαλύτερο ίσο, μικρότερο ίσο και διάφορο. Τώρα πάμε να δούμε τους λογικούς τελεστές. Οι λογικοί τελεστές επιτελούν λογικές πράξεις. Έχουμε, για όσους από εσάς έχουμε ξανακάνει πληροφορικοί πράγματα γνωστά, δηλαδή τη λογική σύζευξη end, που συμβολίζεται με τη λέξη end και συμβολικά με το at. Τη λογική διάζευξη or, σε αυτή την περίπτωση η σύνταξη είναι or παρένθεση πρώτο και δεύτερο όρισμα, ή διαφορετικά η κάθετος. Έχουμε τη βραχυκυκλωμένη λογική σύζευξη και διάζευξη, για τις οποίες θα μιλήσω αργότερα, εξόχου ενδιαφέροντος. Έχω την λογική άρνηση και την αποκλειστική διάζευξη. Συνήθως από όλες αυτές, και ξαναλέω θα δούμε προφανώς παραδείγματα αμέσως μετά, χρησιμοποιούμε περισσότερο την βραχυκυκλωμένη σύζευξη, τη βραχυκυκλωμένη διάζευξη και τη λογική άρνηση με αντίστοιχα σύμβολα διπλή κάθετος και περισπομένη. Λίγη περισσότερη δουλειά σε σχέση με το πώς εργάζονται αυτές οι λογικοί τελεστές, πιστεύω θα βοηθήσουν. Προσέξτε λοιπόν τι έχουμε εδώ. Επιτρέψτε μου να αλλάξω πλευρά. Έχουμε την α και την β που φέρουν τιμές false-false, false-true, true-false, true-true. Βλέπουμε το αποτέλεσμα της πράξης που γίνεται για κάθε συνδυασμό. Άρα λοιπόν false-false αποτέλεσμα false, false-true αποτέλεσμα false. Άρα ψέμα και ψέμα αποτέλεσμα ψέμα. Ψέμα και αλήθεια αποτέλεσμα ψέμα. Αλήθεια και ψέμα αποτέλεσμα ψέμα. Αλήθεια και αλήθεια αποτέλεσμα αλήθεια. Η διάζευξη δουλεύει διαφορετικά. Ψέμα ή ψέμα αποτέλεσμα ψέμα. Ψέμα ή αλήθεια ένα από τα δύο τουλάχιστον είναι αλήθεια. Άρα το αποτέλεσμα εδώ είναι αλήθεια. Αλήθεια ή ψέμα επίσης εδώ το αποτέλεσμα είναι ένα γιατί τουλάχιστον ένα από τα δύο είναι αλήθεια. Αλήθεια ή αλήθεια αποτέλεσμα ένα. Λογική διάζευξη. Απιτρέστε μου να τη δούμε στο τέλος. Γιατί έχει ενδιαφέρον μια παραλλαγή σε σχέση με την απλή διάζευξη. Κοιτάξτε το όχι άλφα. Από τα δύο επέλεξα το άλφα. Εντάξει. Αν το άλφα είναι false το όχι άλφα είναι true. Και αν το άλφα είναι true το όχι άλφα είναι false. Συμβολισμός του όχι άλφα. Συμβολισμός. Τρόπος με τον οποίο γράφουμε αυτή τη διαδικασία λογικής σύγκρισης είναι το περισπομένη άλφα. Στο οκτέιβ και μόνο θαυμαστικό άλφα. Εκτός από την περισπομένη άλφα που ισχύει και στα δύο μόνο στο οκτέιβ ισχύει και το θαυμαστικό γι' αυτό το έχω γκριζαρισμένο. Είναι grey zone knowledge. Η αποκλειστική διάζευξη φέρει, έχει αυτό το αποτέλεσμα. Ποια είναι η λογική της αποκλειστικής διάζευξης. Αν τα δούμε αναλυτικά θα καταλάβουμε το εξής. Ψέμα ή ψέμα αποτέλεσμα ψέμα. Ψέμα αποκλειστική διάζευξη ψέμα το ίδιο αποτέλεσμα ψέμα. Αλήθεια ή αλήθεια αποτέλεσμα αλήθεια. Αλήθεια συγγνώμη ψέμα ή αλήθεια αποτέλεσμα αλήθεια. Ψέμα αποκλειστική διάζευξη αλήθεια αποτέλεσμα αλήθεια το ίδιο και εδώ. Αλλά αλήθεια ή αλήθεια αποτέλεσμα αλήθεια. Αλήθεια αποκλειστική διάζευξη αλήθεια αποτέλεσμα ψέμα. Η έννοια της αποκλειστικής διάζευξης είναι ακριβώς το ότι για να παράξει αληθές αποτέλεσμα πρέπει αποκλειστικά και μόνο ένα από τα δύο να είναι αληθές. Δεν μπορεί να φέρει αποτέλεσμα αλήθεια όταν και τα δύο είναι αληθεί. Αυτή λοιπόν είναι η διαφορά της αποκλειστικής διάζευξης. Χρησιμοποιείται κατά συνθήκες. Προσέξτε όμως τώρα τι γίνεται σε σχέση με τον τρόπο με τον οποίο αυτοί οι τελεστές χρησιμοποιούνται και τα αποτελέσματα που παράγουν. Έχουμε δύο περιπτώσεις. Συγκρίση στοιχείο προς στοιχείο μια που όλα είναι πίνακες όπως είπαμε στο MATLAB και σύγκριση δύο λογικών τιμών. Στην πρώτη περίπτωση στη σύγκριση στοιχείο προς στοιχείο οι τελεστές αποτελούν στοιχεία πίνακων γενισμάτων ή οτιδήποτε θέλουμε που να αποτελεί πίνακα. Ενώ στη δεύτερη περίπτωση οι τελεστές αποτελούν βάθμο τα μεγέκη. Είναι δηλαδή ουσιαστικά πίνακες στοιχεία. Να το δούμε πιο αναλυτικά διότι προφανώς αυτό από μόνο που δεν μας λέει περισσότερα πράγματα δεν μας κάνει τη ζωή ευκολότερη. Για να το δούμε λοιπόν. Εδώ. Σύγκριση στοιχείο προς στοιχείο. Για να κάνουμε σύγκριση πίνακων γενισμάτων στοιχείο προς στοιχείο χρησιμοποιούμε το και ή το η. Αποκλειστική τη σύζευξη και τη διάζευξη. Κάθε στοιχείο κρίνεται ως προς το εάν είναι 0 γίνεται σύγκριση στοιχείο προς στοιχείο και το αποτέλεσμα λοιπόν είναι 0 εάν η σύγκριση είναι false και είναι όχι 0, 1 λοιπόν, εάν η σύγκριση είναι true. Το αποτέλεσμα της σύγκρισης είναι ένας πίνακας διάνισμα, το βλέπουμε. Αυτό δεν κάναμε εδώ. Σύγκριση στοιχείο προς στοιχείο. Επίσης, απλά εδώ δεν είναι λογικός οτελεστής, είναι σχεσιακός οτελεστής. Το ίδιο πράγμα έκανε όμως. Σύγκρινε το ένα στοιχείο του α διανύσματος με το αντίστοιχο στοιχείο του β διανύσματος. Το αποτέλεσμα είναι ένας πίνακας, εδώ διάνισμα, που έχει μηδενικά και άσους με ίδιες διαστάσεις με αυτές των διανυσμάτων που συγκρίνονται. Να δούμε παραδείγματα. Απλά πράγματα πρώτα. Α ίσον 1, β ίσον 2. Λέω τώρα, προσέξτε, αρχίζω και χρησιμοποιώ συνθετά. Και υπάρχει λόγος για αυτό. Τους σχεσιακούς μου οτελεστές μαζί με τους λογικούς. Το α είναι μικρότερο του μηδενός και το β είναι μεγαλύτερο του τρία. Ή το β να είναι μεγαλύτερο του τρία. Όταν βλέπω συνδυασμένη χρήση τελεστών τότε, αρχίζω και υπολογίζω τετειμέρους θύματα αυτής της έκφρασης. Η έκφραση λοιπόν είναι α μικρότερο του μηδενός ή β μεγαλύτερο του τρία. α μικρότερο του μηδενός. Αληθεύει? α μικρότερο του μηδενός. Είναι σαν να λέμε 1 μικρότερο του μηδενός. Το αποτέλεσμα εδώ είναι true ή false. Άρα το πρώτο σκέλος είναι false. Έχω το η αμέσως μετά, β μεγαλύτερο του τρία. Άρα αυτό έχει τη λογική του δύο μεγαλύτερο του τρία. Είναι true ή false. Είναι και αυτό false. Ουσιαστικά λοιπόν η πράξη που βλέπω, η λογική σύγκριση που βλέπω, έχει τώρα πλέον τετραπεί στο false or false. Ποιο είναι το αποτέλεσμα του false or false? Είναι το false. Γι' αυτό και η απάντηση που θα εισπράξω είναι μηδέν. Να δούμε κάτι πιο μηχανολογικό. Έχω δύο δυνάμεις. Έχω, συγγνώμη, μία δύναμη, την F. Που έχει δύο συνισθώσεις. Μάλλον, λάθος μου, έχω τέσσερις δυνάμεις στο επίπεδο για να είμαι ακριβής. Και έχω τα διανύσματα των συνισθωσών κατά χ, ευχή, και τα συνισθωσών κατά ψ, ευψή. Άρα, λοιπόν, η πρώτη δύναμη είναι η μίον ένα π. Η F του χ είναι μίον ένα, η F του ψ είναι π. Σωστά, στη δεύτερη δύναμη έχω F του χ ίσον μηδέν, F του ψ ίσον μηδέν. Αντίστοιχα, η τρίτη δύναμη, F του χ ίσον ένα, F του ψ μηδέν. Η τέταρτη, F του χ και F του ψ μηδέν. Η πέντη, F του χ ίσον με πέντε, F του ψ ίσον με το μηδέν. Θα μπορούσε να προκύψει σε οποιοδήποτε πρόβλημα ένα τέτοιο set. Το ερώτημα που εδώ απαντώ είναι το εξής. Ποιες είναι οι δυνάμεις που έχουν και τις δύο συνισταμένες τους διαφορετικές του μηδενός, διότι με αυτόν τον τρόπο ξέρω ότι έχουν μέτρο μη μηδενικό και, για παράδειγμα, δεν κίνται επί των αξώνων H και ψ. Πώς μπορώ λοιπόν να απαντήσω σε αυτό το ερώτημα εδώ? Με τη χρήση του λογικού τελεστή end. Γιατί, διότι όπως είπαμε, όταν έχω διανύσματα, η χρήση των λογικών τελεστών συνεπάγεται πώς? Θα γίνει σύγκριση στοιχείο προς στοιχείο. Εγώ τι θέλω να κάνω, ας δούμε το αρχικό μου ερώτημα. Έχω ένα διάνυσμα ευτουχή με τέσσερις τιμές. Ένα διάνυσμα ευτουψή με τέσσερις τιμές. Και θέλω αναζεύγωστοιμών στις ίδιες θέσεις, επειδή αντιπροσωπεύουν την ευτουχή και την ευτουψή συνιστάμενες στις συνιστώσεις των αντίστοιχων δυνάμεων, να δω αν είναι μη μηδενικές. Άρα θέλω να δω εάν και οι αντίστοιχοι θέσεις στο διάνυσμα ευχή και οι αντίστοιχοι θέσεις στο διάνυσμα ευπψή καταλαμβάνονται από μη μηδενικές τιμές. Επειδή όμως έχω μελετήσει και είμαι πλέον πρωτοετής του Τμήματος Μηχαναλόγων και έχω περάσει μεγαλοπρεπώς το μάθημα, γνωρίζω ότι είναι ένας απλός θελεστής, ένας απλός λογικός θελεστής. Τον χρησιμοποιώ εδώ για να κάνω την εξής σύγκριση. Είναι αυτό διαφορετικό από το μηδέν και αυτό διαφορετικό από το μηδέν. Ναι ή όχι. Είναι αυτό διαφορετικό και αυτό διαφορετικό, άρα να το γράψουμε εδώ, γι' αυτό και σημαίνω πίνακας, να τα δούμε αναλυτικά. Επειδή υποπτεύομαι και ότι για καλό λόγο αυτό σας μπερδεύει λίγο ακόμη. Έχω λοιπόν το διάνυσμα ευθουχή και το διάνυσμα ευπψή. Το ευθουχή φέρει τις τιμές μειών 1, 0, 1, 0, 5. Το ευπψή φέρει τις τιμές π. Είναι το 3, 1, 4, 1, 5, 9 και τα λοιπά. 0, 0, 0, 1. Και θέλω να βρω τα ζεύγη άρα της δυνάμεις που έχουν συνολικό μέτρο μη μηδενικό και δεν κίνηται επί των αξώνων χ και ψ. Άρα λοιπόν η πράξη είναι η ευχή λογικό και ευπψή. Γιατί, διότι αυτή η πράξη όπως είπαμε λίγο πριν πηγαίνει και στοιχείο προς στοιχείο συγκρίνει ως προς τα αν αυτά τα περιεχόμενα είναι 0, 1. Είναι 0. Όχι. Άρα είναι true and είναι 0 ή όχι. Όχι. Άρα τι είναι? Έχει περιεχόμενο. Άρα είναι true. Έτσι ερμηνεύεται λοιπόν. Είναι 0 το στοιχείο σε αυτή τη θέση. Όχι. Άρα είναι true. Οπότε το end σε τι μετράζεται? True and true. Αποτέλεσμα 1. False and false. Αποτέλεσμα 0. True and false. Αλήθεια και ψέμα. Αποτέλεσμα 0. False and false. Αποτέλεσμα 0. True and true. Αποτέλεσμα 1. Αυτή θα είναι και η απάντηση που θα λάβουμε και θέλω λίγο να μείνουμε σε αυτό γιατί εάν το καταλάβουμε μετά όλα τα υπόλοιπα γίνονται πολύ πιο εύκολα. Άρα επιτρέψτε μου να το επαναλάβω και μετά να συζητήσουμε. Λέμε λοιπόν ότι η χρήση των λογικών τελεστών σε πίνακες και διανύσματα γίνεται με την ακόλουθη λογική. Συγκρίνονται διανύσματα και πίνακες πρώτα απ' όλα μόνο όταν έχουν τις ίδιες διαστάσεις των δύο στοιχείων. Άρα εάν είχαμε εδώ για παράδειγμα πέντε στοιχεία και εδώ συγκρίναμε με έναν διανύσμα που είχε τέσσερα στοιχεία δεν θα προκορούσε καθόλου η σύγκριση. Θα εισπράταμε ένα μήνυμα λάθος. Θα τελείωνε εδώ η ιστορία. Με το που γίνεται η σύγκριση αμέσως εμείς γνωρίζουμε ότι τουλάχιστον αυτά τα δύο διανύσματα φέρουν τον ίδιο αριθμό στοιχείων. Ένα. Από εκεί και πέρα πώς γίνεται η σύγκριση, άρα πώς χρησιμοποιούνται και με ποια λογική χρησιμοποιούνται οι λογικοί μας τελεστές, γίνεται ως εξής. Ελέγχεται η κάθε θέση ως προς το εάν η τιμή είναι μηδενική ή όχι. Αυτό είναι το μόνο που ελέγχεται. Εάν είναι μηδενική τότε παράγεται το αποτέλεσμα false, λογικό μηδέν. Εάν είναι μη μηδενική τότε παράγεται το αποτέλεσμα true, λογικό ένα. Άρα ο τρόπος με τον οποίο πρέπει εμείς να αντιλαμβανόμαστε την χρήση των λογικών τελεστών σε διανύσματα είναι το ότι παίρνουμε και κάνουμε τη σύγκριση στοιχείο προς στοιχείο και η λογική της σύγκρισης έχει να κάνει μόνο με το εάν η τιμή του στοιχείου είναι μηδενική ή όχι. Τίποτε άλλο δεν συγκρίνεται. Για αυτό το λόγο λοιπόν εδώ λέμε, είναι το πρώτο στοιχείο μηδενικό, όχι. Άρα είναι true, έτσι με θερμηνεύεται. Είναι το πρώτο στοιχείο του F2C μηδενικό, όχι. Άρα είναι επίσης true. Οπότε το αποτέλεσμα της πράξης είναι true and true. Τι θα παράξει, true. Είναι το πρώτο στοιχείο το αμέσως επόμενο του F2C μηδενικό, ναι. Άρα ποιο είναι το λογικό αποτέλεσμα, false και false, false και false, false. True and false, false. False and false, false. True and true, true. Βλέπετε λοιπόν πως με τη χρήση απλά και μόνο ενός λογικού τελεστή, τελείωσε μια σύγκριση που φαίνεται από την αρχή να μην είναι στοιχειώδης και τελικά θα λειτουργεί να είναι. Η οποία ήταν πια στοιχείο προ στοιχείο σύγκριση των περιεχομένων αυτών των διανισμάτων που αντιπροσωπεύουν τις συνισταμένες πέντε δυνάμες. Πρώτη, δεύτερη, τρίτη, τέταρτη, πέμπτη δύναμη στο επίπεδο. Ερωτήματα εδώ. Εδώ, εάν το περιεχόμενο, ναι, της κάθε θυμής, αυτό που συγκρίνουμε λοιπόν είναι το εάν το περιεχόμενο του στοιχείου, η τιμή του στοιχείου είναι 0 ή όχι. Θα το δούμε μετά, μπορούμε προφανώς να διαμορφώσουμε τη σύγκριση έτσι ώστε να ελέγχετε συγκεκριμένη τιμή. Εδώ το μόνο που με ενδιαφέρει είναι το αν είναι 0 ή όχι. Η χρήση, και γι' αυτό και σας το δείχνω αυτό το παράδειγμα για να σας επιδείξω, την χρήση της λογικής σύζευξης είναι όμια με τη λογική διάζευξη, όμοιο με το λογικό όχι, not, σε κάθε περίπτωση ελέγχετε το εάν η τιμή του στοιχείου είναι 0 ή όχι. Αυτό κάνει, ρωτάω ως συναδεφό σας, ρωτάω ως συναδεφό σας γιατί δεν ελέγχει 0 και είναι αυτό κάνει. Όταν χρησιμοποιούμε αυτή τη λογική διάζευξη δεν καταλαβαίνει τίποτα άλλο παρά μηδενικά και άσως. Όταν δει οποιαδήποτε τιμή εδώ την ερμηνεύει ως άσσο, απευθείας. Δεν κάνει κάποια αριθμητική πράξη, το μόνο που ελέγχει είναι 0 ή μηδενικό στοιχείο. Λοιπόν, η ερώτηση τώρα είναι αντίδια συζευξή αν είχαμε διάζευξη εκεί ισχύει ο πίνακας αυτός. Ακριβώς όπως εδώ, δηλαδή θα ήταν false αν και τα δύο είναι false, θα ήταν true εάν τουλάχιστον ένα από τα δύο είναι true και θα είναι true επίσης αν και τα δύο είναι true, τουλάχιστον ένα. Αυτή είναι η λογική της διάζευξης. Προφανώς χρειάζεται πειραματισμός και εξικίωση. Τώρα, άλλο παράδειγμα. Είδαμε εδώ το αποτέλεσμα. Εδώ τι γίνεται, ποιο πολύ πλοκοφαίνεται, ας το δούμε και πάλι. Επιτρέψτε μου να σβήσω. Έχω ένα διάνισμα με τιμές αρχική μη 5, τελική 5, το βήμα δεν εμφανίζεται άρα προφανώς είναι 1. Οπότε λοιπόν έχω το μη 5, μη 4, μη 3, μη 2, μη 1, μη 0, 1, 2, 3, 4, 5, α ίσον με μη 5, μη 4, μη 3, μη 2, μη 1, μη 0, 1, 2, 3, 4, 5 και ένα διάνισμα το β, το οποίο φέρει τιμές από 5 έως μη 5 με δίμα μη 1. Άρα είναι το 5, 4, 3, 2, 1, 0, μη 1, μη 2, μη 3, μη 4, μη 5. Κάνω και πράξεις επί αυτόν. Ερώτημα. Γιατί νόμισα, έτσι όπως έβαλα την Αγγίλη, ότι ήταν σκουπίδι στον πίνακα. Κάνουμε και πράξεις με τους πίνακες αυτούς. Τον α τον πολλαπλασιάζω με zeros 1,11. Τι σημαίνει αυτό? Ένα πίνακα λοιπόν με μία γραμμή και 11 στήλες, άρα διάνισμα γραμμή με μηδενικά. Σωστά? Τον πολλαπλασιάζω ή τον συγκρίνω? Συγκρίνω ρε εσείς. Άρα το αποτέλεσμα της σύγκρισης ποιο θα είναι? Προσέξτε α μεγαλύτερο του zeros, θα το γράψω αριστερότερα α μεγαλύτερο του zeros του 1,11. Ο zeros 1,11 είναι ένα διάνισμα ακριβώς ίδιον διαστάσμα με μηδενικά. Οπότε λοιπόν αυτή η σύγκριση είναι σύγκριση στοιχείο προς στοιχείο. Είναι το μη 5 μεγαλύτερο από το 0. Όχι. Να σας γράψω ποιο είναι ο zeros, γιατί μάλλον έτσι θα είναι καλύτερα τα πράγματα. Zeros του 1,11 είναι αυτό εδώ. 1,2,3,4,5,6,7,8,9,10,11. Και ας γράψω και τον 3 επί ones. Ο 3 επί ones του 1,11 ποιος είναι ο ones, αντίστοιχος πίνακας με άσους. Σωστά. Ο οποίος είναι λοιπόν 3 φορές όμως η καθετιμή. 3,3,3,3,3,3,3 και πάλι 3 και πάλι 3 και πάλι 3. 11 φορές. Έχουμε λοιπόν όλα τα συστατικά στοιχεία αυτής της σύγκρισης. Προσοχή τώρα. Άλφα μεγαλύτερο του zeros. Ποιο είναι το αποτέλεσμα, στοιχείο προς στοιχείο δεν είπαμε. Είναι το μειον 5 μεγαλύτερο του μηδέν. Όχι. Άρα γράφω εδώ το αποτέλεσμα της πράξης α μεγαλύτερο του zeros του 1,11. Είναι λοιπόν το μειον 5 μεγαλύτερο του μηδέν. Όχι. Άρα τι θα γράψω. Μηδέν. Το μειον 4 όχι. Το μειον 3 όχι. Το μειον 2 όχι. Το μειον 1 όχι. Το μηδέν είναι μεγαλύτερο από το μηδέν. Ναι, ναι, ναι, ναι, ναι. Αυτό είναι το αποτέλεσμα της πράξης για το αριστερό σκέλος σε σχέση με το 1. Β μεγαλύτερο του 3 επί μικρότερο, ευχαριστώ. Μικρότερο του 3 επί 1. Για να το δούμε. Β μικρότερο αυτού. Το 5 μικρότερο του 3 όχι. Το 4 μικρότερο του 3 όχι. Το 3 μικρότερο του 3 όχι. Το 2 μικρότερο του 1 και τα λοιπά. Όλα τα υπόλοιπα, ναι. 1, 1, 1, 1, 1, 1, 1, 1. Άρα τελικά το end τι θα κάνει. Θα πάει και στοιχείο προς στοιχείο θα ελέγξει αυτά τα δύο κακογραμμένα διανύσματα. Και θα κάνει την εξής σύγκριση. Μηδέν, end μηδέν. Αποτέλεσμα μηδέν. Μηδέν, end μηδέν, μηδέν. Μηδέν, end μηδέν, μηδέν. Μηδέν, end ένα, μηδέν. Μηδέν και ένα, μηδέν. Μηδέν και ένα, μηδέν. Και τα υπόλοιπα, true. Είδου το αποτέλεσμα. Με μία λοιπόν γραμμή και τώρα θα ήθελα να σκεφτείτε και εσείς που γνωρίζετε και έχετε ξανακάνει προγραμματισμό και εσείς που δεν έχετε ξανακάνει πόσο αλλιώς θα μπορούσα να τα κάνω όλα αυτά πιο κομψά και πιο συνοπτικά. Με μία γραμμή έχω πετύχει να συγκρίνω στοιχείο προσοχείο. Το αποτέλεσμα αυτής της σύγκρισης θα χρησιμοποιήσω ως αριστερό σκέλος μιας άλλης σύγκρισης. Να η πρώτη σύγκριση. Να η δεύτερη σύγκριση. Με το αποτέλεσμα μιας σύγκρισης που λαμβάνει χώρα δεξιά του end. Οπότε λοιπόν βλέπετε ότι υπάρχει και μία ιεράρχηση στις συγκρίσεις, έτσι δεν είναι. Προφανώς λοιπόν ολοκληρώνεται η σύγκριση αριστερά του end πρώτα ως σχεσιακός τελεστής και αριστερά και δεξιά του end και το αποτέλεσμα αυτών των συγκρίσεων αριστερά και δεξιά του λογικού τελεστή χρησιμοποιείται ως είσοδος του λογικού τελεστή. Ξανά, αυτό που συμβαίνει εδώ είναι το εξής. Έχω πόσες συνολικά συγκρίσεις. Τρεις. Πρώτη σύγκριση α μεγαλύτερη από το zero. Άρα στοιχείο προς στοιχείο ο α, ο πρώτος εκεί πάνω γραμμένος πίνακα στο διάνυσμα, εάν στοιχείο προς στοιχείο είναι μεγαλύτερος από μηδενικά. Δεύτερη σύγκριση αυτή που γίνεται δεξιά του λογικού end. Εάν το κάθε στοιχείο του διάνύσματος β είναι μικρότερο από τρία πρακτικά. Γιατί τρία επί ones σημαίνει τρία. Όλο το περιεχόμενο είναι τριάρια, το βλέπετε. Το αποτέλεσμα αυτών των δύο συγκρίσεων είναι αυτά τα δύο διάνύσματα. Και αυτά πλέον χρησιμοποιούνται στοιχείο προς στοιχείο συγκρινόμενα για να παραχθεί το τρίτο αποτέλεσμα. Άρα, οι συλλεστές ισχεσιακοί παράγουν ένα πρώτο αποτέλεσμα αριστερά του λογικού του end. Επίσης παράγουν ένα άλλο αποτέλεσμα δεξιά του λογικού end. Αυτά τα δύο αποτελέσματα αποτελούν τα στοιχεία εισόδου του λογικού end και χρησιμοποιούνται με τον τρόπο που είπαμε. Δεν υπάρχει κάτι διαφορετικό εδώ. Ερώτημα. Δεν είναι πάρα πολύ απλό. Θέλω όμως να μου πείτε αν υπάρχει κάτι που να σας δυσκολεύει έως προς τη λογική του. Και δεν είναι καθόλου κακό να το επαναλάβουμε. Αν βάζουμε μία τρίτη συγκρίση με μια ακόμα συλλευσία, τα υπηρεώτα ρωτά ο συνάδελφός σας πώς πηγαίνουν οι προτεραιότητες. Πρώτα απ' όλα λοιπόν, αν έχω πολλαπλές συγκρίσεις στη σειρά, εάν δεν υπάρχει οτιδήποτε άλλο παρενθέσεις και τα λοιπά που αμέσως ορίζουν τις προτεραιότητες, τότε όπως παντού, οι προτεραιότητες είναι από εριστερά προς τα δεξιά. Αναξαρτήτως, αυτό είναι καλό να γνωρίζουμε, λέει ο συνάδελφός σας, θα αλλάξει αυτό το αποτέλεσμα. Αν χρειαστεί να τις επαλειθεύσουμε διανοητικά και όχι μέσω του υπολογιστή. Βεβαίως, ακριβώς, ή μπορούμε να τα αναθέσουμε σε άλλες μεταβλητές. Παράδειγμα, όλο το αριστερό σκέλος θα μπορούσα να το ονομάσω ναβουχοδονόσωρα και όλο το δεξιό μέρος να το ονομάσω Μποτιτσέλη. Άρα λοιπόν, θα ελέγχω εάν ένα προς ένα τα στοιχεία του διανύσματος ναβουχοδονόσωρας είναι μεγαλύτερα σε σχέση, είναι μηδενικά ή όχι, σε σχέση με τα αντίστοιχα στοιχεία του διανύσματος Μποτιτσέλη. Ένα πιο μικρό, αλλά εσύ σου θεωρώ χρήσιμο παράδειγμα, έχω ένα μικρό διανύσμα εδώ, το Β, με τιμές 0-1-2-0. Το όχι Β, πώς με θερμηνεύεται? Απόψη. Δηλαδή, η έννοια του όχι, η έννοια του λογικού όχι. Εδώ έχουμε το λογικό όχι, η λογική άρνηση. Λέει λοιπόν ο συναδεθός σας το αποτέλεσμα, επιτρέψτε μου να εξηγήσω. Η έννοια της λογικής άρνησης είναι πως, στοιχείο προς στοιχείο πρώτα απ' όλα, τσεκάρω, ελέγχω το εάν έχω μηδενικό ή όχι. Είναι μηδενικό ή όχι, είναι μηδενικό, είναι δηλαδή false. Το όχι false σημαίνει true. Στη δεύτερη θέση του διανύσματος έχω μηδενικό, όχι. Άρα είναι true η δεύτερη θέση. Το όχι true false. Στην τρίτη θέση έχω μηδενικό, όχι. Έχω τη τιμή 2. Άρα η τρίτη θέση ισοδυναμή με τη λογική τιμή true. Όχι true false. Να το μηδενικό στην τρίτη θέση. Στην τέταρτη θέση έχω τη τιμή 0. Ισοδυναμή με τη λογική τιμή false. Το όχι false μου δίνει true. Άρα 1. Ιδού το αποτέλεσμα λοιπόν και έτσι μπορούμε να ελέγξουμε πολλά πράγματα ταυτόχρονα. Ερώτημα. Βεβαίως. Λοιπόν, η έννοια του λογικού όχι, της λογικής άρνησης, είναι πως πηγαίνω, είμαι η λογική άρνηση, εφαρμόζομαι ως τελεστής επί των στοιχείων του τελεστέου, εδώ ο τελεστέος είναι ένα διανύσμα το β, και πηγαίνω στοιχείο προς στοιχείο και το βλέπω. Τι είσαι εσύ, είσαι true ή false? Και πως καταλαβαίνω εγώ η λογική άρνηση, το true ή το false, ελέγχω μόνο μήπως είναι μηδέν. Είσαι μηδέν, είσαι false. Είσαι οτιδήποτε άλλο βρε αδερφέ, είσαι true. Δεν εξετάζω το τι άλλο είσαι. Το ίδιο θα συνέβαινε εάν στη θέση των αριθμητικών δεδομένων είχαμε γράμματα, είχαμε αλφαριθμητικές μεταβλητές. Διότι ένα στοιχείο τι μπορεί να έχει ως περιεχόμενο. Μια αριθμητική τιμή, μία λογική τιμή, μία αλφαριθμητική τιμή, όλα με θερμηνεύονται σε ή μεταφράζονται από τον τελεστή σε λογικές τιμές. Είσαι μηδέν, είσαι false ή είσαι οτιδήποτε άλλο, άρα είσαι true. Είσαι μηδέν, είσαι false, μάλιστα. Εγώ είμαι ο τελεστής, όχι αυτό που είσαι. Αφού είσαι false θα παράξω το αποτέλεσμα true. Άρνηση αυτού που είσαι. Αρνούμαι αυτό που είσαι, είσαι true, θα παράξω false. Αρνούμαι αυτό που είσαι, είσαι true, θα παράξω false. Αρνούμαι αυτό που είσαι, είσαι false, θα παράξω true. Αυτό λοιπόν είναι το αποτέλεσμα της άρνησης. Και βέβαια το όχι-όχι-βήτα είναι το αντίθετο από πριν. Άρα αν εδώ έχουμε 1-0-0-1 στο όχι-βήτα, το όχι-όχι-βήτα μοιάζει ακριβώς με τη γλώσσα μας. Όταν χρησιμοποιούμε διπλές αρνήσεις ουσιαστικά έχουμε κατάφαση. Σωστά, διπλή άρνηση, όχι του-όχι-βήτα, κατάφαση. Τριπλή άρνηση, άρνηση, τετραπλή άρνηση, πάλι κατάφαση. Και βέβαια η χρήση του τελεστή διάφορο του μηδενός που όπως καταλαβαίνετε παράγει το αναμενόμενο αποτέλεσμα. Εδώ κοιτάξτε τι κάνω όμως, χρησιμοποιώ έναν λογικό ή έναν σχεσιακό τελεστή. Το διάφορο του μηδενός τι είναι? Κάνει πράξεις, συγγνώμη, ελέγχει αποτέλεσμα αριθμητικό και συγκρίνει. Είναι σχεσιακός τελεστής. Τι αποτέλεσμα θα παράξει το διάφορο του μηδενός, ελέγχει δηλαδή στοιχείο προς στοιχείο, το εάν το περιεχόμενο του βήτα είναι ή όχι μηδέν. Κάνει ακριβώς το ίδιο πράγμα που κάνει το όχι βήτα. Άρα το ίδιο αποτέλεσμα θα παράξει. Και λίγο πριν το διάλειμμα, γιατί έχουμε αρχίσει να ζαλιζόμαστε από τα λογικά, ναι, όχι και τα λοιπά, δύο διανύσματα απλά και μόνο για να επιδειχθεί ο τρόπος με τον οποίο δουλεύει η αποκλειστική διάζευξη. Το 0123, αυτό πρέπει να είναι το πραγματικό τελεστή. Αυτό πρέπει να το γράψω για να το δούμε στοιχείο προς στοιχείο. Έχω λοιπόν ένα διάνισμα εδώ με αριθμητικές τιμές. Για να το πούμε. Έχω το α με τιμές 0123 και το διάνισμα β, που φέρει τις τιμές 0120. Η αποκλειστική διάζευξη διαφοροποιείται ως προς την κανονική διάζευξη, ως προς το ότι ένα από τα δύο πρέπει να είναι true για να παραχθεί το true. Άρα η λογική διάζευξη, να θυμίσω η or και η xor, εάν το α και το β είναι false, false, true, false, false, true, true, true. False ή false? False. True ή false? True. False ή true? True. True και true? True. False με την αποκλειστική διάζευξη. True ή false? True. False ή true? True. True ή true? False. Είναι αποκλειστική διάζευξη. Θέλει ένα από τα δύο να ισχύουν. Σας το θυμίζω το πίνακα εδώ. Νάτο. Οπότε, λοιπόν, έχοντας αυτό κατά νου, για να δούμε το α, xor, β, τι παράγει. Εδώ είμαστε. Και για να δούμε και το πώς συντάσσεται. Δεν υπάρχει σύμβολο εδώ, άρα είναι xor του αποκλειστική διάζευξη α, β μέσα σε παρένθεση. False ή false. Εδώ η λογική πάντοτε είναι είσαι μηδέν ή όχι. False ή false? False. True ή true? False. True ή true? False. True ή false? True. Νάτο. Αυτή, λοιπόν, είναι η διαφορά. Είμαστε, λοιπόν, μετά την στιγμή όπου παρουσιάστηκαν συντελεστές σχεσιακοί, τελεστές, συγγνώμη, σχεσιακοί και λογικοί, έχουμε δει μια σειρά από παραδείγματα εξηγώντας σιγά σιγά τον τρόπο με τον οποίο αυτοί οι τελεστές χρησιμοποιούνται. Θα θυμάστε ότι πριν από το διάλειμμα είχαμε ορίσει δύο διανύσματα α και β και διερευνούμε τον τρόπο με τον οποίο οι λογικοί τελεστές επενεργούν με τον περιεχομένο των γενισμάτων αυτών και παράγουν τα αποτελέσματά τους. Εδώ, στη συνέχεια του παραδείγματος που σταμάτησε πριν το διάλειμμα, έχουμε την λογική διάζευξη και τους δύο τρόπους γραφής αυτής. Αν χρησιμοποιήσουμε την εντολή, αν θέλετε, τότε μέσα σε παρένθεση τοποθετούμε τα ορίσματα. Μπορεί να είναι δύο ή περισσότερα. Διαφορετικά χρησιμοποιούμε ως τρόπο γραφής την κάθετο, η οποία μεταφράζεται στο α ή β. Άρα, πάλι στοιχείο προς στοιχείο, ελέγχετε το περιεχόμενο των γενισμάτων α και β, ώστε αν είναι μηδέν ή όχι. Και ανάλογα προχωρούμε. Εδώ λοιπόν, μηδέν και μηδέν, false και false έχω. Άρα, η πράξη είναι false or false, το αποτέλεσμα θα είναι false. False or false, το αποτέλεσμα θα είναι false. Αμέσως μετά έχω... Είναι μηδέν, όχι, άρα είναι true. Είναι μηδέν, όχι, άρα είναι πάλι true. True or true, αποτέλεσμα true. Είναι μηδέν, όχι, άρα true. Είναι μηδέν, όχι, άρα επίσης true. True or true, αποτέλεσμα πάλι true. Και με τον ίδιο τρόπο, true or false, αποτέλεσμα... True or false, true. Αυτό το αποτέλεσμά μας. Να δούμε απλά, παρακαλώ, και τη χρήση του end εδώ, στο ίδιο παράδειγμα, και αμέσως μετά ερωτήσεις επί του συνόλου. Ως προς τον συμβολισμό που ρωτάει η συφητήτριά σας, προφανώς εγώ έχω προσθέσει και τους δύο τρόπους, έναν από τους δύο θα χρησιμοποιήσετε εσείς. End, λοιπόν, μέσα σε παρένθεση τα ορίσματα, ή με τη χρήση του σχετικού συμβόλου. Το αποτέλεσμα επίσης εδώ μπορεί να προβλεφθεί και είναι το 0-1-1-0. Προσέξτε όμως τώρα τι γίνεται. Έχουμε ολοκληρώσει τους τελεστές τους λογικούς, οι οποίοι εφαρμόζονται επί διανισμάτων και ελέγχου στοιχείο προς στοιχείο, το εάν το περιεχόμενο είναι true ή false, αν είναι διαφορετικό του 0 ή 0. Προσέξτε όμως τι γίνεται όταν θέλω να συγκρίνω δύο λογικές τιμές. Δεν θέλω να συγκρίνω διανύσματα, αλλά λογικές τιμές. Αυτό το κάνω χρησιμοποιώντας τα λεγόμενα βραχυκυκλωμένη σύζευξη και διάδευξη. Εδώ, αριστερά και δεξιά του τελεστή, δεν μπορώ να έχω παρά μόνο μία τιμή false ή true. Δεν μπορώ να έχω λοιπόν διανύσματα τα οποία να με θρημινεύονται σε περισσότερες από μία τιμές. Και η σύγκριση παράγει το αποτέλεσμα που αναμένουμε. Για ποιο λόγο χρησιμοποιούμε κάτι τέτοιο? Πιστεύω ότι είναι το πιο λογικό ερώτημα. Τι στο καλό θέλουμε την βραχυκυκλωμένη σύζευξη ή διάδευξη, αφού μπορούμε την ίδια δουλειά να την κάνουμε και με την απλή σύζευξη και διάδευξη. Η βραχυκυκλωμένη σύζευξη και διάδευξη έχει την εξής διαφορά. Το δεύτερο μέρος, δηλαδή η παράσταση δεξιά του τελεστή, υπολογίζεται, πρακτικά την βλέπει ο υπολογιστής, αποτιμά την τιμή της, μόνο εφόσον δεν μπορεί να προκύψει το αποτέλεσμα της πράξης, απλά κοιτώντας το αριστερό σκέλος. Δηλαδή, σκεφτείτε την απλή διάδευξη. Εδώ, όταν έχουμε false ή true, και εδώ όταν έχουμε true ή false, θα πρέπει να ελεγχθεί το σκέλος αριστερά του τελεστή, σε αυτή την περίπτωση. Έστω ότι έχω το α, πόσο συμβολίζω το ο, κάθετος β. Μάλιστα. Και είμαι σε αυτά τα ζεύγη τιμών. Αυτό που θα κάνει ο υπολογιστής μου είναι το εξής. Θα πάει και θα δει την τιμή του α. Εάν είναι ήδη υπολογισμένο από πριν, θα δει αν είναι true ή false. Εάν όχι, με τα παραδείγματα που κάναμε πριν από το διάλειμμα, βλέπουμε πώς μπορεί να προκύψει αυτή η περίπτωση. Θα πρέπει να υπολογιστούν παραστάσεις και μετά να αποτιμηθεί το αν η παράσταση είναι true ή false. Θα υπολογιστεί λοιπόν το α. Εδώ θα προκύψει ότι είναι true. Θα υπολογιστεί το β. Θα προκύψει ότι είναι false και μετά θα τρέξει η πράξη. True ή false με αποτέλεσμα true. Η βραχικυκλωμένη διάζευξη θα πει ότι απλά και μόνο επειδή το πρώτο σκέλος, το α, είναι true, ό,τι και είναι το δεύτερο, το αποτέλεσμα δεν θα είναι true. Είτε είναι true, είτε είναι false όπως εδώ, είτε είναι true όπως εδώ, το αποτέλεσμα δεν θα είναι true της πράξης. Δεν θα το δει καθόλου το δεύτερο σκέλος λοιπόν. Δεν θα δει καθόλου το β. Δεν θα το υπολογίσει καθόλου. Πράγμα που σημαίνει ότι γλιτώνουμε χρόνο υπολογισμού. Βέβαια, ρωτάω στην αδερφό σας αν υπάρχει άλλο πλεονέκτημα πέραν της εξοικονόμησης χρόνου. Αυτό. Κοιτάξτε αυτό το παράδειγμα. Θα ήθελα εγώ, εδώ για παράδειγμα, να υπολογίσω την τιμή του χ, έτσι, στην περίπτωση που το α είναι διαφορετικό από το μηδέν και το α δια β είναι μεγαλύτερο του 18,5. Αυτό μπορεί να σας θυμίσει ένα άλλο παράδειγμα. Σκεφτείτε ότι έχουμε τη δευτεροβάθμη εξίσωση. Και θα ήθελα εγώ να υπολογίσω τη ρίζα της εξίσωσης. Ας γράψω μία από τις ρίζες. Χ2, ας πούμε, ίση με 2α μειον β μειον θετραγωνική ρίζα της διακρίνου σας. Σωστά. Θέλω, λοιπόν, εγώ να υπολογίσω την ρίζα μόνο για την περίπτωση, να προχωρήσω, δηλαδή, στον υπολογισμό της ρίζας, στην περίπτωση που το α είναι διάφορο του μηδενός. Άρα, λοιπόν, θέλω σε μία λογική σύγκριση να εντάξω και αυτόν τον έλεγχο και τον υπολογισμό της ρίζας, όπως και εδώ. Σε αυτήν εδώ την περίπτωση, σε αυτό το παράδειγμα, ποιο θα είναι το αποτέλεσμα. Για δείτε το λίγο. Λέμε α διάφορο του μηδενός. Είναι true ή false? Είναι true. Αδ μεγαλύτερο του 18,5. Είναι true ή false? Είναι false. True, βραχυκυκλωμένη διάζευξη, false. Τι σημαίνει αυτό? True, βραχυκυκλωμένη διάζευξη, δεν με νοιάζει τίποτα. Είναι true ή false εδώ. Αν είδαν και true ή true, το αποτέλεσμα πάλι ποιο θα ήταν? True. Άρα το χ είναι true ανεξαρτήτως της δεύτερης τιμής. Εντάσσοντας τέτοιους ελέγχους... Ωπ, σύζευξη εδώ. Ευχαριστώ. Γιατί διάζευξη, αφού έχουμε και και εγώ δεν το βλέπω. Άρα, εδώ βραχυκυκλωμένη σύζευξη, οπότε στην σύζευξη θέλουμε και τα δύο και θα υπολογιστούν και τα δύο. Αν είχαμε διάζευξη, τι θα συνέβαινε? Θα προχωρούσε με τελική τιμή του χ. Ξανά. Αυτό είναι false. Το πρώτο σκέλος, αριστερά του τελεστή είναι false. Το σκέλος, αριστερά του τελεστή είναι true. Δεξιά του τελεστή είναι false. Άρα, έχω true βραχυκυκλωμένο or false. Το αποτέλεσμα θα είναι true. True βραχυκυκλωμένο και false. Αποτέλεσμα false. Η διαφορά, λοιπόν, έγκειται στο ότι μας δίνει τη δυνατότητα να προβούμε στην υπολογισμό παραστάσεων υπό συνθήκη. Και πολλές φορές αυτό μας βολεύει, όταν θέλουμε να αποφύγουμε διαιρέσεις με το μηδέν, οι οποίες παρισφρύουν σε υπολογισμούς, μπορεί να καταστήσουν ένα πρόγραμμα δυσλειτουργικό. Αυτό είναι το αποτέλεσμα εδώ. Και το παράδειγμα που είχα κατά νου, έστω ότι θέλω να υπολογίσω αυτό το χ, μόνο στην περίπτωση που ο κορονομαστής δεν είναι μηδέν και διακρίνωσα μεγαλύτερα από το μηδέν. Τότε τι θα μπορούσα να κάνω, όλο αυτό τον υπολογισμό να τον βάλω να τρέχει μόνο στην περίπτωση που θα ήταν true αυτός ο διπλός έλεγχος. Όλα αυτά είναι αρκετά. Είναι όλα όσα έχουμε. Δεν είναι όλα όσα έχουμε. Έχουμε κι άλλα, για όσους τυχόν έχουν όρεξη για περισσότερο και πιστεύω ότι όλοι είσαστε σε αυτό το πνεύμα. Εκτός λοιπόν από τις λογικές εκφράσεις και εκτός από τους σχεσιακούς τελεστές και τους λογικούς τελεστές, έχουμε και λογικές συναρτήσεις. Θα μου πείτε τι είναι αυτό. Για να πάμε παρακάτω καλό είναι να συνοψήσουμε. Είδαμε ότι οι τελεστές σχεσιακοί μας δίνουν τη δυνατότητα να συγκρίνουμε ποσότητες δεξιά και αριστερά του τελεστή, ώσποστε αν είναι ίσες μεταξύ τους ή μία μεγαλύτερη της άλλης, διαφορετικές μεταξύ τους, ή επίσης μπορούμε να συγκρίνουμε το αν μια ποσότητα είναι ή δεν είναι αληθής. Οι λογικές πράξεις που κάνουμε με τους λογικούς τελεστές μας δίνουν τη δυνατότητα να εφαρμόσουμε λογική σύζευξη ή διάζευξη, αποκλειστική διάζευξη, όπως επίσης και να συνδυάσουμε, εφόσον μαζί λειτουργήσουμε και με σχεσιακούς και με λογικούς τελεστές, μπορούμε να έχουμε ένα σύνολο από πράξεις με παραστάσεις αριστερά και δεξιά των τελεστών, που αποτιμώνται μία προς μία. Το επόμενο που είδαμε και που είναι σημαντικό είναι ότι όταν θέλουμε να κάνουμε πράξεις στοιχείο προς στοιχείο, χρησιμοποιούμε απλές λογικές σύζευξης, διαζεύξεις γενικά τους λογικούς τελεστές. Οι λογικοί τελεστές πάντοτε, μπορώ να το πω και ανάποδο, γιατί και έτσι ισχύει, οι λογικοί τελεστές πάντοτε εφαρμόζονται επί διανισμάτων ή πινάκων στοιχείο προς στοιχείο και παράγουν ως αποτέλεσμα. Διανισμάτων ή πίνακων ακριβώς όμοιος σε διαστάσεις με αυτά που συγκρίνονται, με στοιχεία 0-1 ανάλογα με το αν η σύγκριση στοιχείου προς στοιχείο οδηγεί σε false ή true. Ενώ οι βραχυκυκλωμένοι λογικοί τελεστές, σύζευξη-διάζευξη, παράγουν μόνο μία τιμή, true ή false. Έχουμε όμως, όπως είπαμε, και άλλα. Επιπρόσθετο τους λογικούς τελεστές και σχετικές εντολές, η ALL ελέγχει αν όλα τα στοιχεία ενός πίνακα είναι μη μηδενικά ή όχι. Άρα, αν είναι μη μηδενικά είναι true. Η EN είναι κάποια από τα στοιχεία ενός πίνακα μη μηδενικά, δηλαδή είναι κάποια true. Η FALSE δίνει τη τιμή 0, λογικό 0, λογικό ψεύδος. Η FIND εξαιρετική και θα δούμε αμέσως μετά το πώς χρησιμοποιείται. Απίστευτη συνάρτηση. Κάνει απίστευτα πράγματα. Βρίσκει θέσεις και τιμές μη μηδενικών στοιχείων. Είναι εντολές που τις χρησιμοποιούμε όπως και τις ζήνους, κόζινους κτλ. Τεταγωνική ρίζα. Είναι σχετικές εντολές παύλα συναρτήσεις. IS LOGICAL είναι λογικός πίνακας, είναι το περιεχόμενο λογική μεταβλητή. LOGICAL μετατρέπω αριθμητικές τιμές σε λογικές. Γιατί, προσέξτε, έχω το α ίσον 1. Το α λοιπόν λαμβάνει την τιμή 1. Είναι η τιμή αυτή το αριθμητικό 1 ή το λογικό 1. Εξ ορισμού είναι το αριθμητικό 1. Αν όμως θέλω να γίνεται αντιληπτή ως LOGICAL 1, τη μετατρέπω σε LOGICAL με τη χρήση της LOGICAL. True. Επίσης, δείτε λίγο την FIND όμως. Μας δίνει τη δυνατότητα να βρούμε τα στοιχεία ενός πίνακα ή ενός διανύσματος. Πίνακας είναι ένα διάστατο, τουλάχιστον, διάνισμα. Διανύσμα είναι ένα πίνακας μονής διάστασης. Μας δίνει τη δυνατότητα να βρούμε στοιχεία ενός πίνακα που πληρούν μία λογική συνθήκη. Και η σύνταξη είναι FIND, λογική έκφραση. Επιστρέφει μία λίστα από θέσεις του πίνακα για τις οποίες ισχύει η λογική έκφραση. Και το παράδειγμα βεβαίως, μη τυρπάσεις μαθήσεως, πιστεύω ότι είναι χαρακτηριστικό. Θα σβήσω γιατί θα μας χρειαστεί ο πίνακας. Δείτε λίγο αυτό. Πες του ότι έχω τις 100 καταναλώσεις ηλεκτρικής ενέργειας, θέλετε βιομηχανικών μονάδων, νοικοκυριών, σχολείων, δημόσια κτιρίων, ό,τι εσείς θέλετε. Με ενδιαφέρει να βρω τις καταναλώσεις που ανήκουν στο υψηλότερο ποσοστό, στο υψηλότερο 16%, 15% των καταναλώσεων. Το έκλειψα από ένα σχολικό σας βιβλίο. Άρα λοιπόν, τι με ενδιαφέρει, έχω τις καταναλώσεις μου, τις οποίες θεωρώ τυχαίες μεταβλητές και ως τυχαίες θα ακολουθούν, σύνηθες αυτό, την κανονική κατανομή. Αυτό είναι πολύ σύνηθες φαινόμενος στην μηχανολογία και στην μηχανική γενικά, μεγέχει πειραματικά καταγραφές να ακολουθούν την κανονική κατανομή. Και εγώ ενδιαφέρομαι για το 15% των υψηλότερων καταναλώσεων. Έχει μια λογική, να δω ποιοι είναι αυτοί που καταναλώσουν, πόσοι είναι αυτοί που καταναλώνουν περισσότερο. Από τις γνώσεις μου τις λυκιακές, δεν χρειάζεται καν να είμαι φοιτητής το πρώτο έτος, γνωρίζω ότι αν όλα αυτά ισχύουν, τότε το υψηλότερο 15% βρίσκεται στις καταναλώσεις που απέχουν τουλάχιστον μία τυπική απόκλυση πάνω από τη μέση θυμή. Εκεί βρίσκονται στις θέσεις πάνω από μία τυπική απόκλυση πέραν της μέσης θυμής. Δηλαδή αν εδώ είναι η μέση θυμή, θυμάστε ότι σύμπλιν, δεν χρειάζεται να το θυμώσετε, σύμπλιν της μέσης θυμής έχω περίπου το 7% των θυμών, σωστά. Άρα στα υπόλοιπα, στις σουρές της κανονικής κατανομής έχω το υπόλοιπο 30. Αρισταρά και δεξιά λοιπόν έχω 15. Αλλά θέλω το ανώτερο 15. 16. Δεν θα τα χαλάσω. Άρα λοιπόν έχω αυτές τις 100 πραγματικές καταναλώσεις. Προέκυψα, ξαναλέω, από μετρήσεις και με ενδιαφέρει να βρω τις καταναλώσεις αυτές που είναι μεγαλύτερες από τη μέση θυμή, κατά τουλάχιστον μία τυπική απόκλυση. Βρίσκονται δηλαδή σε αυτό το τμήμα. Πώς θα το έκανα σε επίπεδο αλγορίθμου. Τι θέλω εγώ. Πρώτα απ' όλα, εδώ θα χρησιμοποιήσω τυχαίους αριθμούς για να προσωμιώσω αυτό το πείραμα, αυτή τη διαδικασία. Έστω λοιπόν, 100 τυχαίοι αριθμοί. Να πως μεταφράζεται το πρόβλημά μου. Είναι ένα διάνυσμα. Σε ποιες θέσεις του διανύσματος βρίσκονται οι τιμές, οι αριθμοί που έχουν τιμές μεγαλύτερη από τη μέση θυμή, συντυπική απόκλυση. Αυτό δεν είναι το πρόβλημά μου. Σας είπα από την αρχή και έτσι πρέπει να δουλεύουμε ότι η βασική μας δουλειά είναι να μεταφράζουμε το πρόβλημα σε κάτι που μαθηματικά και φυσικά είναι κατανοητό και διατυπώσιμο. Το εικό μας πρόβλημα ήταν 100 καταναλώσεις, πόσες από αυτές είναι μεγαλύτερες από τη μέση θυμή, κατά τουλάχιστον μια τυπική απόκλυση. Το μεταφράζω έτσι, είναι ισοδύναμο πρόβλημα. Χρησιμοποιώ εδώ την Rand n, μια εγγενή συνάρτηση στο MATLAB, η οποία μου δίνει τη δυνατότητα να δημιουργήσω τυχαίους αριθμούς. Και μετά τι κάνω. Άντε και έφτιαξα τις 100, η Rand n απλά με όρισμα 1,100 θα δημιουργήσει ένα διάνισμα με μία γραμμή και 100 στήλες. Διάνισμα γραμμή. 100 τιμές. Έστω ότι αυτές θα την προσωπεύω, ξέρω βέβαια ότι η Rand n εκφύσεως και εκπεπιθύσεως έχει μια μέση θυμή συγκεκριμένη και μια τυπική απόκλυση συγκεκριμένη. Έχει μέση θυμή 0 και τυπική απόκλυση 1. Τι κάνω μετά. Διάφορα πράγματα μπορώ να κάνω. Πρέπει να βρω έναν τρόπο το ερώτημά μου το εκφρασμένο σε ανθρώπινη γλώσσα να το μεταφέρει σε ερώτημα που αλγοριθμικά, άρα μιας διαδικασίας βήμα προς βήμα στη βαρύς υπολογιστικά θα τρέχει. Πώς το καλό το κάνω αυτό. Θέλω, εγώ θέλω από τις 100 τιμές του πίνακά μου, του διανύσματός μου να βρω τις τιμές εκείνες για τις οποίες ισχύει πως είναι μεγαλύτερες από τη μέση τιμή στην τυπική απόκλυση. Άρα πρώτα απ' όλα τι πρέπει να κάνω. Να υπολογίσω τη μέση τιμή και την τυπική απόκλυση. Επειδή τώρα όμως πλέον δεν είμαι στην τρίτη ηλικίου, αλλά στο πρώτο έτος. Γνωρίζω ότι έχοντας παρακολουθήσει τα μαθήματα της πληροφορικής με πάθος, υπάρχουν συναρτήσεις εγγενείς. Άρα δεν χρειάζεται να μπω στον κόπο και να ταλαιπωρηθώ να φτιάξω πρόγραμμα που θα υπολογίζει τη μέση τιμή και την τυπική απόκλυση. Διότι υπάρχει η συναρτήση μήν, που σημαίνει μέση τιμή, όσων πραγμάτων βάζω μέσα σε μια παρένθεση, μήν του α όλων των στοιχείων του πίνακα α και τελείωσα, όμορφο δεν είναι. Και υπάρχει και η STD, standard deviation. Άρα με τη χρήση δύο εγγενών συναρτήσεων έχω υπολογίσει τη μέση τιμή και την τυπική απόκλυση. Ερώτημα. Παράγω τους 100 τυχαίους αριθμούς μου. Αυτό κάνω. Η χρήση της Rand1 εδώ δεν έχει καμία άλλη στόχευση από το να παράξει 100 τυχαίους αριθμούς. Θέλω 100 τυχαίους αριθμούς για να προσωμειώσω τις 100 τυχαίες μου καταναλώσεις. Και αυτό κάνω χρησιμοποιώντας την Rand. Ερώτημα. Αν θέλουμε να είμαστε ακριβείς προφανώς θα βάλουμε χ. Βεβαίως. Τώρα έχω υπολογίσει τη μέση τιμή και την τυπική απόκλυση του διανύσματος χ με τις 100 τιμές. Ερώτημα εδώ. Άρα εγώ, βεβαίως, ρωτάει στην αδερφό σας ότι ρε εσείς η Rand έχει συγκεκριμένη μέση τιμή και τυπική απόκλυση. Εγώ αυτή θα χρησιμοποιήσω. Χάρη να πλούστευση θα χρησιμοποιήσω αυτή. Μπορώ προφανώς να την προσαρμόσω. Δηλαδή να πολλαπλασιάσω με κάτι, να διαιρέσω, να στρογγυλέψω, να κάνω ό,τι θέλω. Θα τα δούμε στην πορεία. Δεν εστιάζω τώρα στο πώς χρησιμοποιώ τη γενήτρια τυχαίνου αριθμού για να παράξω τυχαίως σε συγκεκριμένο εύρος. Εγώ θέλω πλάι 100 τυχαίους. Τους δημιουργήξα. Έτσι. Από εκεί και πέρα. Υπολογίζω μέση τιμή, τυπική απόκλυση. Τι κάνω? Ξαναλέω. Θέλω όλες τις τιμές του διανύσματος χ, για τις οποίες η ισχύει αυτή εδώ η σχέση, αυτή η ανισότητα. Για τις οποίες δηλαδή θέσης αυτή η ανισότητα παράγει ποιο αποτέλεσμα? True. Έχω λοιπόν συναρτήσεις για μέση τιμή και τυπική απόκλυση. Και άρα πώς θα κινηθώ, αφού έχω τις 100 τυχαίες μου τιμές. Βρες μου όσα χ είναι τέτοια ώστε να είναι μεγαλύτερα από το άθρησμα της μέσης τιμής και της τυπικής απόκλυσης. Αλλά σε αυτό δεν θέλω. Μπορώ να το κάνω χρησιμοποιώντας τη find? Νάτο. Και εδώ θα μείνω. Δηλαδή, η find τι είπαμε ότι κάνει, πώς συντάσσεται η εντολή find, με μια έκφραση λέμε εδώ. Βρίσκει περιοχές, βρίσκει μάλλον το που ισχύει αυτή η έκφραση. Είναι true. Εδώ εμείς διαμορφώσαμε την έκφραση με τον εξής τρόπο. Είπαμε ότι θέλουμε να είναι το χ μεγαλύτερο από τη μέση τιμή και την τυπική απόκλυση. Ναι, και ξέχασα και μια παρένθεση. Θέλω λοιπόν τις περιοχές, άρα η έκφραση που ποια είναι? Θέλω τις τιμές του χ, τις τιμές μέσα στο άθρησμα χ, για τις οποίες ισχύει το ότι είναι μεγαλύτερες από το άθρησμα της μέσης τιμής του χ, συν την τυπική απόκλυση. Και θα μου πείτε τώρα τι γίνεται, δείχνει το χ στον εαυτό του, έτσι δεν μοιάζει να είναι. Δηλαδή λέμε έχω εκατό τιμές και θέλω να βρω ποιες από αυτές τις εκατό τιμές είναι μεγαλύτερες από μια συγκεκριμένη τιμή, γιατί η μέση τιμή του χ είναι μια συγκεκριμένη, έτσι δεν είναι. Η τυπική απόκλυση είναι μια άλλη συγκεκριμένη, το άθρησμα λοιπόν είναι μια συγκεκριμένη τιμή. Άρα αυτά τα δύο με θερμηνεύονται στο εξής, βρες μου. Αυτή η τιμή που την έβαλα εδώ έτσι περιφραστικά αν θέλετε, είναι το άθρησμα της μέσης τιμής της τυπικής απόκλυσης όλων των στοιχείων του χ και είναι μια συγκεκριμένη τιμή. Άρα εγώ με χρήση της find ακολουθώντας τον ορισμό που ανέφερα λίγο πριν, βρίσκω όλα τα στοιχεία του χ για τα οποία είναι true αυτή η σύγκριση. Αυτό λοιπόν που θα παραχθεί εδώ είναι μια λίστα αποθέσεων. Η αντίση που θα λάβω είναι 1, 5, 18, 22, 35, 82 και αυτό σημαίνει ότι στη θέση 1, στη θέση 5, στη θέση 18, στη θέση 22, 31 και δεν ξέρω και εγώ τι άλλο, βρίσκονται τα στοιχεία του πίνακα για τα οποία είναι true αυτή η σχέση. Αυτή είναι λοιπόν η λογική μας εδώ. Άρα η find ουσιαστικά ξαναλέω χρησιμοποιεί μια έκφραση η οποία αποτιμάται ως προς το αν είναι αληθής και ψευδής στοιχείο προς στοιχείο εδώ. Ερώτημα. Για να μας δείξει που χρειάζονται αυτά τα στοιχεία, δηλαδή οι ουσιαστικές θέσεις, αυτές οι σημαντές θημέρες. Χαίρομαι που το ρωτάς αυτό. Αυτό είναι ένα βήμα παρακάτω και θα το δούμε αμέσως τώρα. Ρωτάω στην άλυθό σας. Άντε και τα βρήκαμε. Βρήκαμε δηλαδή ότι στις θέσεις, να το κάνω πολύ απλό, 10, 20, 30, 40, 50, 90 βρίσκονται τα στοιχεία αυτά. Ποια είναι αυτά τα στοιχεία? Δηλαδή, η find, ξαναλέω τι κάνει, παράγει ένα διάνισμα τιμών, όπου η κάθε τιμή αντιπροσωπεύει την θέση, στην οποία βρίσκεται το στοιχείο του χ, για το οποίο η σύγκριση είναι true. Ναι, 10, 20, 30. Δεν μας λέει ποιες είναι αυτές οι τιμές και αυτό είναι το ερώτημα. Ξανατήθεται λοιπόν το θέμα. Τι μας δίνει η find. Και για αυτόν τον λόγο θα πρέπει να το τρέξουμε τώρα. Πρώτα απ' όλα να δούμε ποια είναι αυτά τα στοιχεία. Έτσι. Αφού λοιπόν υπολογίσω το πού βρίσκονται αυτά τα στοιχεία, είπαμε ότι η find τι θα μου παράξει, θα μου παράξει ένα διάνισμα τιμών που θα μου δείχνει πού βρίσκονται, σε ποιες θέσεις βρίσκονται αυτά τα στοιχεία, έτσι δεν είναι. Άρα, οι συντεταγμένες των στοιχείων αυτών των τιμών δεν είναι τα στοιχεία που θέλω. Δηλαδή, αν μου πει η find ότι στις θέσεις 10, 20, 30, 40, είπαμε 50, 60, 70, 80 και 90, βρίσκονται τα στοιχεία που θέλεις. Το x του 10 δεν είναι το στοιχείο που βρίσκεται στη θέση 10. Το x του 20. Άρα, το x του δίκτες θέσης στοιχείων. Μα ποιοι είναι οι δίκτες θέσης στοιχείων? Το x του find του x μεγαλύτερο του mean sin standard deviation. Και τώρα το σκότωσες όλους γιατί. Αυτό είναι ολίγον τι δύσκολο στην αρχή, αλλά θα το ξαναδούμε. Λοιπόν, ξεκινούμε. Πάμε με ένα απλό διανύσμα. Έχω το x το οποίο έχει τις ακόλουθες τιμές. 1, 2, 3. Ωραία. Και θέλω τα στοιχεία του διανύσματος x που είναι μεγαλύτερα από τη μέση τιμή του x. Να ξεκινήσω από αυτό το πολύ πιο απλό. Πάρα πολύ ωραία. Η μέση τιμή του x όπως φαίνεται εδώ είναι η 2. Είναι η mean του x που είναι ίση με 2. Συμφωνούμε? Άρα θέλω να βρω τις θέσεις στις οποίες το διανύσμα x έχει στοιχεία των οποίων η τιμή να είναι μεγαλύτερη από τη 2. Find λοιπόν, T, όλες τις θέσεις για τις οποίες είναι true αυτή η σχέση. x μεγαλύτερο του μέση τιμή του x. Η σύγκριση λοιπόν που θα κάνει είναι η εξής. Υπολογήσει πρώτα απ' όλα οτιδήποτε συμμετέχει στη σύγκριση. Τι συμμετέχει στη σύγκριση εδώ η μέση τιμή. Θα υπολογιστεί η mean του x. Πόσο είναι? 2. Και θα κάνει τη σύγκριση στοιχείο προς στοιχείο. Είναι το 1 μεγαλύτερο από το 2. Όχι. Άρα πρώτο αποτέλεσμα 0. Είναι το 2 μεγαλύτερο του 2. Όχι 0. Είναι το 3 μεγαλύτερο του 2. Είναι αποτέλεσμα. Τι παράγει η find. Τι θέση. Σε ποια θέση λοιπόν λαμβάνει η χώρα αυτό το φαινόμενο όπου η τιμή του στοιχείου είναι μεγαλύτερη από τη μέση τιμή. Στη θέση 3. Να η απάντηση. 0, 0, 3. Δηλαδή. Μόνο ένα στοιχείο δεν θα σου πει να πεις πάντα. Μας απαντά στοιχείο προς στοιχείο και πρακτικά ακριβώς επειδή θα παραχθεί μόνο ένα αποτέλεσμα θα παράξει το αποτέλεσμα 3. Οπότε λοιπόν. Ξαναλέω τι θα κάνει η find. Θα ελέγξει αν στοιχείο προς στοιχείο αυτή τη τιμή είναι μεγαλύτερη από την 2. 3 στη μέση έχει όχι. 1, 2 και 3. Η μέση τιμή αυτών είναι η 2. 1 συν 2 συν 3 δια 3. Γι' αυτό είναι η μέση τιμή. Από εκεί και πέρα. Θα ελέγξει είπαμε στοιχείο προς στοιχείο. Είναι η 1 μεγαλύτερη της 2, όχι. Είναι η 2 μεγαλύτερη της 2, όχι. Είναι η 3 μεγαλύτερη της 2, ναι. Σε ποια θέση βρίσκεται αυτή η τιμή. Στη θέση 3. Άρα η απάντηση που θα μας δώσει η Find είναι 3. Αν λοιπόν εγώ θέλω να λάβω αυτή την τιμή. Να δω ποια είναι η τιμή που βρίσκεται στη θέση 3. Είναι η χ του 3, σωστά. Δηλαδή η χ του. Όλο αυτό. Find, τις περιοχές του χ, όπου το περιεχόμενο είναι μεγαλύτερο από τη μέση τιμή του χ. 1, 2, 1, 2. Με αυτό τον τρόπο θα βρω ποια τιμή κρύβεται εδώ. Και επειδή ίσως σας μπερδεύει το παράδειγμα έτσι, 1 και μπ. 1, 2 και 10. Ας το ξανατρέξουμε με διαφορετικές τιμές. Το τρέχω λοιπόν και πάλι με διαφορετικές τιμές. Και θέλω τώρα να παρακαλέσω και τη δική σας συμμετοχή. Έχω λοιπόν το διανύσμα χ με τρεις τιμές. 1 και 10. Θέλω να βρω τις θέσεις του διανύσματος χ, στις οποίες το στοιχείο που βρίσκονται εκεί, τα στοιχεία του που βρίσκονται εκεί, έχουν τιμή μεγαλύτερη από τη μέση τιμή του πίνακα χ. Η μέση τιμή του χ είναι 1 και 1 και 10, 12. 2, 3, 4. Οπότε λοιπόν, εγώ θέλω να βρω πόσες θέσεις έχει ο χ, για τις οποίες η τιμή είναι μεγαλύτερη από το 4. Αντί του 4 προφανώς γράφω λοιπόν μέση τιμή του χ. Το πρώτο στοιχείο είναι μεγαλύτερο από 4, όχι. Το δεύτερο είναι, όχι. Το τρίτο είναι, όχι. Εδώ λοιπόν δεν θα παραχθεί τίποτα. Για να το μετατρέψω. Α, παρακολουθείτε. Άρα λοιπόν, το πρώτο στοιχείο είναι μεγαλύτερο από το 4, όχι. Το δεύτερο στοιχείο είναι μεγαλύτερο από το 4, ούτε. Το τρίτο στοιχείο είναι μεγαλύτερο από το 4, ναι. Άρα πού βρίσκεται το στοιχείο του χ, που είναι μεγαλύτερο από το 4, στη θέση 3. Το αποτέλεσμα δηλαδή εδώ θα είναι, ίσο με 3. Θα πάρουμε λοιπόν την απάντηση 3, όταν θα τρέξουμε την φ. Ποιο είναι αυτό το στοιχείο αυτό, ποια είναι η τιμή του στοιχείου. Η τιμή του στοιχείου δεν είναι αυτή που βρίσκεται στο χ3. Το χ3 δεν είναι το 10. Έτσι δεν είναι. Το στοιχείο που βρίσκεται στη θέση 3, δεν φέρει την τιμή 10. Αφού λοιπόν είναι αυτό, με αυτό το 3 μας προέκυψε από την φ. Άρα το στοιχείο που βρίσκεται εδώ, ή τα στοιχεία που βρίσκονται εδώ, είναι αυτά που βρίσκουν τη συνθήκη. Οπότε μπορούμε με αυτό τον τρόπο να βρούμε την απάντηση, χωρίς πρακτικά να γράψουμε ούτε μία γραμμή κώδικα για την ακρίβεια, με μία γραμμή εντολής. Εδώ περιμένουν αρκετές ερωτήσεις, από δεξιά προς τα δευτερά ας πούμε. Παρακαλώ λίγο ησυχία για να μπορούμε να ακούμε ερωτήσεις και να... Στις μέσες των ειδέσεων της FIND και των αποτελέσματων εκείνων για να τις αποθηκεύσουμε και να τις εφημένουμε στους τελετριστικούς, απλά τις αποχωρούν τις εφημεριστές και τα ποιητές. Δεν ορίζουμε κάτι. Εδώ δεν ορίζω μάλιστα τίποτα, δεν εχωρώ πουθενά. Αν θέλω να τις αποθηκεύσω ξεχωριστά, θα μπορούσα να πω ότι το αποτέλεσμα της FIND το εχωρώ στην τιμή C και μετά θέλω τα X του C. Ρωτάει η συνάδελφό σας εάν πρέπει να δώσουμε δύο τιμές στον πίνακα C. Με ένα ακόμα τάδε. Όχι, διότι αυτό που λες αναφέρεται σε αριθμό γραμμών και αριθμό στυλών. Αυτό έχεις κατα νου. Εδώ εμείς έχουμε την FIND η οποία δίνει ως αποτέλεσμα μια λίστα αριθμών. Ρωτάει η συνάδελφό σας εάν πρέπει να δώσουμε δύο τιμές στον πίνακα C. Με ένα ακόμα τάδε. Όχι, διότι αυτό που λες αναφέρεται σε αριθμό γραμμών και αριθμό στυλών. Αυτό έχεις κατα νου. Εδώ εμείς έχουμε την FIND η οποία δίνει ως αποτέλεσμα μια λίστα αριθμό στυλών. Αυτό έχεις κατα νου. Θα είχα ακριβώς αυτή τη γραμμή εντολής η οποία θα μου έδινε τα στοιχεία που βρίσκονται στις θέσεις για την οποία πληρείται η συνθήκη ελέγχου. Ό,τι υπάρχει μέσα στην παρένθεση, ξεχάστε προς το παρόν, παρακαλώ την προσοχή σας, ξεχάστε ότι υπάρχει έξω από την παρένθεση. Πρακτικά το χ. Ό,τι βλέπετε μέσα στην παρένθεση είναι η FIND η οποία έχει ως ώρεσμα χ μεγαλύτερο από μέση τιμή συντυπική απόκλειση. Τι θα παράξει μια λίστα αριθμών. Δεν ξέρουμε πόση θα είναι αυτή η αριθμή. Θα είναι πέντε, δέκα, είκοσι όσοι είναι οι αριθμοί του χ, όσα είναι τα στοιχεία του χ που είναι μεγαλύτερα από το άθλησμα μέση τιμής και τυπικής απόκλεισης. Από εκεί και πέρα, εάν θέλουμε αυτά τα θεαυτά τα στοιχεία του χ, τότε χρησιμοποιούμε το αποτέλεσμα της FIND ως δίκτη θέσεων στοιχείων. Όπως στο απλό παράδειγμα εδώ είδαμε ότι η FIND του χ μεγαλύτερη της MEAN, όλο αυτό το πράγμα παράγει μια τιμή σε αυτό το παράδειγμα, τρία. Άρα η χ του τρία είναι η δέκα, η τιμή που θέλω να βρω. Η χ του FIND του χ μεγαλύτερο και τα λοιπά είναι το δέκα. Όχι, εδώ είναι ένας πίνακας 1,3. Ρωτάει πολύ σωστά η συνάνδεφό σας το εξής. Η συνάνδεφό σας παρατήρησε ότι ενώ αναφέρομαι σε διανύσματα και γενικότερα σε πίνακες, δεν αναφέρομαι στις συντεταγμένες των θέσεων, αριθμό γραμμής, αριθμό στήλης. Γιατί, διότι θα θυμάστε ότι σε προηγούμενο μάθημα είχαμε πει πως ανεξάρτητα με το πώς εμείς νοούμε τους πίνακες, για τον υπολογιστή μας πώς είναι οι πίνακες διανταγμένοι. Σε έχουν αδιακοπικές θέσεις τελείων. Μπράβο, άρα είναι πρώτα η πρώτη στήλη. Μετά η δεύτερη στήλη, μετά η τρίτη στήλη. Άρα ένας πίνακας αυτής της μορφής 1,2,3, 4,5,6,7,8,9 μπορεί να μπει σε ένα τέτοιο έλεγχο. Και να βρούμε ότι, για παράδειγμα, η απάντηση μπορεί να είναι 7. Τι σημαίνει 7? Σημαίνει 1,2,3,4,5,6. Το έβδομο στοιχείο είναι αυτό που πληρεί. Για αυτό το λόγο και δεν χρειάζεται αριθμό γραμμών και στυλών. Άρα λοιπόν, και με τη βοήθεια της ερώτησης της συναδέλφου σας, έχουμε ολοκληρώσει αυτό το σημείο. Και ευχαριστώ πολύ. Δηλαδή, δεν χρειάζεται να δώσουμε αριθμό γραμμών και στυλών, διότι η find δουλεύει στοιχείο προς στοιχείο. Πηγαίνει λοιπόν και βλέπει μέσα στη μνήμη το περιεχόμενο. Η μνήμη έχει όλα τα στοιχεία του πίνακας. Είπαμε το ένα μετά το άλλο κατά γραμμές. Πρώτη γραμμή του πίνακα. Κατά στήλες. Πρώτη στήλη του πίνακα. Δεύτερη στήλη του πίνακα. Τελευταία στήλη του πίνακα. Πράγμα που σημαίνει ότι, ανά πάσα στιγμή, ο υπολογιστής μας ξέρει ποιο είναι το στοιχείο 3. Στο παράδειγμα του χ, 1, 2, 3. Ποιο είναι το στοιχείο 3 το 7. Ποιο είναι το στοιχείο 8 σε αυτό το παράδειγμα. Το στοιχείο 8 είναι το 3 και 3, 6 και 2. Εδώ. Είναι το 6. Ποιο είναι το στοιχείο 9. Εδώ το 9. Ποιο είναι το στοιχείο 6. Το 8. Πρώτη θέση, δεύτερη τρίτη, τέταρτη, πέμπτη θέση, έκτη. Όπως επίσης και ποιο είναι το στοιχείο 3,2. Επίσης το 8. Άρα το χ του 3,2 είναι ίσο με το χ του 8. Στη μία περίπτωση αναφερόμαστε στον πίνακα με γραμμές και στήλες έτσι όπως εμείς έχουμε διανοητικά κατασκευάσει τον πίνακα. Στη δεύτερη περίπτωση αναφερόμαστε στο 8ο κατά σειρά στοιχείο που έχει στη μνήμη του υπολογιστής. Που συμπίπτει με αυτό που εμείς έχουμε στο μυαλό μας ως στοιχείο της τρίτης γραμμής δεύτερης στήλης. Είδαμε πιστεύω πολύ ενδιαφέροντα πράγματα κατά τη διάρκεια και της δεύτερης ώρας. Όπως ελπίζω ότι φάνηκε η χρήση εντολών και συναρτήσεων λογικού χαρακτήρα καθιστά τον προγραμματισμό ακόμη πιο αποτελεσματικό. Θα ασχοληθούμε ιδιαίτερα με αποτελεσματικό διανισματικό προγραμματισμό και σε επόμενο μάθημα. Και την κατασκευή προγραμμάτων πολύ πιο εύκολη και απλή διαδικασία. Σίγουρα θα πρέπει να ασκηθούμε αρκετά αυτό τον ρόλο παίζει και η δουλειά που κάνουμε στα εργαστήρια και η δουλειά που κάνετε εσείς μέσω των βιντεοδιαλέξεων και των online quiz και των θεμάτων. Πέρα λοιπόν από την FIND και τις υπόλοιπες λογικές εντολές και συναρτήσεις που είδαμε, σε MATLAB και Octave υπάρχει μια πληθώρα συναρτήσεων και εντολών του τύπου είναι κάτι. Παράγουν ένα λογικό αποτέλεσμα true ή false σε σχέση με το αν ο έλεγχος είναι αληθής ή ψευδής. Έχουμε λοιπόν τον έλεγχο του εάν είναι αλφαριθμητικές κάποιες μεταβλητές, αν ένας πίνακας είναι άδειος, εάν πίνακες είναι ίση, εάν είναι πεπερασμένα τα στοιχεία πίνακα, πολλές φορές σε πίνακες που προκύπτουν ως αποτέλεσμα υπολογισμών έχουμε μη πεπερασμένα αποτελέσματα, έχουμε infinite, εννοείται ότι όλα αυτά τα έχουμε ως γνώση στην άκρη του μυαλού μας και τα χρησιμοποιούμε εάν και εφόσον χρειαστούν και προφανώς σε πρακτικό επίπεδο, άρα αν θέλετε σε επίπεδο εξετάσεων ουδέποτε κανείς θα σας ρωτήσει για το τι σημαίνει το τάδε. Οι εξετάσεις σε ένα μάθημα όπως αυτό εξωρισμού δίνονται με ανοιχτά βιβλία, σημειώσεις και κάθε βοήθημα. Οπότε λοιπόν εκλείπει η ανάγκη να μάθει κανείς οτιδήποτε απέξω. Πρέπει να σημειώσω ότι θεωρώ πως ένα τέτοιο μάθημα το να μάθει κανείς απέξω πράγματα είναι κάτι που στερείται νοήματος. Έχουμε λοιπόν άλλους ελέγχους εάν τα στοιχεία είναι αλφαβητικά γράμματα, εάν είναι λογικό σε ένας πίνακας, εάν κάποια στοιχεία πίνακα δεν είναι αριθμός. Το σύμβολο not a number που θα συναντήσετε αρκετές φορές σημαίνει ότι δεν είναι αριθμός. Αν ο πίνακας είναι πραγματικός, βαθμοτός κτλ. Είναι λοιπόν ένα σύναλλο από πράγματα και από πληροφορίες που μας φέρνουν σε δύσκολη θέση. Παρ' όλα αυτά, ξαναλέω το ζητούμενο, δεν είναι να μάθουμε απέξω όλα αυτά τα πράγματα, αλλά να έχουμε γνώση της ύπαρξής τους και κυρίως της λογικής της χρήσης. Πιστεύω ότι μετά από τις δύο ώρες που προηγήθηκαν είναι σαφές πλέον ότι όταν έχω μία εντολή του τύπου είναι κάτι, ελέγχω το όρισμα ώστε αν είναι αληθές σε σχέση με τον έλεγχο. Αν είναι πραγματικός, νότε νάμπερ, infinite, γράμμα ή οτιδήποτε άλλο. Παραδείγματα. Έχω τον πίνακα Α, μικρά είναι αυτά, γι' αυτό και είναι και μικρά τα γράμματα. Μικρά παραδείγματα, μικρά γράμματα. Ο Α είναι ο κενός, δηλαδή είναι ένας πίνακας με ένα στοιχείο και δεν έχει περιεχόμενο. Ο έλεγχος is empty του Α τι ελέγχει το εάν ο Α είναι κενός, βεβαίως. Γι' αυτό και το αποτέλεσμα θα είναι true, θα είναι 1 εδώ. Στην δεύτερη περίπτωση έχω έναν μικρό πίνακα τον πρώτη γραμμή 1ναν, δεύτερη γραμμή 34. Το no-tenumber παράγεται πολλές φορές ως αποτέλεσμα πράξεων. Θα δούμε στη συνέχεια. Is none του Α θα μας απαντήσει ως προς το κατά πόσο το συγκεκριμένο στοιχείο είναι ή όχι. Και το is-inf εδώ, όπου έχουμε ένα στοιχείο του διανύσματος ίσως με το infinite, προκύπτει αυτό το συγκεκριμένο όταν έχω διέρεση με το 0. Εάν δηλαδή κάπου έχω μια διέρεση με το 0, θα προκύψει το infinite, το άπειρος αποτέλεσμα. Έτσι λοιπόν θα μας απαντήσει με 1, το αποτέλεσμα εδώ θα είναι 0, 1, 0, 0. Στοιχείο δεν είναι infinite, το δεύτερο είναι, το τρίτο δεν είναι, το τέτατο δεν είναι. Η λογική λοιπόν είναι και εδώ, στοιχείο προς στοιχείο σύγκριση. Συνοψίζοντας, είδαμε σχεδιακούς τελεστές που συγκρίνουν δύο ποσότητες. Το αποτέλεσμα είναι true ή false. Είδαμε λογικούς τελεστές που ελέγχουν μια παράσταση. Το αποτέλεσμα είναι πάλι true ή false. Η σύγκριση μπορεί να γίνει στοιχείο προς στοιχείο με τους απλούς τελεστές και γίνεται δύο ποσοτήτων που είναι λογικές πληθότητες με τους βραχυκυκλωμένους. Και είδαμε και λογικές συναρτήσεις του τύπου είναι κάτι, βρες, find, κτλ. Και μετά από όλα αυτά μπορούμε να πάμε, μισό λεπτό, επιτρέψτε μου τώρα να μεταβώ στο δεύτερο μέρος, στις δομές. Είμαστε πλέον έτοιμοι για τις δομές προγραμματισμού. Γιατί θέλαμε όλα αυτά τα στοιχεία πριν από τις δομές, διότι οι δομές χτίζονται με τη χρήση αυτών των τελεστών. Καλώς ορίζοντάς το μάθημα των δομών τώρα, τρίτη ώρα, ότι έχουμε, ναι, αυτές τις τρεις βασικές δομές. Ακολουθία, ελέγχου και δομή απόφασης. Ελέγχου, συγνώμη, και επανάληψης. If και Select Case είναι οι εντολές με τις οποίες δημιουργούμε δομές ελέγχου και τώρα μπαίνουμε στο πραγματικό, αν θέλετε για κάποιους, εγώ δεν το δέχομαι, προγραμματιστικό σκέλος. For και While είναι οι συνήθιες εντολές για τις δομές επανάληψης. Για να δούμε. Έχουμε λοιπόν αυτές τις δύο δομές, έχω όμως στο MATLAB και δυνατότητες να παρακάμψω τις δομές. Θα το δούμε μετά, με τον λεγόμενο αποδοτικό ή διανισματικό προγραμματισμό. Είδατε ήδη και κάποιος με ρώτησε στο διάλειμμα, μα τι στο καλό κάνει αυτή η Find, μοιάζει με ένα If μέσα σε μια διαδικασία που τρέχει στοιχείο προς στοιχείο. Είναι δύο σε ένα, είναι μια επανάληψη και ένας έλεγχος ταυτόχρονα. Ναι, αυτό κάνει η Find. Ό,τι κάνει η Find είναι ένα μικρό πρόγραμμα. Το κάνεις σε μια γραμμή, δεν εφανίζεται πουθενά καμιά δομή. Για αυτό το λόγο και λέω ότι μπορείς να τις παρακάμψεις υπό συνθήκες σε κάποια προγράμματα, όσο περισσότερο μάθημα να τις παρακάμπτουμε, τόσο πιο μικρά, κομψά, αποδοτικά και επαχρησιμοποιήσιμε, είναι τα προγράμματά μας. Πάμε λοιπόν. Δομές ελέγχου. If-else-end. Αυτές είναι οι εντολές που καθορίζουν μια δομή ελέγχου. Τι κάνω εδώ? Ελέγχω αν είναι αληθής μια συνθήκη μετά το πρώτο If. Εάν είναι αληθής, τότε η πάσα θα δοθεί, αν θέλετε όρος αθλητικός, στην ομάδα εντολών που ακολουθεί αμέσως μετά. Θα εκτελεστούν όλες οι εντολές που ακολουθούν μετά από τον αρχικό έλεγχο. Εάν όμως η συνθήκη δεν είναι αληθής, τότε θα παρακαμφρεί το σύνολο των εντολών και όλων των ενεργειών που λαμβάνει η χώρα αμέσως μετά και η ενέργεια θα μεταβεί στην ομάδα εντολών μετά το else. Εδώ λοιπόν βλέπουμε με κόκκινο, αυτές τις δύο, και έχω χρωματίσει με κόκκινο, συγγνώμη αυτούς που έχουν πρόβλημα με το χρώμα, υπάρχουν, δεν το βλέπουν καλά ενώ, αυτά τα δύο διαζευκτικά σετ εντολών, είτε το ένα είτε το άλλο. Ή θα ισχύει η συνθήκη, θα είναι true η συνθήκη. True σημαίνει σκεφτείτε τώρα δύο ώρες τι συζητούμε, όλα αυτά τα πράγματα, όλους αυτούς τους τελεστές που μπορούμε να τους χρησιμοποιήσουμε εδώ σε συνθήκες. Για να ελέγξουμε πράγματα που σχετίζονται με το πρόβλημά μας και έτσι να μεταβούμε στην πρώτη ομάδα εντολών αν είναι αληθής ο έλεγχος, στη δεύτερη αν δεν είναι. Και αν έχω περισσότερες εναλλακτικές, έχω περισσότερες διακλαδώσεις. Άλλος χρωματισμός εδώ. Είναι αληθής η πρώτη συνθήκη, θα πάω στην μαύρη ομάδα εντολών. Δεν είναι αληθής η πρώτη συνθήκη, θα ελεγχθεί αμέσως επόμενη, else if, συνθήκη νούμερο 2. Είναι αυτή η μπλε συνθήκη αληθής, θα πάω στην μπλε ομάδα εντολών. Δεν είναι και αυτή η συνθήκη αληθής, τότε θα πάω στην τρίτη συνθήκη. Θα ελεγχθώ αυτή. Είναι αληθής, τότε θα πάω στην τρία, διαφορετικά στην τέσσερα. Αυτές απλά τις έκανα κόκκινες γιατί είναι αυτή η διάζεξη από την οποία ξεκινήσαμε, έτσι. Βλέπουμε λοιπόν ότι μπορώ να έχω και δεύτερο και τρίτο και τέταρτο και πέμπτο. Μπορώ να έχω πολλές εντολές ελέγχου και παρακλάδια ελέγχου. Οπότε ανάλογα με το πόσες αποφάσεις πρέπει να λάβω, δομώ και το πρόγραμμά μου. Και βέβαια, μπορώ να το γράψω και έτσι. Θα βάζω το ένα δίπλα στο άλλο. Η διαφορά είναι η εξής. Δεν είναι μόνο πως εδώ, προσέξτε λίγο, είναι μια σημαντική διαφορά. If, else if, else if, else, end. Εάν ισχύει αυτό, τότε κάνε τα πρώτα. Εάν δεν ισχύει αυτό, πήγαινε στο δεύτερο. Ισχύει ο δεύτερος έλεγχος, κάνε ό,τι ακολουθεί τον δεύτερο. Εάν δεν ισχύει ο δεύτερος, πήγαινε στον τρίτο. Ισχύει, κάνε ό,τι ακολουθεί τον τρίτο. Εάν όχι, κάνε ό,τι ακολουθεί παρακάτω. Τέσσερις εναλλακτικές. Ενώ εδώ, στην αριστερή περίπτωση, ανοίγω ένα if μέσα σε ένα δεύτερο if. Ενώ δηλαδή το πρώτο if τρέχει για να μπω στο δεύτερο, προσέξτε, πρώτη συνθήκη. Ισχύει? Ναι, εκτελεί τη πρώτη ομάδα εντολών. Διαφορετικά, ελέγχω αν ισχύει η δεύτερη συνθήκη. Αν ισχύει η δεύτερη συνθήκη, τότε θα μπω στη δεύτερη ομάδα εντολών. Εάν δεν ισχύει η δεύτερη συνθήκη, τότε θα ελέγξω αν ισχύει η τρίτη συνθήκη, που είναι υπό σύνολο της δεύτερης συνθήκης. Αυτές λοιπόν οι δομές είναι οι δομές των εμφολευμένων ελέγχων. Και προφανώς μετά την τρίτη συνθήκη, η οποία θα ελεγχθεί, αν και αυτή αποδειχθεί false, θα μεταβώ στην τέταρτη ομάδα εντολών. Όπως ίσως αντιλαμβάνεστε, απλά και μόνο η σειρά με την οποία κάνω ελέγχους, και θα το δούμε σήμερα, από σήμερα ξεκινούνται εργαστήρια να θυμίσω, στο εργαστήριο αυτής της εβδομάδας, μπορεί να αλλάξει το αποτέλεσμα. Πραγματικά απλά και μόνο από τη σειρά με την οποία κάνουμε τους ελέγχους. Άρα δεν είναι όλη η έλεγχη ισοδύναμη, δεν μπορώ να τους αλλάζω θέση τυχαία. Πρέπει να προνοήσω συναρτήση των χαριτιστικών του προβλήματός μου. Να δω ένα παράδειγμα εδώ. Πάλι τυχαίους. Είχα σκεφτεί ότι θα αναρωτιόσα να δεις το καλό είναι αυτή. Και εδώ σας έχω φέρει, έχω φέρει, δεν έχω φέρει, απλά έφτιαξα ένα ιστόγραμμα τριών χιλιάδων τυχαίων αριθμών που ακολουθούν κανονική κατανομή. Άρα λοιπόν, τι είναι αυτό που βλέπετε, είναι το histogram του αποτελέσματος του Rand 1, 1,3000. Μια γραμμή 3300 αριθμοί. Βλέπετε ότι η μέση τιμή είναι στο μηδέν, η τυπική απόκλειση είναι το ένα. Αλλά βλέπετε ότι υπάρχουν αριθμοί που απλώνονται, έτσι, τα γνωστά μουστάκια της κανονικής κατανομής, που πηγαίνουν έως και τρία σίγμα μακριά. Και προσεγγιστικά τύνουν στο άπειρο. Θεωρητικά υπάρχει και τιμή πολύ κοντά στο άπειρο, είναι άτωπο έτσι, πολύ μακριά το μηδέν. Εδώ λοιπόν, αν χρησιμοποιήσω αυτήν την συνάρτηση, έχω ένα παράδειγμα που είναι λίγο διαφορετικό, γι' αυτό και σας το έφερα. Κοιτάξτε τι κάνω. Χρησιμοποιώ την Rand για 10 αριθμούς και στρογγυλοποιώ το αποτέλεσμα στον εγκύτερο ακέραιο. Εγκύτερο ακέραιο. Άρα έχω θετικούς και αρνητικούς. Θυμάστε πλέον ότι η Rand 1 παράγει τυχαίους αριθμούς με μέση τη μηδέν, την τυπική απόκλειση 1. Η Rand στρογγυλοποιεί στον εγκύτερο ακέραιο. Πράγμα που σημαίνει ότι η Rand του μίον 1.6 θα έχει στο αποτέλεσμα το 2. Γιατί το 2 είναι ο εγκύτερος ακέραιος στο μίον 1.6. Απλά και μόνο διευκρινήσετε εδώ. Και τι θέλω εγώ να επιδείξω σε αυτό το παράδειγμα? Η πλήση της δομής, την οποία θα χρησιμοποιήσω για να δω εάν υπάρχουν άση μέσα στο χ. Δηλαδή το διάνισμα χ, τι περιέχει? Περιέχει τους τρογγυλοποιημένους δέκα τυχαίους. Σωστά. Και γενικά είναι και αρνητικοί και αρνητικοί αριθμοί. Εγώ θέλω να βρω εάν υπάρχουν άση μέσα σε αυτό το διάνισμα. Πώς θα το κάνω αυτό? Έχω περάσει από τη δεύτερη ώρα όπου είναι φάιντ. Άρα θα χρησιμοποιήσω τη φάιντ. Για να βρω τις θέσεις του χ, όπου βρίσκονται άση, μονάδες. Και πώς το κάνω όμως αυτό? Τώρα βλέπουμε μια στρατηγική, δεν η μόνη. Δίνω το αποτέλεσμα της φάιντ. Προσέξτε, η φάιντ πώς συντάχτηκε? Φάιντ παρένθεση χ διπλωίσω με 1. Τι θα κάνει λοιπόν η φάιντ? Θα πει, ποιο είναι το όρισμά μου, χ διπλωίσω με 1. Τι σημαίνει χ διπλωίσω με 1? Πηγαίνω και ελέγχω ένα προς ένα τα στοιχεία του χ, ως προς τα ανισούνται με τη μονάδα. Άρα θα έχω ως αποτέλεσμα του χ διπλωίσω με 1, τι, ένα διάνισμα 10 τιμών, 0 ή 1, είναι δεν είναι, τι, το αντίστοιχο στοιχείο του διανίσματος χ, ίσα με τη μονάδα. Οπότε λοιπόν εδώ, το χ μπορεί να είναι ένα διάνισμα αυτού του τύπου, γράφω τυχαία, μειών 2, 0, 0, 1, μειών 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Κάτι τέτοιο θα παραχθεί ως διάνισμα χ. Ο έλεγχος του κατά πόσο τα στοιχεία, ένα προς ένα έλεγχος, του κατά πόσο τα στοιχεία του χ είναι ίσα με τη μονάδα, θα παράξει το IDS. Το IDS λοιπόν θα είναι ίσο, για αυτό το παράδειγμα, είσαι μονάδα, όχι, είσαι μονάδα, όχι, είσαι μονάδα, όχι, είσαι μονάδα, ναι, είσαι μονάδα, όχι, είσαι μονάδα, όχι, είσαι μονάδα, ναι, είσαι μονάδα, όχι, όχι, όχι. Αυτός θα είναι ο πίνακας IDS, στο συγκεκριμένο παράδειγμα. Οπότε λοιπόν, αν ο IDS, προσέξτε τώρα, χρησιμοποιώ μια άλλη, ναι, το παράδειγμα δεν είναι τυχαίο, χρησιμοποιώ μια άλλη συνάντηση, την ειζέμπτη. Αν είναι άδειος ο IDS, τότε τι σημαίνει? Δεν έχω μονάδες, δεν υπάρχει περίπτωση. Έτσι, γεια σας. Διαφορετικά, υπάρχουν μονάδες εδώ, έτσι. Και μάλιστα, αυτό που δεν παρατηρήσατε είναι το εξής, ότι το IDS, που είναι η συνάδεφό σας, δεν το δεις, το IDS δεν είναι διάνισμα, είναι το αποτέλεσμα της φάιν, ρε εσείς. Κοροσμένοι στην τρίτη ώρα και είναι λογικό. Άρα, ξανά, προσέξτε εδώ, η φάιν τι παράγει? Παράγει τις θέσεις όπου ισχύει αυτό, σωστά. Άρα λάθος πράγμα σας έδειχνα, αλλά δεν το πιάσατε. Λοιπόν, ελπίζω να συναλθούμε τώρα λίγο. Προσέξτε, η φάιν τι παράγει τις θέσεις. Σε ποια θέση έχω μονάδες, πρώτη, δεύτερη, τέταρτη, άρα το αποτέλεσμα της φάιντ ανατίθεται στην IDS, σωστά. Άρα, θα είναι το τέσσερα και από αλλού, τέσσερα, πέντε, έξι, εφτά. Άρα η IDS είναι ένα διάνισμα, είναι μια λίστα, δύο τιμές. Είναι ένα διάνισματάκι λοιπόν με δύο τιμές. Αν λοιπόν αυτό ήταν κενό, σημαίνει ότι δεν θα είχε κανένα στοιχείο. Αν δεν είχε κανένα στοιχείο, η φάιντ θα έβρισκε μονάδες πουθενά. Όχι, γι' αυτό θα ήταν κενό. Τώρα δεν είναι κενό, άρα έχει στοιχεία. Πόσα είναι τα στοιχεία που είναι ίσα με τους Άσους, όσα είναι τα στοιχεία στο IDS. Πόσα είναι τα στοιχεία στο IDS. Έχω μια άλλη πανέμορφη συνάρτηση, την length, η οποία μου μετρά το μήκος διανισμάτων σε στοιχεία. Άρα η απάντηση της length εδώ θα είναι δύο. Άρα τελικά πού το πήγαμε το πράγμα. Θέλουμε να ελέγξουμε πόσους Άσους έχει μέσα του το διανισμαχή. Να το, το παράδειγμα του διανισματοσχή στον πίνακα. Χρησιμοποιήσαμε την φάιντ για να εντοπίσουμε τα στοιχεία που ισούνται με τη μονάδα. Γνωρίζουμε ότι η φάιντ παράγει ως αποτέλεσμα τις θέσεις των στοιχείων. Άρα στο συγκεκριμένο παράδειγμα θα είχαμε ως αποτέλεσμα δύο τιμές. Τέσσερα και εφτά, οι οποίες ανατίθενται σε μια μεταβλητή που είναι διάνισμα, όπως τα πάντα στο MATLAB, έτσι δεν είναι. Άρα η μεταβλητή IDS, στην οποία ανατέθηκε το αποτέλεσμα της φάιντ, εδώ θα έφερε το αποτέλεσμα τέσσερα και εφτά. Πράγμα που σημαίνει ότι αν αυτή η μεταβλητή είναι καινή περιεχομένου, το αρχικό διάνισμα δεν θα έχει καμία μονάδα. Ελέγχω λοιπόν με την ειζέμπτη το κατά πόσο είναι καινή. Αν το αποτέλεσμα του ειζέμπτη του IDS ήταν true, τότε προφανώς θα εκτελούνταν τι? Το πρώτο μπλοκ εκπομπών εντολών κάτω από την αληθή συνθήκη ελέγχου. Εδώ όμως δεν ισχύει στο συγκεκριμένο παράδειγμα αυτό. Άρα που θα μεταβεί τώρα το πρόγραμμα μετά το else στο δεύτερο set. Εδώ βλέπουμε μια εντολή ολίγον τι παράξενη που θα την εξηγήσω. Display, ρίξε στην οθόνη. Τι? Ό,τι έχω μέσα στην παρένθεση, το βάζω και σε εγγύλες γιατί είναι διάνισμα, το οποίο διάνισμα έχει μέσα του strings, έχει μέσα του λέξεις. Τι δηλαδή? Έχει πρώτα μια φράση το there are, διότι την βάζω ανάμεσα σε απλά εισαγωγικά. Μετά, γι' αυτό υπάρχει το κόμμα, πρώτο στοιχείο του διανύσματος. Έτσι δεν γράφονται διανύσματα. Στοιχείο κόμμα, το ότι όλο αυτό είναι αυτό το παράξενο there are, στοιχείο το καθιστά παρόλα αυτά. Κόμμα. Δεύτερο στοιχείο, όλο αυτό το πράγμα. Εδώ τώρα θα μου πείτε μαζεύσου. Τι είναι αυτά τα num to string, length to ids, να μαζευτούμε λίγο. Τι είναι? Το length to ids δεν είναι ο αριθμός των στοιχείων που περιλαμβάνει μέσα του το ids, που ισοδυναμεί με τον αριθμό των μονάδων στο x. Είναι ένας αριθμός στο 2. Θα μου πείτε τότε, βρε φίλο μου, γιατί δεν ρίχνεις το 2 επί της οθόνης και μας τα ζαλίζει στα θέματα. Διότι εδώ είμαστε σε διάνυσμα με περιεχόμενο αλφαριθμητικό. Άρα εδώ έχω χαρακτήρες. Δίπλα πρέπει να έχω χαρακτήρες. Για τον υπολογιστή το 2, αυτό το 2, είναι αριθμός, δεν είναι χαρακτήρας. Πρέπει να το μετατρέψω σε χαρακτήρα. Για μένα είναι το ίδιο. Για τον ανθρώπο χειριστή είναι το ίδιο. Για τον υπολογιστή όχι. Άρα η εντολή num to string μετατρέπει αριθμούς numbers to strings σε σύμβολο σειρές. Οπότε λοιπόν αυτό όλο είναι το δεύτερο στοιχείο, είναι ο αριθμός 2. Και αμέσως μετά είναι χ. Και έτσι όταν θα εκτελεστεί αυτή η εντολή θα δω επί της οθόνης μου τρία στοιχεία. Γιατί τρία στοιχεία? Διότι έχω μέσα σε αυτή την τετραγωνική αγγείλη τρία ορισμένα στοιχεία. Πρώτο κόμμα, να το πρώτο στοιχείο. Δεύτερο κόμμα, να το δεύτερο στοιχείο. Τρίτο στοιχείο. Το δεύτερο στοιχείο θα είναι το there are. Το δεύτερο στοιχείο θα είναι ο αριθμός 2. Και το τρίτο στοιχείο θα είναι το in h. Όλα μαζί, there are δύο in h. Εννοείται άση. Με αυτόν τον τρόπο λοιπόν μπορώ να υπολογίσω τον αριθμό των άσεων στον διάνυσμα χ. Βέβαια, ακριβώς επειδή εδώ έχω τυχαίους αριθμούς, ήθελα να το δείτε κι αυτό, κάθε φορά που τρέχω το πρόγραμμά μου, άλλοι τυχαίοι δεν θα παραχθούν. Τυχαίοι είναι. Τις το καλό τυχαίοι θα ήταν. Έχω κάτι θέματα, θα μιλήσουμε για τυχαίους αρκετά αργότερα. Αλλά γενικώς είναι τυχαίοι, άρα κάθε φορά θα πρέπει να είναι άλλοι. Οπότε, λοιπόν, τη μία φορά θα παραχτεί το αποτέλεσμα διεραλθροί in χ, δύο, εγώ το έτραξα κάποιες φορές έως ότι εμφανιστεί το τίποτα στο χ. Υπήρξε και περίπτωση όπου δεν βρήκε κανέναν άσο μέσα στο χ. Δεν μας απασχολεί. Ερώτημα. Αν θέλαμε να κάνουμε το πινέκα χ, θα ήθελα να κάνουμε το πινέκα χ να το δείξουμε. Εάν θέλεμε να δείξουμε όλο το πινέκα χ θα μπορούσαμε να το κάνουμε αυτό ή απλά να το ρίξουμε επί της οθόνης όταν κάνω τη μετατροπή από αριθμό σε string, τότε για τον υπολογιστή, ακριβώς επειδή είναι χαρακτήρες, το αποτέλεσμα δεν συμπυκνώνεται, αφήνει κενά κτλ. Θα το δούμε πώς θα το κάνουμε αυτό. Ας δούμε όμως κάτι άλλο. Έχω μία δομή ίδια. Είναι δομή ελέγχου. Χρησιμοποιείται όταν έχω έναν προκαθορισμένο αριθμό περιπτώσεων. Παράδειγμα εδώ. Έχω έναν κερματοδέκτη, έτσι, για να αγοράζω αναψυκτικά. Σε μια βιβλιοθήκη, ας πούμε. Ο συνδυασμός κερμάτων που μπορεί να χρησιμοποιηθεί για να συμπληρωθεί το ποσό είναι επεπερασμένος και γνωστός. Άρα, λοιπόν, κάθε συνδυασμός είναι μια περίπτωση, έτσι, δεν είναι? Κάθε περίπτωση είναι ένα case. Switch case είναι η εντολή. Πρώτη έκφραση, είναι αληθής. Μάλλον, η έκφραση, για να είμαι ακριβής, είναι η έκφραση που θα ελεγχθεί. Πρώτος έλεγχος. Αν είναι αληθές, πηγαίνουμε στην πρώτη ομάδα εντολών. Δεύτερος έλεγχος, τρίτος, όσες φορές όσα cases έχω. Και στο τέλος έχω το otherwise. Το παράδειγμα εδώ είναι επίσης κάτι καινούριο για εσάς. Μπορώ να ανοίξω και να διαβάσω urls στο MATLAB απευθείας. Έτσι, λοιπόν, έχω εδώ το εξής. Έχω την δομή switch, έτσι, switch case και switch. Βαφτίζω την έκφραση που θα χρησιμοποιήσω για να ελέγχω. Εδώ την ονομάζω site. Case, επειδή είναι string, η τιμή πρέπει, είπαμε, ανάμεσα σε εισαγωγικά. Αν ήταν αριθμός, δεν θα χρειαζόταν. Case Google. Άρα, εάν διαβάσει από το πληκτρολόγιο τη λέξη Google, αυτό το πρόγραμμα, τι κάνει? Ψάχνει να βρει πράγματα. Θα ψάχνει να βρει τι είσοδο έδωσε ο χρήστης σχέση με τη τιμή της μεταβληκτή site. Αν δώσει την τιμή Google, τότε με την εντολή web θα πάει και θα ανοίξει τον default browser στη διεύθυνση αυτή. Να πω ότι η web δεν δουλεύει ακόμη σε octave. Είναι από τις εντολές που δεν έχουν εσωματωθεί. Case Yahoo, δεύτερο. Case eClass, μάλιστα αυτό είναι το παλιό παράδειγμα πρέπει να σας πω τώρα. Η καινούργη διεύθυνση άλλαξε. Otherwise, no such URL. Έχω βαπτίσει αυτό το πρόγραμμα Visit Site, το τρέχω και αμέσως μετά περιμένει είσοδο. Γράφω Google, ανοίγει, απευθείας τον browser. Ερώτημα. Ορίζεται όχι τη στιγμή αυτή, τη στιγμή που το πρόγραμμα τρέχει ορίζεται, να θυμίσω και αυτή είναι μια ερώτηση που μου δίνει αυτή την ευκαιρία και ευχαριστώ γι' αυτό, ότι σε Matlab δεν χρειάζεται να ορίσουμε μεταβλητές ξεχωριστά. Τη στιγμή που χρησιμοποιούνται, εννοείται ότι ορίζονται κιόλας. Άρα λοιπόν, τη στιγμή που θα πρωτοδεί την λέξη site, πάυλα μεταβλητή site, θα την ορίσει και θα κρατήσει έναν χώρο στη μνήμη. Το πόσο χώρο θα κρατήσει, θα το αποφασίσει στην πορεία. Για αυτό το λόγο, θα δείτε ότι μερικές φορές, ειδικά αν γράφετε σε Matlab που έχει πιο προωθημένο help κατά τη σύνταξη προγραμμάτων, θα δείτε ότι σας εμφανίζει ένα warning μερικές φορές του τύπου, αυτό το site, αυτή τη site εγώ δεν την έχω ξαναδει. Μήπως θέλεις να της δώσεις μια default τιμή. Πρακτικά μας λέει ότι κάθε μεταβλητή που χρησιμοποιείται, δώστε της μια αρχική τιμή, το 0 ή το κενό, να έχω μια τιμή για αυτή. Λοιπόν, εδώ είναι η εντολή λοιπόν που λείπει. Με αυτόν τον τρόπο βλέπουμε τις εντολές ελέγχου. Για να δούμε και τις εντολές ελέγχου και θα ρίξουμε και μια σύντομη ματιά, διότι θα τα ξαναδούμε αυτά στην άλλη μεγάλη κατηγορία δομών. Οι οποίες δεν μας χρειάζονται όταν έχουμε εναλλακτικές περιπτώσεις. Να θυμίσω εδώ τι είδαμε. Έχω την if, else, end if ή end, if else if, έχουμε εμφολευμένες δομές όταν έχουμε διαφορετικές περιπτώσεις. Στην περίπτωση που έχουμε γνωστό προκαθορισμένο αριθμό περιπτώσεων μπορούμε να χρησιμοποιήσουμε και την case, select case. Σε κάθε περίπτωση μπορεί να έχουμε μία, δύο, τρεις ή τέσσερις ή πέντε ή περισσότερες περιπτώσεις. Να πω εδώ, για όσους αυτό τυχόν σημαίνει κάτι, για όλους θα σημαίνει στην πορεία, ότι οι δομές ελέγχου είναι ακριβές υπολογιστικά. Τι σημαίνει αυτό? Ότι ο χρόνος που δαπανά ο υπολογιστής μας για να τρέξει το πρόγραμμα που έχει περιλαμβάνει οι δομές ελέγχου είναι πολλής. Γενικά οι δομές ελέγχου καθυστερούν, φρενάρουν το πρόγραμμά μας. Προσπαθούμε να τις αποφύγουμε. Όταν θα δούμε αργότερα θέματα υπολογιστικής πολυπλοκότητας θα δούμε γιατί. Πάμε τώρα στην άλλη μεγάλη περίπτωση. Έστω ότι θέλω να επαναλαμβάνω μία διαδικασία έως ότου κληρωθεί μια συνθήκη ή για συγκεκριμένο αριθμό αποφορές. Τι κάνω, χρησιμοποιώ δομές επανάληψης. Τι κοινό λοιπόν έχει ένας σκύλος που κυνηγά την ουρά του. Ένας μηχανισμός που κινεί προϊόντα σε αυτόματο πολιτή αναψυκτικών. Το ABS ενός αυτοκινήτου. Εννοείται ότι το ABS χρησιμοποιεί δομές. Ποια είναι η δομή, πώς μεταφράζεται. Αύξησε, εφίρμοσε την πέδιση έως ότου αισθητήρας ολίσθησης δείξει έλλειψη πρόσβησης. Με το που θα δείξει έλλειψη πρόσβησης αφαίρεσε την πέδιση, μίωσε την πέδιση και με το που θα σου δώσει ο εστητήρας επαναφορά της πρόσβησης, κράτα την πέδιση και αύξησε την έως ότου σου ξαναδώσει απώλεια. Πώς δουλεύει το ABS. Παλαιότερα, την εποχή πριν από το ABS, πατούσατε φρένο στο όχημά σας. Ποδήλατο, μηχανάκι, μηχανή, αυτοκίνητο, έρπεις τριοφόρο, ότι είχε ο καθένας τέλος πάντων. Η πέδιση είχε το εξής αποτέλεσμα. Εφίρμοσε μια δύναμη επί του τροχού, η οποία προσπαθούσε να αντιροπίσει την ροπή που ασκούσε το δώστρωμα επί του τροχού. Άρα, λοιπόν, πρακτικά, εμείς επιχειρούσαμε να σταματήσουμε το όχημα, αντιροπώντας τους τροχούς. Εάν όμως ήταν ολυστηρό το δώστρωμα, και το ξέρουμε όλοι όσοι έχουμε πέσει από ποδήλατα, μοτοσυκλέτες κτλ, τότε κάποια στιγμή καταλάβαινας ότι έχανε στον έλεγχο του οχήματος. Το ABS τι προσέθεσε, έναν αυτόματο μηχανισμό, ο οποίος πάρα πολύ γρήγορα συνεχώς παρακολουθεί την πρόσφυση. Πολλές φορές στο δευτερόλεπτο. Και με το που θα δει ότι χάνεται η πρόσφυση, χάνεται η επαφή με το δώστρωμα, θα χαλαρώσει την δύναμη πέδισης, με στόχο να αρχίσει να κυλά ο τροχός, γιατί εκείνη τη στιγμή πάει να κοκαλώσει, όπως λέμε ο τροχός, και άπαξε να κοκαλώσει έχασες την κύληση που θέλεις. Η βέλτιστη επιβράδευση πετυχαίνεται ενώ έχεις κύληση. Και όχι όταν είναι κοκαλωμένος ο τροχός, τότε δεν έχεις βέλτιστη επιβράδευση, τότε έχεις πολύ μικρή επιφάνεια επαφής με το δώστρωμα. Μόνο σημιακά. Άρα λοιπόν εκείνη τη στιγμή χαλαρώνεις την πέδιση για να πετύχεις πάλι επαναφορά της κύλησης και εφόσον δει ότι τα πράγματα πάνε καλά μπορεί να αυξήσει την πέδιση. Κάποια στιγμή λοιπόν φτάσαμε σε σύγχρονα συστήματα τα οποία απλά σου λένε ότι εσύ το μόνο που έχεις να κάνεις είναι να πατήσεις τρέμα το φρένο. Και από εκεί και πέρα εγώ το σύστημα πέδισης αναλαμβάνω να δω την πρόσφυση και να πάω σε στιγμή να ελέγχω το τι κάνεις. Συνεχώς λοιπόν ελέγχω την πρόσφυση και όσο η διαδικασία ελέγχου είναι true, τότε συνεχίζω να ασκώ δύναμη φρεναρίσματος. Με το που θα γίνει false, το false θα ενεργοποιηθεί από την ολίσθηση, πάει να κοκαλώσει, τσακ άλλαξε ο έλεγχός μου, τώρα θα πάω αλλού. Έχω και έλεγχους εδώ και επανάληψη, είναι πολύ ωραίο. Και αυτό το κάνω μέσα σε κλάσματα του δευτερολέπτου έτσι, το κάνω πάρα πολύ γρήγορα. Και προφανώς όλα αυτά σχεδιάστηκαν από μηχανολόγους-μηχανικούς, μην τρελαθούμε. Συστήματα δηλαδή τα οποία μπορούν να ανταποκριθούν, όχι μόνο από μηχανολόγους-μηχανικούς, έτσι συνεργάστηκαν οι ηλεκτρολόγοι και η ηλεκτρονική για τα ηλεκτρονικά του συστήματος, οι ειδικοί υπολογιστών, οι ειδικοί σε υλικά κτλ. Επαναλήψεις λοιπόν. Και αυτό βλέπει κανείς. Επαναλήψεις. Για να δούμε ένα συγκεκριμένο πρόβλημα που θα το συναντήσουμε μπροστά μας στο μέλλον πολλές φορές. Αυτή η ακολουθία αριθμών είναι διάσημη και ονομάζεται ακολουθία Φιμπονάτσι. Έχει το εξής πολύ απλό χαρακτηριστικό. Ξεκινά από το ζεύγος 1-1 και η κάθε επόμενη τιμή προκύπτει ως άθλησμα των δύο προηγούμενων. Έτσι λοιπόν εδώ, αν ο πρώτος όρος ο Φιμπονάτσι 1 είναι ίσως με 1 και ο Φιμπονάτσι 2 πάλι είναι ίσως με 1, εξ ορισμού, τότε ο Φιμπονάτσι ν είναι το άθεσμα των δύο προηγούμενων. Δηλαδή ο νιωστός όρος, ο 10, είναι ο 9-8. Ο 9 είναι ο 8-7. Ο 7 είναι ο 6-5. Και πάει λέγοντας. Τι συμβαίνει λοιπόν όταν το νι δεν είναι γνωστό εκ των πρωταίρων αλλά εισάγεται κατά την εκτέλεση του προγράμματος. Θέλουμε δομές επανάληψης. Έτσι. Για να δούμε λοιπόν τις δομές επανάληψης. Η μία είναι η for. Η σύνταξη έχει ως εξής. For. Για. Αγγλική λέξη. Την τιμία ενός μετρητή που ξεκινά από μία αρχική μέχρι μία τελική, με βήμα που δίνεται, αν δεν δίνεται θεωρείται ίσο με τη μονάδα, εκτέλεσε ένα σύνολο από εντολές. Εδώ λοιπόν ουσιαστικά εγώ θα εκτελέσω τόσες φορές όσα τα βήματα των τιμών από τα οποία θα περάσει ο μετρητής. Ο μετρητής είναι μία μεταβλητή. Βεβαίως. Εκτελείται όσες φορές καθορίζει ο μετρητής. Ένα παραδειγματάκι, μάλλον δύο παραδείγματα. Για I από 1 έως 10 με βήμα 2, άρα για τιμές του I, 1, 3, 5, 7, 9, 5 τιμές, γιατί για 11 δεν ισχύει πλέον, είναι εκτός, display δείξε το I τετράγωνο. Το αποτέλεσμα θα είναι αυτές οι πέντε τιμές, 1, 925, 49, 81. Και δίπλα μπορώ να χρησιμοποιήσω ως μετρητές στοιχεία διανύσματος και να έχω ανακατεμένα στοιχεία βεβαίως. Για I τιμές αυτού του διανύσματος, προσέξτε αυτό, αυτό ίσως θα μην το έχετε δύο, ως έχετε ασχοληθεί με άλλες γλώσσες τόσο πολύ, άρα η πρώτη τιμή θα είναι το 2, η δεύτερη τιμή θα είναι το 4, η τρίτη το 1 ή 4 ή 6. Κάνε την ίδια δουλειά. Το αποτέλεσμα είναι αυτές οι τέσσερις τιμές του παράγοντα. Εδώ γνωρίζω εκ των προτέρον πόσες φορές θέλω να εκτελεστεί το σύνολο των πράξεων που επαναλαμβάνω. 5, 4, 50, 1.000, 5.000 δεν παίζει κανένα ρόλο. Εάν όμως δεν γνωρίζω εκ των προτέρον, δεν ξέρω βρε αδερφέ, όπως το φρενάρισμα, δηλαδή τι θα του πούμε, προσέξτε τώρα, έχω για τη δικασία φρενάρισμα, θα του πω, θα ελέγξεις 10 φορές αν χάνεται η πρόσφυση και αν τύχει να οδηγήσω υπό συνθήκες τέτοιες ώστε να χάσω την πρόσφυση 12 φορές, την 11 και την 12 δηλαδή, τα πράγματα μπαίνουν εξαιρετικά. Εκεί δεν γνωρίζω πόσες φορές πρέπει να ελέγξω, το μόνο που γνωρίζω είναι ότι θα ελέγξω, θα ελέγχω συνεχώς έως ότου μια συνθήκη πάβει να πληρούνται. Η συνθήκη θα είναι, ας πούμε, η απώλεια της πρόσφυσης ή η επαναφορά της πρόσφυσης ανάλογα με το τι θέλω να ελέγξω εδώ. Τότε έχω την while, η while έχει αυτή τη λογική, όσο ότι είναι true αυτή η συνθήκη. Η συνθήκη αυτή μπορεί να είναι ένα σύνολο κολοσιαίο ή και πολύ μικρό από τελεστές που είδαμε λογικούς, σχεσιακούς κτλ. Όσο λοιπόν ισχύει αυτή η συνθήκη εκτέλεσε όλες τις εντολές που βρίσκονται μεταξύ του while και του end. Ένα σύντομο παράδειγμα που επίσης είναι κάτι καινούριο γι' αυτό σκέφτηκα να σας το δείξω. Αν θέλω να χρονομετρήσω το πόσο κάνει ένα πρόγραμμά μου για να τρέξει έχω δύο εντολές πολύ ωραίες της tick και tock. Με το που θα δει την tick αρχίζει και τρέχει ένα εσωτερικό ρολόι με το που θα δει την tock θα δει τον χρόνο της στιγμής εκείνης και τον χρόνο της tick θα υπολογίσει τη διαφορά και θα μας εμφανίσει στην οθόνη το αποτέλεσμα σε δευτερόλεπτα διότι υπάρχει ένα εσωτερικό ρολόι σε κάθε υπολογιστή. Ο χρόνος δίνεται από τη CPU time, υπάρχουν και άλλες συναρτήσεις χρόνου. Η CPU time είναι μια εντολή που δίνει τον χρόνο σε δευτερόλεπτο που πέρασε από τη στιγμή που ξεκινήσαμε το MATLAB. Ένα συγκεκριμένο session στο MATLAB ή σε Octave. Μπήκαμε ξεκινήσαμε δουλειά, αν τρέξουμε τη CPU θα μας πει πέρασαν 3,8 δευτερόλεπτα. Οπότε εδώ τι κάνω εγώ ουσιαστικά, κάνω κάτι πάρα πολύ απλό. Αρχική τιμή της DT0 και της Counter 0. Ξεκινώ να μετρώ χρόνο. Tick. Δηλαδή πατάω το χρονόμετρο να ξεκινήσει. Tick σημαίνει πατάω το χρονόμετρο. Tuff 0 είναι το CPU time. Πάνε ρε και δες την ώρα που βλέπει και βάλεις το Tuff 0. Αυτό του λέω. Μετά του λέω όσο το ΔΤ είναι κάτω από 5, η Counter να γίνει Counter συναίνει 1 και η DT να υπολογιστεί με αυτόν τον τρόπο. Πάει μη τρέχωσα μειών την αρχική. Ουσιαστικά λοιπόν τι κάνω εγώ υπολογίζω με αυτόν τον τρόπο τι τιμή θα πάρει η Counter μέσα σε 5 δευτερόλεπτα. Είναι δηλαδή σαν να του λέω ότι πατάω το χρονόμετρο και αρχίζω και μετρώ για Counter από 1 έως όσο πας μέσα σε 5 δευτερόλεπτα. Πού θα πάει την Counter σε 5 δευτερόλεπτα θα το δούμε αμέσως μετά. Αν τρέξω αν το τελειώσω και δώσω talk και το τρέξω όλο αυτό σε εμένα έβγαλε περίπου 7 εκατομμύρια. 6 εκατομμύρια 900.000. Άρα μέσα σε 5 δευτερόλεπτα η Counter μέτρησε μέχρι το 7 εκατομμύρια. Για αυτές τις ταχύτητες ενδιαφερόμαστε και αυτή είναι και σχετικά χαμηλή. Την προηγούμενη φορά που το είχα τρέξει είχα πάει σε πολύ μεγαλύτερες τιμές. Οπότε λοιπόν θα τα δούμε μετά, επιτρέψουμε να κάνουμε ερωτήσεις μετά για να πάμε στο παράδειγμα του ποια είναι η τιμή του μετρητή. Γιατί θέλω να σας ρωτήσω το εξής. Προσοχή. Έχω την for την οποία χρησιμοποιώ, είναι δομή επανάληψης, την οποία χρησιμοποιώ όταν ξέρω πόσες φορές θέλω να επαναλάβω κάποιους υπολογισμούς. Και έχω και την while την οποία χρησιμοποιώ όταν δεν ξέρω πόσες φορές θα επαναλάβω κάποιους υπολογισμούς, αλλά θέλω να τις επαναλαμβάνω έως ότου μια συνθήκη καταστεί η ταλειθήτηση της επισευδής, ό,τι θέλω κάνω εκεί. Για να γυρίσουμε στη φιμπονάτση και να σας ρωτήσω στο τέλος της δομής η τιμή του counter ποια είναι. Προσέξτε. Στη φιμπονάτση. Το πρόγραμμά μας. Ένα πρόγραμμα που κάθεσαι και έκανα, δεν είναι το καλύτερο. Θα δούμε πολύ καλύτερες υλοποίησεις της φιμπονάτσης μετά, απλά να εξηγήσω. Είναι μια συνάρτηση, όπως κάθε συνάρτηση έχει τι? Αποτέλεσμα, ίσο, όνομα συνάρτησης, φιμποκό, φιμποκώστας από εκεί. Τουνή. Έτσι. Αρχικοποίηση είναι αυτό, εντάξει. Η φιμπονάτση του 1 δεν είναι 1. Αποτέλεσμα του 1 ίσον με 1. Αποτέλεσμα του 2 ίσον με 1. Για i από 3 έως ν, το ν θα το βάλει ο εχειριστής, το αποτέλεσμα είναι ο προηγούμενος και ο προηγούμενος. Αυτό δεν είπαμε. Και αυτή είναι μια άλλη εντολή εκτύπωσης είτε στην οθόνη είτε σε αρχείο ουσιαστικά. Την τιμή σας ζαλίζει προς το παρόν. Πείτε ότι εμφανίζει την τιμή επί της οθόνης εδώ. Δείξε μου, προσέξτε, για κάθε i υπολογίζω το επόμενο αποτέλεσμα, άρα τι θα κάνει. Για ίσον 1, τι πιάνει τη τιμή. Για ίσον 2 και για ίσον 3. Θα πας εσύ και θα πεις ίσον 3, πού είναι το ίσον 3. Ωπ, έχω μια δομή επανάληψης. Μου λέει, γεια από 3 στο 3, μπαίνω μέσα στη δομή επανάληψης. Εσχύει, είμαι στην περίπτωση της δομής, θα πεις εσύ. Είμαι, μπαίνω μέσα. Για ίσον 3, το ίσον 2 είναι ίσον 1. Τα έχεις αυτά, τα έχεις, άρα είσαι 1 και 1, 2, άψογα. Το ίσον 4, είσαι μέσα στη δομή, είσαι, αισθάνεσαι άνετης. Λες, στη δομή είμαι, πολύ ωραία, στα ρούχα μου είμαι, πάμε παρακάτω. Ορίζομαι, ορίζομαι, μια ίσον 4 είναι η 3 και η 2 τιμή. Άρα είναι 3. Και έτσι θα υπολογιστούν οι υπόλοιποι. Απλά, κάθε φορά που υπολογίζω την τιμή της Φιμπονάτση, εμφανίζω στην οθόνη και την τιμή του Άη, σωστά. Και αφού τελειώσω όλα αυτά, εμφανίζω πάλι την τελική τιμή του Άη. Εάν το τρέξω αυτό, θα δω τις ενδιάμεσες τιμές τις έχω κόψει και δύο πράγματα. Το έτρεξα, παρακαλώ την προσοχή σας, για ν ίσον 20. Και βλέπω ότι η τελική τιμή του Άη είναι η τελευταία επανάληψη έγινε, όταν το Άη είχε τη μη 20 και όταν βγήκε από τις επαναλήψεις, η τελική τιμή του Άη ήταν 20. Κάνω το ίδιο τώρα με while. Η διαφορά του while είναι ότι επειδή πρώτα απ' όλα δεν ξέρω πόσες φορές θα τρέξει, αυξάνω μόνος μου τον δίκτη. Του λέω, ο επόμενος Άη είναι ο προηγούμενος στην 1. Και επίσης, η μεγάλη διαφορά είναι ότι εντάσσω μία... Τι είναι αυτό? Είναι η έκφραση ελέγχου. Όσο αυτή είναι τη, true. Όσο λοιπόν το Άη είναι μικρότερο ίσο από το ν, υπολόγησε. Έβαλα ν ίσον 20. Με τον ίδιο τρόπο το αποτέλεσμα, εμφανίζω στην οθόνη πράγματα, έτσι, και εμφανίζω και την τελική τιμή. Ξαναλέω. Και αυτό είναι μια σημαντική διαφορά και θα την δούμε ξανά και ξανά και στις θεωρίες και στις ασκήσεις. Στη while ξέρουμε πόσες φορές θα λάβει η επανάληψη. Όχι. Άρα, πώς θα χειριστώ τον μετρητή, θα του πω μετά από κάθε επανάληψη, αύξε τη τιμή σου κατά 1. Και από εκεί και πέρα, αν το τρέξω, κοιτάξτε λέω την τελική τιμή. Η τελική τιμή είναι 21. Η while εκτελέστηκε τελευταία φορά όταν το I ήταν 20, αλλά η τελική τιμή είναι 21. Γιατί εδώ η τελική τιμή είναι 21 και στην for είναι 20. Θα εξηγήσω. Διότι στην for, του λέμε, θα ξεκινήσεις από την αρχική τιμή του I, θα φτάσεις μέχρι εκείνη την τελική τιμή του I με τόσα βήματα. Τρία, τέσσερα, πέντε και τα λοιπά. 20. Με το που θα κάνεις το 20ο βήμα, σημαίνει ότι θα κάνεις και τον τελευταίο 20ο υπολογισμό, θα υπολογίσεις τον 20ο όρο της φιμπονάτση και μετά προχωράς παρακάτω τη ζωή σου. Δεν χρειάζεται να κάνεις κάτι άλλο. Έτσι δεν είναι. Η while, τι κάνει όμως, λειτουργεί διαφορετικά. Η while δεν ξέρει πόσα βήματα θα χρειαστεί. Το μόνο που ξέρει είναι ότι, έτσι όπως εγώ την έχω δημιουργήσει, να ελέγχει, το μόνο που ξέρει είναι να ελέγχει την τιμή του I σε σχέση με το ν. Άρα, πόσο είναι το ν? Ποιον όρο θέλαμε εμείς? Το ν ήταν το 20. Θέλαμε τον 20ο όρο. Οπότε, λοιπόν, θα ξεκινήσει με την αρχική τιμή του I. Γιατί Iσον 3, διότι ο πρώτος για Iσον 1 είναι ο πρώτος όρος της φιμπονάτσης. Ο πρώτος όρος της φιμπονάτσης πόσους είναι? 1. Ο δεύτερος όρος? 1. Τον τρίτο θέλουμε. Άρα, για τιμή του Iσον με 3, έως ποια τιμή δεν ξέρω. Το μόνο που ξέρω είναι ότι θα συνεχίσω να περπατώ, να υπολογίζω, όσο το I είναι μικρότερο ίσο του ν. Άρα, είμαι στο Iσον 3. Αναρωτιέμαι, είμαι I μικρότερο ίσο του ν. True ή False? True. Άρα, θα κάνω υπολογισμό. Θα πάω παρακάτω, θα υπολογίσω τον τρίτο όρο της φιμπονάτσης. Θα εμφανίσω στην οθόνη και την τιμή του I και μετά το I τι τιμή θα πάρει. Τι λέει εκεί, Iσον Iσον 1, ποια τιμή είχα? Τρία. Η καινούργια με τιμή ποια είναι? Τέσσερα. Είμαι στο τέσσερα. Είμαι I μικρότερο ίσο του ν. Βεβαίως, True και πάλι. Αφού είναι True, θα ξανακάνω τον υπολογισμό. Θα υπολογίσω τον τέταρτο όρο. Θα εμφανίσω στην οθόνη την τιμή μου, Iσον 4, και μετά θα κάνω και τι? Θα υπολογίσω την έτοιμη του I, η οποία είναι η προηγούμενη, τέσσερα, συν ένα, πέντε. Έτσι θα πάω, εδώ φτάνω τώρα. Φτάνω στην τιμή I ίσον με είκοσι. Έχω προχωρήσει λοιπόν και είμαι εδώ στην τιμή είκοσι. Υσχύει ο έλεγχος, είμαι σε I μικρότερο ίσο του ν. Βεβαίως, είναι True ο έλεγχος. Εφόσον είναι True, θα υπολογιστεί και ο όρος ο είκοστος. Θα εμφανιστεί στην οθόνη η τιμή που έχει το I αυτή τη στιγμή. Η τιμή μου, είμαι το I. Θα εμφανιστεί η τιμή πια, είκοσι. Και η επόμενη τιμή που θα λάβω, ποια θα είναι? Η 21. Τι τιμή έχω τώρα πλέον, τι σβουγγάρι έχω, το σβουγγάρι που γράφει 21. Είμαι τώρα μικρότερος ίσος από το ν. Όχι, άρα συνεχίζω παρακάτω. Τι υπάρχει παρακάτω, το εκτύπωσε την τιμή σου. Γι' αυτό και εφανίζεται εδώ το 21. Για να φύγουμε από την δομή επανάληψης τύπου while, πρέπει η συνθήκη ελέγχου να καταστεί ψευδής. Και ο μόνος τρόπος, εδώ στο συγκεκμένο παράδειγμα, που υπάρχει για να καταστεί η συνθήκη ελέγχου ψευδής, είναι το I να ξεπεράσει τα όρια μέτρησης. Οπότε, το φόρ εκτελείται έως ο το μετρητής φτάσει στην τιμή που θέλουμε. Αμέσως μετά πάβει η εκτέλεση της επανάληψης και το πρόγραμμα συνεχίζεται κανονικά. Το while εκτελείται όσος ισχύει η συνθήκη. Άρα, για να περατωθεί η επανάληψη, πρέπει η συνθήκη να γίνει ψευδής. Αυτά λοιπόν για σήμερα. Την επόμενη φορά θα δούμε πώς μπορώ τα φόρ να τα μετατρέψω σε while. Περιμένουμε στα εργαστήρια. Μην ξεχάσετε να δείτε το θέμα, τα βίντεο και τα υπόλοιπα στοιχεία. |