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

Σχετικά έγγραφα
5.6 Μελέτη περίπτωσης. Η έξοδος θα είναι:

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

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

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

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

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

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

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

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

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

Υπολογισμός - Εντολές Επανάληψης

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

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

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

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

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

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

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

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

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

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

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

Εντολές Επανάληψης. int sum = 0, i=1; sum += i++ ; sum += i++ ; Η πράξη αυτή θα πρέπει να επαναληφθεί Ν φορές!

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

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

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

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

Υπολογισμός - Εντολές Ελέγχου

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

lab14grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ

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

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

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

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

Εντολές επιλογής Επαναλήψεις (if, switch, while)

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

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

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

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

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

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

Οι εντολές ελέγχου της ροής ενός προγράμματος.

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

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

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

Β7.1.4 Δομές Επανάληψης. Β Λυκείου Κατεύθυνσης

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

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

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

Κεφάλαιο : Επαναλήψεις (for, do-while)

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

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

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

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

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

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

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

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

Διάλεξη 5η: Εντολές Επανάληψης

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

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

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

Δομές Ανακυκλώσεων. Εντολές ελέγχου - 1

Δομές Επανάληψης. Εισαγωγή στη C++

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

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

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

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

Transcript:

Κεφάλαιο 5: Πολυδιάστατοι πίνακες Πίνακες αλφαριθμητικών 119 Σε μία άλλη από τις εκτελέσεις του προγράμματος η αλληλεπίδραση με το χειριστή ήταν η επόμενη: 5.5 Συναρτήσεις χειρισμού αλφαριθμητικών Στις βιβλιοθήκες της γλώσσας C έχουν συμπεριληφθεί μια σειρά από ρουτίνες (συνήθως συναρτήσεις) που απλοποιούν την επεξεργασία των αλφαριθμητικών πινάκων. Παραπάνω αναφέραμε τη ρουτίνα strcpy(). Στη συνέχεια θα περιγράψουμε μερικές ακόμα ρουτίνες χειρισμού αλφαριθμητικών, τις περισσότερο χρήσιμες και διαθέσιμες σε όλες τις εκδόσεις της C.

120 Εμβάθυνση στον προγραμματισμό με τη γλώσσα C Πρώτη εξετάζουμε τη συνάρτηση strcmp(), η οποία δέχεται δύο αλφαριθμητικά ορίσματα και επιστρέφει έναν ακέραιο αριθμό. Ο αριθμός αυτός μπορεί να είναι: Μηδεν (0) όταν τα δύο αλφαριθμητικά ορίσματα έχουν το ίδιο περιεχόμενο Θετικό αριθμό ( 1 ) όταν το πρώτο αλφαριθμητικό όρισμα είναι λεξικογραφικά μεγαλύτερο από το δεύτερο Αρνητικό αριθμό ( -1 ) όταν το δεύτερο αλφαριθμητικό όρισμα είναι λεξικογραφικά μεγαλύτερο από το πρώτο Η αναγκαιότητα της συνάρτησης strcmp() είναι πραγματικά πολύ μεγάλη καθώς η γλώσσα C δεν επιτρέπει την απευθείας (με χρήση των τελεστών ==,!=, <=, >=) σύγκριση αλφαριθμητικών δεδομένων. Η επικεφαλίδα της συνάρτησης είναι: int strcmp(char *s1, char *s2) Αν σας είναι δύσκολο να καταλάβετε την παραπάνω επικεφαλίδα της συνάρτησης strcmp, θεωρείστε ότι αυτή είναι: int strcmp(char s1[], char s2[]) Ξαναδιαβάστε την πρώτη από τις δύο επικεφαλίδες της strcmp μετά την α- νάγνωση του κεφαλαίου με τους δείκτες. Το επόμενο πρόγραμμα (έστω y.c) χρησιμοποιείται για να διαβάσει (από το τερματικό) δεδομένα που αφορούν την επιτυχία ή αποτυχία των φοιτητών στην εξέταση κάποιου μαθήματος και να υπολογίσει το ποσοστό επιτυχίας. Η είσοδος των στοιχείων (από το τερματικό) γίνεται με τριάδες αλφαριθμητικών τα οποία αντιπροσωπεύουν το επώνυμο του φοιτητή, το όνομα του φοιτητή και την απόδοσή του στην εξέταση (μια από τις λέξεις «Credit», «Pass» και «Fail»). Το πρόγραμμα διατηρεί τρεις μετρητές (PassCount, NotPassCount, WrongDataCount). Για κάθε γραμμή (τριάδα) δεδομένων αυξάνει τον αντίστοιχο μετρητή. Στο τέλος (όταν ο χρήστης δώσει τη λέξη «QUIT» αντί για όνομα Φοιτητή) το πρόγραμμα υπολογίζει και εμφανίζει

