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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

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

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

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

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

Πίνακες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

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

Ενδεικτικές λύσεις και στατιστικά

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

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

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΡΤΙΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 6 (ΕΞΙ)

Δομές Δεδομένων & Αλγόριθμοι

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

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

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

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

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

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 8 Ασκήσεις Πινάκων Ταξινόμηση Αναζήτηση. Γιώργος Λαμπρινίδης

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

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

Προγραμματισμός HY: Γλώσσα Προγραμματισμού C

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

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

Transcript:

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

Εφαρμογές Πινάκων (Arrays) Σήμερα θα δούμε τις εξής εφαρμογές Πινάκων: 1. Παράλληλοι Πίνακες 2. Γραμμική Αναζήτηση (Linear Search) 3. Γραμμική Αναζήτηση & Ενημέρωση 4. Μέτρηση Στοιχείων που ικανοποιούν κάποια συνθήκη. 5. Αλγόριθμος Ταξινόμησης Πίνακα Selection-Sort 16-3 1) Παράλληλοι Πίνακες Περισσότεροι από ένα μονοδιάστατους πίνακες, όπου κάθε δείκτης i αναφέρετε στα στοιχεία ενός κοινού αντικειμένου. 2 π.χ παράλληλοι πίνακες #define STUDENT_NUM 55 int student_id[student_num]; float student_grade[student_num]; int student_id[i] περιέχει αρ. ταυτότητας του i float student_grade[i] περιέχει τον βαθμό του φοιτητή i. 16-4 2

1) Παράλληλοι Πίνακες Δηλαδή η αποθήκευση των πληροφοριών σε αυτούς τους πίνακες μοιάζει ως εξής: 0 1 2... 54 student_id 12345 37349 9995 20001 student_grade 0 2.12 1 2... 54 6.14 4.56 7.8 16-5 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 16-6 3

1) Παράλληλοι Πίνακες Θα μπορούσα να είχα περισσότερους από 2 πίνακες. π.χ. #define STUDENT_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];.. 16-7 2) Γραμμική αναζήτηση (Linear Search) Γράψετε τμήμα προγράμματος που αναζητά μέσα στον πίνακα ακέραιων στοιχείων student_id την θέση που περιέχει την τιμή z. Δηλαδή ψάχνουμε να βρούμε αν υπάρχει μια συγκεκριμένη ταυτότητα στον πίνακα ταυτοτήτων. Το μέγεθος του πίνακα ορίζεται με την σταθερά STUDENT_NUM. Ανδενβρεθείτοστοιχείοτοπρόγραμμανα εκτυπώνει μήνυμα λάθους, αν βρεθεί επιστρέφει την θέση i στην οποία βρέθηκε. 16-8 4

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

3) Γραμμική Αναζήτηση & Ενημέρωση Υποθέστε ύπαρξη δυο παράλληλων πινάκων με ίδιο μέγεθος (student_id και student_grade) Γράψετε πρόγραμμα που αναζητά μέσα στον student_id τον φοιτητή με αριθμό ταυτότητας id και ενημερώνει στον student_grade την βαθμολογία (του φοιτητή id) με την τιμή 100 Αν δεν υπάρχει ο συγκεκριμένος φοιτητής δώστε το κατάλληλο μήνυμα λάθους 16-11 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 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]); 16-12 6

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

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

5) Παράδειγμα Selection Sort Θέση 0 1 2 3 4 5 Αρχικός Πίνακας 34 8 64 51 32 33 Με i=0 8 34 64 51 32 33 Στοιχείο που θα εισαχθεί στην θέση i Με 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 16-17 #include <stdio.h> #define SIZE 7 5) Υλοποίηση Selection Sort 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]); 16-18 9

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,] 16-19 10