Ασκήσεις Γλώσσα Προγραµµατισµού C#



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

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

Εισαγωγή στον Προγραμματισμό

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

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

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

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Κλάσεις και Αντικείµενα

Εισαγωγή στον Προγραμματισμό

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

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

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

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

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

Βασικά Στοιχεία της Java

3 Αλληλεπίδραση Αντικειμένων

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Δεδομένα, τελεστές, είσοδος/έξοδος

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

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

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Δομές ελέγχου & επανάληψης

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

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

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

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

B. Ενσωμάτωση Ιθαγενών Μεθόδων

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

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

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

3. Εκφράσεις και έλεγχος ροής

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

Βασικές Έννοιες Δοµών Δεδοµένων

Εισαγωγή στον Προγραμματισμό

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Βασικά Στοιχεία της Java

2.1 Αντικειµενοστρεφής προγραµµατισµός

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Wrapper Classes, Abstract Classes and Interfaces

Κλάσεις και αντικείμενα #include <iostream.h<

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες Μέθοδοι tostring και equals Αντικείμενα μέσα σε αντικείμενα

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Προγραμματισμός Υπολογιστών με C++

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Στοιχεία εξεταζόµενου Αριθµός Απάντησης Βαθµολογία. Σύνολο (Θέµα 4 ο )

Μεθόδων Επίλυσης Προβλημάτων

4 Συλλογές Αντικειμένων

Προγραμματισμό για ΗΜΥ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Πολλές φορές έχουμε πολλές μεταβλητές του ίδιου τύπου που συσχετίζονται και θέλουμε να τις βάλουμε μαζί.

Οντοκεντρικός Προγραμματισμός

17TimeThis.h function returns reference pointer to same object { return *this; }

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΕΠΛ131 Αρχές Προγραμματισμού

Transcript:

Ασκήσεις Γλώσσα Προγραµµατισµού C# Κατανεµηµένη Αντικειµενοστρεφής Τεχνολογία Ιανουάριος 2004 Τµήµα ιδακτικής της Τεχνολογίας & Ψηφιακών Συστηµάτων Άσκηση 1 Να γραφτεί ένα πρόγραµµα που να εµφανίζει στην οθόνη Hello World. class HelloWorld System.Console.WriteLine( Hello World ); Παρατηρήσεις: Όπως φαίνεται από την εντολή: System.Console.WriteLine( Hello World ); η WriteLine είναι µια στατική µέθοδος του αντικειµένου Console. Το System είναι ο χώρος ονοµάτων (namespace) µέσα στον οποίο περιέχεται το αντικείµενο Console. Επειδή δεν είναι πρακτικό να αναγράφετε σε κάθε κλήση µιας µεθόδου όπως η WriteLine ο χώρος ονοµάτων, ο πιο πάνω κώδικας µπορεί να αποκτήσει τη µορφή: class HelloWorld Console.WriteLine( Hello World ); Άσκηση 2 Γράψτε ένα πρόγραµµα που να διαβάζει το όνοµα του χρήστη και να τυπώνει ένα προσαρµοσµένο στο όνοµα του χρήστη Hello µήνυµα. 1

class ΙnputOutput Console.Write( Please enter your name: ); String strname = Console.ReadLine(); Console.WriteLine( Hello + strname); Άσκηση 3 Γράψτε το πιο πάνω πρόγραµµα χρησιµοποιώντας για την εµφάνιση του ονόµατος του χρήστη µια συµβολοσειρά µε διάταξη. class ΙnputOutput Console.Write( Please enter your name: ); String strname = Console.ReadLine(); Console.WriteLine( Hello 0, strname); Παρατηρήσεις: Η συµβολοσειρά µε διάταξη είναι η Hello 0. Το 0 αντικαθίσταται µε την πρώτη µεταβλητή που ακολουθεί τη συµβολοσειρά σε διάταξη στη λίστα ορισµάτων της µεθόδου WriteLine. Μπορούν να διαταχτούν µέχρι τρεις µεταβλητές µε αυτή την τεχνική, όπως για παράδειγµα: Console.WriteLine( Hello 0 1, from 2, strfirstname, strlastname, strcity); Επισηµαίνεται ότι δεν υπάρχει περιορισµός για την παράθεση µόνο µεταβλητών συµβολοσειράς. Μπορεί να χρησιµοποιηθεί οποιοσδήποτε τύπος δεδοµένων. Tύποι Απαρίθµησης Όταν είναι επιθυµητό να οριστεί ένας διακριτός τύπος που αποτελείται από ένα σύνολο από ονοµαστικές τιµές, χρησιµοποιείται ο τύπος απαρίθµησης που ορίζεται από τη λέξη κλειδί enum. Ένα απλό παράδειγµα είναι το εξής: 2

