ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3...

263
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εαρινό Εξάμηνο 2019-20

Transcript of ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3...

Page 1: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εαρινό Εξάμηνο 2019-20

Page 2: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης2

Εισαγωγή⚫ Διδάσκων: Δρ. Κώστας Παναγιωτάκης

– Email: [email protected], [email protected], [email protected]

– Αναπληρωτής Καθηγητής – Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας -ΕΛΜΕΠΑ

– Σπουδές: Πτυχίο, Μετ/κο, Διδακτορικό από το Τμήμα Επιστήμης Υπολογιστών, Παν. Κρήτης

– Homepage: www.csd.uoc.gr/~cpanag

⚫ Web site μαθήματος: https://eclass.teicrete.gr/

⚫ Αναφορές – Πηγές - Βιβλία:– Προγραμματίζοντας σε matlab Έκδοση: 1η/2011 Συγγραφείς: Στεφανάκος Χ.Ν

– Προγραμματισμός με τη Χρήση Matlab Έκδοση: 1η Έκδ./2012 Συγγραφείς: ΓραββάνηςΓιώργος, Γιαννουτάκης Κωνσταντίνος

– Οδηγός της C, Herbert Schildt, Εκδόσεις Γκιούρδας

– Η Γλώσσα Προγραμματισμού C, Kernighan & Ritchie, Εκδόσεις Κλειδάριθμος

– C: από τη Θεωρία στην Εφαρμογή , Γ. Σ. Τσελίκης - Ν. Δ. Τσελίκας , ISBN: 978-960-93-1961-4

– Προγραμματισμός, Κώστας Παναγιωτάκης, Τμήμα Επιστήμης Υπολογιστών, Παν/μιοΚρήτης, 2008-10

Page 3: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης3

Εισαγωγή: Σκοπός

⚫ Εισαγωγή σε τεχνικές προγραμματισμού

⚫ Εκμάθηση της γλώσσας του Matlab / C / python / app inventor

⚫ Ανάπτυξη εφαρμογών με χρήση του Matlab / C /python

– Χειρισμός βρόχων, δένδρων αποφάσεων, συναρτήσεων, μεταβλητών, πινάκων, δομών δεδομένων, αρχείων

– Γραφικές παραστάσεις, πράξεις πινάκων, συστήματα γραμμικών και μη γραμμικών εξισώσεων, συμβολικοί υπολογισμοί, σύνδεση Matlab με Excel, στατιστική, εφαρμογές σε διοίκηση επιχειρήσεων

Page 4: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης4

Εισαγωγή: Σκοπός

⚫ Εκμάθηση της γλώσσας Προγραμματισμού (Matlab/C/python)

⚫ Προγραμματισμός – Αλγοριθμική σκέψη

– Βάση για έναν Επιστήμονα Πληροφορικής

– Εκμάθηση/Κατανόηση σημαντικών εννοιών

– Επίλυση προβλημάτων (αλγόριθμος)

– Προγραμματισμός αλγορίθμων

⚫ Από τον αλγόριθμο στο πρόγραμμα

– Διόρθωση/Κατανόηση/Αλλαγή προγράμματος

⚫ Εκμάθηση τρόπου γραψίματος για να είναι εύκολη η ανανέωση και η επαναχρησιμοποίηση των προγραμμάτων μας

⚫ Βάσεις για επαγγελματικές δεξιότητες

– Θέσεις εργασίας που απαιτούν γνώσεις προγραμματισμού

Page 5: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης5

Εισαγωγή: Περιεχόμενο

– 1η Διάλεξη: Εισαγωγή

– 2η Διάλεξη: Αλγόριθμοι και Προγράμματα

– 3-4η Διάλεξη: Προγραμματισμός με blocks - App Inventor

– 5-6η Διάλεξη: Τύποι Μεταβλητών -Έλεγχος Ροής

– 7η Διάλεξη: Επανάληψη

– 8η Διάλεξη: Συναρτήσεις

– 9η Διάλεξη: Αλφαριθμητικά

– 10η Διάλεξη: Πίνακες

– 11η Διάλεξη: Γραφικές Παραστάσεις

Αρχεία – σύνδεση με EXCEL

– 12η Διάλεξη: Δομές Δεδομένων

– 13η Διάλεξη: Αναζήτηση & ταξινόμηση Μετάβαση από μία γλώσσα σε μια άλλη

Page 6: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης6

Εισαγωγή: Πλατφόρμες Προγραμματισμού

⚫ Matlabhttp://www.mathworks.com/products/matlab/

⚫ Octave⚫ Δωρεάν πλατφόρμα με πολλές ομοιότητες με το matlab

https://www.gnu.org/software/octave/

⚫ FreeMat– Δωρεάν πλατφόρμα με πολλές ομοιότητες με το matlab

http://freemat.sourceforge.net/

⚫ Execute MATLAB/Octave Script Onlinehttp://www.compileonline.com/execute_matlab_online.php

⚫ App Inventor –Προγραμματισμός για συσκευές android

Page 7: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης7

Εισαγωγή: Εργαλεία για την γλώσσα C

⚫ Σε LINUX– gcc, γλωσσομεταφραστής της C– ddd, xxgdb, debugger της C (εύρεση λαθών)– Editors : Emacs, vi, vim, gvim, pico, xcoral, kate για την συγγραφή προγραμμάτων

⚫ Σε Windows– wubi: Εγκατάσταση Linux (Ubuntu, Kubuntu) μέσω Windows

