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

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

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

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

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

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

Μεταβλητές τύπου χαρακτήρα

Σημειώσεις για πρόοδο στο εργαστήριο

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

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

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

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

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

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

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

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

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

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

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

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

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

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΕΞΕΤΑΣΗ IOYNIOY 2018 ΘΕΜΑΤΑ Α ΟΝΟΜΑΤΕΠΩΝΥΜΟ:... ΑΕΜ: ΕΞΑΜΗΝΟ:

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

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

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

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

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

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

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

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

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

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Συμβολοσειρές. 1 Συμβολοσειρές. 6 Απριλίου 2014

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει

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

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

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

Προγραμματισμός I (Θ)

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

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

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

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

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

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

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

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

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

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

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

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

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

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

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

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

Προγραμματισμός I (Θ)

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

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

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

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

5ο σετ σημειώσεων - Δείκτες

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

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

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

Τύποι Δεδομένων Είσοδος/Έξοδος

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Προγραμματισμός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Transcript:

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τον ορισμό, τη δήλωση και τη χρήση των χαρακτήρων, συνεπώς και των αλφαριθμητικών, της Γλώσσας Προγραμματισμού C. Έχοντας αποκτήσει γνώση της χρησιμότητας των πινάκων αλλά και των δεικτών στην C, η εργαστηριακή αυτή άσκηση έχει σαν σκοπό να κατανοηθούν βασικές συναρτήσεις χειρισμού αλφαριθμητικών (gets, puts, strlen, strcmp) αλλά και η συγγραφή προγραμμάτων που εξυπηρετούν την τροποποίηση τους ή/και την εξόρυξη χρήσιμων πληροφοριών από αυτά. 1. Χρήση χαρακτήρων και αλφαριθμητικών στη C 1.1 Ο Τύπος Δεδομένων char Ομοίως με τους άλλους τύπους μεταβλητών που έχουν αναφερθεί στα προηγούμενα εργαστήρια, ο τύπος char περιλαμβάνει σταθερές και μεταβλητές. 1.1.1 Σταθερές Τύπου char Μια σταθερά τύπου char είναι ένας χαρακτήρας που εσωκλείεται σε μονά εισαγωγικά (π.χ. a, x, ^ ) και ουσιαστικά αντιπροσωπεύει έναν αριθμό, όπως αυτός καθορίζεται από το σύστημα ACSII. Η παρουσία επομένως τέτοιων χαρακτήρων εντός αριθμητικών παραστάσεων δεν αποτελεί συντακτικό ή λογικό λάθος για τα δεδομένα της C. Ακολουθεί κατατοπιστικό παράδειγμα. main () printf(" o xarakthras %c antistoixei ston arithmo %d\n", 'P', 'P' ); printf(" o xarakthras %c antistoixei ston arithmo %d\n", 'p', 'p' ); printf(" o xarakthras %c antistoixei ston arithmo %d\n", 'b', 'b' ); printf(" h parastash b + p - 187 isodynamei me ton arithmo %d\n", 'b' + 'p' - 187 ); return 0; 1/6

1.1.2 Μεταβλητές Τύπου char Μια μεταβλητή τύπου char δεσμεύει 1 byte στην μνήμη του συστήματος μας. Αντίστοιχα με τις σταθερές που προηγήθηκαν στην παραπάνω υποπαράγραφο, ο ASCII κωδικός του εκάστοτε χαρακτήρα αποθηκεύεται στην αντίστοιχη μεταβλητή. Αρκεί φυσικά να έχει προηγηθεί η σωστή δήλωση στο πεδίο ορισμού μεταβλητών. Ακολουθεί κατάλληλο παράδειγμα με τη δήλωση μεταβλητών τύπου char και αριθμητικές πράξεις με αυτές: main () int x, y; char c1 = 'a', c2 = 'A'; printf(" c1 + c2 = %d\n", c1 + c2 ); printf(" c1 - c2 = %d\n", c1 - c2 ); printf(" c1 * 2 + c2 / 3 = %d\n", c1 * 2 + c2 / 3 ); return 0; 1.2 Ανάγνωση / Εμφάνιση Χαρακτήρων Για την εξυπηρέτηση της εισόδου από το πληκτρολόγιο και της εξόδου μέσω της οθόνης ενός και μόνο χαρκτήρα κάθε φορά, χρησιμοποιούνται οι συναρτήσεις getch() και putch(). Η μεν πρώτη περιμένει να πληκτρολογηθεί ένας χαρακτήρας και επιστρέφει τον ASCII κωδικό αυτού, χωρίς να πατηθεί το <Enter>, ενώ η δεύτερη εμφανίζει στην οθόνη τον χαρακτήρα που έχει αποθηκευτεί σε μία μεταβλητή char ή αν δοθεί σαν όρισμα εισόδου ένας ακέραιος, τον χαρακτήρα που αντιστοιχεί σε αυτόν. Παρατηρήστε στο επόμενο παράδειγμα πως δεν εισάγεται αυτόματα κάποιος χαρακτήρα διαφυγής. Αντιθέτως, τα αποτελέσματα της putch τυπώνονται στο σημείο που είναι τοποθετημένος ο κέρσορας. #include <conio.h> char c; printf("dose enan xarakthra: \n"); c = getch(); putch(c); putch('\n'); printf("the ASCII code of character %c is %d \n", c, c ); printf("\n"); putch(99); putch(23); putch(67); printf("\n"); 2/6

