Π Ι Ν Α Κ Ε Σ (arrays) ΤΑΞΙΝΟΜΗΣΗ

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Προγραμματισμός Ι Προτάσεις ελέγχου ροής Ο πιο συνηθισμένος τρόπος εκτέλεσης είναι ο ακολουθιακός: δύο ή περισσότερες προτάσεις βρίσκονται διατεταγμένες.
Advertisements

ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
Εισαγωγή στους Αλγόριθμους Ταξινόμησης
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
Εντολες Επιλογης (Selection)
Αλγόριθμοι Ταξινόμησης
Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD
ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
Γενική μορφή προγράμματος Pascal
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Υποθετικός τελεστής Ο υποθετικός τελεστής (?:) αποτελείται από δύο σύμβολα. Ανήκει στην κατηγορία των τελεστών που αποτελούνται από συνδυασμό συμβόλων.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
Αλγόριθμοι Ταξινόμησης
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Εντολές Ελέγχου Ροής.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 Δείκτες σε συναρτήσεις Δείκτης σε συνάρτηση – Περιέχει τη διεύθυνση του κώδικα της συνάρτησης – Ό π ως ένας.
ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Επανάληψη.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
2/28/00epl-1311 Παραδειγματα Aλγοριθμων Αριθμος λεξεων που διαβαστηκαν απο εισοδο Εκτυπωση περιφερειας τετραγωνων με * Υπολογισμος exp(x,n) = 1 + x/1!
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
Δομές Δεδομένων και Αρχεία Ενότητα 2: Αρχεία Δομών I (Binary Files) Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 7: Η δομή Στοίβα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
Προγραμματισμός ΗΥ Ενότητα 6: Δισδιάστατοι πίνακες.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
Δομές Δεδομένων και Αρχεία
Δομές Δεδομένων και Αρχεία Ενότητα 8: Η δομή Ουρά Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 4: Επαναληπτικές δομές. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής. Τμήμα Μηχανικών.
Τεχνολογία και Προγραμματισμός Υπολογιστών Ενότητα 5: Τύπος πίνακα,Μεταβλητές με δείκτη, Πολυδιάστατοι πίνακες Επίκουρος Καθηγητής Χρήστος Μακρής Τμήμα.
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ 1 Εισαγωγή στη γλώσσα Προγραμματισμού C ΠΙΝΑΚΕΣ (arrays)
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος.
ΔΟΜΗ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ C 1.Σχόλια 2.Οδηγίες προεπεξεργαστή 3.Ορισμοί τύπων 4.Δηλώσεις συναρτήσεων (πρωτότυπα) 5.Ορισμός της main 6.Ορισμοί συναρτήσεων.
Α.Ε.Π.Π. ΟΠΤΙΚΟΠΟΙΗΜΕΝΗ ΠΑΡΟΥΣΙΑΣΗ ΤΗΣ ΤΑΞΙΝΟΜΗΣΗΣ ΠΙΝΑΚΑ ΜΕ ΤΗ ΜΕΘΟΔΟ ΤΗΣ ΦΥΣΣΑΛΙΔΑΣ (Bubble Sort) ΙΟΡΔΑΝΗΣ ΣΑΒΒΟΥΛΙΔΗΣ
Προτάσεις, εκφράσεις, τελεστές Βασικά στοιχεία ελέγχου προγράμματος
Τεχνολογία και Προγραμματισμός Υπολογιστών
Επανάληψη.
Χαρακτήρες και συμβολοσειρές
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Η γλώσσα C Προγραμματισμός Ι
Βασικές Έννοιες Εισόδου-Εξόδου Πίνακες και Δείκτες
Ενισχυτική διδασκαλία
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Τεχνολογία και Προγραμματισμός Υπολογιστών
Δομές.
Προγραμματισμός Ι Εισαγωγικά θέματα.
Πίνακες Προγραμματισμός Ι
Εφαρμογές Υπολογιστών
Ενισχυτική διδασκαλία
Ενισχυτική διδασκαλία
ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ Η εντολή if if ( παράσταση) εντολή επόμενη εντολή.
for (παράσταση_1; παράσταση_2; παράσταση_3)
Δομές διακλάδωσης, επαναλήψεις, μέθοδοι
Ταξινόμηση Ορισμός: Δοθέντων των στοιχείων a1,a2,… ,an η ταξινόμηση συνίσταται στην αντιμετάθεση της θέσης των στοιχείων ώστε να τοποθετηθούν με μια νέα.
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
«Ανάπτυξη εφαρμογής για τη διαχείριση μεθόδων αναζήτησης σε οπτικοποιημένο περιβάλλον»  Μπλάγας Χρήστος.
11η Διάλεξη Ταξινόμηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης
Αναδρομικές Εξισώσεις και Αφηρημένοι Τύποι Δεδομένων
Δομές ροής προγράμματος
Είσοδος/έξοδος χαμηλού επιπέδου
Stack[ ] Queue[ ] 7 9 本試卷全部試題均須回答。
ΑΣΚΗΣΕΙΣ C.
ΑΣΚΗΣΕΙΣ.
Μεταγράφημα παρουσίασης:

