Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Σχετικά έγγραφα
Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΘΕΜΑ Α. Α2. Να αναφέρετε από τι εξαρτάται η επιλογή του καλύτερου αλγορίθμου ταξινόμησης. Μονάδες 4. Σελίδα 1 από 8

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

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Α2. Να γράψετε στο τετράδιο απαντήσεών σας το κατάλληλο τμήμα κώδικα, κάνοντας τις απαραίτητες αλλαγές σύμφωνα με την εκάστοτε εκφώνηση:

Επαναληπτικές Διαδικασίες

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Τελικό επαναληπτικό διαγώνισμα Επιμέλεια: Δρεμούσης Παντελής

Δομημένος Προγραμματισμός

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

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

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

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

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

Δημιουργία μιας εφαρμογής Java με το NetBeans

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

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

Εργαστήριο 2 - Άσκηση - Ανάλυση

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

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

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Bubble Hack Οπτικοποίηση του αλγορίθμου ταξινόμησης Bubble Sort στο Scratch

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

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

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

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

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

Τυχαίοι αριθμοί ρίξε μια «ζαριά»

φροντιστήρια Θέματα Ανάπτυξης Εφαρμογών σε Προγραμματιστικό Περιβάλλον Γ λυκείου Προσανατολισμός Σπουδών Οικονομίας και Πληροφορικής

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Γ3.3.Μ7 ΕΠΑΝΆΛΗΨΗ ΜΈΡΟΣ Α: ΈΝΝΟΙΕΣ ΤΙ ΕΊΝΑΙ Η VISUAL BASIC ΤΙ ΜΠΟΡΟΎΜΕ ΝΑ ΚΆΝΟΥΜΕ ΜΕ ΤΗ VISUAL BASIC ΑΝΤΙΚΕΊΜΕΝΑ: ΦΌΡΜΑ ΚΑΙ ΧΕΙΡΙΣΤΉΡΙΑ ΕΤΙΚΈΤΑ LABEL

ΘΕΜΑ Α. Μονάδες 10 Α2.

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Γ. ΕΚΤΥΠΩΣΕΙΣ II-15 ΦΟΡΜΑ ΑΝΑΖΗΤΗΣΗΣ ΑΝΑΖΗΤΗΣΗ WILD CHARACTERS

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Εισαγωγή στο περιβάλλον Code::Blocks

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΡΙΤΗ 13 ΙΟΥΝΙΟΥ 2017

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ


8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

ÔÏÕËÁ ÓÁÑÑÇ ÊÏÌÏÔÇÍÇ

Α.1 Τι γνωρίζετε για τον διερμηνευτή, τον μεταγλωττιστή και ποιες οι διαφορές τους. 15 ΜΟΝΑΔΕΣ

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Python. 1η Ομάδα Ασκήσεων

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

ΘΕΜΑ Α. Μονάδες 10 Α2.

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Μάντεψε τον Αριθμό. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Οδηγίες

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Δ ΕΣΠΕΡΙΝΩΝ

Φύλλα εργασίας. MicroWorlds Pro. Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο. Β. Χ. Χρυσοχοΐδης

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

Διαχείριση Βάσης Δεδομένων (dbadmin)

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

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

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

Εισαγωγή στο πρόγραμμα Microsoft word 2003

Δομημένος Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. ii) Πόσες φορές θα εκτελεστεί η εντολή ΔΙΑΒΑΣΕ Α[μ,λ] στον αλγόριθμο της προηγούμενης ερώτησης; α) 35 β) 12 γ) 20

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

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Εκτελέστε τις παρακάτω ενέργειες και απαντήστε στις ερωτήσεις που ακολουθούν

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

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

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

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

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

(3) Από την εργαλειοθήκη επιλέξτε το εργαλείο «ετικέτας (Label)». Δημιουργήστε μια ετικέτα στην φόρμα σας.

Αλλαγή της εμφάνισης κειμένου: μέγεθος γραμματοσειράς, είδος γραμματοσειράς

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Σημειώσεις του σεμιναρίου: Δημιουργία εκπαιδευτικού ιστότοπου με χρήση του λογισμικού Joomla

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

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Transcript:

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να καταλάβουν την διαφορά ανάμεσα σε τοπικές και καθολικές μεταβλητές. Nα κατασκευάσουν πίνακες από δεδομένα. Να κατασκευάσουν συναρτήσεις με πίνακες. Να κάνουν αναζήτηση και ταξινόμηση πινάκων. Εκφώνηση Να δημιουργήσετε ένα πρόγραμμα για τον αποθήκευση ακεραίων τιμών σε ένα πίνακα πέντε θέσεων. Επίλυση Δημιουργείστε ένα νέο έργο (File New Project) τύπου Windows Application με όνομα SortSearch. Σχεδιάστε την διεπαφή της εφαρμογής όπως παρακάτω : Επιλέξτε ένα προς ένα τα αντικείμενα της φόρμας και στο παράθυρο Properties αλλάξτε τις παρακάτω ιδιότητες : Η φόρμα 1

