Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Σχετικά έγγραφα
Μεθόδων Επίλυσης Προβλημάτων

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις (Διάλεξη 18)

16. Πίνακεσ και Συναρτήςεισ

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

ΗΥ-150. Πίνακες (Arrays)

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

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

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

ΗΥ-150. Προγραµµατισµός. Πίνακες (Arrays)

Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων. 14. Πίνακες Ι. Ιωάννης Κατάκης. ΕΠΛ 032: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων

Διάλεξη 9η: Πίνακες (arrays)

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

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

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Οι δείκτες στη γλώσσα C

scanf() scanf() stdin scanf() printf() int float double %lf float

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

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Επεξεργασία Αρχείων Κειµένου

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

Διάλεξη 5: Δείκτες και Συναρτήσεις

Επανάληψη για τις Τελικές εξετάσεις

Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

είκτες και Πίνακες (2)

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

printf Οι κωδικοί (format codes) του printf για διάφορους τύπους δεδοµένων είναι:

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

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

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Διάλεξη 11η: Δείκτες, μέρος 1

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

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

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

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

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

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

H ΓΛΩΣΣΑ C. Μάθηµα 8: είκτες. ηµήτρης Ψούνης

Προγραμματισμός Ι (ΗΥ120)

Η βασική λειτουργία σε όλες αυτές τις συναρτήσεις είναι η εκτύπωση γραµµών.

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

Επανάληψη. Εντολές while, for, do-while

CE 120. Φροντιστήριο 14/10/2011

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

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

Προγραμματισμό για ΗΜΥ

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

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

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

Εισαγωγή στους πίνακες

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

Προγραμματισμό για ΗΜΥ

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

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

Γλώσσες Προγραμματισμού

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

Να εκτυπωθούν οι πρώτες Ν σειρές του τριγώνου, χρησιµοποιώντας ένα πίνακα µεγέθους Ν στοιχείων (η Ν-οστή σειρά περιέχει Ν στοιχεία).

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

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

Κεφάλαιο 8.6. Πίνακες ΙI (Διάλεξη 17)

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

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

Transcript:

Κεφάλαιο 8.7 Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 17-1

Εισαγωγή Στις προηγούµενες διαλέξεις µάθαµε πώς να δηλώνουµε, αρχικοποιούµε και να επεξεργαζόµαστε πίνακες. Σήµερα θα µελετήσουµε πως µπορούµε να περάσουµε ένα πίνακα σε µια συνάρτηση. Αυτό είναι χρήσιµο διότι µας επιτρέπει να επωφεληθούµε όλων των πλεονεκτηµάτων των συναρτήσεων όταν χρησιµοποιούµε πίνακες. Σήµερα θα δούµε: 1) Κλήση µε Τιµή 2) Κλήση µε Αναφορά 3) Πίνακες και Συναρτήσεις 4) Παραδείγµατα 17-2