Π Ι Ν Α Κ Ε Σ (arrays) ΤΑΞΙΝΟΜΗΣΗ Η μέθοδος της φυσαλίδας (bubble sort) Η μέθοδος της επιλογής (selection) Η μέθοδος της γρήγορης ταξινόμησης (quicksort) Η μέθοδος της συγχώνευσης (merge sort)

Π Ι Ν Α Κ Ε Σ (arrays) ΑΝΑΖΗΤΗΣΗ Η μέθοδος της ακολουθιακής αναζήτησης (sequential search) Η μέθοδος της δυαδικής αναζήτησης (binary search)

0 1 2 3 4 5 . . . 18 19 ? ? ? ? ? ? ? ? ? ? ? ? Δήλωση Πίνακα τύπος όνομα_πίνακα [ μέγεθος ] ; Παράδειγμα #define N 20 double a[N]; Αν a[4] αναφέρεται στο 5ο στοιχείο Αν i = 3 a[i+2] αναφέρεται στο 6ο στοιχείο

for ( i=0; i<20; i ++) vathmos [i] = 0; 0 1 2 3 4 5 . . . 18 19 0 0 0 0 0 0 0 0 0 0 0 0 0

Χωρίς τη χρήση δεικτών athroisma = 0; for ( i=0; i<N; i++) athroisma += vathmos[i];

Το πέρασμα των πινάκων στις συναρτήσεις γίνεται μόνο με αναφορά. Παράδειγμα Να γραφεί μία συνάρτηση που να υπολογίζει το μέσο όρο των τιμών των στοιχείων του πίνακα. double mesos_oros ( int vathmos[], int megethos); { int i; double athroisma = 0.0; for ( i=0; i< megethos; i++) athroisma += vathmos[i]; return ( athroisma / megethos ); }

Πρόβλημα Γράψτε ένα πρόγραμμα που να μετρά τους χαρακτήρες ενός κειμένου που δίνει από το πληκτρολόγιο και να τυπώνει τη συχνότητα εμφάνισης των κεφαλαίων γραμμάτων.

Πρόγραμμα /* Υπολογίζει τη συχνότητα εμφάνισης των κεφαλαίων γραμμάτων σε ένα κείμενο */ #include <stdio.h> #define PLITHOS 26 int main (void) { double pinakas[PLITHOS]; int xar; int i, grammata;

/. Αρχικές τιμές. / for (i = 0; i < PLITHOS; ++i) pinakas [i] = 0 /* Αρχικές τιμές */ for (i = 0; i < PLITHOS; ++i) pinakas [i] = 0.0; grammata = 0; printf (“\n Εισάγετε το κείμενο. Πατήστε Enter και Cltrl-Z για τέλος δεδομένων”); while (xar = getchar() != EOF) { if (‘A’ <= xar && xar <= ‘Z’) grammata++; switch (xar)

pinakas [0]++; break; case ‘A’: case ‘B’: pinakas [1]++; break; : case ‘Z’: pinakas [25]++; break; default : printf(“Λάθος γράμμα”); }

printf (“\n Αποτελέσματα: \n”); for (i = 0; i < PLITHOS; i++) pinakas[i] /= grammata; printf (“\n Αποτελέσματα: \n”); i=0; for (xar=‘A’; xar<=‘Z’; xar ++) { printf (“Συχνότητα εμφάνισης του %c: %f”, xar, pinakas [i]); i++; } return 0;

