5.6 Μελέτη περίπτωσης. Η έξοδος θα είναι:

Σχετικά έγγραφα
Σε μία άλλη από τις εκτελέσεις του προγράμματος η αλληλεπίδραση με το χειριστή ήταν η επόμενη:

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

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

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

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

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

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

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

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

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

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

10.2 Καταχώρηση δεδομένων σε σειριακά αρχεία

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

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

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

ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ

Αντικειμενοστρεφής Προγραμματισμός

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

11.5 Ολοκληρωμένο παράδειγμα Μισθοδοσία

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

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

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

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

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

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

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

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

Βαθμός Σχόλια. lab PASS 1194 PASS 1238 PASS 1239 PASS

ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ

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

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

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

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

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

Ενδεικτικές λύσεις και στατιστικά

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

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

Τμήμα Πληροφορικής & Επικοινωνιών

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

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

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

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

Συναρτήσεις διαχείρισης αλφαριθμητικών

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

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

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

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Επεξεργασία κειμένου και συμβολοσειρών σε C

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

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

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

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

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

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

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

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Θεόδωρος Γ. Λάντζος Διάλεξη Νο1

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

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

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

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

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

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

ΠΣ-ΕΡ+ΤΑΠΕ, όπου: ΠΧ είναι η πάγια χρέωση, ύψους Є. ΠΣ είναι το ποσό στρογγυλοποίησης (ΠΣ) του προηγούμενου λογαριασμού.

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

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

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

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

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

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

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

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

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

Γλώσσες Προγραμματισμού

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

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

Δομές Δεδομένων & Αλγόριθμοι

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

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

Τμήμα Πληροφορικής & Επικοινωνιών

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

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

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

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

C: Από τη Θεωρία στην Εφαρμογή

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

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

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

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

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ-ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΠΑΛ- ΚΑΝΙΓΓΟΣ 13- ΤΗΛ

Γλώσσες Προγραμματισμού

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

Transcript:

Κεφάλαιο 5: Πολυδιάστατοι πίνακες Πίνακες αλφαριθμητικών 127 strcpy (name, Nikitas N. Karanikolas ); το μέγεθος του πίνακα name είναι: %d\n, sizeof(name)); το μήκος του String που φυλάγεται στον name είναι: \ %d\n,strlen(name)); το μέγεθος του πίνακα mi είναι: %d\n,sizeof(mi)); το μήκος του String που φυλάγεται στον mi είναι: \ %d\n,strlen(mi)); Η έξοδος θα είναι: Μια χρήσιμη λεπτομέρεια που αξιοποιείται από το προηγούμενο πρόγραμμα είναι η χρήση του χαρακτήρα backslash (\), όταν θέλουμε να διακόψουμε ένα αλφαριθμητικό (string) προκειμένου να το συνεχίσουμε σε επόμενη γραμμή του προγράμματος. 5.6 Μελέτη περίπτωσης Προκειμένου να βελτιώσουμε την κατανόηση των όσων παρουσιάσθηκαν, θα κατασκευάσουμε ένα πρόγραμμα που θα καταχωρεί σε έναν πίνακα από αλφαριθμητικά (διδιάστατο πίνακα χαρακτήρων) τα ονοματεπώνυμα των φοιτητών που συμμετείχαν στις εξετάσεις κάποιας εξεταστικής περιόδου και σε ένα δεύτερο πίνακα (μονοδιάστατο πίνακα με ακέραιους) το ποσοστό επιτυχίας του φοιτητή στις εξετάσεις αυτές. Επειδή δεν συμμετέχουν όλοι οι