enum MonthNames January, February, March, April ; Επισηµαίνεται ότι τα στοιχεία της απαρίθµησης είναι τύπου int και το πρώτο στοιχείο έχει την τιµή 0. Κάθε επόµενο στοιχείο έχει τιµή που αυξάνεται κατά 1. Για να οριστεί µια συγκεκριµένη τιµή για το πρώτο στοιχείο, πρέπει να τεθεί η τιµή του σε 1: enum MonthNames January=1, February, March, April ; Για να οριστούν αυθαίρετες τιµές σε κάθε στοιχείο (ακόµα και διπλές τιµές): enum MonthNames January=31, February=28, March=31, April=30 ; Η τελευταία επιλογή πρέπει να είναι τύπος δεδοµένων διαφορετικός από int: enum MonthNames : byte January=31, February=28, March=31, April=30 ; Οι τύποι δεδοµένων που µπορούν να οριστούν περιορίζονται σε long, int, short και byte. Tύποι Αναφοράς Σε αντίθεση µε τους τύπους τιµής, οι τύποι αναφοράς δεν αποθηκεύουν τα πραγµατικά δεδοµένα, αλλά µια αναφορά στα πραγµατικά δεδοµένα. Τέτοιοι τύποι είναι οι κλάσεις, ο τύπος string (συµβολοσειρές) και οι πίνακες. Ο τύπος string H C# παρέχει ένα βασικό τύπο string για το χειρισµό δεδοµένων συµβολοσειρών. Η χρήση του είναι ως εξής: string mystring = some text ; Η ένωση συµβολοσειρών γίνεται ως εξής: string mystring = some text + and a bit more ; Για την προσπέλαση ενός χαρακτήρα, χρησιµοποιείται ο κατάλληλος δείκτης: char chfirst = mystring[0]; Η σύγκριση δύο συµβολοσειρών για ισότητα γίνεται µε χρήση του τελεστή ελέγχου ισότητας: if (mystring == yourstring)... Πίνακες Ένας πίνακας (array) περιέχει µεταβλητές που προσπελαύνονται µέσω δεικτών. Όλες οι µεταβλητές που περιέχονται σε έναν πίνακα (ονοµάζονται στοιχεία του πίνακα) πρέπει να είναι του ίδιου τύπου. Μπορεί για το σκοπό αυτό να χρησιµοποιηθεί οποιοσδήποτε τύπος. 3

