Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Δ1-1 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑΝΝΗΣ ΜΑΪΣΤΡΟΣ ΚΩΣΤΑΣ ΚΟΝΤΟΓΙΑΝΝΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Ε.Μ.Π.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Δ1-1 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑΝΝΗΣ ΜΑΪΣΤΡΟΣ ΚΩΣΤΑΣ ΚΟΝΤΟΓΙΑΝΝΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Ε.Μ.Π."— Μεταγράφημα παρουσίασης:

1 Δ1-1 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑΝΝΗΣ ΜΑΪΣΤΡΟΣ ΚΩΣΤΑΣ ΚΟΝΤΟΓΙΑΝΝΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Ε.Μ.Π.

2 Δ1-2 ΚΑΛΩΣ ΗΡΘΑΤΕ ! Καλώς ήρθατε στο Μάθημα «Προγραμματιστικές Τεχνικές». Αυτό το Μάθημα ουσιαστικά εισάγει έννοιες σχετικές με την σχεδίαση και την κατασκευή λογισμικού με τη χρήση της γλώσσας προγραμματισμού C. Σας ευχόμαστε ολόψυχα καλή επιτυχία.

3 Δ1-3 ΑΝΤΙΚΕΙΜΕΝΟ ΤΟΥ ΜΑΘΗΜΑΤΟΣ (1) Καλύτερη γνώση και χρήση της γλώσσας C Εισαγωγή στο Δομημένο Προγραμματισμό –Έννοιες που χρησιμοποιούνται για τη σχεδίαση αλγόριθμων και προγραμμάτων –Βασικές δομές (κατασκευές) για την υλοποίηση προγραμμάτων –Απόκτηση εμπειρίας στο προγραμματισμό απλών εφαρμογών

4 Δ1-4 ΑΝΤΙΚΕΙΜΕΝΟ ΤΟΥ ΜΑΘΗΜΑΤΟΣ (2) Εβδομάδα 1 Χαρακτηριστικά της C, Τελεστές, Έλεγχος Ροής Εβδομάδα 2Δομή Προγράμματος, ΑΤΔ, Μονοδιάστατοι Πίνακες Παραδείγματα Εβδομάδα 3 Εισαγωγή στη Πολυπλοκότητα Προγραμμάτων Εβδομάδα 4Πολυδιάστατοι Πίνακες, Δομές, Ενώσεις Εβδομάδα 5Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις Εβδομάδα 6Συναρτήσεις Βιβλιοθήκης, Εισόδου-Εξόδου, Αλγόριθμοι Ταξινόμησης Εβδομάδα 7 Στοίβες, Συνδεδεμένες Λίστες, Ουρές Εβδομάδα 8Διπλά Συνδεδεμένες Λίστες, Κυκλικές Λίστες, Ταξινομημένες Λίστες Εβδομάδα 9 Hash Πίνακες Εβδομάδα 10Δυαδικά Δένδρα, Διάσχυση Δυαδικών Δένδρων Εβδομάδα 11Δένδρα AVL Εβδομάδα 12Γράφοι Εβδομάδα 13Διάσχιση Γράφων - Ανασκόπηση

5 Δ1-5 ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΟ ΜΑΘΗΜΑ (1) Το πρόγραμμα: –Διαλέξεις (Στό Α3 & Α4 – Γενικές Έδρες) Παρασκευή 12:45 – 16:00 –Εργαστήρια (Στό Μηχανογραφικό Κέντρο) Το πρόγραμμα θα ανακοινωθεί σύντομα –Σημείωση: Από την εβδομάδα της 4ης Ιουνίου, το τμήμα που έχει μάθημα στο Α3 θα κάνει μάθημα κάθε Τρίτη στο Α4 Γενικές Έδρες 15: :00. Το πρώτο μάθημα με το νέο πρόγραμμα θα αρχίσει τη Τρίτη 5 Ιουνίου. Το τμήμα που κάνει μάθημα στο Α4 θα παραμείνει ως έχει.

6 Δ1-6 ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΟ ΜΑΘΗΜΑ (2) Βοηθοί – –Θα ανακοινωθούν

7 Δ1-7 ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΟ ΜΑΘΗΜΑ (3) Βιβλία –[1] B. Kernighan and D. Ritchie, "Η Γλώσσα Προγραμματισμού C", σε Ελληνική Μετάφραση, Εκδόσεις Κλειδάριθμος, 1990 –[2] Ν. Μισυρλής, "Δομές Δεδομένων", Ιδιωτική Έκδοση –Σχετικά με τη διανομή των συγγραμμάτων θα ακολουθήσει ανακοίνωση από τη διοίκηση της Σχολής και τους διδάσκοντες. Σημειώσεις και άλλο υλικό γιά το μάθημα –Σημειώσεις θα παρουσιάζονται σταδιακά στην Ιστοσελίδα του μαθήματος –Ασκήσεις, Φροντιστηριακό υλικό, και Ανακοινώσεις θα παρουσιάζονται επίσης στην παραπάνω ιστοσελίδα Λογαριασμοί για το υπολογιστικό σύστημα (για όσους δεν έχουν) –Από το Υπολογιστικό Κέντρο με την ταυτότητά σας και τον αριθμό Μητρώου του ΗΜΜΥ. Λεπτομέρειες θα ανακοινωθούν και στην ιστοσελίδα του μαθήματος