Form1 Ιδιότητα Τιμή Εξήγηση Name frmsortsearch Το όνομα του αντικειμένου Text Ταξινόμηση και Αναζήτηση Η γραμμή τίτλου MaximizeButton False Για να μην FormBorderStyle FixedSingle αλλάζει το μέγεθος της φόρμας. Το πρώτο κουτί κειμένου textbox1 Ιδιότητα Τιμή Εξήγηση Name txtdisplaypinakas Το όνομα του αντικειμένου Multiline True Περισσότερες από μια γραμμές κειμένου. Text Το δεύτερο κουτί κειμένου textbox2 Ιδιότητα Τιμή Εξήγηση Name txtnumber Το όνομα του αντικειμένου Text Το πρώτο κουμπί εντολών button1 Ιδιότητα Τιμή Εξήγηση Name btninsert Το όνομα του αντικειμένου Text Εισαγωγή O σκοπός της εφαρμογής είναι να πληκτρολογείτε στο πεδίο txtnumber αριθμητικές τιμές, οι οποίες θα αποθηκεύονται μέσα σε ένα πίνακα ακεραίων. Μετά την πληκτρολόγηση της κάθε τιμής πατάτε το πλήκτρο Εισαγωγή για να : α) αποθηκεύσετε την τιμή στην επόμενη ελεύθερη θέση του πίνακα, β) να εμφανίσετε στο πεδίο txtdisplaypinakas τις τιμές του πίνακα γ) να καθαρίσετε το txtnumber ώστε να δεχτεί την επόμενη τιμή. Για να υλοποιήσετε το πρόγραμμα θα πρέπει να δηλώσετε σαν καθολικές μεταβλητές α) ένα πίνακα πέντε θέσεων στον οποίο θα αποθηκεύσετε τις τιμές που θα 2

πληκτρολογήσετε, και β) ένα μετρητή, ο οποίος με την έναρξη της εφαρμογής θα πάρει την τιμή 0 και θα χρησιμοποιηθεί σαν δείκτης στο πίνακα, και κάθε φορά που θα πατάτε το πλήκτρο Εισαγωγή θα αυξάνει την τιμή του κατά 1 μέχρι και το 4 γιατί αυτή είναι η μέγιστη τιμή που μπορεί να λάβει στα πλαίσια του προγράμματος. Επιλέξτε το κουμπί εντολών btninsert και στο παράθυρο Properties κάντε κλικ στο εικονίδιο με το κεραυνό για να εμφανιστούν τα γεγονότα. Βρείτε το γεγονός Click κάντε διπλό κλικ πάνω για να εμφανιστεί το παράθυρο με το προγραμματισμό των γεγονότων. Πληκτρολογείστε μέσα στο παράθυρο του κώδικα τις παρακάτω εντολές : Πίνακας 1. Ο κώδικας της εφαρμογής 1 namespace SortSearch 2 { 3 public partial class frmsortsearch : Form 4 { 5 int [] Pinakas = new int[5]; 6 int noelements = 0; 8 void displaypinakas() 9 { 10 string line = ""; 11 12 for (int i = 0; i < noelements; i++) 13 { 14 line = line + Pinakas[i].ToString() + "\t"; 15 } 16 1 txtdisplaypinakas.text = txtdisplaypinakas.text + line + "\r\n"; 18 } 19 20 public frmsortsearch() 21 { 22 InitializeComponent(); 23 } 24 25 26 private void btninsert_click(object sender, EventArgs e) 2 { 28 if (noelements < Pinakas.Length) 29 { 30 Pinakas[noElements] = int.parse(txtnumber.text); 31 noelements = noelements + 1; 32 displaypinakas(); 33 } 34 3

35 txtnumber.text = ""; 36 } 3 } 38 } Στις γραμμές 5 και 6 δηλώνετε σαν καθολικές μεταβλητές το πίνακα Pinakas και το μετρητή noelements που αντιστοιχεί στο πλήθος των τιμών που έχετε καταχωρήσει στο πίνακα. Η αρχική τιμή 0 δηλώνει ότι η πρώτη τιμή που θα πληκτρολογήσετε θα αποδοθεί στην πρώτη θέση του πίνακα. Στις γραμμές 8 με 18 κατασκευάζετε την displaypinakas, μια συνάρτηση που μορφοποιεί τα περιεχόμενα του πίνακα και τα εμφανίζει στο κουτί κειμένου txtdisplaypinakas. Η μορφοποίηση επιτυγχάνεται με την line η οποία αρχικά είναι μια κενή συμβολοσειρά Πίνακας 1, γραμμή 10 και με μια επανάληψη γεμίζει με όλες τις τιμές που περιέχει ο Pinakas και ανάμεσα τους τοποθετεί το χαρακτήρα Tab, ο οποίος αφήνει ένα κενό διάστημα και εκφράζεται με το αλφαριθμητικό "\t". Τα περιεχόμενα της line προσθέτονται στo ήδη υπάρχον κείμενο του κουτιού κειμένου txtdisplaypinakas μαζί με το χαρακτήρα Enter, ο οποίος συνεχίζει στην επόμενη γραμμή κειμένου και εκφράζεται με το αλφαριθμητικό "\r\n". Οι ανωτέρω χαρακτήρες ανήκουν σε ένα σύνολο που ονομάζονται ειδικοί χαρακτήρες (Escape Characters). Για να καταλάβετε την χρήση τους υποθέστε ότι στο κουτί κειμένου txtdisplaypinakas θέλετε να εμφανίσετε σαν κείμενο το αλφαριθμητικό He"llo. Αυτό που θα κάνατε ήταν να γράψετε μια εντολή, όπως παρακάτω : txtdisplaypinakas.text = "He"llo"; Η ανωτέρω εντολή είναι λάθος γιατί δεν είναι σαφές που αρχίζει και που τελειώνει το αλφαριθμητικό. Σε αυτή την περίπτωση θα έπρεπε να γράψετε : txtdisplaypinakas.text = "He\"llo"; Ο συνδυασμός του \ (backslash) και ενός χαρακτήρα έχει ειδική σημασία για τα 4

