ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό Ενότητα 10: Συναρτήσεις με Πίνακες- Αναδρομικές Συναρτήσεις Κ. Κουκουλέτσος Τμήμα: Τμήμα Υπολογιστικών Συστημάτων
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σκοποί ενότητας... 4 Περιεχόμενα ενότητας... 4 Ασκήσεις... 5 Άσκηση 1... 5 Άσκηση 2... 5 Άσκηση 3... 6 Άσκηση 4... 7
Σκοποί ενότητας Σκοπός της ενότητας είναι η πρακτική εξάσκηση του εκπαιδευόμενου με έννοιες που έχουν αναλυθεί στο αντίστοιχο τμήμα της θεωρίας, με την επίλυση ασκήσεων. Πιο αναλυτικά οι σκοποί είναι Να χρησιμοποιούν πινάκες σαν παραμέτρους σε συναρτήσεις Να γνωρίσουν τον τρόπο μεταβίβασης πίνακα σε συνάρτηση Να γνωρίσουν την φύση των αναδρομικών συναρτήσεων Να κατανοήσουν τα πιθανά μειονεκτήματα από την χρήση αναδρομικών συναρτήσεων Να χρησιμοποιούν αναδρομικές συναρτήσεις στον προγραμματισμό Περιεχόμενα ενότητας Η ενότητα του εργαστηρίου περιλαμβάνει ασκήσεις για το μάθημα: Εισαγωγή στον προγραμματισμό.
Ασκήσεις Άσκηση 1 Το παρακάτω πρόγραμμα αθροίζει τα στοιχεία πίνακα με χρήση συνάρτησης int showpin(int pin[ ], int plithos) //int showpin(int * pin, int plithos) //int showpin(int pin[10], int plithos) //int showpin(int pin[50], int plithos) { int sum=0,i; for (i=0;i<plithos;i++) printf("%d ",pin[i]); for (i=0;i<plithos;i++) sum=sum+pin[i]; return sum; int main(int argc, char *argv[]){ int a[10]={1,2,3,4,5,6,7,8,9,10; printf("\nto athroisma einai= %d\n",showpin(a,10)); int b[ ]= {100, 200, 300, 400, 500, 600; printf("\nto athroisma einai= %d\n", showpin(b,sizeof(b)/sizeof(int))); system("pause"); return EXIT_SUCCESS; Άσκηση 2 Να εισάγονται οι βαθμοί δύο τμημάτων που αποτελούνται από 5 και 6 σπουδαστές. Να εμφανίζεται ο μέγιστος βαθμός και ο μέσος όρος του κάθε τμήματος. Ποιο τμήμα πέτυχε τον καλύτερο μέσο όρο. Τέλος να εμφανίζεται το πλήθος των σπουδαστών που πέτυχαν βαθμό ίσο με τον μέγιστο σε κάθε τμήμα. double average(double v[], int n) { //n einai to plithos sôoixeion v[] double s = 0.0;int i; for (i = 0; i < n; ++i) s += v[i]; return s / n; double megistos( double v[], int n) { int i; double max = v[0]; for (i = 0; i < n; ++i) if (max < v[i]) max = v[i]; return max; int plithos( double v[], int n) { int i, pli=0; double meg; meg=megistos(v,n);
for (i = 0; i < n; ++i) if (v[i] == meg) pli++; return pli; int main( int argc, char *argv[]) { double a[6]={6,8,10,10,7,5; double b[5]={5,9,9,6,9; double mega,megb,avea,aveb; mega=megistos(a,6); avea=average(a,6); aveb=average(b,5); megb=megistos(b,5); printf("megistos A tmimatos= %.2f O mesos A tmimatos %.2f\n\n", mega,avea); printf("megistos B tmimatos= %.2f O mesos B tmimatos %.2f\n\n", megb,aveb); if (avea<aveb) printf("to deftero tmima exei kalitero meso\n\n"); else if(avea>aveb) printf("to proto tmima exei kalitero meso\n\n"); else mesous \n\n"); printf("ta dio tmimata exoyn petixei isous printf( "To plithos ton bathmon poy isoutai me to megisto %d\n", plithos(a,6)); printf( "To plithos ton bathmon poy isoutai me to megisto %d\n", plithos(b,5)); system("pause"); return EXIT_SUCCESS; Άσκηση 3 Να γραφεί συνάρτηση που να επιστρέφει το παραγοντικό ενός αριθμού n χωρίς επανάληψη και να γίνει σύγκριση με την αντίστοιχη συνάρτηση με χρήση αναδρομής double factorial(int); double factloop(int); main(){ int n; double result, resloop; printf("dose akeraio arithmo"); scanf("%d", &n); result=factorial(n); resloop=factloop(n); printf("paragontiko me anadromi n!= %.0f\n", result); printf("paragontiko me loop n!= %.0f\n", resloop); return 0; double factorial(int n) { if (n == 0) return(1);
else return (factorial(n - 1) * n); double factloop(int n){ int i; double product = 1; for (i = 1; i <= n; i++) product *= i; return (product); Άσκηση 4 Να οριστεί αναδρομική συνάρτηση που να παράγει αριθμούς Fibonacci int Fibonacci(int); int main() { int n,i, k; printf("dose to plithos ton arithmon Fibonacci\n"); scanf("%d", &n); printf("\n\nemfanisi seiras arithmon Fibonacci\n"); i=0; for ( k = 0 ; k < n ; k++ ){ printf("%2dos Arithmos= %3d\n",k+1, Fibonacci(i)); i++; return 0; int Fibonacci(int n){ if ( n == 0 ) return 0; else if ( n == 1 ) return 1; else return ( Fibonacci(n-1) + Fibonacci(n-2) );