1) Κλήση µε Τιµή Θυµηθείτε ότι όταν περάσουµε µια µεταβλητή (π.χ. int, char, float), σε µια συνάρτηση τότε δηµιουργείτε ένα αντίτυπο της µεταβλητής, το οποίο δεν έχει καµία σχέση µε την αρχική µεταβλητή. Αυτός ο τρόπος περάσµατος παραµέτρων ονοµάζεται : Κλήση µε τιµή (call by value) int main() { int a = 5; printf( Before:%d, After:%d, a, add(a)); function add(int x) { return x+4; a 5 5 x 9 17-3

1) Πέρασµα Παραµέτρου ια Τιµής Ησυνάρτηση έχει µία τοπική µεταβλητή για να αποθηκεύσει το δικό της αντίγραφο της τιµής που της δίνουµε Όταν κάνουµε αλλαγές στο αντίγραφο, η αρχική τιµή παραµένει η ίδια Αν θέλουµε να επιστρέψουµε τιµές πρέπει να χρησιµοποιήσουµε τη return Αυτό λέγεται κλήση µε τιµή (call by value) 17-4

2) Κλήση µε Αναφορά Τι γίνεται αν θέλουµε να περάσουµε ένα πίνακα σε µια συνάρτηση? Αν ο πίνακας περνούσε στην συνάρτηση µε τον ίδιο τρόπο που περνά η µεταβλητή (δηλαδή µε copy), τότε κάθε κάλεσµα θα σήµαινε την αντιγραφή ενός µεγάλου αριθµού στοιχείων => Αυτό θα ήταν Πολύ ακριβό. Αντί να δηµιουργείτε ένα νέο αντίγραφο, στην γλώσσα C όταν περνάµε ένα πίνακα σε µια συνάρτηση τότε περνά στην συνάρτηση µόνο η κάποια αναφορά στον πίνακα. Αυτό το κάλεσµα ονοµάζεται : Κλήση µε Αναφορά (call by reference) ηλαδή δεν γίνεται αντιγραφή των στοιχείων στην συνάρτηση Αυτό σηµαίνει ότι µπορούµε να αλλάζουµε τους πίνακες µέσα στις συναρτήσεις 17-5

