ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ ΘΕΩΡΙΑ ΔΙΑΛΕΞΗ 3 Υλικό και Λογισμικό Μεταβλητές, C# Τύποι Δεδομένων, και Είσοδος Έξοδος (Input Output) δεδομένων
Ατζέντα Επανάληψη Υλικό και Λογισμικό Τύποι Δεδομένων στη C# Είσοδος και Έξοδος (Input-Οutput) δεδομένων
Επανάληψη Διαφορετικά επίπεδα γλωσσών προγραμματισμού Γλώσσα μηχανής, Γλώσσα assembly, ενδιάμεση γλώσσα, γλώσσα υψηλού επιπέδου Ένας μεταγλωττιστής μεταφράζει ένα πρόγραμμα από μια γλώσσα υψηλού επιπέδου σε μια γλώσσα χαμηλού επιπέδου Ο C# compiler μεταγλωττίζει ένα πρόγραμμα της C# στην MSIL Η δομή ενός προγράμματος της C# Ένα πρόγραμμα αποτελείται από μια ή περισσότερες τάξεις Μια τάξη αποτελείται από μια ή περισσότερες μεθόδους Μια μέθοδος αποτελείται από μία ή περισσότερες εντολές Υπάρχουν spaces, σχόλια, ονόματα μεταβλητών (identifiers), δεσμευμένες λέξεις (reserved keywords), και namespaces Τα πρώτα μας προγράμματα στη γλώσσα C#
Δομή Προγράμματος της C# (Console) Προδιαγραφές προγράμματος (δεν είναι υποχρεωτικές) //========================================================== // // File: HelloWorld.cs Demo // Author: Νικόλαος Λιόλιος Email: nliolios@teilar.gr // Classes: HelloWorld // -------------------- // Αυτό το πρόγραμμα εκτυπώνει τη φράση "Hello World!” Ενσωματώσεις Βιβλιοθηκών (δεν είναι πάντα υποχρεωτικές) using System; Ορισμοί των τάξεων και των namespaces class HelloWorld { static void Main(string[] args) Console.WriteLine(“Hello World!”); }
Ατζέντα Επανάληψη Υλικό και Λογισμικό Μεταβλητές και Τύποι Δεδομένων στη C# Είσοδος και Έξοδος (Input-Οutput) δεδομένων
Το περιβάλλον ενός Η/Υ: Hardware Τα φυσικά μέρη ενός Η/Υ Π.Χ. CPU, μονάδες αποθήκευσης, keyboard, monitor Είναι ένα ολοκληρωμένο κύκλωμα (chip) που εκτελεί εντολές προγράμματος Π.χ., Intel Pentium IV Sun Sparc Monitor Keyboard Μνήμη CPU Πρωτεύουσα μονάδα αποθήκευσης για δεδομένα και προγράμματα RAM CD ROM Σκληρός Δίσκος
Αποθήκευση Πληροφορίας Οι Η/Υ αποθηκεύουν τα πάντα σε ψηφιακή μορφή: Π.Χ. αριθμοί, πρόγραμμα, εντολές , κείμενα, ήχος και video Η πληροφορία αποθηκεύεται με δυαδικούς αριθμούς (binary numbers) H i , H e a t h e r . 72 105 44 32 72 101 97 116 104 101 114 46
Συνδυασμοί των Δυαδικών Bit 1 2 bits 00 01 10 11 3 bits 000 001 010 011 100 101 110 111 4 bits 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Κάθε επιπρόσθετο bit διπλασιάζει τον αριθμό των πιθανών συνδυασμών
Η πληροφορία αποθηκεύεται στη μνήμη Κάθε κύτταρο μνήμης έχει μια αριθμητική διεύθυνση, η οποία το προσδιορίζει με μοναδικό τρόπο 9278 9279 9280 9281 9282 9283 9284 9285 9286 10011010 Κάθε κύτταρο μνήμης αποθηκεύει ένα byte) Μεγάλες αριθμητικές τιμές αποθηκεύονται σε συνεχόμενες διευθύνσεις μνήμης
Ατζέντα Επανάληψη Υλικό και Λογισμικό Μεταβλητές και Τύποι Δεδομένων στη C# Είσοδος και Έξοδος (Input-Οutput) δεδομένων
Μεταβλητές Η μεταβλητή είναι ένα όνομα που αφορά μια θέση στη μνήμη Κάθε μεταβλητή πρέπει να δηλωθεί, προσδιορίζοντας έτσι το όνομά της και τον τύπο της πληροφορίας ο οποίος θα αποθηκευτεί σε αυτή 9200 9204 9208 9212 9216 9220 9224 9228 9232 numberOfStudents: average: max: total: int numberOfStudents; … int average, max; data type variable name int total; Ποια από τα παρακάτω είναι σωστές δηλώσεις μεταβλητών?? myBigVar VAR1 _test @test 99bottles namespace It’s-all-over
Εντολές Ανάθεσης int total; … total = 55; Μια εντολή ανάθεσης αλλάζει την τιμή μιας μεταβλητής Ο τελεστής ανάθεσης είναι το σύμβολο = int total; … total = 55; Η τιμή στα δεξιά αποθηκεύεται στη μεταβλητή αριστερά του ίσον Η τιμή που είχε η μεταβλητή total γράφεται από πάνω και «ξεχνιέται» η παλαιά της τιμή Μπορούμε να αναθέσουμε μια τιμή σε μια μεταβλητή μόνον εφόσον είναι ίδια με τον τύπο δεδομένων με τον οποίο η μεταβλητή έχει δηλωθεί Μπορούμε να δηλώσουμε και να αρχικοποιήσουμε μια μεταβλητή στην ίδια εντολή (δήλωσης) int total = 55;
Παράδειγμα static void Main(string[] args) { int total; total = 15; System.Console.Write(“total = “); System.Console.WriteLine(total); total = 55 + 5; }
constant int numberOfStudents = 42; Σταθερές Μια σταθερή είναι παρόμοια με μια μεταβλητή μόνο που απαγορεύεται να αλλάξει η τιμή της καθόλη τη διάρκεια του προγράμματος Ο μεταγλωττιστής θα δώσει μήνυμα λάθους αν προσπαθήσουμε να αλλάξουμε την τιμή μιας σταθερής σε κάποιο σημείο του προγράμματος Στη C#, χρησιμοποιούμε τον modifier constant για να δηλώσουμε μια σταθερή constant int numberOfStudents = 42; Γιατί χρησιμοποιούμε σταθερές; Δίνουμε ονόματα σε προκαθορισμένες ποσότητες ενός προγράμματος που δεν υπάρχει λόγος να αλλάξει η τιμή της οπουδήποτε μέσα στο πρόγραμμα. Μας βοηθούν πάρα πολύ στις αλλαγές που κάνουμε στον κώδικα Αποφεύγουμε λάθη από αμέλεια
Τύποι Δεδομένων στη C# Υπάρχουν 15 τύποι δεδομένων στη C# Οκτώ από αυτούς χρησιμοποιούνται για την αναπαράσταση ακεραίων: byte, sbyte, short, ushort, int, uint, long,ulong Δύο χρησιμοποιούνται για την αναπαράσταση πραγματικών αριθμών float, double Ένας είναι για τους decimal: decimal Ένας αναπαριστά τιμές boolean : bool Ένας αναπαριστά τιμές για χαρακτήρες (characters): char Ένας αναπαριστά τιμές για συμβολοσειρές (strings): string Ένας αναπαριστά τιμές για αντικείμενα: object Ένας αναγνωρίζει αυτόματα τον τύπο από την τιμή που ανάτίθεται: var Object
Αριθμητικοί Τύποι Δεδομένων Η διαφορά μεταξύ των διαφόρων αριθμητικών τύπων είναι το μέγεθος (και το εύρος) τιμών που μπορούν να αποθηκευτούν : Type byte sbyte short ushort int uint long ulong decimal float double Storage 8 bits 16 bits 32 bits 64 bits 128 bits Range 0 - 255 -128 - 127 -32,768 – 32,767 0 – 65,537 -2,147,483,648 – 2,147,483,647 0 – 4,294,967,295 -91018 to 91018 0 – 1.81019 1.010-28; 7.91023 με 28-29 σημαντικά ψηφία 1.510-45; 3.41038 με 7 σημαντικά ψηφία 5.010-324; 1.710308 με 15-16 σημαντικά ψηφία
Παραδείγματα Αριθμητικών Μεταβλητών int x = 1; short y = 10; float pi = 3.14f; // f denotes float float f3 = 7E-02f; // 7 * 10-2 = 0.07 double d1 = 7E-100; // 7 * 10-100 // use m to denote a decimal decimal veryLargeNumber = 2894686645.38m; Παράδειγμα: TestNumeric.cs
Boolean Μία μεταβλητή τύπου bool αντιπροσωπεύει μια κατάσταση true ή false Κάθε μεταβλητή τύπου bool μπορεί επίσης να αντιπροσωπεύει οποιεσδήποτε 2-καταστάσεις όπως για παράδειγμα: (Αναμμένο ή σβηστό φως) Οι δεσμευμένες λέξεις true και false είναι οι μόνες επιτρεπτές τιμές για μια μεταβλητή τύπου boolean bool doAgain = true;
Χαρακτήρες Μια μεταβλητή τύπου char περιέχει ΕΝΑ χαρακτήρα ο οποίος εμπεριέχεται σε ένα σύνολο χαρακτήρων (character set) Ένα σύνολο χαρακτήρων είναι μια διατεταγμένη λίστα από χαρακτήρες. Σε κάθε χαρακτήρα αντιστοιχεί ένας μοναδικός εκέραιος αριθμός Η C# χρησιμοποιεί το σύνολο χαρακτήρων Unicode το οποίο είναι ένα υπερσύνολο του ASCII Χρησιμοποιεί 16 bits για κάθε χαρακτήρα επιτρέποντας τελικά 65,536 διαφορετικούς χαρακτήρες να αποθηκευτούν Είναι ένα διεθνές σύνολο χαρακτήρων που περιέχει σύμβολα και χαρακτήρες από όλες τις διαφορετικές γλώσσες Ο πίνακας Unicode μπορεί να βρεθεί στην ιστοσελίδα: http://www.unicode.org/charts/ Οι τιμές των μεταβλητών τύπου char αντιπροσωπεύονται σε ένα πρόγραμμα χρησιμοποιώντας απλά εισαγωγικά (single quotes), όπως π.χ., ‘a’ ‘X’ ‘7’ ‘$’ ‘,’ char response = ‘Y’;
Ακολουθίες Απόδρασης (Escape Sequences)
string message = “Hello World”; Συμβολοσειρές Μια συμβολοσειρά (string) αντιπροσωπεύει μια ακολουθία χαρακτήρων ως μια ομάδα, π.χ., string message = “Hello World”; Ερώτηση: Πως θα πρέπει να τυπώσουμε το παρακάτω string: The double quotation mark is “ Ερώτηση: Πως θα πρέπει να αποθηκεύσουμε το παρακάτω string: \\plucky.cs.yale.edu\zs9$\MyDocs Οι συμβολοσειρές μπορούν να δημιουργηθούν με ρητές τιμές (verbatim literals) χρησιμοποιώντας στην αρχή τον χαρακτήρα @, π.χ., string a2 = @“\\server\fileshare\Hello.cs”;
Αντζέντα Επανάληψη Υλικό και Λογισμικό Μεταβλητές και Τύποι Δεδομένων στη C# Είσοδος και Έξοδος (Input-Οutput) δεδομένων
Data Input Console.ReadLine() Χρησιμοποιείται για να διαβάζει τιμές από το πληκτρολόγιο Παράδειγμα string myString = Console.ReadLine(); Μετατροπή από συμβολοσειρά στο σωστό τύπο δεδομένων Int32.Parse() Χρησιμοποιείται για να μετατρέψει την τιμή της συμβολοσειράς σε ένα ακέραιο Μόλις η συμβολοσειρά μετατραπεί στον κατάλληλο τύπο δεδομένων μπορούμε να κάνουμε πράξεις με την νέα αυτή τιμή Παράδειγμα: string myString = “1023”; int myInt = Int32.Parse( myString ); Double.Parse() Single.Parse()
Παράδειγμα: TaxAndTotal.cs Έξοδος (Output) Η εντολή Console.WriteLine(variableName) χρησιμοποιείται για να εκτυπώσει την τιμή μιας μεταβλητής στην οθόνη Μπορούμε να επέμβουμε στη μορφοποίηση του output χρησιμοποιώντας τα λεγόμενα format specifiers: float price = 2.5f; Console.WriteLine(“Price = {0:C}”, price); Price = $2.50 Για μια ολοκληρωμένη λίστα των τρόπων διαμόρφωσης (format specifiers), δείτε την ιστοσελίδα http://msdn.microsoft.com/library/en-us/csref/html/vclrfFormattingNumericResultsTable.asp Παράδειγμα: TaxAndTotal.cs