ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Να εξηγηθεί η σειριακή αναζήτηση. Η λειτουργία της αναζήτησης σε πίνακα είναι η εύρεση της θέσης στην οποία υπάρχει μια συγκεκριμένη τιμή που ενδιαφέρει το χρήστη. Οι πιο γνωστές μέθοδοι αναζήτησης είναι: Η σειριακή και, Η σειριακή μέθοδος είναι αρκετά απλή στην υλοποίηση αλλά όχι τόσο αποδοτική. Η δυαδική. Η δυαδική είναι πιο αποδοτική, αλλά απαιτεί να είναι ο πίνακας ταξινομημένος.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Να εξηγηθεί η σειριακή αναζήτηση. Σειριακή αναζήτηση =160????? Ας υποθέσουμε ότι έχουμε έναν πίνακα 10 στοιχείων. 1 2 3 4 5 6 7 8 9 10 27 76 5 6 7-2 160 4 4 16 Και έστω ότι θέλουμε να βρούμε τη θέση του πίνακα που υπάρχει η τιμή 160. Τα βήματα του αλγορίθμου της σειριακής αναζήτησης είναι: 1. Επισκεπτόμαστε το πρώτο στοιχείο του πίνακα. 2. Ελέγχουμε αν το στοιχείο του πίνακα ισούται με 160. Αν ναι, πάμε στο 4 ο βήμα. Αλλιώς στο 3 ο βήμα. 3. Υπάρχουν ακόμη στοιχεία στον πίνακα; Αν ναι τότε επισκεπτόμαστε το επόμενο στοιχείο και πάμε στο 2 ο βήμα. Αν δεν υπάρχουν για έλεγχο, η εκτέλεση του αλγορίθμου πηγαίνει στο 5 ο βήμα. 4. Η τιμή που αναζητούσαμε βρέθηκε και ο αλγόριθμος τερματίζει εμφανίζοντας τη θέση που βρέθηκε το στοιχείο. 5. Ο αλγόριθμος τερματίζει, γιατί εξετάσαμε όλα τα στοιχεία του πίνακα, και η τιμή που αναζητούσαμε δεν βρέθηκε.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Να εξηγηθεί η σειριακή αναζήτηση. 1 2 3 4 5 6 7 8 9 10 4 76 5 6 7-2 160 4 4 16 Η αναζήτηση της τιμής 160 είναι απλή, γιατί η τιμή 160 υπάρχει μόνο μία φορά στον πίνακα. Τι γίνεται όμως όταν στην περίπτωση που αναζητήσουμε την τιμή 4!!!!!! Ποια θέση θα εμφανίσουμε στο χρήστη; Την 1 η την 8 η ή την 9 η ; Η μέθοδος λοιπόν της σειριακής αναζήτησης μπορεί να χωριστεί σε 3 περιπτώσεις: 1. Εμφάνιση όλων των θέσεων που βρίσκεται το στοιχείο που αναζητούμε. 2. Εμφάνιση της πρώτης θέσης που βρίσκεται το στοιχείο που αναζητούμε. 3. Εμφάνιση της τελευταίας θέσης που βρίσκεται το στοιχείο που αναζητούμε.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Εμφάνιση όλων των θέσεων 1 2 3 4 5 6 7 8 9 10 4 76 5 6 7-2 160 4 4 16 Ο αλγόριθμος εμφανίζει όλες τις θέσεις. Με μία επανάληψη από το 1 έως το πλήθος των στοιχείων του μονοδιάστατου πίνακα. Συγκρίνουμε ένα προς ένα τα στοιχεία του πίνακα με το προς αναζήτηση στοιχείο. Δηλ αν το στοιχείο είναι ίσο με αυτό που αναζητούμε. Αν αυτό συμβαίνει τότε εμφανίζουμε τη θέση και πηγαίνουμε στο επόμενο. Αν δεν συμβαίνει τότε απλώς πηγαίνουμε στο επόμενο. Επίσης χρησιμοποιούμε μια βοηθητική μεταβλητή, την θέτουμε την τιμή Ψευδής πριν την επανάληψη. Αν κατά τον έλεγχο βρεθεί το στοιχείο, τότε εκχωρούμε στη λογική μεταβλητή την τιμή Αληθής. Αν στο τέλος της επανάληψης ηλογικήμεταβλητήείναι Αληθής, σημαίνει ότι βρέθηκε η τιμή που αναζητούμε στον πίνακα. Αν στο τέλος της επανάληψης ηλογικήμεταβλητήείναι Ψευδής, σημαίνει ότι δεν βρέθηκε η τιμή που αναζητούμε στον πίνακα.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Εμφάνιση όλων των θέσεων Αλγόριθμος Σειριακή_Αναζήτηση_Εμφάνιση_Όλων Ο αλγόριθμος είναι ο ακόλουθος: Εμφάνισε Δώσε τον πλήθος των στοιχείων του πίνακα. Διάβασε Ν Εμφάνισε Δώσε την τιμή χ του πίνακα που αναζητούμε. Διάβασε X Αλλιώς Για i από 1 μέχρι Ν γράφω Δεδομένα //Ν,Π,χ// Λογική Μεταβλητή Εμφάνισε Δώσε το στοιχείο, i Διάβασε Π[i] βρέθηκε Ψευδής Για i από 1 μέχρι Ν Αν Π[i] = Χ τότε Εμφάνισε Η τιμή βρέθηκε στη θέση, i βρέθηκε Αληθής Αν βρέθηκε = Ψευδής τότε Εμφάνισε Η τιμή δεν βρέθηκε στο πίνακα Τέλος Σειριακή_Αναζήτηση_Εμφάνιση_Όλων
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Εμφάνιση της πρώτης θέσης. Τροποποιούμε τον προηγούμενο αλγόριθμο, ώστε να τερματίζει όταν βρεθεί για πρώτη φορά το στοιχείο που αναζητούμε. Η τιμή που αναζητούμε μπορεί να υπάρχει σε οποιαδήποτε θέση του πίνακα. Ή μπορεί να μην υπάρχει κανστονπίνακα. Δηλ δεν γνωρίζουμε πόσα στοιχεία του πίνακα πρέπει να ελεγχθούν. Δεν γνωρίζουμε λοιπόν πόσες επαναλήψεις θα κάνουμε. Οπότε χρησιμοποιούμε τη δομή επανάληψης Όσο.επανέλαβε. Η επανάληψη θα τερματίζει είτε ότανβρεθεί η τιμή που αναζητούμε, είτε όταν η Λογική μεταβλητή γίνει Αληθής.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Εμφάνιση της πρώτης θέσης Αλγόριθμος Σειριακή_Αναζήτηση_Πρώτη_Εμφάνιση Ο αλγόριθμος είναι ο ακόλουθος: Εμφάνισε Δώσε τον πλήθος των στοιχείων του πίνακα. Διάβασε Ν Εμφάνισε Δώσε την τιμή X του πίνακα που αναζητούμε. Διάβασε X Αλλιώς Για i από 1 μέχρι Ν γράφω Δεδομένα //Ν,Π,χ// Όσο Τέλος Εμφάνισε Δώσε το στοιχείο, i Διάβασε Π[i] βρέθηκε Ψευδής i 1 i Νκαιβρέθηκε=Ψευδής επανέλαβε Αν Π[i] = X τότε Εμφάνισε Η τιμή βρέθηκε στη θέση, i βρέθηκε Αληθής i i+1 Αν βρέθηκε = Ψευδής τότε Εμφάνισε Η τιμή δεν βρέθηκε στο πίνακα Σειριακή_Αναζήτηση_Πρώτη_Εμφάνιση
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Εμφάνιση της τελευταίας θέσης. Στη περίπτωση αυτή πρέπει να επισκεφθούμε όλα τα στοιχεία του πίνακα. Για να βεβαιωθούμε ότι θα βρούμε την τελευταία θέση που υπάρχει η τιμή. Κάθε φορά που θα βρίσκουμε τη τιμή που ψάχνουμε θα την εκχωρούμε σε μια μεταβλητή που κρατά τη θέση που βρέθηκε η τιμή. Αν τη βρούμε στη θέση 1, θα εκχωρήσουμε στη μεταβλητή της θέσης την τιμή 1. Αν τη βρούμε στη θέση 17, θα εκχωρήσουμε στη μεταβλητή της θέσης την τιμή 17.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Εμφάνιση της τελευταίας θέσης Αλγόριθμος Σειριακή_Αναζήτηση_Τελευταία_Εμφάνιση Εμφάνισε Δώσε τον πλήθος των στοιχείων του πίνακα. Διάβασε Ν Εμφάνισε Δώσε την τιμή χ του πίνακα που αναζητούμε. Διάβασε X Αλλιώς Για i από 1 μέχρι Ν γράφω Δεδομένα //Ν,Π,χ// Εμφάνισε Δώσε το στοιχείο, i Διάβασε Π[i] Ο αλγόριθμος είναι ο ακόλουθος: Τέλος βρέθηκε Ψευδής Για i από 1 μέχρι Ν Αν Π[i] = X τότε θέση i βρέθηκε Αληθής Αν βρέθηκε = Ψευδής τότε Εμφάνισε Η τιμή δεν βρέθηκε στο πίνακα Αλλιώς Εμφάνισε Η τιμή βρέθηκε στο πίνακα στη θέση,θέση Σειριακή_Αναζήτηση_Τελευταία_Εμφάνιση
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Πότε δικαιολογείται η χρήση της σειριακής μεθόδου αναζήτησης; Η χρήση της σειριακής αναζήτησης δικαιολογείται όταν: 1. Ο πίνακας είναι μη-ταξινομημένος. 2. Ο πίνακας είναι μικρού μεγέθους. 3. Η αναζήτηση στον πίνακα γίνεται σπάνια.
3.17-3.32 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Ένα λογιστικό γραφείο διατηρεί μια λίστα με ονόματα πελατών και χρήματα σε Ευρώ που χρωστάει κάθε πελάτης. Ο ιδιοκτήτης του λογιστικού γραφείου επιθυμεί να καταχωρήσει τα στοιχεία των πελατών σε μια ή περισσότερες δομές και να μπορεί να εντοπίσει το όνομα του πελάτη που χρωστά τα περισσότερα χρήματα.ο λογιστής να μπορεί να δώσει όνομα ενός πελάτη και να εμφανίζονται τα χρήματα που οφείλει αν πράγματι είναι πελάτης, αλλιώς να εκτυπώνεται ότι ο πελάτης δεν υπάρχει. Αφού διαβαστούν οι δύο πίνακες, Όνομα και Χρήματα, οαλγόριθμοςθα διαβάζει το όνομα ενός πελάτη και θα το αναζητεί στον πίνακα με τα ονόματα. Πίνακας Ονομάτων Ζυγούρης Τσάκωνας Λαμπράκου Παπανικολάου Σακκάς Πίνακας Χρημάτων 1500 3000 200000 12000 55000 Αν είναι πελάτης (!!έχει την ιδιότητα ο πίνακας!!!!), τότε θα υπάρχει το όνομα σε κάποια θέση του πίνακα Όνομα. Ο αλγόριθμος θα εμφανίζει το στοιχείο του πίνακα Χρήματα που υπάρχει στη αντίστοιχη θέση, με τη θέση που βρέθηκε το όνομα πελάτη στο πίνακα Όνομα. Θα χρησιμοποιήσουμε λοιπόν τον αλγόριθμο αναζήτησης πρώτης εμφάνισης στοιχείου στο πίνακα Όνομα.
3.17-3.32 Ο αλγόριθμος είναι οακόλουθος: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Αλγόριθμος Λογιστικό_Γραφείο Εμφάνισε Δώσε το πλήθος των πελατών Διάβασε Ν Για i από 1 μέχρι Ν Εμφάνισε Δώσε το όνομα του, i, πελάτη Διάβασε Όνομα[i] Εμφάνισε Δώσε τα χρήματα που χρωστά Διάβασε Χρήματα[i] Εμφάνισε Δώσε το όνομα του πελάτη Διάβασε ον_πελάτη βρέθηκε Ψευδής i 1 Όσο i Νκαιβρέθηκε=Ψευδής επανέλαβε Αν Όνομα[i] = ον_πελάτη τότε Εμφάνισε Ο πελάτης χρωστάει,χρήματα[ i ] βρέθηκε Αληθής i i+1 Αν βρέθηκε = Ψευδής τότε Εμφάνισε Δεν είναι πελάτης του γραφείου Τέλος Λογιστικό_Γραφείο
3.33 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Σε ένα σχολείο η Β Λυκείου, στην οποία φοιτούν 100 άτομα, αποφάσισε να πάει εκδρομή. Ο πρόεδρος της Β Λυκείου συγκέντρωσε έναν κατάλογο με τα ονόματα όλων των μαθητών και τα χρήματα που έδωσαν. Αν κάποιος μαθητής δεν έδωσε τα χρήματα, τότε θεωρούμε ότι έδωσε 0 Ευρώ. Να γραφεί αλγόριθμος που θα α) εμφανίζει πόσοι και ποιοι μαθητές δεν πλήρωσαν. β) αν ο μαθητής Κωνσταντίνου έδωσε χρήματα. Θα χρησιμοποιήσουμε 2 πίνακες. Στον πίνακα Χρήματα θα υπάρχει ο αριθμός 0, αν κάποιος μαθητής δεν έδωσε χρήματα. Όνομα Γουγάς Διαμάντης.. Παπαδήμα Δούκα Χρήματα 4 0. 7 3 π.χ. Αρκεί να εφαρμόσουμε τον αλγόριθμο αναζήτησης όλων των εμφανίσεων της τιμής 0 στον πίνακα Χρήματα. Κάθε φορά που θα βρίσκουμε την τιμή 0, στον πίνακα Χρήματα θα εμφανίζουμε το αντίστοιχο όνομα. Επίσης θα αυξάνουμε και μια μεταβλητή ηοποίαθαμετρά πόσα άτομα δεν έδωσαν χρήματα. Για το β ερώτημα, θα αναζητήσουμε το όνομα Κωνσταντίνου στον πίνακα Όνομα. Αν το βρούμε θα ελέγξουμε το αντίστοιχο στοιχείο του πίνακα Χρήματα, και αν είναι 0, τότε ο μαθητής δεν έδωσε χρήματα, αλλιώς θα εμφανίσουμε το ποσό που έδωσε.
3.33 Ο αλγόριθμος είναι οακόλουθος: Αλγόριθμος Εκδρομή_Λυκείου Για i από 1 μέχρι 100 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Εμφάνισε Δώσε το όνομα του, i, μαθητή Διάβασε Όνομα[i] Εμφάνισε Δώσε τα χρήματα που έδωσε Διάβασε Χρήματα[i]! Επειδή μας ενδιαφέρει να βρούμε μόνο ποιοι μαθητές δεν πλήρωσαν! Δεν χρειάζεται να βάλουμε τη μεταβλητή βρέθηκε. πλήθος 0 Για i από 1 μέχρι 100 Αν Χρήματα[i] = 0 τότε Εμφάνισε Δεν έχει δώσει χρήματα ο μαθητής,όνομα[ i ] πλήθος πλήθος+1 Εμφάνισε Συνολικά δεν έδωσαν χρήματα,πλήθος, μαθητές βρέθηκε Ψευδής i 1 Όσο i Νκαιβρέθηκε=Ψευδής επανέλαβε Αν Όνομα[i] = Κωνσταντίνου τότε Αν Χρήματα[i] = 0 τότε Εμφάνισε Ο Κωνσταντίνου δεν πλήρωσε. Αλλιώς Εμφάνισε Ο Κωνσταντίνου πλήρωσε,χρήματα[i] βρέθηκε Αληθής i i+ 1 Τέλος Εκδρομή_Λυκείου
3.34 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Στη βιβλιοθήκη ενός σχολείου υπάρχουν πολλά βιβλία. Έστω ότι κάθε βιβλίο έχει ένα μοναδικό κωδικό και καταχωρείται σε ηλεκτρονικό υπολογιστή ο τίτλος και ο συγγραφέας κάθε βιβλίου. Να γραφεί αλγόριθμος που θα διαβάζει το όνομα ενός συγγραφέα και θα βρίσκει τον κωδικό (ή τους κωδικούς!-επανάληψη! ) και τον τίτλο (ή τους τίτλους ) των βιβλίων αυτού του συγγραφέα που υπάρχουν στη βιβλιοθήκη. Ταστοιχείαγιαταβιβλίαθα τααποθηκεύσουμεσε3 πίνακες Ν θέσεων. Κατόπιν θα διαβάζουμε τον συγγραφέα ενός βιβλίου και χρησιμοποιώντας τη σειριακή αναζήτηση εμφάνισης όλων των στοιχείων, θα εμφανίζουμε τους κωδικούς και τους τίτλους που αντιστοιχούν σε αυτό τον συγγραφέα. Κωδικός 4324555 75784655..... 3266737 Τίτλος ΙΑΠΩΝΙΑ ΟΙΚΟΛΟΓΙΚΟΣ ΠΟΛΕΜΟΣ. ΓΕΝΙΑ 700 Συγγραφέας ΤΣΟΚΛΗ ΑΥΓΕΡΟΠΟΥΛΟΣ. ΚΟΥΛΟΓΛΟΥ
3.34 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Αλγόριθμος Βιβλιοθήκη Εμφάνισε Δώσε το πλήθος των βιβλίων Διάβασε Ν Για i από 1 μέχρι Ν Εμφάνισε Δώσε τον κωδικό, τον τίτλο και τον συγγραφέα του βιβλίου Διάβασε Κωδικός[ i ],Τίτλος[ i ], Συγγραφέας[ i ] Εμφάνισε Δώσε το όνομα ενός συγγραφέα Ο αλγόριθμος είναι οακόλουθος: Διάβασε ον_συγγραφέα βρέθηκε Ψευδής Για i από 1 μέχρι Ν Αν Συγγραφέας[i] = ον_συγγραφέα τότε Εμφάνισε Κωδικός βιβλίου, Κωδικός[ i ] Εμφάνισε Τίτλος βιβλίου,τίτλος[ i ] βρέθηκε Αληθής Αν βρέθηκε = Ψευδής τότε Εμφάνισε Δεν υπάρχουν βιβλία του συγκεκριμένου συγγραφέα. Τέλος Βιβλιοθήκη