Οι διαστάσεις ενός πίνακα ονοµάζονται τάξη και καθορίζει τον αριθµό από δείκτες που σχετίζονται µε το κάθε στοιχείο. Ο πιο συνηθισµένος πίνακας είναι ο µονοδιάστατος πίνακας (τάξη ένα). Ένας πολλαπλών διαστάσεων πίνακας έχει τάξη µεγαλύτερη από ένα. Ο δείκτης της κάθε διάστασης έχει τιµή που ξεκινάει από µηδέν και φθάνει µέχρι το µήκος της διάστασης µείον ένα. Η αρχικοποίηση ενός πίνακα γίνεται ως εξής: string[] arrlanguages = C. C++, C# ; Αυτό είναι συντόµευση για το: arrlanguages[0]= C ; arrlanguages[1]= C++ ; arrlanguages[2]= C# ; To ίδιο ισχύει και για πίνακες πολλών διαστάσεων ïnt[, ] arr = 0,1, 2,3, 4,5; Αυτό είναι συντόµευση για το: arr[0,0] = 0; arr[0,1] = 1; arr[1,0] = 2; arr[1,1] = 3; arr[2,0] = 4; arr[2,1] = 5; Αν δεν είναι επιθυµητό να αρχικοποιηθεί ένας πίνακας µέχρι τέλους, αλλά είναι γνωστές οι διαστάσεις του, η δήλωση είναι η εξής: int[, ] myarr = new int[5,3]; Αν το µέγεθος του πίνακα πρέπει να υπολογιστεί δυναµικά, η δήλωση για τη δηµιουργία του πίνακα γίνεται: int nvar = 5; int[] arrtoo = new int[nvar]; Κλάσεις Μια κλάση αποτελείται από ιδιοχαρακτηριστικά (δεδοµένα) και από µεθόδους (λειτουργίες). Τα ιδιοχαρακτηριστικά και οι µέθοδοι µιας κλάσης µπορεί, είτε να είναι προσβάσιµοι από παντού (οπότε πριν από το όνοµά τους χρησιµοποιείται η λέξη κλειδί public), είτε να είναι προσβάσιµοι µόνο από το εσωτερικό της κλάσης (οπότε πριν από το όνοµά τους χρησιµοποιείται η λέξη κλειδί private). Kάθε κλάση πρέπει να έχει έναν δηµιουργό (constructor), που είναι µια ειδικού τύπου µέθοδος που δίνει αρχικές τιµές στα ιδιοχαρακτηριστικά της κλάσης. Η µέθοδος αυτή έχει πάντα το ίδιο όνοµα µε την κλάση, δεν έχει κάποιο τύπο δεδοµένων ως επιστροφή και είναι public: class TestClass public TestClass() Κώδικας αρχικοποίησης για ιδιοχαρακτηριστικά, κ.λπ. Αν δεν ορίσει ο προγραµµατιστής ένα δηµιουργό, τότε δηµιουργείται ένας αυτόµατα από το µεταγλωττιστή. 4

Άσκηση 4 Γράψτε ένα απλό πρόγραµµα που να υπολογίζει το τετράγωνο ενός αριθµού. Τη σχετική λειτουργία πρέπει να την εκτελεί κατάλληλη µέθοδος µιας κλάσης. Χρησιµοποιείστε µια in παράµετρο για να περάσετε µια τιµή στη µέθοδο αυτή. Επισηµαίνεται ότι στην περίπτωση αυτή η µεταβλητή της µεθόδου αρχικοποιείται µε ένα αντίγραφο της τιµής. public class SquareSample public int CalcSquare(int nsidelength) return nsidelength*nsidelength; class SquareApp SquareSample sq = new SquareSample(); Console.WriteLine(sq.CalcSquare(25).ToString()); Άσκηση 5 Γράψτε ένα απλό πρόγραµµα που να υπολογίζει το τετράγωνο ενός αριθµού. Τη σχετική λειτουργία πρέπει να την εκτελεί κατάλληλη µέθοδος µιας κλάσης. Χρησιµοποιείστε µια ref παράµετρο (παράµετρο αναφοράς) για να περάσετε µια αναφορά (διεύθυνση µνήµης) στη µέθοδο αυτή. // class SquareSample public class SquareSample public void CalcSquare(ref int none4all) none4all *= none4all; class SquareApp SquareSample sq = new SquareSample(); int nsquaredref = 20; // must be initialized sq.calcsquare(ref nsquaredref); Console.WriteLine(nSquaredRef.ToString()); 5

