TEI Λάρισας / ΣΤΕΦ Τμ. Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών Α Εξεταστική Περίοδος, 5 Φεβρουαρίου 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ Ηλίας. Κ. Σάββας Α 1) Να δημιουργήσετε ένα header file με όνομα max_min.h στο οποίο με χρήση των αντίστοιχων συναρτήσεων να βρίσκει τις θέσεις του μεγαλύτερου και μικρότερου στοιχείου κάποιου μονοδιάστατου πίνακα. Τέλος, να γράψετε ένα πολύ απλό πρόγραμμα που να δείχνει την χρήση αυτού του header file (3 μονάδες). /* max_min.h */ int megisto(int *, int); int elaxisto(int *, int); int megisto(int *A, int N) int i, thesi =0; for (i=0; i<n; i++) if (A[thesi] < A[i]) thesi = i; return thesi; int elaxisto(int *A, int N) int i, thesi =0; for (i=0; i<n; i++) if (A[thesi] > A[i]) thesi = i; 1
return thesi; #include "max_min.h" #define N 4 int main() int A[N] = 5, 2, -5, 1; int meg, mik; meg = megisto(a, N); mik = elaxisto(a, N); printf("\n Thesi megistou = %d", meg); printf("\n Thesi elaxistou = %d", mik); return 0; 2) Να γίνει πρόγραμμα που με την βοήθεια μίας αναδρομικής συνάρτησης να υπολογίζει τo πολυώνυμο του Hermite, το οποίο ορίζεται ως εξής: εάν H 0 (x)=1, H 1 (x)=2x,, H Ν (x)=2xh Ν-1 (x)-2(ν-1)h Ν-2 (x) (3 μονάδες). long Hermite(int N, int x); main() int n,x; long h; 2
printf("\nείσοδος N όρου :"); scanf("%d",&n); printf("\nείσοδος μεταβλητής :"); scanf("%d",&x); h=hermite(n,x); printf("\n\nhermite :%10d\n\n",h); long Hermite(int a, int b) if (a==0) else if (a==1) return 2*b; else return 2*b*Hermite(a-1,b) 2*(a-1)*Hermite(a- 2,b); 3) Έστω ότι υπάρχει ένα binary file με δομή int x, int y, int z όπου x, y, z αναπαριστούν συντεταγμένες σημείων και όνομα <synt.dat>. Να γράψετε ένα πρόγραμμα το οποίο a) θα φορτώνει το αρχείο σε ένα πίνακα, β) θα ταξινομεί τον πίνακα με κλειδί το x, γ) θα επιστρέφει τον πίνακα στο αρχείο (καταστρέφοντας το παλιό) και δ) θα εκτυπώνει τον ταξινομημένο πίνακα καθώς επίσης και το πλήθος των σημείων (4 μονάδες). #include <stdlib.h> 3
struct Domi int x; int y; int z; ; int main() FILE *f; struct Domi *P; struct Domi temp; int megethos, i, j, t; f = fopen("synt.dat", "rb"); if (!f ) printf("\n To arxeio den vrethike..."); /* A Erotima */ fseek(f, 0, SEEK_END); megethos = ftell(f) / sizeof(struct Domi); fseek(f, 0, SEEK_SET); P = malloc(megethos * sizeof(struct Domi)); if (! P ) printf("\n Adynati desmeusi mnimis..."); for (i=0; i<megethos; i++) fread(&p[i], sizeof(struct Domi), 1, f); fclose(f); 4
/* B Erotima */ for (i=0; i<megethos-1; i++) t = i; for (j=i+1; j<megethos; j++) if (P[t].x > P[j].x) t = j; temp = P[t]; P[t] = P[i]; P[i] = temp; /* C Erotima */ f = fopen("synt.dat", "wb"); for (i=0; i<megethos; i++) fwrite(&p[i], sizeof(struct Domi), 1, f); /* D Erotima */ printf("\n Plithos simion = %d", megethos); for (i=0; i<megethos; i++) printf("\n %d %d %d", P[i].x,P[i].y,P[i].z); return 0; 5
TEI Λάρισας / ΣΤΕΦ Τμ. Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών Α Εξεταστική Περίοδος, 5 Φεβρουαρίου 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ Ηλίας. Κ. Σάββας B 1) Να δημιουργήσετε ένα header file με όνομα sort.h το οποίο με χρήση συνάρτησης να ταξινομεί κάποιον πίνακα. Τέλος, να γράψετε ένα πολύ απλό πρόγραμμα που να δείχνει την χρήση αυτού του header file (3 μονάδες). /* sort.h */ void taxinomisi(int *, int); void taxinomisi(int *A, int N) int i, j, t, temp; for (i=0; i<n-1; i++) t = i; for (j=i+1; j<n; j++) if (A[t] > A[j]) t = j; temp = A[t]; A[t] = A[i]; A[i] = temp; #include "sort.h" #define N 10 int main() 6
int A[N] = 5, 2, -5, 1, 7, 3, 6, 8, -4, 5; int i; taxinomisi(a, N); for (i=0; i<n; i++) printf("\n %d", A[i]); return 0; 2) Να γίνει πρόγραμμα που να υπολογίζει την παράσταση N! M!( N M )! κάνοντας χρήση αναδρομικής συνάρτησης για τον υπολογισμό το παραγοντικού (3 μονάδες). long parag(int); int main() int N, M; long apot; printf("\neisagogi N:"); scanf("%d", &N); printf("\neisagogi M:"); scanf("%d", &M); apot = parag(n) / (parag(m) * parag(n-m)); printf("\n\napotelesma = %d", apot); return 0; 7
long parag(int x) if (x<=1) else return x * parag(x-1); 3) Έστω ότι υπάρχει ένα binary file με δομή int x, int y, int z όπου x, y, z αναπαριστούν συντεταγμένες σημείων και όνομα <synt.dat>. Να γράψετε ένα πρόγραμμα το οποίο a) θα φορτώνει το αρχείο σε ένα πίνακα αλλά μόνο εκείνα τα σημεία για τα οποία καμία συντεταγμένη δεν είναι μηδενική, β) θα επιστρέφει τον πίνακα σε ένα νέο αρχείο με όνομα <synt2.dat>, γ) θα μετράει το πλήθος των σημείων τα οποία έχουν όλες τις συντεταγμένες ίσες και τέλος δ) θα εκτυπώνει το αρχείο <synt2.dat> καθώς επίσης και το πλήθος των σημείων του αρχείου (4 μονάδες). #include <stdlib.h> struct Domi int x; int y; int z; ; int main() FILE *f, *s; struct Domi *P; struct Domi temp; 8
int megethos, i, j, t, c=0, cc=0; f = fopen("synt.dat", "rb"); if (!f ) printf("\n To arxeio den vrethike..."); /* A Erotima */ fseek(f, 0, SEEK_END); megethos = ftell(f) / sizeof(struct Domi); fseek(f, 0, SEEK_SET); P = malloc(megethos * sizeof(struct Domi)); if (! P ) printf("\n Adynati desmeusi mnimis..."); for (i=0; i<megethos; i++) fread(&temp, sizeof(struct Domi), 1, f); if (temp.x!=0 && temp.y!=0 && temp.z!=0 ) P[c] = temp; c++; fclose(f); /* B Erotima */ s = fopen("synt2.dat", "wb"); for (i=0; i<c; i++) fwrite(&p[i], sizeof(struct Domi), 1, s); fclose(s); /* C Erotima */ 9
cc = 0; f = fopen("synt.dat", "rb"); for (i=0; i<megethos; i++) fread(&temp, sizeof(struct Domi), 1, f); if (temp.x == temp.y!=0 && temp.y == temp.z ) cc++; fclose(f); printf("\nplithos seimion me ises syntetagmenes = %d", cc); /* D Erotima */ printf("\n Plithos simion = %d", c); f = fopen("synt2.dat", "rb"); for (i=0; i<c; i++) fread(&temp, sizeof(struct Domi), 1, f); printf("\n %d %d %d", P[i].x,P[i].y,P[i].z); return 0; 10