Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I Θεσσαλίας Email: savvas@teilar.gr Γλώσσα Προγραμματισμού C Εισήγηση #10 Header Files, Παράμετροι στην main(). Ηλίας Κ. Σάββας Εισήγηση #10 2 Header Files Ηλίας Κ. Σάββας Εισήγηση #10 3 1
Η Standard Library <float.h> διαχείριση floats, <math.h> μαθηματικά, <stdio.h> input / output, <stdlib.h> γενικές συναρτήσεις, <string.h> διαχείριση συμβολοσειρών, <time.h> συναρτήσεις χρόνου. Ηλίας Κ. Σάββας Εισήγηση #10 4 Πρότυπο Δομής - Structure Το πρότυπο μίας δομής μπορεί να χρησιμοποιηθεί σε πολλά προγράμματα παρά να το γράφουμε κάθε φορά που το χρειαζόμαστε, Μπορούμε να γράψουμε το πρότυπο μίας δομής και να το αποθηκεύσουμε με όνομα όπως <any_name.h>, Μετά απλά το συμπεριλαμβάνουμε σε κάθε πρόγραμμα που το χρειαζόμαστε: #include any_name.h ή #include path\any_name.h : #include c:\data\date.h. ΠΡΟΣΟΧΗ: και όχι < > Ηλίας Κ. Σάββας Εισήγηση #10 5 Πρότυπα Συναρτήσεων Ένα σύνολο συναρτήσεων μπορεί να χρησιμοποιηθεί σε πολλά προγράμματα παρά να τις γράφουμε κάθε φορά που τις χρειαζόμαστε, Μπορούμε να γράψουμε ένα σύνολο συναρτήσεων και να τις αποθηκεύσουμε με όνομα όπως <any_name.h>, Μετά απλά τις συμπεριλαμβάνουμε σε κάθε πρόγραμμα που τις χρειαζόμαστε: #include any_name.h ή #include path\any_name.h : #include c:\data\date.h. ΠΡΟΣΟΧΗ: και όχι < > Ηλίας Κ. Σάββας Εισήγηση #10 6 2
Γεωμετρικές Συναρτήσεις #include <math.h> #define Pi 3.14159 float circle_area(float); float circle_perimeter(float); float rectangle_area(float, float); float rectangle_perimeter(float, float); float circle_area(float R) float a; a = Pi * R *R; return a; float circle_perimeter(float R) float p; p = 2 * Pi * R; return p; float rectangle_area(float l, float w) float a; a = l * w; return a; float rectangle_perimeter(float l, float w) float p; p = 2*(l+w); return p; Ηλίας Κ. Σάββας Εισήγηση #10 7 Χρήση Header Files του χρήστη #include "Geometry.h" int main() float Radius = 10.0; float area, perimeter; area = circle_area(radius); perimeter = circle_perimeter(radius); printf("\n\nεμβαδόν = %.2f", area); printf("\n\nπερίμετρος = %.2f\n\n", perimeter); return 0; Ηλίας Κ. Σάββας Εισήγηση #10 8 Άσκηση #1 Να γραφεί ένα header file <stats.h> το οποίο να περιέχει συναρτήσεις για τον υπολογισμό 1) μέγιστου, 2) ελάχιστου, 3) μέσης τιμής τριών πραγματικών αριθμών. Στην συνέχεια να γραφεί πρόγραμμα το οποίο να χρησιμοποιεί αυτό το header file. Ηλίας Κ. Σάββας Εισήγηση #10 9 3
Header File float max_num(float, float, float); float min_num(float, float, float); float average(float, float, float); float max_num(float a, float b, float c) float temp; temp = a; if (b > temp) temp = b; if (c > temp) temp = c; return temp; float min_num(float a, float b, float c) float temp; temp = a; if (b < temp) temp = b; if (c < temp) temp = c; return temp; float average(float a, float b, float c) float temp; temp = (a+b+c)/3; return temp; Ηλίας Κ. Σάββας Εισήγηση #10 10 Πρόγραμμα #include "stats.h" int main() float x = 20, y = 3, z = 1.5; float av; av = average(x, y, z); printf("\n\nμέγιστη τιμή = %.2f", max_num(x,y,z)); printf("\n\nελάχιστη τιμή= %.2f", min_num(z,y,z)); printf("\n\naverage = %.2f\n\n", av); return 0; Ηλίας Κ. Σάββας Εισήγηση #10 11 Άσκηση #2 Να γραφεί ένα header file <dates.h> το οποίο να περιέχει μία δομή ημερομηνίας και συναρτήσεις οι οποίες 1) να εισάγουν μία ημερομηνία και, 2) να εκτυπώνουν μία ημερομηνία. Στην συνέχεια να γραφεί πρόγραμμα το οποίο να χρησιμοποιεί αυτό το header file. Ηλίας Κ. Σάββας Εισήγηση #10 12 4
Header File struct date int day; int month; int year; ; struct date input_date(int, int, int); void display_date(struct date); struct date input_date(int a, int b, int c) struct date D; D.day = a; D.month = b; D.year = c; return D; void display_date(struct date D) printf("\n %2d-%2d-%4d\n", D.day, D.month, D.year); Ηλίας Κ. Σάββας Εισήγηση #10 13 Πρόγραμμα #include "dates.h" int main() int a, b, c; struct date X; printf("\n\nεισαγωγή ημέρας, μήνα και έτους: "); scanf("%d%d%d", &a, &b, &c); X = input_date(a, b, c); display_date(x); return 0; Ηλίας Κ. Σάββας Εισήγηση #10 14 Παράμετροι στην main() Ηλίας Κ. Σάββας Εισήγηση #10 15 5
Παράμετροι στην main() Πολλές φορές απαιτείται να τρέξει ένα πρόγραμμα με αρχικές παραμέτρους: Αποκλειστικά και μόνο 2 παράμετροι: argc (ARGument Counter) κρατάει το πλήθος των παραμέτρων που θα δόθηκαν στη γραμμή διαταγής και argv (ARGument Vector) είναι ένας πίνακας που κρατάει αυτές καθαυτές τις παραμέτρους. Ηλίας Κ. Σάββας Εισήγηση #10 16 Παράμετροι στην main() Όπως όλα τα αριθμήσιμα μεγέθη στην C, έτσι και εδώ, η argc ξεκινάει από 0 αλλά επειδή μετράει σαν παράμετρο και το ίδιο το πρόγραμμα, η πρώτη πραγματική παράμετρος είναι η υπ αριθμόν 1, η δεύτερη 2 κοκ. Αντίστοιχα, το όνομα της πρώτης παραμέτρου αποθηκεύεται σαν argv[1], της δεύτερης σαν argv[2], κοκ. Το όνομα του ίδιου του προγράμματος είναι αποθηκευμένο σαν argv[0]. Ηλίας Κ. Σάββας Εισήγηση #10 17 Γενική Σύνταξη Τύπος επιστρεφόμενου δεδομένου main(int argc, *char argv[]) int main ( int argc, *char argv[]) ---------------- return 0; Ηλίας Κ. Σάββας Εισήγηση #10 18 6
Άσκηση #1 Να γραφεί πρόγραμμα το οποίο με χρήση των παραμέτρων στην main να εκτελείται από την γραμμή διαταγής με το όνομα του χρήστη και τον κωδικό του. Το πρόγραμμα να ελέγχει εάν ο χρήστης είναι εξουσιοδοτημένος να χρησιμοποιήσει το πρόγραμμα. Ηλίας Κ. Σάββας Εισήγηση #10 19 Λύση #include <string.h> int main(int argc, char *argv[]) char user[]="maria", password[]="12345"; If (argc < 3) printf("\n Λείπουν Παράμετροι. Το πρόγραμμα θα τερματισθεί "); return -1; if (strcmp(user,argv[1])==0 & strcmp(password,argv[2])==0) printf("\n\n Καλωσήρθες %s!\n\n",user); else if (strcmp(user,argv[1])==0 & strcmp(password,argv[2])!=0) printf("\n Λάθος κωδικός... Το πρόγραμμα θα τερματισθεί\n"); else printf("\n Άγνωστος χρήστης... Το πρόγραμμα θα τερματισθεί \n"); Ηλίας Κ. Σάββας Εισήγηση #10 20 Άσκηση #2 Να γραφεί πρόγραμμα στο οποίο ο χρήστης να εισάγει έναν θετικό ακέραιο αριθμό από την γραμμή διαταγής και το πρόγραμμα να μετράει (εκτυπώνει) αντίστροφα από τον αριθμό που εισήγαγε ο χρήστης μέχρι το 0. Όταν τελειώνει να παράγει και έναν ήχο (\a). Ηλίας Κ. Σάββας Εισήγηση #10 21 7
Λύση #include <ctype.h> int main(int argc, char *argv[]) int metritis, N; if (argc < 2) printf("\n Λείπουν Παράμετροι"); return -1; N=atoi(argv[1]); for (metritis=n; metritis>=0; metritis--) printf("\n%d",metritis); printf("\a"); Η συνάρτηση atoi μετατρέπει μία συμβολοσειρά σε ακέραιο αριθμό (και εμπεριέχεται στο ctype.h) Ηλίας Κ. Σάββας Εισήγηση #10 22 Τέλος της #10 Εισήγησης Ερωτήσεις??? Χρησιμοποιήστε το email εάν θέλετε να με ρωτήσετε οτιδήποτε: savvas@teilar.gr Σημειώσεις Μαθήματος (και όχι μόνο): http://e-class.teilar.gr/ Ηλίας Κ. Σάββας Εισήγηση #10 23 8