Άσκηση 6 Γράψτε ένα απλό πρόγραµµα που να υπολογίζει το τετράγωνο ενός αριθµού. Τη σχετική λειτουργία πρέπει να την εκτελεί κατάλληλη µέθοδος µιας κλάσης. Χρησιµοποιείστε µια out παράµετρο για να περάσετε το αποτέλεσµα πίσω από τη µέθοδο αυτή στο κυρίως πρόγραµµα. public class SquareSample public void CalcSquare(int nsidelength, out int nsquared) nsquared = nsidelength * nsidelength; class SquareApp SquareSample sq = new SquareSample(); int nsquared; // need not be initialized sq.calcsquare(15, out nsquared); Console.WriteLine(nSquared.ToString()); Σε µια δοµή ιεραρχίας µια κλάση (παραγόµενη κλάση) είναι δυνατόν να παράγεται (να κληρονοµεί) µια άλλη κλάση (κλάση βάσης). Στην περίπτωση αυτή, η παραγόµενη κλάση κληρονοµεί όλα τα χαρακτηριστικά (ιδιοχαρακτηριστικά και µεθόδους) της κλάσης βάσης. Η παραγόµενη κλάση µπορεί να ξαναορίσει (υπερκαλύψει) µεθόδους της κλάσης βάσης, όταν ο προγραµµατιστής της κλάσης βάσης έχει σχεδιάσει αυτή τη µέθοδο για υπερκάλυψη. Αυτό µπορεί να γίνει χρησιµοποιώντας της λέξη κλειδί virtual: virtual void CanBeOverridden() Στην περίπτωση αυτή, στην παραγόµενη κλάση χρησιµοποιείται η λέξη κλειδί override: override void CanBeOverridden() Άσκηση 7 ηµιουργείστε µια κλάση βάσης Triangle που παριστάνει ένα τρίγωνο. Η κλάση αυτή να έχει µια µέθοδο για τον υπολογισµό της επιφάνειας ενός τριγώνου (ComputeArea), η οποία να µπορεί να υπερκαλυφθεί. class Triangle public virtual double ComputeArea(int a, int b, int c) 6

// Heronian formula double s = (a + b + c) / 2.0; double darea = Math.Sqrt(s*(s-a)*(s-b)*(s-c)); return darea; class RightAngledTriangle:Triangle public override double ComputeArea(int a, int b, int c) double darea = a*b/2.0; return darea; class TriangleTestApp Triangle tri = new Triangle(); Console.WriteLine(tri.ComputeArea(2, 5, 6)); RightAngledTriangle rat = new RightAngledTriangle(); Console.WriteLine(rat.ComputeArea(3, 4, 5)); Παρατήρηση: Στην εντολή: class RightAngledTriangle : Triangle οι άνω κάτω τελείες (:) στη δήλωση της κλάσης δείχνουν ότι η κλάση RightAngledTriangle παράγεται από την κλάση Triangle. Άσκηση 8 Ένας διαφορετικός τρόπος για τον επαναπροσδιορισµό µεθόδων είναι η απόκρυψη των µεθόδων της βασικής κλάσης. Αυτό το χαρακτηριστικό είναι ιδιαίτερα χρήσιµο όταν η παραγόµενη κλάση παράγεται από µία κλάση που έχει φτιαχτεί από κάποιον άλλο. Για το σκοπό αυτό χρησιµοποιείται η λέξη κλειδί new. Γράψτε ένα απλό πρόγραµµα που να επιδεικνύει αυτό τον τρόπο επαναπροσδιορισµού µιας µεθόδου. class BaseClass public void TestMethod() Console.WriteLine("BaseClass::TestMethod"); class DerivedClass:BaseClass 7

new public void TestMethod() Console.WriteLine("DerivedClass::TestMethod"); class TestApp DerivedClass test = new DerivedClass(); Test.TestMethod(); // Χρήση της DerivedClass ((BaseClass) test).testmethod(); // Χρήση της BaseClass Άσκηση 9 Τα ιδιοχαρακτηριστικά µιας κλάσης συνήθως (σχεδόν πάντα σε κατανεµηµένες αντικειµενοστρεφείς εφαρµογές) είναι ιδιωτικά (private) για λόγους ασφαλείας. Στην περίπτωση αυτή αποκτάται πρόσβαση σε αυτά µέσω κατάλληλων µεθόδων πρόσβασης. Οι µέθοδοι πρόσβασεις είναι εντολές που εκτελούνται όταν είναι επιθυµητό να διαβαστεί ή να γραφτεί η τιµή ενός ιδιοχαρακτηριστικού. Η µέθοδος πρόσβασης για το διάβασµα της τιµής ενός ιδιοχαρακτηριστικού προσδιορίζεται µε τη λέξη κλειδί get, ενώ η µέθοδος πρόσβασης για την αλλαγή της τιµής ενός ιδιοχαρακτηριστικού προσδιορίζεται µε τη λέξη κλειδί set. Γράψτε ένα απλό πρόγραµµα που να επιδεικνύει αυτές τις δύο µεθόδους πρόσβασης. public class House private int m_nsqfeet; public int SquareFeet get return m_nsqfeet; set m_nsqfeet = value; class TestApp House myhouse = new House(); myhouse.squarefeet = 250; Console.WriteLine(myHouse.SquareFeet); Άσκηση 10 Γράψτε ένα πρόγραµµα που να προσδιορίζει πότε το πρώτο όρισµα που περνιέται στην εφαρµογή αρχίζει µε κεφαλαίο γράµµα, πότε µε µικρό γράµµα και πότε µε ψηφίο. 8

