ΑΣΚΗΣΗ 8: ΣΥΝΑΡΤΗΣΕΙΣ

Σχετικά έγγραφα
Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Ανάπτυξη και Σχεδίαση Λογισμικού

int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Μεθόδων Επίλυσης Προβλημάτων

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Κεφάλαιο 10 ο Υποπρογράµµατα

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Εισαγωγή στον Προγραμματισμό με C++

Εισαγωγή στις Συναρτήσεις

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 12 ο Μάθημα 1

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Μεθόδων Επίλυσης Προβλημάτων

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

12. Συναρτήσεις (Μέρος ΙI)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

Βασικές Αρχές Προγραμματισμού

Η γλώσσα προγραμματισμού C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός (ΤΛ1006)

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Δομημένος Προγραμματισμός

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Η βασική συνάρτηση προγράμματος main()

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 9 Συναρτήσεις. Γεώργιος Λαμπρινίδης

Θέματα Προγραμματισμού Η/Υ

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό

Συναρτήσεις και διαδικασίες

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραµµατιστικές Τεχνικές

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Συστημάτων

Ανάπτυξη και Σχεδίαση Λογισμικού

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Συναρτήσεις. Εισαγωγή

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Ανάπτυξη και Σχεδίαση Λογισμικού

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 9: Συναρτήσεις Εμβέλεια

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

Προγραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Κεφάλαιο 7: Υπορουτίνες

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διαδικασιακός Προγραμματισμός

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

Προγραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Διαδικασιακός Προγραμματισμός

Χαράλαµπος Σκόκος ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΞΕΤΑΣΕΙΣ ΕΑΡΙΝΟΥ ΕΞΑΜΗΝΟΥ Ερωτήσεις

Τύποι Δεδομένων Είσοδος/Έξοδος

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Transcript:

Σκοπός της Άσκησης ΑΣΚΗΣΗ 8: ΣΥΝΑΡΤΗΣΕΙΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση συναρτήσεων στη Γλώσσας Προγραμματισμού C. H συγκεκριμένη άσκηση πραγματεύεται τα παρακάτω: συγγραφή συναρτήσεων και κλήσηεπιστροφή τιμών από συναρτήσεις. 1. Οι συναρτήσεις στη C 1.1 Ορισμός Μια συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα της C που εκτελεί μια συγκεκριμένη εργασία και επιστρέφει προαιρετικά μια τιμή στο πρόγραμμα που την κάλεσε. Τα κύρια χαρακτηριστικά μιας συνάρτησης στην γλώσσα C είναι τα ακόλουθα: Μοναδικότητα Ονόματος: Κάθε συνάρτηση έχει ένα μοναδικό όνομα. Χρησιμοποιώντας αυτό το όνομα σε ένα άλλο μέρος του προγράμματος, μπορεί κανείς να εκτελέσει τις προτάσεις που περιέχονται στην συνάρτηση. Αυτό ονομάζεται κλήση της συνάρτησης. Τα ονόματα των μεταβλητών εκχωρούνται από τον προγραμματιστή σύμφωνα με τους κανόνες ονομασίας των μεταβλητών Ανεξαρτησία: Μια συνάρτηση μπορεί να εκτελεί συγκεκριμένες λειτουργίες χωρίς να αλληλεπιδρά με άλλα μέρη του προγράμματος Λειτουργία: Μια συνάρτηση εκτελεί μια συγκεκριμένη λειτουργία σαν υποσύνολο του προγράμματος που έχετε υλοποιήσει. Επιστροφή τιμής: Μια συνάρτηση μπορεί να επιστρέφει μια τιμή στον πρόγραμμα που την καλεί. Ο τύπος επιστροφής μπορεί να οποιοσδήποτε από τους τύπους δεδομένων της C : char, int, long, float, double κτλ. 1.2 Λειτουργία Συναρτήσεων Ένα πρόγραμμα της C δεν εκτελεί τις προτάσεις σε μια συνάρτηση έως ότου κληθεί η συνάρτηση από ένα άλλο τμήμα του προγράμματος. Όταν καλείται μία συνάρτηση το πρόγραμμα στέλνει τις πληροφορίες της συνάρτησης υπό μορφή ορίσματος. Ένα όρισμα είναι δεδομένα προγράμματος που απαιτούνται από την συνάρτηση για εκτελέσει την εργασία της. Για κάθε όρισμα που διοχετεύεται στην συνάρτηση, η λίστα των παραμέτρων πρέπει να περιέχει μια καταχώρηση. Αυτή καταχώρηση καθορίζει τον τύπο των δεδομένων και το όνομα της παραμέτρου. Οι προτάσεις στην συνάρτηση εκτελούν τις εργασίες που έχουν σχεδιαστεί να κάνουν. Όταν τελειώσουν οι προτάσεις της συνάρτησης, η εκτέλεση περνά ξανά στην ίδια θέση στο πρόγραμμα, από όπου κλήθηκε η συνάρτηση. Αυτό φαίνεται και σχηματικά στο παρακάτω Σχήμα. 1/10