2) Κλήση µε Αναφορά Η κλήση µε αναφορά δεν είναι κάτι νέο. Μπορεί να γίνει και µε κανονικές µεταβλητές. π.χ. δείτε το πιο κάτω παράδειγµα Κλήση µε Τιµή int change(int a) { a = 5; int main( ) { int a = 1; change(a); printf("%d", a); Εκτυπώνει «1» Κλήση µε Αναφορά για Μεταβλητές int change(int *a) { (*a) = 5; int main( ) { int a = 1; change(&a); printf("%d", a); Εκτυπώνει «5» εν χρειάζεται για το µάθηµα ηλαδή µπορούµε να αλλάξουµε το a χωρίς return 17-6

3) Πίνακες και Συναρτήσεις Χρησιµοποιούµε τις ακόλουθη σύνταξη όταν περνούµε πίνακες σε συναρτήσεις: Στο πρότυπο και τον ορισµό της συνάρτησης : void FillArray ( int array[ ], int size); ή void FillArray ( int [ ], int); Στην κλήση της συνάρτησης: FillArray ( array, size); 17-7

3) Πίνακες και Συναρτήσεις (Παραδειγµα) #include <stdio.h> #define SIZE 4 // Πρότυπο void FillArray (int[ ], int) ; main ( ) { int array [SIZE]; // Ορισµός Συνάρτησης void FillArray(int array[ ], int L) { int i; for ( i = 0; i < L; i++) { array [i] = i; // Κάλεσµα Συνάρτησης FillArray ( array, SIZE ); Κατακρίβειαν το SIZE µπορούσε να χρησιµοποιηθεί κατευθείαν εδώ (µιας και είναι καθολική µεταβλητή) Έξοδος array[0] = 0 array[1] = 1 array[2] = 2 array[3] = 3 17-8

Παράδειγµα 1 Γράψετε µια συνάρτηση η οποία αρχικοποιεί όλες τις θέσεις ενός πίνακα ακεραίων ARRAY µε µέγεθος SIZE, στην τιµή 0 17-9

Παράδειγµα 1 #include <stdio.h> void InitArray (int array [ ], int size) { int i; for ( i = 0; i < size; i++ ) { array [ i ] = 0 ; main ( ) { int array[]= {1,2,3,4,5,6; InitArray (array, 6); 17-10

Παράδειγµα 2 Γράψετε µια συνάρτηση η οποία λαµβάνει ως τιµή εισόδου ένα πίνακα ακεραίων, και το µέγεθος του πίνακα, και επιστρέφει σαν τιµή εξόδου τον µέσο όρο 17-11

Παράδειγµα 2 #include <stdio.h> float avg(int [ ], int ); main ( ) { int array[]= {1,2,3,4,5,6; printf("average: %f", avg(array, 6)); float avg(int array[ ], int L) { int i; int sum=0, count=0; for (i = 0; i < L; i++) { sum += array[i]; count++; return (float)sum/count; 17-12

Παράδειγµα 3 Γράψετε µια συνάρτηση η οποία επιστρέφει το άθροισµα των αριθµών µεταξύ των θέσεων [2..4] ενός πίνακα ακεραίων. Αν ο πίνακας περιέχει λιγότερα από 5 στοιχεία τότε εκτυπώνετε µήνυµα λάθους και επιστρέφει -1 η συνάρτηση Σηµείωση Η πρώτη θέση του πίνακα είναι 0. Π.χ. int array[]= {1,2,3,4,5,6; επιστρέφει 12 Π.χ. int array[]= {1,2,3; επιστρέφει -1 17-13

Παράδειγµα 3 int selective_sum(int array[ ], int L) { int i; int sum=0; if (L<5) { printf( Error ); return -1; for (i = 2; i <5; i++) { sum += array[i]; return sum; Π.χ. int array[]= {1,2,3,4,5,6; επιστρέφει 12 17-14

Παράδειγµα 4 Γράψετε µια συνάρτηση η οποία επιστρέφει το άθροισµα των περιττών θέσεων ενός πίνακα ακεραίων. Σηµείωση Η πρώτη θέση του πίνακα είναι 0. Εποµένως θέλουµε το άθροισµα των στοιχείων στις θέσεις 1, 3, 5, 17-15

Παράδειγµα 4 Τρόπος Α Τρόπος Β int oddsum(int array[ ], int L) { int i; int sum=0; int oddsum(int array[ ], int L) { int i; int sum=0; for (i = 0; i < L; i++) { if (i%2 == 1) { sum += array[i]; return sum; for (i = 1; i < L; i+=2) { sum += array[i]; return sum; Π.χ. int array[]= {1,2,3,4,5,6; επιστρέφει 12 17-16

Παράδειγµα 5 Γράψετε µια συνάρτηση η οποία παίρνει τις εξής παραµέτρους: Κάποιο πίνακα ακεραίων ARRAY, Το µέγεθος του πίνακα SIZE, Και στην συνέχεια ζητά από τον χρήστη να δώσει SIZE θετικούς ακεραίους >0, οι οποίοι αποθηκεύονται στον πίνακα ARRAY. 17-17

Παράδειγµα 5 void getvalues (int array [ ], int SIZE) { int i; for ( i = 0 ; i < SIZE ; i++) { printf ("Enter next value : ") ; scanf ("%d", &array[i] ) ; while ( array [ i ] < 1) { printf ("Values must be positive..."); printf ("Enter next value : ") ; scanf ("%d", &array[ i ]) ; 17-18

Παράδειγµα 6 Σκελετός Προγράµµατος #include <stdio.h> #define SIZE 39 #define GRADES 6 // Πρότυπα Συναρτήσεων void PrintInstructions (void) ; void InitArray (int array [ ], int size) ; void FillArray (int array [ ], int size) ; double ProcessGrades (int score [ ], int size, int gradecount [ ] ) ; double FindAverage (double sum, int num) ; void PrintResults (double average, int gradecount [ ] ) ; 17-19

Παράδειγµα 6 Σκελετός Προγράµµατος int main ( ) { int i, score [SIZE], gradecount [GRADES] ; double average; PrintInstructions ( ) ; // Εκτύπωση Οδηγιών InitArray (gradecount, GRADES) ; // Αρχικοποίηση πίνακα gradecount σε 0 FillArray (score, SIZE) ; // Εισαγωγή στοιχείων από χρήστη // εύρεση µέσου όρου, αλλαγή θέσεων gradecount από πίνακα score average = ProcessGrades (score, SIZE, gradecount ) ; // Εκτύπωση αποτελεσµάτων gradecount PrintResults (average, gradecount) ; return 0; 17-20