(http://wubi-installer.org/)

– Open source περιβάλλοντα προγραμματισμού της C, Dev-C++(http://www.bloodshed.net/) και wxDev-C++ (http://wxdsgn.sourceforge.net/)

– cygwin ή MinGW (http://www.mingw.org/), για προγραμματισμό και μεταγλώττιση

– Περιβάλλοντα προγραμματισμού της C, όπως Microsoft Visual Studio, Visual Studio 2010 Express

⚫ Συμβουλή:– Στήστε ένα καλό περιβάλλον προγραμματισμού στο σπίτι σας

Page 8: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης8

Εισαγωγή: Εργαλεία για την Python

⚫ Free program language

⚫ Εκδόσεις 2.x, 3.x– Προτείνεται να βάλετε την 2.x έκδοση

⚫ Python Anaconda – Πλήρης έκδοση της Python (~300 MB)– http://continuum.io/downloads

⚫ Windows / LINUX / MAC 32 & 64 bit

⚫ Συμβουλή:– Στήστε ένα καλό περιβάλλον προγραμματισμού στο σπίτι σας

Page 9: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης9

Διδασκαλία στα εργαστήρια

⚫ Διαφάνειες (ppt)

⚫ Eclass

⚫ Βιντεο-μαθήματα

⚫ Επίλυση ασκήσεων στο εργαστήριο

Page 10: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης10

Εισαγωγή: Βαθμολόγηση και Οργάνωση

⚫ Το μάθημα θα έχει:– Διαλέξεις Θεωρίας & Εργαστηρίου με προαιρετική παρουσία

– Εργαστηριακές Ασκήσεις (Ε)

– Project σε ομάδες των 1-2-3-4 ατόμων (P)

– Τελικό (Τ)

⚫ Τύπος υπολογισμού τελικού βαθμού Μαθήματος

– Τελικός Βαθμός = 0.5*Τ+0.25*Ε+0.25*P

– Για να περάσει κάποιος το μάθημα πρέπει να ισχύουν τα παρακάτω :

1. Ο Βαθμός στο Τελικό Τ ≥ 4 και

2. Ο Βαθμός Ασκήσεων: Ε ≥ 5 και να έχουν αποσταλεί τουλάχιστον 7 ασκήσεις στο eclass και

3. Ο Βαθμός στο Project : P ≥ 5

Ο βαθμός είναι ενιαίος και αν δεν ισχύουν και οι 3 παραπάνω προϋποθέσεις

*Οι φοιτητές του Διοίκησης Επιχειρήσεων που έχουν δηλώσει στο Π.Σ. τους Θεωρία (ισχύει το 1) και Εργαστήριο (ισχύει το 2 και το 3).

Page 11: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης11

Εργαστηριακή Άσκηση

⚫ Ατομική

⚫ Μικρή προγραμματιστική εργασία που καλύπτει διάφορα της ύλης του μαθήματος

⚫ Παράδοση μόνο μέσω e-class αυστηρά σε συγκεκριμένες ημερομηνίες

– Δεν μπορεί κάποιος να παραδώσει αργότερα

Page 12: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης12

Project

⚫ Ομάδες των 1-4 ατόμων

⚫ Μεγάλη προγραμματιστική Εργασία στο Matlab/FreeMat

⚫ Παρουσίαση σε ppt

⚫ Παράδοση του project μόνο μέσω e-class

– Μπορεί κάποιος να παραδώσει αργότερα μόνο για κάποιο σοβαρό λόγο, θα υπάρχει μείωση βαθμού κατά 50%.

Page 13: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης13

Εισαγωγή: Περί Αντιγραφής

⚫ Τι είναι:

– Αντιγραφή λύσης (συμφοιτητή, διαδίκτυο, κάποιον τρίτο, κτλ)

– Αντιγραφή κειμένου ή μέρους αυτού κατά την διάρκεια εξέτασης

⚫ Τιμωρία:

– Μηδενισμός της άσκησης, διαγωνίσματος κτλ. σε όλα τα μέρη που εμπλέκονται στην αντιγραφή

– Μηδενισμός στο μάθημα

– Ενημέρωση του τμήματος σχετικά

Page 14: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης14

Εισαγωγή: Συμβουλές

⚫ Ρωτήστε, ενημερωθείτε, διαβάστε, ζητήστε βοήθεια

⚫ Βοήθεια δεν προσπαθώ

⚫ Εκμεταλλευτείτε τα εργαστήρια/ώρες γραφείου

⚫ Ο προγραμματισμός μαθαίνετε μόνο με προγραμματισμό ~ οδήγηση - κολύμβηση -μπάσκετ

– Υπομονή, επιμονή, προσπάθεια

– Η εξάσκηση (διάβασμα και προγραμματισμός) θα σας κάνει δυνατούς

– Καλός προγραμματιστής ~ γραμμές κώδικα που έχει γράψει

Page 15: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης15

Εισαγωγή

⚫ Κύριο χαρακτηριστικό προγραμματισμού – αν μάθει κάποιος «σωστό προγραμματισμό» σε μία γλώσσα μπορεί πολύ εύκολα να μάθει και μια επόμενη γλώσσα.

– Αν κάποιος έχει δίπλωμα μπορεί να οδηγήσει οποιοδήποτε αυτοκίνητο!!!

Στο μάθημα θα δούμε την μετάβαση από το Matlab σε C και Python

Page 16: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης16

Εισαγωγή: Για την επόμενη φορά

⚫ Εγκαταστήστε κάποιο περιβάλλον προγραμματισμού (freemat) στον υπολογιστή σας.

Page 17: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης17

ΠΕΡΙΕΧΟΜΕΝΑ

Περιγραφή Matlab

Εφαρμογές:

Μαθηματικές εφαρμογές

Σχεδίαση και Γραφικές Παραστάσεις

Προγραμματισμός

Τηλεπικοινωνίες & Ψηφιακή

Επεξεργασία Σήματος

Ανάλυση ΕικόναςΑυτόματος Έλεγχος

Συστήματα Ηλεκτρικής Ενέργειας

Οικονομικές Εφαρμογές

Page 18: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης18

Matlab

MATLAB :

Γλώσσα υψηλούεπιπέδου για γρήγορη ανάπτυξη αλγορίθμωνΧρήση βελτιστοποιημένων βιβλιοθηκών και διαδικασιών για μεγάλο αριθμό εφαρμογώνΕργαλείο ανάλυσηςδεδομένων

Page 19: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης19

Μενού Βοήθειας του MatlabΑναζήτηση (εντολές ή περιεχόμενο)

Demos

Page 20: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης20

Εργαλειοθήκες – Toolboxes

Εφαρμογές:Μαθηματική ανάλυση

& Επεξεργασία

Ψηφιακή

Επεξεργασία Σήματος

Επεξεργασία Εικόνας

και Ήχου

Σχεδιασμός

Συστημάτων

Αυτομάτου Ελέγχου

Οικονομικές εφαρμογές

Βιομηχανικές

Εφαρμογές

Page 21: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης21

Μαθηματική Ανάλυση & Επεξεργασία

Αλγόριθμοι

Επιχειρησιακή

έρευνα

Παλινδρόμηση &

Παρεμβολή

Επίλυση Συνήθων

& Μερικών

Διαφορικών

Εξισώσεων

Στατιστική

Παρεμβολή κατά

Spline

Γραμμική Άλγεβρα

Page 22: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης22

2Δ Γραφικές Παραστάσεις

F1(x) = sin(x), xϵ[0,2π]

F2(x) = sin(x+π/2), xϵ[0,2π]

t = 0:pi/100:2*pi;

y1=sin(t);

y2=sin(t+pi/2);

plot(t,y1,t,y2)

grid on

Page 23: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης23

3Δ Γραφικές Παραστάσεις

d(x,y) = |C(x) – C(y)|2

3Δ Γραφική παράσταση Επιφάνειας d(x,y)

Page 24: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης24

Σχεδίαση & Γραφικές Παραστάσεις

Bar and area graphs

Pie charts

Γραφική απεικόνιση διανυσμάτων

Ιστογράμματα

Πολικά Διαγράμματα

Τρισδιάστατες Γραφικές Παραστάσεις

Στρεφόμενα διανύσματα και μιγαδικοί αριθμοί

Page 25: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης25

Pie Charts

Τα διαγράμματα με τη μορφή πίτας είναι πολύ χρήσιμα όταν θέλουμε να βρούμε τη συνεισφορά κάποιου στοιχείου (δεδομένου) ως προς το σύνολο των στοιχείων (δεδομένων)

2D και 3D pie charts

Page 26: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης26

Διανυσματικά Διαγράμματα

Απεικόνιση διανυσμάτων σε πολική μορφή

Διανυσματικά διαγράμματα σε καρτεσιανές συντεταγμένες

Page 27: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης27

Επεξεργασία Δεδομένων

Καταχώρηση μετρούμενων τιμών υπό μορφή πίνακα

Αριθμητική επεξεργασία των μετρήσεων, προσδιορίζοντας

Μέση Τιμή, Μέση Απόκλιση, Min & Max

Γραφική απεικόνιση των μετρήσεων με τη μορφή

Ιστογράμματος στις 2 ή και στις 3 Διαστάσεις του χώρου

Page 28: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης28

Απεικόνιση διακριτών στοιχείων

Μπορούμε να απεικονίσουμε διακριτά δεδομένα σε οποιαδήποτε από τις παρακάτω μορφές:

Page 29: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης29

Τρισδιάστατες Γραφικές Παραστάσεις

3D απεικόνιση του υπερβολικού Παραβολοειδούς pzb

y

a

x2

2

2

2

2

=+−

Page 30: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης30

Επεξεργασία εικόνων

Γενικά:

Χ = imread(filename)

image(X)

για να μπορώ να διαχειριστώ το Χ

Έτσι:

⚫ >> a=imread('xray.tif');

⚫ >> imshow(a)

• Οι εικόνες είναι πίνακες...

Page 31: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης31

Επεξεργασία εικόνων

⚫ >> whos % για να διαπιστώσω το μέγεθος της εικόνα (240 Χ 320)

⚫ >> a1=a(100,:); % επιλέγω την 100ή γραμμή

⚫ >> Figure % ανοίγω μια νέα εικόνα

⚫ >> plot(a1)– Αναπαράσταση της 100ης γραμμής της εικόνας

0 50 100 150 200 250 300 35050

100

150

200

250

300

Page 32: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης32

Επικοινωνία με βάσεις δεδομένων - Excel

Βάσεις δεδομένων

Συμβατότητα με όλες τις βάσεις δεδομένων ODBC/JDBC

Δημιουργία SQL queries από το περιβάλλον του MATLAB

Ταυτόχρονες συνδέσεις σε πολλαπλές βάσεις δεδομένων

Excel Link

Πρόσβαση σε όλες τις συναρτήσεις του MATLAB απ’τα λογιστικά φύλλα του Excel

Ανάλυση δεδομένων του Excel στο MATLAB και αντιστρόφως

Page 33: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης33

Ανάπτυξη και επέκταση εφαρμογών

Λόγω της ανοικτής αρχιτεκτονικής του προγράμματος και των προηγμένων εργαλείων που παρέχει το Matlab δίνεται η δυνατότητα στο χρήστη να αναπτύξει εφαρμογές οι οποίες επικοινωνούν με τις πιο προηγμένες γλώσσες προγραμματισμού όπως οιC/C++, Fortran

Page 34: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης34

Μοντελοποίηση τηλεπικοινωνιακών συστημάτων

Δημιουργία τυχαίου δυαδικού σήματος (πληροφορία)

Κωδικοποίηση σήματος χρησιμοποιώντας κατάλληλο convolutional encoder

Εφαρμογή BPSK διαμόρφωσης στο κωδικοποιημένο σήμα

Προσθήκη θορύβου στο μεταδιδόμενο σήμα

Αποκωδικοποίηση

Ανάκτηση πληροφορίας, μέτρηση σφάλματος

Page 35: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης35

Προβλήματα Στατιστικής Ανάλυσης

Ανάλυση δεδομένων σε κατανομές

Εκτίμηση παραμέτρων

Page 36: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης36

Προβλήματα Στατιστικής Ανάλυσης

Ομαδοποίηση Δεδομένων – Ταξινόμηση – Discriminant Analysis

Page 37: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης37

Προβλήματα βελτιστοποίησης

Objfun.m

function f = objfun(x)

f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);

x0 = [-1,1]; % αρχικοποίηση

options = optimset('LargeScale','off');

[x,fval,exitflag,output] = fminunc(@objfun,x0,options)

Page 38: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης38

Συμβολικοί Υπολογισμοί

Πρόβλημα: Ανάλυση της συνάρτησης

Λύση:

syms x

num = 3*x^2 + 6*x -1;

denom = x^2 + x - 3;

f = num/denom

ezplot(f)

%Εύρεση ασύμπτωτων

limit(f, inf)

ans = 3

%Εύρεση Μέγιστων- Ελάχιστων

f1 = diff(f) %παράγωγος

%Εύρεση ριζών παραγώγου

crit_pts = solve(f1)ans =

[ -8/3-1/3*13^(1/2)]

[ -8/3+1/3*13^(1/2)]

ezplot(f)

hold on

plot(double(crit_pts), double(subs(f,crit_pts)),'ro')

title('Maximum and Minimum of f')

text(-5.5,3.2,'Local minimum')

text(-2.5,2,'Local maximum')

hold off

Page 39: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης39

Συμβολικοί Υπολογισμοί

Πρόβλημα: Υπολόγισε τις λύσεις της εξίσωσης cos(2*x)+sin(x)=1.

Λύση:

s = solve('cos(2*x)+sin(x)=1')s =

[ 0]

[ pi]

[ 1/6*pi]

[ 5/6*pi]

Πρόβλημα: Υπολόγισε τις λύσεις του συστήματος:

Λύση:syms x y alpha %ορισμός συμβόλων

[x,y] = solve(x^2*y^2, x-y/2-alpha)

x =

[ 0]

[ 0]

[ alpha]

[ alpha]

y =

[ -2*alpha]

[ -2*alpha]

[ 0]

[ 0]

Page 40: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης40

Αλγοριθμικά Προβλήματα

Πρόβλημα: Δοθέντος καμπύλης C(t) = [x(t), y(t)], t ϵ[0,1], να υπολογιστούν Ν-1 σημεία επί

της καμπύλης Pi = C(ti), i = 1,…,N-1, ώστε η καμπύλη να διαιρεθεί σε Ν ίσου μήκους χορδές,

|Pi – Pi+1| = |Pi+1 – Pi+2|, Α = P0 = C(0), Β = PN = C(1).

Αλγόριθμος:

Αρχικοποίηση: L1 = [(0,0), (t1,0)] … [(tM-1,0), (1,0)]

Υπολογισμός του πίνακα d(x,y) = |C(x)-C(y)|

Σε κάθε επανάληψη k, υπολογίζονται τα Lk :

if (u, v)Lk-1, u > v→(z, u) Lk, z > ud(u, v) = d(z, u)

Τέλος οι λύσεις δίδονται από τη ρίζα της: d(1,z) – d(z,u) = 0

∩ ∩

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0.1

0.2

0.4

0.5

0.6

0.7

0.8

0.9

1

0.3

d(x,y)

Page 41: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αλγόριθμοι και Προγράμματα

Page 42: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης42

Αλγόριθμοι

⚫ Μια ακολουθία από βήματα/ενέργειες που είναι:

– Καλώς (σαφώς) ορισμένα

– Αποτελεσματικά (μπορούν να εκτελεστούν)

– Πεπερασμένα (τερματισμός)

– Συνήθως δέχονται δεδομένα

⚫ Παραδείγματα αλγορίθμων

– Υπολογισμού ημερομηνίας Πάσχα

– Υπολογισμός ριζών

– Πολλ/σμός – Αντιστροφής πινάκων

– Αναζήτησης και Ταξινόμησης

– Εύρεσης συντομότερου μονοπατιού

– Πρόβλεψης

– Ανάλυσης ιατρικών εικόνων

– Δρομολόγησης πακέτων στο internet

Page 43: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης43

Αλγόριθμοι

⚫ Απαιτήσεις - Πρόβλημα – Προδιαγραφές

⚫ Σχεδίαση - Ορθότητα

⚫ Πολυπλοκότητα (με βάση το μέγεθος των δεδομένων Ν) (προαιρετική για το μάθημα μας)

– Υπολογιστικό Κόστος

– Κόστος σε Μνήμη

⚫ Βελτιστοποίηση (προαιρετική για το μάθημα μας)

⚫Υλοποίηση

Page 44: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης44

Αλγόριθμοι

⚫ Απαιτήσεις - Πρόβλημα – Προδιαγραφές– Υπολογίστε το άθροισμα

1+2+3+…+Ν

⚫ Σχεδίαση (Υπολογίζω κανονικά το άθροισμα ξεκινώντας από το 1)

Σ = 0 //άθροισμα

Για κ=1 … Ν //μετρητής

Σ = Σ + κ

⚫ Ορθότητα

⚫ Πολυπλοκότητα– Υπολογιστικό Κόστος, 2*Ν -> Ο(Ν)

– Κόστος σε Μνήμη, 2 -> Ο(1)

⚫ Βελτιστοποίηση: Σ = Ν*(Ν+1) / 2– Πολυπλοκότητα

⚫ Υπολογιστικό Κόστος, 3 -> Ο(1)

⚫ Κόστος σε Μνήμη, 1 -> Ο(1)

Page 45: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης45

Αλγόριθμοι

⚫ Απαιτήσεις - Πρόβλημα – Προδιαγραφές

– Ταξινομήστε Ν φυσικούς, (μικρότεροι από το 1000)

α[1], α[2], …, α[Ν] < 1000

⚫ Σχεδίαση – Ορθότητα (Βρίσκω το μικρότερο, μετά τον αμέσως επόμενο, …)

Για κ=1 … Ν

Για λ=κ+1 … Ν

Αν α[λ] > α[κ]

άλλαξε τη θέση των α[κ], α[λ]

⚫ Πολυπλοκότητα– Υπολογιστικό Κόστος:Τ(Ν) = Τ(Ν-1)+Ν =>Τ(Ν)= Ν*(Ν+1)/2 -> Ο(Ν2)

– Κόστος σε Μνήμη, 2 -> Ο(1)

1

1000

1 N2

Page 46: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης46

Αλγόριθμοι

⚫ Απαιτήσεις - Πρόβλημα – Προδιαγραφές– Ταξινομήστε Ν φυσικούς, (μικρότεροι από το 1000)

α[1], α[2], …, α[Ν] < 1000

⚫ Βελτιστοποίηση: Για κ=1 … 1000

h[k] = 0

Για κ=1 … Ν

h[a[k]] = h[a[k]]+1

μ = 1

Για κ=1 …1000

Για λ=1 …h[k]

a[μ] = κ

μ = μ+1

– Πολυπλοκότητα

⚫ Υπολογιστικό Κόστος: 1000 + Ν + 1000 + 2*Ν -> Ο(Ν)

⚫ Κόστος σε Μνήμη, 1003 -> Ο(1)

1

1000

1 2 N

Page 47: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης47

Προγραμματισμός και Αλγόριθμοι

⚫ Πρόγραμμα = Αλγόριθμος σε μια συγκεκριμένη γλώσσα υπολογιστή

⚫ Γλώσσα Μηχανής: η μόνη γλώσσα που πραγματικά καταλαβαίνει ο υπολογιστής

⚫ Άλλες γλώσσες υπολογιστών ≠ γλώσσα προγραμματισμού⚫ Γλώσσες Προγραμματισμού

– Χαμηλού επιπέδου, πιο κοντά στη γλώσσα μηχανής– Μεσαίου– Υψηλού, πιο κοντά στην καθομιλουμένη

⚫ Η επιλογή της γλώσσας προγραμματισμού εξαρτάται από την εφαρμογή

⚫ Συνήθως το πρόγραμμα γράφετε «ευκολότερα» (είναι πιο σύντομο) στις Υψηλού επιπέδου γλώσσες όμως εκτελείτε με μικρότερη ταχύτητα σε σύγκριση με μια χαμηλού επιπέδου υλοποίηση.– Πολλά όμως εξαρτώνται και από τον προγραμματιστή.

Page 48: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης48

Οικογένειες Γλωσσών Προγραμματισμού

⚫ Δύσκολη η ταξινόμηση⚫ Ένα «παράδειγμα» γλωσσών παρέχει την άποψη που έχει ο

προγραμματιστής για το πρόγραμμα.

⚫ Μερικές σημαντικές κλάσεις:⚫ Διαδικαστικές (Procedural) : C, Pascal, Fortran

– Παραδοσιακός τρόπος προγραμματισμού – Σειρά εντολών - ρουτίνες

⚫ Συναρτησιακές (Functional) : Lisp, Mathematica– Σειρά εντολών– Οι συναρτήσεις – συμβολισμοί είναι αντίστοιχοι με τα μαθηματικά

⚫ Δηλωτικές (Declarative) : Prolog, XML – Αποτελούνται από σειρά ορισμούς και δηλώσεις– Λογικός Προγραμματισμός (Logic Programming)– Προγραμματισμός με βάση Περιορισμούς (Constraint Programming)

⚫ Αντικειμενοστραφής Προγραμματισμός⚫ Παράλληλος Προγραμματισμός⚫ Διαδικτυακός Προγραμματισμός

Page 49: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης49

Προγράμματα σε Matlab/C

⚫ Εντολές και Δεδομένα

⚫ Εντολές– Μια σειρά από εντολές προς τον επεξεργαστή

– Αποθηκεύονται στη μνήμη του υπολογιστή

⚫ Δεδομένα– Διαβάζουμε από τη μνήμη του υπολογιστή

– Αποθηκεύονται (γράφονται) στη μνήμη του υπολογιστή

⚫ Οι εντολές πρέπει να έχουν μια λογική αλληλουχία

⚫ Και να ακολουθούν κάποια βήματα

⚫ Αλγόριθμοι …

Page 50: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης50

Πρώτο Παράδειγμα σε Γλώσσα C

/* Filename: 02-my_first_program.c

Author: C. Panagiotakis

Date: 14/03/07

Function: Prints Hello, world.

*/

#include <stdio.h>

int main()

{

printf(“Hello, world\n”);

return 0;

}

Page 51: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης51

Πρώτο Παράδειγμα σε Matlab

% Filename: 02-my_first_program.m

% Author: C. Panagiotakis

% Date: 18/02/2014

% Function: Prints Hello, world.

disp('Hello, world');

Page 52: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης52

Γενική Δομή στην γλώσσα C

⚫ Λίστα από συναρτήσεις⚫ Συνάρτηση

Τύπος-επιστρεφόμενης-τιμής

όνομα(λίστα-παραμέτρων)

{

δηλώσεις μεταβλητών

λίστα εντολών

}

/*Επιστρέφει το μέγιστο μεταξύ των x, y*/

int max(int x,int y)

{

int z = x; /*δηλώσεις μεταβλητών*/

if (y > x) /*λίστα εντολών*/

z = y;

return z;

}

Page 53: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης53

Γενική Δομή στην γλώσσα Matlab

⚫ Scripts ⚫ Αρχεία από συναρτήσεις⚫ Συνάρτηση

function [Επιστρεφόμενες μεταβλητές] =

όνομα(λίστα-παραμέτρων)

λίστα εντολών

%Επιστρέφει το μέγιστο μεταξύ των x, y

function [z] = myMax(x,y)

z = x;

if (y > x) %λίστα εντολών

z = y;

end

Γιατί βάλαμε όνομα myMax; Tο matlab έχει συνάρτηση max!!!

Στο Matlab μπορούμε να επιστρέψουμε περισσότερες από μία τιμή στην συνάρτηση. Αλλάξτε τον κώδικα ώστε να επιστρέψει και την ελάχιστη τιμή.

Page 54: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης54

Δημιουργία Προγράμματος σε C

Αλγόριθμος (π.χ. Bubble Sort)

|

Γλώσσα Προγραμματισμού (BubbleSort.c)

|-----------------------------------------------------compiler

Ενδιάμεσος Κώδικας (object code) (BubbleSort.o)

| -----------------------------------------------------linker

Εκτελέσιμο (Executable) (BubbleSort.exe)

>gcc –Wall -g BubbleSort.c

>./a.outΣτο Matlab o κώδικας τρέχει απευθείας μέσα στο γραφικό περιβάλλον του matlab– δεν χρειάζεται compile

Page 55: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης55

Δημιουργία Προγράμματος

Αλγόριθμος

|

Γλώσσα Προγραμματισμού

|--------------------------------------------Συντακτικά Λάθη

Ενδιάμεσος Κώδικας (object code)

| -------------------------------------------- Λάθη Συμβόλων

Εκτελέσιμο (Executable) ------------- Λογικά Λάθη

Run Time Errors

Page 56: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης56

Διερμηνευμένες Γλώσσες (Interpreted)

Αλγόριθμος

|

Γλώσσα Προγραμματισμού (κώδικας) (π.χ. QuickSort.c)

|

Διερμηνέας (Interpreter) (CInterpreter.exe)

Εκτελέσιμο

Page 57: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης57

Ακολουθία «τρεξίματος»:

⚫ Φόρτωμα του κώδικα στη μνήμη

⚫ Δέσμευση μνήμης

⚫ Εκτέλεση της συνάρτησης ή του script

⚫ Δέσμευση μνήμης ανάλογα με την ροή του προγράμματος: κάθε συνάρτηση δεσμεύει όση μνήμη χρειάζεται την ώρα που τρέχει

⚫ Στο matlab οι μεταβλητές των scripts παραμένουν και μετά το τέλος τους, ενώ οι μεταβλητές των συναρτήσεων χάνονται

Page 58: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός με blocks -App Inventor

Page 59: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης59

Προγραμματισμός με blocks

⚫ Γλώσσες προγραμματισμού για αρχάριους στον προγραμματισμό

– Δεν γράφουμε κώδικα ☺

⚫ χρήση Blocks ☺

– Εύκολο debugging ☺

– Γραφικό περιβάλλον ανάπτυξης κώδικα ☺και προσθήκης αντικειμένων ☺

– Δυσκολίες στην επα-χρησιμοποίηση κώδικα και σε πολύπλοκες εφαρμογές

⚫ Παραδείγματα γλωσσών

– App inventor (Android)http://appinventor.mit.edu/explore/

– Scartch https://scratch.mit.edu/

– Makeroid (Android)

Page 60: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης60

App inventor

⚫ Ορισμός γραφικού περιβάλλοντος και συστατικών – οθονών – ιδιοτήτων συστατικών (DESIGNER)

Page 61: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης61

App inventor

⚫ Προγραμματισμός ενεργειών (BLOCKS)– Με βάση τα εργαλεία που έχουμε στον designer προγραμματίζουμε τις ενέργειες που θα

προκύψουν από την αλληλεπίδρασή τους με το χρήστη.

Page 62: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης62

App inventor: Στοιχεία μιας Εφαρμογής

[1] App Inventor 2: Create your own Android Appshttp://www.appinventor.org/book2 Chapter 14: Understanding an App’s Architecture

Page 63: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης63

App inventor:Σύνδεση εφαρμογής με events

– Οι εφαρμογές των κινητών στηρίζονται στα events (γεγονότα) που συμβαίνουν μέσω της επικοινωνίας του κινητού με το χρήστη, με άλλα κινητά ή γενικά με τους αισθητήρες του κινητού.

– Για παράδειγμα, όταν ο χρήστης πατήσει το κουμπί μιας εφαρμογής – ξεκινάει το event

– Το πρόγραμμα (η ίδια η εφαρμογή) καθορίζει μετά τον χειρισμό τους

Εκκίνηση διαδικασίας MoveMole –όταν ανοίξει η εφαρμογή

Όταν ο χρήστης πατήσει το κουμπί, θα ξεκινήσει η διαδικασία μέσα στο When

[1] App Inventor 2: Create your own Android Appshttp://www.appinventor.org/book2

Page 64: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης64

App inventor:Μεταβλητές

– Αποθηκεύουν αποτελέσματα – δεδομένα

Όταν ανοίξει η εφαρμογή –δημιουργούμε μια μεταβλητή

Ανάθεση τιμής

[1] App Inventor 2: Create your own Android Appshttp://www.appinventor.org/book2

Λήψη τιμής (τι τιμή έχει)

Page 65: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης65

App inventor: Σχήμα IF

⚫ Με το σχήμα IF μπορούμε να πάρουμε αποφάσεις μέσα στην εφαρμογή μας για το τι θα κάνει

[1] App Inventor 2: Create your own Android Appshttp://www.appinventor.org/book2

Σχήματα αποφάσεων IF/ELSE

Επιλογή συνθήκης

Συνδυασμός διαφόρων συνθήκων

Page 66: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης66

App inventor: Σχήμα IF Παράδειγμα

[1] App Inventor 2: Create your own Android Appshttp://www.appinventor.org/book2

Αν τύχει 1 τότε θα καλέσει το 111-1111Αλλιώς θα καλέσει το 222-2222

Page 67: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης67

App inventor: Επανάληψη

⚫ Μια λειτουργία μπορεί να γίνει πολλές φορές

και να τερματιστεί ελέγχοντας μια συνθήκη

⚫ Αν γραφτεί με σχήμα επανάληψης

(FOR/WHILE) κερδίζουμε γραμμές κώδικα

[1] App Inventor 2: Create your own Android Appshttp://www.appinventor.org/book2

Page 68: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης68

App inventor: Παράδειγμα με Επανάληψη

[1] App Inventor 2: Create your own Android Appshttp://www.appinventor.org/book2

Page 69: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης69

App inventor

⚫ Άσκηση

– Κατασκευή της εφαρμογής υπολογιστή (calculator) με επιπλέον χαρακτηριστικά

ΛΥΣΗ – https://youtu.be/oHSj1OFexoc

Page 70: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης70

App inventor

⚫ Άσκηση

– Για να κατασκευάσετε μια εφαρμογή που δείχνει τον τιμοκατάλογο σε ένα εστιατόριο και ένα κουμπί για τηλεφωνική παραγγελία ποια συστατικά θα χρειαστούν.

ΛΥΣΗ

Ο τιμοκατάλογος θα μπορούσε να είναι μια εικόνα ή και περισσότερες εικόνες επομένως θα πρέπει να μπει το συστατικό image από τον designer.

Για να μπορέσει να γίνει τηλεφωνική κλήση με κουμπί θα χρειαστεί στον designer να μπει ένα button και το PhoneCall

Page 71: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης71

App inventor - Ασκήσεις

– Ο Παρακάτω κώδικας Blocks υλοποιεί την εφαρμογή κορώνα/γράμματα.Περιγράψτε πως λειτουργεί ο κώδικας και τι θα αλλάζατε για να μια εφαρμογή για ρίψης ζαριού.

– ΛΥΣΗ

– Α) Όταν πατηθεί το κουμπί CoinButton, θα εμφανιστεί η εικόνα 1.png ή 2.pngπάνω στο κουμπί CoinButton με την εκτέλεση του κώδικα set CoinButton.Image to

και θα ακουστεί ο ήχος Sound1 (call).

– Β) το «from 1 to 2» θα γινόταν το «from 1 to 6», και θα έπρεπε να υπήρχαν και οι 6 εικόνες ανεβασμένες στην εφαρμογή (1.png, 2.png, 3.png, …, 6.png).