8 Δ1-8 ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΟ ΜΑΘΗΜΑ (4) Η βαθμολογία θα υπολογίζεται ως εξής: –Τελικό διαγώνισμα (70%) –Εξέταση στις εργαστηριακές ασκήσεις (40%) Άσκηση 1 (15%) –Μια από τις εργαστηριακές ασκήσεις που θα ορισθεί από τους διδάσκοντες Άσκηση 2 (15%) –Άλλη μια από τις εργαστηριακές ασκήσεις που θα ορισθεί από τους διδάσκοντες Άσκηση 3 (10%) –Μια άσκηση από τις εργαστηριακές ασκήσεις που θα επιλέξει ο κάθε φοιτητής/ομάδα

9 Δ1-9 ΕΠΙΚΟΙΝΩΝΙΑ Κώστας Κοντογιάννης Γιάννης Μαΐστρος Ας Αρχίσουμε λοιπόν......

10 Δ1-10 Μάθημα 1 0 Χαρακτηριστικά της C, Τελεστές, Έλεγχος Ροής

11 Δ1-11 Η ιστορία της C AT&T Bell Labs, Dennis Ritchie 1978“The C Programming Language” K&R: Kernighan & Ritchie 1983Σύσταση ANSI Standardization Committee X3J Αποδοχή ANSI/ISO Standard  ANSI C Αναθεώρηση του standard υπό εξέλιξη — C9X  C99

12 Δ1-12 Χαρακτηριστικά της C(i) Γλώσσα προστακτικού προγραμματισμού Γλώσσα μετρίου επιπέδου Οικονομία στην έκφραση (λιτή και περιεκτική) Σχετικά χαλαρό σύστημα τύπων Φιλοσοφία: ο προγραμματιστής έχει πλήρη έλεγχο και ευθύνεται για τα σφάλματά του

13 Δ1-13 Χαρακτηριστικά της C(ii) Ιδιαίτερα δημοφιλής στην πράξη Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέως φάσματος συστημάτων και εφαρμογών Έχει χρησιμοποιηθεί ως βάση για πληθώρα άλλων γλωσσών: C++, Java

14 Δ1-14 Σχηματική Παρουσίαση της Διαδικασίας Προγραμματισμού Προγραμ- ματιστής/ Αναλυτής Ορισμός του Προβλήματος/ Problem Definition Γνώση της περιοχής Του Προβλήματος/ Domain Knowledge Αλγόριθμος/ Algorithm Πηγαίο πρόγραμμα (Source Code) σε κάποια Γλώσσα Προγραμματισμού π.χ. C Χρήση τεχνικών επίλυσης προβλημάτων π.χ. Top-down, Bottom-up Αλγόριθμος Επίλυσης Προβλήματος Ανάλυση Προγραμ- ματισμός Πηγαίο Πρόγραμμα

15 Δ1-15 ΚΥΚΛΟΣ ΜΕΤΑΦΡΑΣΕΩΝ Πηγαίο Πρόγραμμα Πρόγραμμα σε Συμβολική Γλώσσα Βελτιστοποιημένη Συμβολική Γλώσσα Ενοποιημένη Συμβολική Γλώσσα Γλώσσα Μηχανής Η/Υ Μετάφραση/ Compilation Βελτιστοποίηση/ Optimization Ενοποίηση/ Linking Συμβολομετάφραση/ Assembler Φόρτωση/ Loading

16 Δ1-16 ΤΙ ΕΙΝΑΙ ΟΜΩΣ ΕΝΑΣ ΑΛΓΟΡΙΘΜΟΣ; Αλγόριθμος (Algorithm) είναι μία ακολουθία οδηγιών (εντολών) οι οποίες επιλύουν ένα συγκεκριμένο πρόβλημα Μπορούμε να έχουμε πολλούς διαφορετικούς αλγόριθμους για την επίλυση ενός προβλήματος Η επιλογή του πιο κατάλληλου αλγόριθμου μπορεί να γίνει με βάση την πολυπλοκότητα του (time complexity), την χρήση της μνήμης που απαιτεί (space complexity), τήν δυνατότητα παραμετροποίησής του (parameterization), την αξιοπιστία του (reliability), την δυνατότητα συνέχισης της λειτουργίας του σε ακραίες συνθήκες (robustness) κλπ. Ένας αλγόριθμος έχει ένα ή περισσότερα σημεία εισόδου (πρώτη εντολή να εκτελεσθεί στην ακολουθία – συνήθως όμως έχει ένα σημείο εισόδου), και εμπεριέχει κάποιες συνθήκες που εγγυούνται την λήξη της λειτουργίας του (τελευταία εντολή)

17 Δ1-17 ΑΛΓΟΡΙΘΜΟΙ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ Έχουμε μιλήσει για τις δύο βασικές μεθόδους ανάλυσης ενός προβλήματος (top-down και bottom-up). Όμως πώς αυτές συσχετίζονται με την σχεδίαση προγραμμάτων; Η αναλυτική μέθοδος (top down) σχετίζεται με την μέθοδο σχεδίασης «διαίρει και βασίλευε» (divide and conquer), όπου για να σχεδιάσουμε ένα πρόγραμμα το διαιρούμε σε απλούστερα προγράμματα Η συνθετική μέθοδος (bottom up) σχετίζεται με την μέθοδο σχεδίασης «σταδιακή εξέλιξη» (successive refinement), όπου αρχίζουμε με ένα απλό πρόγραμμα και σταδιακά του προσθέτουμε περισσότερες λεπτομέρειες μέχρι που όλες οι περιπτώσεις που πρέπει να λυθούν έχουν λυθεί