αλφαριθμητικά. Συνδυασμός Σημασία \\ Εμφανίζει το \ \" Εμφανίζει " διπλά εισαγωγικά \' Εμφανίζει ' μονά εισαγωγικά \n Νέα γραμμή \r Carriage Return \r\n Carriage Return και New Line (το πλήκτρο Εnter) \t Οριζόντιο Tab \v Κατακόρυφο Tab \f Form feed \b BackSpace Πατώντας το πλήκτρο Εισαγωγή εκτελείται ο κώδικας της συνάρτησης btninsert_click Πίνακας 1, γραμμές 26 έως 33 στο σώμα της οποίας γίνεται ένας έλεγχος αν η τιμή του μετρητή noelements είναι μικρότερη από 5 και αν ναι τότε αποθηκεύει την τιμή που πληκτρολογήσατε στο πίνακα Pinakas, αυξάνει το μετρητή κατά 1, καλεί την displaypinakas για να εμφανίσει τις τιμές του πίνακα και τέλος "καθαρίζει" τα περιεχόμενα το κουτιού κειμένου txtnumber. Σε αρκετά προβλήματα υπάρχουν ένας ή περισσότεροι πίνακες με τιμές (π.χ. τηλεφωνικοί κατάλογοι, ονόματα μαθητών ή πελατών, κατάλογοι με προϊόντα, λέξεις που περιέχονται σε μια σελίδα κ.λπ) και χρειάζεται να τους διασχίσετε για να δείτε αν περιέχουν μια τιμή ή όχι. Η πιο απλή διάσχιση ενός πίνακα είναι η σειριακή αναζήτηση όπου τα περιεχόμενα της μιας μετά της άλλη θέσης του πίνακα, αρχής γενομένης από την πρώτη, συγκρίνονται με την τιμή στόχο. Η διάσχιση σταματά όταν βρεθεί η τιμή στόχος ή όταν δεν υπάρχουν άλλες θέσεις στο πίνακα. Κατασκευάστε την συνάρτηση SerialSearch η οποία δέχεται σαν παραμέτρους, ένα πίνακα ακεραίων και μια τιμή στόχο και επιστρέφει την θέση του πίνακα που υπάρχει η τιμή στόχος ή -1 για να δείξει ότι δεν βρέθηκε η συγκεκριμένη τιμή. Η χρήση μιας αρνητική τιμής για την δήλωση της μη εύρεσης της τιμής στόχου στο πίνακα έχει σαν αιτία την αρίθμηση των θέσεων των πινάκων που ξεκινούν από το 0 και φτάνουν 5

