Ασκήσεις Γλώσσα Προγραµµατισµού 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