To Σχήμα δείχνει ένα πρόγραμμα με τρεις συναρτήσεις, καθεμία από τις οποίες καλείται μια φορά. Κάθε φορά που καλείται μία συνάρτηση, η εκτέλεση περνά σε αυτήν τη συνάρτηση. Όταν τελειώσει η συνάρτηση, η εκτέλεση περνά στη θέση από όπου κλήθηκε. Μια συνάρτηση μπορεί να κληθεί όσες φορές χρειάζεται και οι συναρτήσεις μπορούν να καλούνται με οποιαδήποτε σειρά. 1.3 Σύνταξη της Συνάρτησης Η σύνταξη της συνάρτησης αποτελείται από το πρωτότυπο της και τη δήλωση της, όπως περιγράφονται παρακάτω. Το πρωτότυπο της συνάρτησης παρέχει στο μεταγλωττιστή (compiler) μία περιγραφή μιας συνάρτησης η οποία θα οριστεί αργότερα στο πρόγραμμα. Το πρωτότυπο περιλαμβάνει ένα τύπο επιστροφής που δηλώνει τον τύπο της μεταβλητής που θα επιστρέψει η συνάρτηση. Επίσης περιλαμβάνει το όνομα της συνάρτησης που θα πρέπει να περιγράφει τι κάνει η συνάρτηση και τους τύπους των ορισμάτων που θα διοχετευθούν στη συνάρτηση. Typos_Epistrofis onoma_synartisis (typos_orismatos 1,,typos_orismatos_n); Μια δήλωση συνάρτησης περιέχει τις προτάσεις της C που εκτελείται. Η πρώτη γραμμή μις δήλωσης μιας συνάρτησης που λέγεται κεφαλίδα συνάρτησης θα πρέπει να είναι ίδια με του πρωτότυπου της συνάρτησης, με την εξαίρεση της απουσία του ερωτηματικού. Στην συνέχεια ακολουθεί σε άγκιστρα το σώμα της συνάρτησης. Εάν η συνάρτηση δεν επιστρέφει την τιμή μιας μεταβλητή είναι τύπου void. Διαφορετικά η τιμή που επιστρέφεται δια μέσου της πρότασης return πρέπει να συμβαδίζει με τον τύπο επιστροφής στο πρωτότυπο της συνάρτησης /* Synartisi ypologismoy tis dynamis enos akeraioy */ int power(int, int); /* Prwtotipo Synartisis */ main() int a; int b; int c; printf("dose timi gia to a: "); scanf("%d",&a); printf("dose timi gia to b: "); scanf("%d",&b); c=power(a,b); /* Klisi tis synartisis */ printf("h dynami toy %d stin %d isoytai me %d\n",a,b,c); int power(int x,int y) /* Kefalida tis synartisis */ /* Soma tis synartisis */ int var,i; var=1; for(i=1;i<=y;i++) var*=x; return var; Με τα εξής αποτελέσματα : Dose timi gia to a: 5 Dose timi gia to b: 3 H dynami toy 5 stin 3 isoytai me 125 2/10