128 Εμβάθυνση στον προγραμματισμό με τη γλώσσα C φοιτητές στον ίδιο αριθμό μαθημάτων, θα πρέπει να επινοήσουμε ένα τρόπο που θα δίνει τη δυνατότητα στο χειριστή, που θα κάνει την καταχώρηση των στοιχείων, να πληροφορήσει το πρόγραμμα ότι ολοκληρώθηκε η καταχώρηση των αποτελεσμάτων για ένα φοιτητή και ότι μπορεί να προχωρήσει στην είσοδο των στοιχείων ενός επόμενου φοιτητή. Η σύμβαση που θα α- κολουθούν τα δεδομένα και θα εξυπηρετεί την προαναφερθείσα κατάσταση είναι η εξής: Πρώτα εισάγεται το επώνυμο του φοιτητή, Κατόπιν εισάγεται το όνομα του φοιτητή, Ακολουθούν τα αποτελέσματα του φοιτητή (για κάθε μάθημα που εξετάσθηκε αντιστοιχεί μία λέξη από τις «Credit», «Pass» και «Fail»), Η ακολουθία αποτελεσμάτων του φοιτητή τερματίζεται με τη λέξη «end». Η ολοκλήρωση όλων των δεδομένων εισόδου σηματοδοτείται όταν ο χρήστης που κάνει την καταχώρηση δώσει τη λέξη «QUIT» αντί για όνομα Φοιτητή. Για να γίνουν κατανοητά τα παραπάνω ακολουθεί ένα παράδειγμα ροής εισόδου στο πρόγραμμα που επιθυμούμε να κατασκευάσουμε: Karanikolas Nikitas Pass Fail Fail Credit Fail Fail Pass end Papadakos Panagiotis Credit Fail Credit Fail Pass Pass end Soulis Stavros Fail Fail Pass end Iordanidis Iordanis Pass Pass Pass Credit end Lalakis Lakis Pass end Mitropoulou Nikoleta end Zafiriou Manolis FAIL Fail fail Pass end MITROPOULOS GEORGIOS fail Pass Pass Pass Pass Pass Pass end KARAXRISTOS XRISTOS CREDIT Fail Fail end MOSXOVITIS MARIOS PASS end QUIT Οπως προκύπτει και από το παράδειγμα δεδομένων επιτρέπεται η καταχώρηση στοιχείων για κάποιο φοιτητή που δεν εξετάσθηκε σε κανένα μάθημα. Προσπαθείστε να κατασκευάσετε το πρόγραμμα μόνοι σας. Αν δεν τα καταφέρετε διαβάστε το πρόγραμμα (έστω w.c) που ακολουθεί: #include <stdio.h>