Θα μπορούσε να γίνει με 2 ζάρια;

Page 72: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης72

App inventor - Ασκήσεις

– Ο Παρακάτω κώδικας Blocks υλοποιεί την εφαρμογή παίξε το αγαπημένο σου τραγούδι ανάμεσα σε 4 προεπιλεγμένα τραγούδια. Περιγράψτε πως λειτουργεί ο κώδικας και τι θα αλλάζατε για μπορέσει η εφαρμογή να υποστηρίξει 8 τραγούδια αντί για 4.

– ΛΥΣΗ

– Α) Όταν πατηθεί το κουμπί κατάλληλο κουμπί θα παίξει το αντίστοιχο mp3, π.χ. το κουμπί ΑΒutton αντιστοιχεί στο a.mp3.

– Β) Θα χρειαστούν άλλα 4 κουμπιά EButton, FButton, HButton, IΒutton

Για παράδειγμα στο EButton θα μπει ο κώδικας

When Ebutton.Click

Do ….. “e.mp3” (… όμοια με παραπάνω)

….

Page 73: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης73

App inventor - Ασκήσεις

– Στο προηγούμενο παράδειγμα προσθέστε τον κώδικα για ένα κουμπί StopButton που θα σταματάει την μουσική (αντί για Play Stop).

– ΛΥΣΗ

When StopButton.Click

do call NotesSound.Stop

Page 74: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης74

App inventor - Ασκήσεις

– O παρακάτω κώδικας υλοποιεί την ρίψη 2 ζαριών.

Α) Εξηγήστε πως λειτουργεί – πότε εμφανίζει το μήνυμα κέρδισες.

Β) Τι θα αλλάζατε για να βγάζει το μήνυμα κέρδισες όταν ο χρήστης φέρει διπλές.

Γ) Τι θα αλλάζατε για να εκτυπώσει δίπλα στο κέρδισες πόσες φορές ο χρήστης έχει κερδίσει και πόσες φορές έχει ρίξει τα ζάρια;

Page 75: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης75

App inventor - Ασκήσεις

Λύση

Α) Οι global μεταβλητές dice1, dice2 αρχικοποιούνται με λαμβάνουν τυχαίες τιμές από το 1 μέχρι το 6 όταν ο χρήστης πατήσει το κουμπί ThrowButton.

Ανάλογα με την τιμή που θα λάβουν θα φορτωθούν και οι ανάλογες εικόνες και θα ακουστεί ο ήχος Throwsound.

Στην συνέχεια γίνεται έλεγχος αν dice1 == 6 και το dice2 == 6 (δηλαδή αν έχουν φέρει 6άρες) και τότε θα βγει το μήνυμα κέρδισες.

Β) Αλλαγή του κώδικα στην γραμμή που είναι το if σε

If get global dice1 = get global dice2

Page 76: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης76

App inventor - Ασκήσεις

Λύση

Γ) Θα χρειαστεί να οριστούν οι μεταβλητές

initialize global games to 0

initialize global wins to 0

που θα μετράνε τα συνολικά παιχνίδια και τις νίκες.

Επίσης στο τέλος ο κώδικας στο block θα αλλάξει σε

set global games to get global games +1

If get global dice1 = get global dice2

then

set global wins to get global wins +1

set labelResult1.text to Join "Παιχνίδι: " (get global games)

set labelResult2.text to Join «Κέρδισες: " (get global wins)

Page 77: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης77

Εξηγήστε την λειτουργία της παρακάτω Εφαρμογής

Page 78: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης78

Εξηγήστε την λειτουργία της παρακάτω Εφαρμογής

Page 79: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης79

App inventor - Ασκήσεις

Άσκηση

Κατασκευάστε την εφαρμογή

που φαίνεται δεξιά η οποία μπορεί

να αποθηκεύσει και να δώσει

οδηγίες για μια αποθηκευμένη

θέση.

Λύση

http://appinventor.mit.edu/explore/ai2/android-wheres-my-car.html

Page 80: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Μεταβλητές

Page 81: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης81

Μεταβλητές

⚫ «Επώνυμες» θέσεις μνήμης

⚫ Όνομα - Τύπος

⚫ Στο Matlab δεν δηλώνονται οι μεταβλητές στην αρχή αλλά παίρνουν τύπο κατά την χρήση τους

⚫ Ονόματα (καλύτερα μεγάλα από μικρά: μέχρι 31 χαρακτήρες) – να έχουν νόημα (λ.χ. Sum για άθροισμα) – case sensitive (λ.χ. var1, Var1)

– Προσοχή στις δεσμευμένες λέξεις του Matlab (if, end, while, for, break, continue, …) και στα ονόματα συναρτήσεων sum

⚫ Initialization: myfirstvariable = 0;

var

Page 82: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης82

Αναπαράσταση και Εύρος Τιμών στην C

⚫ Χαρακτήρες <-> char , 1 byte, 8 bits, αναπαριστούν 28 = 256 τιμές