Μερικές φορές προκύπτει σύγχυση για τη διάκριση ανάμεσα στις παραμέτρους και τα ορίσματα. Μια παράμετρος είναι μια καταχώριση σε μια κεφαλίδα συνάρτησης. Λειτουργεί ως κράτηση θέσης για ένα όρισμα. Οι παράμετροι μιας συνάρτησης είναι σταθερές. εν αλλάζουν κατά την εκτέλεση του προγράμματος. Από την άλλη πλευρά ένα όρισμα είναι μια πραγματική τιμή που διοχετεύεται στη συνάρτηση. Κάθε φορά που καλείται μια συνάρτηση μπορεί να δεχθεί διαφορετικά ορίσματα. Κάθε φορά που καλείται μια συνάρτηση πρέπει να διοχετεύεται ο ίδιος αριθμός και τύπος ορισμάτων. /* Apeikonizei tin diafora meta3y orismatos kai parametrou */ float half_value(float); /* Prwtotipo Synartisis */ void main () float value1,value2; float r_val1,r_val2; value1=30.55; r_val1=half_value(value1);/* H value1 einai orisma tis half_value */ printf("the value of r_val1 %f\n",r_val1); value2=180.32; r_val2=half_value(value2);/* H value2 einai orisma tis half_value */ printf("the value of r_val2 %f\n",r_val2); float half_value(float a) /* Kefalida tis synartisis */ /* a einai i parametros */ return a/2; 1.4 Τοπικές Μεταβλητές Μπορείτε να δηλώσετε μεταβλητές μέσα στο σώμα μιας συνάρτησης. Οι μεταβλητές που δηλώνονται σε μια συνάρτηση ονομάζονται τοπικές μεταβλητές. Ο όρος τοπικές μεταβλητές σημαίνει ότι οι μεταβλητές είναι διαφορετικές από οποιεσδήποτε άλλες μεταβλητές με το ίδιο όνομα που δηλώνονται σε άλλες συναρτήσεις. /* Xrisi twn topikwn metablitwn */ void demo(void); /* Prwtotipo Synartisis */ main () int x,y; x=1; y=2; printf("before calling demo(),x=%d and y=%d\n",x,y); demo(); printf("\nafter calling demo(),x=%d and y=%d\n",x,y); void demo(void) /* Kefalida tis synartisis */ int x,y; x=144; y=591; printf("\nwithin demo(), x=%d and y=%d\n",x,y); Στην οθόνη του υπολογιστή εμφανίζεται το παρακάτω αποτέλεσμα: Before calling demo(),x=1 and y=2 Within demo(),x=144 and y=591 After calling demo(),x=1 and y=2 3/10

1.5 Κλήση Συναρτήσεων Υπάρχουν δύο τρόποι για να κληθεί μια συνάρτηση. Οποιασδήποτε συνάρτηση μπορεί να κληθεί χρησιμοποιώντας απλώς το όνομα της και τη λίστα ορισμάτων μόνο σε μια πρόταση. Η δεύτερη μέθοδος μπορεί να χρησιμοποιηθεί μόνο με συναρτήσεις που έχουν τιμή επιστροφής. Επειδή αυτές οι συναρτήσεις εκτιμώνται σε μια τιμή, μπορούν να χρησιμοποιηθούν οπουδήποτε μπορεί να χρησιμοποιηθεί μια έκφραση της C. /* Klisi Synartisewn */ void demo(void); /* Ektipwsi enos minimatos */ int factorial(int); /* Ypologismos Paragontikou */ main () int x=5,y; demo(); y=factorial(x); printf("\nthe factorial of x=%d is y=%d\n",x,y); void demo(void) printf("\nypologismos paragontikoy\n"); int factorial(int a) int product,i; product=1; for(i=2;i<=a;i++) product = product * i; return product; Στην οθόνη του υπολογιστή εμφανίζεται το παρακάτω αποτέλεσμα: Ypologismos paragontikoy The factorial of x=5 is y=120 1.6 Αναδρομή Ο όρος αναδρομή αναφέρεται σε μια κατάσταση στην οποία μία συνάρτηση καλεί τον εαυτό της είτε άμεσα είτε έμμεσα. Η έμμεση αναδρομή λαμβάνει χώρα όταν μια συνάρτηση καλεί μία άλλη συνάρτηση η οποία καλεί την πρώτη συνάρτηση. Η C επιτρέπει τις αναδρομικές συναρτήσεις οι οποίες μπορεί να είναι χρήσιμες σε μερικές περιπτώσεις. /* Paradeigma Anadromis */ unsigned int factorial(int) /* Ypologismos Paragontikou */ main () unsigned int x,f; scanf("%d",&x); f=factorial(x); printf("\nthe factorial of x=%d is f=%d\n",x,f); 4/10

