Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο



Σχετικά έγγραφα
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στον Προγραμματισμό

Δομημένος Προγραμματισμός

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Εισαγωγή στον Προγραμματισμό

Μεθόδων Επίλυσης Προβλημάτων

Ανάπτυξη και Σχεδίαση Λογισμικού

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Δομημένος Προγραμματισμός

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 18η: Διαχείρηση Αρχείων

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Προγραμματισμός Ι (ΗΥ120)

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

Προγραμματισμό για ΗΜΥ

Προγραμματισμός Ι (ΗΥ120)

Επεξεργασία Αρχείων Κειµένου

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Ανάπτυξη και Σχεδίαση Λογισμικού

Δομημένος Προγραμματισμός (ΤΛ1006)

scanf() scanf() stdin scanf() printf() int float double %lf float

Δομημένος Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Ι (ΗΥ120)

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στον Προγραμματισμό

Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

Διαδικασιακός Προγραμματισμός

Η γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Διαδικασιακός Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

12. Συναρτήσεις (Μέρος ΙI)

Προγραμματισμός Ι. Πολλαπλά Αρχεία. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Μεθόδων Επίλυσης Προβλημάτων

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Η/Υ (ΤΛ2007 )

Η γλώσσα προγραμματισμού C

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Προγραμματισμός Η/Υ (ΤΛ2007 )

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Μεθόδων Επίλυσης Προβλημάτων

Εργαστήριο 9: Αρχεία

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Ι (ΗΥ120)

Βασικές Αρχές Προγραμματισμού

Διαδικασιακός Προγραμματισμός

Μεθόδων Επίλυσης Προβλημάτων

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμό για ΗΜΥ

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

Η γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Η βασική συνάρτηση προγράμματος main()

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

Ηβασικήσυνάρτηση προγράμματος main()

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Transcript:

Προγραμματισμός Ι Προχωρημένα Θέματα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ανακατεύθυνση Εισόδου/Εξόδου Συνήθως η τυπική είσοδος ενός προγράμματος (stdin) προέρχεται από το πληκτρολόγιο. Αντίστοιχα η τυπική έξοδος (stdout) και η τυπική έξοδος λάθους (stderr) είναι συνήθως η οθόνη. Τα διάφορα λειτουργικά συστήματα μας επιτρέπουν να ανακατευθύνουμε την είσοδο και την έξοδο. Μπορούμε για παράδειγμα να ανακατευθύνουμε την τυπική έξοδο σε ένα αρχείο ή να χρησιμοποιήσουμε ένα αρχείο ως τυπική είσοδο. Οι λεπτομέρειες εξαρτώνται από το λειτουργικό σύστημα. Χαροκόπειο Πανεπιστήμιο 2/19

Ανακατεύθυνση Εισόδου Έστω ένα πρόγραμμα sum που διαβάζει από την τυπική είσοδο ακεραίους μέχρι να συναντήσει EOF και τυπώνει στην τυπική έξοδο το άθροισμα των αριθμών. Αντί να δώσουμε είσοδο στον πρόγραμμα μέσω του πληκτρολογίου μπορούμε να φτιάξουμε ένα αρχείο input στο οποίο να αποθηκεύσουμε τους αριθμούς. Στην συνέχεια μπορούμε να εκτελέσουμε το πρόγραμμα ως: $ sum < input Το παραπάνω παράδειγμα δείχνει την εντολή σε ένα περιβάλλον Unix (σε συστήματα Unix το $ είναι η προτροπή γραμμής εντολής). Χαροκόπειο Πανεπιστήμιο 3/19

Ανακατεύθυνση Εισόδου $ sum < input Σε περιβάλλον DOS (ή στα σύγχρονα windows όπου με cmd.exe προσομοιώνουμε περιβάλλον γραμμής εντολών DOS) η ανακατεύθυνηση εισόδου λειτουργεί με τον ίδιο τρόπο. Χαροκόπειο Πανεπιστήμιο 4/19

Διοχέτευση piping Διοχέτευση είναι ανακατεύθυνση της τυπικής εξόδου ενός προγράμματος στην τυπική είσοδο ενός άλλου προγράμματος. Αν υποθέσουμε πως το πρόγραμμα random παράγει μια σειρά τυχαίων αριθμών, τότε γράφοντας $ random sum μπορούμε να υπολογίσουμε το άθροισμα αυτών των αριθμών. Η διοχέτευση μπορεί να συνεχιστεί και σε τρίτο πρόγραμμα. Χαροκόπειο Πανεπιστήμιο 5/19

Ανακατεύθυνση Εξόδου Για να ανακατευθύνουμε την τυπική έξοδο προς ένα αρχείο με όνομα output μπορούμε να γράψουμε (είτε σε περιβάλλον Unix είτε DOS) $ sum > output Τώρα το πρόγραμμα ζητάει τους αριθμούς από το πληκτρολόγιο και θα γράψει την έξοδο του (το άθροισμα) στον αρχείο output. Το μέγεθος του αρχείου αυτού μηδενίζεται πριν την χρήση, άμα υπάρχει ήδη. Χαροκόπειο Πανεπιστήμιο 6/19

Προσάρτηση Εξόδου Για να προσαρτηθεί η έξοδος στο τέλος ενός ήδη υπάρχοντος αρχείου μπορούμε να χρησιμοποιήσουμε το σύμβολο προσάρτησης εξόδου (>>). $ sum >> output Χαροκόπειο Πανεπιστήμιο 7/19

Πολλαπλή Χρήση Μπορούμε να χρησιμοποιήσουμε τις ανακατευθύνσεις ταυτόχρονα. Έστω το αρχείο input 2 6 1 3 Τότε χρησιμοποιώντας τα προγράμματα cat (τυπώνει ένα αρχείο) και sort (ταξινομεί την είσοδο) $ cat input sort -n > output πέρνουμε το αρχείο output 1 2 3 6 Χαροκόπειο Πανεπιστήμιο 8/19

Λίστες Ορισμάτων Μεταβαλλόμενου Μήκους Η συνάρτηση printf() που χρησιμοποιούμε τόσο καιρό μπορεί να πάρει ένα μεταβαλλόμενο μήκος παραμέτρων. π.χ printf ( "Hello world!\n" ) ; ή printf ( "i = %d!\n", i ) ; ή printf ( "i = %d, f = %f!\n", i, f ) ; Χαροκόπειο Πανεπιστήμιο 9/19

Λίστες Ορισμάτων Μεταβαλλόμενου Μήκους Η συνάρτηση printf() ορίζεται ως εξής: int printf ( const char *format,... ) ; Τα αποσιωπητικά (... ) δηλώνουν ότι η συνάρτηση δέχεται ένα μεταβαλλόμενο πλήθος ορισμάτων οποιαδήποτε τύπου. Τα αποσιωπητικά πρέπει να τοποθετούνται πάντοτε στο τέλος της λίστας παραμέτρων. Πρέπει να υπάρχει τουλάχιστον μια παράμετρος που δεν είναι αποσιωπητικά (...). Χαροκόπειο Πανεπιστήμιο 10/19

Λίστες Ορισμάτων Μεταβαλλόμενου Μήκους stdarg.h Οι μακροεντολές και οι ορισμοί του αρχείου επικεφαλίδας stdarg.h παρέχουν τις δυνατότητες που απαιτούνται για την δόμηση συναρτήσεων με λίστες ορισμάτων μεταβαλλόμενου μήκους. Τύποι va_list - τύπος για πρόσβαση στα ορίσματα Μακροεντολές va_start - αρχίζει την πρόσβαση στις παραμέτρους va_arg - διαβάζει την τρέχουσα παράμετρο και προχωράει στο επόμενο va_end - ελευθερώνει ένα va_list va_copy - αντιγραφή δεδομένων ενός va_list σε άλλο Χαροκόπειο Πανεπιστήμιο 11/19

Λίστες Ορισμάτων Μεταβαλλόμενου Μήκους Παράδειγμα 1 #include <stdio. h> 2 #include <stdarg. h> 3 4 double average ( int i,... ) { 5 double total = 0. 0 ; 6 int j ; 7 8 va_list ap ; 9 va_start (ap, i ) ; 10 11 for ( j = 1 ; j <= i ; j++) 12 total += va_arg (ap, double ) ; 13 14 va_end (ap ) ; 15 return total / i ; 16 } 17 18 main ( ) { 19 double w = 1. 0, x = 2. 0, y = 3. 0 ; 20 printf ( "%lf\n", average ( 3, w, x, y ) ) ; 21 } Χαροκόπειο Πανεπιστήμιο 12/19

Τερματισμός Προγράμματος με exit και atexit Μέσω της βιβλιοθήκης γενικών βοηθημάτων (stdlib.h) μπορούμε να τερματίσουμε ένα πρόγραμμα, με διαφορετικό τρόπο από την συμβατική επιστροφή από την συνάρτηση main. Η συνάρτηση exit συνήθως χρησιμοποιείται για να τερματίσει ένα πρόγραμμα όταν ανιχνευτεί ένα σφάλμα, π.χ στην είσοδο ή αν ένα απαραίτητο αρχείο δεν μπορεί να ανοιχθεί. Χαροκόπειο Πανεπιστήμιο 13/19

Τερματισμός Προγράμματος με exit και atexit Μέσω της βιβλιοθήκης γενικών βοηθημάτων (stdlib.h) μπορούμε να τερματίσουμε ένα πρόγραμμα, με διαφορετικό τρόπο από την συμβατική επιστροφή από την συνάρτηση main. Η συνάρτηση atexit δεσμεύει μια συνάρτηση στο πρόγραμμα να καλείται με τον επιτυχή τερματισμό του -- δηλ., είτε όταν το πρόγραμμα τερματίζεται φτάνοντας στο τέλος της main, είτε όταν εμπλακεί η exit. Χαροκόπειο Πανεπιστήμιο 13/19

Τερματισμός Προγράμματος με exit και atexit Η συνάρτηση atexit φαίνεται παρακάτω: int atexit ( void ( * FUNCTION ) ( void ) ) ; Η παράμετρος είναι μια συνάρτηση χωρίς παραμέτρους. Η συνάρτηση atexit επιστρέφει 0 εαν επιτύχει και διάφορο του μηδενός σε περίπτωση αποτυχίας. Οι συναρτήσεις που δηλώνονται μέσω της συνάρτησης atexit καλούνται σε αντίστροφη σειρά από εκείνη της δέσμευσης τους. Χαροκόπειο Πανεπιστήμιο 14/19

Τερματισμός Προγράμματος με exit και atexit void exit ( int STATUS ) ; Πέρνει παραμέτρους τις δύο ακέραιες σταθερές: EXIT_SUCCESS EXIT_FAILURE Χαροκόπειο Πανεπιστήμιο 15/19

Παράδειγμα Τερματισμού 1 #include <stdio. h> 2 #include < s t d l i b. h> 3 4 void bye ( void ) { 5 puts ( "Goodbye..." ) ; 6 } 7 8 int main ( void ) { 9 atexit (bye ) ; 10 exit (EXIT_SUCCESS ) ; 11 } Χαροκόπειο Πανεπιστήμιο 16/19

register Η δεσμευμένη λέξη register λέει στον μεταγλωττιστή να αποθηκεύσει μια μεταβλητή σε ένα καταχωρητή (CPU register) εάν είναι δυνατό. 1 #include <stdio. h> 2 3 main ( ) { 4 register int i ; 5 6 for ( i = 0 ; i < 100; i++) 7 printf ( "%4d", i ) ; 8 } Ο λόγος χρήσης της δεσμευμένης λέξης register είναι η βελτιστοποίηση της ταχύτητας αφού οι καταχωρητές του επεξεργαστή είναι πιο κοντά στον επεξεργαστή και άρα ταχύτεροι από την μνήμη. Χαροκόπειο Πανεπιστήμιο 17/19

register Η δεσμευμένη λέξη register λέει στον μεταγλωττιστή να αποθηκεύσει μια μεταβλητή σε ένα καταχωρητή (CPU register) εάν είναι δυνατό. Ο λόγος χρήσης της δεσμευμένης λέξης register είναι η βελτιστοποίηση της ταχύτητας αφού οι καταχωρητές του επεξεργαστή είναι πιο κοντά στον επεξεργαστή και άρα ταχύτεροι από την μνήμη. Οι σύγχρονοι μεταγλωττιστές τρέχουν πολύπλοκους αλγορίθμους και υπολογίζουν καλύτερα από τον άνθρωπο ποιες μεταβλητές πρέπει να είναι σε καταχωρητές. Καλύτερα λοιπόν να μην χρησιμοποιούμε καθόλου αυτή την δυνατότητα της γλώσσας. Χαροκόπειο Πανεπιστήμιο 18/19

volatile Το προσδιοριστικό τύπου volatile είναι ουσιαστικά το αντίθετο από το προσδιοριστικό τύπου const. #include <stdio. h> main ( ) { volatile int i ; } / * code here * / Δηλώνει πως μια μεταβλητή μπορεί να αλλάξει με τελείως απρόβλεπτο τρόπο (για παράδειγμα μέσω interrupts ή μέσω κάποιου παράλληλου προγράμματος, κ.τ.λ). Κάθε χρήση της μεταβλητής θα ξαναδιαβάσει τα δεδομένα από την μνήμη αντί να χρησιμοποιήσει για παράδειγμα ένα αντίγραφο της μεταβλητής από κάποιον καταχωρητή. Χαροκόπειο Πανεπιστήμιο 19/19