⚫ Ακέραιοι <-> int {-2#bits-1, -2#bits-1 + 1, …, 2#bits-1 - 1}

⚫ Πραγματικοί <-> float ή double

Οι double έχουν μεγαλύτερο εύρος τιμών και μεγαλύτερη ακρίβεια αναπαράστασης από τους float

Page 83: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης83

Μεταβλητές – Τύπος στο Matlab

Integer: Ακέραιος8 bit (1 byte): 2^8 = 256 διαφορετικοί αριθμοίDouble precision: πραγματικοί αριθμοί διπλής ακρίβειας

Γιατί να υπάρχουν τόσοι τύποι δεδομένων;

Page 84: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης84

Μεταβλητές - Τύπος

⚫ O default (προκαθορισμένος) τύπος δεδομένων για αριθμητικά δεδομένα είναι διπλής ακρίβειας (double) για μετατροπή σε άλλο τύπο δεδομένων υπάρχουν οι παρακάτω συναρτήσεις . Η συνάρτηση class() μας δείχνει τον τύπο μιας μεταβλητής.

⚫ B = cast(A,newclass) converts A to class newclass

Παράδειγμα 2:

a = 10;class(a)b = cast(a,'uint8');class(b)

Παράδειγμα 1:

str = 'Hello World!' n = 2345; X = 1.5;c = 'a'+1un = uint32(789.50)

Page 85: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης85

Μεταβλητές - Τύπος

⚫ Λέξη– Var = ‘Kwstas’;

⚫ Αριθμός– X = 5;

⚫ Διάνυσμα– v = [1 2 3 2 1];– % v(1) = 1 v(2) = 2 v(3) = 3 v(4) = 2 v(5) = 1

⚫ Πίνακας– A = [1 2 3; 4.1 5 2.3;]; – % A(1,1) = 1 A(1,2) = 2 A(1,3) = 3– % A(1,1) = 4.1 A(1,2) = 5 A(1,3) = 2.3

Page 86: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης86

Μεταβλητές

a vector (Άνυσμα) x = [1 2 5 1]

x =

1 2 5 1

x(1) x(2) x(3) x(4)

a matrix (Πίνακας) a = [1 2 3; 5 1 4; 3 2 -1]

a =

1 2 3

5 1 4

3 2 -1

Transpose(ανάστροφος) y = a’ y =

1 5 3

2 1 2

3 4 -1

Page 87: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης87

Τελεστές – Προτεραιότητα Πράξεων

⚫ Πρόσθεση – Αφαίρεση : + -

⚫ Πολλ/σμος – Διαίρεση :* /– x = 5/2; %x = 2.5

⚫ Υπόλοιπο διαίρεσης : rem– x = rem(5,3) //x = 2

⚫ Ύψωση σε δύναμη : ^, .^– x = 5^3 //x = 5*5*5 = 125

⚫ Σειρά των πράξεων:1. ( )

2. ^, .^

3. * / (από αριστερά προς τα δεξιά)

4. + - (από αριστερά προς τα δεξιά)5. < <= >= >6. == !=

Page 88: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης88

Μετατροπές Τύπων – Αριθμητικοί Τελεστές

⚫ Οι εκφράσεις έχουν: μια τιμή και ένα τύπο

⚫ Τι γίνεται αν στην εφαρμογή του κανόνα

– έκφραση1 έκφραση2 τελεστής έκφραση3

⚫ οι τύποι της έκφραση2 και έκφρασης3 είναι διαφορετικοί;

⚫ Π.χ,. x = y + z, όπου το y είναι int32 και το z είναι double

⚫ Η «μικρότερη» έκφραση μετατρέπεται στην «μεγαλύτερη»

⚫ Η τελική εκφραση1 έχει τον τύπο της «μεγαλύτερης» έκφρασης

Page 89: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης89

Μετατροπές Τύπων – Αριθμητικοί Τελεστές

⚫ Διάβασμα τιμών από πληκτρολόγιο

⚫ Συνάρτηση input ⚫ result = input(prompt) displays the prompt string on the screen, waits for input from the

keyboard, evaluates any expressions in the input, and returns the result. To evaluate expressions, the input function can use variables in the current workspace.

⚫ str = input(prompt,'s') returns the entered text as a MATLAB string, without evaluating expressions.

⚫ Παράδειγμα στο matlab:

prompt = 'What is the original value? ';

result = input(prompt)

Page 90: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης90

Ανύσματα και Πίνακες

a vector (Άνυσμα) x = [1 2 5 1]

x =

1 2 5 1

x(1) x(2) x(3) x(4)

a vector (Άνυσμα) x = [1:2:11];

x =

1 3 5 7 9 11

x(1) x(2) x(3) x(4) x(5) x(6)

a matrix (3X3 Πίνακας) a = [1 2 3; 5 1 4; 3 2 -1]

a =

1 2 3

5 1 4

3 2 -1

Page 91: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης91

Ανύσματα και Πίνακες

a matrix (3x3 Πίνακας) a = [1 2 3;

5 1 4; 3 2 -1]

b = a(1:3,1:2)

⚫ b matrix (3x2 Πίνακας)b =

1 2

5 1

3 2

Page 92: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης92

Συνάρτηση size

⚫ Συχνά λάθη:

– Προσθέτουμε μεταβλητές διαφορετικής διάστασης

– Πολλαπλασιασμό πινάκων

⚫ size

– Επιστρέφει τη διάσταση της μεταβλητής⚫ a = [1:10];

⚫ size(a);

⚫ x = a’;

⚫ size(x);

⚫ a = [1 2 3; 3 2 -1;];

⚫ size(a)

Page 93: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης93

Πράξεις με Αριθμούς και Διανύσματα

X = 5;

Y = 10;

Z= X*Y+X;

Z = X/Y^2;

X = [1 2 3 4 12];

Z = X.^2;

Z = Z+2*X;

Page 94: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης94

Πράξεις με Πίνακες

A = pascal(3);B = magic(3);X = A + B

X =9 2 74 7 105 12 8

Y = X - A

Y =8 1 63 5 74 9 2

A = [1 1 1;1 2 3;1 3 6]

A =

1 1 1

1 2 3

1 3 6

X = A^2 %ίδιο με A*A

X =

3 6 10

6 14 25

10 25 46

Χ = A+2*A*A + A.^2;

Ο τελεστής .^ υψώνει σε δύναμη κάθε στοιχείο του πίνακα,

X = A.^2

A =

1 1 1

1 4 9

1 9 36

Page 95: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εντολές Ελέγχου Ροής

Page 96: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης96

Σειριακή εκτέλεση εντολών

⚫ Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών:

– Σειριακές εντολές (sequential – built in Matlab)

– Εντολές απόφασης (if, if/else)

– Εντολές επανάληψης ( for, while)

Page 97: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης97

Εντολές υπό Συνθήκη - if

if έκφραση

εντολή1

end

if έκφραση

εντολή1

else

εντολή2

end

if έκφραση1

εντολή1

elseif έκφραση2

εντολή2

else

εντολή3

end

%Αν η έκφραση έχει τιμή διάφορη του 0 (αληθής) %εκτελείται η εντολή 1 αλλιώς η εντολή2

%Αν η έκφραση έχει τιμή διάφορη του 0 (αληθής), %εκτελείται η εντολή 1

%Αν η έκφραση1 έχει τιμή διάφορη του 0 (αληθής), %εκτελείται η εντολή 1 %αλλιώς αν η έκφραση2 έχει τιμή διάφορη του 0%εκτελείται η εντολή 2%αλλιώς εκτελείται η εντολή 3

Page 98: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης98

Εντολές υπό Συνθήκη – if: Λογικοί τελεστές

Παράδειγμα

if (b ~= 0 && a/b >= 18.5) if (b ~= 0 || a ~= 0)x = 2; x = 10;

else elsex = 0; x = 0;

end end

x b a/b

0 0 0

0 0 19

0 1 0

0 1 18

2 10 20

x b a

0 0 0

10 0 1

10 1 0

10 1 2

10 10 1

Page 99: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης99

Παράδειγμα με if

x = input('Dwse to x:');

y = input('Dwse to y:');

p = input('Dwse thn pra3h meta3u twn x kai y + - / *:','s')

if p == '+'

res = x+y;

elseif p == '-'

res = x-y;

elseif p == '*'

res = x*y;

elseif p == '/'

res = x/y;

else

disp('La8os eisodos');

return;

end

disp('To apotelesma einai:');

disp(res);

%Ypologismos aplwn pra3ewn

Προσθέστε και περίπτωση της ύψωσης σε δύναμη x^y.

Page 100: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης100

Εντολές υπό Συνθήκη – if : Παράδειγμα

Να φτιάξετε κατάλληλη συνάρτηση που να

υπολογίζει και να επιστρέφει το φόρο,

δεδομένου του εισοδήματος (eisodhma) και του αριθμού των παιδιών(paidia).

Κανόνας:

Αφορολόγητο 10000 + 1000 για κάθε παιδί.

Για το εισόδημα που είναι πάνω από το

αφορολόγητο και μέχρι 30.000 ο φόρος είναι

25%.

Για το εισόδημα που είναι πάνω από 30.000 ο

φόρος είναι 35%.

function [foros] = getTax(eisodhma,paidia)

Page 101: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης101

Εντολές υπό Συνθήκη – if : Παράδειγμα

Να φτιάξετε κατάλληλη συνάρτηση που να υπολογίζει και να επιστρέφει το τόκο,

δεδομένου του ποσού (poso) και του αριθμού των μηνών(months) που θα κλείσουμε το ποσό.

Κανόνας:

Κάτω από 10000 δίνει 4%Από 10000 μέχρι 50000 δίνει 5%Πάνω από 50000 δίνει 6%

Η διάρκεια πάνω των 6 μηνών αυξάνει τον παραπάνω τόκο κατά 0.5%.

Η διάρκεια πάνω των 12 μηνών αυξάνει τον παραπάνω τόκο κατά 0.75%.

function [tokos,epitokio,kata8esh] = getTokos(poso, months)

Page 102: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης102

Τυπικά Λάθη

⚫ If x=5 αντί για if x==5

⚫ Ξεχάσατε το end

⚫ Λάθος στις προτεραιότητες: ( )

⚫ Λύση: Μορφοποίηση και χρήση σχολίων

Page 103: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης103

Μορφοποίηση⚫ Matlab

%Epistrefei ton endiameso ari8mo twn a,b,c

function [med] = getMedian(a,b,c)

if ((a <= b) && (a >= c)) || ((a >= b) && (a <= c))

med = a;

elseif ((b <= a) && (b >= c)) || ((b >= a) && (b <= c))

med = b;

else

med = c;

end

Χωρίς τα ‘=‘ είναι ο κώδικας ισοδύναμος;

Page 104: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης104

Μορφοποίηση

⚫ Ισοδύναμος κώδικας σε C

/*Epistrefei ton endiameso ari8mo twn a,b,c*/

int getMedian(int a,int b, int c)

{

int median; /*Endiamesos*/

if ((a <= b) && (a >= c)) || ((a >= b) && (a <= c))

{

median = a;

}

else if ((b <= a) && (b >= c)) || ((b >= a) && (b <= c))

{

median = b;

}

else

{

median = c;

}

return median;

}

Χωρίς τα ‘=‘ είναι ο κώδικας ισοδύναμος;

Page 105: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης105

Γενική Δομή Προγράμματος⚫ Αρχεία από συναρτήσεις. ⚫ Script που τις καλεί⚫ Στο Matlab το όνομα του αρχείου πρέπει να είναι ίδιο με το όνομα της

συνάρτησης. – Κάθε αρχείο συνάρτησης επιτρέπεται να έχει και δικές του συναρτήσεις αλλά μπορεί να τις δει μόνο

το αρχείο αυτό

function [επιστρεφόμενες-τιμές] = όνομα(λίστα-παραμέτρων)

λίστα εντολών

%Παράδειγμα: Επιστρέφει το μέγιστο μεταξύ των x, y

function [z] = myMax(x,y)

if (y > x) %λίστα εντολών

z = y;

else

z = x;

end

Page 106: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης106

App inventor

⚫ Παράδειγμα στο app inventor / Blocks Code

⚫ Χρήση IF

Page 107: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Επανάληψη

Page 108: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης108

Σειριακή εκτέλεση εντολών

⚫ Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών:

–Εντολές απόφασης :

(if, if/else)

–Εντολές επανάληψης :

( for, while)

–Σειριακές εντολές :(sequential)

Page 109: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης109

Επαναληπτικές Εντολές - while

Συντακτικό:while (έκφραση)

εντολήend

Σημασιολογία:1. Υπολόγισε την τιμή της έκφραση2. Αν είναι αληθής (μη μηδενική)3. Εκτέλεσε την εντολή4. Πήγαινε στο βήμα 15. Διαφορετικά, εξήλθε του βρόχου

Page 110: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης110

Επαναληπτικές Εντολές - forΣυντακτικό:

for variable = initval:endvalεντολή1;...εντολήN;

end

Σημασιολογία:1. variable = initval2. Αν η variable είναι μικρότερη ή ιση από endval τότε3. Εκτέλεση τις εντολές 4. Αύξησε τη variable κατά 1 5. Πήγαινε στο βήμα 26. Ειδάλλως, εξήλθε του βρόχου

Ισοδύναμο με:variable = initval;while variable <= endval

εντολή1;...εντολήN;

variable = variable +1;end

Page 111: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης111

Επαναληπτικές Εντολές - forΣυντακτικό:

for variable = initval:stepval:endvalεντολή1;...εντολήN;

end

Σημασιολογία:1. variable = initval2. Αν η variable είναι μικρότερη ή ιση από endval τότε3. Εκτέλεση τις εντολές 4. Αύξησε τη variable κατά stepval5. Πήγαινε στο βήμα 26. Ειδάλλως, εξήλθε του βρόχου

Ισοδύναμο με:variable = initval;while variable <= endval

εντολή1;...εντολήN;

variable = variable +stepval;end

Page 112: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης112

Επαναληπτικές Εντολές – while - for

Π.χ., υπολογισμός του αθροίσματος των τετραγώνων των πρώτων 10 φυσικών αριθμών

c=1;S=0;while c<=10

S = S + c*c;c= c+1;

endS

S = 0;for c=1:10

S = S + c*c;endS

Page 113: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης113

Επαναληπτικές Εντολές – while - for

Π.χ., υπολογισμός των τετραγώνων των πρώτων 10 φυσικών αριθμών και του αθροίσματός τους

n=10;

x = [];

for i = 1:n,

x=[x i^2];

end

x

sum(x)

Πως θα γραφόταν με while;

Page 114: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης114

Παραδείγματα Bρόχων%Υπολογισμός της μικρότερης δύναμης του 2 που

% είναι μεγαλύτερη από τον αριθμό n*/

function [p] = powerOfTwo(n)

p = 1;

while (1)

p = p*2;

if (p > n)

break;

end

end

Page 115: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης115

Επαναληπτικές Εντολές - while

c=1; sum=0; pl = 0;

while pl<10

if (rem(c ,7) == 0 || rem(c,9) == 0)

sum = sum+c*c;

pl=pl+1;

end

c=c+1;

end

sum

Πως θα γραφόταν με for;

Π.χ., Υπολογισμός των τετραγώνων των πρώτων 10 φυσικών αριθμών που

είναι πολλαπλάσια του 7 ή του 9 και του αθροίσματός τους

Page 116: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης116

Παραδείγματα Bρόχων

%Υπολογισμός του αθροίσματος των ψηφίων

%του αριθμού n

function [sum] = sumOfDigits(n)

pn = n;

sum = 0;

while pn > 0

x = rem(pn , 10);

pn = floor(pn/10);

sum = sum+x;

end

Page 117: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης117

Παραδείγματα Bρόχων

Εκτυπώστε τουs 10 πρώτους αριθμούς που το

άθροισμα των ψηφίων τους είναι 7 και την μέση

τους τιμή;

Page 118: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης118

Φωλιασμένοι βρόχοιfor i=1:8

v = [];

for j=1:i

v = [v '*'];

end

disp(v);

end

*

**

***

****

*****

******

*******

********

Page 119: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης119

Φωλιασμένοι βρόχοι

/*Πως θα εκτυπώναμε το παρακάτω σχήμα;*/

* *

** **

*** ***

**** ****

***** *****

****** ******

******* *******

****************

f_,

Page 120: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης120

Υπολογισμός παραμέτρων εκθετικού μοντέλου αύξησης

g(i) = g0 ai και χρήση του για πρόβλεψη.

Πρέπει να υπολογιστούν οι παράμετροι είναι το g0 και το a.

ΛΥΣΗ

function [a,g0] = getExpontialModel(f)

A = zeros(1,length(f)-1);

G_0 = zeros(1,length(f)-1);

for i=2:length(f)

if f(i-1) ~= 0

A(i-1) = f(i)/f(i-1);

else

A(i-1) = 1;

end

end

a = median(A); %more robust than mean function

for i=1:length(f)-1

G_0(i) = f(i)/a^i;

end

g0 = median(G_0);%more robust than mean function

Υπολογισμός Μοντέλων

Page 121: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης121

Εφαρμογή μοντέλου σε πραγματικά δεδομένα

%data from https://www.worldometers.info/coronavirus/country/italy/ IT = [12 11 27 28 41 49 36 133 97 168 196 189 250 175 368 349 345 475 427 627 793 651 601 743 683 919 889]; %Deaths in Italy

T = [1:length(IT)];%days from 29/2 TP = [1:length(IT)+1];[a,g0] = getExpontialModel(IT);pred = g0*a.^TP;

figure;plot(T,IT,'LineWidth',2);hold on;plot(TP,pred,'LineWidth',2);xlabel('Days');legend('Deaths Exp. Model','Deaths');title('Italy');

Page 122: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Συναρτήσεις

Page 123: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης123

Scripts

⚫ Σύνολο από εντολές που εκτελούνται με τη σειρά

– Εναλλακτικός τρόπος της γραμμής εντολής

– Έχουν κατάληξη .m

– Όταν ολοκληρωθούν οι μεταβλητές που χρησιμοποίησαν παραμένουν στη μνήμη

Page 124: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης124

Scripts : Παράδειγμα

Χ = [100 200 300 100 120 200 100];

Υ = [600 400 100 100 200 150 200];

w = length(X) %κλήση συνάρτησης

Sx = sum(X)

Sy = sum(Y)

Page 125: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης125

Αλγόριθμοι / Προγράμματα

⚫ Λύνουμε ένα πρόβλημα εκτελώντας μια ακολουθία από εντολές σε συγκεκριμένη σειρά

⚫ Αλγόριθμος: καθορίζει τις εντολές και τη σειρά εκτέλεσης

⚫ Έλεγχος προγράμματος (program control): καθορίζει αυστηρά τη σειρά εκτέλεσης των εντολών

Page 126: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης126

Συναρτήσεις - Functions

⚫ Χωρίζουμε το πρόγραμμα σε μέρη

⚫ Φιλοσοφία του «διαίρει και βασίλευε» (divide and conquer)

⚫ Τα μέρη αντιστοιχούν σε επιμέρους και μικρότερα προβλήματα

⚫ Αναλογία με μια επιχείρηση:– Ο προϊστάμενος αναθέτει μια δουλειά σε κάποιον

υφιστάμενο

– Παίρνει το αποτέλεσμα χωρίς να «ενδιαφέρεται» για τις λεπτομέρειες

– Παρενέργειες;

Page 127: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης127

Συναρτήσεις - Functions

⚫ Τα υποπροβλήματα πιο εύκολα διαχειρίσιμα νοητικά

⚫ Κάθε υποπρόβλημα αντιστοιχεί σε μία συνάρτηση

⚫ Πιο εύκολη διαχείριση κώδικα

– Debugging

– Updating

⚫ Χρήση υπαρχόντων συναρτήσεων σε καινούρια προγράμματα για τη λύση νέων προβλημάτων (code reuse)

– Επαναχρησιμοποίηση κώδικα

⚫ Αποφυγή επανάληψης του ίδιου κώδικα πολλές φορές μέσα σε ένα πρόγραμμα

⚫ Αφαίρεση (abstraction): «κρύβονται» λεπτομέρειες που δεν είναι απαραίτητες στον προγραμματιστή

Page 128: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης128

Συναρτήσεις - Functions

main

main

• Debugging

• Updating

• Code reuse Συναρτησιακός

Προγραμματισμός

Page 129: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης129

Συναρτήσεις

⚫ Επικοινωνία με το υπόλοιπο πρόγραμμα– Δέχονται ορίσματα

– Επιστρέφουν μια τιμή

– Απομονώνουν την επίλυση του υποπροβλήματος

⚫ Ιδανικά, δεν θέλουμε καμία άλλη επίδραση στο υπόλοιπο πρόγραμμα πέραν των παραπάνω (ισχύει στο matlab)

⚫ Συναρτησιακός προγραμματισμός (functional programming)

⚫ Ενδέχεται να επηρεάσουν κι αλλιώς το πρόγραμμά μας αν χρησιμοποιούμε καθολικές μεταβλητές, κτλ

⚫ Παρενέργειες

Page 130: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης130

Μεταβλητές … με λεπτομέρειες

⚫ Ιδιότητες μεταβλητών– Εμβέλεια (scope)

⚫ Ποια μέρη του προγράμματος αναγνωρίζουν την ίδια μεταβλητή (ίδια θέση μνήμης) με το ίδιο όνομα

– Διάρκεια ύπαρξης στη μνήμη (storage duration)

⚫ Πότε μια συγκεκριμένη διεύθυνση μνήμης λαμβάνει ένα συγκεκριμένο όνομα και πότε αποδεσμεύεται αυτή η αντιστοίχιση

Page 131: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης131

Εμβέλεια

⚫ Μια μεταβλητή μπορεί να έχει εμβέλεια:

– Καθολική: σε όλο το πρόγραμμα ενός αρχείου

⚫ Δηλώνονται (συνήθως) στο scriptglobal X Y Z;

⚫ Εμβέλεια: προσπελάσιμες από κάθε άλλη συνάρτηση μετά την δήλωσή τους

⚫ Διάρκεια ύπαρξης: από την αρχή της εκτέλεσης μέχρι το τέλος όλου του προγράμματος

– Τοπική: μέσα στον ορισμό μιας συνάρτησης

⚫ Εμβέλεια: προσπελάσιμες μόνο από την συνάρτηση

⚫ Διάρκεια ύπαρξης: από την αρχή της εκτέλεσης μέχρι το τέλος της συνάρτησης

Page 132: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης132

Καθολικές (global) μεταβλητές

⚫ Χρήσιμες όταν: πολλές συναρτήσεις μοιράζονται κοινά δεδομένα και δεν είναι πρακτικό να τα περνάμε ως ορίσματα κάθε φορά

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

⚫ Γίνεται ιδιαίτερα δύσκολη η επαναχρησιμοποίηση –τροποποίηση του προγράμματος

⚫ ΑΠΟΦΥΓΕΤΕ τις καθολικές μεταβλητές αν δεν είναι απαραίτητες!

Page 133: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης133

Τοπικές (local) μεταβλητές

⚫ Χρήσιμες για τις περισσότερες περιπτώσεις

– Συνήθως θέλουμε μεταβλητές για αποθήκευση ενδιάμεσων αποτελεσμάτων. Οι «τελικοί» υπολογισμοί καταλήγουν συνήθως σε μία τιμή, αυτήν που επιστρέφει η συνάρτηση

⚫ Προσπαθήστε να χρησιμοποιείτε μόνο τοπικές μεταβλητές και να σκέφτεστε λύσεις που δεν χρησιμοποιούν καθολικές μεταβλητές

Page 134: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης134

Μεταβλητές

⚫ Καθολικές (global) έναντι τοπικών μεταβλητών (local)

function [y, mysum ] = nextOfX(x, mysum )y = x; %τοπικήy = y + 1;mysum = mysum+1;

Script: mysum; %καθολική x = 0; %τοπικήy = 0; %τοπικήz = 1; %τοπική

mysum = 0;[x, mysum ]= nextOfX(0, mysum );[x]= nextOfX(x+2);

Υπάρχουν όσο «τρέχει η συνάρτηση»

Υπάρχουν όσο «τρέχει το πρόγραμμα»

Page 135: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης135

Ορισμός - Κλήση Συναρτήσεων

⚫ MATLAB functions (συναρτήσεις): Χρήσιμες για προχωρημένες εφαρμογές. Δέχονται παραμέτρους και επιστρέφουν μεταβλητές στο περιβάλλον κλήσης.

function S = sumOfN(n)

S = sum([1:n]);

Page 136: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης136

Ορισμός - Κλήση Συναρτήσεων

Επιστρεφόμενες μεταβλητές όνομα-συνάρτησης(λίστα-παραμέτρων)

⚫ Όνομα-συνάρτησης: οποιοδήποτε δεκτό όνομα

⚫ Επιστρεφόμενες μεταβλητές : δεδομένα που επιστρέφει η συνάρτηση

⚫ Λίστα-παραμέτρων: δεδομένα (μεταβλητές) είσοδο, χωρίζονται με κόμμα (παράμετρος1, παράμετρος2, ...)

⚫ Όταν ολοκληρωθούν οι μεταβλητές που χρησιμοποίησαν διαγράφονται από τη μνήμη

Page 137: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης137

Ορισμός - Κλήση Συναρτήσεων

⚫ Χ = [1 2 3 1 12 2.5 -1];

⚫ w = length(X); %κλήση συνάρτησης

⚫ S = sum(x);

⚫ [m pos] = max(X);

⚫ [Y, I] = sort(X, 'ascend');

⚫ [Y, I] = sort(X, ‘descend');

Page 138: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης138

Ορισμός Συναρτήσεων

Επιστρεφόμενες μεταβλητές όνομα-συνάρτησης(λίστα-παραμέτρων)Εντολές;

⚫ Όνομα-συνάρτησης: οποιοδήποτε δεκτό όνομα⚫ Η συνάρτηση πρέπει να επιστρέψει τουλάχιστον μία μεταβλητή ⚫ Λίστα-παραμέτρων: χωρίζονται με κόμμα (παράμετρος, παράμετρος,

...)

function [result] = SquareIt(a)

result = a*a;

Page 139: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης139

Μετατροπή σε συνάρτηση

Μετατρέψτε τον παρακάτω κώδικα από την διαφάνεια 92 σε συνάρτηση που θα δέχεται ο παράμετρο το μέγιστο πλήθος (10) και θα επιστρέφει το sum

c=1; sum=0; pl = 0;

while pl<=10

if (rem(c ,7) == 0 || rem(c,9) == 0)

sum = sum+c*c;

pl=pl+1;

end

c=c+1;

end

Π.χ.,

Page 140: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης140

Ροή του Προγράμματος

⚫ Η ροή του προγράμματος αλλάζει όταν συναντήσει την κλήση μιας συνάρτησης

⚫ f(a, b, c)

1. Πρώτα υπολογίζονται οι εκφράσεις που αντιστοιχούν στα ορίσματα

2. Οι τιμές των εκφράσεων a, b, c αντιγράφονται στα ορίσματα της f με την ίδια σειρά

3. Ο έλεγχος μεταπηδά στην πρώτη εντολή της f4. Οι εντολές της f εκτελούνται μέχρι να ολοκληρωθεί η

συνάρτηση ή να φτάσουμε σε εντολή return;

⚫ Τέλος συνάρτησης δηλαδή

5. Η κλήση f(a, b, c) αντικαθίσταται με την επιστρεφόμενη τιμή

Page 141: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης141

Συναρτήσεις

⚫ Επικοινωνία με το υπόλοιπο πρόγραμμα– Δέχονται ορίσματα

– Επιστρέφουν τιμές

– Απομονώνουν την επίλυση του υποπροβλήματος

⚫ Ιδανικά, δεν θέλουμε καμία άλλη επίδραση στο υπόλοιπο πρόγραμμα πέραν των παραπάνω

⚫ Συναρτησιακός προγραμματισμός (functional programming)

Page 142: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης142

Μεταβλητές … με λεπτομέρειες

⚫ Ιδιότητες μεταβλητών– Εμβέλεια (scope)

⚫ Ποια μέρη του προγράμματος αναγνωρίζουν την ίδια μεταβλητή (ίδια θέση μνήμης) με το ίδιο όνομα.

⚫ Οι μεταβλητές των συναρτήσεων έχουν εμβέλεια και διάρκεια ζωής μόνο μέσα στις συναρτήσεις.

– Διάρκεια ύπαρξης στη μνήμη (storage duration)

⚫ Πότε μια συγκεκριμένη διεύθυνση μνήμης λαμβάνει ένα συγκεκριμένο όνομα και πότε αποδεσμεύεται αυτή η αντιστοίχιση

Page 143: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης143

Συναρτήσεις

⚫ Συναρτήσεις ορισμένες από το χρήστη (user defined functions) μπορεί να τις καλέσει από οποιαδήποτε συνάρτηση που είναι στον ίδιο φάκελο, έχουν το όνομα που έχει και το αρχείο π.χ. myfunction.m

– Με την δυνατότητα του path (addpath) ο χρήστης μπορεί να προσθέσει καλέσει επιπλέον συναρτήσεις (από άλλο φάκελο)

⚫ Συναρτήσεις μέσα σε αρχεία συναρτήσεων (nested) ορισμένες από το χρήστη (user defined functions)που μπορεί να τις καλέσουν μόνο οι συναρτήσεις του ίδιου αρχείου.

⚫ Συναρτήσεις «βιβλιοθήκης» του matlab - μπορεί να τις καλέσει από οποιαδήποτε συνάρτηση

Page 144: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης144

Ορισμός - Κλήση Συναρτήσεων

⚫ Υπολογισμός επόμενης τιμής ακολουθίας με πρόβλεψη χρησιμοποιώντας τη μέση τιμή των n προηγούμενων τιμών

– Όνομα αρχείου myPredict.m

function [p] = myPredict(x,n) %ορισμός συνάρτησης

L = length(x); %κλήση συνάρτησης του matlab

T = L-n+1;

if T < 1,

T = 1;

end

p = mean(x(T:L)); % κλήση συνάρτησης του matlab

Θα μπορούσε η συνάρτηση να έχει γραφτεί με λιγότερες/περισσότερεςγραμμές κώδικα;

Page 145: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης145

Συναρτήσεις βιβλιοθήκης

⚫ http://freemat.sourceforge.net/help/index.html

⚫ http://freemat.sourceforge.net/help/sec_mathfunctions.html

⚫ Mathematical Functions

– sqrt SQRT Square Root of an Array

– exp EXP Exponential Function

– cos COS Trigonometric Cosine Function

– sin SIN Trigonometric Sine Function

– tan TAN Trigonometric Tangent Function

– atan ATAN Inverse Trigonometric Arctangent Function

– rem REM Remainder After Division

Παραδείγματα κλήσης… π.χ. a = sqrt(5)

Page 146: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης146

Συναρτήσεις βιβλιοθήκης

⚫ http://freemat.sourceforge.net/help/index.html

⚫ http://freemat.sourceforge.net/help/sec_mathfunctions.html

⚫ Elementary Functions

– abs ABS Absolute Value Function

– floor FLOOR Floor Function

– round ROUND Round Function

– mean MEAN Mean Function

– sum SUM Sum Function

– var VAR Variance Function

– diff DIFF Difference Function

Page 147: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης147

Συναρτήσεις βιβλιοθήκης

⚫ http://freemat.sourceforge.net/help/index.html

⚫ http://freemat.sourceforge.net/help/sec_array.html

Array Generation and Manipulations

– sort SORT Sort

– reshape RESHAPE Reshape An Array

– det DET Determinant of a Matrix

– eye EYE Identity Matrix

– norm NORM Norm Calculation

Page 148: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης148

Η συνάρτηση rand

⚫ http://freemat.sourceforge.net/help/index.html

⚫ http://freemat.sourceforge.net/help/sec_random.html

⚫ Random Number Generation

– randi RANDI Uniformly Distributed Integer

– rand RAND Uniform Random Number Generator

– randn RANDN Gaussian (Normal) Random Number Generator

Page 149: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης149

Η συνάρτηση rand στη C#include <stdio.h> #include <stdlib.h> #include <time.h>

int myrand(){

static int first = 0;int res;if (first == 0){

first = 1;srand(time(0));

}res = rand();return res;

}

int main(void){

printf ("Your random number is %d\n", myrand()); printf ("This compiler can generate random numbers from 0 to %d\n", RAND_MAX);

return(0);}

• Πως θα άλλαζε η συνάρτηση ώστε η myrand(.) να χρησιμοποιηθεί για ρίψη ζαριού;

• Πως θα άλλαζε η συνάρτηση ώστε η myrand(.) να επιστρέψει float από το -1 μέχρι το 1;

Page 150: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης150

Η βιβλιοθήκη <math.h> στην γλώσσα C⚫ double sqrt(double x); : Υπολογίζει την τετραγωνική ρίζα του x, πρέπει x > 0⚫ double exp(double x); : Υπολογίζει τον εκθετικό του x, ex

⚫ double log(double x); : Υπολογίζει τον φυσικό λογάριθμο του x, ln(x)⚫ int abs(int val); : Υπολογίζει την απόλυτη τιμή του val⚫ double pow(double x, double y); : Υπολογίζει την τιμή του x υψωμένη στη δύναμη y, χy

⚫ double sin(double x); : Υπολογίζει το sine του x, σε rad⚫ double cos(double x); : Υπολογίζει το cosine του x, σε rad⚫ double tan(double x); : Υπολογίζει την εφαπτομένη του x, σε rad⚫ double fmod(double x, double y); : Υπολογίζει το δεκαδικό υπόλοιπο της διαίρεσης χ/y, y > 0.⚫ double ceil(double x); : Υπολογίζει την μικρότερη ακέραια τιμή όχι μικρότερη από x.⚫ double floor(double x); : Υπολογίζει την μεγαλύτερη ακέραια τιμή όχι μεγαλύτερη από χ.

Για να κάνουμε compile πρόγραμμα που χρησιμοποιεί την math.h: >gcc –lm program.c

#include <stdlib.h>int rand(void);void srand(unsigned int seed);

Η συνάρτηση rand επιστρέφει ψευδοτυχαίους αριθμούς από 0 έως RAND_MAXΗ συνάρτηση srand χρησιμοποιείται για την αρχικοποίηση της rand() και τη γέννηση ψευδοτυχαίων αριθμών. Καλούμε μία φορά την srand και μετά την rand διαδοχικά για την παραγωγή των τυχαίων αριθμών.Αν ξανακαλέσουμε την srand και μετά την rand θα προκαλέσουμε την ίδια σειρά τυχαίων αριθμών.

Page 151: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης151

Συναρτήσεις βιβλιοθήκης

⚫ Functions ⚫ http://freemat.sourceforge.net/help/index.html

⚫ FreeMat Functions

⚫ Debugging FreeMat Code

⚫ Sparse Matrix Support

⚫ Mathematical Functions

⚫ Elementary Functions

⚫ Inspection Functions

⚫ Type Conversion Functions

⚫ Array Generation and Manipulations

⚫ Random Number Generation

⚫ Input/Ouput Functions

⚫ String Functions

• Signal Processing Functions• Numerical Methods• Operating System Functions• Optimization and Curve Fitting• Handle-Based Graphics• OpenGL Models• Function Related Functions

Page 152: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης152

Ορισμός - Κλήση Συναρτήσεων:Άσκηση

⚫ Υπολογισμός της παράστασης

sin2(27)+√cos (13)+tan3(32)

Page 153: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αλφαριθμητικά (Strings)

Page 154: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης154

Χαρακτήρες

⚫ Αναπαριστώνται από έναν δυαδικό αριθμό 8 δυαδικών ψηφίων (8 bits) (256 διαφορετικές τιμές)

⚫ Η κωδικοποίησή τους έχει τυποποιηθεί με τον κώδικα ASCII

⚫ Εκτός από γράμματα και ψηφία υπάρχουν και πολλοί ειδικοί χαρακτήρες

⚫ Σταθερές χαρακτήρων– Η έκφραση 'z' είναι μια σταθερά και αντιστοιχεί σε έναν

int με τα 8 τελευταία του bits ίσα με τον ASCII κωδικό του χαρακτήρα

– 'z', '\t', '\n', κτλ

Page 155: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης155

Βασικά για τα Αλφαριθμητικά (strings)

⚫ Μια σειρά από χαρακτήρες που αντιμετωπίζονται σαν ένα αντικείμενο– Γράμματα, αριθμοί, ειδικοί χαρακτήρες (*, /, $) και όλοι οι

εκτυπώσιμοι χαρακτήρες

– Τιμές εισάγονται μέσα σε μονά εισαγωγικά

⚫ S = 'Hello world'

– Τα Strings είναι ουσιαστικά πίνακες από χαρακτήρεςμεγέθους όσοι είναι οι χαρακτήρες

– Το S(1) είναι o χαρακτήρας H ή η τιμή 72 σε double μορφή

– Το S(2) είναι o χαρακτήρας e

– To S(10:-1:1) θα εκτυπώσει για παράδειγμα το string ανάποδα

Page 156: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης156

Βασικά για τα Αλφαριθμητικά (strings)

⚫ Να κατασκευαστεί συνάρτηση που να ελέγχει αν μια λέξη είναι ίδια με την ανάστροφή της.

– Για παράδειγμα η λέξη '1221' είναι ίδια με την ανάστροφή της.

– Για παράδειγμα η λέξη ‘anna' είναι ίδια με την ανάστροφή της.

– function [same,st] = isEqualWithTrans(s)

Page 157: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης157

Βασικά για τα Αλφαριθμητικά (strings)

⚫ H συνάρτηση char μετατρέπει σε χαρακτήρες έναν αριθμό. Το char (x+1) δίνει τον επόμενο χαρακτήρα.

⚫ Για την δημιουργία μπορούμε να χρησιμοποιήσουμε την συνάρτηση sprintf.

– Παράδειγμα:

– a = 1;

– name = 'myfile';

– x = sprintf('%s_%d.txt',name,a);

– a = 1.5;

– name = 'myfile';

– x = sprintf('%s_%2.2f.txt',name,a);

Page 158: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης158

Συναρτήσεις στα Αλφαριθμητικά

⚫ H συνάρτηση input μπορεί να διαβάσει ένα string από το πληκτρολόγιο.

– x = input('Dwse ena onoma','s')

⚫ H συνάρτηση strcmp συγκρίνει 2 strings και επιστρέφει 1 αν είναι ίδια αλλιώς 0.

– strcmp('test','test2‘)

Page 159: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης159

Παράδειγμα

⚫ Υπολογισμός του χαρακτήρα (c) που εμφανίζεται πιο συχνά σε ένα string και πόσες φορές εμφανίζεται(num).

function [c,num] = getMostFreq(s)

h = zeros(1,255);

for i=1:length(s),

h(s(i)) = h(s(i))+1;

end

[num,c] = max(h);

c = char(c);

Page 160: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης160

Υλοποίηση στην γλώσσα Cint getMax(int h[],int N) //Υπολογισμός της θέσης που παίρνει max o πίνακας h, N θέσεων{

int i, maxpos = 0;

for (i = 1; i < N; ++i)if (h[i] > h[maxpos])

maxpos = i;

return maxpos;}

char mostFreq(char *text) //Υπολογισμός του πιο συχνού σε εμφάνιση χαρακτήρα στο text{

int i,w = 0, hist[256];char res;

for (i = 0; i < 256; ++i)hist[i] = 0;

for (i = 0; i < strlen(text); ++i); //υπολογισμός ιστογράμματοςhist[text[i]]++;

ret = (char)(getMax(hist,256));printf(“%c”,ret);

return ret;}

Page 161: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης161

Παράδειγμα

⚫ Υπολογισμός του χαρακτήρα που εμφανίζεται πιο συχνά σε ένα string.

⚫ function [c] = getMostFreq(s)

Page 162: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Πίνακες (Arrays)

Page 163: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης163

Εισαγωγικά

⚫ Έστω ότι θέλουμε να αποθηκεύσουμε 100 ονόματα φοιτητών και τους βαθμούς τους. Πως θα το κάναμε αυτό με μεταβλητές;

⚫ Πως θα μπορούσαμε να πούμε με αυτό το τρόπο «ταξινόμησε τους βαθμούς και τύπωσε τους»;

⚫ Πως θα μπορούσαμε να πούμε «τύπωσε μόνο εκείνους που πέρασαν το μάθημα»;

⚫ ΛΥΣΗ: Πίνακες– Συλλογή μεταβλητών ίδιου τύπου

– Σταθερό μέγεθος

– Ν στοιχεία: 1 … Ν

– Στo matlab η αρίθμηση ξεκινάει από το 1

– Στην C/C++/Java η αρίθμηση ξεκινάει από το 0

Page 164: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης164

Πίνακες

⚫ Πίνακας

– Σύνολο από συνεχόμενες θέσεις μνήμης

– Ίδιο όνομα και ίδιος τύπος

⚫ Για να πάρουμε ένα στοιχείο του πίνακα δίνουμε:

– Όνομα πίνακα

– Θέση

– c(2) = 6;

⚫ Μορφή:Arrayname( position number )

– Πρώτο στοιχείο στη θέση 1

– Για έναν πίνακα n στοιχείων με όνομα c:

⚫ C(1), c(2), ..., c(n)

Όλα τα στοιχεία

του πίνακα έχουν

όνομα c

Θέση μέσα στον

πίνακα c

c[7]

-45

6

0

72

1543

-89

0

62

-3

1

6453

78

c[1]

c[2]

c[3]

c[4]

c[12]

c[11]

c[10]

c[9]

c[8]

c[6]

c[5]

Page 165: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης165

Πίνακες

⚫ Δημιουργία πινάκα 100 στοιχείων με μηδενικά – B = zeros(1,100);

– B = zeros(100,1);

⚫ Δημιουργία πινάκα 100 στοιχείων με άσσους – B = ones(1,100);

⚫ Τα στοιχεία του πίνακα χρησιμοποιούνται σαν συνηθισμένες μεταβλητές

B(1) = 3;

⚫ Μπορούμε να κάνουμε πράξεις. ⚫ If (x(1) == 3)⚫ C( 5 - 2 )

⚫ Εμφωλιασμένη αναφορά : c(c(1))

Page 166: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης166

Στοιχεία του Πίνακα σε Εκφράσεις

⚫ έκφραση1 όνομα_πίνακα(έκφραση2)– πρώτα υπολογίζεται η τιμή της έκφρασης2– η τιμή της έκφρασης2 πρέπει να είναι ακέραια μεγαλύτερη του 0– η τιμή της έκφρασης1 είναι το στοιχείο του πίνακα που αντιστοιχεί

στην συγκεκριμένη θέση που δίνεται από την έκφραση2– ο τύπος της έκφρασης1 είναι ο τύπος των στοιχείων του πίνακα

A = ones(1,10);

x=5;

for i = 1:10,

A(i) = rand;

end

z = A(2*x);

A(15) = 5;

// 2*x είναι ακέραια

//έκφραση με τιμή 10

// A[10] είναι συντακτικά

//σωστή έκφραση με τύπο double

Το Α(11) τι τιμή έχει; Το Α(15) τι τιμή έχει; Το Α(16) τι τιμή έχει;

Page 167: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης167

Όρια

Τι γίνεται αν βγούμε έξω από τον πίνακα;

Page 168: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης168

length - Size

⚫ length(x) Επιστρέφει τον αριθμό των στοιχείων του διανύσματος

⚫ size(x)

– Επιστρέφει το μέγεθος του πίνακα

– Αν ο x είναι 1 x 10

⚫ Το length(x) επιστρέφει 10

⚫ Το size(x,1) επιστρέφει 1

⚫ Το size(x,2) επιστρέφει 10

Page 169: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης169

Πίνακες σαν ορίσματα συναρτήσεων⚫ Ορίσματα: Δίνουμε το όνομα του πίνακα μόνο:

function [m] = getMean(myArray)

Sum = 0;

m = Sum/length(myArray);

– call-by-value– Η συνάρτηση δεν έχει πρόσβαση στο σημείο αποθήκευσης του πίνακα

for i=1:length(myArray)Sum = Sum+myArray(i);

end

i = 1;while i <= length(myArray)

Sum = Sum+myArray(i);i = i + 1;

end

Page 170: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης170

Πίνακες σαν ορίσματα συναρτήσεων στη C⚫ Ορίσματα: Δίνουμε το όνομα του πίνακα μόνο:

int myArray[ 24 ];

float getMean(int myArray[],int length)

{

int i;

float sum = 0;

for (i = 0; i < length; i++)

sum += myArray[i];

return sum/length;

}

getMean( myArray, 24 );

⚫ Συνήθως περνάμε μαζί και το μέγεθος του πίνακα– Οι πίνακες πέρνιουνται call-by-reference – Το όνομα του πίνακα είναι και δείκτης στο 1ο στοιχείο– Η συνάρτηση έχει πρόσβαση στο σημείο αποθήκευσης του πίνακα

Page 171: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης171

Πίνακες πολλών διαστάσεων

⚫ Πίνακες πολλών διαστάσεων– Πίνακες με γραμμές και στήλες (m Χ n πίνακας)

– Όπως και στα μαθηματικά : πρώτα γραμμή και μετά στήλη

Row 1

Row 2

Row 3

Column 1 Column 2 Column 3 Column 4

A( 1, 1 )

A( 2, 1)

A( 3,1)

A( 1, 2)

A(2, 2)

A(3, 2)

A( 1 ,3 )

A( 2 , 3 )

A( 3 , 3 )

A( 1 , 4 )

A( 2 , 4 )

A( 3 , 4 )

Row subscript

Array name

Column subscript

Page 172: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης172

Δισδιάστατοι Πίνακες

⚫ Αρχικοποίηση : A = [1 2; 2 3; 4 4];

⚫ Αρχικοποίηση : c = zeros (3,4);

– 3 x 4 πίνακας με μηδενικά

⚫ Χρήση: c(1,2) = 3;

– Το στοιχείο στην πρώτη γραμμή και δεύτερη στήλη είναι 3

– Χρήση: c(1,2) = 3;

Page 173: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης173

Δισδιάστατοι Πίνακες⚫ Υπολογισμός μέσης τιμής του πίνακα:

function [M] = getMean(C)

Sum = 0;

for i=1:size(C,1)

for j=1:size(C,2)

Sum = Sum+C(i,j);

end

end

Μ = Sum/(size(C,1)* size(C,2));

⚫ Υπολογισμός μέσης τιμής του πίνακα με χρήση της συνάρτησης sum:function [M] = getMean(C)

for i=1:size(C,1)

Sum(i) = sum(C(i,:));

end

Μ = sum(Sum)/(size(C,1)* size(C,2));

Page 174: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης174

Δισδιάστατοι Πίνακες⚫ Υπολογισμός της γραμμής του πίνακα που περιέχει τα περισσότερα

μηδενικά στοιχεία και πόσα είναι αυτά.

function [line,num] = getLineOfZeros(C)

Sum = zeros(1, size(C,1));

for i=1:size(C,1)

for j=1:size(C,2)

if C(i,j) == 0

Sum(i) = Sum(i)+1;

end

end

end

[num,line] = max(Sum);

Page 175: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης175

Πίνακες πολλών διαστάσεων

⚫ Αρχικοποίηση

– A = zeros(4,5,6);

– 3D πίνακας (4 x 5 x 6)

Page 176: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Γραφικές Παραστάσεις

Page 177: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης177

2Δ Γραφικές Παραστάσεις

⚫ plot(y)– y: διάνυσμα πεδίου τιμών

⚫ plot(x,y)– x: διάνυσμα πεδίου ορισμού– Τα x,y πρέπει να έχουν το ίδιο # στοιχείων.

⚫ plot(x,y,S)– Με κατάλληλες τιμές στο S μπορούμε να αλλάξουμε χρώμα και και της γραφικής

παράστασης. Κάντε help plot.

Page 178: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης178

2Δ Γραφικές Παραστάσεις

, thetaϵ[0,50]

0 5 10 15 20 25 30 35 40 45 50-30

-20

-10

0

10

20

30

theta = [0:0.1:50];z = 15*cos(theta/2)+7.5*sin(theta/5);plot(theta,z);

Page 179: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης179

2Δ Γραφικές Παραστάσεις

, thetaϵ[0,50]

title('Plot Example');xlabel('theta');ylabel('Z');

0 5 10 15 20 25 30 35 40 45 50-30

-20

-10

0

10

20

30Plot Example

theta

Z

Page 180: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης180

2Δ Γραφικές Παραστάσεις

figure;theta = [0:0.3:10];z = 10*cos(theta);plot(theta,z,'--bS','LineWidth',4,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',8);

0 1 2 3 4 5 6 7 8 9 10-10

-8

-6

-4

-2

0

2

4

6

8

10

z = 10*cos(3*theta)

Page 181: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης181

2Δ Γραφικές Παραστάσεις

theta = [0:0.1:10];

y = 4*cos(theta)+theta;

z = 10*sin(3*theta);

plot(theta,y,'k');hold on;plot(theta,z);legend('y','z');xlabel('theta');

⚫ Ταυτόχρονα στο ίδιο διάγραμμα (hold on)

0 1 2 3 4 5 6 7 8 9 10-10

-5

0

5

10

15

theta

y

z

y = 4*cos(theta)+thetaz = 10*sin(3*theta)

Page 182: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης182

2Δ Γραφικές Παραστάσεις

theta = [0:0.1:10];

y = 4*cos(theta)+theta;

z = 10*sin(3*theta);

subplot(2,1,1)plot(theta,y,'k');ylabel('y');xlabel('theta');hold on;subplot(2,1,2)plot(theta,z);ylabel('z');xlabel('theta');

⚫ Ταυτόχρονα στο ίδιο διάγραμμα (subplot)

y = 4*cos(theta)+thetaz = 10*sin(3*theta)

0 1 2 3 4 5 6 7 8 9 10-5

0

5

10

15

y

theta

0 1 2 3 4 5 6 7 8 9 10-10

-5

0

5

10

z

theta

Page 183: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης183

2Δ Γραφικές Παραστάσεις

theta = [0:0.5:10];y = 4*cos(theta)+theta;stem(theta,y);

⚫ Διαγράμματα Ακολουθιών (stem)

0 1 2 3 4 5 6 7 8 9 10-2

0

2

4

6

8

10

12

y = 4*cos(theta)+theta

Page 184: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης184

2Δ Γραφικές Παραστάσεις

theta = [0:1:10];y = 4*cos(theta)+theta;bar(theta,y);

⚫ Διαγράμματα Ακολουθιών (bar)

y = 4*cos(theta)+theta

0 1 2 3 4 5 6 7 8 9 10-2

0

2

4

6

8

10

12

Page 185: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης185

2Δ Γραφικές Παραστάσεις

x = 0:25;y = [exp(-.07*x).*cos(x);exp(.05*x).*cos(x)]';h = stem(x,y);set(h(1),'MarkerFaceColor','blue')set(h(2),'MarkerFaceColor','red','Marker','square')

⚫ Διαγράμματα Ακολουθιών (stem)

0 5 10 15 20 25-4

-3

-2

-1

0

1

2

3

4

Page 186: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης186

2Δ Γραφικές Παραστάσεις

z = [0 1 2 3 4 5 6 7 8 6 5 4 3 3.4 5.6 7.8 8.9 9.3 9.5];y = 0.5*randn(1,length(z)) + z;

plot(z);hold on;plot(y,'r');legend('data','noise');

⚫ Διαγράμματα Ακολουθιών με θόρυβο - legends

0 2 4 6 8 10 12 14 16 182

3

4

5

6

7

8

9

10

data

noise

Page 187: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης187

2Δ Γραφικές Παραστάσεις

⚫ Δυνατότητες plot

⚫ Αντιγραφή σε Word – PowerPoint – Excel – OpenOffice

⚫ ZOOM – Μεταφορά – Περιστροφή

⚫ Πρόσβαση σε δεδομένα - Τίτλος – Ετικέτες

⚫ Αποθήκευση σε εικόνα – JPEG (image data)– EPS (vector data)– BMP (image data)– GIF (image data)– TIF (image data)– FIG (vector data)– PDF (vector data)

Page 188: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης188

3Δ Γραφικές Παραστάσεις: Καμπύλες

⚫ plot3(x,y,z)

– x,y,z : διανύσματα ίσου μήκους για της καμπύλης (x(t),y(t),z(t))

⚫ Ισχύουν οι ίδιες εντολές με την plot

– subplot

– title

– xlabel

– ylabel

– zlabel

– Χρωματισμοί – τύποι γραμμής

– legend

– hold on

Page 189: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης189

3Δ Γραφικές Παραστάσεις: Καμπύλες

t = [0:pi/50:20*pi];plot3(t.*sin(t),t.^2.*cos(t),t);xlabel('x');ylabel('y');zlabel('z');

C(t) = (t·sin(t),t2·cos(t),t)

-40

-20

0

20

40

-1000

-500

0

500

10000

10

20

30

40

xy

z

Page 190: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης190

3Δ Γραφικές Παραστάσεις: Επιφάνειες

⚫ mesh(Z)

– Z : πίνακας τιμών της Z = f(x,y)

⚫ mesh(x,y,Z,C)

– Εκτύπωση της επιφάνειας (x(j), y(i), Z(i,j))

– Εκτύπωση της επιφάνειας (x(i,j), y(i,j), Z(i,j))

Page 191: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης191

3Δ Γραφικές Παραστάσεις: Επιφάνειες

[X,Y] = meshgrid(-2:.1:2, -2:.1:2);Z = X.^4 - 2*Y.^2;surf(X, Y, Z)xlabel('x');ylabel('y');zlabel('z');

f(x,y) = x4 - 2·y2, x,yϵ[-2,2]

-2

-1

0

1

2

-2

-1

0

1

2-10

-5

0

5

10

15

20

xy

z

Page 192: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης192

3Δ Γραφικές Παραστάσεις: Επιφάνειες

[X,Y] = meshgrid(-2:.1:2, -2:.1:2);Z = X.^2 + 2*Y.^2;meshc(X, Y, Z)xlabel('x');ylabel('y');zlabel('z');

f(x,y) = x2 + 2·y2, x,yϵ[-2,2]

-2

-1

0

1

2

-2

-1

0

1

20

2

4

6

8

10

12

xy

z

• meshc: Εκτύπωσηισοσταθμικών

Page 193: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης193

3Δ Γραφικές Παραστάσεις: Επιφάνειες

⚫ surf(Z)

– Z : πίνακας τιμών της Z = f(x,y)

⚫ surf(x,y,Z,C)

– Εκτύπωση της επιφάνειας (x(j), y(i), Z(i,j))

– Εκτύπωση της επιφάνειας (x(i,j), y(i,j), Z(i,j))

Page 194: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης194

3Δ Γραφικές Παραστάσεις: Επιφάνειες

[X,Y] = meshgrid(-2:.1:2, -2:.1:2);Z = X.^2 + 2*Y.^2;surf(X, Y, Z)xlabel('x');ylabel('y');zlabel('z');

f(x,y) = x2 + 2·y2, x,yϵ[-2,2]

-2

-1

0

1

2

-2

-1

0

1

2-10

-5

0

5

10

15

20

xy

z

Page 195: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης195

3Δ Γραφικές Παραστάσεις: Επιφάνειες

[X,Y] = meshgrid(-2:.1:2, -2:.1:2);Z = X.^2 + 2*Y.^2;surfc(X, Y, Z)xlabel('x');ylabel('y');zlabel('z');

f(x,y) = x2 + 2·y2, x,yϵ[-2,2] •surfc: Εκτύπωσηισοσταθμικών

-2

-1

0

1

2

-2

-1

0

1

20

2

4

6

8

10

12

xy

z

Page 196: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης196

3Δ Γραφικές Παραστάσεις: Επιφάνειες

f(x,y) = sin(x) + cos(y), x,yϵ[-2π,2π]

C(t) = (sin(t), et, t), tϵ[0,2]

Page 197: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αρχεία – Σύνδεση με Excel

Page 198: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης198

Αρχεία

⚫ Εισαγωγή Δεδομένων στο MATLAB

– Διάβασμα αρχείων

⚫ Εξαγωγή Δεδομένων (αποθήκευση)

– Γράψιμο αρχείων

⚫ Επικοινωνία με άλλα προγράμματα

– Σύνδεση Matlab με Excel

Page 199: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης199

Διάβασμα Αρχείων

⚫ Αρχικά ανοίγουμε το αρχείο με fopen

– Πρέπει να γνωρίζουμε το όνομα του

⚫ Χρήση fscanf για το διάβασμα

– Πρέπει να γνωρίζουμε πως είναι γραμμένο

⚫ Τέλος κλείνουμε το αρχείο με fclose

Παράδειγμα: Διάβασε το παρακάτω αρχείο με όνομα exp.txt

Λύση:

fid = fopen('exp.txt', 'r');

a = fscanf(fid, '%g %g', [2 inf]);

fclose(fid);

a = a';

122.31 1.78732.23 1.57112.13 1.43782.03 1.27212.13 1.17362.43 1.174

Page 200: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης200

Γράψιμο Αρχείων

⚫ Αρχικά ανοίγουμε το αρχείο με fopen

– Πρέπει να γνωρίζουμε το όνομα του

⚫ Χρήση fscanf για το γράψιμο

⚫ Τέλος κλείνουμε το αρχείο με fclose

Παράδειγμα: Γράψε το παρακάτω αρχείο με όνομα “log.txt” τις

τιμές του x και του log(x) για κάθε x ϵ{0.1,0.2 ,…,9.9, 10}Λύση:

x = [0.1:0.1:10];

y = [x; log(x)];fid = fopen(‘log.txt', ‘w');

fprintf(fid, '%6.2f %12.8f\n', y);

fclose(fid)

Page 201: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης201

Σύνδεση με το Excel

• Επικοινωνία με χρήση txt ή csv ή xls αρχείων• Επικοινωνία μέσω του Excel Link

Page 202: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης202

Διάβασμα/Γράψιμο .csv Αρχείων

⚫ The csvread function reads a text file containing comma separated values (CSV), and returns the resulting numeric matrix (2D).

⚫ The function supports multiple syntaxes. The first syntax for csvread is x = csvread('filename')

⚫ The csvwrite function writes a given matrix to a text file using comma separated value (CSV) notation.

⚫ The syntax for csvwrite is csvwrite('filename',x)

Page 203: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης203

Διάβασμα/Γράψιμο .csv Αρχείων

Παράδειγμα:

Δημιουργήστε ένα πίνακα 5 x 5 στο excel, αποθηκεύστε τον σε μορφή .csv και διαβάστε τον στο freemat.

Υπολογίστε τον αντίστροφο του, και αποθηκεύστε τον σε μορφή .csv και διαβάστε τον στο excel.

Page 204: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Δομές Δεδομένων

Page 205: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης205

Δομές Δεδομένων (Data Structures)

⚫ Καινούργιοι τύποι δεδομένων που αποτελούνται από την ομαδοποίηση υπαρχόντων τύπων δεδομένων

⚫ Ομαδοποίηση πληροφορίας που δεν μπορεί να αποθηκευτεί σε πίνακα

⚫ Συλλογή μη διατεταγμένων και ομοιογενών τιμών⚫ Πλεονέκτημα: Καλύτερη οργάνωση – διαχείριση πληροφορίας

πιο ευέλικτος σχεδιασμός – λιγότερες μεταβλητές⚫ Εναλλακτικά θα είχαμε πολλούς διαφορετικού τύπου πίνακες

Όνομα Τίτλος #Ταυτότητας Μισθός Χρόνια

Κώστας διευθυντής Α322442 1500 4

ΠΛ Υπάλληλος Β323144 1000 5

ΑΛ Υπάλληλος Β321421 800 2

ΒΛ Υπάλληλος Β134325 750 1

Page 206: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης206

Ορισμός Δομών

⚫ Ορισμός νέου τύπου δομήςS = struct('name',[],'title',[],'id',[],'salary',[],'years',[]);

⚫ Τα name, title, id, salary, years ονομάζονται τα μέλη ή πεδία της δομής

name title

id salary

years

S

Page 207: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης207

Ορισμός Δομών

⚫ Χρήση δομής

– S(1).name = 'Nikos';

– S(2).name = 'Giannis';

– S(2).years = 10;

S

name title

id salary

years

S

Page 208: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αναδρομή - Αναζήτηση & ταξινόμηση

Page 209: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης209

Γενική Ιδέα Αναδρομής

⚫ Γιατί σπάμε το πρόγραμμα σε συναρτήσεις;– Κάθε συνάρτηση λύνει ένα «μικρότερο» (υπό)πρόβλημα

– Συνδυάζουμε τα μικρότερα προβλήματα με τέτοιο τρόπο που να λύσουμε το συνολικό πρόβλημα

– Παράδειγμα: Φτιάξτε ένα πρόγραμμα που να διαχειρίζεται μια βάση δεδομένων με φοιτητές

⚫ Συναρτήσεις

– Για διαχείριση της εισόδου του χρήστη, τι θέλει να κάνει

– Για εισαγωγή/διαγραφή/αλλαγή/αναζήτηση στοιχείων

– Για εκτύπωση της βάσης δεδομένων

– κτλ

Page 210: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης210

Γενική Ιδέα Αναδρομής

⚫ Αναδρομική Συνάρτηση είναι μια συνάρτηση που έμμεσα ή άμεσα καλεί τον εαυτό της– Κάθε (κλήση) συνάρτησης λύνει ένα «μικρότερο»

(υπό)πρόβλημα του ίδιου τύπου.

– Συνδυάζουμε τα μικρότερα προβλήματα με τέτοιο τρόπο που να λύσουμε το συνολικό πρόβλημα

– Κάποια στιγμή πρέπει να λύσουμε τα «πολύ μικρά προβλήματα» απευθείας

⚫ Σε τι μας βοηθάνε οι αναδρομικές συναρτήσεις– Ο κώδικας γίνεται συνήθως πολύ πιο απλός και μπορούμε

να λύσουμε πολύ εύκολα προβλήματα που θα φαινόταν πολύ δύσκολα με επανάληψη

– Το μέγεθος (γραμμές κώδικα) της συνάρτησης συνήθως «ελαχιστοποιείται»

Page 211: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης211

Παράδειγμα: Sierpinski Sieve

⚫ “The Sierpinski sieve is a fractal described by Sierpinski in 1915 and appearing in Italian art from the 13th century” MathWorld

Page 212: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης212

Sierpinski Sieve: Αναδρομική Λύση

1. Ξεκίνα από ένα μαύρο τρίγωνο Τ1

2. «Αφαίρεσε» το τρίγωνο που σχηματίζεται από τις τρεις μέσους των ακμών

3. Επανέλαβε την ίδια διαδικασία στα τρία (υπο)τρίγωνα που σχηματίζονται, ας τα ονομάσουμε Τ1,1, Τ1, 2, Τ1, 3

4. Επανέλαβε αναδρομικά την διαδικασία από το βήμα 2

Page 213: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης213

Παραλλαγή Sierpinski Sieve με τετράγωνα

50 100 150 200 250

50

100

150

200

250

Page 214: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης214

Παραλλαγή Sierpinski Sieve με τετράγωνα

function [B] = drawRect(A,apoX,eosX,apoY,eosY)

B = A;

if apoX == eosX && apoY == eosY,

B(apoX,apoY) = 0;

else

dX = eosX-apoX+1;

dY = eosY-apoY+1;

B = drawRect(A,apoX,apoX+floor(dX/2)-1,apoY,apoY+floor(dY/2)-1);

A = B;

B = drawRect(A,apoX,apoX+floor(dX/2)-1,apoY+floor(dY/2),eosY);

A = B;

B = drawRect(A,apoX+floor(dX/2),eosX,apoY,apoY+floor(dY/2)-1);

end

Εκτέλεση συνάρτησης:

A = ones(256,256);[B] = drawRect(A,1,256,1,256);figure;imagesc(B);

Page 215: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης215

(Άμεση) Αναδρομή

⚫ Τα τρία βασικά συστατικά της αναδρομής⚫ Για να λύσουμε ένα πρόβλημα μεγέθους n

1. Η βασική περίπτωση(περιπτώσεις) (base-case): Όταν το n είναι αρκετά μικρό δίνουμε μια άμεση (χωρίς άλλη αναδρομή) λύση του «μικρότερου» προβλήματος

2. Αναδρομική κλήση: σπάσε το πρόβλημα σε «μικρότερα» ίδια προβλήματα και λύσε τα με αναδρομική κλήση (κλήση στην ίδια) συνάρτηση

3. Συγχώνευση: συνδύασε τις λύσεις των μικρότερων προβλημάτων, για να λύσεις το πρόβλημα μεγέθους n

⚫ Το 3ο βήμα δεν είναι απαραίτητο⚫ Το «μέγεθος» του προβλήματος μπορεί να είναι το μέγεθος

ενός ορίσματος, το μέγεθος ενός πίνακα, το μέγεθος μιας δομής (π.χ., γράφος), κτλ

Page 216: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης216

Στοίβα και Αναδρομή

⚫ Σε αναδρομικές συναρτήσεις η στοίβα μπορεί να περιέχει περισσότερα από ένα stack frames της ίδιας συνάρτησης

⚫ Η αναδρομή είναι θεϊκή αλλά η κλήση συνάρτησης κοστίζει

⚫ Κάθε αναδρομική συνάρτηση μπορεί να υλοποιηθεί και επαναληπτικά (χωρίς αναδρομή) με χρήση στοίβας

Page 217: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης217

Παράδειγμα 1:

function [p] = power(x,n)

if n == 0

p = 1;

else

p = x * power(x, n-1);

end

Βασική Περίπτωση: το μικρότερο πρόβλημα, άμεση λύση

Λύσε αναδρομικά ένα μικρότερο πρόβλημα

Συγχώνευση λύσεων μικρότερων προβλημάτων

Το «μέγεθος/δυσκολία» του προβλήματος καθορίζεται από τον εκθέτη

2n = 2*2n-1

Page 218: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης218

Παράδειγμα 1: Επαναληπτική Λύση

function [p] = power(x, n)

p = 1;

for i = 1:n

p = p*x;

end

Page 219: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης219

Ακολουθία Fibonacci

• Κάθε αριθμός είναι άθροισμα των δύο προηγούμενων του!

• Δηλαδή f(n)=f(n-1)+f(n-2)

• Αρκεί αυτό;

• f(1)=1, f(0)=0, f(n) ορίζεται για n≥0

Page 220: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης220

Ακολουθία Fibonacci

f( 3 )

f( 1 )f( 2 )

f( 1 ) f( 0 ) return 1

return 1 return 0

+

+

Κάθε αριθμός είναι

άθροισμα των δύο

προηγούμενων του!

Δηλαδή f(n)=f(n-1)+f(n-2)

Page 221: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης221

To πρόβλημα της Αναζήτησης

⚫ Δοθέντος δεδομένων, λ.χ. σε Πίνακα (P)⚫ Ψάχνω να βρω κάποιο συγκεκριμένο στοιχείο (key)⚫ Αν ο πίνακας δεν είναι ταξινομημένος

– Γραμμική Αναζήτηση (Linear search)⚫ Απλούστερη δυνατή⚫ Σύγκρινε σειριακά κάθε στοιχείο του πίνακα με την τιμή-κλειδί⚫ Χρήσιμο για μικρούς και ΜΗ ταξινομημένους πίνακες

function r = linearSearch(P, apo, eos, key)

r = -1;

for i = apo:eosif P(i) == key

r = i;return;

endend

Ποιος είναι ο ρόλος του return; Αν δεν είχε χρησιμοποιηθεί;

Page 222: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης222

To πρόβλημα της Αναζήτησης

⚫ Δοθέντος δεδομένων, λ.χ. σε Πίνακα (P)⚫ Υπολογίζω ΟΛΕΣ ΤΙΣ ΘΕΣΕΙΣ που υπάρχει κάποιο στοιχείο (key)⚫ Αν ο πίνακας δεν είναι ταξινομημένος

– Γραμμική Αναζήτηση (Linear search)⚫ Απλούστερη δυνατή⚫ Σύγκρινε σειριακά κάθε στοιχείο του πίνακα με την τιμή-κλειδί

function r = linearSearch(P, apo, eos, key)

r = -1;k = 0;for i = apo:eos

if P[i] == keyk = k +1;r(k) = i;

endend

Page 223: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης223

Συνάρτηση αναζήτησης find

⚫ Returns a vector that contains the indicies of all non-zero elements in an array.

⚫ The usage is y = find(x)

⚫ Παράδειγμα

– a = [1,2,5,2,4];

– s = find(a==2);

– A = [1,0,3;0,2,1;3,0,0];

– [r,c] = find(A == 3);

Page 224: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης224

To πρόβλημα της Αναζήτησης

⚫ Αν ο πίνακας είναι ταξινομημένος

– λ.χ. τηλεφωνικός κατάλογος

– Μπορώ να κάνω πολύ πιο γρήγορα την αναζήτηση

⚫ Δυαδική Αναζήτηση (Binary Search)– Συγκρίνει το P[middle] στοιχείο με το ζητούμενο key

⚫ Αν είναι ίσα βρέθηκε

⚫ Αν key < P[middle], ψάχνει στο 1ο μισό του πίνακα

⚫ Αν key > P[middle], ψάχνει στο 2ο μισό του πίνακα

⚫ Επανάληψη

– Πολύ γρήγορη – χειρότερη περίπτωση log2(N), Ν # στοιχείων πίνακα

⚫ Πίνακας 100 στοιχείων χρειάζεται το πολύ 7 βήματα

⚫ Πίνακας 100.000 στοιχείων χρειάζεται το πολύ 20 βήματα

⚫ Πίνακας 100.000.000 στοιχείων χρειάζεται το πολύ 27 βήματα

Page 225: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης225

To πρόβλημα της Ταξινόμησης

⚫ Δοθέντος δεδομένων, λ.χ. σε Πίνακα (P)

⚫ Να γίνει αναδιάταξη των στοιχείων του ώστε να βρεθούν σε αύξουσα (ή φθίνουσα) σειρά, δηλαδή ταξινομημένα

⚫ Λύση : Υπάρχουν διάφοροι αλγόριθμοι που το πετυχαίνουν και διαφοροποιούνται στο υπολογιστικό

– Straight Selection Sort - Bubble Sort : Ο(Ν2)

– Quick Sort (μέση περίπτωση): O(N log N)

12 31 4 32 134 13 42 1 43 2

1 2 4 12 13 31 32 42 43 134

Page 226: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης226

QSort: Ψευδοκώδικας

⚫ QSort(Πίνακας Π, δείκτης Α, δείκτης Τ)

Ταξινομεί τον υποπίνακα Π[Α] έως Π[Τ]

⚫ Αν Α Τ, επέστρεψε

⚫ Διαφορετικά,– Διάλεξε ένα στοιχείο του πίνακα (pivot), έστω το μεσαίο Λ =

Π[(Α+Τ)/2]

– Βρες την θέση Θ του Λ που θα έχει στην τελική ταξινόμηση

– Μετέφερε τα στοιχεία του Π[Α] έως και Π[Τ] έτσι ώστε:

⚫ Π[Χ] Λ, αν Χ < Θ

⚫ Π[Χ] > Λ, αν Χ > Θ

⚫ QSort(Π, Α, Θ-1)

⚫ QSort(Π, Θ+1, Τ)

Page 227: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης227

Συνάρτηση Ταξινόμησης sort

⚫ Sorts an n-dimensional array along the specified dimensional. The first form sorts the array along the first non-singular dimension.

⚫ [B,IX] = sort(x)

⚫ Παράδειγμα

– a = [1,2,5,2,4];

– [s,ind] = sort(a);

Page 228: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης228

Άσκηση 1 με αναζήτηση

⚫ Έστω P ένας πίνακας Ν x k που περιέχει τα κέρδη k επιχειρήσεων σε Ν μήνες.

⚫ Να γραφεί κατάλληλη συνάρτηση

[EAP,EMP] = getBestCompany(P)

που να εκτυπώνει σε ξεχωριστά σχήματα όλα τα κέρδη ανά μήνα (κ γραφικές παραστάσεις σε ένα σχήμα). Η ίδια συνάρτηση να υπολογίζει την επιχείρηση με το μεγαλύτερο συνολικό κέρδος (EAP) και την επιχείρηση με το μεγαλύτερο μηνιαίο κέρδος (EMP).

Page 229: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης229

Λύση Άσκησης 1function [EAP,EMK] = getBestCompany(P)

N = size(P,1);

K = size(P,2);

for i=1:K,

figure;

bar(P(:,i));

title(sprintf('Company %d',i));

end

maxVal = max(max(P));

[temp,EMK] = find(P == maxVal);

TotalProfit = zeros(1,K);

for i=1:K,

TotalProfit(i) = sum(P(:,i));

end

[temp,EAP] = max(TotalProfit);

Page 230: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Μετάβαση από μια γλώσσα σε μία άλλη

Page 231: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης231

Μετάβαση από μια γλώσσα σε μία άλλη

⚫ Αν μάθει κάποιος «σωστό προγραμματισμό» σε μία γλώσσα μπορεί πολύ εύκολα να μάθει και μια επόμενη γλώσσα.

⚫ Στόχος μας είναι να μάθουμε προγραμματισμό και όχι μόνο μια συγκεκριμένη γλώσσα

⚫ Συναρτησιακός προγραμματισμός– Αντιστοιχίες σε χρήση

⚫ Μεταβλητές

⚫ Συναρτήσεις

⚫ Συντακτικό (if/for/while/κλήσεις συναρτήσεων)

– Παράδειγμα 1, από Matlab σε python

Page 232: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης232

App inventor

⚫ Παράδειγμα blocks code

Page 233: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης233

Python – χρήση while/if

#Παράδειγμα κώδικα σε python

number = 23;

iter = 0;

running = True

while running:

iter = iter+1;

guess = int(input('Give a number : '))

if guess == number:

print('You find it')

running = False # αυτό κάνει τον βρόχο while να σταματήσει εδώ

elif guess < number:

print('Try again, give higher.')

else:

print('Try again, give lower')

print('Congratulations. You guess '+repr(number)+' with '+repr(iter)+' tries');

Page 234: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης234

Python – χρήση while / if #calculator program

loop = 1

#this variable holds the user's choice in the menu:

choice = 0

while loop == 1:

#print what options you have

print "Welcome to calculator.py"

print "your options are:"

print " "

print "1) Addition"

print "2) Subtraction"

print "3) Multiplication"

print "4) Division"

print "5) Quit calculator.py"

print " "

choice = input("Choose your option: ")

if choice == 1:

add1 = input("Add this: ")

add2 = input("to this: ")

print add1, "+", add2, "=", add1 + add2

elif choice == 2:

sub2 = input("Subtract this: ")

sub1 = input("from this: ")

print sub1, "-", sub2, "=", sub1 - sub2

elif choice == 3:

mul1 = input("Multiply this: ")

mul2 = input("with this: ")

print mul1, "*", mul2, "=", mul1 * mul2

elif choice == 4:

div1 = input("Divide this: ")

div2 = input("by this: ")

print div1, "/", div2, "=", div1 / div2

elif choice == 5:

loop = 0

print "Thank you for using calculator.py!"

Page 235: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης235

Python – χρήση συναρτήσεων

#Παράδειγμα κώδικα σε python – συνάρτηση

#!/usr/bin/python

# Function definition is here

def sum( arg1, arg2 ):

# Add both the parameters and return them.

total = arg1 + arg2

print "Inside the function : ", total

return total;

# Now you can call sum function

total = sum( 10, 20 );

print "Outside the function : ", total

Page 236: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης236

Python – χρήση συναρτήσεων# calculator program

def menu():

#print what options you have

print "Welcome to calculator.py"

print "your options are:"

print " "

print "1) Addition"

print "2) Subtraction"

print "3) Multiplication"

print "4) Division"

print "5) Quit calculator.py"

print " "

return input ("Choose your option: ")

# this adds two numbers given

def add(a,b):

print a, "+", b, "=", a + b

# this subtracts two numbers given

def sub(a,b):

print b, "-", a, "=", b - a

# this multiplies two numbers given

def mul(a,b):

print a, "*", b, "=", a * b

# this divides two numbers given

def div(a,b):

print a, "/", b, "=", a / b

# NOW THE PROGRAM REALLY STARTS, AS CODE IS RUN

loop = 1

choice = 0

while loop == 1:

choice = menu()

if choice == 1:

add(input("Add this: "),input("to this: "))

elif choice == 2:

sub(input("Subtract this: "),input("from this: "))

elif choice == 3:

mul(input("Multiply this: "),input("by this: "))

elif choice == 4:

div(input("Divide this: "),input("by this: "))

elif choice == 5:

loop = 0

print "Thankyou for using calculator.py!"

Page 237: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης237

Python – λίστες

#H αρίθμηση ξεκινάει από το 0 και όχι από το ένα όπως το matlab

cats = ['Tom', 'Snappy', 'Kitty', 'Jessie', 'Chester']

print cats;

cats.append('Catherine');

print cats;

del cats[1];

print cats;

for x in cats:

for y in cats:

if x[0] == y[0]:

print x, y

Page 238: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Επαναληπτικές Ασκήσεις

Page 239: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης239

Θέμα

Επιλέξτε κατάλληλες τιμές για τα a, b ώστε η συνάρτηση να επιστρέψει s = 10 και f = 5. Επίσης, έχετε δικαίωμα να αλλάξετε και μια γραμμή του κώδικα (από εκείνες που είναι μέσα στην for).Χρησιμοποιήστε πίνακα τιμών για επαλήθευση.

function [s,f] = myF(a,b)

s = 0;f = 0;for i=1:a,

p = i*b;s = s+p;f = f+1;

end

Λύση

Page 240: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης240

Θέμα 3 – 2014 (Ioύνιος)

Υλοποιήστε την συνάρτηση με χρήση for αντί για while

function [s,f,i] = myF(a,b)

f = 1;s = 0;i = 0;

while f < b+400,f = f*(a+4);s = s+f;i = i+1;

end

Λύσηfunction [s,f,i] = myF(a,b)

f = 1;s = 0;i = 0;

for k = 1:10000000if f >= b+400,

break;endf = f*(a+4);s = s+f;i = i+1;

end

Page 241: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης241

Θέμα 3 – 2014 (Ioύνιος)

Τι θα επιστρέψει η συνάρτηση αν κληθεί [s,f,i] = myF(3,7)

function [s,f,i] = myF(a,b)

f = 1;s = 0;i = 0;

while f < b+400,f = f*(a+4);s = s+f;i = i+1;

end

ΛύσηΜε χρήση πίνακα τιμών

Τελικά το s = 2800 και το f = 2401 και το i = 4

s 0 7 56 399 2800

f 1 7 49 343 2401

i 0 1 2 3 4

Page 242: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης242

Θέμα 3 – 2014 Σεπτ.

Τροποποιείστε την συνάρτηση ώστε να εκτυπώσει στο τέλος με την χρήση της εντολής plot όλους τους αριθμούς k για τους οποίους ικανοποιείται η συνθήκη if.

function [s,p] = myF(a,b,c,d)p=0;s = 0;k = a;while k<=b

if (rem(k,a) == c || rem(k,b) == d)s = s+k;p = p+1;

endk=k+1;

end

Λύση

function [s,p] = myF(a,b,c,d)p=0;s = 0;k = a;while k<=b

if (rem(k,a) == c || rem(k,b) == d)s = s+k;p = p+1;G(p) = k;

endk=k+1;endfigure;plot(G);

Page 243: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης243

Θέμα 3 – 2014 Σεπτ.

Υλοποιήστε την συνάρτηση με χρήση for αντί για while

function [s,p] = myF(a,b,c,d)p=0;s = 0;k = a;while k<=b

if (rem(k,a) == c || rem(k,b) == d)s = s+k;p = p+1;

endk=k+1;

end

Λύση

function [s,p] = myF(a,b,c,d)p=0;s = 0;for k=a:b

if (rem(k,a) == c || rem(k,b) == d)s = s+k;p = p+1;

endend

Page 244: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης244

Θέμα 3 – 2014 Σεπτ.

Τι θα επιστρέψει η συνάρτηση αν κληθεί [s,p] = myF(22 ,52, 2 , 4)

function [s,p] = myF(a,b,c,d)p=0;s = 0;k = a;while k<=b

if (rem(k,a) == c || rem(k,b) == d)s = s+k;p = p+1;

endk=k+1;

end

ΛύσηΜε χρήση πίνακα τιμών

Τελικά το s = 70 και το p = 2

k 22 23 24 25 ... 46 … 52 53

s 0 0 24 24 … 70 … 70 70

p 0 0 1 1 … 2 … 2 2

Page 245: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης245

Θέμα 2 (a) – 2014 Σεπτ. Έστω η συνάρτηση function [rank] = getCompanyRank(employees,profit)που επιστρέφει και υπολογίζει την επίδοση μιας εταιρείας ανάλογα με τον αριθμό των εργαζομένων που έχει employees και το κέρδος της profit. Για κάθε 10 εργαζόμενους παίρνει έναν επιπλέον βαθμό και για κάθε 10000 έχει έναν επιπλέον βαθμό. Π.χ. μια εταιρεία με 53325.34 Ε κέρδος και 42 υπάλληλους έχει βαθμό 5+4 = 9

α) (20%) Να γράψετε τον κώδικα της συνάρτησης.

Λύση

function [rank] = getCompanyRank(employees,profit)

rank = floor(employees/10)+floor(profit/10000);

Page 246: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης246

Θέμα 2 (β) – 2014 Σεπτ. β) (30%) Χρησιμοποιώντας την getCompanyRank να γράψετε τον κώδικα της συνάρτησης getBestCompanies που υπολογίζει τις N εταιρείες που έχουν μεγαλύτερη βαθμολογία και τις εμφανίζει με την συνάρτηση disp με φθίνουσα σειρά ως προς της βαθμολογία τους (πρώτα εκείνη με το μεγαλύτερο rank). Τα Employees, Profit είναι διανύσματα που στην θέση i έχουν για την i εταιρεία τα employees και profit τηςεταιρείας. function [companies] = getBestCompanies (Employees,Profit,N)