unsigned int factorial(unsigned int a) /* Ypologismos Paragontikou */ if(a==1) return 1; else a*=factorial(a-1); return a; 1.7 Διοχέτευση Πινάκων σε Συναρτήσεις Για να διοχετεύσετε ένα όρισμα σε μια συνάρτηση πρέπει να καθορίσετε το όνομα του πίνακα χωρίς αγκύλες. Η C αυτομάτως διοχετεύει πίνακες σε συναρτήσεις χρησιμοποιώντας εικονική κλήση μέσω αναφοράς - οι κληθείσες συναρτήσεις μπορούν να τροποποιήσουν τις τιμές των στοιχείων στους αρχικούς πίνακες της συνάρτησης που τις καλεί. Το όνομα του πίνακα είναι στην πραγματικότητα η διεύθυνση του πρώτου στοιχείου του πίνακα. Ως εκ τούτου όταν η κληθείς συνάρτηση τροποποιεί τα στοιχεία του πίνακα στο σώμα της, τότε τροποποιούνται και τα στοιχεία του πίνακα που περάστηκε ως όρισμα. /* Klisi synartisis me orisma pinaka */ #define SIZE 5 void modifyarray(int [], int); void main() int a[size]=0,1,2,3,4; int i; printf("before calling the function modifyarray\n"); for(i=0;i<size;i++) printf("value=%d\n",a[i]); modifyarray(a,size); printf("after call the function modifyarray\n"); for(i=0;i<size;i++) printf("value=%d\n",a[i]); void modifyarray(int b[], int size) int j; for(j=0;j<size;j++) b[j]*=2; Στην οθόνη του υπολογιστή εμφανίζεται το παρακάτω αποτέλεσμα: before calling the function modifyarray value=0 value=1 value=2 value=3 value=4 after call the function modifyarray value=0 value=2 value=4 value=6 value=8 5/10

Μπορεί να υπάρχουν περιπτώσεις στα προγράμματα σας όπου μια συνάρτηση δεν θα επιτρέπεται να τροποποιεί τα στοιχεία ενός πίνακα. Επειδή οι πίνακες διοχετεύονται πάντοτε στην εικονική κλήση μέσω αναφοράς, η τροποποίηση των τιμών σε ένα πίνακα είναι δύσκολο να ελεγχθεί. H C παρέχει το προσδιορισμό τύπου const για να αποτρέπει την τροποποίηση των τιμών του πίνακα σε μία συνάρτηση. Όταν μια παράμετρος πίνακα έπεται του προσδιορισμού const για να αποτρέπει την τροποποίηση των τιμών του πίνακα σε μία συνάρτηση. /* Klisi synartisis me orisma pinaka */ #define SIZE 5 void modifyarray(const int []); void main() int a[size]=0,1,2,3,4; int i; printf("before calling the function modifyarray\n"); for(i=0;i<size;i++) printf("value=%d\n",a[i]); modifyarray(a); printf("after call the function modifyarray\n"); for(i=0;i<size;i++) printf("value=%d\n",a[i]); void modifyarray(const int b[]) b[0]=5; b[1]=14; b[3]=6; Στην οθόνη του υπολογιστή κατά τη διάρκεια της μεταγλώττισης εμφανίζεται το παρακάτω αποτέλεσμα: 1.8 Μεταβίβαση Παραμέτρων σε μία Συνάρτηση Δύο είναι οι διαφορετικοί τρόποι μεταβίβασης παραμέτρων σε μία συνάρτηση Κλήση μέσω τιμής (call by value) Κλήση μέσω αναφοράς (call by reference) 1.8.1 Κλήση Συνάρτησης μέσω τιμής (call by value) Όταν γίνεται κλήση συνάρτησης μέσω τιμής, τότε στη συνάρτηση διοχετεύονται οι τιμές των παραμέτρων του προγράμματος που την καλεί. Οποιαδήποτε αλλαγή γίνει στις τιμές των παραμέτρων μέσα στο σώμα της συνάρτησης δεν επηρεάζει τις τιμές των παραμέτρων που διοχετεύθηκαν στη συνάρτηση, γιατί οι τυχόν αλλαγές γίνονται σε διαφορετικές διευθύνσεις μνήμης (όπως είδαμε στο προηγούμενο παράδειγμα). 6/10

1.8.2 Κλήση Συνάρτησης μέσω αναφοράς (call by reference) Όταν επιθυμούμε μία συνάρτηση να μπορεί να αλλάξει τις τιμές των παραμέτρων, τότε πρέπει να γίνει κλήση της συνάρτησης μέσω αναφοράς. Σε αυτή την περίπτωση, στη συνάρτηση διοχετεύονται οι διευθύνσεις μνήμης των παραμέτρων του προγράμματος που την καλεί και όχι οι τιμές τους (γεγονός που πραγματοποιείται κατά την κλήση μέσω τιμής). Επομένως, αφού η συνάρτηση έχει πρόσβαση στις διευθύνσεις των παραμέτρων του προγράμματος που την κάλεσε, τότε μπορεί να μεταβάλλει τις τιμές αυτών. Αν και η κλήση μέσω τιμής και η κλήση μέσω αναφοράς αναφέρονται σαν διαφορετικοί τρόποι μεταβίβασης παραμέτρων σε μία συνάρτηση, στην πραγματικότητα είναι ίδιοι. Δηλαδή, υπάρχει μόνο ένας τρόπος μεταβίβασης και αυτός είναι η κλήση μέσω τιμής. Θα μπορούσαμε δηλαδή να θεωρήσουμε ότι υπάρχει μόνο αυτός ο τρόπος και ότι στην προσωρινή μνήμη μπορούν να αποθηκευτούν είτε οι τιμές των μεταβλητών είτε οι διευθύνσεις των μεταβλητών. Σημειώστε επίσης ότι, όταν γίνεται κλήση μίας συνάρτησης, επιτρέπεται να γίνει συνδυασμός των δύο μεθόδων, δηλαδή κάποιες παράμετροι να διοχετευθούν μέσω τιμής και κάποιες άλλες μέσω αναφοράς. void fun(int*, int); void main() int i = 100, j = 200; int* ptr; ptr = &i; fun(ptr, j); printf( %d %d\n, i, j); void fun(int* ptr1, int a) *ptr1 = 300; a = 400; Στην οθόνη του υπολογιστή εμφανίζεται το παρακάτω αποτέλεσμα: 300 200 1.9 Συναρτήσεις και ομημένος Προγραμματισμός Η χρήση των συναρτήσεων είναι πολύ σημαντική για το σχεδιασμό προγραμμάτων με βάση το δομημένο προγραμματισμό στον οποίο εκτελούνται μεμονωμένες εργασίες προγράμματος από αυτόνομα τμήματα κώδικα. Τα πλεονεκτήματα του δομημένου προγραμματισμού είναι τα ακόλουθα: Τα πολύπλοκα προβλήματα μπορούν να διασπαστούν σε ένα αριθμό μικρότερων και απλούστερων εργασιών. Είναι ευκολότερο να ανιχνευθούν λάθη σε ένα δομημένο πρόγραμμα. Εάν το πρόγραμμα έχει λάθος (κάτι που προκαλεί δυσλειτουργία) 7/10

1.10 Η Μαθηματική Βιβλιοθήκη H βιβλιοθήκη <math.h> περιλαμβάνει μία ακολουθία από μαθηματικές συναρτήσεις. Οι συναρτήσεις αυτές είναι οι ακόλουθες: double sin(double x): συνάρτηση υπολογισμού του ημιτόνου. Παίρνει σαν όρισμα την γωνία x και επιστρέφει το ημίτονο. Προσοχή: η γωνία δίνεται σε ακτίνια και όχι σε μοίρες. π.χ. οι 360 ο = 2π ακτίνια. double cos(double x): συνάρτηση υπολογισμού του συνημίτονου. Παίρνει σαν όρισμα την γωνία x και επιστρέφει το συνημίτονο. double tan(double x): συνάρτηση υπολογισμού της εφαπτομένης. Παίρνει σαν όρισμα την γωνία x και επιστρέφει την εφαπτομένη. double log(double x): υπολογισμός του φυσικού λογάριθμου (lnx). H βάση του φυσικού λογάριθμου είναι το e=2.718. Το x πρέπει να είναι μεγαλύτερο του μηδέν. double log10(x): υπολογισμός του λογάριθμου με βάση το 10. Το x πρέπει να είναι μεγαλύτερο του μηδέν. double pow(double x, double y): Υπολογίζει τη δύναμη x y. Η συνάρτηση παράγει λάθος εάν το x=0 και y 0 ή x<0 και το y δεν είναι ακέραιος. double sqrt(double x): Επιστρέφει την τετραγωνική ρίζα του x. Το x θα πρέπει να είναι μεγαλύτερο του μηδέν. double ceil(double x): Επιστρέφει το πάνω ακέραιο μέρος του x. double floor(double x): Επιστρέφει το κάτω ακέραιο μέρος του x. double fabs(double x): Επιστρέφει την απόλυτη τιμή του x. double ldexp(double x, int n): Επιστρέφει την μαθηματική έκφραση x * 2 n. #include <math.h> #define PI 3.14159265 void main() double x, aktinia, result; x = 45.0; // gwnia se moires aktinia = x * PI / 180; // metatropi gwnias se aktinia result = sin(aktinia); printf("to hmitono twn %lf moirwn einai %lf", x, result); Στην οθόνη του υπολογιστή εμφανίζεται το παρακάτω αποτέλεσμα: To hmitono twn 45.000000 moirwn einai 0.707107 8/10

2. ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ 1. Να γραφεί μια συνάρτηση που καθορίζει για ένα ζεύγος ακεραίων αν ο δεύτερος ακέραιος είναι ακέραιο πολλαπλάσιο του πρώτου. Η συνάρτηση θα πρέπει να δέχεται δύο ακέραια ορίσματα και να επιστρέφει 1 (αληθές), αν το δεύτερο είναι ακέραιο πολλαπλάσιο του πρώτου και 0 (ψευδές) διαφορετικά. Να χρησιμοποιήσετε την συνάρτηση σε ένα πρόγραμμα για τέσσερα διαφορετικά ζεύγη ακεραίων και να τυπώνετε κατάλληλο μήνυμα στην οθόνη του υπολογιστή. 2. Να γραφεί μια συνάρτηση με το όνομα reverse_int που να δέχεται σαν όρισμα έναν ακέραιο αριθμό και να τον αντιστρέφει. (Π.χ. Η συνάρτηση να δέχεται τον ακέραιο αριθμό 3678 και να επιστρέφει τον αριθμό 8763). Να καλέσετε τη συνάρτηση reverse_int στο πρόγραμμα main για 5 διαφορετικούς αριθμούς (που θα δίνονται από τον χρήστη μέσω του πληκτρολογίου) και να τυπώσετε τα αποτελέσματα. 3. Να γραφεί πρόγραμμα που παίρνει την ώρα με την μορφή τριών ακεραίων ορισμάτων (για τις ώρες, τα λεπτά και τα δευτερόλεπτα) και επιστρέφει τον αριθμό των δευτερολέπτων που πέρασαν από την τελευταία φορά που το ρολόι έδειξε 12. Να χρησιμοποιήσετε τη συνάρτηση για τον υπολογισμό του χρόνου σε δευτερόλεπτα 5 διαφορετικών χρονικών στιγμών. 4. Να δημιουργήσετε μια συνάρτηση που να δέχεται σαν όρισμα ένα πίνακα ακεραίων και το μέγεθος του και να επιστρέφει το μικρότερο στοιχείο του. Καλέστε τη συνάρτηση για ένα πίνακα 10 στοιχείων και ένα πίνακα 20 στοιχείων που θα έχετε αρχικοποιήσει στην main() και εμφανίστε τα αποτελέσματα. 5. Να δημιουργήσετε μια συνάρτηση που να δέχεται σαν όρισμα ένα πίνακα ακεραίων και το μέγεθος του και θα τον αντιστρέφει (δηλαδή το 1 ο στοιχείο να γίνει τελευταίο). Καλέστε τη συνάρτηση για ένα πίνακα 10 στοιχείων και ένα πίνακα 20 στοιχείων που θα έχετε αρχικοποιήσει στην main() και εμφανίστε τον αντεστραμμένο πίνακα. 6. Να δημιουργήσετε μια συνάρτηση η οποία θα δέχεται σαν όρισμα έναν θετικό ακέραιο και θα εκτυπώνει τον αντίστοιχο αριθμό Fibonacci. Η ακολουθία Fibonacci είναι η 0,1,1,2,3,5,8,13,21, κοκ όπου κάθε όρος της ακολουθίας ισούται με το άθροισμα των δύο προηγούμενων. Έτσι αν ζητήσουμε από την συνάρτηση τον 7 ο όρο θα πρέπει να μας επιστρέψει το 8. Υπόδειξη: Θα πρέπει να σχεδιάσετε μια συνάρτηση χρησιμοποιώντας αναδρομή. 7. Να γραφεί πρόγραμμα που να επιλύει μία εξίσωση δευτέρου βαθμού, ax 2 + bx + c = 0. Να θεωρήσετε ότι τα a, b και c είναι ακέραιοι αριθμοί που δίνονται από τον χρήστη. 8. Να ορίσετε μια συνάρτηση hypotenuse που υπολογίζει το μήκος της υποτείνουσας ενός ορθογώνιου τριγώνου όταν δίνονται όλες οι άλλες πλευρές του. Να χρησιμοποιήσετε αυτήν τη συνάρτηση για να καθορίσετε το μήκος της υποτείνουσας για καθένα από τα ακόλουθα τρίγωνα. Τρίγωνο Πλευρά 1 Πλευρά 2 1 3.0 4.0 2 5.0 12.0 3 7.0 15.0 9. Δημιουργήστε πρόγραμμα C που να διαβάζει από το πληκτρολόγιο τις ηλικίες 90 ανθρώπων (επιτρεπόμενες τιμές μεταξύ 1-110) και να τις αποθηκεύει σε ένα πίνακα. Στη συνέχεια να υπολογίζει και να εκτυπώνει το μέσο όρο ηλικίας, την μικρότερη ηλικία και το πλήθος των ανήλικων. Ο υπολογισμός των παραπάνω στοιχείων να γίνεται με ξεχωριστές συναρτήσεις στις οποίες θα περνάτε ως παραμέτρους τον πίνακα και το μέγεθός του, ενώ η εκτύπωση των στοιχείων να γίνεται στη main(). 9/10

10. Δημιουργήστε πρόγραμμα C που να διαβάζει τους μισθούς 50 υπαλλήλων (επιτρεπόμενες τιμές μεταξύ 500-3000 ), να τους αποθηκεύει σε ένα πίνακα ακεραίων. Στη συνέχεια υλοποιήστε μία συνάρτηση που να υπολογίζει και να επιστρέφει τον μέγιστο και τον ελάχιστο μισθό. Υπόδειξη: Για την επιστροφή δύο τιμών κάντε χρήση δεικτών στις παραμέτρους. 10/10