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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 4η Διάλεξη Πίνακες Συναρτήσεις

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

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

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

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

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

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

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

ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων

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

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

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

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

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

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

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

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

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

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

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

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

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

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

Παραδείγματα με συναρτήσεις στη C

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

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

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

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

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

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

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

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

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

Transcript:

ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy

Κεφάλαιο 13 Πίνακες & Συναρτήσεις

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

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

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

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

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

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

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

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

Παράδειγμα 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 y( (array, 6);

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

Παράδειγμα 2 #include <stdio.h> float avg(int [ ], int ); main ( ) { int array[]= {123456; {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;

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

Παράδειγμα 3 int selective_sum(int 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

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

Παράδειγμα 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

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

Παράδειγμα 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 ]) ;

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

Παράδειγμα 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 // Εκτύπωση αποτελεσμάτων gradecount PrintResults (average, gradecount) ; return 0;

Τέλος 13 ου Κεφαλαίου