18 Δ1-18 ΨΕΥΔΟ-ΚΩΔΙΚΑΣ (pseudocode) Όταν είμαστε έτοιμοι να παρουσιάσουμε ένα αλγόριθμο (πρόγραμμα) μπορούμε να χρησιμοποιήσουμε ψευδοκώδικα αντί μια γλώσσα προγραμματισμού Αυτό μας δίνει το πλεονέκτημα ότι η σχεδίαση του αλγόριθμου δεν επηρεάζεται από την γλώσσα που θα χρησιμοποιηθεί οπότε διαχωρίζονται οι φάσεις σχεδίασης προγράμματος (design) από την υλοποίηση του προγράμματος (implementation) Ο ψευδοκώδικας είναι ένα μαθηματικό μοντέλο του αλγόριθμου, εκφραζόμενο σε μια μορφή που θυμίζει (αλλά δεν είναι) γλώσσα προγραμματισμού Η ιδέα είναι ότι από τον ψευδοκώδικα είναι απλή η διαδικασία της υλοποίησης (αναλογία μεταξύ Αρχιτέκτονα που σχεδιάζει και Εργολάβου που ακολουθεί πιστά το σχέδιο για την ανέγερση μιας οικοδομής)

19 Δ1-19 ΠΑΡΑΔΕΙΓΜΑ ΨΕΥΔΟΚΩΔΙΚΑ Μία πιθανή μορφή ψευδοκώδικα είναι: let name1, name2 (ορισμός μεταβλητών) let name1, name2 (ορισμός μεταβλητών) get name1, name2 (διάβασε τις μεταβλητές name1, name2 get name1, name2 (διάβασε τις μεταβλητές name1, name2 από κάποια μονάδα εισόδου) από κάποια μονάδα εισόδου) record name1, name2 (αποθήκευσε τις τρέχουσες τιμές των μεταβλητών name1, name2 σε κάποια εξωτερική μονάδα – π.χ. Δίσκο) record name1, name2 (αποθήκευσε τις τρέχουσες τιμές των μεταβλητών name1, name2 σε κάποια εξωτερική μονάδα – π.χ. Δίσκο) name1  έκφραση (αποθήκευσε την τιμή της έκφρασης name1  έκφραση (αποθήκευσε την τιμή της έκφρασης στη μεταβλητή name1 στη μεταβλητή name1 if expression then if expression then A else else B endif endif

20 Δ1-20ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Προγραμματισμός δεν είναι μόνο η υλοποίηση ενός αλγόριθμου σε μία κατάλληλη για το πρόβλημα γλώσσα (C, C++, Java, Pascal, Fortran, Cobol κλπ.) Ο Προγραμματισμός εμπεριέχει: 1. Την ανάλυση των απαιτήσεων του προβλήματος α. Λειτουργικές απαιτήσεις (functional requirements analysis) β. Μη-λειτουργικές απαιτήσεις (non-functional requirements analysis) Επιλυση Προβλήματος Τη σχεδίαση τού προγράμματος (θεωρούμε ότι ήδη έχουμε κάνει την επιλογή – σχεδίαση του κατάλληλου αλγόριθμου όπως είπαμε στη διαφάνεια σχετικά με την επίλυση ενός προβλήματος (design specifications) 3. Την υλοποίηση του προγράμματος σε μία κατάλληλη γλώσσα για το πρόβλημα (implementation) 4. Τον έλεγχο του προγράμματος ώστε να πιστοποιηθεί η ορθή λειτουργία του σε σχέση με τις λειτουργικές και μη- λειτουργικές απαιτήσεις (testing) 5. Τη συντήρηση του για την διόρθωση λαθών, προσθήκη νέων λειτουργιών, και την προσαρμογή του σε άλλα συστήματα (maintenance)

21 Δ1-21 ΠΡΟΓΡΑΜΜΑΤΑ ΚΑΙ ΒΙΒΛΙΟΘΗΚΕΣ Μία τυπική εφαρμογή αποτελείται: –Από το πηγαίο κώδικα που κατά το πλείστον (ή καθ’ ολοκληρία) υλοποιεί ένα αλγόριθμό της λύσης του προβλήματος –Από κώδικα που υποστηρίζει γενικές λειτουργίες που ίσως χρειάζεται ο πηγαίος κώδικας (π.χ. Εκτύπωση, τριγωνομετρικές συναρτήσεις κλπ.) –Αυτός ο κώδικας υποστήριξης ονομάζεται βιβλιοθήκη (library) –Οι βιβλιοθήκες που χρειάζονται και ο πηγαίος κώδικας μεταφράζονται (compiled) και ενοποιούνται (linked) σε ένα συμβολικό πρόγραμμα, το οποίο με τη σειρά του συμβολομεταφράζεται σε γλώσσα μηχανής –Υπάρχουν ευτυχώς πολλές βιβλιοθήκες για διάφορες λειτουργίες, οπότε δεν χρειάζεται να υλοποιήσουμε κώδικα γι’ αυτές τις λειτουργίες. Όποτε τις χρειαζόμαστε, απλά τις εισάγουμε (include) στο πηγαίο κώδικά μας.

22 Δ1-22 ΣΧΗΜΑΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΠΗΓΑΙΟΣ ΚΩΔΙΚΑΣ ΕΦΑΡΜΟΓΗΣ LIB 1LIB 2LIB 3 Include ΓΛΩΣΣΑ ΜΗΧΑΝΗΣ Μετάφραση & Συμβολομεταφραση

23 Δ1-23 Δομή του προγράμματος Το πρόγραμμα αποτελείται από: –Τη συνάρτηση main –Πιθανόν από μια ή περισσότερες άλλες συναρτήσεις –Μια ή περισσότερες καθολικές (γενικές) μεταβλητές Διαφορές από την Pascal: –κύριο πρόγραμμα, διαδικασίες και συναρτήσεις δε διαφοροποιούνται –το κύριο πρόγραμμα ονομάζεται main –οι διαδικασίες έχουν αποτέλεσμα void –όλες οι συναρτήσεις στο ίδιο επίπεδο –δεν επιτρέπονται φωλιασμένες συναρτήσεις –μόνο πέρασμα παραμέτρων ατά τιμή (call by value) –Το πέρασμα κατά αναφορά επιτυγχάνεται με τη χρήση δεικτών

24 Δ1-24 ΠΑΡΑΔΕΙΓΜΑ Ένα απλό πρόγραμμα της C: #include #include void main() { printf(“Hello World.\n”); printf(“Hello World.\n”); } Εντολή εισαγωγής βιβλιοθήκης για χρήση συναρτήσεων είσοδου/έξοδου Βιβλιοθήκη Η αρχική συνάρτηση main Η συνάρτηση βιβλιοθήκης printf που έχει ορισθεί στη βιβλιοθήκη stdio και επιτρέπει την εκτύπωση στην οθόνη (standard output) Τύπος Επιστροφής της main Εντολή Προ-επεξεργασίας

25 Δ1-25 AKOMH ENA ΠΑΡΑΔΕΙΓΜΑ Κι’άλλο ένα απλό πρόγραμμα της C με επιστροφή τιμής από τη συνάρτηση main: #include #include int main() { printf(“Hello World.\n”); printf(“Hello World.\n”); return(1); return(1); }

26 Δ1-26 ΜΕΤΑΦΡΑΣΗ ΚΑΙ ΕΝΟΠΟΙΗΣΗ ΜΕ ΤΗ ΠΑΡΟΥΣΙΑ ΒΙΒΛΙΟΘΗΚΗΣ Για να μεταφράσουμε πηγαίο κώδικα της C σε Γλώσσα Μηχανής υπό τη παρουσία βιβλιοθηκών ο compiler εκτελεί τα παρακάτω βήματα. 1.Προ-επεξεργασία: Το πηγαίο πρόγραμμα πρώτα πηγαίνει σε μία εφαρμογή (που έρχεται με τον compiler) και ονομάζεται προ- επεξεργαστής (pre-processor). Ο προ-επεξεργαστής είναι κάτι σαν επεξεργαστής κειμένου (προσθέτει,αφαιρεί, και μεταβάλει το «κείμενο» του πηγαίου προγράμματος (source code). Όλες οι εντολές που είναι να εκτελεσθούν απο τον προ-επεξεργαστή ξεκινούν με το σύμβολο #. Συγκεκριμένα η #include παίρνει το πηγάιο κώδικα της stdio.h και τον εισάγει στη θέση της εντολής #include. Ουσιαστικά μετά την προεπεξεργασία δέν υπάρχουν πλέον εντολές που ξεκινούν με #. 2.Μετάφραση και Συμβολομετάφραση. Tα βήματα αυτά παράγουν αντικειμενικό κώδικα – object code (σχεδόν γλώσσα μηχανής) 3.Εννοποίηση (linking). Το βήμα αυτό εννοποιεί αντικειμενικό κώδικα (πιθανόν απο διαφορετικά αρχεία πηγαίου κώδικα) σε ένα εκτελέσιμο αρχείο (π.χ..exe) σε καθαρή γλώσσα μηχανής.

27 Δ1-27 ΓΕΝΙΚΗ ΜΟΡΦΗ ΑΠΛΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ C directives directives main() main() { statements statements } #include #include void main() { printf(“Hello World.\n”); printf(“Hello World.\n”); }

28 Δ1-28 DIRECTIVES DIRECTIVES Είναι εντολές για τον προ-επεξεργαστή Χρησιμοποιούνται συνήθως για τις παρακάτω περιπτώσεις: –Να εισάγουν βιβλιοθήκες π.χ. #include #include #include “myBestLibrary.h” –Να ορίσουν σταθερές π.χ. #define FREEZING_POINT_CELCIUS 0.0 #define FREEZING_POINT_FARHENEIT 32.0 # –Να εισάγουν πηγαίο κώδικα ανάλογα με συγκεκριμένες συνθήκες που υπολογίζονται από τον προ-επεξεργαστή π.χ. #define DEBUG1 ……………………. ……………………. #if DEBUG #if DEBUG printf(“To print the values of %d\n”, i) printf(“To print the values of %d\n”, i) #endif #endif

29 Δ1-29ΣΥΝΑΡΤΗΣΕΙΣ Οι συναρτήσεις είναι σαν τις ρουτίνες/υπο-ρουτίνες (routines, subroutines, procedures) σε άλλες γλώσσες προγραμματισμού. Ουσιαστικά είναι τα δομικά υλικά ενός προγράμματος. Οι συναρτήσεις πρέπει το κατά το δυνατόν να παράγουν όσο το δυνατόν πιο συγκεκριμένη λειτουργια (high cohesion) καί να εξαρτώνται όσο το δυνατόν λιγότερο η μία από την άλλη (low coupling). Υπάρχουν δύο μεγάλες κατηγορίες συναρτήσεων: –Συναρτήσεις βιβλιοθήκης – library functions (είναι κομμάτι της βιβλιοθήκης) –Συναρτήσεις εφαρμογών – application functions (ορίζονται από τον προγραμματιστή) Οι συναρτήσεις της C αποτελούνται από εντολές Μία συνάρτηση μπορεί να υπολογίζει ένα αποτέλεσμα καί να το επιστρέφει στο σημείο της κλήσης (αλλά αυτό δεν είναι πάντα απαραίτητο) π.χ. void main() { int i = 0; ……… i = addOne(i) ………; } int addOne(int j) { j = j+1; return (j); } Ορισμός της συνάρτησης Το κύριο πρόγραμμα

30 Δ1-30 Η ΣΥΝΑΡΤΗΣΗ main Η συνάρτηση main είναι μία ειδική συνάρτηση που πρέπει να έχει ορισθεί σε κάθε C πρόγραμμα Η συνάρτηση main είναι η πρώτη συνάρτηση που καλείται σε ένα C πρόγραμμα. Η κλήση γίνεται αυτόματα από το λειτουργικό σύστημα όταν το πρόγραμμα αρχίζει να «τρέχει». Η συνάρτηση main μπορεί να επιστρέφει, ή να μην επιστρέφει κάποιο αποτέλεσμα

31 Δ1-31 ΕΝΤΟΛΕΣ Οι εντολές ορίζουν συγκεκριμένες λειτουργίες τις οποίες εκτελεί ένα πρόγραμμα σαν μέρος του αλγόριθμου που υλοποιεί Υπάρχουν πολλά είδη εντολών όπως οι: –Ανάθεση (assignment statement) –Εντολές συνθήκης (conditional statements) –Εντολές βρόγχου - επανάληψης (iterative statements) –Εντολές έκφρασης (expression statements) Οι εντολές τελειώνουν πάντα με υποδιαστολή (;) – semicolon – ενώ τα directives έχουν πάντα μήκος μία γραμμή

32 Δ1-32 ΣΧΟΛΙΑ Ένα καλό πρόγραμμα δεν είναι μόνο συντακτικά σωστό, γρήγορο, καί συμβατό με τις απαιτήσεις του χρήστη, αλλά και τεκμηριωμένο με σχόλια Τα σχόλια δεν μεταφράζονται από τον compiler ο οποίος τα θεωρεί σαν κενούς χαρακτήρες Τα σχόλια στη C ορίζονται ανάμεσα στά σύμβολα /* καί */ π.χ. /* this is a comment in C */ /* this is a comment in C */ Βασική αρχή είναι να έχουμε ένα ευπαρουσίαστο καί εύκολο να διαβαστεί πρόγραμμα (διευκολύνει τη συντήρησή του) π.χ. /********************************************************** /********************************************************** * Name: main.c * * Name: main.c * * Author: John Smith * * Author: John Smith * * Purpose: Translate Celcius degrees to Farheneit * * Purpose: Translate Celcius degrees to Farheneit * * Date/Version: 12/12/02 v1.1 * * Date/Version: 12/12/02 v1.1 * ************************************************************/ ************************************************************/ Το παρακάτω είναι λάθος /* Nested /* comments */ are wrong! */

33 Δ1-33 ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ (απλοί) Ακέραιοι αριθμοί intchar Καθορισμός προσήμανσης signedunsigned Καθορισμός μεγέθους shortlong Αριθμοί κινητής υποδιαστολής floatdouble

34 Δ1-34 ΠΙΝΑΚΑΣ ΑΠΛΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ char, signed char, unsigned char signed short int, unsigned short int signed int, unsigned int signed long int, unsigned long int floatdouble long double Με κόκκινο χρώμα όσα μπορούν να παραλειφθούν.

35 Δ1-35 ΜΕΤΑΤΡΟΠΗ ΤΥΠΩΝ ΚΑΤΑ ΤΗΝ ΑΝΑΘΕΣΗ Οι μετατροπές τύπων συμβαίνουν και με τον τελεστή ανάθεσης π.χ. Α=Β Η έκφραση στα δεξιά του τελεστή (=) προβιβάζεται στον τύπο της μεταβλητής στα αριστερά του τελεστή ανάθεσης Αυτό όμως μπορεί να προκαλέσει προβλήματα όπως αναφέρθηκε προηγουμένως αν η μεταβλητή είναι «χαμηλότερου» τύπου. Παράδειγμα. Εάν d είναι double, και i είναι int τότε η ανάθεση d = i; Θα προκαλέσει την μετατροπή της ακέραιας μεταβλητής i σε τύπο double ώστε η ανάθεση να επιτευχθεί. Όμως η ανάθεση i = d θα προκαλέσει τον υποβιβασμό της double μεταβλητής d σε τύπο int οπότε το δεκαδικό μέρος της d θα χαθεί.

36 Δ1-36 ΣΦΑΛΜΑΤΑ ΥΠΟΛΟΓΙΣΜΩΝ ΣΕ ΕΚΦΡΑΣΕΙΣ Σφάλματα στον υπολογισμό αριθμητικών εκφράσεων μπορούν να παρουσιασθούν λόγω –Χρήσης περιορισμένου αριθμού ψηφίων –Χρήσης τεχνικών προσέγγισης της τιμής μίας συνάρτησης ή έκφρασης αντί του άμεσου υπολογισμού της τιμής της Παράδειγμα Η πρόσθεση των αριθμών 563.8, 631.9, και όταν είμαστε περιορισμένοι σε τέσσερα ψηφία έχει σαν αποτέλεσμα 1518, και αποτέλεσμα 1517! όταν προσθέσουμε 321.6, 631.9, και (η πρόσθεση γίνεται ανά δύο αριθμούς) Η πρόσθεση των αριθμών 563.8, 631.9, και όταν είμαστε περιορισμένοι σε τέσσερα ψηφία έχει σαν αποτέλεσμα 1518, και αποτέλεσμα 1517! όταν προσθέσουμε 321.6, 631.9, και (η πρόσθεση γίνεται ανά δύο αριθμούς) Από το παράδειγμα βλέπουμε ότι η διάταξη των όρων του αθροίσματος επηρεάζει το τελικό αποτέλεσμα. Η σωστή απάντηση είναι Το αποτέλεσμα 1518 έχει απόλυτο σφάλμα 0.7, και σχετικό σφάλμα 0.7/ =

37 Δ1-37 ΑΜΕΣΟ ΚΑΙ ΣΧΕΤΙΚΟ ΣΦΑΛΜΑ Εάν ορίσουμε: Α: την σωστή τιμή μίας έκφρασης ή Α: την σωστή τιμή μίας έκφρασης ή συνάρτησης συνάρτησης Α: την προσεγγιστική τιμή Α: την προσεγγιστική τιμή Τότε: Τότε: α Α = Α – Α είναι το απόλυτο σφάλμα α Α = Α – Α είναι το απόλυτο σφάλμα ε Α = α Α /Α είναι το σχετικό σφάλμα ε Α = α Α /Α είναι το σχετικό σφάλμα

38 Δ1-38 ΑΜΕΣΗ ΜΕΤΑΤΡΟΠΗ (cast) Εκτός από τις αυτόματες μετατροπές η C επιτρέπει στον χρήστη να αλλαξει άμεσα τον τύπο μιάς μεταβλητής ή μίας έκφρασης με την χρήση του τελεστή cast. Η σύνταξη της εντολής που επιτρέπει την αλλαγή του τύπου απο τον χρήστη είναι: (Τύπος) Έκφραση όπου Τύπος είναι κάποιος από τους τύπους πυ έχουν ορισθεί σέ ένα πρόγραμμα της C και Έκφραση οποιαδήποτε έκφραση της C. Η αλλαγή του τύπου με την παραπάνω εντολή έχει την ίδια προτεραιότητα με τους άλλους μοναδιαίους τελεστές. Η συνηθέστερη χρήση του τελεστή σε αριθμητικές εκφράσεις είναι για την αποφυγή απωλειών κλασματικών μερών (π.χ. σε μια διαίρεση ακεραίων), καί την αποφυγή υποβιβασμού τύπου λόγω ανάθεσης (π.χ. (double) i = d)

39 Δ1-39 ΜΕΤΑΒΛΗΤΕΣ Οι μεταβλητές σ’ ένα πρόγραμμα επιτρέπουν την αποθήκευση δεδομένων και την προσπέλαση στη δυναμική (RAM) και στατική (files) μνήμη του Η/Υ Στη C οι μεταβλητές πρέπει: 1.Να έχουν ορισθεί σε κάποια εντολή δήλωσης, συνήθως στην αρχή ενός αρχείου πηγαίου κώδικα, ή στην αρχή μιας συνάρτησης 2.Να έχουν συγκεκριμένο τύπο 3.Να έχουν μία αρχική τιμή πριν χρησιμοποιηθούν για πρώτη φορά 4.Τα δεδομένα (τιμές) που αποθηκεύονται στη μεταβλητή πρέπει να είναι του ίδιου ή συμβατού τύπου με αυτού της μεταβλητής Γι’ αρχή θα θεωρήσουμε δύο τύπους int καί float

40 Δ1-40 ΟΝΟΜΑΤΑ ΜΕΤΑΒΛΗΤΩΝ Τα ονόματα των μεταβλητών σ΄ένα πρόγραμμα C πρέπει να αρχίζουν με γράμμα καί μπορουν να περιέχουν αλφαριθμητικούς χαρακτήρες. Επίσης δεν μπορούν να περιέχουν ειδικούς χαρακτήρες όπως #, &, * κλπ. Υπάρχουν συγκεκριμένα ονόματα τα οποία αναφέρονται σε λέξεις κλειδιά της C Τα ονόματα των μεταβλητών είναι ευαισθητα στην δομή τους (Κεφαλαίοι, μικροί χαρακτήρες) π.χ. AVariable ≠ Avariable Τα ονόματα των μεταβλητών είναι ευαισθητα στην δομή τους (Κεφαλαίοι, μικροί χαρακτήρες) π.χ. AVariable ≠ Avariable

41 Δ1-41 ΛΕΞΕΙΣ ΚΛΕΙΔΙΑ autodoubleintstruct breakelselongswitch caseenumregistertypedef charexternreturnunion constfloatshortunsigned continueforSignedvoid defaultgotosizeofvolatile doifstaticwhile Οι παραπάνω λέξεις κλειδιά δεν μπορούν να χρησιμοποιηθούν σαν ονόματα μεταβλητών του προγράμματος

42 Δ1-42 ΕΝΤΟΛΕΣ ΟΡΙΣΜΟΥ ΜΕΤΑΒΛΗΤΩΝ Για να ορίσουμε μια μεταβλητή πρέπει πρώτα να ορίσουμε τον τύπο και μετά το όνομα της μεταβλητής π.χ. int i; int i; int j = 50; /* ορισμός ακέραιας μεταβλητής * int j = 50; /* ορισμός ακέραιας μεταβλητής * * με αρχική τιμή */ * με αρχική τιμή */ Η γενική μορφή είναι τύπος τύπος Οπότε στο κύριο πρόγραμμα main η γενική μορφή είναι: type main() type main() { declarations declarations statements statements } int main() { int i = 0; i = i +1; return (i); }

43 Δ1-43 ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ int x; int x, y, z; double r; unsigned long abc; Αρχικοποίηση int x = 1; int x, y = 0, z = 2; double r = 1.87; unsigned long abc = ;

44 Δ1-44 ΣΤΑΘΕΡΕΣ(i) Ακέραιες δεκαδικές 037 οκταδικές 0x1f δεκαεξαδικές 42U42L42UL unsigned & long Κινητής υποδιαστολής δεκαδικές 2.99e8 με δύναμη του F42.0L float & long double

45 Δ1-45 ΣΤΑΘΕΡΕΣ(ii) Χαρακτήρα 'a''0''$' Ειδικοί χαρακτήρες \n αλλαγή γραμμής \' απόστροφος \\ χαρακτήρας \ (backslash) \t αλλαγή στήλης (tab) \" εισαγωγικό \0 χαρακτήρας με ASCII = 0 (null) \037 » με ASCII = 37 (οκταδικό) \x1f » με ASCII = 1f (δεκαεξαδικό)

46 Δ1-46 ΣΤΑΘΕΡΕΣ(iii) Συμβολοσειρές "abc""Hello world!\n""a\"51\"" Δηλώσεις σταθερών const int size = 10, num = 5; const double pi = ; const char newline = '\n';

47 Δ1-47 ΚΑΛΕΣ ΠΡΑΚΤΙΚΕΣ ΟΝΟΜΑΣΙΑΣ ΜΕΤΑΒΛΗΤΩΝ Χρήση μικρών χαρακτήρων (όχι κεφαλαίων) Μη χρήση μικρών και κεφαλαίων για δύο διαφορετικές μεταβλητές π.χ one καί ONE Χρήση μνημονικών ονομάτων π.χ. interestRate αντί ir Κατανοητή σύνταξη για πολύπλοκα ονόματα π.χ. interestRate, ή interest_Rate αντί interestrate

48 Δ1-48 ΕΝΤΟΛΗ ΑΝΑΘΕΣΗΣ Οι μεταβλητές λαμβάνουν τιμές με συκγεκριμένη εντολή ανάθεσης Η εντολή είναι της μορφής: Μεταβλητή = έκφραση Μεταβλητή = έκφραση όπου η έκφραση μπορεί να είναι μια σταθερή τιμή, ένας μαθηματικός τύπος, το αποτέλεσμα κλήσης μιάς συνάρτησης κλπ. όπου η έκφραση μπορεί να είναι μια σταθερή τιμή, ένας μαθηματικός τύπος, το αποτέλεσμα κλήσης μιάς συνάρτησης κλπ. Η έκφραση θα πρέπει να παράγει ένα αποτέλεσμα που να είναι συμβατό με τον τύπο της μεταβλητής

49 Δ1-49 ΠΑΡΑΔΕΙΓΜΑ (1) #include #include float main() { float height, base, area; float height, base, area; height = 10.2; height = 10.2; base = 3.6; base = 3.6; printf(“The height of the triangle is: %f\n”, height); printf(“The height of the triangle is: %f\n”, height); printf(“The base of the triangle is: %f\n”, base); printf(“The base of the triangle is: %f\n”, base); area = (height * base)/2; area = (height * base)/2; printf(“The area of the triangle is %f\n”, area); printf(“The area of the triangle is %f\n”, area); return (area); return (area);}

50 Δ1-50 ΠΑΡΑΔΕΙΓΜΑ (2) #include #include float main() { float height, base, area; float height, base, area; printf(“Enter the height of the triangle:”); printf(“Enter the height of the triangle:”); scanf(“%f”, &height); scanf(“%f”, &height); printf(“\n”); printf(“\n”); printf(“Enter the base of the triangle”); printf(“Enter the base of the triangle”); scanf(%f”, &base); scanf(%f”, &base); printf(“\n”); printf(“\n”); printf(“The height of the triangle is: %f\n”, height); printf(“The height of the triangle is: %f\n”, height); printf(“The base of the triangle is: %f\n”, base); printf(“The base of the triangle is: %f\n”, base); area = (height * base)/2; area = (height * base)/2; printf(“The area of the triangle is %f\n”, area); printf(“The area of the triangle is %f\n”, area); return (area); return (area);}

51 Δ1-51 ΠΑΡΑΔΕΙΓΜΑ (3) #include #include #define FREEZING_POINT_IN_FARHENHEIT 32 #define SCALE_FACTOR (5.0 / 9.0) float main() { float farhenheit, celcius; float farhenheit, celcius; printf(“Enter the temperature in Farhenheit:”); printf(“Enter the temperature in Farhenheit:”); scanf(“%f”, &farhenheit); scanf(“%f”, &farhenheit); celcius = (farhenheit – FREEZING_POINT_IN_FARHENHEIT) * celcius = (farhenheit – FREEZING_POINT_IN_FARHENHEIT) * SCALE_FACTOR; SCALE_FACTOR; printf(“The celcius equivalent temperature of %f is %.1f \n”, farhenheit, celcius); printf(“The celcius equivalent temperature of %f is %.1f \n”, farhenheit, celcius); return (area); return (area);}

52 Δ1-52 ΕΚΤΥΠΩΣΗ ΜΕ ΤΗΝ ΣΥΝΑΡΤΗΣΗ printf Απλοί τύποι δεδομένων –int %d –char %c –double %lf –string %s Παράδειγμα printf("%d %lf %c %s\n", 42, 1.2, 'a', "hello"); Αποτέλεσμα a hello

53 Δ1-53 ΕΙΣΑΓΩΓΗ ΔΕΔΟΜΕΝΩΝ ΜΕ ΤΗ ΣΥΝΑΡΤΗΣΗ scanf Ίδιοι κωδικοί για τους απλούς τύπους Παράδειγμα int n; double d; char c; scanf("%d", &n); scanf("%lf", &d); scanf("%c", &c);

54 Δ1-54 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑΝΝΗΣ ΜΑΪΣΤΡΟΣ ΚΩΣΤΑΣ ΚΟΝΤΟΓΙΑΝΝΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Ε.Μ.Π.

55 Δ1-55 ΠΑΡΑΔΕΙΓΜΑ #include #include void main () { int celcius; double farenheit; printf("Give the temperature (C): "); scanf("%d", &celcius); farenheit = 9.0 * celcius / ; printf(" %d degrees Celcius " "is %lf degrees Farenheit\n", "is %lf degrees Farenheit\n", celcius, farenheit); celcius, farenheit);}

56 Δ1-56 ΤΕΛΕΣΤΕΣ ΚΑΙ ΕΚΦΡΑΣΕΙΣ(i) Αριθμητικοί τελεστές +-*/%+-*/%+-*/%+-*/% Σχεσιακοί τελεστές ==!=<> = Λογικοί τελεστές && λογική σύζευξη(και) || λογική διάζευξη(ή) ! λογική άρνηση(όχι) π.χ. (x % 3 != 0) && !finished

57 Δ1-57 ΤΕΛΕΣΤΕΣ ΚΑΙ ΕΚΦΡΑΣΕΙΣ(ii) Τελεστές bit προς bit (bitwise) & σύζευξη bit(AND) | διάζευξη bit(OR) ^ αποκλειστική διάζευξη bit(XOR) ~ άρνηση(NOT) << ολίσθηση bit αριστερά >> ολίσθηση bit δεξιά Παράδειγμα (0x0101 & 0xfff0) << 2  0x0400

58 Δ1-58 ΤΕΛΕΣΤΕΣ ΚΑΙ ΕΚΦΡΑΣΕΙΣ (iii) Τελεστής συνθήκης (a >= b) ? a : b Τελεστής παράθεσης a-1, b+5 Τελεστές ανάθεσης a = b+1 a += x ισοδύναμο με a = a + x Τελεστές αύξησης και μείωσης a++a-- τιμή πριν τη μεταβολή ++a--a τιμή μετά τη μεταβολή

59 Δ1-59 EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (i) Κενή εντολή ; Εντολή ανάθεσης τιμής και εντολή έκφρασης a = b+5; a++;a--; Εντολή if if (a >= b) max = a; else max = b;

60 Δ1-60 EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (ii) Σύνθετη εντολή (block) if (a >= b) { min = b; max = a; } else { max = b; min = a; } Ορισμός νέας εμβέλειας για μεταβλητή if (x < y) { int temp = x; x = y; y = temp; } Γενικά είναι κακή επιλογή να ορίζουμε μεταβλητές με το ίδιο όνομα αλλά με διαφορετικές εμβέλειες σε ένα πρόγραμμα, διότι δημιουργεί σύγχυση στη κατανόηση του κώδικα και μειώνει τη συντηρησιμότητά του

61 Δ1-61 EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (iii) Εντολή while int i = 1, s = 0; while (i <= 10) { s = s + i; i++;} συνθήκη εντολή αληθής ψευδής while ( συνθήκη ) εντολή

62 Δ1-62 EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (iv) Εντολή do-while int i = 1, s = 0; do s += i++; while (i <= 10); συνθήκη εντολή ψευδής αληθής do εντολή while ( συνθήκη ); Εντολή do-while int i = 1, s = 0; do { i=i+1; s = s+i; } while (i <= 10);

63 Δ1-63 EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (v) Εντολή for int i, s; for (i=1, s=0; i <= 10; i++) s = s + i; for ( αρχικοποίηση ; συνθήκη ; βήμα ) εντολή συνθήκη εντολή αληθής ψευδής βήμα αρχικοποίηση

64 Δ1-64 Εντολή break int s; for (i=0, s=0; i < 10; i++) { int x; int x; scanf("%d", &x); scanf("%d", &x); s += x; s += x;} printf("Sum is: %d\n", s); EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (vi) if (x < 0) if (x < 0) break; break;

65 Δ1-65 EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (vii) Εντολή continue int s; for (i=0, s=0; i < 10; i++) { int x; int x; scanf("%d", &x); scanf("%d", &x); s += x; s += x;} printf("Sum is: %d\n", s); if (x < 0) if (x < 0) continue; continue;

67 Δ1-67 EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (ix) Ετικέτες και εντολή goto int i = 1, s = 0; loop: s += i++; s += i++; if (i < 10) if (i < 10) goto loop; goto loop; printf("The sum is %d\n", s); Η χρήση του goto δεν συνιστάται διότι δημιουργεί δυσκολία στη κατανόηση της λογικής ροής του προγράμματος και συνεπώς μειώνει τη συντηρησιμότητά του. Γενικά η χρήση του goto αποφεύγεται στο δομημένο προγραμματισμό.

68 Δ1-68 ΠΑΡΑΔΕΙΓΜΑ int a_variable; /* Ορισμός μεταβλητής γενικής εμβέλειας */ void main () /* Ορισμός κύριας συνάρτησης */ { a_function(6); /* Κλήση συνάρτησης */ a_function(6); /* Κλήση συνάρτησης */} void a_function (int x) { a_variable = another_function(x, x+1); a_variable = another_function(x, x+1);} int another_function (int x, int y) { return x * y; return x * y;} a_function(6)» Η τιμή της μεταβλητής a_variable μετά τη κλήση «a_function(6)» στη κύρια συνάρτηση main και πριν τη λήξη του προγράμματος είναι 42


Κατέβασμα ppt "Δ1-1 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑΝΝΗΣ ΜΑΪΣΤΡΟΣ ΚΩΣΤΑΣ ΚΟΝΤΟΓΙΑΝΝΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Ε.Μ.Π."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google