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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

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

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

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

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

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

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 1. Structural Programming

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

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

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

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

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

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

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

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

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

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

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

Αξιοποίηση Η/Υ και Πληροφορικής στην Μηχανική

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

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

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

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

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

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

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

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

4.3. Γραµµικοί ταξινοµητές

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

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Transcript:

Κεφάλαιο 8.6 Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 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

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

π.χ 1) Παράλληλοι Πίνακες Περισσότεροι από ένα µονοδιάστατους πίνακες, όπου κάθε δείκτης i αναφέρετε στα στοιχεία ενός κοινού αντικειµένου. #define STUDENT_NUM 55 int student_id[student_num]; float student_grade[student_num]; int student_id[i] περιέχει αρ. ταυτότητας του i float student_grade[i] περιέχει τον βαθµό του φοιτητή i. 2 παράλληλοι πίνακες 16-4

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

1) Παράλληλοι Πίνακες #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

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

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

#include <stdio.h> 2) Γραµµική αναζήτηση (Linear Search) - Υλοποίηση #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; if (i==student_num) printf("not FOUND"); else printf("found at position:%d", i); Ψάχνει τον φοιτητή µε την ταυτότητα z. Αν υπάρχει τέτοιος φοιτητής εκτυπώνει την θέση του στον πίνακα, ειδ αλλιώς µήνυµα λάθους. 16-10

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

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

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

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

5) Υλοποίηση Selection Sort #include <stdio.h> #define SIZE 1 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

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