Η μέθοδος της φυσαλίδας (bubble sort) Πρόβλημα Γράψτε μία function που να ταξινομεί σε αύξουσα σειρά τους ακέραιους αριθμούς με τη μέθοδο της φυσαλίδας.

void fysalida (int m[], int n) /* n είναι το μέγεθος του m[] */ { int i, j; for (i = n-1; i>0; ++i) for ( j =0; j< i; ++j) if (m[j] > m[j+1]) andallagi(&m[j], &m[j+1]); }

void andallagi(int *p, int *q) { int pros; pros = *p; *p = *q; *q = pros; }

void fysalida(int m[], int n) { int pros, i; char taxinomisi= ‘o’; /* όχι ταξινομημένη*/ do { taxinomisi = ‘n’; for (i=0; i<n-1; i++) if ( m[i] > m[i+1]) andallagi( &m[i], &m[i+1]); taxinomisi = ‘o’; n = n - 1; /*ελαττώνεται κατά ένα ο πίνακας*/ } while (taxinomisi == ‘o’); }

#include <stdio.h> #define N 200 void andallagi(int *p, *int *q); void fysalida(int m[], int n) int main(void) { int i, pinakas[N]; printf(“\nΕισάγετε %d ακέραιους αριθμούς”, N); for (i=0; i <N; ++i) scanf(“%d”, &pinakas[i]); fysalida(pinakas, N); /* κλήση της fysalida */

printf(“\nΟι ταξινομημένοι αριθμοί είναι :”); for (i=0; i <N; ++i) printf(“%d”, pinakas[i]); return 0; }

ΑΝΑΖΗΤΗΣΗ Σειριακή Αναζήτηση Πρόβλημα Γράψτε μία συνάρτηση που να βρίσκει ένα συγκεκριμένο στοιχείο του πίνακα των ακεραίων αριθμών .