Λύσηfunction [companies] = getBestCompanies (Employees,Profit,N)

rank = zeros(1,N);for i=1:N,

rank(i) = getCompanyRank(Employees(i),Profit(i));end

[Y, companies] = sort(rank,'descend');

for i=1:N,disp(companies(i));

end

Page 247: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης247

Θέμα 2 (α) – 2015 Ιουν.

Έστω η συνάρτηση function [cost] = getCost(time,freeTime,SMS,freeSMS,fixed)που επιστρέφει και υπολογίζει το κόστος της χρήσης του κινητού ανάλογα με τον χρόνο ομιλίας time, τον δωρεάν διαθέσιμο χρόνο ομιλίας freeTime τα SMS και τα δωρεάν διαθέσιμα freeSMS και το πάγιο (fixed) με βάση τον παρακάτω κανόνα. Ο επιπλέον χρόνος ομιλίας από τον freeTime χρεώνεται με 0.01 Ε ανά sec και τα επιπλέον SMS από τα freeSMS με 0.1 Ε ανά SMS.

Α) Να γράψετε τον κώδικα της συνάρτησης. Για παράδειγμα, αν time = 1000, freeTime = 200, SMS = 2, freeSMS = 10, fixed = 10, τότε Cost = 800*0.01 + 0 + 10 = 18 Ε