class NestedIfApp public static int Main(string[] args) if (args.length!= 1) Console.WriteLine("Usage: one argument"); return 1; // error level char chletter = args[0][0]; if (chletter >= 'A') if (chletter <= 'Z') Console.WriteLine("0 is uppercase",chletter); return 0; chletter = Char.FromString(args[0]); if (chletter >= 'a' && chletter <= 'z') Console.WriteLine("0 is lowercase",chletter); if (Char.IsDigit((chLetter = args[0][0]))) Console.WriteLine("0 is a digit",chletter); return 0; Άσκηση 11 Γράψτε ένα πρόγραµµα που να χρησιµοποιεί µια εντολή switch για την εµφάνιση των ηµερών ανά µήνα (αγνοώντας τα δίσεκτα έτη). : class FallThrough public static void Main(string[] args) if (args.length!= 1) return; int nmonth = Int32.Parse(args[0]); if (nmonth < 1 nmonth > 12) return; int ndays = 0; switch (nmonth) case 2: ndays = 28; break; case 4: case 6: case 9: 9

case 11: ndays = 30; break; default: ndays = 31; Console.WriteLine("0 days in this month",ndays); Άσκηση 12 Γράψτε ένα πρόγραµµα που να υπολογίζει το παραγοντικό ενός αριθµού χρησιµοποιώντας µια εντολή for. class Factorial public static void Main(string[] args) long nfactorial = 1; long ncomputeto = Int64.Parse(args[0]); long ncurdig = 1; for (ncurdig=1;ncurdig <= ncomputeto; ncurdig++) nfactorial *= ncurdig; Console.WriteLine("0! is 1",nComputeTo, nfactorial); Άσκηση 13 Γράψτε ένα πρόγραµµα που να εµφανίζει τα περιεχόµενα ενός αρχείου πηγαίου κώδικα σε C# στην οθόνη. using System.IO; class WhileDemoApp StreamReader sr = File.OpenText ("whilesample.cs"); String strline = null; while (null!= (strline = sr.readline())) Console.WriteLine(strLine); sr.close(); 10

Άσκηση 14 Γράψτε ένα πρόγραµµα που να ζητάει έναν ή περισσότερους αριθµούς από το χρήστη και να υπολογίζει το µέσο όρο τους. : class ComputeAverageApp ComputeAverageApp theapp = new ComputeAverageApp(); theapp.run(); public void Run() double dvalue = 0; double dsum = 0; int nnoofvalues = 0; char chcontinue = 'y'; string strinput; do Console.Write("Enter a value: "); strinput = Console.ReadLine(); dvalue = Double.Parse(strInput); dsum += dvalue; nnoofvalues++; Console.Write("Read another value?"); strinput = Console.ReadLine(); chcontinue = Char.FromString(strInput); while ('y' == chcontinue); Console.WriteLine("The average is 0",dSum / nnoofvalues); Άσκηση 15 Γράψτε ένα πρόγραµµα που να ταξινοµεί έναν πίνακα ακέραιων αριθµών, έτσι ώστε οι αριθµοί να είναι τοποθετηµένοι στον πίνακα σε αύξουσα σειρά. Ο αλγόριθµος βασίζεται στην εξέταση όλων των στοιχείων του πίνακα µέχρι να βρεθεί ο µικρότερος ακέραιος αριθµός, ο οποίος και τοποθετείται στην αρχή του πίνακα. public class Exercise int[] contents = 22, 45, 6, 12, 88, 3, 19, 300; 11

int min, minindex, temp; for (int i = 0;i<contents.Length;i++) min = contents[i]; minindex = i; for (int j =i+1;j<contents.length;j++) if(contents[j]<min) min = contents[j]; minindex = j; temp = contents[i]; contents[i] = min; contents[minindex] = temp; //Code to display sorted array Console.WriteLine("After sorting the array contains"); for(int i =0;i<contents.Length;i++) Console.WriteLine(contents[i]); Άσκηση 16 Τροποποιείστε το πιο πάνω πρόγραµµα ώστε οι αριθµοί να τοποθετούνται στον πίνακα σε φθίνουσα σειρά. public class Exercise int[] contents = 22, 45, 6, 12, 88, 3, 19, 300; int max, minindex, temp; for (int i = 0;i<contents.Length;i++) max = contents[i]; minindex = i; for (int j =i+1;j<contents.length;j++) if(contents[j]>max) max = contents[j]; minindex = j; temp = contents[i]; contents[i] = max; contents[minindex] = temp; //Code to display sorted array Console.WriteLine("After sorting the array contains"); for(int i =0;i<contents.Length;i++) 12

Console.WriteLine(contents[i]); Άσκηση 17 Γράψτε ένα πρόγραµµα που να επεξεργάζεται έναν πίνακα ακέραιων αριθµών και να τοποθετεί αυτούς που είναι µικρότεροι του 60 σε έναν άλλο πίνακα. public class Exercise public static void Main(String[] args) int[] data = 23, 45,100,2, 44, 67, 100; int[] receiver = new int[7]; //Insert code here which places in receiver //all those int value less than 60 int counter =0, receivecount =0; while(counter <data.length) if(data[counter]<60) receiver[receivecount] = data[counter]; receivecount++; counter++; //Display receiver Console.WriteLine("results"); for(int i = 0;i<receiveCount;i++) Console.WriteLine(receiver[i]); Άσκηση 18 Γράψτε ένα πρόγραµµα που να συνενώνει (merge) δύο πίνακες ακέραιων αριθµών, δηµιουργώντας έναν τρίτο πίνακα. Οι δύο αρχικοί πίνακες, αλλά και ο τελικός που δηµιουργείται είναι ταξινοµηµένοι. public class Exercise public static void Main(string[] args) //Merge the contents of first and second into destination 13

//Assume no duplicates occur in first and second and //between first and second int[] first = 1, 3, 8, 19, 55, 100; int[] second = 2, 11, 31, 58, 119, 155, 1100; int[] destination = new int[50];//assume no more than 50 ints int firstindex =0, secondindex =0, count =0; //Loop around comparing entries while (firstindex<first.length && secondindex<second.length) if(first[firstindex]<second[secondindex]) destination[count] = first[firstindex]; count++; firstindex++; else destination[count] = second[secondindex]; count++; secondindex++; //Clear any remaining elements from first while(firstindex<first.length) destination[count] = first[firstindex]; firstindex++; count++; //Clear any remaining elements from second while(secondindex<second.length) destination[count] = second[secondindex]; secondindex++; count++; Console.WriteLine("results"); for(int j =0;j<count;j++) Console.WriteLine(destination[j]); Άσκηση 19 ίνεται η πιο κάτω κλάση SimpleVar, η οποία έχει ένα ιδιοχαρακτηριστικό (var). Να προσθέσετε στην κλάση αυτή δύο (2) νέες µεθόδους, έτσι ώστε η πρώτη µέθοδος (zero) να µηδενίζει το ιδιοχαρακτηριστικό της κλάσης και η δεύτερη µέθοδος (positive) να επιστρέφει true αν το ιδιοχαρακτηριστικό της κλάσης έχει θετική τιµή. public class SimpleVar private int var; public void increment() 14

var++; public void decrement() var--; public int getvar() return var; //Code goes here //Test code goes here public class SimpleVar private int var; public void increment() var++; public void decrement() var--; public int getvar() return var; public void zero() var =0; public bool positive() //Assume that positive means > 0 return var>0; //Test code goes here Άσκηση 20 Γράψτε µια κλάση που να προσοµοιώνει έναν ανελκυστήρα (Lift). Η κλάση αυτή έχει δύο (2) ιδιοχαρακτηριστικά. Το πρώτο είναι το liftposition που φανερώνει σε ποιό όροφο βρίσκεται ο 15

ανελκυστήρας. Το δεύτερο είναι το top που παριστάνει τον τελευταίο (ανώτερο) όροφο. Οι µέθοδοι που έχει η κλάση είναι οι εξής: uponefloor: Mεταφέρει τον ανελκυστήρα έναν όροφο πιο πάνω, εκτός κι αν αυτός βρίσκεται ήδη στον τελευταίο όροφο. downonefloor: Μεταφέρει τον ανελκυστήρα έναν όροφο πιο κάτω, εκτός κι αν αυτός βρίσκεται ήδη στον κατώτερο. getposition: Επιστρέφει έναν ακέραιο αριθµό που παριστάνει τον αριθµό του ορόφου που βρίσκεται ο ανελκυστήρας. Αν ζητηθεί από τον ανελκυστήρα να µετακινηθεί σε κάποια αδύνατη θέση, τότε η αίτηση αυτή θα πρέπει να αγνοείται. public class Lift int liftposition =0, top = 12; //Assume building has 12 floors public void uponefloor() if(liftposition<top) liftposition++; public void downonefloor() if (liftposition>0) liftposition--; public int getposition() return liftposition; //Test code to go here Άσκηση 21 Να γραφτεί µια κλάση SortedCollection που να διαχειρίζεται έναν ταξινοµηµένο πίνακα από ακέραιους αριθµούς. Η κλάση αυτή έχει τις ακόλουθες µεθόδους: add: Προσθέτει έναν ακέραιο αριθµό στον πίνακα. remove: Αφαιρεί έναν ακέραιο αριθµό από τον πίνακα. display: Εµφανίζει στην οθόνη τους ακέραιους αριθµούς που περιεχονται στον πίνακα. Ο πίνακας πρέπει να είναι πάντοτε ταξινοµηµένος. Υποθέστε ότι ο πίνακας περιέχει µόνο διαφορετικούς ακέραιους αριθµούς. 16

public class SortedCollection private int[] collectionarray; private int noincollection; private int sizeofcollection; public SortedCollection(int size) sizeofcollection = size; collectionarray = new int[size]; noincollection =0; //Clear the array for(int j=0;j<sizeofcollection;j++) collectionarray[j]=0; public void display() for(int j =0;j<noInCollection;j++) Console.Write(" 0", collectionarray[j]); Console.WriteLine(); public void add(int val) collectionarray[noincollection]= val; noincollection++; int index =noincollection-1; int temp; //Array empty just deposit the int if (noincollection ==1) return; // Move down the array swapping until it is in order while(collectionarray[index] < collectionarray[index-1]) temp = collectionarray[index]; collectionarray[index] = collectionarray[index-1]; collectionarray[index-1] = temp; index--; if(index==0) break; public void remove(int val) int index =0; while(collectionarray[index]!=val) index++; //Shift down the elements of the array for (int j =index;j<noincollection-1;j++) collectionarray[j]=collectionarray[j+1] noincollection--; //Test code to be inserted here 17

Άσκηση 22 Γράψτε µια κλάση Employee που παριστάνει έναν υπάλληλο. Η κλάση αυτή περιέχει δύο ιδιοχαρακτηριστικά που παριστάνουν το όνοµα (name) και το µισθό (salary) του υπαλλήλου. Γράψτε για την κλάση αυτή ένα δηµιουργό που να δίνει τιµές στα ιδιοχαρακτηριστικά της κλάσης και δύο µεθόδους πρόσβασης που να επιστρέφουν την τιµή των ιδιοχαρακτηριστικών αυτών. public class Employee private string name; private int salary; public Employee(string name, int salary) this.name = name; this.salary=salary; public string Name get return name; public int Salary get return salary; Άσκηση 23 Γράψτε ένα πρόγραµµα που να εµφανίζει στην οθόνη την τρέχουσα ηµεροµηνία και ώρα. public class Time // public accessor methods public void DisplayCurrentTime( ) System.Console.WriteLine( 0/1/2 3:4:5, Date, Month, Year, Hour, Minute, Second); // constructor public Time(System.DateTine dt) Year = dt.year; Month = dt.month; Date = dt.day; Hour = dt.hour; Minute = dt.minute; 18

Second = dt.second; int Year; int Month; int Date; int Hour; int Minute; int Second; public class Tester static void Main( ) System.DateTime currenttime = System.DateTime.Now; Time t = new Time(currentTime); t.displaycurrenttime( ); 19