Συνάρτηση /* Υλοποιεί τη μέθοδο της σειριακής αναζήτησης σε μη ταξινομημένη λίστα */ void seiriaki_anazitisi_1 (int kleidi, int megethos, int pinakas [ ], int *deiktis, int *vrethike) { int i; *vrethike = 0; /* δεν έχει βρεθεί το στοιχείο */ *deiktis = -1;

for (i = 0; i < megethos; i++) if (kleidi = = pinakas [i]) { deiktis = i; *vrethike = 1; /* βρέθηκε το στοιχείο */ break; }

Συνάρτηση /. Σειριακή αναζήτηση σε ταξινομημένη (αύξουσα) λίστα Συνάρτηση /* Σειριακή αναζήτηση σε ταξινομημένη (αύξουσα) λίστα */ void seiriaki_anazitisi_2 (int kleidi, int megethos, int pinakas [ ], int *deiktis, int *vrethike) { int i; *vrethike = 0; /* δεν έχει βρεθεί το στοιχείο */ *deiktis = -1;

for (i = 0; i < megethos; i++) if (kleidi < pinakas [i]) / for (i = 0; i < megethos; i++) if (kleidi < pinakas [i]) /*δεν υπάρχει το κλειδί στη λίστα */ break; else if (kleidi = = pinakas [i]) { *deiktis = i; *vrethike = 1; }

Πρόβλημα Να γραφεί ένα πρόγραμμα, το οποίο Να δημιουργεί ένα πίνακα ακέραιων αριθμών, οι οποίοι δίνονται από το πληκτρολόγιο. Να ταξινομεί τους αριθμούς αυτούς με τη χρήση της μεθόδου ταξινόμησης φυσαλίδα και Να αναζητά ένα δεδομένο αριθμό με τη μέθοδο της δυαδικής αναζήτησης

Πρόγραμμα #include <stdio. h> #include “taxi. c” #include “anaz Πρόγραμμα #include <stdio.h> #include “taxi.c” #include “anaz.c” #define MEGETHOS 100 /* Πρωτότυπα συναρτήσεων */ void eisodos (int pinakas[], int *megethos); int main (void) { int megethos, kleidi, thesi, i; int pinakas [MEGETHOS] eisodos (pinakas, &megethos); printf (“\n Μη ταξινομημένος πίνακας”);

for (i = 0; i < megethos; ++i) printf (“\n %d %d”, i, pinakas[i]); fysalida(pinakas, megethos); printf (“\n Ταξινομημένος πίνακας”); printf(“\n %d %d”, i, pinakas[i]); printf (“\n Εισάγετε έναν ακέραιο αριθμό για αναζήτηση (κλειδί)”); scanf (“%d”, &kleidi); dyadiki_anazitisi_1 (kleidi, pinakas, megethos, &thesi, &vrethike); if (vrethike) printf (“\n Επιτυχημένη αναζήτηση. Ο αριθμός %d είναι το% -οστό στοιχείο του πίνακα”, kleidi, thesi+1);

else printf (“\n Αποτυχημένη αναζήτηση”); return 0; } void eisodos (int pinakas[], int *megethos) { int i; printf (“\n Εισάγετε το πλήθος των αριθμών”); scanf (“%d”, megethos); for (i = 0; i < *megethos; ++i) { printf (“\n Εισάγετε ένα ακέραιο αριθμό:”); scanf (“%d”, &pinakas [i]); } /* Τέλος της eisodos */

Οι Πίνακες Μεγαλύτερης Διάστασης Στήλες 0 1 2 α[0][0] α[0][1] α[0][2] 0 86 73 35 α[1][0] α[1][1] α[1][2] Γραμμές 1 64 52 43 α[2][0] α[2][1] α[2][2] 2 87 93 57 α[3][0] α[3][1] α[3][2] 3 28 32 14 Αναφορά στοιχείου πίνακα A[i][j] Δείκτης γραμμής δείκτης στήλης

Δήλωση Δισδιάστατων Πινάκων Επεξεργασία Δισδιάστατων Πινάκων int a[4][3]; 86 73 35 64 52 43 87 93 57 28 32 14 Γραμμή 0 Γραμμή 1 Γραμμή 2 Γραμμή 3 Επεξεργασία Δισδιάστατων Πινάκων int vathmos [4][3]; for (i = 0; i < 4; i++) vathmos [i][j] = 0;

int a[4][3] = {{86,73,35}, {64,52,43}, {87,93,57}, {28,32,14}}; int a[ ][3] = {{86,73,35}, {64,52,43}, {87,93,57}, {28,32,14}}; Δισδιάστατοι Πίνακες σαν ορίσματα στις Συναρτήσεις Συνάρτηση double mesi_timi(int a[ ][STHLES], int n, int m) { int athroisma, i, j; double mesos_oros; athroisma = 0;

for (i = 0; i < n; i++) for (j = 0; j < m; j++) athroisma += a[i][j]; mesos_oros = athroisma/(n*m); return mesos_oros; } Παράδειγμα #include <stdio.h> #define GRAMMES 50 #define STHLES 50 void eisodos (int pin[] [STHLES], int *n, int *m); void exodos (int pin[] [STHLES], int n, int m); double mesi_timi (int pin[] [STHLES], int n, int m);

int main (void) { int pinakas [GRAMMES] [STHLES]; int n, m; eisodos (pinakas, &n, &m); exodos (pinakas, n, m); printf(“\n\n Η μέση τιμή είναι: %d”, mesi_timi (pinakas, n, m)); return 0; } void eisodos (int pinakas [ ] [STHLES], int *n, int *m) int i, j;

printf(“\n Εισάγετε πλήθος γραμμών:”); scanf (“%d”, n); printf(“\n Εισάγετε πλήθος στηλών:”); scanf (“%d”, m); for (i = 0; i < *n; ++i) for (j = 0; j < *m; ++j) { printf(“\n Εισάγετε μια τιμή για το στοιχείο του πίνακα [%d] [%d]:”, i, j); } /* τέλος for */ } /* τέλος eisodos */

void exodos (int pinakas [ ] [STHLES], int n, int m) { int i, j; for (i = 0; i < n; ++i) for (j = 0; j < m; ++j) printf(“%3d”, pinakas [i] [j]); } /* τέλος της exodos */ double mesi-timi (int pinakas [ ] [STHLES], int n, int m) Δηλώσεις και σώμα της mesi_timi } /* τέλος της mesi_timi */