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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ

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


Παρουσίαση με θέμα: "ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ"— Μεταγράφημα παρουσίασης:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

33 ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ (απλοί)
Ακέραιοι αριθμοί int char Καθορισμός προσήμανσης signed unsigned Καθορισμός μεγέθους short long Αριθμοί κινητής υποδιαστολής float double

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

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

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

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

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

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

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

41 ΛΕΞΕΙΣ ΚΛΕΙΔΙΑ auto double int struct break else long switch case enum
register typedef char extern return union const float short unsigned continue for Signed void default goto sizeof volatile do if static while Οι παραπάνω λέξεις κλειδιά δεν μπορούν να χρησιμοποιηθούν σαν ονόματα μεταβλητών του προγράμματος

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

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 ΣΤΑΘΕΡΕΣ (i) Ακέραιες Κινητής υποδιαστολής 42 0 -1 δεκαδικές
δεκαδικές 037 οκταδικές 0x1f δεκαεξαδικές 42U 42L 42UL unsigned & long Κινητής υποδιαστολής δεκαδικές 2.99e8 με δύναμη του 10 42.0F 42.0L float & long double

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

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

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

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

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

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

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

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

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

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

55 ΠΑΡΑΔΕΙΓΜΑ #include <stdio.h> 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", celcius, farenheit); }

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

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

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

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

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

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

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

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

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

66 EΝΤΟΛΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΡΟΗΣ (viii)
Εντολή switch switch (ch) { case 'a': printf("alpha\n"); break; case 'b': case 'c': printf("beta or c\n"); default: printf("other\n"); }

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

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


Κατέβασμα ppt "ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ"

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


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