1.3 Ιδιότητες Αλφαριθμητικών Ως αλφαριθμητικό (character strings) θα θεωρούμε στη Γλώσσα Προγραμματισμού C κάθε σύνολο χαρακτήρων που βρίσκεται εντός διπλών εισαγωγικών (π.χ. cied power, F16,, Am12rt! ). Ορισμένοι παραπλήσιοι ορισμοί είναι οι εξής: συμβολοσειρά, σύνολο χαρακτήρων ή σειρά χαρακτήρων και απλούστερα από την αγγλική ορολογία strings. Μία πολύ σημαντική ιδιότητα, ιδιαίτερα κατά τη χρήση των pointers με τα αλφαριθμητικά, είναι η αποθήκευση του κάθε χαρακτήρα του εκάστοτε αλφαριθμητικού σε συνεχόμενες θέσεις μνήμης. Η αρχική θέση δεν μας αφορά μιας και αποτελεί τυχαίο γεγονός αλλά ο μεταγλωττιστής της C εισάγει τον χαρακτήρα \0 (null) στο τέλος κάθε αλφαριθμητικού. Κατά την αποθήκευση λοιπόν των αλφαριθμητικών, δεσμεύεται ένα σύνολο συνεχόμενων θέσεων μνήμης. Επειδή όμως κάθε παράσταση στη C αναπαρίσταται από μία και μόνο τιμή, έτσι και τα αλφαριθμητικά θα πρέπει να αντιστοιχηθούν με μία μονοσήμαντη τιμή. Για την εξυπηρέτηση αυτού του σκοπού, η διεύθυνση του πρώτου χαρακτήρα του εκάστοτε αλφαριθμητικού λειτουργεί ως η τιμή που αντιστοιχίζεται σε ολόκληρο το αλφαριθμητικό. Αυτό το γεγονός φυσικά μπορεί να οδηγήσει σε φαινομενικά περίεργα αποτελέσματα, όπως η σύγκριση δύο ολόιδιων αλφαριθμητικών: abc == abc. Η προηγούμενη λογική συνθήκη επιστρέφει False, μιας και το κάθε ένα από αυτά τα αλφαριθμητικά έχει αποθηκευτεί σε διαφορετική θέση μνήμης. 1.4 Χειρισμός Αλφαριθμητικών μέσω Πινάκων Γνωρίζοντας τόσο το σημείο έναρξης ενός αλφαριθμητικού (διεύθυνση πρώτου στοιχείου, αλλά και η τιμή ολόκληρου του αλφαριθμητικού) όσο και το τελευταίο χαρακτήρα αυτού (αναζητώντας απλά τον χαρακτήρα \0 ) μπορούμε να επεξεργαστούμε ποικιλοτρόπως οποιαδήποτε σειρά χαρακτήρων. Φυσικά αυτές οι διαδικασίες προϋποθέτουν την μεταβίβαση του αλφαριθμητικό σε μία μεταβλητή. Επειδή στη C δεν υπάρχει κάποιος τύπος μεταβλητής για σύνολα χαρακτήρων, παρά μόνο για μεμονωμένους χαρακτήρες, η διαδικασία αποθήκευσης ενός αλφαριθμητικού εξυπηρετείται μέσω των μονοδιάστατων πινάκων χαρακτήρων. Επομένως, ορισμένα παραδείγματα αρχικοποίησης αλφαριθμητικών είναι τα εξής: char score[20]; char password[10] = J2F_bong ; Προσοχή στο γεγονός πως απαιτείται να δηλώσουμε τουλάχιστον μία θέση περισσότερη από το πλήθος των χαρακτήρων του αλφαριθμητικού που σκοπεύουμε να εισάγουμε, μιας και τοποθετείται αυτόματα από τον μεταγλωττιστή στην τελευταία θέση ο χαρακτήρας null. Πιο συγκεκριμένα, η είσοδος αλφαριθμητικών πραγματοποιείται με τη συνάρτηση gets() ενώ η εμφάνιση με την puts(). Η μεν πρώτη αναμένει την πληκτρολόγηση ενός συνόλου χαρακτήρων από το χρήστη και με το πάτημα της εντολής <Enter> αποθηκεύει σειριακά τους χαρακτήρες που δόθηκαν ξεκινώντας από τη διεύθυνση που ορίζει το όρισμα της. Αντίστοιχα, η δεύτερη κατά σειρά συνάρτηση είναι αρμόδια για την εμφάνιση ενός αλφαριθμητικού στην οθόνη μας. Κατά την ολοκλήρωση της εκτέλεσης αυτής της εντολής τοποθετείται αυτόματα ο χαρακτήρας διαφυγής που επιτρέπει την 3/6

αλλαγής γραμμής. Επιπλέον, κατά την επιτυχή εκτέλεση της puts() επιστρέφεται η τιμή 0 ενώ μία τυχαία τιμή διάφορη του μηδενός στην αντίθετη περίπτωση. Εναλλακτικά, μία μεταβλητή τύπου δείκτη μπορεί επίσης να υποστηρίξει την αποθήκευση ενός αλφαριθμητικού, μιας και η ίδια δείχνει σε μία συγκεκριμένη διεύθυνση, ότι ακριβώς δηλαδή προσφέρει και η πρώτη θέση ενός μονοδιάστατου πίνακα. Ακολουθούν κατατοπιστικά παραδείγματα: #include <conio.h> char msg[20], *words; char *t; printf("give a phrase: \n"); t = gets(msg); putch('\n'); printf("1) the specific place id of phrase %s is %p \n", msg, msg ); printf("2) the gets function also returns %p\n", t); puts(""); words = "alternative way of defining a string"; puts(words); /* αφαίρεση κενών από ένα τυχαίο αλφαριθμητικό που εισάγει ο χρήστης και μέτρηση των συνολικών κενών */ #include <stdlib.h> #include <math.h> char lex[40]; int i=0,j,c=0; printf("dose mia frash:"); gets(lex); 4/6

while (lex[i]!='\0') if(lex[i]==' ') j=i; while(lex[j]!='\0') lex[j]=lex[j+1]; j++; i++; c++; i--; printf(" %d) meta thn afairesh tou %dou kenou h frash s einai: %s \n", c, c, lex); puts(lex); printf("afairethhkan %d kena\n",c); 1.5 Χρήσιμες Συναρτήσεις για Χειρισμό Αλφαριθμητικών Ακολουθεί ένα συνοπτικό παράδειγμα χρήσης των 5 βασικών συναρτήσεων για το χειρισμό αλφαριθμητικών που προσφέρονται έτοιμες μέσω της C (strlen, strcmp, strcpy, strcat, strstr). Κατά σειρά, η κάθε μία από αυτές πραγματοποιεί την εξής λειτουργία: επιστρέφει έναν ακέραιο που ισούται με το μήκος του εξεταζόμενου αλφαριθμητικού, επιστρέφει έναν ακέραιο από τους -1, 0 και 1 ανάλογα με το αν το πρώτο εκ των δύο συγκρινόμενων αλφαριθμητικών είναι μικρότερο, ίσο ή μεγαλύτερο αλφαβητικά, αντιγραφή του δεύτερου αλφαριθμητικού στο πρώτο, προσθήκη ενός αντιγράφου του δεύτερου αλφαριθμητικού στο τέλος του πρώτου και επιστροφή του δείκτη που βρέθηκε το δεύτερο αλφαριθμητικό εντός του πρώτου εκτός αν δε βρεθεί, οπότε επιστρέφει ο χαρακτήρας null. Ακολουθεί ενδεικτικό παράδειγμα: #include <stdlib.h> #include <string.h> char *w1, *w2, *w, words[20] = " a simple ", *where; int length, k; 5/6

w1 = "biggest"; w2 = "smallest"; length = strlen(w1); printf(" the word %s has length %d \n", w1, length); k = strcmp(w1,w2); printf("the result of strcmp between %s and %s is %d \n", w1, w2, k); w = strcpy(words,"exercise"); printf("the result of strcpy is %s and the value of w is %d\n", words, w ); w = strcat(words,"exercise"); printf("the result of strcat is %s and the value of w is %d\n", words, w ); where = strstr(words,"cise"); printf("the result of strstr is %d\n", where ); return 0; 2. ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ 1. Να γράψετε κώδικα σε C που υλοποιεί κάθε μία από τις 5 συναρτήσεις strlen, strcmp, strcpy, strcat, strstr. 2. Να γράψετε κώδικα σε C που διαβάζει χαρακτήρες από το χρήστη μέχρις ότου να πατηθεί ο χαρακτήρας E ή το άθροισμα των ASCII κωδικών των εισαγόμενων χαρακτήρων ξεπεράσει την τιμή 1000. 3. Να γράψετε κώδικα σε C που υλοποιεί τις εξής λειτουργίες: διαβάζει έναν χαρακτήρα από τον χρήστη και εμφανίζει αν είναι πεζός λατινικός, κεφαλαίος λατινικός ή οτιδήποτε άλλο, έπειτα να τροποποιηθεί το πρόγραμμα ώστε να εκτελεί την παραπάνω διαδικασία 5 φορές, να κρατηθεί ο χαρακτήρας της κάθε επανάληψης σε έναν μονοδιάστατο πίνακα 4. Να γράψετε κώδικα σε C που διαβάζει έναν κωδικό και τον δέχεται μόνο όταν το μήκος του είναι ίσο με 8 και ο πρώτος και ο τελευταίος χαρακτήρας είναι ίδιοι. Αν δοθεί μη αποδεκτός κωδικός να επαναλαμβάνεται η εισαγωγή του κωδικού μετά από κατάλληλη προτροπή του χρήστη. 5. Να γράψετε κώδικα σε C που διαβάζει ένα αλφαριθμητικό και το εκτυπώνει ανάποδα. 6/6