Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Κεφάλαιο 8 Προχωρημένα Θέματα Προγραμματισμού C Γιώργος Γιαγλής
2
Περίληψη Κεφαλαίου 8 Προχωρημένα Θέματα Προγραμματισμού C Πίνακες
Ανάθεση τιμών στα στοιχεία μονοδιάστατου πίνακα Εκτύπωση στοιχείων μονοδιάστατου πίνακα Πολυδιάστατοι Πίνακες Ανάθεση τιμών στα στοιχεία πολυδιάστατου πίνακα Εκτύπωση στοιχείων πολυδιάστατου πίνακα Αλγόριθμοι αναζήτησης σε πίνακες Γραμμική Αναζήτηση Δυαδική Αναζήτηση Αλγόριθμοι ταξινόμησης σε πίνακες Ταξινόμηση με επιλογή Ταξινόμηση φυσαλίδας Δομές Εγγραφές ή Δομές Πίνακες Δομών
3
Πίνακες Απόδοση αρχικών τιμών:
Ένας πίνακας (array) είναι μια σύνθετη δομή δεδομένων ομογενής δομή δεδομένων (στοιχεία του ίδιου τύπου) στατική δομή δεδομένων (έχει σταθερό μέγεθος) Δήλωση πίνακα (Τύπος στοιχείων, Όνομα Πίνακα, Πλήθος Στοιχείων σε κάθε Διάσταση) Αναφορά σε στοιχείο του Πίνακα: όνομα του πίνακα και τη θέση του στοιχείου μέσα σε αγκύλες ΠΡΟΣΟΧΗ: η αρίθμηση των στοιχείων ενός πίνακα στη C αρχίζει πάντα από το στοιχείο μηδέν Απόδοση αρχικών τιμών: μέσα στο πρόγραμμα για κάθε στοιχείο ξεχωριστά κατά τη δήλωση του πίνακα συγκεντρωτικά για όλα τα στοιχεία του int pin [4] Ορισμός ενός πίνακα 4 ακέραιων στοιχείων float arr[10][5] Ορισμός ενός δισδιάστατου πίνακα 10*5 πραγματικών αριθμών pin[0] Αναφορά στο στοιχείο που βρίσκεται στη θέση 0 του πίνακα pin arr[0][0] Αναφορά στο πρώτο στοιχείο του πίνακα arr int pin[5]={1,7,22,35,59};
4
Αλγόριθμοι Αναζήτησης
Πολλές φορές αναζητούμε ένα συγκεκριμένο από τα πολλά στοιχεία ενός πίνακα. Οι αλγόριθμοι αναζήτησης εντοπίζουν τη θέση του στοιχείου με την επιθυμητή τιμή αν υπάρχει. Αν δεν υπάρχει κανένα στοιχείο με την τιμή αυτή τυπώνουν αντίστοιχο μήνυμα Χαρακτηριστικοί Αλγόριθμοι Αναζήτησης σε Πίνακες Γραμμική Αναζήτηση Δυαδική Αναζήτηση
5
Αλγόριθμοι Αναζήτησης
Γραμμική Αναζήτηση ξεκινάει από το πρώτο στοιχείο του πίνακα και ελέγχει ένα-ένα τα στοιχεία μέχρι είτε να βρεθεί το ζητούμενο είτε να τελειώσει ο πίνακας Δεν αποτελεί αποδοτικό αλγόριθμο: Σε ένα πίνακα μεγέθους Ν απαιτούνται N/2 συγκρίσεις main() /* αλγόριθμος γραμμικής αναζήτησης της θέσης του στοιχείου x σε πίνακα με το όνομα pin μεγέθους Ν ακέραιων στοιχείων */ {int pin[N], x, i; i=0; /* ξεκινάμε από το πρώτο στοιχείο του πίνακα */ while ((i<N) && (pin[i]!=x)) /* όσο δεν έχει τελειώσει ο πίνακας και δεν έχουμε βρει το ζητούμενο στοιχείο */ i++; /* αυξάνουμε το μετρητή και προχωράμε στο επόμενο στοιχείο */ if (pin[i]==x) /* αν έχουμε βρει το στοιχείο */ printf(“Το στοιχείο πρωτοεμφανίζεται στη θέση %d”,i); else printf(“Το στοιχείο δεν υπάρχει στον πίνακα”); }
6
Αλγόριθμοι Αναζήτησης
Δυαδική Αναζήτηση Πραγματοποιεί διαδοχικές «διασπάσεις» του πίνακα στη μέση, ώστε μετά από κάθε σύγκριση να έχει απομείνει ο μισός αριθμός στοιχείων για έλεγχο Σε περίπτωση ταξινομημένου πίνακα, επιταχύνεται η διαδικασία της αναζήτησης Περίπτωση αναζήτησης σε πίνακα με στοιχεία ταξινομημένα σε αύξουσα σειρά Σύγκριση του ζητούμενο στοιχείου με τη μεσαία θέση του πίνακα Αν είναι μικρότερο, τότε γνωρίζουμε ότι το στοιχείο που ζητάμε βρίσκεται στο πρώτο μισό του πίνακα Σύγκριση του στοιχείου με το μεσαίο στοιχείο του υποπίνακα που απομένει κοκ
7
Αλγόριθμοι Αναζήτησης
Δυαδική Αναζήτηση Παράδειγμα Έστω πίνακας 10 θέσεων ταξινομημένος σε φθίνουσα σειρά, όπως φαίνεται παρακάτω, και έστω ότι αναζητούμε το στοιχείο με τιμή 30 στον πίνακα αυτό Αναζήτηση του μεσαίου στοιχείου → θέση 4, τιμή 84 Σύγκριση με ζητούμενο → 30<84 Άρα το στοιχείο βρίσκεται στο δεξί τμήμα του πίνακα(θέση 5 έως θέση 9) Αναζήτηση του μεσαίου στοιχείου → θέση 7, τιμή 30 Σύγκριση με ζητούμενο → 30=30 Τερματισμός Αλγορίθμου Η ίδια διαδικασία ακολουθείται και σε περιπτώσεις που ψάχνουμε ένα στοιχείο που δεν υπάρχει θέση 1 2 3 4 5 6 7 8 9 στοιχεία 200 165 117 109 84 74 57 30 26 19
8
Αλγόριθμοι Αναζήτησης
Δυαδική Αναζήτηση main() /* αλγόριθμος δυαδικής αναζήτησης της θέσης του στοιχείου x σε ταξινομημένο σε αύξουσα σειρά πίνακα με το όνομα pin μεγέθους Ν ακέραιων στοιχείων */ {int pin[N], x; int lower, upper; /* το κάτω και το πάνω όριο του υποπίνακα */ int mesaio; /* το μεσαίο στοιχείο του υποπίνακα */ lower=0; upper=N-1 /* ξεκινάμε από τα όρια του πίνακα */ mesaio=(lower+upper)/2; while ((pin[mesaio]!=x) && (lower<=upper)) /* όσο δεν έχουμε βρει το ζητούμενο στοιχείο και δεν έχει εξαντληθεί ο υποπίνακας */ {if (pin[mesaio]<x); /* αν το μεσαίο στοιχείο είναι μικρότερο του ζητούμενου */ lower=mesaio+1; /* συνεχίζουμε στο πάνω μισό του πίνακα */ else /* αλλιώς */ upper=mesaio-1; /* συνεχίζουμε στο κάτω μισό του πίνακα */ } if (pin[mesaio]==x) /* αν έχουμε βρει το στοιχείο */ printf(“Το στοιχείο πρωτοεμφανίζεται στη θέση %d”,mesaio); else printf(“Το στοιχείο δεν υπάρχει στον πίνακα”);
9
Αλγόριθμοι Ταξινόμησης
Σε πολλές περιπτώσεις, η ταξινόμηση είναι ένα καλό (ή απαραίτητο!) πρώτο βήμα πριν την αναζήτηση Ταξινόμηση εντός του ίδιου πίνακα με αμοιβαίες αντιμεταθέσεις των στοιχείων του Αλγόριθμοι ταξινόμησης σε μονοδιάστατους πίνακές Ταξινόμηση με επιλογή Ταξινόμηση φυσαλίδας
10
Αλγόριθμοι Ταξινόμησης
Ταξινόμηση με επιλογή Διατρέχει όλα τα στοιχεία ενός πίνακα Βρίσκει κάθε φορά το μικρότερο (αν θέλουμε ταξινόμηση σε αύξουσα σειρά) το μεγαλύτερο (αν θέλουμε ταξινόμηση σε φθίνουσα σειρά) Αντιμεταθέτει με το πρώτο στοιχείο που δεν έχει ελεγχθεί ακόμα Η διαδικασία αυτή εκτελείται Ν-1 φορές για ένα πίνακα Ν στοιχείων και όταν τελειώσει, ο πίνακας είναι ταξινομημένος
11
Αλγόριθμοι Ταξινόμησης
Ταξινόμηση με επιλογή main() /* αλγόριθμος ταξινόμησης με επιλογή σε αύξουσα σειρά πίνακα με το όνομα pin μεγέθους Ν ακέραιων στοιχείων */ {int pin[N]; int elaxisto, thesi; /* ελάχιστο κάθε φορά στοιχείο και η θέση του */ int i, k, temp; /* βοηθητικές μεταβλητές */ for (i=0;i<N-1;i++) /* η διαδικασία εκτελείται Ν-1 φορές */ {elaxisto=pin[i]; thesi=i; /* θέτουμε αρχικά ως ελάχιστο το στοιχείο εκκίνησης */ for (k=i+1; k<N; k++) /* ελέγχουμε όλα τα υπόλοιπα στοιχεία */ if (pin[k]<min) /* αν το στοιχείο είναι μικρότερο του ελάχιστου */ {elaxisto=pin[i]; thesi=i;} /* θέσε το στοιχείο ως νέο ελάχιστο */ temp=pin[i]; pin[i]=p[thesi]; p[thesi]=temp; /* 3 εντολές για την αντιμετάθεση */ }
12
Αλγόριθμοι Ταξινόμησης
Ταξινόμηση φυσαλίδας Διατρέχει τα στοιχεία ενός πίνακα Συγκρίνει ανά δυο γειτονικά αντιμεταθέτοντάς τα αν δεν είναι σε σωστή σειρά Μετά από Ν-1 διαπεράσεις, ο πίνακας είναι ταξινομημένος
13
Αλγόριθμοι Ταξινόμησης
main() /* αλγόριθμος ταξινόμησης φυσαλίδας σε αύξουσα σειρά πίνακα με το όνομα pin μεγέθους Ν ακέραιων στοιχείων */ {int pin[N]; int i, k, temp; /* βοηθητικές μεταβλητές */ for (i=0;i<N-1;i++) /* η διαδικασία εκτελείται Ν-1 φορές */ for (k=Ν-1; k>i; k--) /* ελέγχουμε όλα τα στοιχεία από το τέλος μέχρι το τρέχον */ if (pin[k]<pin[k-1) /* αν ένα στοιχείο είναι μικρότερο του προηγούμενου του */ {temp=pin[k]; pin[k]=p[k-1]; p[k-1]=temp; /* αντιμετάθεσε τα */ }
14
Εγγραφές-Δομές Κάθε Εγγραφή στη C ονομάζεται Δομή
σύνθετη δομή δεδομένων ετερογενής δομή δεδομένων (ομαδοποιεί στοιχεία διαφορετικών τύπων) Κάθε στοιχείο μιας εγγραφής ονομάζεται πεδίο (field) και χαρακτηρίζεται από το όνομα του και τον τύπο του Ορίζεται με την ειδική λέξη struct Παράδειγμα, ο τύπος της δομής των στοιχείων ενός φοιτητή struct ΌνομαΔομής { Τύπος1 Πεδίο1.1, Πεδίο1.2, ...; Τύπος2 Πεδίο2.1, Πεδίο2.2, ...; ... } struct StoixeiaFoithth { char AM[9], Onoma[20], Epwnymo[30]; float MesosOros; }
15
Εγγραφές-Δομές Δομή με στοιχεία Φοιτητή
Προσοχή: Δεν ορίζει καμία μεταβλητή και δε δεσμεύει χώρο στη μνήμη. Ορίζει μόνο τη μορφή της δομής, δηλαδή την οργάνωση της σε πεδία. Ορισμός Μεταβλητών: ειδική λέξη struct ακολουθούμενη από το όνομα της δομής και τα ονόματα των μεταβλητών Αναφορά σε συγκεκριμένο πεδίο μιας μεταβλητής δομής: με τη χρήση του τελεστή . (τελεία), οποίος διαχωρίζει το όνομα της μεταβλητής και το όνομα του πεδίου π.χ. απόδοση αρχικών τιμών σε στοιχεία της μεταβλητής δομής Foithths1 struct StoixeiaFoithth { char AM[9], Onoma[20], Epwnymo[30]; float MesosOros; } struct StoixeiaFoithth Foithths1, Foithths2, Foithths3; Foithths1.AM = ” ”; Foithths1.MesosOros = 9.5;
16
Πίνακες Δομών (Βάσεις Δεδομένων)
Πίνακας Δομών: Ένας πίνακας του οποίου τα στοιχεία είναι Δομές Αποτελεί μια Βάση Δεδομένων Παράδειγμα: Βάση Δεδομένων για την αποθήκευση στοιχείων 100 φοιτητών struct StoixeiaFoithth { char AM[9], Onoma[20], Epwnymo[30]; float MesosOros; }; struct StoixeiaFoithth Foithtes[100];
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.