ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό Εισαγωγή στον Προγραµµατισµό Χειµερινό Εξάµηνο 2014
Τι θα µάθουµε; Υπολογιστής; Πρόγραµµα; Ποια είναι τα βασικά µέρη του υπολογιστή; Πως εκτελείται ένα πρόγραµµα; Γλώσσες Προγραµµατισµού Έλεγχος και Εκσφαλµάτωση Σχεδιασµός Προγράµµατος 2
Βασικές Έννοιες «Υπολογιστής» δεν είναι µόνο ο προσωπικός σας υπολογιστής (PC), µπορεί να είναι: Ο υπολογιστής µέσα στο κινητό σας Ο υπολογιστής µέσα στην ψηφιακή µηχανή σας Ο υπολογιστής µέσα στην κονσόλα παιχνιδιών σας Panasonic Lumix GF iphone 5 Galaxy S4 XBOX 360 and Kinect Play station 3 CANNON EOS 600D Ερώτηση: Ποια είναι τα κοινά µέρη αυτών των «υπολογιστών»; 3
Υλικό Τα φυσικά («χειροπιαστά») µέρη τα οποία συνθέτουν έναν υπολογιστή. 4
Υλικό Τα φυσικά («χειροπιαστά») µέρη τα οποία συνθέτουν έναν υπολογιστή. 1. Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Central Processing Unit (CPU) Tο «µυαλό» του υπολογιστή Εκτελεί απλές εργασίες όπως Πρόσθεση, αφαίρεση, πολλαπλασιασµός, διαίρεση Μετακίνηση δεδοµένων από µία θέση µνήµης στην άλλη quad-core i7 CPU Ερώτηση: Ξέρεις πως µετράµε την ταχύτητα ενός επεξεργαστή; 5
Υλικό Τα φυσικά («χειροπιαστά») µέρη τα οποία συνθέτουν έναν υπολογιστή. 1. Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Central Processing Unit (CPU) Tο «µυαλό» του υπολογιστή Εκτελεί απλές εργασίες όπως Πρόσθεση, αφαίρεση, πολλαπλασιασµός, διαίρεση Μετακίνηση δεδοµένων από µία θέση µνήµης στην άλλη quad-core i7 CPU Ερώτηση: Ξέρεις πως µετράµε την ταχύτητα ενός επεξεργαστή; Απάντηση: Ο ρυθµός-ρολογιού του επεξεργαστή µετράει πόσους κύκλους κάνει το δευτερόλεπτο. Σε ένα κύκλο µπορεί να κάνει µια βασική πράξη. 100MHz = 100 Million cycles per second, 1GHz = 1 Billion cycles per second. 6
Υλικό Τα φυσικά («χειροπιαστά») µέρη τα οποία συνθέτουν έναν υπολογιστή. 2. Κύρια Μνήµη (RAM) A DDR3 RAM Μια µακριά λίστα από κελλιά µνήµης Κάθε κελλί έχει µια διεύθυνση (έναν αριθµό) που προσδιορίζει τη θέση του. Address 1 Address 2 Address 3 Main Memory Κάθε κελλί µνήµης έχει 8 δυαδικά ψηφία (1 byte). Προσωρινή τα δεδοµένα στη µνήµη χάνονται (σβήνονται) µε το κλείσιµο του υπολογιστή 0 0 0 0 0 0 0 1 Ερώτηση: Ποιο είναι ένα τυπικό µέγεθος RAM σήµερα; 7
Υλικό Τα φυσικά («χειροπιαστά») µέρη τα οποία συνθέτουν έναν υπολογιστή. 2. Κύρια Μνήµη (RAM) A DDR3 RAM Μια µακριά λίστα από κελλιά µνήµης Κάθε κελλί έχει µια διεύθυνση (έναν αριθµό) που προσδιορίζει τη θέση του. Address 1 Address 2 Address 3 Main Memory Κάθε κελλί µνήµης έχει 8 δυαδικά ψηφία (1 byte). Προσωρινή τα δεδοµένα στη µνήµη χάνονται (σβήνονται) µε το κλείσιµο του υπολογιστή 0 0 0 0 0 0 0 1 Ερώτηση: Ποιο είναι ένα τυπικό µέγεθος RAM σήµερα; Απάντηση: 8GB DDR3 RAM, έχοντας 8,589,934,592 κελλιά µνήµης! 8
Υλικό Τα φυσικά («χειροπιαστά») µέρη τα οποία συνθέτουν έναν υπολογιστή. 3. Δευτερεύουσα Μνήµη Μόνιµη η πληροφορία δεν χάνεται µε το κλείσιµο του υπολογιστή. Για µόνιµη αποθήκευση πληροφορίας σε αρχεία. Π.χ., σκληρός δίσκος, DVD/CD, flash memory A 3.5 Hard Disk Flash hard drive External Hard Disk DVD/CD ROMs USB flash drive 9
Υλικό Τα φυσικά («χειροπιαστά») µέρη τα οποία συνθέτουν έναν υπολογιστή. 4. Περιφερειακά Συσκευές επικοινωνίας µεταξύ χρήστη και υπολογιστή. Συσκευές εισόδου Συσκευές εξόδου 10
Υλικό Επεξεργαστής (CPU) Συσκευές εισόδου γρήγορα Κύρια Μνήµη Συσκευές εξόδου αργά Δευτερεύουσα Μνήµη Ερώτηση: Πέραν του προσωπικού υπολογιστή, µπορείς να ξεχωρήσεις αυτά τα µέρη σε ένα κινητό ή tablet ή κονσόλα; 11
Υλικό Επεξεργαστής (CPU) Συσκευές εισόδου Processor Xbox360 Kinect 3.2 GHz PowerPC Tri-Core Xenon Ipad 4 1.4 GHz dualcore Apple A6X iphone5 A6 Dual core γρήγορα Main memory 512 MB 1024 MB 1GB Κύρια Μνήµη Συσκευές εξόδου Secondary memory Input device(s) Up to 320 GB Controller / Kinect (motion sensing) etc 16, 32, or 64, 128 GB Touch screen, camera, mic etc 16, 32 or 64 GB Touch screen, camera, mic etc αργά Output device(s) Video output, Audio output, Controller 9.7 inches retina display, touch screen 4 inches retina display, touch screen Δευτερεύουσα Μνήµη Ερώτηση: Πέραν του προσωπικού υπολογιστή, µπορείς να ξεχωρήσεις αυτά τα µέρη σε ένα κινητό ή tablet ή κονσόλα; 12
Πρόγραµµα Επεξεργαστής (CPU) γρήγορα Συσκευές εισόδου Τι είναι ένα πρόγραµµα Μία ακολουθία εντολών που σκοπό έχουν την εκτέλεση µιας συγκεκριµένης εργασίας στον υπολογιστή. Κύρια Μνήµη Συσκευές εξόδου αργά Δευτερεύουσα Μνήµη Compute 2+3=? 13
Πρόγραµµα Επεξεργαστής (CPU) Συσκευές εισόδου Όταν ένα πρόγραµµα εκτελείται 1) Το πρόγραµµα φορτώνεται στην κύρια µνήµη. γρήγορα Κύρια Μνήµη Compute 2+3=? Συσκευές εξόδου αργά Δευτερεύουσα Μνήµη Compute 2+3=? 14
Πρόγραµµα Επεξεργαστής (CPU) Compute 2+3=5 Κύρια Μνήµη Compute 2+3=? γρήγορα Συσκευές εισόδου Συσκευές εξόδου Όταν ένα πρόγραµµα εκτελείται 1) Το πρόγραµµα φορτώνεται στην κύρια µνήµη. 2) Ο επεξεργαστής διαβάζει και εκτελεί τις εντολές, καθώς και τα δεδοµένα από τη µνήµη. αργά Δευτερεύουσα Μνήµη Compute 2+3=? 15
Πρόγραµµα Επεξεργαστής (CPU) Compute 2+3=5 Κύρια Μνήµη Compute 2+3=? γρήγορα αργά Συσκευές εισόδου Συσκευές εξόδου Όταν ένα πρόγραµµα εκτελείται 1) Το πρόγραµµα φορτώνεται στην κύρια µνήµη. 2) Ο επεξεργαστής διαβάζει και εκτελεί τις εντολές, καθώς και τα δεδοµένα από τη µνήµη. 3) Η έξοδος του προγράµµατος µπορεί να γραφτεί στην κύρια µνήµη, στη δευτερεύουσα µνήµη ή σε συσκευή εξόδου. Δευτερεύουσα Μνήµη Compute 2+3=? 16
Πρόγραµµα Επεξεργαστής Επεξεργαστής (CPU) (CPU) ]\ ΜΕ γρήγορα Μία κοντινή µατιά στον επεξεργαστή Μονάδα Ελέγχου (ΜΕ) Εξάγει τις εντολές από τη µνήµη, τις αποκωδικοποιεί και τις εκτελέι. Συσκευές εισόδου Κύρια Μνήµη Συσκευές εξόδου αργά Δευτερεύουσα Μνήµη 17
Καταχωρητές Πρόγραµµα Επεξεργαστής Processer CPU (CPU) ΜΕ Κύρια Μνήµη γρήγορα Μία κοντινή µατιά στον επεξεργαστή Μονάδα Ελέγχου (ΜΕ) Εξάγει τις εντολές από τη µνήµη, τις αποκωδικοποιεί και τις εκτελεί. Καταχωρητές (Registers) Αποθηκεύουν τις εντολές/δεδοµένα που εξάχθηκαν από τη µνήµη για γρήγορη επεξεργασία. Συσκευές εισόδου Συσκευές εξόδου αργά Δευτερεύουσα Μνήµη 18
Καταχωρητές Πρόγραµµα Επεξεργαστής Processer CPU (CPU) ΜΕ Κύρια Main memory Μνήµη Compute 2+3=? ΑΛΜ Δευτερεύουσα Μνήµη γρήγορα αργά Μία κοντινή µατιά στον επεξεργαστή Μονάδα Ελέγχου (ΜΕ) Εξάγει τις εντολές από τη µνήµη, τις αποκωδικοποιεί και τις εκτελεί. Καταχωρητές (Registers) Αποθηκεύουν τις εντολές/δεδοµένα που εξάχθηκαν από τη µνήµη για γρήγορη επεξεργασία. Συσκευές εισόδου Συσκευές εξόδου Αριθµητική Λογική Μονάδα (ΑΛΜ) Εκτελεί απλές αριθµητικές/λογικές πράξεις (AND/OR). Ερώτηση: Η ΚΜΕ επεξεργάζεται δεδοµένα και εντολές εκφρασµένες µε «0» και «1». Πώς µπορεί να εκτελέσει ένα πρόγραµµα από µια γλώσσα προγραµµατισµου; 19
Καταχωρητές Πρόγραµµα ΑΛΜ Επεξεργαστής (CPU) ΜΕ 001100100100 100101010110 Κύρια Main memory Μνήµη Compute 2+3=? γρήγορα αργά Μία κοντινή µατιά στον επεξεργαστή Μονάδα Ελέγχου (ΜΕ) Εξάγει τις εντολές από τη µνήµη, τις αποκωδικοποιεί και τις εκτελεί. Καταχωρητές (Registers) Αποθηκεύουν τις εντολές/δεδοµένα που εξάχθηκαν από τη µνήµη για γρήγορη επεξεργασία. Συσκευές εισόδου Συσκευές εξόδου Αριθµητική Λογική Μονάδα (ΑΛΜ) Εκτελεί απλές αριθµητικές/λογικές πράξεις (AND/OR). Ερώτηση: Η ΚΜΕ επεξεργάζεται δεδοµένα και εντολές εκφρασµένες µε «0» και «1», πώς µπορεί να εκτελέσει ένα πρόγραµµα από µια γλώσσα προγραµµατισµου; Δευτερεύουσα Μνήµη Απάντηση: Ένα µεταφραστικό εργαλείο µετατρέπει το πρόγραµµα στη γλώσσα µηχανής ( 0 και 1 ) της ΚΜΕ. 20
Γλώσσες Προγραµµατισµού Γλώσσα Μηχανής Ο επεξεργαστής καταλαβαίνει µόνο γλώσσα µηχανής. Συγκεκριµένες εντολές σε γλώσσα µηχανής εκτελούνται απευθείας στην κεντρική µονάδα επεξεργασίας.? Γλώσσα µηχανής 0111000100001111 1001110110110001 1110000100111110 Ανθρώπινη γλώσσα Γράψε µου ένα πρόγραµµα που να υπολογίζει το άθροισµα 2 αριθµών. 21
Γλώσσες Προγραµµατισµού Γλώσσα Assembly Γλώσσα χαµηλού επιπέδου ορισµένη από τον κατασκευαστή του επεξεργαστή. Είναι διατυπωµένη σε δυαδική γλώσσα µηχανής για να εκτελεστεί από την ΚΜΕ. Γλώσσα µηχανής 0111000100001111 1001110110110001 1110000100111110 Γλώσσα Assembly LOAD A ADD B STORE C Ανθρώπινη γλώσσα Γράψε µου ένα πρόγραµµα που να υπολογίζει το άθροισµα 2 αριθµών. 22
Γλώσσες Προγραµµατισµού Γλώσσες προγραµµατισµού υψηλού επιπέδου C Γλώσσα µηχανής 0111000100001111 1001110110110001 1110000100111110 C++ Python Θυµίζουν ανθρώπινη γλώσσα. Έχουν πιο περίπλοκες εντολές από αυτές της Assembly. Προγράµµατα σε αυτές τις γλώσσες πρέπει να µεταφραστούν σε κώδικα µηχανής για να εκτελεστούν από την ΚΜΕ. Γλώσσα Assembly LOAD A ADD B STORE C Pascal Γλώσσα Προγραµµατισµού # Python code C = A+B COBOL Ανθρώπινη γλώσσα Γράψε µου ένα πρόγραµµα που να υπολογίζει το άθροισµα 2 αριθµών. 23
Λογισµικό Τα προγράµµατα που χρησιµοποιούνται ευρέως σε ένα υπολογιστικό σύστηµα Λογισµικό σχετικό µε τον προγραµµατισµό: Λειτουργικό Σύστηµα Κέλυφος Επεξεργαστής κειµένου Μεταφραστής ή Διερµηνέας Περιβάλλον Ανάπτυξης Λογισµικού 24
Λειτουργικό Σύστηµα Χρήστης Δρα ως διαχειριστής. Ελέγχει και δεσµεύει τους υπολογιστικούς πόρους (π.χ., διάβασµα δεδοµένων από το δίσκο, εκτέλεση προγραµµάτων). Παρέχει γραφικό περιβάλλον στους χρήστες για την εύκολη περάτωση εργασιών (π.χ., εκτύπωση, δικτύωση, διαχείριση αρχείων) Εφαρµογές Λειτουργικό Σύστηµα Υλικό 25
Κέλυφος - Command Prompt Το κέλυφος (shell) ή το περιβάλλον γραµµής διαταγών (command prompt) επιτρέπει στους χρήστες να επικοινωνούν µε το λειτουργικό, εισάγοντας εντολές. Στα Windows, το command prompt ενεργοποιείται πληκτρολογώντας cmd στη γραµµή εκκίνησης. 26
Επεξεργαστής κειµένου Χρησιµοποιείται για να γράφουµε και να αλλάζουµε τον πηγαίο κώδικα ενός προγράµµατος. Μπορεί να αναγνωρίσει και να χρωµατίσει τα µέρη του προγράµµατος. Δηµοφιλείς επεξεργαστές κειµένου - emacs - vi - pico - UltraEdit - Crimson - TextWrangler Επεξεργαστής Κειµένου width = int(input("width: ")) length = int(input("length: ")) area = width*length print("area: ", area) Πηγαίος κώδικας (area.py) 27
Μεταγλωττιστής Οι επεξεργαστές καταλαβαίνουν µόνο προγράµµατα σε γλώσσα χαµηλού επιπέδου (απλές εντολές), που µπορεί να διαφέρουν ανάλογα τον υπολογιστή. Ο µεταγλωττιστής (compiler) είναι ένα πρόγραµµα που µεταφράζει αυτόµατα πηγαίο κώδικα υψηλού επιπέδου (π.χ. C++) σε γλώσσα µηχανής, ώστε ο υπολογιστής να µπορεί να τον εκτελέσει. Δυαδικός Κώδικας (Γλώσσα Μηχανής) (π.χ. area.o) Compiler Επεξεργαστής Κειµένου #include <iostream> int main ( ) { int width = 5; int height = 10; int area = width * height; cout << Area is << area; return 0; } Πηγαίος κώδικας (area.cpp) 28
Μεταγλωττιστής Το αποτέλεσµα της µεταγλώττισης πολλές φορές δεν είναι το βέλτιστο αφου η διαδικασία είναι µηχανιστική. Είναι όµως εντυπωσιακά καλό και πολλές φορές καλύτερο από τον κώδικα µηχανής που θα έγραφε ένας προγραµµατιστής. Απευθείας προγραµµατισµός σε γλώσσα µηχανής είναι εξαιρετικά δύσκολος. Δυαδικός Κώδικας (Γλώσσα Μηχανής) (π.χ. area.o) Compiler Επεξεργαστής Κειµένου #include <iostream> int main ( ) { int width = 5; int height = 10; int area = width * height; cout << Area is << area; return 0; } Πηγαίος κώδικας (area.cpp) 29
Συνδετής Ένα πρόγραµµα µπορεί να χρησιµοποιεί κοµµάτια κώδικα (βιβλιοθήκες) που έχουν γραφτεί από άλλους (π.χ. µαθ. συναρτήσεις) Ο συνδετής (linker) είναι ένα πρόγραµµα που συνδέει ένα ή περισσότερα αρχεία (µεταγλωττισµένου) µηχανικού κώδικα σε ένα εκτελέσιµο πρόγραµµα Library Library Library (π.χ. iostream.o) Linker Δυαδικός Κώδικας (Γλώσσα Μηχανής) (π.χ. area.o) Εκτελέσιµο (π.χ. area.exe) Compiler Επεξεργαστής Κειµένου #include <iostream> int main ( ) { int width = 5; int height = 10; int area = width * height; cout << Area is << area; return 0; } Πηγαίος κώδικας (area.cpp) 30
Διερµηνέας Κάποιες γλώσσες προγραµµατισµού π.χ. Python) δεν έχουν µεταγλωττιστή, αλλά διερµηνέα (interpreter). Ο διερµηνέας µεταφράζει και εκτελεί ένα πρόγραµµα, εντολή προς εντολή Πλεονέκτηµα: γρηγορότερη παραγωγή και έλεγχος πηγαίου κώδικα Μειονέκτηµα: το τελικό πρόγραµµα είναι συνήθως πιο αργό Interpreter width = int(input("width: ")) Επεξεργαστής Κειµένου width = int(input("width: ")) length = int(input("length: ")) area = width*length print("area: ", area) Πηγαίος κώδικας (area.py) µεταγλώττιση και εκτέλεση 31
Ολοκληρωµένο Περιβάλλον Ανάπτυξης Λογισµικού Ένα Ολοκληρωµένο Περιβάλλον Ανάπτυξης Λογισµικού (Integrated Development Environment - IDE) ενοποιεί τα βήµατα ανάπτυξης ενός προγράµ- µατος (επεξεργασία κειµένου, µεταγλώττιση, εκσφαλµάτωση) Π.χ., IDLE (Python), Eclipse Library Library Library (πχ. iostream.o) Linker Object code (Machine language ) (π.χ. area.o) Εκτελέσιµο (π.χ. area.exe) Compiler IDE Editor #include <iostream> int main ( ) { int width = 5; int height = 10; int area = width * height; cout << Area is << area; return 0; } Πηγαίος κώδικας (area.cpp) 32
Παράδειγµα προγράµµατος Python σχόλιο µεταβλητή/ αντικείµενο συνάρτηση εξόδου στην οθόνη # sample Python program # computes the area of a rectangle width = int(input("width: ")) length = int(input("length: ")) area = width*length print("area: ", area) area.py συνάρτηση αρχικοποίησης ακεραίου συνάρτηση εισόδου από το χρήστη αλφαριθµητική σταθερά 33
Έλεγχος και Εκσφαλµάτωση Το σφάλµα σε ένα πρόγραµµα λέγεται bug (ζωύφιο). Ένα πρόγραµµα που γράφουµε είναι πιο πιθανό να έχει bugs από το να µην έχει. Η κυριότερη αιτία ενός bug είναι η απροσεξία του προγραµµατιστή. Ακόµα και ο πιο έµπειρος προγραµµατιστής κάνει σφάλµατα Κατ αναλογία, ακόµα κι ο πιο έµπειρος συντάκτης κάνει γραµµατικά και συντακτικά λάθη. 34
Τύποι Σφαλµάτων Συντακτικά λάθη (syntax errors) Λάθη κατά την εκτέλεση (run-time errors) Λογικά σφάλµατα 35
Συντακτικά λάθη Εντοπίζονται από το µεταγλωττιστή/διερµηνέα ή τον συντακτικό αναλυτή (parser) Διορθώνονται εύκολα Interpreter width = int(input("width: ")) length = int(input("length: ")) area = width*legth print("area: ", area) Traceback (most recent call last): File "area.py", line 3, in <module> area = width*legth NameError: name 'legth' is not defined Πηγαίος κώδικας (area.py) 36
Λάθη κατά την εκτέλεση Συµβαίνουν κατά την εκτέλεση του προγράµµατος και όχι πάντα. Τυπικό σφάλµα: διαίρεση µε το 0 Interpreter Area: 10 Length: 0 Traceback (most recent call last): File "area2.py", line 3, in <module> width = area/length ZeroDivisionError: division by zero area = int(input("area: ")) length = int(input("length: ")) width = area/length print("width: ", width) Πηγαίος κώδικας (area2.py) 37
Λογικά σφάλµατα Λογικά λάθη στο πρόγραµµα: το πρόγραµµα δεν κάνει την επιθυµητή λειτουργία ή παράγει λάθος αποτελέσµατα Ο πονοκέφαλος του προγραµµατιστή: συνήθως είναι δύσκολο να βρεθούν Interpreter width = int(input("width: ")) length = int(input("length: ")) area = width+length print("area: ", area) Width: 5 Length: 2 Area: 7 Πηγαίος κώδικας (area.py) 38
Ανάπτυξη Προγράµµατος Βήµα 1: Σχεδιασµός Κατανόηση των απαιτήσεων (τι θέλουµε να κάνουµε;) Αναγνώριση της εισόδου και της επιθυµητής εξόδου του προγράµµατος Σχεδιασµός ενός αλγορίθµου που λύνει το πρόβληµα Βήµα 2: Υλοποίηση Μετατροπή του αλγορίθµου στη γλώσσα προγραµµατισµού Μεταγλώττιση/Διερµηνεία για εντοπιστό τυχόν συντακτικών λαθών Εκτέλεση του προγράµµατος δίνοντας ως είσοδο δεδοµένα µε τα οποία µπορούµε να ελεγξουµε τυχόν σφάλµατα κατα την εκτέλεση και λογικά λάθη 39
Παράδειγµα Προδιαγραφές προβλήµατος: Μία κατασκευαστική εταιρία παρέχει µια υπηρεσία δόµησης σκάλας µε λίθινες ράβδους για τους πελάτες της. Υποθέστε ότι κάθε ράβδος έχει 30 εκ. ύψος και το κόστος µιας ράβδου είναι 10. Ζητείται ένα πρόγραµµα που να υπολογίσει το κόστος κατασκευής µιας σκάλας ύψους χ εκ. ύψος κόστος 30 10 60 90 20 30 40
Παράδειγµα Προδιαγραφές προβλήµατος: Μία κατασκευαστική εταιρία παρέχει µια υπηρεσία δόµησης σκάλας µε λίθινες ράβδους για τους πελάτες της. Υποθέστε ότι κάθε ράβδος έχει 30 εκ. ύψος και το κόστος µιας ράβδου είναι 10. Ζητείται ένα πρόγραµµα που να υπολογίσει το κόστος κατασκευής µιας σκάλας ύψους χ εκ. Ερώτηση: Ποια είναι η είσοδος και η έξοδος του προγράµµατος µας; Απάντηση: 1) Ο χρήστης θα ορίσει το επιθυµητό ύψος χ της σκάλας 2) Το κόστος κάθε ράβδου είναι 10 3) Το ύψος κάθε ράβδου είναι 30 εκ. 4) Ζητούµενο (έξοδος) είναι το κόστος µιας σκάλας χ εκατοστών. ύψος κόστος 30 10 60 90 20 30 41
Παράδειγµα Προδιαγραφές προβλήµατος: Μία κατασκευαστική εταιρία παρέχει µια υπηρεσία δόµησης σκάλας µε λίθινες ράβδους για τους πελάτες της. Υποθέστε ότι κάθε ράβδος έχει 30 εκ. ύψος και το κόστος µιας ράβδου είναι 10. Ζητείται ένα πρόγραµµα που να υπολογίσει το κόστος κατασκευής µιας σκάλας ύψους χ εκ. Τώρα, σχεδίασε έναν αλγόριθµο που να λύνει το πρόβληµά µας! ΙΔΕΑ : 1) Διαιρώ το χ µε 30 για να πάρω το ύψος υ της σκάλας σε ράβδους 2) Χρειάζοµαι 1+2+...+ υ ράβδους! 3) Το κόστος είναι (1+2+...+ υ)*10! ύψος κόστος 30 10 60 90 20 30 42
Παράδειγµα Προδιαγραφές προβλήµατος: Μία κατασκευαστική εταιρία παρέχει µια υπηρεσία δόµησης σκάλας µε λίθινες ράβδους για τους πελάτες της. Υποθέστε ότι κάθε ράβδος έχει 30 εκ. ύψος και το κόστος µιας ράβδου είναι 10. Ζητείται ένα πρόγραµµα που να υπολογίσει το κόστος κατασκευής µιας σκάλας ύψους χ εκ. Τώρα, γράψε το πρόγραµµα! x = int(input("required height (in cm): ")) import math u = math.ceil(x/30) numrods = 0 for i in range(1,u+1): numrods = numrods+i cost = numrods*10 print("the cost is: ", cost) ύψος κόστος 30 10 60 90 20 30 43
Παράδειγµα Προδιαγραφές προβλήµατος: Μία κατασκευαστική εταιρία παρέχει µια υπηρεσία δόµησης σκάλας µε λίθινες ράβδους για τους πελάτες της. Υποθέστε ότι κάθε ράβδος έχει 30 εκ. ύψος και το κόστος µιας ράβδου είναι 10. Ζητείται ένα πρόγραµµα που να υπολογίσει το κόστος κατασκευής µιας σκάλας ύψους χ εκ. Μπορούµε να κάνουµε το πρόγραµµα πιο γρήγορο; x = int(input("required height (in cm): ")) import math u = math.ceil(x/30) numrods = int((u*(u+1))/2) cost = numrods*10 print("the cost is: ", cost) ύψος κόστος 30 10 60 90 20 30 44
Ένα καλό πρόγραµµα Είναι οπωσδήποτε σωστό! Είναι γρήγορο 45
Πρότυπα Προγραµµατισµού Διαδικαστικός (Δοµηµένος) Προγραµµατισµός Πρόγραµµα σε µεταβλητές, δοµές, συναρτήσεις Pascal, C Αντικειµενοστρεφής Προγραµµατισµός Πρόγραµµα βασισµένο σε αντικείµενα C++, Java, Python Συναρτησιακός Προγραµµατισµός Πρόγραµµα σαν µαθηµατικές συναρτήσεις Lisp, Haskel, Erlang, Scala Λογικός Προγραµµατισµός Prolog 46
Φιλοσοφία του Μαθήµατος Εκµάθηση βασικών αρχών και φιλοσοφίας του προγραµµατισµού µε την Python Έµφαση στα βασικά στοιχεία της Python που είναι κοινά και σε άλλες γλώσσες (π.χ. C, Java) Οµαλή µετάβαση στο µάθηµα «Τεχνικές Αντικειµενοστρεφούς Προγραµµατισµού» του εαρινού εξαµήνου 47
Γιατί Python; Εξαιρετικά δηµοφιλής γλώσσα Εύκολη και γρήγορη ανάπτυξη εφαρµογών Υπάρχει διαθέσιµος µεγάλος όγκος ελεύθερου λογισµικού (προγράµµατα και βιβλιοθήκες) Χρησιµοποιείται και στην ανάπτυξη εµπορικών εφαρµογών Μαθαίνοντάς την, µαθαίνουµε στοιχεία διαδικαστικού και αντικειµενοστρεφούς προγραµµατισµού 48
Ευχαριστίες Ευχαριστώ τους συναδέλφους Γ. Μάνη και Λ. Κοντή, καθώς και τον Chui Chun Kit ( 崔俊傑, http://i.cs.hku.hk/~ckchui/) για υλικό τους που χρησιµοποιήθηκε σε αυτές τις διαφάνειες 49