Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Εισαγωγή στην πληροφορική Βασίλειος Βεσκούκης ρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Ρωµύλος Κορακίτης Αστροφυσικός Αναπλ. Καθηγητής ΕΜΠ romylos@survey.ntua.gr Εισαγωγή στην γλώσσα C++ Ροή εργασιών προγραµµατισµού
Ενα πρώτο πρόγραµµα //MyFirstProgram.cpp #include <iostream> using namespace std; int main() { cout<<"welcome to C++ Programming"; return 0; } MyFirstProgram.cpp compile MyFirstProgram.o link MyFirstProgram.exe iostream ΕΞΟ ΟΣ: Welcome to C++ Programming execute
Στοιχεία προγράµµατος C++ Αναγνωριστικά ονόµατα (identifiers) Μεταβλητές µνήµης Σταθερές Τελεστές Αριθµητικοί Λογικοί Σύγκρισης Εκφράσεις, εντολές εσµευµένες λέξεις Αριθµητικές και λογικές εκφράσεις Ελεγχος ροής προγράµµατος Συναρτήσεις Κλάσεις Σχόλια
Ενα πρώτο πρόγραµµα - αναγνώριση στοιχείων //MyFirstProgram.cpp #include <iostream> using namespace std; int main() { cout << "Welcome to C++ Programming"; ήλωση χρήσης βιβλιοθήκης Ονοµα ενσωµατωµένης βιβλιοθήκης Συνάρτηση Αναγνωριστικό του καθιερωµένου ρεύµατος εξόδου της βιβλιοθήκης iostream Τελεστής εξόδου } return 0; Αλφαριθµητική σταθερά ΕΞΟ ΟΣ: Welcome to C++ Programming Ρωµύλος Κορακίτης -
Συναρτήσεις Οι δοµικές µονάδες κάθε προγράµµατος λέγονται «συναρτήσεις»» (functions)( Μια συνάρτηση περιέχει κάποιες εντολές που επιτελούν µια εργασία όταν εκτελεστούν Μια συνάρτηση µπορεί να επιστρέφει ένα αποτέλεσµα ή να µην επιστρέφει κανένα αποτέλεσµα στο περιβάλλον της x=max(3,4) printmax(3,4) Γενικοί κανόνες Κάθε πρόγραµµα περιέχει υποχρεωτικά µία συνάρτηση, την main() Κάθε συνάρτηση µπορεί να καλεί άλλες συναρτήσεις ή και τον εαυτό της Κάθε συνάρτηση µπορεί να επιστρέφει ένα αποτέλεσµα στο περιβάλλον κλήσης της, δηλαδή στη συνάρτηση που την κάλεσε Το περιβάλλον κλήσης της main() είναι το λειτουργικό σύστηµα
Προγραµµατισµός σε C++ main() d ΤΙΜΗ ΠΟΥ ΕΠΙΣΤΡΕΦΕΙ Η ΣΥΝΑΡΤΗΣΗ int main() { int a, b, c, d; readabc(); //πάνω σχήµα d=findmax(); //κάτω σχήµα d=findmax(a,b,c); printmax(); } readabc() d=findmax() printmax() main() d a,b,c ΠΑΡΑΜΕΤΡΟΙ ΠΟΥ ΕΧΕΤΑΙ Η ΣΥΝΑΡΤΗΣΗ readabc() d=findmax(a,b,c) printmax(d) d void readabc() {... } int findmax() {... return x; } void printmax() {... } int findmax(int k, int l, int m) {... return x; }
Αναγνωριστικά ονόµατα (identifiers) Ενα αναγνωριστικό όνοµα (identifier) µπορεί να αποτελείται από χαρακτήρες, αριθµούς και το underscore (_) πρέπει να ξεκινά από χαρακτήρα ή από το underscore (_) είναι case-sensitive (case <> Case <> CASE <> CΑse κλπ) Υπάρχουν προκαθορισµένα αναγνωριστικά ονόµατα στη C++... cin, cout, κ.ά....καθώς και αναγνωριστικά που ορίζονται από τον χρήστη για να ονοµατίσουν µεταβλητές µνήµης, συναρτήσεις, κλάσεις, αντικείµενα, κλπ i, j, salary, CostPerHour, person1, first_name, _tempint, Phone_Number 1stName, miles per hour, calculate max, one+more, CalculateMin Η επιλογή των ονοµάτων πρέπει να είναι κατάλληλη και να συµβάλλει στην κατανόηση του προγράµµατος DailySalary = Hours * CostPerHour ds = h * cph
Τύποι δεδοµένων Τα δεδοµένα εισόδου, τα αποτελέσµατα και όλα τα ενδιάµεσα υπολογιζόµενα δεδοµένα αποθηκεύονται σε χώρο που δεσµεύεται κατάλληλα στη µνήµη του Η/Υ Ο τρόπος παράστασης των δεδοµένων επιβάλλει τη διαφοροποίηση του χειρισµού τους από τον Η/Υ, ανάλογα µε το είδος των εκάστοτε δεδοµένων (θυµηθείτε!) Ακέραιοι αριθµοί Χαρακτήρες Πραγµατικοί αριθµοί κλπ ΤΥΠΟΣ (type) Ένα σύνολο κανόνων χειρισµού και παράστασης δεδοµένων από µια γλώσσα προγραµµατισµού ονοµάζεται τύπος δεδοµένων (data type) Οι τύποι δεδοµένων στη C++ διακρίνονται σε τρεις κατηγορίες Απλοί τύποι δεδοµένων οµηµένοι τύποι δεδοµένων είκτες
Τύποι δεδοµένων Απλοί τύποι δεδοµένων Ακέραιοι char, short, int, long, bool, unsigned char, unsigned short, unsigned int, unsigned long Κινητής υποδιαστολής (floating point) float double long double Απαριθµητοί (enumerated) οµηµένοι τύποι Πίνακες (tables, arrays) οµές (structures) Συµβολοσειρές (strings) είκτες ιευθύνσεις µεταβλητών µνήµης
Μεταβλητές µνήµης και σταθερές Μια µεταβλητή µνήµης (memory variable, variable) χρησιµοποιείται για την προσωρινή αποθήκευση δεδοµένων που χρησιµοποιεί το πρόγραµµα που την δηλώνει ιατύπωση: Μια µεταβλητή µνήµης (memory variable) είναι κάποιου τύπου Μια µεταβλητή µνήµης ανήκει σε κάποιον τύπο ηλαδή: Παριστάνεται και συµπεριφέρεται σύµφωνα µε όσα καθορίζει ο τύπος στον οποίο ανήκει Μια σταθερά διατηρεί πάντα την ίδια τιµή Παραδείγµατα const double pi=3.14; const int arista=10; int a; float salary; bool cleared; int a=0; double temperature, pressure, humidity;
Αριθµητικές εκφράσεις Αριθµητικοί τελεστές +, -, *, / για τις τέσσερις βασικές πράξεις ακεραίων και αριθµών κινητής υποδιαστολής % (modulus) ακέραιο υπόλοιπο διαίρεσης ακεραίων αριθµών Αριθµητικές εκφράσεις 3 + 4 = 7 6 * 4 / 2 = 12 10 3 * 2 = 4 5 * 5 4 * 6 = 1 5 / 2 = 2 (ακέραιοι) 5 % 2 = 1 (ακέραιοι) Quiz! 4 % 6 = 25 % 26 = 12 / 5 = 3 * 4 * 2 4 * 6 + 10 % 3 = 5 * 9 + 3 % 4 + 2 =
Ροή εργασιών προγραµµατισµού 1. Με χρήση ενός προγράµµατος συντάκτη κειµένου (editor) γράφουµε το πηγαίο πρόγραµµα (source program) σε µια γλώσσα προγραµµατισµού (λ.χ. C++) 2. Με χρήση του µεταφραστή της C++ (compiler) ελέγχουµε αν το πηγαίο πρόγραµµα τηρεί τους κανόνες σύνταξης της γλώσσας και εφόσον το κάνει, το µεταφράζουµε σε µια ισοδύναµη µορφή που λέγεται object program (µη αναγνώσιµη από τον άνθρωπο) 3. Με χρήση ενός "συνδυαστή" (linker) συνδυάζουµε το object program που δηµιουργήσαµε µε τυχόν άλλα συστατικά στοιχεία έτοιµων object προγραµµάτων τα οποία διατίθενται µε τη µορφή "βιβλιοθήκης" 4. Με τη βοήθεια του λειτουργικού συστήµατος, φορτώνουµε το εκτελέσιµο πρόγραµµα στη µνήµη του υπολογιστή, όπου εκτελείται
Έλεγχος του προγράµµατος Ο έλεγχος του προγράµµατος γίνεται µε σειρά αντίστροφη από την δηµιουργία του. Οι τρείς φάσεις οπισθοδρόµησης στην διαδικασία του προγραµµατισµού είναι: ιόρθωση συντακτικών σφαλµάτων : ανιχνεύονται από τον compiler και απαιτούν διορθώσεις στην κωδικοποίηση του αλγορίθµου (πηγαίος κώδικας) ιόρθωση λογικών σφαλµάτων: µερικά µπορεί να ανιχνευθούν επειδή προκαλούν σφάλµα κατά την εκτέλεση του προγράµµατος (π.χ. διαίρεση µε 0). Άλλα λογικά σφάλµατα εντοπίζονται µε εξαντλητικό έλεγχο της συµπεριφοράς του προγράµµατος µε διάφορες τιµές των δεδοµένων εισόδου. Αντιµετωπίζονται µε τις κατάλληλες τροποποιήσεις στην σχεδίαση και κωδικοποίηση του αλγορίθµου. ιόρθωση σφαλµάτων αρχής: αν και το πρόγραµµα εκτελείται κανονικά, µπορεί τα αποτελέσµατα να µην ανταποκρίνονται στις αρχικές επιθυµίες. Αυτό σηµαίνει ότι υπάρχει σφάλµα στην σύλληψη ή την διατύπωση του προβλήµατος, που αντιµετωπίζεται µε νέα διατύπωση και ανάλυση του προβλήµατος και επανασχεδιασµό του αλγορίθµου. ρ. Ρωµύλος Βασίλειος Κορακίτης Βεσκούκης
Παράδειγµα Πρόβληµα: Να σχεδιαστεί ένα πρόγραµµα που θα λύνει την πρωτοβάθµια εξίσωση της µορφής : ax+b = 0 εδοµένα εισόδου: a, b εδοµένα εξόδου: η τιµή της ρίζας x Μετασχηµατισµοί: x = b / a Αλγόριθµος: ιάβασε a, b x = b / a Εµφάνισε x ρ. Ρωµύλος Βασίλειος Κορακίτης Βεσκούκης
Παράδειγµα (συνέχεια) Κατά την µεταγλώττιση του κώδικα δόθηκε το ακόλουθο µήνυµα: Τα δύο συντακτικά λάθη διορθώνονται και η µεταγλώττιση ολοκληρώνεται επιτυχώς r = b / c ρ. Ρωµύλος Βασίλειος Κορακίτης Βεσκούκης
Παράδειγµα (συνέχεια) Όταν το πρόγραµµα εκτελεστεί µε δεδοµένα εισόδου: a = 3, b = 12, η απόκριση είναι: Root of equation = 4 αντί του ορθού αποτελέσµατος 4 Επίσης, όταν το πρόγραµµα εκτελεστεί µε δεδοµένα εισόδου: a = 0, b = 3, η απόκριση είναι: The exception Floating-point division by zero has occurred in application... r = b / a; Τα λογικά λάθη του αλγορίθµου διορθώνονται και η µεταγλώττιση επαναλαµβάνεται ρ. Ρωµύλος Βασίλειος Κορακίτης Βεσκούκης
Παράδειγµα - η τελική µορφή του αλγορίθµου ΑΡΧΗ ιάβασε συντελεστή a ιάβασε συντελεστή b Αν a = 0 τότε Αν b = 0 τότε εµφάνισε «Εξίσωση αόριστη» αλλιώς εµφάνισε «Εξίσωση αδύνατη» αλλιώς r = -b / a εµφάνισε r ΤΕΛΟΣ ρ. Ρωµύλος Βασίλειος Κορακίτης Βεσκούκης
Παράδειγµα - η τελική µορφή του κώδικα C++ ρ. Ρωµύλος Βασίλειος Κορακίτης Βεσκούκης