Κεφάλαιο 5: Πολυδιάστατοι πίνακες Πίνακες αλφαριθμητικών 121 το ποσοστό επιτυχίας καθώς και το πλήθος των λανθασμένων δεδομένων που εισήχθησαν. #include <stdio.h> main() { char surname[30], cname[20], rank[20]; int PassCount, NotPassCount, WrongDataCount; } PassCount=NotPassCount=WrongDataCount=0; do { scanf("%s",surname); if ( (strcmp(surname,"quit")==0) (strcmp(surname,"quit")==0) (strcmp(surname,"quit")==0) ) break; scanf("%s",cname); 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++; else if ( (strcmp(rank,"fail")==0) (strcmp(rank,"fail")==0) (strcmp(rank,"fail")==0) ) NotPassCount++; else WrongDataCount++; } while (1); if ((PassCount>0) (NotPassCount>0)) printf("percentage %d%%\n", 100 * PassCount / (PassCount + NotPassCount)); printf("wrong Data Count: %d%%\n", WrongDataCount); Αν στη συνέχεια τρέξουμε αυτό το πρόγραμμα και ως δεδομένα (είσοδο) δώσουμε: Karanikolas Nikitas Pass Papadakos Panagiotis Credit

122 Εμβάθυνση στον προγραμματισμό με τη γλώσσα C Soulis Stavros Fail Iordanidis Iordanis Pass Lalakis Lakis Pass Zafiriou Manolis FAIL MITROPOULOS GEORGIOS fail KARAXRISTOS XRISTOS CREDIT MOSXOVITIS MARIOS PASS QUIT Τότε η έξοδος (τα αποτελέσματα) που θα πάρουμε θα είναι: Percentage 66% Wrong Data Count: 0% Οπως αναφέρθηκε και παραπάνω η εντολή scanf( %s, <variable>) αγνοεί τα κενά και τις αλλαγές γραμμών. Αυτό γίνεται καλύτερα αντιληπτό αν κατά την εκτέλεση του προγράμματος εισάγαγουμε ως δεδομένα: Karanikolas Nikitas Pass Papadakos Panagiotis Credit Soulis Stavros Fail Iordanidis Iordanis Vafiadis Sakis Arista Zafiriou Manolis FAIL Pass Lalakis Lakis Pass MITROPOULOS GEORGIOS fail KARAXRISTOS XRISTOS CREDIT MOSXOVITIS MARIOS PASS QUIT Η έξοδος (τα αποτελέσματα) που θα πάρουμε θα είναι: Percentage 66% Wrong Data Count: 1 Στην προηγούμενη (δεύτερη) εκτέλεση του προγράμματος προσθέσαμε κενά σε διάφορα σημεία των δεδομένων και μία επιπλέον γραμμή στην οποία βάλαμε την μη κατανοητή (με βάση τη λογική που αναπτύξαμε στο πρόγραμμα) επίδοση «Arista». Στη συνέχεια θα δοκιμάσουμε μία ακόμη (τρίτη) εκτέλεση στην οποία χρησιμοποιούμε τα ίδια δεδομένα με την δεύτερη ε- κτέλεση αλλά παρεμβάλουμε αλλαγές γραμμών σε διάφορα σημεία της ροής εισόδου. Εστω λοιπόν ότι τα δεδομένα που εισάγουμε είναι:

Κεφάλαιο 5: Πολυδιάστατοι πίνακες Πίνακες αλφαριθμητικών 123 Karanikolas Nikitas Pass Papadakos Panagiotis Credit Soulis Stavros Fail Iordanidis Iordanis Lalakis Lakis Pass Vafiadis Sakis Arista Zafiriou Manolis FAIL MITROPOULOS GEORGIOS KARAXRISTOS MOSXOVITIS XRISTOS CREDIT MARIOS PASS QUIT Pass fail Το αποτέλεσμα από αυτή την (τρίτη) εκτέλεση θα παραμείνει το ίδιο με την δεύτερη εκτέλεση. Αν θέλετε να δείτε εσωτερικά (στις μεταβλητές του προγράμματος) τι γίνεται προσθέστε μια εντολή printf αμέσως πριν το τέλος του do-while-loop. Προσθέστε τη γραμμή: printf("%s,%s,%s.\n",surname,cname,rank); Η προσθήκη της εντολής printf μας δείχνει τα περιεχόμενα των μεταβλητών αλλά αναμειγνύει την είσοδο και την εξοδο του προγράμματος. Αυτό, σε κάποιες περιπτώσεις, μπορεί να είναι ενοχλητικό. Αν θέλετε να αποφύγετε αυτή την ανάμειξη, δακτυλογραφήστε τα δεδομένα σας (ίδια με αυτά που χρησιμοποιήσατε στην τρίτη εκτέλεση) σε έναν εκδότη κειμένου (π.χ. notepad) και αποθηκεύστε τα σε ένα αρχείο (π.χ. data.in). Η επόμενη εικόνα δείχνει το Notepad σε δράση:

124 Εμβάθυνση στον προγραμματισμό με τη γλώσσα C Στη συνέχεια εκτελέστε (τέταρτη εκτέλεση) το πρόγραμμά σας ανακατευθύνοντας την είσοδό του ώστε να γίνει από το αρχείο σας (data.in). Η πλήρη αλληλεπίδραση του χρήστη με το λειτουργικό σύστημα (αφού προηγουμένως έχει κατασκευασθεί το αρχείο data.in) είναι: Θα συνεχίσουμε την παρουσίαση των βασικών συναρτήσεων διαχείρισης String με τη συνάρτηση strcat(). Η συνάρτηση αυτή δέχεται δύο αλφαριθμητικά ορίσματα και προσαρτά (concatenate) στο τέλος του πρώτου τα στοιχεία του δεύτερου string (αλφαριθμητικού). Η συνάρτηση επιστρέφει