ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Συμβολοσειρές, Δείκτες και Παραδείγματα (Κεφάλαιο 13, KNK-2ED)

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Συμβολοσειρές, Δείκτες και Παραδείγματα (Κεφάλαιο 13, KNK-2ED)"

Transcript

1 ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Συμβολοσειρές, Δείκτες και Παραδείγματα (Κεφάλαιο 13, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Το μάθημα αυτό δομήθηκε βάση των διαλέξεων του Αναπλ. Καθηγητή Δημήτρη Ζεϊναλιπούρ Περιεχόμενο Διάλεξης 7 Συμβολοσειρές (Strings) Σταθερά (literal), Μεταβλητή (variable), Αρχικοποίηση, Ανάγνωση / Εκτύπωση Παραδείγματα: Σάρωση, Μέτρηση Κενών Χαρακ. Η Βιβλιοθήκη <String.h> Συναρτήσεις: strlen, strcpy, strcat, strcmp Υλοποίηση Συναρτήσεων Πίνακες Δεικτών (και Συμβολοσειρών) Ορίσματα Προγράμματος *argv[], argc Παραδείγματα Επεξεργασίας Εργαλεία 1

2 String Literal (or Constant) Σταθερά Συμβολοσειράς Strings είναι πίνακες χαρακτήρων στους οποίους ένας ειδικός χαρακτήρας ο χαρακτήρας null σηματοδοτεί το τέλος. Η βιβλιοθήκη C παρέχει μια συλλογή από συναρτήσεις για χρήση σε συμβολοσειρές. Σταθερά Συμβολοσειράς (String Literal): ακολουθία χαρακτήρων που εσωκλείεται από δίπλα εισαγωγικά (") και τερματίζεται αυτόματα από τον χαρακτήρα NUL ('\0'): "Candy\nIs dandy\nbut liquor\n... --Ogden Nash\n" To NUL ('\0') δεν δίνεται στον ορισμό της σταθεράς Σεβόμενοι τον κανόνα 80 στηλών κατά την εκτύπωση printf("when you come to a fork in the road, take it. \ --Yogi Berra"); // ή printf("when you come to a fork in the road, take it. " "--Yogi Berra"); Candy Is dandy But liquor Is quicker. --Ogden Nash Ο χαρακτήρας \ μπορεί να χρησιμοποιηθεί για τη ένωση δύο ή περισσότερων γραμμών ενός προγράμματος σε μία γραμμή. Όταν δύο ή περισσότερες συμβολοσειρές είναι συνεχόμενες, τότε θα τους ενωθούν σε μια. String Literal (or Constant) Σταθερά Συμβολοσειράς Όταν ένας μεταγλωττιστής C συναντά ένα αλφαριθμητικό συμβολοσειράς μήκους n σε ένα πρόγραμμα, θέτει στην άκρη n + 1 byte μνήμης για τη συμβολοσειρά. Αυτή η μνήμη θα περιέχει τους χαρακτήρες στη συμβολοσειρά, συν έναν επιπλέον χαρακτήρα τον null character για να επισημάνει το τέλος της συμβολοσειράς. Ο null character είναι ένα byte του οποίου τα bit είναι όλα μηδέν, επομένως αντιπροσωπεύεται από την ακολουθία διαφυγής \0. Εργαλεία 2

3 Συμβολοσειρά (Ο Χαρακτήρας NUL \0) String Literal (or Constant) Σταθερά Συμβολοσειράς Δεδομένου ότι μια συμβολοσειρά αποθηκεύεται ως πίνακας, το πρόγραμμα μεταγλώττισης το αντιμετωπίζει ως δείκτη τύπου char * char *p; p = "abc"; /*** ΣΩΣΤΟ ***/ To p δείχνει πάνω στον πρώτο χαρακτήρα της σταθεράς "abc". Ορθός ορισμός, εφόσον τo "abc" είναι ήδη στην μνήμη Οι συμβολοσειρές μπορούν να έχουν δείκτη: char ch; ch = "abc"[1]; Η νέα τιμή του ch θα είναι το γράμμα b. Μια συνάρτηση που μετατρέπει έναν αριθμό μεταξύ 0 και 15 στο ισοδύναμο δεκαεξαδικό ψηφίο: char digit_to_hex_char(int digit) { return " ABCDEF"[digit]; Εργαλεία 3

4 String Literal (or Constant) Σταθερά Συμβολοσειράς Η προσπάθεια τροποποίησης μιας συμβολοσειράς προκαλεί απροσδιόριστη συμπεριφορά: char *p = "abc"; *p = 'd'; /*** ΛΑΘΟΣ - Δεν επιτρέπεται να μεταβάλλεται μια σταθερά (το abc ) ***/ Σταθερά Χαρακτήρα char *p; p[1]= 'a'; /*** ΛΑΘΟΣ p δεv δεσμεύτηκε χώρος***/ Σταθερά Συμβολοσειράς & Σταθερά Χαρακτήρα Μια σταθερά συμβολοσειράς (string literal) η οποία περιέχει ένα χαρακτήρα ΔΕΝ είναι το ίδιο με μια σταθερά χαρακτήρα (character constant). "a" αναπαριστάται από ένα δείκτη σε char (τερματίζεται με NUL καταλαμβάνοντας 2 bytes). 'a' αναπαριστάται από ένα χαρακτήρα (και καταλαμβάνοντας 1 byte) Επομένως: printf("\n"); /*** ΣΩΣΤΟ ***/ printf('\n'); /*** ΛΑΘΟΣ ***/ Εργαλεία 4

5 Μεταβλητές Συμβολοσειράς (String Variables) Οποιοσδήποτε μονοδιάστατος πίνακας χαρακτήρων μπορεί να χρησιμοποιηθεί για την αποθήκευση μιας συμβολοσειράς. Μια συμβολοσειρά πρέπει να τερματιστεί από έναν μηδενικό χαρακτήρα. Δυσκολίες με αυτή την προσέγγιση: Μπορεί να είναι δύσκολο να διαπιστωθεί αν ένας πίνακας χαρακτήρων χρησιμοποιείται ως συμβολοσειρά. Οι συναρτήσεις χειρισμού συμβολοσειρών πρέπει να είναι προσεκτικοί για να αντιμετωπίσουν σωστά τον μηδενικό χαρακτήρα. Η εύρεση του μήκους μιας συμβολοσειράς απαιτεί αναζήτηση για τον μηδενικό χαρακτήρα. Μεταβλητή Συμβολοσειράς: Μια μεταβλητή που μπορεί να αναπαραστήσει μια συμβολοσειρά. Για string μήκους N, είναι ένας πίνακας N+1 θέσεων. #define STR_LEN 80 char str[str_len+1]; ΣΗΜΑΝΤΙΚΟ: Η προσθήκη 1 στο μήκος επιτρέπει χώρο για τον μηδενικό χαρακτήρα στο τέλος της συμβολοσειράς Μεταβλητές Συμβολοσειράς (String Variables) Μεταβλητή Συμβολοσειράς char date1[8] = "June 14"; Επιπλέον NUL προστίθενται από τον μεταγλωττιστή εάν υπάρχει χώρος (για μεταβλητές μόνο) char date2[9] = "June 14"; char date3[7] = "June 14"; Η δήλωση μιας μεταβλητής συμβολοσειράς μπορεί να παραλείψει το μήκος της, οπότε το πρόγραμμα μεταγλώττισης το υπολογίζει char date4[] = "June 14"; date4 date1 τερματίζεται με ΝUL '\0' Δεν υπάρχει χώρος για τον μηδενικό χαρακτήρα, οπότε ο μεταγλωττιστής δεν κάνει προσπάθεια να τον αποθηκεύσει Εργαλεία 5

6 Πίνακες χαρακτήρων vs Δείκτες χαρακτήρων Η δήλωση char date[] = "June 14"; δηλώνει την date σαν ένας πίνακα (array), Η παρόμοια δήλωση char *date = "June 14"; δηλώνει την date σαν ένα δείκτη (pointer). Χάρη στη στενή σχέση μεταξύ πινάκων και δεικτών, και οι δυο πιο πάνω δηλώσεις μπορούν να χρησιμοποιηθούν ως συμβολοσειρά. Πίνακες χαρακτήρων vs Δείκτες χαρακτήρων Ωστόσο, υπάρχουν σημαντικές διαφορές μεταξύ των δύο εκδόσεων της date. Στην έκδοση με τον πίνακα, οι χαρακτήρες που είναι αποθηκευμένοι στο date μπορεί να τροποποιηθούν. Στην έκδοση ωστόσο με τον δείκτη, date δείχνει σε μια συμβολοσειρά και δεν πρέπει να τροποποιηθεί. Στην έκδοση με τον πίνακα, η date είναι ένα όνομα πίνακα. Στην έκδοση με τον δείκτη, η date είναι μια μεταβλητή που μπορεί να δείχνει σε άλλες συμβολοσειρές. Εργαλεία 6

7 Πίνακες χαρακτήρων vs Δείκτες χαρακτήρων Η δήλωση char *p; δεν εκχωρεί χώρο για μια συμβολοσειρά. Πριν μπορέσουμε να χρησιμοποιήσουμε το p ως συμβολοσειρά, πρέπει να δείχνει σε έναν πίνακα χαρακτήρων. Μια δυνατότητα είναι να κάνετε το p να δείχνει σε μια μεταβλητή συμβολοσειρά: char str[str_len+1], *p; p = str; Μια άλλη δυνατότητα είναι να κάνετε το p να δείχνει σε μια συμβολοσειρά που έχει εκχωρηθεί δυναμικά. Πίνακες χαρακτήρων vs Δείκτες χαρακτήρων Η χρήση μιας μη αρχικοποιημένης μεταβλητής δείκτη ως συμβολοσειράς είναι ένα σοβαρό σφάλμα. Π.χ. για να δημιουργήσω το "abc": char *p; p[0] = 'a'; /*** WRONG ***/ p[1] = 'b'; /*** WRONG ***/ p[2] = 'c'; /*** WRONG ***/ p[3] = '\0'; /*** WRONG ***/ Δεδομένου πως η p δεν έχει αρχικοποιηθεί, αυτό προκαλεί απροσδιόριστη συμπεριφορά. Εργαλεία 7

8 Μεταβλητές Συμβολοσειράς (Αρχικοποίηση) literal Συνιστώνται αυτοί οι ορισμοί (declarations) const char *msg="hello"; ή const char msg[]="hello"; αλλά υπάρχουν και άλλοι τρόποι variable Σωστό αλλά άκομψο char msg[6]; msg[0] = 'H'; msg[1] = 'e'; msg[2] = 'l'; msg[3] = 'l'; msg[4] = 'o'; msg[5] = '\0'; Σωστό αλλά άκομψο char msg[ ]={'H','e','l','l','o','\0'; Σωστό αλλά άκομψο char msg[6]={'h','e','l','l','o','\0'; Σωστό αλλά σπάταλο char msg[40]="hello"; Λάθος (ξεχνάμε το \0) char msg[ ]={'H','e','l','l','o'; Λάθος (το \0 δεν προστίθεται έλλειψη χώρου) char msg[5]={'h','e','l','l','o','\0'; Λάθος (δεν δεσμεύεται χώρος) ΕΠΙΚΙΝΔΥΝΟ (συχνό λάθος) char *p; p[0] = 'a'; /*** ΛΑΘΟΣ ***/ Μεταβλητές Συμβολοσειράς (Αρχικοποίηση) Ας δούμε πως μοιάζουν εικονικά οι ακόλουθοι ορισμοί SIZE=10 char msg[10]="hello"; Το? είναι απροσδιόριστος χαρακτήρας (μάλλον NUL,εάν μερίμνησε ο μεταγλωττιστής, αλλά μην υποθέσετε οτιδήποτε) SIZE=6 char msg[ ]="Hello"; H E L L O \0 Εργαλεία 8

9 Μεταβλητές Συμβολοσειράς (Αρχικοποίηση) Ας δούμε πως μοιάζουν εικονικά οι ακόλουθοι ορισμοί char c = 'H'; Ο χαρακτήρας H βρίσκεται κάπου στην μνήμη char c[ ]="H"; char c[ ]= H ; Το String H βρίσκεται κάπου στην μνήμη char c="h"; ΛΑΘΟΣ στην μεταγλώττιση Ανάγνωση/Εκτύπωση String Δεδομένου ότι μια συμβολοσειρά αποθηκεύεται ως πίνακας, το πρόγραμμα μεταγλώττισης το αντιμετωπίζει ως δείκτη τύπου char *. Τόσο η printf όσο και η scanf αναμένει μια τιμή τύπουchar * ως το πρώτο τους στοιχείο. Η ακόλουθη κλήση της printf μεταβιβάζει τη διεύθυνση του "abc" (ένα δείκτη στο σημείο όπου είναι αποθηκευμένο το γράμμα a στη μνήμη): printf("abc"); Εργαλεία 9

10 Εκτύπωση String Η εκτύπωση μιας συμβολοσειράς είναι εύκολη χρησιμοποιώντας είτε το printf ή το puts. Το %s επιτρέπει στην printf να εκτυπώσει μια συμβολοσειρά: char str[] = "Are we having fun yet?"; printf("%s\n", str); Η έξοδος θα είναι Are we having fun yet? Η printf εκτυπώνει ένα ένα τους χαρακτήρες μιας συμβολοσειράς μέχρι να συναντήσει έναν μηδενικό χαρακτήρα. Για να εκτυπώσετε μέρος μιας συμβολοσειράς, χρησιμοποιήστε την %.ps, όπου p είναι ο αριθμός των χαρακτήρων που θα εμφανιστούν. Η δήλωση printf("%.6s\n", str); θα εκτυπώσει Are we Εκτύπωση String Το %ms θα εμφανίσει μια συμβολοσειρά σε ένα πεδίο μεγέθους m. Εάν η συμβολοσειρά έχει λιγότερους από m χαρακτήρες, θα στοιζιστεί στα δεξιά μέσα στο πεδίο. Αριστερή στοίχιση θα επιτευχθεί χρησιμοποιώντας το m. Τα m και p μπορούν να χρησιμοποιηθούν σε συνδυασμό. Το %m.ps εκτυπώνει τους πρώτούς p χαρακτήρες μιας συμβολοσειράς σε ένα πεδίο μεγέθους m. H printf δεν είναι η μόνη λειτουργία που μπορεί να γράψει συμβολοσειρές. Η βιβλιοθήκη C παρέχει επίσης την puts: puts(str); Αφού εκτυπώσει μια συμβολοσειρά, η puts γράφει έναν χαρακτήρα νέας γραμμής. Εργαλεία 10

11 Ανάγνωση String Η ανάγνωση μιας συμβολοσειράς είναι λίγο δυσκολότερη, επειδή η είσοδος μπορεί να είναι μεγαλύτερη από τη μεταβλητή συμβολοσειράς στην οποία αποθηκεύεται. Για να διαβάσετε μια συμβολοσειρά σε ένα μόνο βήμα, μπορούμε να χρησιμοποιήσουμε είτε την scanf ή την gets. Το %s επιτρέπει στην scanf να διαβάσει μια συμβολοσειρά σε έναν πίνακα χαρακτήρων: scanf("%s", str); Το str αντιμετωπίζεται ως δείκτης, επομένως δεν χρειάζεται να τοποθετήσετε το & πριν το str. Ανάγνωση String Όταν καλείται η scanf, παρακάμπτει το κενό διάστημα, στη συνέχεια διαβάζει τους χαρακτήρες και τους αποθηκεύει στο str μέχρι να συναντήσει ξανά ένα χαρακτήρα κενού διαστήματος. Η scanf αποθηκεύει πάντα έναν μηδενικό χαρακτήρα στο τέλος της συμβολοσειράς. Για εισαγωγή συμβολοσειράς με κενά χρησιμοποιείται η gets Δεν παραλείψτε το κενό διάστημα πριν ξεκινήσετε την ανάγνωση εισόδου. Διαβάζει μέχρι να βρει ένα χαρακτήρα νέας γραμμής. Απορρίπτει τον χαρακτήρα νέας γραμμής αντί να τον αποθηκεύει και χρησιμοποιεί τον κενό χαρακτήρας. Εργαλεία 11

12 Ανάγνωση String Εξετάστε το ακόλουθο τμήμα προγράμματος: char sentence[sent_len+1]; printf("enter a sentence:\n"); scanf("%s", sentence); Ας υποθέσουμε ότι μετά την προτροπή Enter a sentence: ο χρήστης γράφει To C, or not to C: that is the question. Η scanf θα αποθηκεύσει τη συμβολοσειρά "To" στη sentence. Ας υποθέσουμε ότι αντικαταστήσαμε την scanf με gets: gets(sentence); Όταν ο χρήστης γράψει ό,τι και πιο πάνω, η gets θα αποθηκεύσει την συμβολοσειρά " To C, or not to C: that is the question." στην sentence. Ανάγνωση String Καθώς διαβάζουν χαρακτήρες σε έναν πίνακα, οι scanf και gets δεν έχει τρόπο να το ανιχνεύσουν όταν είναι πλήρης. Κατά συνέπεια, μπορούν να αποθηκεύουν χαρακτήρες μετά το τέλος του πίνακα, προκαλώντας απροσδιόριστη συμπεριφορά. Η scanf μπορούν να γίνει ασφαλής με τη χρήση του %ns αντί του %s. n είναι ένας ακέραιος που υποδεικνύει το μέγιστο αριθμό χαρακτήρων που θα αποθηκευτούν. Η gets είναι μη ασφαλές; η fgets είναι μια πολύ καλύτερη επιλογή. Εργαλεία 12

13 Παράδειγμα Σάρωση Συμβολοσειρών Γράψετε μια ασφαλή συνάρτηση σάρωσης εισόδου στη γλώσσα C, η οποία να διαβάζει το περιεχόμενο της εισόδου σε μεταβλητή πίνακα str με τις εξής συνθήκες: (1) Δεν διαγράφει τους white space χαρακτήρες (2) Σταματά μόλις διαβάσει τον πρώτο χαρακτήρα γραμμής \n (που δεν ανήκει στο str) ή εάν έχει διαβάσει n χαρακτήρες (3) Αγνοεί οποιουσδήποτε χαρακτήρες μετά το \n (4) Επιστρέφει τον αριθμό των χαρακτήρων που αναγνώστηκαν Πρότυπο Συνάρτησης: int read_line(char str[], int n); Παράδειγμα Σάρωση Συμβολοσειρών int read_line(char str[], int n) { int ch, i = 0; while ((ch = getchar())!= '\n') { if (i < n) { str[i] = ch; i++; str[i] = '\0'; /* terminates string */ return i; /* # of chars stored */ Τυπικές λειτουργίες, όπως η scanf και gets θέτει αυτόματα έναν μηδενικό χαρακτήρα στο τέλος μιας συμβολοσειράς εισόδου. Αν γράφουμε τη δική μας λειτουργία εισόδου, πρέπει να αναλάβουμε εμείς αυτή την ευθύνη. Το ch έχει τύπο int παρά char εφόσον getchar επιστρέφει ακέραια τιμή int. Εργαλεία 13

14 Παράδειγμα Μέτρηση Κενών σε Συμβολοσειρά Γράψετε μια συναρτηση στη γλώσσα C, η οποία μετρά και επιστρέφει τον αριθμό των spaces σε μια συμβολοσειρά εισόδου str Πρότυπο Συνάρτησης: int count_spaces(const char s[]) int count_spaces(const char s[]) { int count = 0, i; for (i = 0; s[i]!= '\0'; i++){ if (s[i] == ' ') { count++; return count; int count_spaces(const char *s){ int count = 0; for (; *s!= '\0'; s++) { if (*s == ' ') { count++; return count; Θα μπορούσαν να αντιστραφούν Λύση με αριθμητική δεικτών Παράδειγμα Μέτρηση Κενών σε Συμβολοσειρά Ερωτήσεις που τίθενται από την count_spaces: Είναι προτιμότερο να χρησιμοποιείτε λειτουργίες πίνακα ή δείκτη για να έχετε πρόσβαση στους χαρακτήρες σε μια συμβολοσειρά; Μπορούμε να χρησιμοποιήσουμε και τα δύο. Παραδοσιακά, οι προγραμματιστές C τείνουν προς τη χρήση λειτουργιών δείκτη. Πρέπει να δηλωθεί μια παράμετρος συμβολοσειράς ως πίνακας ή ως δείκτης; Δεν υπάρχει διαφορά μεταξύ των δύο. Η μορφή της παραμέτρου (s[] or *s) επηρεάζει το τι μπορεί να δοθεί ως είσοδος; Όχι. Εργαλεία 14

15 C String Library Η Βιβλιοθήκη <string.h> Εφόσον τα Strings είναι πίνακες χαρακτήρων στη C, αυτά ΔΕΝ μπορούν να αντιγραφούν, συγκριθούν, κτλ με απλούς τελεστές (π.χ., =, ==, κτλ) που μάθαμε για τους άλλους τύπους. Συνηθισμένο λάθος: char str1[10], str2[10]; str1 = "abc"; /*** ΛΑΘΟΣ μεταγλώττισης ***/ str2 = str1; /*** ΛΑΘΟΣ μεταγλώττισης ***/ typedef unsigned long int ADDR; printf("%lx %lx", (ADDR)str1, (ADDR)str2); 7ffffa0f 7ffffa0e if (str1 == str2) /*** OXI αναμενόμενο αποτέλεσμα, συγκρίνει τις διευθύνσεις των str1,str2 επιστρέφοντας FALSE 0) ***/ Ορθό (πρόκειται για ορισμό declaration όχι ανάθεση) char str1[10] = "abc"; // ΟΚ Ορθό: if (str1[0] == str2[0]) // ΟΚ C String Library Η Βιβλιοθήκη <string.h> Η Βιβλιοθήκη <string.h> περιέχει ένα μεγάλο σύνολο λειτουργιών επεξεργασίας συμβολοσειρών. #include <string.h>(strcpy,strcat,strlen,strcmp,..) Αντιγραφή (Copy) του string s2 στο s1 (return: διεύθυνση του s1) char *strcpy(char *s1, const char *s2); Ασφαλής Αντιγραφή του str2 στο str1 (εάν s2 μεγαλύτερο s1): strncpy(str1, str2, sizeof(str1) - 1); str1[sizeof(str1)-1] = '\0 ; Εύρεση Μήκους (Length) συμβολοσειράς (δεν μετρά το '\0') size_t strlen(const char *s); // sizeof περιλαμβάνει \0 και πέρα (π.χ., εάν s[10] = "abc") size_t είναι ένα typedef όνομα της C για unsigned integer τύπους. Επικόλληση (Append) S2 στο S1: Εάν str1[100] δίνει 100 char *strcat(char *s1, const char *s2); δίνει 3 ΠΡΟΣΟΧΗ: char str1[6] = "abc"; strcat(str1, "def"); /*** ΕΠΙΚΙΝΔΥΝΟ ***/ ΑΣΦΑΛΗΣ: strncat(str1, str2, sizeof(str1) - strlen(str1) - 1); Διαθέσιμος χώρος στο str1 Εργαλεία 15

16 Υλοποίηση Συναρτήσεων H Συνάρτηση strcpy Για εξάσκηση, θα υλοποιήσουμε τώρα κάποιες από τις συναρτήσεις της string.h. Το βιβλίο περιέχει διαφορετικές εκδόσεις των υλοποιήσεων για κάθε μια από τις συναρτήσεις. H συνάρτηση char *strcpy(char *s1, const char *s2) αντιγράφει τη συμβολοσειρά που δείχνει το s2 στον πίνακα που δείχνει η s1. π.χ. strcpy(str2, "abcd"); /* str2 now contains "abcd" */ Μια κλήση που αντιγράφει τα περιεχόμενα του str2 στο str1: strcpy(str1, str2); /* str1 now contains "abcd" */ Υλοποίηση Συναρτήσεων H Συνάρτηση strcpy Κατά την κλήση της strcpy(str1, str2), η strcpy Δεν έχει τρόπο να ελέγξει ότι η συμβολοσειρά str2 θα χωρέσει στον πίνακα που δείχνει η str1. Εάν δεν υπάρχει χώρος, εμφανίζεται απροσδιόριστη συμπεριφορά. Η χρήση της συνάρτηση strncpy είναι πιο ασφαλής, αλλά πιο αργή. Η strncpy έχει μια επιπλέον είσοδο που περιορίζει τον αριθμό των χαρακτήρων που θα αντιγραφούν. π.χ.: strncpy(str1, str2, sizeof(str1)); Μια πιο σωστή κλήση της strncpy είναι η ακόλουθη: strncpy(str1, str2, sizeof(str1) - 1); str1[sizeof(str1)-1] = '\0'; Η δεύτερη δήλωση εγγυάται ότι η str1 τερματίζει πάντα με NUL. Εργαλεία 16

17 Υλοποίηση Συναρτήσεων H Συνάρτηση strlen H συνάρτηση strlen(s1) μετρά το μήκος μιας συμβολοσειράς (χωρίς το NUL) int len; len = strlen("abc"); /* len is now 3 */ len = strlen(""); /* len is now 0 */ strcpy(str1, "abc"); len = strlen(str1); /* len is now 3 */ Έκδοση Α size_t mystrlen(const char *s) { size_t n; for (n = 0; *s!= '\0'; s++) n++; return n; Ίδιο με (*s!= 0) ή (*s) // 1 TRUE Έκδοση Β size_t mystrlen(const char *s) { size_t n = 0; while (*s!= '\0') { s++; n++; return n; Υλοποίηση Συναρτήσεων H Συνάρτηση strcat H συνάρτηση strcat(s1, s2) αντιγράφει το s2 στο τέλος του s1, π.χ., int main() { char ma[10]="hello"; char mb[10]="cat"; strcat(ma,mb); return 0; Πρίν s1 s2 Αλγόριθμος Βρές τον χαρακτήρα NUL στο τέλος του s1 και κάνε τον δείκτη p να δείχνει στο σημείο αυτό. Αντίγραψε ένα ένα τους χαρακτήρες από το s2 ξεκινώντας από το σημείο που δείχνει το p. Δεν μελετούμε ακόμη το θέμα της υπερχείλισης του s1. s2 s1 Μετά Εργαλεία 17

18 Υλοποίηση Συναρτήσεων H Συνάρτηση strcat Η χρήση της συνάρτηση strncat είναι πιο ασφαλής, αλλά πιο αργή. Μια κλήση της strncat: strncat(str1, str2, sizeof(str1) - strlen(str1) - 1); Υλοποίηση Συναρτήσεων H Συνάρτηση strcat void mystrcat(char *s1, const char *s2) { if ((s1==null) (s2==null)) return; while (*s1!= '\0') { // εύρεση NUL s1++; while (*s2!= '\0') { // Αντιγραφή s2 -> s1 *s1 = *s2; s1++; s2++; s1 *s1 = '\0'; s1 return; s2 Α) Για λόγους ευκολίας : printf("%s\n", strcat(s1, s2)); B) Θα μπορούσαμε να δεσμεύουμε νέο s1 (με χώρο s1+s2) εάν θέλαμε για να αποφύγουμε το πρόβλημα της υπερχείλισης του s1. Κάτι τέτοιο θα δούμε στη Διάλεξη 9 (με malloc). Εργαλεία 18

19 Υλοποίηση Συναρτήσεων H Συνάρτηση strcat Μια πιο συμπαγής έκδοση της strcat: void strcat(char *s1, const char *s2) { if ((s1==null) (s2==null)) return; while (*s1!= '\0') { s1++; while (*s1 = *s2) { // ανάθεση, όχι σύγκριση s1++; s2++; return; s1 s2 Όταν το s2 φτάσει το '\0' τότε γίνεται *s1=0, δηλ., (*s1=0) γίνεται 0 ( FALSE ) και διακόπτεται το loop Όλοι οι χαρακτήρες εκτός από τον null χαρακτήρα επιστρέφουν True. s1 Υλοποίηση Συναρτήσεων H Συνάρτηση strcmp Γράψετε συνάρτηση που συγκρίνει τα αλφαριθμητικά s1 και s2 και επιστρέφει 1: αν το s1 είναι μεγαλύτερο λεξικογραφικά 0: αν είναι ίσα (ή το ένα είναι υπο συμβολοσειρά του άλλου) και 1: αν το s2 είναι μεγαλύτερο λεξικογραφικά s1 > Επιστρέφει 1 s2 Εργαλεία 19

20 Υλοποίηση Συναρτήσεων H Συνάρτηση strcmp Η strcmp θεωρεί την s1 να είναι μικρότερη από την s2 εάν πληρείται μία από τις ακόλουθες προϋποθέσεις: Οι πρώτοι i χαρακτήρες του s1 και s2 ταιριάζουν, αλλά ο (i+1)ος χαρακτήρας του s1 είναι μικρότερος από τον (i+1)ο χαρακτήρα του s2. Όλοι οι χαρακτήρες του s1 ταιριάζουν με του s2, αλλά ο s1 πίνακας είναι μικρότερος από τον s2. Η αξία του κάθε χαρακτήρα φαίνεται στο πίνακα ASCII A Z, a z, and 0 9 have consecutive codes. All upper case letters are less than all lower case letters. Digits are less than letters. Spaces are less than all printing characters. Υλοποίηση Συναρτήσεων H Συνάρτηση strcmp Εκδοχή Α (P.J. Plauger, Standard C Library): int mystrcmp(const char *s1, const char *s2) { int i; for(i=0; s1[i] == s2[i]; i++) { if(s1[i] == 0) // Εάν φτάσαμε τον '\0' χαρακτήρα return 0; // χαρακτήρας του s1 δεν είναι ίσος με τον αντίστοιχο του s2 return (s1[i] < s2[i])? -1 : 1; s1 > s2 Εργαλεία 20

21 Υλοποίηση Συναρτήσεων H Συνάρτηση strcmp Β) Εκδοχή Β (μόνο δείκτες) int mystrcmp(const char *s1, const char *s2) { if ((s1==null) && (s2!=null)) return -1; else if ((s1!=null) && (s2==null)) return 1; else if ((s1==null) && (s2==null)) return 0; for(; *s1 == *s2; ++s1, ++s2) if(*s1 == 0) return 0; return (*s1 < *s2)? -1 : 1; Arrays of Strings Πίνακες Συμβολοσειρών Υπάρχουν πολλοί τρόποι να αποθηκεύσουμε ένα πίνακα από strings. Μια προσέγγιση είναι να χρησιμοποιήσουμε ένα 2 d πίνακα χαρακτήρων (ένα string ανά γραμμή): char planets[][8] = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto" ; Σπάταλη Προσέγγιση! Εργαλεία 21

22 Arrays of Pointers Πίνακες Δεικτών Μια καλύτερη προσέγγιση είναι η δημιουργία ενός ακανόνιστου πίνακα (ragged array), των οποίων οι γραμμές έχουν διαφορετικά μεγέθη. Κάτι τέτοιο μπορεί να επιτευχθεί με ένα πίνακα δεικτών (array of pointers) : char *planets[] = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune","Pluto" ; Αποδοτική Προσέγγιση! Arrays of Pointers Πίνακες Δεικτών Π.χ. Ένας βρόγχος που αναζητά στην planets συμβολοσειρές που ξεκινούν με το γράμμα M: for (i = 0; i < 9; i++) if (planets[i][0] == 'M') printf("%s begins with M\n", planets[i]); Εργαλεία 22

23 Πολυδιάστατοι Πίνακες vs. Πίνακες Δεικτών Έστω int a[10][20] int *b[10]; Ποια η διαφορά ανάμεσα στις δυο δηλώσεις; ο a είναι πραγματικά δισδιάστατος πίνακας: κατά τον ορισμό του δεσμεύθηκαν 200 συνεχόμενες θέσεις. Κατά τον ορισμό του b κατανέμεται χώρος για 10 δείκτες. Απόδοση αρχικών τιμών πρέπει να γίνει ρητά είτε στατικά ή με κώδικα (malloc() που θα δούμε αργότερα) Πλεονέκτημα ενός πίνακα με δείκτες είναι ότι κάθε δείκτης μπορεί να δείχνει σε γραμμή με διαφορετικό μήκος Παράδειγμα Έστω char *name[] = {"Illegal month", "Jan", "Feb", "March" char aname[] [15] = {"Illegal month", "Jan", "Feb, "March" Γραφικά στο επίπεδο της μνήμης έχουμε name: Illegal month\0 aname: Jan\0 Feb\0 Μarch\0 Illegal month\0 Jan\0 Feb\0 March\0 Oι χαρακτήρες κάθε συμβολοσειράς τοποθετούνται κάπου στη μνήμη και στο name[i] τοποθετείται δείκτης σ αυτούς τους χαρακτήρες. Εργαλεία 23

24 Command Line Arguments Ορίσματα Προγράμματος Μέχρι τώρα ορίζαμε τη συνάρτηση main με παράμετρο void θέλοντας να δείξουμε ότι η συνάρτηση main δε δέχεται ορίσματα. int main(void) {... Αυτό όμως δε σημαίνει ότι δεν μπορούμε να περάσουμε ορίσματα. Τα ορίσματα όμως που μπορεί να πάρει η main είναι καθορισμένα και είναι τα εξής: int main(int argc, char *argv[]) {... Tα ορίσματα περνούνται στο πρόγραμμα από τη γραμμή εντολών τη στιγμή που αρχίζει η εκτέλεσή του ορίσματα στη γραμμή εκτέλεσης. Command Line Arguments Ορίσματα Προγράμματος Το πρώτο όρισμα argc, το οποίο είναι τύπου ακέραιος, είναι ο αριθμός των ορισμάτων της γραμμής διαταγών, με τα οποία έχει κληθεί το πρόγραμμα συμπεριλαμβανομένου και του ονόματος του εκτελέσιμου αρχείου). Το δεύτερο όρισμα argv είναι δείκτης για έναν πίνακα συμβολοσειρών ο οποίος περιέχει τα ορίσματα. Κατά σύμβαση (πίνακας δεικτών) argv[0] είναι το όνομα με το οποίο κλήθηκε το πρόγραμμα. argv[1],, argv[argc 1], είναι τα υπόλοιπα ορίσματα με την σειρά που δόθηκαν στη γραμμή εντολής. argv[argc] περιέχει το μηδενικό δείκτη (κενή συμβολοσειρά: ). Εργαλεία 24

25 Command Line Arguments Ορίσματα Προγράμματος Παράδειγμα: Έστω ένα πρόγραμμα C το οποίο έχει τη μορφή: int main(int argc, char *argv[]) { Θεωρείστε επίσης ότι το εκτελέσιμο αρχείο του παραπάνω προγράμματος έχει ονομαστεί prog. Τότε κατά την κλήση του prog υπό τη μορφή: $ prog opt1 opt2 opt3 έχουμε την εξής ανάθεση τιμών στα ορίσματα της main: argc = 4 argv[0] = prog argv[1] = opt1 argv[2] = opt2 argv[3] = opt3 argv[4] = NULL Παράδειγμα Ζητούμενο: πρόγραμμα που κατά την κλήση του με n oρίσματα (συμπεριλαμβανομένου και του εκτελέσιμου αρχείου) αντηχεί τα n-1 τελευταία στην οθόνη. Για παράδειγμα αν το πρόγραμμα αυτό λέγεται echo, τότε μία κλήση της μορφής: $ echo Hello world! θα εμφάνιζε στην έξοδο $ Hello world! Οι τυπικές παράμετροι της συνάρτησης main θα έχουν τιμές: argc = 3 argv[0] = echo argv[1] = Hello argv[2] = world! argv[3] = Εργαλεία 25

26 Παράδειγμα #include <stdio.h> int main (int argc, char *argv[]){ int i; for(i = 1; i < argc; i++) printf("%s%s", argv[i], (i < argc - 1)? " " : ""); printf("\n"); return 0; Εργαλεία 26

Διάλεξη 7: Συμβολοσειρές, Δείκτες και Παραδείγματα

Διάλεξη 7: Συμβολοσειρές, Δείκτες και Παραδείγματα Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 7: Συμβολοσειρές, Δείκτες και Παραδείγματα (Κεφάλαιο 13, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 4: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής θέματα: Πίνακες Δεικτών, Παραδείγματα, Πολυδιάστατοι πίνακες Πέρασμα παραμέτρων σε προγράμματα C Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες:

Διαβάστε περισσότερα

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

Προγραμματισμό για ΗΜΥ ΕΠΛ 34: Εισαγωγή στον Προγραμματισμό για ΗΜΥ Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 12 Πίνακες εικτών (Pointers Arrays) Θέματα ιάλεξης Στην ενότητα

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 2:Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)- Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγικές Έννοιες σε Strings(Αρχικοποίηση, Ανάγνωση & Εκτύπωση) Πίνακες από Strings

Διαβάστε περισσότερα

είκτες και Πίνακες (2)

είκτες και Πίνακες (2) είκτες και Πίνακες (2) Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: Πολυδιάστατοι πίνακες Πέρασµα παραµέτρων σε προγράµµατα C ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-1 Πίνακες εικτών Πίνακας δεικτών είναι

Διαβάστε περισσότερα

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*%

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 14 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 4: Δείκτες (pointers) και Πίνακες Δεικτών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Πίνακες Δεικτών - Πολυδιάστατοι πίνακες - Πέρασμα παραμέτρων σε προγράμματα

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

Διαβάστε περισσότερα

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr 1 Μονοδιάστατοι Πίνακες (tables) Μια συλλογή μεταβλητών ίδιου τύπου οι οποίες είναι αποθηκευμένες

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Αλφαριθμητικά θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) Κεφάλαιο 9.1-9.2 Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) ( ιάλεξη 19) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1) Strings στη C Ένα string είναι µία ακολουθία αλφαριθµητικών χαρακτήρων, σηµείων στίξης κτλ. Π.χ.

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ Επανάληψη για τις Τελικές εξετάσεις (Διάλεξη 24) Εισαγωγή Το μάθημα EPL032 έχει ως βασικό στόχο την επίλυση προβλημάτων πληροφορικής με την χρήση της γλώσσας προγραμματισμού C. Επομένως πρέπει: Nα κατανοήσετε

Διαβάστε περισσότερα

Διάλεξη 8η: Αλφαριθμητικά (strings)

Διάλεξη 8η: Αλφαριθμητικά (strings) Διάλεξη 8η: Αλφαριθμητικά (strings) Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) strings CS100, 2016-2017

Διαβάστε περισσότερα

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα Αλφαριθμητικά Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 10 η Αλφαριθμητικά Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Αλφαριθμητικά Αλφαριθμητικά (strings) Ένα αλφαριθμητικό είναι μια ακολουθία αλφαβητικών

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 3: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αριθμητική Δεικτών Δείκτες και Πίνακες Παραδείγματα Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διαβάστε περισσότερα

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

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τον ορισμό, τη δήλωση και τη χρήση των χαρακτήρων, συνεπώς και των αλφαριθμητικών, της Γλώσσας

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 8: Πίνακες, Αλφαριθμητικά Πίνακες Ο πίνακας είναι μια ειδική δομή για την αποθήκευση μιας σειράς από δεδομένα του ίδιου τύπου. Η δήλωση ενός πίνακα γίνεται όπως για μια

Διαβάστε περισσότερα

Προγραµµατισµός Ι Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι 1 Νικόλαος Δ.

Προγραµµατισµός Ι Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι 1 Νικόλαος Δ. Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι 1 Αλφαριθµητικά - Εισαγωγή Ένα αλφαριθµητικό (string) είναι µία

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C Τεχνολογία και Προγραμματισμός Υπολογιστών Η γλώσσα προγραμματισμού C Με μια ματιά Τύπος Πίνακα Μεταβλητές με ενδείκτη Αλφαριθμητικά - Πίνακες Δισδιάστατος Πολυδιάστατος Πίνακας 2 2 Τύπος Πίνακα Σύνθετος

Διαβάστε περισσότερα

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 8 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Συµβολοσειρές - Strings

Συµβολοσειρές - Strings Συµβολοσειρές - Strings 1 Συµβολοσειρέςστην C/C++ 2 Χαρακτήρες 'a', 'z', '0', Χαρακτήρες σαν int 'z' επίσης αναπαριστά την ακεραία τιµή του χαρακτήρα z Strings-Συµβολοσειρές Σειρές από χαρακτήρες σαν µια

Διαβάστε περισσότερα

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες Στόχοι και αντικείμενο ενότητας Ο τύπος του Πίνακα (βλ. ενότητα #2α) Ορισμός και αρχικοποίηση Αποθήκευση πινάκων στη μνήμη Πολυδιάστατοι πίνακες #6. Πίνακες και Δείκτες Ο τύπος του Δείκτη Η έννοια του

Διαβάστε περισσότερα

Επανάληψη για τις Τελικές εξετάσεις

Επανάληψη για τις Τελικές εξετάσεις Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού

Διαβάστε περισσότερα

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 10 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

Προγραμματισμός Ι. Θεματική ενότητα 6: Πίνακες αλφαριθμητικά

Προγραμματισμός Ι. Θεματική ενότητα 6: Πίνακες αλφαριθμητικά Θεματική ενότητα 6: Πίνακες αλφαριθμητικά Πίνακες Ο πίνακας είναι μία συλλογή μεταβλητών ίδιου τύπου, οι οποίες είναι αποθηκευμένες σε διαδοχικές θέσεις μνήμης. Χρησιμοποιείται για την αποθήκευση και διαχείριση

Διαβάστε περισσότερα

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

Αρχές Προγραμματισμού Αρχές Προγραμματισμού https://eclass.upatras.gr/courses/ee806/index.php Βασίλης Παλιουράς paliuras@ece.upatras.gr Άσκηση Να γραφεί πρόγραμμα που να αθροίζει δύο διανύσματα Ν στοιχείων σε ISO C90 χρησιμοποιώντας

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Ένα Ακόμα Παράδειγμα #include int main(int argc, char* argv[]) { } putchar('h'); putchar('e'); putchar('l');

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009 Προγραµµατισµός Ι (ΗΥ10) ιάλεξη : Πίνακες, Αλφαριθµητικά Πίνακες Ο πίνακας είναι µια ειδική δοµή για την αποθήκευση µιας σειράς από δεδοµένα του ίδιου τύπου. Η δήλωσηενός πίνακα γίνεται όπως για µια κανονική

Διαβάστε περισσότερα

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19) Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες (Διάλεξη 19) Πολυδιάστατοι πίνακες Μέχρι τώρα μιλούσαμε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες, π.χ. int id[5] = {1029,1132,1031,9991,1513;

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Βασικοί τύποι της C 2 Όνομα Τύπος / Κωδικοποίηση Μέγεθος (bytes) char Χαρακτήρας 1 int Ακέραιος 2 ή 4 (*) float Πραγματικός

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Είσοδος/Έξοδος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Είσοδος/Έξοδος Μέχρι τώρα όποτε θέλαμε να διαβάσουμε χρησιμοποιούσαμε πάντα

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι πίνακες στη C (μονοδιάστατοι -συμβολοσειρές) Γενικά για τους πίνακες Ο πίνακας είναι μια αρκετά διαδεδομένη δομή που προσφέρεται από σχεδόν κάθε γλώσσα προγραμματισμού. Πρόκειται

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

Διαβάστε περισσότερα

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Χpήσιµες Βιβλιοθήκες της γλώσσας C Χpήσιµες Βιβλιοθήκες της γλώσσας C Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Συναρτήσεις Επεξεργασίας Συµβολοσειρών (strings) που Παρέχονται από τη Βιβλιοθήκη Συναρτήσεις Ελέγχου

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Αλφαριθμητικά και Αρχεία Αλφαριθμητικά (strings) Αρχεία (files) τα βασικά στοιχεία Αλφαριθμητικά της C Συμβολοσειρές (= ακολουθίες

Διαβάστε περισσότερα

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

Συμβολοσειρές Ορίσματα στη main()

Συμβολοσειρές Ορίσματα στη main() Εργαστήριο 7 ο Συμβολοσειρές Ορίσματα στη main() Σκοπός του παρόντος εργαστηρίου είναι η εξοικείωση μας με τις συμβολοσειρές στην ANSI C καθώς και με την χρήση ορισμάτων στην συνάρτηση main(). Θεωρία Συμβολοσειρά

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Επεξεργασία Αρχείων Κειµένου Επεξεργασία Αρχείων Κειµένου Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αρχεία Κειµένου Γενικά Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Αρχεία Γενικά

Διαβάστε περισσότερα

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 9 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής Στο εργαστήριο αυτό θα δούμε πώς ορίζονται και πώς χρησιμοποιούνται οι συμβολοσειρές στην C. Επίσης, θα μελετήσουμε κάποιες από τις συναρτήσεις

Διαβάστε περισσότερα

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 12 Πολυδιάστατοι Πίνακες Πολυδιάστατοι πίνακες

Διαβάστε περισσότερα

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

Προγραµµατισµός Ι (ΗΥ120) Προγραµµατισµός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών ΑΝΑΚΟΙΝΩΣΕΙΣ 2 Από την επόµενη εβδοµάδα αλλάζουν οι ώρες των εργαστηρίων. Οι νέες ώρες θα ανακοινωθούν σήµερα στη

Διαβάστε περισσότερα

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II (Κεφάλαια 25.2, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Οκτώβριος 2018 1/28 1 (implicit) μετατροπές 2 (Functions) 3 (Pointers) 4 (Arrays) 2/28 (implicit)

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 11: Δείκτες & Πίνακες Δείκτες και πίνακες Μια μεταβλητή «μονοδιάστατος πίνακας από αντικείμενα τύπου Τ» μπορεί να θεωρηθεί ως (είναι συντακτικά συμβατή με) μια μεταβλητή

Διαβάστε περισσότερα

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 19. Αλφαριθμητικά II. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 19. Αλφαριθμητικά II. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων 19. Αλφαριθμητικά II Ιωάννθσ Κατάκθσ Αλφαρικμθτικά ςτθ C Ζνα string είναι μία ακολουκία αλφαρικμθτικϊν χαρακτήρων, ςθμείων ςτίξθσ κτλ. Π.χ. Hello How are you?

Διαβάστε περισσότερα

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής Στο εργαστήριο αυτό θα δούμε πώς ορίζονται και πώς χρησιμοποιούνται οι συμβολοσειρές στην C. Επίσης, θα μελετήσουμε κάποιες από τις συναρτήσεις

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Δείκτες (pointers) και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Αριθμητική Δεικτών - Δείκτες και Πίνακες - Παραδείγματα Διδάσκων: Παναγιώτης

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 3 η Είσοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης Γλώσσες Προγραμματισμού Εργαστήριο 2ο Τύποι Δεδομένων - Είσοδος / Έξοδος Εργαστήριο 2ο Περίγραμμα Εργαστηριακής Άσκησης Εργαστήριο 2ο...1 Θεωρία εργαστηρίου...2 Τύποι δεδομένων...2 Η συνάρτηση printf()...3

Διαβάστε περισσότερα

Διάλεξη 6: Δείκτες και Πίνακες

Διάλεξη 6: Δείκτες και Πίνακες Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 6: Δείκτες και Πίνακες (Κεφάλαιο 12, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 6-1 Περιεχόμενο

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Βασικοί τύποι της C 2 Όνομα Τύπος / Κωδικοποίηση Μέγεθος (bytes) char Χαρακτήρας 1 int Ακέραιος 2 ή 4 (*) float Πραγματικός

Διαβάστε περισσότερα

Εισαγωγή στον δομημένο προγραμματισμό

Εισαγωγή στον δομημένο προγραμματισμό Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στον δομημένο προγραμματισμό Ενότητα 6 η : Αλφαριθμητικά Αν. καθηγητής Στεργίου Κώστας e-mail: kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής και

Διαβάστε περισσότερα

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

Προγραμματισμό για ΗΜΥ ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 3 Εισαγωγή στην C Θέματα ιάλεξης Σύνταξη και Σημασιολογία

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

Διαβάστε περισσότερα

Βαθμός Σχόλια. lab6 PASS PASS. - Πολύ καλή δουλειά, αλλά προσπάθησε να κάνεις την άσκηση χρησιµοποιώντας συναρτήσεις από το string.

Βαθμός Σχόλια. lab6 PASS PASS. - Πολύ καλή δουλειά, αλλά προσπάθησε να κάνεις την άσκηση χρησιµοποιώντας συναρτήσεις από το string. Α. Μ. Βαθμός Σχόλια 1183 1194 1238 1239 1240 1241 1242 1243 - Πολύ καλή δουλειά κατά τα άλλα, µπράβο. - Πολύ καλή δουλειά, αλλά προσπάθησε να κάνεις την άσκηση χρησιµοποιώντας συναρτήσεις από το string.h

Διαβάστε περισσότερα

char name[5]; /* define a string of characters */

char name[5]; /* define a string of characters */ Συµβολοσειρές (Strings) Συµβολοσειρά (string) είναι µια σειρά αλφαριθµητικών χαρακτήρων (γενικά εκτυπώσιµων συµβόλων ASCII). Όταν λέµε σειρά εννοούµε διαδοχικές θέσεις µνήµης που µπορούν να αντιµετωπισθούν

Διαβάστε περισσότερα

ιαφάνειες παρουσίασης #6 (β)

ιαφάνειες παρουσίασης #6 (β) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

Διαβάστε περισσότερα

Ενδεικτική περιγραφή μαθήματος

Ενδεικτική περιγραφή μαθήματος ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Προγραμματισμός Η/Υ Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή: Εισαγωγή στον προγραμματισμό, γλώσσες προγραμματισμού, μεταγλωτιστές.

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ❶ Προετοιµασία για το 1 ο Εργαστήριο

Διαβάστε περισσότερα

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Ενότητα 6: Πίνακες και Δείκτες

Προγραμματισμός Η/Υ. Ενότητα 6: Πίνακες και Δείκτες Προγραμματισμός Η/Υ Ενότητα 6: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Κατανόηση της έννοιας του πίνακα

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση της C είκτες Πίνακες

Διαβάστε περισσότερα

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( ) ΣΥΜΒΟΛΟΣΕΙΡΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Ο τύπος string Μετατροπή από και προς τον τύπο string Βασικές μέθοδοι Χρήση Ελληνικών Συναρτήσεις C εκτύπωσης και ανάγνωσης Τελευταία

Διαβάστε περισσότερα

Διάλεξη 5: Δείκτες και Συναρτήσεις

Διάλεξη 5: Δείκτες και Συναρτήσεις Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο

Διαβάστε περισσότερα

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Α Β Γ static; printf(%c\n, putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf(*); ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2016 (1/2/2016) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Πολυδιάστατοι πίνακες Μέχρι τώρα µιλούσαµε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες,

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp)

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp) Συναρτήσεις πρότυπης βιβλιοθήκης Στο πρώτο μέρος δίνονται, με αλφαβητική σειρά, μερικές από τις πιο συνηθισμένες συναρτήσεις βιβλιοθήκης που συνοδεύουν τους σύγχρονους μεταγλωττιστές της C. Κάτω από το

Διαβάστε περισσότερα

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED)

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο 17.1-17.4, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε

Διαβάστε περισσότερα

Αλφαριθμητικά, πίνακες και δείκτες

Αλφαριθμητικά, πίνακες και δείκτες Αλφαριθμητικά, πίνακες και δείκτες Τα αλφαριθμητικά ως πίνακες Ένα αλφαριθμητικό (string) αναπαρίσταται εσωτερικά ως ένας πίνακας χαρακτήρων που τερματίζεται από τον ειδικό χαρακτήρα NULL ('\0') 1000 1001

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα