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

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

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

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

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

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

Εκφώνηση Να δημιουργήσετε ένα πρόγραμμα το οποίο θα δέχεται δύο ακεραίους αριθμούς έστω α και β και θα υπολογίζει το α υψωμένο στην δύναμη του β (α β

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

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

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

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

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

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

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

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

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

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

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

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ

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

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

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

Αντικειμενοστρεφής Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

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

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

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

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

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

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

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

Παίρνοντας Αποφάσεις 1

Γνωρίστε το Excel 2007

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

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Συναρτήσεις και διαδικασίες

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

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

Δομές ελέγχου ροής προγράμματος

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Ενδεικτική περιγραφή μαθήματος

Υπολογισμός - Εντολές Επανάληψης

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

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

Οι εντολές ελέγχου της ροής ενός προγράμματος.

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

8 FORTRAN 77/90/95/2003

Βασικάχαρακτηριστικάτηςγλώσσας. Πίνακες, Έλεγχος Ροής και Βρόχοι

for for for for( . */

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

Ράβδος Εργαλείων, σχεδόν τα ίδια εργαλεία και εικονίδια υπάρχουν όπως στα άλλα προγράμματα που έχετε μάθει μέχρι σήμερα.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: ΜΕΤΑΒΛΗΤΕΣ ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Η Μέρα της Εβδομάδας. Πες Μου Πότε

3 ο Εργαστήριο Μεταβλητές, Τελεστές

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

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

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

Προγραμματιστικό Περιβάλλον

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Εισαγωγή στην Αριθμητική Ανάλυση

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

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

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

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

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

Εισαγωγή στην PHP. ΕΣΔ 232 Διαχείριση Δεδομένων στη Κοινωνία της Πληροφορίας. Περιεχόμενα. Περιεχόμενα

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

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

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

Transcript:

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

Η φόρμα Form1 Name frmweek Το όνομα του Θερμοκρασίες Εβδομάδας Η γραμμή τίτλου MaximizeButton False Για να μην FormBorderStyle FixedSingle αλλάζει το μέγεθος της φόρμας. Το πρώτο κουτί κειμένου textbox1 Name txtτemp Το όνομα του Το δεύτερο κουτί κειμένου textbox2 Name txtday Το όνομα του Δευτέρα Το τρίτο κουτί κειμένου textbox3 Name txtmin Το όνομα του ReadOnly True Για να μην μπορεί να γράψει ο χρήστης Το τέταρτο κουτί κειμένου textbox4 Name txtmax Το όνομα του ReadOnly True Για να μην μπορεί να γράψει ο χρήστης Το πέμπτο κουτί κειμένου 2

textbox5 Name txtavg Το όνομα του ReadOnly True Για να μην μπορεί να γράψει ο χρήστης Το πρώτο κουμπί εντολών button1 Name btnnext Το όνομα του Επόμενη Το δεύτερο κουμπί εντολών button2 Name btncalculate Το όνομα του Υπολόγισε Το τρίτο κουμπί εντολών button3 Name btnnewweek Το όνομα του Νεα Εβδομάδα Οι 5 ετικέτες Name label1 lbltemp Θερμοκρασία label2 lblday Ημέρα label3 lblmin Μικρότερη label4 lblmax Μεγαλύτερη label5 lblavg Μέσος Όρος H λογική της εφαρμογής είναι να πληκτρολογείτε στο πεδίο txttemp διαφορετικές 3

αριθμητικές τιμές, οι οποίες αντιστοιχούν στις θερμοκρασίες μιας εβδομάδας, και μόλις συμπληρωθούν οι 7 ημέρες να πατήσετε το πλήκτρο Υπολόγισε ώστε να εμφανίσει στα αντίστοιχα πεδία την μικρότερη, την μεγαλύτερη καθώς και την μέση τιμή των θερμοκρασιών. Μετά την πληκτρολόγηση της κάθε τιμής πατάτε το πλήκτρο Επόμενη για να : α) αποδώσετε την τιμή σε μια ημέρα, β) να εμφανίσετε στο πεδίο txtday το όνομα της ημέρας π.χ. Δευτέρα, Τρίτη κ.λπ. γ) να καθαρίσετε το txttemp ώστε να δεχτεί την επόμενη θερμοκρασία. Τέλος με το πάτημα του κουμπιού Νέα Εβδομάδα το πρόγραμμα θα καθαρίσει τα πεδία της εφαρμογής, θα δεχτεί θερμοκρασίες και θα κάνει τους υπολογισμούς για μια νέα εβδομάδα. Για να υλοποιήσετε το πρόγραμμα θα πρέπει να δηλώσετε επτά μεταβλητές για να αποθηκεύσετε τις τιμές των αντιστοίχων ημερών της εβδομάδας, όπως για παράδειγμα : float wk1, wk2, wk3, wk4, wk5, wk6, wk7; Οπότε για να υπολογίσετε το μέσο όρο θα πρέπει να γράψετε εντολές όπως παρακάτω : float mesos = (wk1 + wk2 + wk3 + wk4 + wk5 + wk6 + wk7) / 7; Όπως αντιλαμβάνεστε είναι μια πρακτική που δεν υπολογίζει λάθος αποτελέσματα αλλά δημιουργεί διαχειριστικά προβλήματα Για παράδειγμα αν θέλατε να αποθηκεύσετε τις θερμοκρασίες ενός έτους θα έπρεπε να χρησιμοποιήσετε 365 μεταβλητές και κατά συνέπεια να γράφετε τεράστιες γραμμές κώδικα ακόμα και για τον υπολογισμό απλών αποτελεσμάτων. Έτσι λοιπόν για τις περιπτώσεις που θέλετε να αποθηκεύσετε πολλά δεδομένα του ιδίου τύπου μπορείτε να χρησιμοποιήσετε πίνακες, τους οποίους θα δηλώσετε όπως παρακάτω : 4

ΤύποςΔεδομένων [] ΟνομαΠίνακα; και πριν χρησιμοποιήσετε ένα πίνακα θα πρέπει να δημιουργήσετε με την εντολή new τις αντίστοιχες θέσεις που θέλετε να έχει ο πίνακας : ΟνομαΠίνακα = new ΤύποςΔεδομένων[ ΠλήθοςΣτοιχείων]; Οι ανωτέρω δηλώσεις μπορεί να γίνουν και σε ένα βήμα ΤύποςΔεδομένων [] ΟνομαΠίνακα = new ΤύποςΔεδομένων[ ΠλήθοςΣτοιχείων]; οπότε για να ορίσετε 7 θέσεις δεκαδικών αριθμών στις οποίες θα αποθηκεύσετε τις θερμοκρασίες της εβδομάδας θα πρέπει να γράψετε : float [] Week = new float[7]; Ο πίνακας Week καταλαμβάνει στην μνήμη του υπολογιστή επτά συνεχόμενες θέσεις, εκ των οποίων η κάθε μια μπορεί να αποθηκεύσει ένα δεκαδικό αριθμό και η αρίθμηση τους ξεκινά από την θέση 0 μέχρι και την θέση 6. Week 0 1 2 3 4 5 6 Για να αποδώσετε τις τιμές 8.5 και 9.35 στην πρώτη και τέταρτη θέση αντίστοιχα θα πρέπει να γράψετε : Week[0] = 8.5; Week[3] = 9.35; Μπορείτε να δώσετε τιμές στις θέσεις του πίνακα με οποιαδήποτε σειρά, δηλαδή δεν είναι υποχρεωτικό να δώσετε τιμή στην θέση 0 πριν δώσετε τιμή στην θέση 1. Αντίστοιχα για να αποδώσετε σε μια μεταβλητή k τύπου float την τιμή της τρίτης θέσης του πίνακα θα πρέπει να γράψετε : 5

k = Week[2]; Η αναφορά των θέσεων του πίνακα είτε για ανάγνωση είτε για εγγραφή, με μια ακέραια τιμή μέσα στις αγκύλες διευκολύνει την διαχείριση τους με την βοήθεια των επαναλήψεων αφού η ίδια λειτουργία (ενέργεια) υλοποιείται σε όλες τις θέσεις του πίνακα. Για παράδειγμα αν όλες οι θέσεις του πίνακα Week είχαν τιμές τότε για να υπολογίσετε το άθροισμα τους θα κάνετε μια επανάληψη όπως παρακάτω : Πίνακας 1. Διαχείριση πίνακα με την βοήθεια επανάληψης float sum = 0; int i; for (i = 0; i < 7; i++) { sum = sum + Week[i]; } Στο πίνακα 1 αντί να δηλώνετε συγκεκριμένες θέσεις του Week χρησιμοποιείτε μέσα στις αγκύλες το μετρητή της επανάληψης, ο οποίος κατά την λειτουργία της, παίρνει τις επιθυμητές τιμές από 0 (η πρώτη θέση στο Week) μέχρι και 6 (η τελευταία θέση στο Week). Οπότε αν ο πίνακας Week είχε 365 θέσεις για να αποθηκεύσει τις θερμοκρασίες ενός έτους τότε η μόνη αλλαγή που θα κάνατε είναι στο μετρητή της επανάληψης. Κατά παρόμοιο τρόπο θα μπορούσατε στην υλοποίηση του προγράμματος να δηλώσετε σαν καθολική μεταβλητή ένα μετρητή, ο οποίος θα χρησιμοποιηθεί σαν δείκτης στο πίνακα Week και με την έναρξη της εφαρμογής θα πάρει την τιμή 0 για να δηλώσετε ότι η θερμοκρασία που θα πληκτρολογήσετε θα αποδοθεί στην πρώτη ημέρα και κάθε φορά που θα πατάτε το πλήκτρο Επόμενη θα αυξάνει την τιμή του κατά 1 μέχρι και το 6 γιατί αυτή είναι η μέγιστη τιμή που μπορεί να λάβει στα πλαίσια του προγράμματος. Επιλέξτε το κουμπί εντολών btnnext και στο παράθυρο Properties κάντε κλικ στο εικονίδιο με το κεραυνό για να εμφανιστούν τα γεγονότα. Βρείτε το γεγονός Click 6

κάντε διπλό κλικ πάνω για να εμφανιστεί το παράθυρο με το προγραμματισμό των γεγονότων. Πληκτρολογείστε τις παρακάτω εντολές : Πίνακας 2. Ο κώδικας της εφαρμογής 1 namespace DaysWeek 2 { 3 public partial class frmweek : Form 4 { 5 float [] Week = new float[7]; 6 int noday = 0; 7 8 public frmweek() 9 { 10 InitializeComponent(); 11 } 12 13 14 string DisplayDay(int Day) 15 { 16 string grday; 17 18 switch (Day) 19 { 20 case 0: grday = "Δευτέρα"; 21 break; 22 case 1: grday = "Τρίτη"; 23 break; 24 case 2: grday = "Τετάρτη"; 25 break; 26 case 3: grday = "Πέμπτη"; 27 break; 28 case 4: grday = "Παρασκευή"; 29 break; 30 case 5: grday = "Σάββατο"; 31 break; 32 case 6: grday = "Κυριακή"; 33 break; 34 default: 35 grday = ""; 36 break; 37 } 38 39 return grday; 40 } 41 42 private void btnnext_click(object sender, EventArgs e) 43 { 44 if (noday < 7) 45 { 7

46 Week[noDay] = float.parse(txttemp.); 47 noday = noday + 1; 48 txttemp. = ""; 49 txtday. = DisplayDay(noDay); 50 } 51 } 52 53 private void btncalculate_click(object sender, EventArgs e) 54 { 55 if (noday < 7) 56 { 57 MessageBox.Show("Θα πρέπει να πληκτρολογήσετε 7 θερμοκρασίες."); 58 } 59 else 60 { 61 int i; 62 float min = Week[0]; 63 float max = Week[0]; 64 float sum = Week[0]; 65 66 for (i = 1; i < 7; i++) 67 { 68 if (Week[i] < min) 69 { 70 min = Week[i]; 71 } 72 73 if (Week[i] > max) 74 { 75 max = Week[i]; 76 } 77 sum = sum + Week[i]; 78 } 79 80 float mesos = sum / 7; 81 82 txtavg. = mesos.tostring(); 83 txtmin. = min.tostring(); 84 txtmax. = max.tostring(); 85 } 86 } 87 88 private void btnnewweek_click(object sender, EventArgs e) 89 { 90 txttemp. = ""; 91 txtavg. = ""; 92 txtmin. = ""; 93 txtmax. = ""; 94 txtday. = "Δευτέρα"; 8

95 noday = 0; 96 } 97 98 } 99 } Στις γραμμές 5 και 6 δηλώνετε σαν καθολικές μεταβλητές το πίνακα Week και το μετρητή noday που αντιστοιχεί στην τρέχουσα ημέρα της εβδομάδας. Η αρχική τιμή 0 δηλώνει ότι η πρώτη θερμοκρασία που θα πληκτρολογήσετε θα αποδοθεί στην πρώτη θέση του πίνακα. Στις γραμμές 14 με 40 κατασκευάζετε την DisplayDay, μια συνάρτηση ή οποία δέχεται σαν παράμετρο μια ακέραια τιμή που αντιστοιχεί σε μια ημέρα της εβδομάδας και επιστρέφει το όνομα της αντίστοιχης ημέρας. Πατώντας το πλήκτρο Επόμενη εκτελείται ο κώδικας της συνάρτησης btnnext_click στο σώμα της οποίας γίνεται ένας έλεγχος αν η τιμή του μετρητή noday είναι μικρότερη από 7 και αν ναι τότε αποθηκεύει την τιμή της θερμοκρασίας στο πίνακα Week, αυξάνει το μετρητή κατά 1, καθαρίζει το πεδίο της θερμοκρασίας και εμφανίζει το όνομα της τρέχουσας ημέρας στο κουτί κειμένου txtday. Στις γραμμές 53 με 86 δηλώνετε όλες τις εντολές που θα εκτελεστούν με το πάτημα του πλήκτρου Υπολόγισε. Αρχικά γίνεται ένας έλεγχος αν η τιμή του μετρητή noday είναι μικρότερη από 7 και αν ναι τότε εμφανίζεται ένα μήνυμα στην οθόνη του υπολογιστή διαφορετικά υπολογίζονται και εμφανίζονται στα αντίστοιχα κουτιά κειμένου, η μικρότερη, η μεγαλύτερη καθώς και ο μέσος όρος των τιμών του πίνακα Week. Για τον υπολογισμό τους χρησιμοποιούνται τρεις μεταβλητές οι οποίες αρχικοποιούνται με την τιμή της πρώτη θέσης του Week. Η λογική είναι ότι αν ο πίνακας είχε μόνο μια θέση τότε αυτή θα ήταν η μικρότερη τιμή. Το ίδιο φυσικά ισχύει και για την μεγαλύτερη τιμή. Τώρα που ο πίνακας έχει 7 θέσεις και έχετε ήδη λάβει υπόψη σας την πρώτη θέση αποθηκεύοντας την τιμή της στις μεταβλητές min, max και sum αντίστοιχα, θα πρέπει να διασχίσετε τις υπόλοιπες 6 για να ελέγξετε αν η αρχική εκτίμηση είναι η σωστή. Αν τυχόν βρείτε μια μεγαλύτερη ή μικρότερη τιμή τότε την αποθηκεύετε στην αντίστοιχη μεταβλητή. Σε οποιαδήποτε περίπτωση προσθέτετε την τρέχουσα τιμή στην μεταβλητή sum. 9

Στο τέλος της επανάληψης υπολογίστε το μέσο όρο από το πηλίκο της διαίρεσης του αθροίσματος των θερμοκρασιών με το πλήθος των ημερών της εβδομάδας. Στο σώμα της btnnewweek_click καθαρίζετε τα κουτιά κειμένου της φόρμας, αποδίδετε την τιμή Δευτέρα στο txtday και αρχικοποιείτε με το 0 την τιμή του μετρητή noday. Τις τιμές του πίνακα Week δεν χρειάζεται να τις "καθαρίσετε" ώστε να δεχτούν τις τιμές της νέας εβδομάδας γιατί πατώντας το πλήκτρο Επόμενο θα γράψετε πάνω από τις παλιές τιμές. Εν συνεχεία πατήστε F5 για να τρέξετε την εφαρμογή σας και αφού πληκτρολογήσετε επτά θερμοκρασίες πατώντας το πλήκτρο Επόμενο εν συνεχεία πατήστε το πλήκτρο Υπολόγισε για να εμφανίσετε την μικρότερη, την μεγαλύτερη καθώς και το μέσο όρο των θερμοκρασιών της εβδομάδας. Η χρήση των πινάκων σε αρκετές περιπτώσεις μειώνει κατά πολύ την συγγραφή των απαραίτητων ελέγχων, όπως για παράδειγμα στην περίπτωση της DisplayDay όπου όλος ο κώδικας μπορεί να αντικατασταθεί από το Πίνακα 3. Πίνακας 3. Ο κώδικας της DisplayDay 1 string DisplayDay(int Day) 2 { 3 string[] DayNames = { "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή" }; 4 5 if ((Day >= 0) && (Day < 7)) { 6 return DayNames[Day]; 7 } 8 return ""; 10

9 } Στην γραμμή 3 του πίνακα 3, η δήλωση του πίνακα DayNames καθώς και η απόδοση των αντιστοίχων τιμών θα μπορούσε να γίνει ως εξής : string []DayNames = new string[7]; DayNames[0] = "Δευτέρα"; DayNames[1] = "Τρίτη";... H C# - όπως και σχεδόν όλες οι γλώσσες προγραμματισμού - δεν επιτρέπει την μαζική απόδοση τιμών σε ένα πίνακα εκτός από την αρχικοποίηση του, όπου μέσα σε άγκιστρα δηλώνετε τις τιμές του πίνακα χωρίζοντας με κόμμα: ΤύποςΔεδομένων [] ΟνομαΠίνακα = new ΤύποςΔεδομένων[ΠλήθοςΣτοιχείων] { τιμή_πρώτης_θέσης, τιμή_δεύτερης_θέσης,...}; Παράδειγμα 1 Η δήλωση για ένα πίνακα ακεραίων με 4 θέσεις και με τιμές αντίστοιχα 2, 13, 7, 22 θα ήταν : int [] example = new int [4] { 2, 13, 7, 22 }; Κατά την αρχικοποίηση του πίνακα με τιμές δεν είναι απαραίτητο να δηλώσετε το πλήθος των θέσεων αφού η C# θα διαβάσει τις τιμές μέσα στα άγκιστρα και θα δημιουργήσει τις αντίστοιχες θέσεις στο πίνακα. ΤύποςΔεδομένων [] ΟνομαΠίνακα = { τιμή_πρώτης_θέσης, τιμή_δεύτερης_θέσης,...}; 11

Παράδειγμα 2 Η δήλωση για το πίνακα ακεραίων του παραδείγματος 1 θα μπορούσε να ήταν : int [] example = { 2, 13, 7, 22 }; Και οι δύο τρόποι αρχικοποίησης είναι ισοδύναμοι. Στην γραμμή 3 του πίνακα 3, η αρχικοποίηση του πίνακα DayNames γίνετε με τις τιμές "Δευτέρα", "Τρίτη" κ.λπ χωρίς την δήλωση του πλήθους των στοιχείων του πίνακα. Στο πίνακα 3, οι γραμμές 61 έως 80 υπολογίζουν την μικρότερη, την μεγαλύτερη καθώς και το μέσο όρο των τιμών του πίνακα. Οι συγκεκριμένες εντολές εμπεριέχονται μέσα στη btncalculate_click και επιπλέον αναφέρονται συγκεκριμένα μόνο στο πίνακα Week οπότε δεν είναι δυνατόν η επαναχρησιμοποίηση του κώδικα για τον υπολογισμό αυτών των μεγεθών σε ένα άλλο πίνακα με πραγματικές τιμές. Θα ήταν καλύτερα να δημιουργήσετε ένα μηχανισμό για τον υπολογισμό τους. Πρώτη Πρακτική Θα μπορούσατε να κατασκευάσετε τρεις ξεχωριστές συναρτήσεις μια για τον υπολογισμό της μικρότερης τιμής, μια για τον υπολογισμό της μεγαλύτερης τιμής και μια για τον υπολογισμό του μέσου όρου των τιμών του πίνακα. Για την κατασκευή τους θα πρέπει να σκεφτείτε με τον ίδιο τρόπο αφού η υλοποίηση τους ομοιάζει αρκετά : 1. Το όνομα της συνάρτησης που θα χρησιμοποιήσετε για τον υπολογισμό της κάθε εργασίας. Για παράδειγμα τα ονόματα CalcMin, CalcMax και CalcAvg δηλώνουν με σαφήνεια τους υπολογισμούς που επιτελούνται στις αντίστοιχες συναρτήσεις. 2. Το πλήθος των παραμέτρων που χρειάζεται για να λειτουργήσει ο μηχανισμός και στην προκειμένη περίπτωση είναι μόνο ο πίνακας με τις τιμές των θερμοκρασιών. 3. Το είδος των παραμέτρων όπου στη συγκεκριμένη περίπτωση είναι ένας πίνακας με πραγματικές τιμές. 12

4. Το είδος του αποτελέσματος όπου και για τις τρεις συναρτήσεις είναι ένας πραγματικός αριθμός. Ο πίνακας 4 περιέχει το κώδικα για την συνάρτηση CalcMin την οποία και μπορείτε να τοποθετήσετε μέσα στην κλάση frmweek (στο πίνακα 3 σε οποιαδήποτε από τις γραμμές 7, 12, 41, 52, 87, 97) Πίνακας 4. Ο κώδικας της CalcMin 1 float CalcMin(float[] pinakas) 2 { 3 float min = pinakas[0]; 4 int i; 5 for (i = 1; i < pinakas.length; i++) 6 { 7 if (pinakas[i] < min) 8 { 9 min = pinakas[i]; 10 } 11 } 12 return min; 13 } Στο πίνακα 4, στην γραμμή 1 δηλώνετε ότι η είσοδος για την συνάρτηση θα είναι ένας πίνακας πραγματικών αριθμών με όνομα pinakas. Το πλήθος των στοιχείων του πίνακα δεν χρειάζεται να δηλωθεί γιατί την ώρα που θα καλέσετε την CalcMin θα πρέπει να περάσετε σαν είσοδο ένα πίνακα, ο οποίος έχει συγκεκριμένες θέσεις και τιμές. Από την στιγμή που έχετε ένα πίνακα οποιουδήποτε μεγέθους για να βρείτε την μικρότερη τιμή του θα πρέπει να αποθηκεύσετε την τιμή της πρώτης θέσης σε μια μεταβλητή π.χ. min γραμμή 3 και εν συνεχεία για τις υπόλοιπες θέσεις του pinaka θα συγκρίνεται τις τιμές του με αυτήν της μεταβλητής min και αν βρίσκετε μικρότερη τιμή θα την αποθηκεύεται στην min γραμμές 7 έως 10. Στο τέλος της επανάληψης η μεταβλητή min έχει αποθηκευμένη την μικρότερη τιμή του pinaka την οποία και επιστρέφει η συνάρτηση CalcMin. Θα πρέπει να παρατηρήσετε ότι στην γραμμή 5 η 13

ιδιότητα Length ενός πίνακα επιστρέφει το μήκος του. Κατά παρόμοιο τρόπο μπορείτε να δημιουργήσετε τις συναρτήσεις CalcMax και CalcAvg. O πίνακας 5 περιέχει το κώδικα για την btncalculate_click μετά την προσθήκη των τριών συναρτήσεων CalcMin, CalcMax και CalcAvg. Θα πρέπει να παρατηρήσετε στο πίνακα 5 και στις γραμμές 10, 11 και 12 την κλήση των συναρτήσεων με παράμετρο το πίνακα Week. Πίνακας 5. Ο κώδικας της btncalculate_click 1 private void btncalculate_click(object sender, EventArgs e) 2 { 3 if (noday < 7) 4 { 5 MessageBox.Show("Θα πρέπει να πληκτρολογήσετε 7 θερμοκρασίες."); 6 } 7 else 8 { 9 float min = CalcMin(Week); 10 float max = CalcMax(Week); 11 float mesos = CalcAvg(Week); 12 13 txtavg. = mesos.tostring(); 14 txtmin. = min.tostring(); 15 txtmax. = max.tostring(); 16 } 17 } H κατασκευή συναρτήσεων παρέχει ευελιξία και επαναχρησιμοποίηση του κώδικα. Για παράδειγμα σε οποιοδήποτε σημείο του προγράμματος μπορείτε να δημιουργήσετε ένα πίνακα πραγματικών αριθμών και να καλέσετε την CalcMin για τον υπολογισμό της μικρότερης τιμής. Δεύτερη Πρακτική Θα μπορούσατε να κατασκευάσετε μια συνάρτηση για τον υπολογισμό της μικρότερης, της μεγαλύτερης τιμής και τον μέσο όρο των τιμών του πίνακα. Όπως γνωρίζετε μέχρι τώρα, μια συνάρτηση επιστρέφει μια τιμή οπότε για να επιστρέψετε περισσότερες τιμές θα πρέπει να τις βάλετε στις παραμέτρους με το πρόθεμα out ή ref όπως παρακάτω : 14

Πίνακας 6. Ο κώδικας της CalcMinMaxAvg 1 float CalcMinMaxAvg(float [] pinakas, out float min, out float max) 2 { 3 int i; 4 min = pinakas[0]; 5 max = pinakas[0]; 6 float sum = pinakas[0]; 7 8 for (i = 1; i < pinakas.length; i++) 9 { 10 if (pinakas [i] < min) 11 { 12 min = pinakas[i]; 13 } 14 15 if (pinakas[i] > max) 16 { 17 max = pinakas[i]; 18 } 19 sum = sum + pinakas[i]; 20 } 21 22 return sum / pinakas.length ; 23 } O πίνακας 7 περιέχει το κώδικα για την btncalculate_click μετά την προσθήκη της συνάρτησης CalcMinMaxAvg. Θα πρέπει να παρατηρήσετε στο πίνακα 7 και στην γραμμή 11 την κλήση της συνάρτησης η οποία επιστρέφει τρεις τιμές, μια με το return και δύο μέσω των παραμέτρων της. Πίνακας 7. Ο κώδικας της btncalculate_click 1 private void btncalculate_click(object sender, EventArgs e) 2 { 3 if (noday < 7) 4 { 5 MessageBox.Show("Θα πρέπει να πληκτρολογήσετε 7 θερμοκρασίες."); 6 } 7 Else 8 { 9 float min, max, mesos; 10 11 mesos = CalcMinMaxAvg (Week, out min, out max); 12 13 txtavg. = mesos.tostring(); 15

14 txtmin. = min.tostring(); 15 txtmax. = max.tostring(); 16 } 17 } Στην CalcMinMaxAvg δεν είναι απαραίτητο να επιστρέψετε μια τιμή με την return.θα μπορούσατε και τις τρεις τιμές να τις επιστρέψετε με το πρόθεμα out οπότε οι απαραίτητες αλλαγές θα ήταν : α) Πίνακας 6 γραμμή 1 void CalcMinMaxAvg(float [] pinakas, out float min, out float max, out mesos) β) Πίνακας 6 γραμμή 22 mesos = sum / pinakas.length; γ) Πίνακας 7 γραμμή 11 CalcMinMaxAvg (Week, out min, out max, out mesos); Αν αντί για την δήλωση out χρησιμοποιούσατε την δήλωση ref τότε οι αλλαγές που θα έπρεπε να κάνετε, είναι : α. Στο πίνακα 6 στην γραμμή 1 θα έπρεπε να γράφατε : float CalcMinMaxAvg(float [] pinakas, ref float min, ref float max) β. Στο πίνακα 7 στην γραμμή 11 θα έπρεπε να γράφατε : mesos = CalcMinMaxAvg (Week, ref min, ref max); γ. Στο πίνακα 7 στην γραμμή 10 θα έπρεπε να γράφατε : min = 0; max = 0; 16

Αντί για το 0 θα μπορούσατε να χρησιμοποιήσετε οποιαδήποτε άλλη τιμή. Δηλαδή η διαφορά ανάμεσα στο ref και στο out είναι ότι αν χρησιμοποιήσετε την δήλωση ref θα πρέπει οι μεταβλητές να έχουν αρχικοποιηθεί με κάποια τιμή πριν περάσουν σαν παράμετροι σε μια συνάρτηση. 17