Λύσηfunction [cost] = getCost(time,freeTime,SMS,freeSMS,fixed)

cost = fixed;if time > freeTime

cost = cost + 0.01*(time-freeTime);endif SMS > freeSMS

cost = cost+0.1*(SMS-freeSMS);end

Page 248: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης248

Θέμα 2 (β) – 2015 Ιουν.

Β 10%) Τι θα επιστρέψει η συνάρτηση αν κληθεί με [cost] = getCost(101, 1 , 21, 1, 2), εξηγήστε πως το υπολογίσατε.

ΛύσηΜε χρήση πίνακα τιμών

Τελικά το cost = 5

cost 2 3 5

Page 249: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης249

Θέμα 2 (γ) – 2015 Ιουν.

Γ) Να ορίσετε και να γράψετε τον κώδικα της συνάρτησης που υπολογίζει τον υπολειπόμενο χρόνο ομιλίας και τα υπολειπόμενα διαθέσιμα SMS, ενώ λαμβάνει παραμέτρους το time,freeTime,SMS,freeSMS. Στην περίπτωση που ο χρήστης έχει υπερβεί το χρόνο ομιλίας του ή τα SMS του επιστρέφει αντίστοιχα 0 και εμφανίζει κατάλληλο μήνυμα με την συνάρτηση disp.

