Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 4 getchar() - putchar() - math.h Γιώργος Λαµπρινίδης lamprinidis@pharm.uoa.gr
Ασκήσεις 3 ου Εργαστηρίου Να διαβαστούν δύο ακέραιοι αριθµοί και να υπολογισθεί η απόλυτη τιµή της διαφοράς τους. ----------------------------------------- #include <stdio.h> main() { int a,b,d; printf("dwse 2 akerairous arithmous\n"); scanf("%d",&a); scanf("%d",&b); if (a>b) { d=a-b; printf("h apoliti timi tis diaforas a-b einai %d\n",d); else { d=b-a; printf("h apoliti timi tis diaforas a-b einai %d\n",d); Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2
Ασκήσεις 3 ου Εργαστηρίου Να διαβαστούν οι συντελεστές α, β και γ ενός τριωνύµου και να υπολογιστούν οι ρίζες του. (Μέρος 1ο) ----------------------------------------- #include <stdio.h> main() { double a,b,c,d,dd,x1,x2; printf("dwse syntelesti a triwnymou ax^2+bx+c=0\n"); scanf("%lf",&a); printf("dwse syntelesti b triwnymou ax^2+bx+c=0\n"); scanf("%lf",&b); printf("dwse syntelesti c triwnymou ax^2+bx+c=0\n"); scanf("%lf",&c); d=b*b-4*a*c; /* Eyresi tetragwnikis rizas kata ton babuloniako tropo */ dd=((d/2)+d/(d/2))/2;/*first guess*/ dd=(dd+d/dd)/2; dd=(dd+d/dd)/2; dd=(dd+d/dd)/2; dd=(dd+d/dd)/2; Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 3
Ασκήσεις 3 ου Εργαστηρίου Να διαβαστούν οι συντελεστές α, β και γ ενός τριωνύµου και να υπολογιστούν οι ρίζες του. (Μέρος 2 ο ) ----------------------------------------- if (d>0) { x1=(-b-dd)/2*a; x2=(-b+dd)/2*a; printf("oi dyo lyseis toy triwnymoy einai x1=%lf kai x2 %lf\n",x1,x2); else if (d==0) { x1=-b/2*a; x2=-b/2*a; printf("yparxoyn 2 koines lyseis x1,2=%lf\n",x1); else { printf("to trivnymo den exei lyseis pragamtikous arithmous\n"); Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 4
Ασκήσεις 3 ου Εργαστηρίου Να διαβαστούν τρεις αριθµοί και να ταξινοµηθούν κατά φθίνουσα σειρά. ----------------------------------------- #include <stdio.h> main() { double a,b,c; printf("taxinomisi 3 arithmwn kata fthinousa seira\n"); printf("desw prwto arithmo\n"); scanf("%lf",&a); printf("desw deutero arithmo\n"); scanf("%lf",&b); printf("desw trito arithmo\n"); scanf("%lf",&c); if (a>b && a>c && b>c) printf("h seira einai %lf %lf %lf\n",a,b,c); if (a>b && a>c && c>b) printf("h seira einai %lf %lf %lf\n",a,c,b); if (a>b && c>a && b>a) printf("h seira einai %lf %lf %lf\n",c,b,a); if (a>b && c>a && a>b) printf("h seira einai %lf %lf %lf\n",c,a,b); if (b>a && b>c && a>c) printf("h seira einai %lf %lf %lf\n",b,a,c); if (b>a && b>c && c>a) printf("h seira einai %lf %lf %lf\n",b,c,a); if (b>a && c>b && a>b) printf("h seira einai %lf %lf %lf\n",c,a,b); if (b>a && c>b && b>a) printf("h seira einai %lf %lf %lf\n",c,b,a); Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 5
Ασκήσεις 3 ου Εργαστηρίου Να διαβαστεί έναςλατινικός χαρακτήρας και να εµφανιστεί ο χαρακτήρας αυτός σε Upper Case (κεφαλαία) αν είναι φωνήεν. Σε διαφορετική περίπτωση να εµφανιστεί το µήνυµα Character is not a vowel (Τα φωνήεντα είναι οι χαρακτήρες a,e,i,o,u,y). Να λυθεί µε την εντολή switch. ----------------------------------------- #include <stdio.h> main() { char a ; int x; printf("dwse enan Fonien\n"); scanf("%c",&a); if(a=='a') x=1; if(a=='e') x=2; if(a=='i') x=3; if(a=='o') x=4; if(a=='u') x=5; if(a=='y') x=6; switch (x) { case 1: printf("a\n"); break; case 2: printf("e\n"); break; case 3: printf("i\n"); break; case 4: printf("o\n"); break; case 5: printf("u\n"); break; case 6: printf("y\n"); break; default: printf("character is not a vowel\n"); Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 6
Κώδικας ASCII l Προκύπτει από από τα αρχικά American Standard Code for Information Interchange l Οι υπολογιστές καταλαβαίνουν µόνο αριθµούς, εποµένως ο κώδικας ASCII αντιστοιχεί σε ένα χαρακτήρα (όπως π.χ. 'α' ή @) συγκεκριµένη αριθµητική τιµή που καταλαβαίνει ο υπολογιστής l Ανατρέξτε στον τελευταίο πίνακα της ιστοσελίδας http://el.wikipedia.org/wiki/ascii και προσέξτε τις στήλες «Δεκ.» και «Γραφ.» l π.χ. για το χαρακτήρα 'Β' ο αριθµός ASCll που του αντιστοιχεί είναι ο 66, για το 'b' ο αριθµός 98 κ.ο.κ. Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 7
Ο πίνακας ASCII Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 8
Η συνάρτηση getchar() l Η συνάρτηση getchar() προέχεται από την πρότυπη (standard) βιβλιοθήκη εισόδου / εξόδου της C l Διαβάζει ένα χαρακτήρα από την είσοδο και επιστρέφει στο όνοµά της την ακέραια τιµή του ASCII κωδικού του χαρακτήρα l Αν δεν υπάρχει άλλος χαρακτήρας να διαβαστεί, δηλαδή φτάσαµε στο τέλος της εισόδου, τότε επιστέφει στο όνοµά της µία ειδική τιµή, το EOF (End of File), που είναι #defined σε µία συγκεκριµένη ακέραια τιµή µέσα στο αρχείο επικεφαλίδας stdio.h Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 9
Η συνάρτηση putchar() l Είναι η αδερφή συνάρτηση της getchar() l Η συνάρτηση putchar παρέχεται επίσης από την πρότυπη βιβλιοθήκη εισόδου / εξόδου της C και η λειτουργία της είναι να εκτυπώσει στην έξοδο τον χαρακτήρα του οποίου τον ASCII κωδικό δίνουµε µέσα στις παρενθέσεις Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 10
Πρόβληµα 1 l Γράψτε ένα πρόγραµµα σε C που να διαβάζει από το πληκτρολόγιο έναν χαρακτήρα µε τη χρήση της getchar και να εκτυπώνει στην οθόνη τον χαρακτήρα αυτό που διαβάστηκε µε τη χρήση της putchar Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 11
Λύση l #include <stdio.h> main() { int ch; ch = getchar(); putchar(ch); l getchar(); getchar(); Σηµείωση: Τα δύο getchar() στο τέλος του προγράµµατος χρησιµοποιούνται για το DevC++ και δε σχετίζονται µε το ζητούµενο του προβλήµατος Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 12
Πρόβληµα 2 l Γράψτε ένα πρόγραµµα σε C που να διαβάζει από το πληκτρολόγιο έναν πεζό χαρακτήρα του αγγλικού αλφαβήτου (δηλαδή από 'a' εως 'z') µε τη χρήση της getchar και να υπολογίζει και να εκτυπώνει στην οθόνη τον ίδιο χαρακτήρα µε αυτόν που διαβάστηκε αλλά κεφαλαίο µε τη χρήση της putchar. l Π.χ. έστω ότι δόθηκε ως είσοδος το γράµµα 'a'. Τότε θέλουµε να υπολογίσουµε και να εκτυπώσουµε το γράµµα 'Α'. Σε περίπτωση που η είσοδος που δοθεί δεν είναι πεζός χαρακτήρας αλλά κεφαλαίος ή άλλος (π.χ. *, &, κ.α.) τότε να εκτυπώνεται αντίστοιχο µήνυµα και να µη γίνεται υπολογισµός. Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 13
Σηµείωση που βοηθά στη λύση του προβλήµατος l Στον ASCII πίνακα οι κεφαλαίοι λατινικοί χαρακτήρες είναι σε συνεχόµενες θέσεις και το ίδιο ισχύει και για τους πεζούς l Για τη µετατροπή ενός πεζού χαρακτήρα σε κεφαλαίο, δε χρειάζεται να γνωρίζουµε τις ακριβείς τιµές των ASCII κωδικών, αρκεί να µετατοπίσουµε τον πεζό χαρακτήρα κατά 'a' 'A' θέσεις Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 14
Πρόβληµα 3 l Το ίδιο µε το Πρόβληµα 2 µε τη διαφορά ότι αν δοθεί κεφαλαίος χαρακτήρας τότε να υπολογίζεται και να εκτυπώνεται ο αντίστοιχος πεζός χαρακτήρας. Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 15
Λύση l #include <stdio.h> main() { int ch = getchar(); if (ch >= 97 && ch <= 122) { /* if lower case letter */ ch = ch 32; /* Move 32 positions in the ASCII table */ putchar(ch); else if (ch >= 65 && ch <= 90) { /* if upper case letter */ ch = ch + 32; /* Move 32 positions in the ASCII table */ putchar(ch); else printf( The number you gave is not a letter of the alphabet. \n ); getchar(); getchar(); Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 16
Βιβλιοθήκη Μαθηµατικών Συναρτήσεων math.h Χρήσιµες Συναρτήσεις Όνοµα Τύπος x,y Υπολογισµός Τύπος αποτελέσµατος ceil(x) double x (στρογγυλοποίηση προς τα πάνω) int floor(x) double x (στρογγυλοποίηση προς τα κάτω) int abs(x) int x int fabs(x) double x double sqrt(x) double x (x 0) double pow(x,y) double x y double
Άσκηση l Φτιάξτε ένα πρόγραµµα σε C που να δοκιµάζει όλες τις παραπάνω συναρτήσεις Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 18
Απάντηση #include <stdio.h> #include <stlib.h> #include <math.h> main() { int x_ceil, x_floor, x_abs_int; double x_abs_double, x_sqrt, x_pow; x_ceil = ceil(3.14); printf("ceil of 3.14 is %d\n",x_ceil); x_floor = floor(3.14); printf("floor of 3.14 is %d\n",x_floor); x_abs_int = abs(-3.14); printf("integer abs of -3.14 is %d\n",x_abs_int); x_abs_double = fabs(-3.14); printf("double abs of -3.14 is %lf\n",x_abs_double); x_sqrt = sqrt(4); printf("sqrt of 4 is %lf\n",x_sqrt); x_pow = pow(2,3); printf("2^3 is %lf\n",x_pow); getchar(); getchar(); Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 19
Πρόβληµα 4 l Ένας φοιτητής απαντά σε µία ερώτηση πολλαπλής επιλογής. Η κάθε απάντηση (a) (d) µεταβάλει το βαθµό του ως εξής: (a) απάντηση: αυξάνει τον βαθµό του κατά 1 µονάδα (b) απάντηση: αυξάνει τον βαθµό του κατά 6 µονάδες (c) απάντηση: δεν αυξάνει το βαθµό του (d) απάντηση: αυξάνει τον βαθµό του κατά 10 µονάδες l Γράψτε ένα πρόγραµµα σε C που l l l να διαβάζει την απάντηση του φοιτητή να υπολογίζει τον βαθµό του και να τυπώνει τον βαθµό του Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 20
Σηµείωση l Αρχικά για να λύσετε το πρόβληµα χρησιµοποιήστε τη δοµή switch case και εν συνεχεία λύστε το πάλι χρησιµοποιώντας τη δοµή if else Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 21
Λύση (1) l #include <stdio.h> main() { char apantisi; int vathmos = 0; printf("give your answer. Possible choices : a, b, c, d\n"); scanf("%c", &apantisi); switch (apantisi) { case 'a': vathmos++; break; case 'b': vathmos +=6; break; case 'c': break; Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 22
Λύση (2) l case 'd': vathmos +=10; break; default: printf("wrong answer\n"); printf("your grade is = %d", vathmos); getchar(); getchar(); Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 23
Πρόβληµα 5 l Γράψτε ένα πρόγραµµα σε C που λύνει την πρωτοβάθµια εξίσωση ax + b = 0 µε a, b ακέραιους αριθµούς. Τα a και b δίνονται σαν είσοδο από το χρήστη και το αποτέλεσµα (που πρέπει να είναι πραγµατικός αριθµός) εκτυπώνεται στην οθόνη Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 24
Λύση l #include <stdio.h> main() { int a,b; double result; printf("computation of the solution of primary equation\n"); printf("give a and b (integers)\n"); scanf("%d",&a); scanf("%d",&b); result = -(double)b/a; printf("the result is %lf", result); getchar(); getchar(); Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 25
Ασκηση Σε µια Φαρµακοβιοµηχανια χρειαζόµαστε ένα λογισµικό που να εισάγουµε τo επιθυµητό βάρος ενός δισκίου π.χ. 150mg και να δίνουµε τις µετρήσεις βάρους 5 δισκίων. Η µάζα σε δυο από αυτά δεν θα πρέπει να αποκλίνει περισσότερο από τα παρακάτω όρια και κανένα να µην αποκλίνει περισσότερο από το διπλάσιο της ένδειξης: Μέσος όρος µάζας δισκίου Μέχρι 100mg ±10% Από 100-300mg ±7.5% Πάνω απο 300mg ±5% Ενδεικτικό παράδειγµα: Μάζα δισκίου 200mg Ζυγίσεις(σε mg) : Παρτιδα 1: 213 228 210 206 186 Παρτιδα 2: 188 184 202 204 206 Παρτιδα 3: 208 214 218 212 203 Παρτιδα 4:201 200 198 195 208 Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 8/11/1616/10/2015