μέχρι οποιαδήποτε θετική τιμή. Στην γραμμή του Πίνακα 1 πληκτρολογείστε το κώδικα του Πίνακα 2. 1 int SerialSearch(int[] x, int goal) 2 { 3 int ans = -1; 4 int i; 5 6 for (i = 0; i < x.length; i++) { 8 if (x[i] == goal) 9 { 10 ans = i; 11 break; 12 } 13 } 14 return ans; 15 } Πίνακας 2. Ο κώδικας της SerialSearch Η SerialSearch δέχεται σαν είσοδο ένα πίνακα ακεραίων και μια τιμή στόχο και επιστρέφει μια ακέραια τιμή. Η μεταβλητή ans αρχικοποιείται με τιμή -1, Πίνακας 2 γραμμή 3, θεωρώντας ότι δεν υπάρχει η τιμή στόχος στο πίνακα. Εν συνεχεία κάνετε μια επανάληψη για όλες τις θέσεις του πίνακα, συγκρίνοντας τα περιεχόμενα της κάθε θέσης με την τιμή στόχο, Πίνακας 2 γραμμές 6 έως 13. Αν βρεθεί η τιμή στόχος τότε αποθηκεύεται την θέση του πίνακα στην ans και κάνετε με την break, έξοδο από την επανάληψη. Στο τέλος της συνάρτησης επιστρέφετε την τιμή της ans. Στο Πίνακα 2 οι γραμμές 10 και 11 θα μπορούσαν να αντικατασταθούν από την εντολή return i; για να σταματήσετε αμέσως την συνάρτηση SerialSearch και να επιστρέψετε την θέση που βρήκατε την τιμή στόχο. Στην διεπαφή της εφαρμογής προσθέστε ένα κουμπί με όνομα btnserialsearch και κείμενο Σειριακή Έρευνα για να ενεργοποιήσετε την λειτουργία της σειριακής αναζήτησης. 6

Επιλέξτε το κουμπί εντολών btnserialsearch και στο παράθυρο Properties κάντε κλικ στο εικονίδιο με το κεραυνό για να εμφανιστούν τα γεγονότα. Βρείτε το γεγονός Click κάντε διπλό κλικ πάνω για να εμφανιστεί το παράθυρο με το προγραμματισμό των γεγονότων. Πληκτρολογείστε μέσα στο σώμα της συνάρτησης τις παρακάτω εντολές : Πίνακας 3. Ο κώδικας της btnserialsearch_click 1 private void btnserialsearch_click(object sender, EventArgs e) 2 { 3 if (noelements == Pinakas.Length) 4 { 5 int position = SerialSearch(Pinakas, int.parse(txtnumber.text)); 6 if (position < 0) { 8 MessageBox.Show("Δεν βρέθηκε ο αριθμός στο πίνακα."); 9 } 10 else 11 { 12 MessageBox.Show("Βρέθηκε ο αριθμός στη θέση : " + position.tostring()); 13 } 14 } 15 else 16 { 1 MessageBox.Show("Θα πρέπει να πληκτρολογήσετε πέντε τιμές"); 18 } 19 } Στη γραμμή 3 του Πίνακα 3 κάνετε έναν έλεγχο αν ο πίνακας είναι γεμάτος από τιμές δηλαδή αν έχει προηγηθεί η πληκτρολόγηση των πέντε αριθμών. Αν όχι τότε με την βοήθεια της μεθόδου MessageBox.Show εμφανίζετε ένα μήνυμα που ενημερώνει το χρήστη της εφαρμογής για το τι θα πρέπει να κάνει πριν καλέσει την λειτουργία της

σειριακής αναζήτησης, Πίνακας 3 γραμμή 1. Διαφορετικά, καλείτε την συνάρτηση SerialSearch με παραμέτρους το πίνακα Pinakas και στόχο αναζήτησης την τιμή που πληκτρολογήσατε στο κουτί κειμένου txtnumber. Η SerialSearch επιστρέφει μια τιμή που αποθηκεύεται στην μεταβλητή position, Πίνακας 3 γραμμή 5. Εν συνεχεία κάνετε έναν έλεγχο αν η τιμή της position είναι μικρότερη από 0 και αν ναι τότε εμφανίζετε το μήνυμα ότι δεν βρέθηκε στο πίνακα η τιμή στόχος διαφορετικά εμφανίζετε την θέση του πίνακα με την τιμή στόχο. Η σειριακή αναζήτηση είναι πολύ εύκολη στην υλοποίηση αλλά αρκετά αργή με αποτέλεσμα να μην ενδείκνυται για πίνακες με μεγάλο πλήθος στοιχείων αφού θα πρέπει να φτάσει στο τέλος του πίνακα για να αποφανθεί αν υπάρχει ή δεν υπάρχει η τιμή στόχος. Επίσης και για μικρούς πίνακες δεν πρέπει να χρησιμοποιείται όταν η λειτουργία της αναζήτησης είναι αρκετά συχνή. Έστω ότι ο Pinakas έχει σαν τιμές τους αριθμούς 12,, 90, 4, 45. Η λειτουργία της αναζήτησης μέσα σε ένα πίνακα θα μπορούσε να είναι πολύ πιο γρήγορη αν τα στοιχεία του πίνακα δεν ήταν σε τυχαία διάταξη αλλά ήταν ταξινομημένα. Με τον όρο ταξινόμηση εννοούμε την διάταξη των στοιχείων του πίνακα με ένα συγκεκριμένο τρόπο. Υπάρχουν δύο είδη διάταξης : Αύξουσα. από το μικρότερο προς το μεγαλύτερο στοιχείο του πίνακα. 4 12 45 90 Φθίνουσα, από το μεγαλύτερο προς το μικρότερο στοιχείο του πίνακα. 90 45 12 4 Αν τα στοιχεία ήταν ταξινομημένα τότε με έναν απλό έλεγχο της αρχικής και τελικής τιμής του πίνακα θα μπορούσατε να αποφανθείτε αν υπάρχει περίπτωση να εμπεριέχεται το ζητούμενο στοιχείο μέσα στο πίνακα ή όχι. Για παράδειγμα, αν οι τιμές του ανωτέρω πίνακα ήταν σε αύξουσα διάταξη και η τιμή στόχος ήταν το 256 τότε η προσθήκη ενός ελέγχου, Πίνακας 4 γραμμή 5, θα απέτρεπε μια ατυχής αναζήτηση αφού δεν υπάρχει περίπτωση να βρεθεί μέσα στο πίνακα η τιμή στόχος. 8

Πίνακας 4. Ο κώδικας της τροποποιημένης SerialSearch 1 int SerialSearch(int[] x, int goal) 2 { 3 int ans = -1; 4 int i; 5 if( (goal >= x[0]) && (goal <= x[x.length-1]) ) 6 { for (i = 0; i < x.length; i++) 8 { 9 if (x[i] == goal) 10 { 11 ans = i; 12 break; 13 } 14 } 15 } 16 return ans; 1 } H ταξινόμηση είναι αρκετά σημαντική λειτουργία στους πίνακες και υπάρχουν αρκετές διαφορετικές μέθοδοι για την υλοποίηση της όπως η μέθοδος της Ευθείας Ανταλλαγής (Straight Exchange), της Φυσαλίδας (Bubble Sort), της Γρήγορης Αναζήτησης (Quick Sort), κ.λπ. Οι διάφορές μεταξύ τους είναι στην ταχύτητα ταξινόμησης των στοιχείων του πίνακα. Η μέθοδος Φυσαλίδας είναι αρκετά διαδεδομένη λόγο του ότι είναι απλή στην υλοποίηση της. Η μέθοδος ξεκινά από την παρατήρηση ότι αν είχατε ένα πίνακα με δύο θέσεις το μόνο που έπρεπε να κάνετε είναι να συγκρίνετε τα στοιχεία μεταξύ τους και αν δεν ήταν στην σωστή θέση ανάλογα με το είδος της επιθυμητής διάταξης τότε θα έπρεπε να τα αντιμεταθέσετε. Έστω ο παρακάτω πίνακας που θέλετε να τον ταξινομήσετε σε αύξουσα διάταξη : 5 Σε αυτή την περίπτωση μια απλή σύγκριση είναι αρκετή μεταξύ του πρώτου και του δεύτερου στοιχείου. Όμως αν είχατε τρία στοιχεία 5 4 9

τότε με την πρώτη σύγκριση μεταξύ του πρώτου με του δεύτερου στοιχείου, θα άλλαζε θέση το 5 με το. 5 4 Αυτό που πετύχατε είναι να μετακινήσετε το, το πιο μεγάλο στοιχείο στο πίνακα πιο κοντά στην σωστή θέση, την τελευταία. Αν κάνετε ακόμα μια σύγκριση μεταξύ του δεύτερου και του τρίτου στοιχείου, το με το 4 θα πετύχετε το επιθυμητό αποτέλεσμα πού είναι : 5 4 Ο πίνακας δεν είναι ταξινομημένος αλλά το μεγαλύτερο στοιχείο είναι στη σωστή θέση. Αν επαναλάβετε την διαδικασία της σύγκρισης μεταξύ του πρώτου και του δεύτερου στοιχείου, θα αλλάξουν θέση το 4 και το 5. 4 5 Η διαδικασία είναι επαναληπτική και γίνετε η επόμενη σύγκριση μεταξύ του δεύτερου και του τρίτου στοιχείου, το 5 με το, τα οποία είναι στη σωστή διάταξη οπότε δεν γίνετε καμία μετάθεση. Ο πίνακας είναι ταξινομημένος σε αύξουσα διάταξη. Την μέθοδο της Φυσαλίδας μπορείτε να την περιγράψετε ως εξής : 1. Σύγκρινε κάθε θέση του πίνακα με την επόμενη της. 2. Αν τα στοιχεία στις αντίστοιχες θέσεις δεν είναι στην σωστή σειρά, τότε κάνε αντιμετάθεση των στοιχείων μεταξύ των δύο θέσεων. 3. Συνέχισε την διαδικασία μέχρι το τέλος του πίνακα - 1. Αν τα ανωτέρω βήματα τα επαναλάβετε για όσα στοιχεία έχει ο πίνακας θα καταλήξετε με ένα ταξινομημένο πίνακα. Επίδειξη της λειτουργίας για το Pinakas με τιμές τους αριθμούς 12,, 90, 4, 45. Όπου γίνεται μετάθεση μεταξύ δύο αριθμών σημειώνεται με κόκκινο χρώμα. 10