Κεφάλαιο 5: Πολυδιάστατοι πίνακες Πίνακες αλφαριθμητικών 129 main() { char names[100][40]; int percentages[100]; char surname[30], cname[20], rank[20]; int PassCount, NotPassCount, WrongCreditCount, percentage; int StudentCounter=0; int i; scanf("%s",surname); if ( (strcmp(surname,"quit")==0) (strcmp(surname,"quit")==0) (strcmp(surname,"quit")==0) ) scanf("%s",cname); PassCount=NotPassCount=WrongCreditCount=0; scanf("%s",rank); if ( (strcmp(rank,"pass")==0) (strcmp(rank,"pass")==0) (strcmp(rank,"pass")==0) (strcmp(rank,"credit")==0) (strcmp(rank,"credit")==0) (strcmp(rank,"credit")==0) ) PassCount++; if ( (strcmp(rank,"fail")==0) (strcmp(rank,"fail")==0) (strcmp(rank,"fail")==0) ) NotPassCount++; if ( (strcmp(rank,"end")==0) (strcmp(rank,"end")==0) (strcmp(rank,"end")==0) ) WrongCreditCount++; while (1); if ((PassCount>0) (NotPassCount>0)) percentage = 100 * PassCount / (PassCount + NotPassCount); percentage = 0; strcpy(names[studentcounter],surname); strcat(names[studentcounter]," "); strcat(names[studentcounter],cname);

130 Εμβάθυνση στον προγραμματισμό με τη γλώσσα C percentages[studentcounter]=percentage; StudentCounter ++; if (StudentCounter == 100) { printf("\nno more space for data\nthe remaining " "data are discarded\n"); while (1); for (i=0; i<studentcounter; i++) printf("%s, %d%%.\n",names[i],percentages[i]); Στο πρόγραμμα αυτό χρησιμοποιούμε δύο φωλιασμένα do while επαναληπτικά σχήματα. Το εξωτερικό do while επαναληπτικό σχήμα είναι υ- πεύθυνο για τη σάρωση (ανάγνωση και καταχώρηση στους δύο πίνακες) των στοιχείων όλων των φοιτητών. Το εσωτερικό do while επαναληπτικό σχήμα είναι υπεύθυνο για την ανάγνωση των αποτελεσμάτων του εξεταζόμενου (τρέχοντος) φοιτητή. Η τελευταία δομή ελέγχου if μέσα στο εξωτερικό do... while επαναληπτικό σχήμα σκοπό έχει την προστασία του προγράμματος από μεταβολή στοιχείων έξω από τα όρια των δύο πινάκων δεδομένων (names και percentages). Το επαναληπτικό σχήμα for στο τέλος του προγράμματος χρησιμοποιείται για την εμφάνιση των στοιχείων που καταχωρήθηκαν στους πίνακες και εξυπηρετεί στην επαλήθευση της ορθής καταχώρησης των δεδομένων. Το πρόγραμμά μας είναι αρκετά ικανοποιητικό αλλά αρκετά σπάταλο (σε υπολογιστική ισχύ) γιατί χρησιμοποιεί πολλαπλά strcmp() ενώ θα μπορούσε να αντικαταστήσει πολλά από αυτά με ένα. Η επόμενη έκδοση του προγράμματος (έστω wu.c) βασίζεται στη συνάρτηση upper (που δημιουργούμε εμείς) για να μειώσει τη χρήση της strcmp(): #include <stdio.h> void upper(char *str) { int i; for (i=0; i<strlen(str); i++) if ((str[i] >= 97) && (str[i] <= 122)) str[i] = str[i] - 32; main() { char names[100][40];

Κεφάλαιο 5: Πολυδιάστατοι πίνακες Πίνακες αλφαριθμητικών 131 int percentages[100]; char surname[30], cname[20], rank[20]; char tmp_surname[30]; int PassCount, NotPassCount, WrongCreditCount, percentage; int StudentCounter=0; int i; scanf("%s",surname); strcpy(tmp_surname,surname); upper(tmp_surname); if (strcmp(tmp_surname,"quit")==0) scanf("%s",cname); PassCount=NotPassCount=WrongCreditCount=0; scanf("%s",rank); upper(rank); if ( (strcmp(rank,"pass")==0) (strcmp(rank,"credit")==0) ) PassCount++; if (strcmp(rank,"fail")==0) NotPassCount++; if (strcmp(rank,"end")==0) WrongCreditCount++; while (1); if ((PassCount>0) (NotPassCount>0)) percentage = 100 * PassCount / (PassCount + NotPassCount); percentage = 0; strcpy(names[studentcounter],surname); strcat(names[studentcounter]," "); strcat(names[studentcounter],cname); percentages[studentcounter]=percentage; StudentCounter ++; if (StudentCounter == 100) { printf("\nno more space for data\nthe remaining " "data are discarded\n"); while (1); for (i=0; i<studentcounter; i++) printf("%s, %d%%.\n",names[i],percentages[i]);

132 Εμβάθυνση στον προγραμματισμό με τη γλώσσα C Η βασική ιδέα που διέπει τη διαδικασία upper είναι ότι οι τακτικοί αριθμοί των λατινικών κεφαλαίων χαρακτήρων είναι από 65 μέχρι 90 και οι τακτικοί αριθμοί των λατινικών πεζών χαρακτήρων είναι από 97 μέχρι 122. Με βάση αυτή την ιδέα αντικαθιστούμε κάθε πεζό χαρακτήρα με τον αντίστοιχο κεφαλαίο. Για την αντικατάσταση αυτή αρκεί να αφαιρέσουμε τη σταθερά 32 από τον τακτικό αριθμό ενός πεζού λατινικού χαρακτήρα. Το εξελιγμένο πρόγραμμα σε εκτέλεση (wu.exe) καθώς και το αρχείο δεδομένων (w.in) εμφανίζονται στις επόμενες εικόνες: