ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις - προγράμματα - Μέρος Β Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε.
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Πρόγραμμα C-10: Προσέγγιση του sin(x) (1/2) /* Proseggish toy sin(x) S = x - x^3/3! + x^5/5! - x^7/7! +.. me 5 orous */ #include <stdio.h> float power( float a, int n) { float p; int i; p=1; for(i=0;i<n;i++) { p=p*a; } return p; } int npar( int n) { int p,i; p=1; for(i=1;i<=n;i++) { p=p*i; } return p; } (συνέχεια)
Πρόγραμμα C-10: Προσέγγιση του sin(x) (2/2) int main( void ) { int i, n, sign; float x,w,s; scanf("%f",&x); s= 0; sign= 1; for( i=1; i<=10; i=i+2) { w=power(x,i)/npar(i); s= s + sign*w; sign=sign*(-1); } printf("proseggish tou sin(x) me 5 orous= %.6f\n", s); return 0; }
Πρόγραμμα C-11: Eμβόλιμο στοιχείο σε πίνακα (1/2) /* Eisagwgh stoixeiou mesa se pinaka, xrhsh synarthswn */ #include <stdio.h> void readpinaka( int a[], int *n); void printpinaka( int a[], int n); int main() { int a[100], pos, c, n, v; printf("eishgage stoixeia kai -1 gia telos:\n"); readpinaka( a, &n); printpinaka( a, n); printf("dwse th thesh opou theleis na eisageis to neo stoixeio\n"); scanf("%d", &pos); printf("dwse to stoixeio\n"); scanf("%d", &v); for (c = n - 1; c >= pos; c--) a[c+1] = a[c]; a[pos] = v; printf("o neos pinakas einai:\n"); printpinaka( a, n+1); return 0; } (συνέχεια)
Πρόγραμμα C-11: Eμβόλιμο στοιχείο σε πίνακα (2/2) /* Diabasma pinaka ews na diabasoume -1 opote epistrefoyme kai to plhhhos twn stoixeivn tou pinaka */ void readpinaka( int a[], int *n) { int i; i=0; do { scanf("%d", &a[i]); i++; } while ( a[i-1]!= -1); *n= i-1; } /* Typwma pinaka */ void printpinaka( int a[], int n) { int i; for(i=0; i<n; i++) printf("%d\n", a[i]); }
Πρόγραμμα C-12: Ανακάτεμα στοιχείων πίνακα (1/2) /* Anakatema stoixeivn pinaka */ #include <stdio.h> #include <stdlib.h> #include <time.h> void shuffledeck (int a[],int n) { int x1,x2,t,i; for(i=0; i<100; i++) { x1=rand()%n; x2=rand()%n; t=a[x1]; a[x1]=a[x2]; a[x2]=t; } } void printpin (int a[],int n) { int i; for (i=0; i<n; i++) { printf("%3d", a[i]); } printf("\n"); } (συνέχεια)
Πρόγραμμα C-12: Ανακάτεμα στοιχείων πίνακα (2/2) int main(void) { int deck[54]; int i; srand(time(null)); for(i=0; i<54; i++) { deck[i]=i+1; } printpin(deck,54); shuffledeck(deck,54); printpin(deck,54); return 0; }
Πρόγραμμα C-13: Τυχαίοι χωρίς επανάληψη (1/2) /* Tyxaioi arithmoi apo 1 ews 9 xwris epanalhpsh */ #include <stdio.h> #include <stdlib.h> #include <time.h> int getrnd(int a[], int n, int n1); int main( void) { int a[9]= {0}; // i.e. {0,0,0,0,0,0,0,0,0} int nx, x, i; srand(time(null)); nx=9; for (i=0; i<9; i++) { x=getrnd( a, 9, nx); printf("%d\n", x+1); nx=nx-1; } } (συνέχεια)
Πρόγραμμα C-13: Τυχαίοι χωρίς επανάληψη (2/2) /* Epistrefei tyxaio 0..n-1 xwris epanalhpsh (gnwrizontas oti den exoun trabhxthei n1 arithmoi) */ int getrnd(int a[], int n, int n1) { int r, p, i; r= rand()%n1+1; p=0; for(i=0; i<n; i++) { if (a[i]==0) { p=p+1; if (p==r) { a[i]= 1; return i; } } } printf("lathos: Den exoun apomeinei n1 stoixeia\n"); return -1; }
Πρόγραμμα C-14: Πείραμα τύχης με μπάλες (1/2) /* Ekteloume peirama opou trabame 100 fores 4 mpales apo ena kalathi me 15 kokkines, 20 mayres kai 5 aspres mpales me epanatopothethsh kai metrame poses fores etyxan 2 kokkines kai 2 aspres mpales (anejarthta seiras) */ #include <stdio.h> #include <stdlib.h> #include <time.h> int draw( int nk, int nm, int na) { int n, k; n= nk+nm+na; k= rand()%n; if ( k < nk ) { return 0; } else if ( k < nk+nm) { return 1; } else { return 2; } } (συνέχεια)
Πρόγραμμα C-14: Πείραμα τύχης με μπάλες (2/2) int main( void ) { int i, j, a, ca, cm, ck, c; srand(time(null)); c=0; for(i=0; i<100; i++) { ck=0; cm=0; ca=0; for(j=0; j<4; j++) { a= draw(15, 20, 5); if (a==0) { ck=ck+1; printf("k"); } else if ( a==1 ) { cm=cm+1; printf("m"); } else { ca=ca+1; printf("a"); } } printf("\n"); if ((ck==2) && (ca==2)) { c=c+1; printf("!!\n"); } } printf("brethikan 2 kokkines kai 2 aspres mpales %d fores\n", c); return 0; }
Πρόγραμμα C-15: Πείραμα φυσικής, βολή (1/2) /* Peirama fysikhs: bolh apo ypsos h, taxythta u kai gwnia theta */ #include <stdio.h> #include <math.h> double bolh( double h, double u, double theta, double *tx); int main(void) { double h, u, theta, tx, xx; scanf("%lf%lf%lf", &h, &u, &theta); xx= bolh( h, u, theta, &tx); printf("h=%lf, u=%lf, theta=%lf -> x=%lf t=%lf\n", h, u, theta, xx, tx); } return 0; (συνέχεια)
Πρόγραμμα C-15: Πείραμα φυσικής, βολή (2/2) double bolh( double h, double u, double theta, double *tx) { double g, ux, uy, t, dt, x, y; g=9.81; ux=u*cos(theta); uy=u*sin(theta); t=0; dt=0.1; do { x= ux*t; y= h + uy*t - (g*t*t)/2; t=t+dt; } while (y>0); } *tx=t; return x;
Πρόγραμμα C-16: Έλεγχος σημείου προς διάνυσμα (1/2) /* Elegxos shmeiou ws pros dianysma. Mporei na xrhsimopoihthei gia elegxo shmeioy entos h ektos kyrtou polygwnou */ #include <stdio.h> #include <math.h> double det3( double a1, double b1, double c1, double a2, double b2, double c2, double a3, double b3, double c3) { return a1*(b2*c3-c2*b3) - b1*(a2*c3-c2*a3) + c1*(a2*b3-b2*a3); } double flneq2d( double x, double y, double x1, double y1, double x2, double y2) { return det3( x,y,1, x1,y1,1, x2,y2,1); } (συνέχεια)
Πρόγραμμα C-16: Έλεγχος σημείου προς διάνυσμα (2/2) int main(void) { double x1, x2, y1, y2, x, y, r; printf("dwse prwto shmeio tou dianysmatos\n"); scanf("%lf%lf",&x1,&y1); printf("dwse deytero shmeio tou dianysmatos\n"); scanf("%lf%lf",&x2,&y2); printf("dwse shmeio sto epipedo\n"); scanf("%lf%lf",&x,&y); r= flneq2d( x, y, x1, y1, x2, y2); if (r>0) printf("to shmeio einai aristera tou dianysmatos\n"); else if (r<0) printf("to shmeio einai deksia tou dianysmatos\n"); else printf("to shmeio einai panw thn eytheia tou dianysmatos\n"); return 0; }
Πρόγραμμα C-17: Έλεγχος δύο ορθογωνίων (1/2) /* Elegxos orthogwniwn sto epipedo. */ #include <stdio.h> int checkrecs( double x1, double y1, double xs1, double ys1, double x2, double y2, double xs2, double ys2) { double minx1, maxx1, minx2, maxx2, miny1, miny2, maxy1, maxy2; minx1= x1; maxx1= x1+xs1; miny1= y1; maxy1= y1+ys1; minx2= x2; maxx2= x2+xs2; miny2= y2; maxy2= y2+ys2; if (minx1 >= maxx2) return 0; else if (minx2 >= maxx1) return 0; else if (miny1 >= maxy2) return 0; else if (miny2 >= maxy1) return 0; else return 1; } (συνέχεια)
Πρόγραμμα C-17: Έλεγχος δύο ορθογωνίων (2/2) int main(void) { double x1, x2, y1, y2, xs1, xs2, ys1, ys2, r; printf("dwse shmeio thesh tou prwtou orthogwniou\n"); scanf("%lf%lf",&x1,&y1); printf("dwse diastaseis tou prwtou orthogwniou\n"); scanf("%lf%lf",&xs1,&ys1); printf("dwse shmeio thesh tou deyterou orthogwniou\n"); scanf("%lf%lf",&x2,&y2); printf("dwse diastaseis tou deyterou orthogwniou\n"); scanf("%lf%lf",&xs2,&ys2); r= checkrecs( x1, y1, xs1, ys1, x2, y2, xs2, ys2); if (r==0) printf("ta orthogwnia den temnontai\n"); else printf("ta orthogwnia temnontai\n"); return 0; }
Τέλος Ενότητας