Πρώτη επανάληψη Σύγκριση των θέσεων Αρχικά 0 και 1 1 και 2 2 και 3 3 και 4 0 12 1 12 12 12 12 2 90 90 90 4 4 3 4 4 4 90 45 4 45 45 45 45 90 0 Δεύτερη επανάληψη 1 12 2 4 3 45 12 4 45 4 12 45 4 12 45 4 12 45 4 90 90 90 90 90 0 4 4 4 4 Τρίτη επανάληψη 1 4 2 12 3 45 12 45 12 45 12 45 12 45 4 90 90 90 90 90 Τέταρτη επανάληψη Καμία αλλαγή στο πίνακα 4,,12,45,90 Πέμπτη επανάληψη Καμία αλλαγή στο πίνακα 4,,12,45,90 Στο παράθυρο του κώδικα της εφαρμογής και πάνω από την συνάρτηση SerialSearch πληκτρολογήστε την συνάρτηση Sort, οι εντολές της οποίας εμφανίζονται στο Πίνακα 5. 1 void Sort(int [] Pinakas) 2 { 3 int i, j; Πίνακας 5. Ο κώδικας της Sort 11

4 for (i = 0; i < Pinakas.Length; i++) 5 { 6 for (j = 0; j < Pinakas.Length - 1; j++) { 8 if (Pinakas[j] > Pinakas[j + 1]) 9 { 10 int t = Pinakas[j]; 11 Pinakas[j] = Pinakas[j+1]; 12 Pinakas[j + 1] = t; 13 } 14 } 15 // displaypinakas(); 16 } 1 } Η Sort παίρνει σαν είσοδο ένα πίνακα ακεραίων και τον ταξινομεί σε αύξουσα διάταξη. Στη γραμμή 4 του πίνακα 5 γίνετε μια επανάληψη τόσες φορές όσα και τα στοιχεία του πίνακα. Μέσα στο σώμα αυτής της επανάληψης θα γίνει μια νέα επανάληψη γραμμή 6 - τόσες φορές όσες και τα στοιχεία του πίνακα πλην ένα. Κατά την διάρκεια της δεύτερης επανάληψης κάθε στοιχείο του πίνακα συγκρίνεται με το επόμενο του και αν δεν είναι στην σωστή διάταξη τότε αντιμετατίθενται μεταξύ τους Πίνακας 5 γραμμές 8 έως 13. Αν την δεύτερη επανάληψη γραμμή 6 - την επαναλαμβάνατε τόσες φορές όσες και τα στοιχεία του πίνακα τότε την τελευταία φορά, ο μετρητής j θα είχε τιμή 4 και στην γραμμή 8 θα κάνατε την σύγκριση μεταξύ του 4 στοιχείου υπάρχει στο πίνακα και είναι το τελευταίο στοιχείο - και του 5 στοιχείου μη υπαρκτή θέση στο πίνακα, για αυτό το λόγο τρέχετε την επανάληψη για ένα λιγότερο στοιχείο. Η γραμμή 15 είναι σχόλιο και δεν θα εκτελεστεί. Τα σχόλια είναι απαραίτητα για τον προγραμματιστή της εφαρμογής αφού με αυτό το τρόπο δίνει οδηγίες χρήσης στους συνεργάτες του, κράτα σημειώσεις και παρατηρήσεις μαζί με το κώδικα, και είναι δύο ειδών α) γραμμής και αρχίζουν με τους χαρακτήρες // β) πολλών γραμμών και αρχίζουν με τους χαρακτήρες /* και τελειώνουν με το συνδυασμό */. Αν θέλετε να δείτε την εκτέλεση της ταξινόμησης σε κάθε επανάληψη θα πρέπει στην γραμμή 15 να αφαιρέσετε τους χαρακτήρες //. Στην διεπαφή της εφαρμογής προσθέστε ένα κουμπί με όνομα btnsort και κείμενο Ταξινόμηση για να ενεργοποιήσετε την λειτουργία της ταξινόμησης. 12

Επιλέξτε το κουμπί εντολών btnsort και στο παράθυρο Properties κάντε κλικ στο εικονίδιο με το κεραυνό για να εμφανιστούν τα γεγονότα. Βρείτε το γεγονός Click κάντε διπλό κλικ πάνω για να εμφανιστεί το παράθυρο με το προγραμματισμό των γεγονότων. Πληκτρολογείστε μέσα στο σώμα της συνάρτησης τις παρακάτω εντολές : Πίνακας 6. Ο κώδικας της btnsort_click 1 private void btnsort_click(object sender, EventArgs e) 2 { 3 if (noelements == Pinakas.Length) 4 { 5 Sort(Pinakas); 6 displaypinakas(); } 8 else 9 { 10 MessageBox.Show("Θα πρέπει να πληκτρολογήσετε πέντε τιμές"); 11 } 12 } Από την στιγμή που ο πίνακας είναι ταξινομημένος μπορείτε να επιταχύνετε την έρευνα για μια τιμή στόχο εφαρμόζοντας την Δυαδική Αναζήτηση. Για παράδειγμα θεωρείστε ένα πίνακα με τις τιμές του σε αύξουσα διάταξη, όπως παρακάτω : 4 12 45 90 και η τιμή στόχος είναι το 45. Η μέθοδος λειτουργεί επαναληπτικά εξετάζοντας κάθε φορά την τιμή της μεσαίας θέσης του υπό εξέταση διαστήματος του πίνακα, που την 13

πρώτη φορά είναι ολόκληρος ο πίνακας. Την επόμενη φορά είναι ο μισός πίνακας μετά το ένα τέταρτο μετά το ένα όγδοο και ούτω καθεξής. Άρα η δυαδική αναζήτηση είναι πολύ ταχύτερη σε σχέση με την σειριακή αφού σε κάθε βήμα μειώνει το διάστημα αναζήτησης στο μισό δηλαδή σε ένα πίνακα με 50000 ονόματα από την πρώτη κιόλας σύγκριση θα αποφύγετε 25000 συγκρίσεις. 1 Επανάληψη Την πρώτη φορά, το υπό εξέταση διάστημα έρευνας είναι ολόκληρος ο πίνακας. Αρχή : 0 Τέλος : 4 Μέση : (Αρχή + Τέλος) / 2 = (0 + 4) / 2 = 2 4 12 45 90 Ο πίνακας στην θέση 2 περιέχει την τιμή 12. Εν συνεχεία συγκρίνετε τον αριθμό που αναζητείτε, το 45 με το 12 και αν είναι ίσοι τότε διακόπτετε την αναζήτηση. Διαφορετικά αν είναι μικρότερος τότε το νέο διάστημα έρευνας είναι από 0 έως Μεσαία θέση 1 ενώ αν είναι μεγαλύτερος το νέο διάστημα έρευνας είναι Μεσαία θέση + 1 έως Τέλος. Στην συγκεκριμένη περίπτωση η τιμή στόχος είναι μεγαλύτερη από την τιμή της μεσαίας θέσης. 2 Επανάληψη Την δεύτερα φορά το υπό εξέταση διάστημα έρευνας είναι : Αρχή : (Μεσαία Θέση + 1) = (2 + 1) = 3 Τέλος : 4 Μέση : (3 + 4) / 2 = / 2 = 3.5 και το ακέραιο μέρος είναι 3 4 12 45 90 Ο πίνακας στην θέση 3 περιέχει την τιμή στόχο 45 οπότε ολοκληρώθηκε και η αναζήτηση. Στο ίδιο πάλι αποτέλεσμα θα καταλήγατε αν για μεσαία θέση αντί του 3 (από την στρογγυλοποίηση του 3.5) θεωρούσατε το 4 απλά θα χρειαζόσασταν μια ακόμη επανάληψη. Σε αυτή την περίπτωση η τιμή στόχος θα ήταν μικρότερη από την τιμή του πίνακα στην θέση 4, που είναι 90. 14

3 Επανάληψη Την τρίτη φορά - αν στο προηγούμενο βήμα θεωρήσετε το 4 σαν μεσαία θέση - το υπό εξέταση διάστημα έρευνας θα ήταν : Αρχή : 3 Τέλος : (Μεσαία Θέση - 1) = 4 1 = 3 Μέση : (3 + 3) / 2 = 3 4 12 45 90 Ο πίνακας στην θέση 3 περιέχει την τιμή στόχο 45 οπότε ολοκληρώθηκε και η αναζήτηση. Τα βήματα που θα κάνατε αν σε περίπτωση η τιμή στόχος ήταν το 4 μια τιμή που δεν υπάρχει στο πίνακα είναι : 1 Επανάληψη Την πρώτη φορά το υπό εξέταση διάστημα έρευνας είναι ολόκληρος ο πίνακας. Αρχή : 0 Τέλος : 4 Μέση : (Αρχή + Τέλος) / 2 = (0 + 4) / 2 = 2 4 12 45 90 Ο πίνακας στην θέση 2 περιέχει την τιμή 12 που είναι μικρότερη από την τιμή στόχο. 2 Επανάληψη Την δεύτερα φορά το υπό εξέταση διάστημα έρευνας είναι : Αρχή : (Μεσαία Θέση + 1) = (2 + 1) = 3 Τέλος : 4 Μέση : (3 + 4) / 2 = / 2 = 3.5 και το ακέραιο μέρος είναι 3 4 12 45 90 Ο πίνακας στην θέση 3 περιέχει την τιμή 45 που είναι μικρότερη από την τιμή στόχο. 3 Επανάληψη 15

Την τρίτη φορά το υπό εξέταση διάστημα έρευνας θα ήταν : Αρχή : (Μεσαία Θέση + 1) = (3 + 1) = 4 Τέλος : 4 Μέση : (4 + 4) / 2 = 4 4 12 45 90 Ο πίνακας στην θέση 4 περιέχει την τιμή 90 που είναι μεγαλύτερη από την τιμή στόχο. 4 Επανάληψη Την τέταρτη φορά το υπό εξέταση διάστημα έρευνας θα ήταν : Αρχή : 4 Τέλος : (Μεσαία Θέση - 1) = 3 Μέση : Σε αυτό το σημείο δεν προχωράτε στον υπολογισμό της μεσαίας θέσης γιατί φτάσατε σε μια μη αποδεκτή συνθήκη, η Αρχή να είναι μεγαλύτερη από το Τέλος του υπό εξέταση διαστήματος. Όταν αληθεύει αυτή η συνθήκη σημαίνει ότι η τιμή στόχος δεν υπάρχει στο πίνακα. Στην διεπαφή της εφαρμογής προσθέστε ένα κουμπί με όνομα btnbinarysearch και κείμενο Δυαδική Έρευνα για να ενεργοποιήσετε την λειτουργία της δυαδικής αναζήτησης. 16

Επιλέξτε το κουμπί εντολών btnbinarysearch και στο παράθυρο Properties κάντε κλικ στο εικονίδιο με το κεραυνό για να εμφανιστούν τα γεγονότα. Βρείτε το γεγονός Click κάντε διπλό κλικ πάνω για να εμφανιστεί το παράθυρο με το προγραμματισμό των γεγονότων. Πληκτρολογείστε μέσα στο σώμα της συνάρτησης και πάνω από αυτό τις παρακάτω εντολές : Πίνακας. Ο κώδικας των btnbinarysearch _Click και BinarySearch 1 int BinarySearch(int[] x, int goal) 2 { 3 int ans = -1; 4 int arxi = 0; 5 int telos = x.length - 1; 6 int mesi; 8 for (; ; ) 9 { 10 if (arxi > telos) 11 { 12 break; 13 } 14 mesi = (arxi + telos) / 2; 15 16 if (x[mesi] == goal) 1 { 18 ans = mesi; 19 break; 20 } 21 else 22 { 23 if (x[mesi] > goal) 24 { 25 telos = mesi - 1; 26 } 2 else 28 { 29 arxi = mesi + 1; 30 } 31 } 32 33 } 34 return ans; 35 } 36 3 private void btnbinarysearch_click(object sender, EventArgs e) 38 { 39 if (noelements == Pinakas.Length) 40 { 1

41 int position = BinarySearch(Pinakas, int.parse(txtnumber.text)); 42 if (position < 0) 43 { 44 MessageBox.Show("Δεν βρέθηκε ο αριθμός στο πίνακα."); 45 } 46 else 4 { 48 MessageBox.Show("Βρέθηκε ο αριθμός στη θέση : " + position.tostring()); 49 } 50 } 51 else 52 { 53 MessageBox.Show("Θα πρέπει να πληκτρολογήσετε πέντε τιμές"); 54 } 55 } O κώδικας για την btnbinarysearch_click είναι ακριβώς ο ίδιος με του γεγονότος btnserialsearch_click με την διαφορά πως αντί να καλέσετε την SerialSearch θα καλέσετε την BinarySearch. Στο Πίνακα στις γραμμές από 1 έως 35 ορίζετε την συνάρτηση BinarySearch η οποία δέχεται ένα πίνακα ακεραίων και μια τιμή στόχο και επιστρέφει την θέση που βρέθηκε ο στόχος ή -1. Το αρχικό διάστημα έρευνας είναι όλος ο πίνακας, η αρχή (γραμμή 4, μεταβλητή arxi) είναι το 0, και το τέλος (γραμμή 5, μεταβλητή telos) είναι το πλήθος των θέσεων του πίνακα μείον 1. Εν συνεχεία εκτελείται μια ατελείωτη επανάληψη όπου κάθε φορά ελέγχετε την συνθήκη τερματισμού και αν αληθεύει τότε τερματίζεται την επανάληψη - γραμμές από 10 έως 13. Εν συνεχεία υπολογίζεται την μεσαία θέση του διαστήματος γραμμή 14. Κατόπιν συγκρίνεται την τιμή της μεσαίας θέσης με την τιμή στόχο και αν είναι ίσες τότε αποθηκεύετε την μεσαία θέση και τερματίζεται την επανάληψη διαφορετικά προσαρμόζεται την αρχή ή το τέλος του υπό εξέταση διαστήματος ανάλογα αν η τιμή στόχος είναι μεγαλύτερη ή μικρότερη από την τιμή της μεσαίας θέσης. 18