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

Σχετικά έγγραφα
Κεφάλαιο 8.6. Πίνακες ΙI (Διάλεξη 17)

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

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

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

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

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

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

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

Εργαστηριακή Άσκηση 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

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

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

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

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

C: Από τη Θεωρία στην Εφαρμογή

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

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

i : 0<=i<N-1 => data[i] <= data[i+1] 25/10/2009

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

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

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

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

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

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

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

Εργαστήριο 2: Πίνακες

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

242 -ΕισαγωγήστουςΗ/Υ

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

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

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

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

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Δείκτες & Πίνακες Δείκτες, Πίνακες

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Ηλεκτρονικοί Υπολογιστές

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

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

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

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

Προγραμματισμός I (Θ)

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

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

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

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

Διάλεξη 5η: Εντολές Επανάληψης

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

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

Σημειώσεις δεύτερης εβδομάδας

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Τετάρτη 7/12/2016, 21:00

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

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

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Στόχοι και αντικείμενο ενότητας. Βασικές κατασκευές ΓΠ. Έλεγχος ροής προγράμματος. #4.. Εντολές Επιλογής

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

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

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

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

Εισαγωγή στον δομημένο προγραμματισμό

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

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

Transcript:

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

Κεφάλαιο 11 Πίνακες ΙΙ

Πίνακες - Επανάληψη Στην προηγούμενη διάλεξη κάναμε μια εισαγωγή στην δομή δεδομένων Πίνακας Σε ένα πίνακα ένα σύνολο αντικειμένων του ιδίου τύπου αποθηκεύονται σε σειρά, π.χ. int md[12]= {31,28,31,30,31,30,31; 30 30 31; τύπος όνομα md[0] md[1] md[2] md[11] Μέγεθος 31 τιμές (πλήθος ή ς στοιχείων 31 31 28

Εφαρμογές Πινάκων (Arrays) Σήμερα θα δούμε τις εξής εφαρμογές: 1. Παράλληλοι Πίνακες 2. Γραμμική Αναζήτηση (Linear Search) 3. Γραμμική Αναζήτηση η & Ενημέρωση η 4. Μέτρηση Στοιχείων που ικανοποιούν κάποια συνθήκη. 5. Αλγόριθμος Ταξινόμησης Πίνακα Selection-Sort

1) Παράλληλοι Πίνακες Περισσότεροι ρ από ένα μονοδιάστατους πίνακες, όπου κάθε δείκτης i αναφέρετε στα στοιχεία ενός κοινού αντικειμένου. π.χ. #define STUDENT_NUM 55 int student_id[student_num]; 2 παράλληλοι πίνακες float student_g grade[student _ NUM]; int student_id[i] περιέχει αρ. ταυτότητας του i float student grade[i] περιέχει τον βαθμό oat stude t_g ade[ ] ερ έχε ο βαθμό του φοιτητή i.

1) Παράλληλοι Πίνακες ηλαδή η αποθήκευση των πληροφοριών σε αυτούς τους πίνακες μοιάζει ως εξής: 0 student_id 12345 student_grade 1 37349 1 2 9995 2...... 54 20001 54 7.8 0 2.12 614 6.14 4.56

1) Παράλληλοι λ Πίνακες Παράδειγμα Εκτύπωσης στοιχείων 2 Πινάκων #include <stdio.h> #define STUDENT_NUM 3 int main() { int i; int student_id[]={12345, 37349, 9995; float student_grade[]={90.3,78.2,45.3; for(i=0;i<student_num;i++){ printf("student with id: %d, grade: %f\n", student_id[i], student_grade[i]); Εκτυπώνει Student with id: 12345, grade: 90.300003 Student with id: 37349, grade: 78.199997 Student with id: 9995, grade: 45.299999

1) Παράλληλοι Πίνακες Θα μπορούσα να είχα περισσότερους από 2 πίνακες. π.χ. #define STUDENT_NUM NUM 55 int student_id[student_num]; float student_grade[student_num]; int student_age[student_num]; int student_year[student_num]; char student_ sex[student[ _ NUM];..

2) Γραμμική αναζήτηση (Linear Search) Γράψετε τμήμα προγράμματος που αναζητά μέσα στον πίνακα ακέραιων στοιχείων student_id την θέση που περιέχει την τιμή z. ηλαδή ψάχνουμε να βρούμε αν υπάρχει μια συγκεκριμένη ταυτότητα στον πίνακα ταυτοτήτων. Το μέγεθος του πίνακα ορίζεται με την σταθερά STUDENT_NUM. Αν δεν βρεθεί το στοιχείο το πρόγραμμα να εκτυπώνει μήνυμα λάθους, αν βρεθεί επιστρέφει την θέση i στην οποία βρέθηκε.

2) Γραμμική αναζήτηση (Linear Search) Τι πρέπει να γίνει; student_ id Αναζήτηση 0 12345 Ψευδοκώδικας 1 37349 για κάθε στοιχείο του πίνακα 2 9995 Κόστος εάν είναι ίσο με z φύλαξε θέση τερμάτισε επανάληψη... 54 20001 στην χειρότερη περίπτωση εξέταση όλων των στοιχείων του πίνακα Στην καλύτερη περίπτωση βρίσκουμε το στοιχείο στην πρώτη θέση.

2) Γραμμική αναζήτηση (Linear Search) - Υλοποίηση #include <stdio.h> #define STUDENT_NUM 3 // Εδώ χρησιμοποιούμε μόνο 3 φοιτητές αντί 54 int main() { int i; int student_id[]={12345, 37349, 9995; int z = 98995; for(i=0; i<student_num; i++) if (student_id[i]==z) Ψάχνει τον φοιτητή με την ταυτότητα break; z. Αν υπάρχει τέτοιος φοιτητής if (i==student_num) εκτυπώνει την θέση του στον printf("not FOUND"); πίνακα, ειδ αλλιώς μήνυμα λάθους. else printf("found at position:%d", i);

3) Γραμμική Αναζήτηση & Ενημέρωση Υποθέστε ύπαρξη δυο παράλληλων πινάκων με ίδιο μέγεθος (student_id και student_grade) Γράψετε πρόγραμμα που αναζητά μέσα στον student_id τον φοιτητή με αριθμό ταυτότητας id και ενημερώνει στον student_grade την βαθμολογία (του φοιτητή id) με την τιμή 100 Αν δεν υπάρχει ο συγκεκριμένος φοιτητής δώστε το κατάλληλο μήνυμα λάθους

3) Γραμμική Αναζήτηση & Ενημέρωση #include <stdio.h> #define STUDENT_NUM 3 // Εδώ χρησιμοποιούμε μόνο 3 φοιτητές αντί 54 int main() { int i; int student_id[]={12345, 37349, 9995; float student_grade[]={90.3,78.2,45.3; int id = 9995; for(i=0; i<student_num; i++) { if (student_id[i]==id) { student_grade[i]=100; break; if (i==student_num){ printf("not t FOUND\n"); else{ printf("record Updated at position:%d\n", i); for(i=0;i<student_num;i++) printf("student with id: %d, grade: %f\n", student_id[i], student_grade[i]);

3) Γραμμική Αναζήτηση & Ενημέρωση Αποτέλεσμα του προγράμματος της προηγούμενης διαφάνειας: Record Updated at position:2 Student with id: 12345, grade: 90.300003 Student with id: 37349, grade: 78.199997 Student with id: 9995, grade: 100.000000 Τι θα αλλάζαμε αν θέλαμε να δώσουμε σε όλους με βαθμό από 93 και πάνω την τιμή 100.

4) Μέτρηση Στοιχείων Γράψετε ένα πρόγραμμα που υπολογίζει και επιστρέφει των αριθμών φοιτητών που παίρνουν βαθμό από 80 και πάνω. Οι βαθμοί είναι αποθηκευμένοι σε πίνακα. #define SIZE 3 float student_grade[]={90.3,78.2,45.3; Το μέγεθος του πίνακα περιέχεται στην παράμετρο ρ SIZE.

4) Μέτρηση Στοιχείων #include <stdio.h> #define STUDENT_NUM 3 int main() { int i; float student_grade[]={90.3,78.2,45.3; int count = 0; for(i=0; i<student_num; i++) { if (student_grade[i]>=80) { count++; printf("υπάρχουν %d φοιτητές me 80 και πάνω", count);

5) Αλγόριθμος Ταξινόμησης Πίνακα SelectionSort Μας δίδεται ένας πίνακας αριθμών. Θέλουμε να τον ταξινομήσουμε. Υπάρχουν πολλοί αλγόριθμοι. Ένας τέτοιος αλγόριθμος είναι ο SelectionSort. Η SelectionSort βασίζεται στα ακόλουθα τρία βήματα: 1. επιλογή του ελάχιστου στοιχείου 2. ανταλλαγή με το i-οστό στοιχείο (i είναι μια μεταβλητή που αυξάνεται κατά ένα). 3. επανάληψη των βημάτων 1 και 2 για τα υπόλοιπα στοιχεία.

5) Παράδειγμα Selection Sort Θέση 0 1 2 3 4 5 Αρχικός Πίνακας 34 8 64 51 32 33 Στοιχείο που θα εισαχθεί στην θέση i Με i=0 8 34 64 51 32 33 Με i=1 8 32 64 51 34 33 Με i=2 8 32 33 51 34 64 Με i=3 8 32 33 34 51 64 Με i=4 8 32 33 34 51 64 Τελικός Πίνακας 8 32 33 34 51 64

5) Υλοποίηση Selection Sort #include <stdio.h> #define SIZE 7 int main() { int A[ ]={34, 8, -21, 64, 51, 32, 33; int pos, temp; int i,j; for (i=0; i<size-1; i++) { // θέση επόμενου μικρότερου στοιχείου pos=i; // βρές το μικρότερο στοιχείο for (j = i+1; j < SIZE; j++) { if (A[j]<A[pos]) pos=j; // θέση μικρότερου // αντάλλαξε το A[i] με το A[pos] temp = A[i]; A[i] = A[pos]; A[pos] = temp; Στο τέλος μπορούμε να εκτυπώσουμε τον ταξινομημένο πίνακα // Εκτύπωση Πίνακα for (i=0; i<size; i++) { printf("%d, ", A[i]);

5) Εκτέλεση Selection Sort BEFORE:[8,4,8,43,3,5,2,1,10,] Swapping 8 <-> 1 [1,4,8,43,3,5,2,8,10,] Swapping 4 <-> 2 [1,2,8,43,3,5,4,8,10,] Swapping 8 <-> 3 [1,2,3,43,8,5,4,8,10,] Swapping 43 <-> 4 [1,2,3,4,8,5,43,8,10,] Swapping 8 <-> 5 [1,2,3,4,5,8,43,8,10,] Swapping 8 <-> 8 [1,2,3,4,5,8,43,8,10,] Swapping 43 <-> 8 [1,2,3,4,5,8,8,43,10,] Swapping 43 <-> 10 [1,2,3,4,5,8,8,10,43,] AFTER:[1,2,3,4,5,8,8,10,43,]

11 ο Κεφάλαιο Τέλος Μέρους 2