Λύση

function [ctime,csms] = getTIME_SMS(time,freeTime,SMS,freeSMS)

ctime = freeTime-time;if ctime < 0 ctime = 0;disp('No more free time');endcsms = freeSMS-SMS;if csms < 0 csms = 0;disp('No more free sms');end

Page 250: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης250

Θέμα 2 – 2015 Σεπτ.

Έστω η συνάρτηση getDaysOff που υπολογίζει πόσες επίσημες αργίες πέφτουν μια συγκεκριμένη μέρα για ένα ολόκληρο έτος (year). Όπου την ημέρα (day) την δίνουμε με μορφή αριθμού από το 1 για την Δευτέρα μέχρι και το 7 για την Κυριακή. Η συνάρτηση θεωρείστε πως ήδη υπάρχει στο matlab – μην την φτιάξετε εσείς. function [sum] = getDaysOff (year, day)

Να φτιάξετε κατάλληλο script που με την βοήθεια της getDaysOff θα εκτυπώνει στην οθόνη με χρήση της disp πόσες αργίες πέφτουν για κάθε μέρα της βδομάδας για το έτος 2016 και να εκτυπώνει επίσης σε ποια εργάσιμη μέρα (εκτός Σ/Κ) αντιστοιχούν οι περισσότερες αργίες.

Λύσηfor i=1:7A(i) = getDaysOff (2016,i);t = sprintf('day = %d Argies = %d',i,A(i));disp(t);

end[M,id] = max(A(1:5));pos = find(A(1:5) == M);for i=1:length(pos),

id = pos(i);t = sprintf('Best day = %d Argies = %d',id,A(id));

end

Page 251: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης251

Θέμα 1 – 2016 Ιαν.

Να ορίσετε και να γράψετε τον κώδικα της συνάρτησης που υπολογίζει και να επιστρέφει δεδομένου ενός διανύσματος V1 και ενός διανύσματος V2, το εσωτερικό τους γινόμενο g αν έχουν ίδιο μήκος (πλήθος στοιχείων) αλλιώς 0. function […….] = ………( …..,…. )Για παράδειγμα αν V1 = [2 3 3 4] και V2 =[1 1 3 2] τότε το g = 2*1+3*1+3*3+4*2 = 22.

Λύση

function [g] = getProduct(V1,V2)

if length(V1) == length(V2)g = 0;for i=1:length(V1)

g = g + V1(i)*V2(i);end

elseg = 0;

end

Page 252: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης252

Θέμα 2 – 2016 Ιαν.

Έστω η συνάρτηση function [cost] = getCost(time,workers,hourCost,fixed) που επιστρέφει και υπολογίζει το κόστος ενός συνεργείου ανάλογα με τον χρόνο εργασίας time, το πλήθος των ατόμων του συνεργείου workers το κόστος ανά ώρα ενός εργαζομένου hourCost και το πάγιο (fixed) με βάση τον παρακάτω παράδειγμα. Αν time = 10, workers = 3, hourCost = 5, fixed = 8 τότε Cost = 10*3*5 + 8 = 158 Ε

Α 15%) Να γράψετε τον κώδικα της συνάρτησης.

Λύση

function [cost] = getCost(time,workers,hourCost,fixed)

cost = time*workers*hourCost+fixed;

Page 253: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης253

Θέμα 2 – 2016 Ιαν.

Έστω η συνάρτηση function [cost] = getCost(time,workers,hourCost,fixed) που επιστρέφει και υπολογίζει το κόστος ενός συνεργείου ανάλογα με τον χρόνο εργασίας time, το πλήθος των ατόμων του συνεργείου workers το κόστος ανά ώρα ενός εργαζομένου hourCost και το πάγιο (fixed) με βάση τον παρακάτω παράδειγμα. Αν time = 10, workers = 3, hourCost = 5, fixed = 8 τότε Cost = 10*3*5 + 8 = 158 Ε

Β 10%) Τι θα επιστρέψει η συνάρτηση αν κληθεί με [cost] = getCost( 3,5 ,2 ,7), εξηγήστε πως το υπολογίσατε.

Λύση

Cost = 3*5*2+7 = 37

Page 254: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης254

Θέμα 2 – 2016 Ιαν.

Γ 15%) Να ορίσετε και να γράψετε τον κώδικα της συνάρτησης getCost2 που επιστρέφει και υπολογίζει το κόστος ενός συνεργείου ανάλογα με τον χρόνο εργασίας time κάθε ατόμου (το time είναι διάνυσμα), το κόστος ανά ώρα ενός εργαζομένου hourCost και το πάγιο (fixed) λαμβάνοντας υπόψιν πως το τελικό κόστος επιβαρύνεται επιπλέον και με 23% ΦΠΑ.

Βοήθεια για το Γ) το πλήθος των ατόμων του συνεργείου workers είναι το length(time)

Λύση

function [COST] = getCost(TIME,hourCost,fixed) workers = length(time);for i=1: workers

cost(i) = 1.23*(TIME(i)*hourCost+fixed);end

COST = sum(cost);

Page 255: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης255

Θέμα 3 – 2016 Ιαν.

Έστω η παρακάτω συνάρτηση. Α 15%) Τι θα επιστρέψει η αν κληθεί [s,p] = myF(2 ,8), εξηγήστε πως το υπολογίσατε.

function [s,p] = myF(a,b)s = 0;k = a;L = a+b;if a < b,

k = b;endp = 1;while k<= L,

p = p+a*b;k=k+1;s = s+p;

end

Α) Λύση (L = 10)

s 0 17 50 99

k 2 8 9 10 11

p 1 17 33 49

Page 256: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης256

Θέμα 3 – 2016 Ιαν.

Έστω η παρακάτω συνάρτηση. Β 15%) Γράψτε τον ισοδύναμο κώδικα της συνάρτηση με χρήση for αντί για while.

function [s,p] = myF(a,b)s = 0;k = a;L = a+b;if a < b,

k = b;endp = 1;while k<= L,

p = p+a*b;k=k+1;s = s+p;

end

Β) Λύση

function [s,p] = myF(a,b)s = 0;k = a;L = a+b;if a < b,

k = b;endp = 1;

for i=1:100000000if k > L

break;endp = p+a*b;k=k+1;s = s+p;

end

Page 257: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης257

Θέμα 3 – 2015 Ιαν.

Έστω η παρακάτω συνάρτηση. Β 15%) Τροποποιείστε την συνάρτηση ώστε να αντί για for να κάνει χρήση while.

function [s,p] = myF(a,b,c,d)p = 0;s = 0;for i=c:d,

if rem(i,a) == 0 && rem(i,b) == 0 s = s+i;p = p+1;

endend

Β) Λύση

function [s,p] = myF(a,b,c,d)p = 0;s = 0;i = c;while i <= d,

if rem(i,a) == 0 && rem(i,b) == 0 s = s+i;p = p+1;

endi = i+1;

end

Page 258: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης258

Θέμα 1 – 2014 Ιούνιος

(α) Να ορίσετε μια συνάρτηση που να υπολογίζει και να επιστρέφει δεδομένου ενός διανύσματος V και ενός αριθμού x πόσοι αριθμοί του διανύσματος είναι μεγαλύτεροι από το x, πόσοι είναι ίσοι με τον x και πόσοι είναι μικρότεροι από τον x

function [………] = ………( …, … )(β) Να γράψετε τον κώδικα της συνάρτησης

Λύση Α) function [M,e,m] = myF( V, x )Β)M = 0;e = 0;m = 0;for i=1:length(V)

if V(i) > xM = M+1;

elseif V(i) == xe = e+1;

elsem = m+1;

end

end

Page 259: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης259

Θέμα 1 – 2018 Ιούνιος

Ο παραπάνω κώδικας Blocks υλοποιεί την εφαρμογή κορώνα/γράμματα.

A 15%) Αλλάξτε των κώδικα ώστε να παίζει διαφορετική μουσική όταν έρθει κορώνα

(Sound1) και διαφορετική όταν παίζει γράμματα (Sound2). Βοήθεια: Χρήση

μεταβλητών

Β 15%) Αλλάξτε των κώδικα ώστε να εκτυπώνει στο πεδίο text του label Result πόσες

φορές έχει έρθει κορώνα και πόσες φορές γράμματα.

Page 260: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης260

Θέμα 3 – 2018 Σεπτ.

Έστω η παρακάτω συνάρτηση. Α 15%) Τι θα επιστρέψει η παρακάτω συνάρτηση αν κληθεί [s,sx,p] = myF([6 2 8],[5 3 0 ],[5 4 1] )Εξηγήστε πως το υπολογίσατε με την βοήθεια του πίνακα αλλαγής των μεταβλητών. Βοήθεια: Ο τελεστής && σημαίνει και.

function [s,sx,p] = myF(x,y,z)sx = 0;s = 0;p = 0;for i = 1 : length(x)

if x(i) >y(i) && x(i) > z(i), sx = sx + x(i);p = p+1;

ends = s+x(i);

end

Α) Λύση x = [6 2 8] y = [5 3 0] z = [5 4 1]

sx 0 6 14

s 0 6 8 16

p 0 1 2

i 1 2 3

Page 261: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης261

Θέμα 3 – 2018 Σεπτ.

Τροποποιήστε τον κώδικα ώστε η συνάρτηση να επιστρέφει επιπλέον ένα διάνυσμα G με τους δείκτες i που ικανοποιούν την συνθήκη if.

function [s,sx,p] = myF(x,y,z)sx = 0;s = 0;p = 0;for i = 1 : length(x)

if x(i) >y(i) && x(i) > z(i), sx = sx + x(i);p = p+1;

ends = s+x(i);

end

Α) Λύση

function [s,sx,p,G] = myF(x,y,z)sx = 0;s = 0;p = 0;G = [];for i = 1 : length(x)

if x(i) >y(i) && x(i) > z(i) sx = sx + x(i);p = p+1;G(p) = i;

ends = s+x(i);

end

Page 262: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης262

Θέμα 1 – 2018 Ιούνιος

Λύση

A) Αρχή: initialize global x to 0 που θα αποθηκεύει το αποτέλεσμα της ρίψης.

Μέσα στο Whenset global x to random integer from 1 to 2set CoinButton.Image to join get x ".png"If get global x = 1

thencall Sound1.Play

elsecall Sound2.Play

Page 263: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3 Κώστας Παναγιωτάκης Εισαγωγή: Σκοπός ⚫Ειαγωγή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κώστας Παναγιωτάκης263

Θέμα 1 – 2018 Ιούνιος

Λύση

B) Αρχή: initialize global x to 0 (το αποτέλεσμα της ρίψης)

initialize global k to 0 (πόσες φορές ήρθε κορώνα)initialize global g to 0 (πόσες φορές ήρθαν γράμματα)

Μέσα στο Whenset global x to random integer from 1 to 2set CoinButton.Image to join get x ".png" If get global x = 1

thenset global k to get global k +1

elseset global g to get global g +1

set Result.text to Join “Κορώνα: " get global k “Γράμματα: " get global g