Προγραμματισμός PASCAL Τύποι Δεδομένων ορισμένοι από το Χρήστη Ανδρέας Σάββα
Βασική Τύποι Δεδομένων String Integer Real Char Boolean Βαθμωτοί τύποι Δεδομένων
Μεταβλητές και Τύποι Δεδομένων VAR Num : integer; x, y : Real; MyName : String; Flag : Boolean; Vathmos : Char; Begin Num := 34; x := 39.003; MyName := ’Κώστας’; Flag := True; Vathmos := ’A’; End.
Υποπεριοχή Μία μεταβλητή μπορεί να οριστεί να είναι υποπεριοχή κάποιου βαθμωτού τύπου. VAR <όνομα μεταβλητής> : <ελάχιστη τιμή> .. <μέγιστη τιμή>; Σύνταξη: Παράδειγμα: H μεταβλητή “Minas” είναι τύπου integer αλλά μπορεί να πάρει τιμές μόνο από το 1 μέχρι το 12. VAR Minas : 1..12;
Παραδείγματα Num := 1334; Τα πιο κάτω έχουν συντακτικά λάθη. Γιατί; VAR Num : integer; Mera : 1..31; Minas : 1..12; Kefalea : ’A’..’Z’; Num := 1334; Mera := 23; Minas := 5; Kefalea := ’N’; Τα πιο κάτω έχουν συντακτικά λάθη. Γιατί; VAR Ora : 0.0..12.0; Vathmos : 20..0; VAR Mera : 1..31; Begin Mera := 0; End.
Δεδομένα Τύπου ορισμένα από τον Χρήστη Ο χρήστης μπορεί να ορίσει ένα νέο τύπο δεδομένων. TYPE <όνομα τύπου> = <βασικός τύπος>; Σύνταξη: Παράδειγμα: TYPE MyInteger = Integer; VAR x : MyInteger; H μεταβλητή x είναι τύπου integer
Διαδικασίες, Συναρτήσεις Το Πρόγραμμα Program Εxample; uses wincrt; CONST ……… TYPE VAR Begin End. Διαδικασίες, Συναρτήσεις Δηλωτικό μέρος Εκτελεστικό Επικεφαλίδα Τύποι ορισμένοι από τον χρήστη
Δεδομένα Τύπου Υποπεριοχής TYPE <όνομα τύπου> = <ελάχιστη τιμή> .. <μέγιστη τιμή>; Σύνταξη: Παράδειγμα: Προσοχή: Minas είναι τύπος δεδομένων m είναι μεταβλητή TYPE Minas = 1..12; VAR m : Minas;
Παράδειγμα σε Πρόγραμμα Program DisplayMonths; uses wincrt; CONST MaxMonth = 12; TYPE Month = 1..MaxMonth; VAR m : Month; Begin (* main *) For m := 1 to MaxMonth do Case m of 1 : writeln(’Γενάρης’); 2 : writeln(’Φλεβάρης’); 3 : writeln(’Μάρτης’); ... 12: writeln(’Δεκέμβρης’); End End. Τύποι δεδομένων σε αυτό το πρόγραμμα: String Integer Real Char Boolean Month Γενάρης Φλεβάρης Μάρτης Απρίλης Μάης Ιούνης Ιούλης Αύγουστος Σεπτέμβρης Οκτώβρης Νοέμβρης Δεκέμβρης Αποτέλεσμα:
Το ίδιο πρόγραμμα με Διαδικασία Program DisplayMonths; uses wincrt; CONST MaxMonth = 12; TYPE Month = 1..MaxMonth; VAR m : Month; Procedure Display(m:Month); Begin case m of 1 : writeln(’Γενάρης’); 2 : writeln(’Φλεβάρης’); 3 : writeln(’Μάρτης’); ... 12: writeln(’Δεκέμβρης’); End End; Begin (* main *) for m := 1 to MaxMonth do Display(m) End.
Τυπικές Παράμετροι Procedure Display (m : 1..12); TYPE Month = 1..12; Procedure Display (m : 1..12); Procedure Display (m : Month);
Δεδομένα Βαθμωτού Τύπου ορισμένα από τον Χρήστη Ο χρήστης μπορεί να ορίσει ένα νέο τύπο δεδομένων στον οποίο μπορεί να καθορίσει και τις τιμές του τύπου αυτού. TYPE <όνομα τύπου> = (<τιμή1>,<τιμή2>, … ,<τιμήΝ>); Σύνταξη: Παραδείγματα: TYPE Day = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); Season = (Winter, Spring, Summer, Autumn); Colour = (Red, Green, Blue); Vathmos = (A, B, C, D, F); MyBoolean = (MyFalse, MyTrue);
Δεδομένα Βαθμωτού Τύπου ορισμένα από τον Χρήστη Παράδειγμα: TYPE Day = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); VAR d : Day; Mon < Tue Tue < Wed ORD(Mon) = 0 ORD(Fri) = 4 SUCC(Thu) = Fri PRED(Tue) = Mon d := Fri; d := ’Fri’; d := Friday; d := 4;
Δεδομένα Βαθμωτού Τύπου ορισμένα από τον Χρήστη Μπορούν να χρησιμοποιηθούν όπως τα άλλα δεδομένα βαθμωτού τύπου, π.χ. If d <= Fri then writeln(’Καθημερινή’) Else writeln(’Σαββατοκύριακο’); For d := Mon to Fri do ...
Δεδομένα Βαθμωτού Τύπου ορισμένα από τον Χρήστη Όμως δεν μπορούν να χρησιμοποιηθούν σε συνδυασμό με τις εντολές Read/Readln και Write/Writeln. Read(d); Write(d); Case d of Mon : writeln(’Monday’); Tue : writeln(’Tuesday’); Wed : writeln(’Wednesday’); Thu : writeln(’Thursday’); Fri : writeln(’Friday’); Sat : writeln(’Saturday’); Sun : writeln(’Sunday’); End; Παρουσίαση ημερών
Παράδειγμα σε Πρόγραμμα Program DisplayMonths; uses wincrt; TYPE Month=(Jan,Feb,Mar,Apr,May,Jun, Jul,Aug,Sep,Oct,Nov,Dec); VAR m : Month; Procedure Display(m:Month); Begin case m of Jan : writeln(’Γενάρης’); Feb : writeln(’Φλεβάρης’); Mar : writeln(’Μάρτης’); ... Dec : writeln(’Δεκέμβρης’); End End; Begin (* main *) for m := Jan to Dec do Display(m) End.
Υποπεριοχές δεδομένων βαθμωτού τύπου ορισμένα από τον χρήστη Παράδειγμα: TYPE Day = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); Weekday = Mon..Fri; VAR d : Day; w : Weekday; w := Sun; d := Sun; w := d; for w := Mon to Sun do . . . for d := Mon to Sun do Προσοχή από λογικά λάθη:
Άσκηση 1 Πιο είναι το αποτέλεσμα του πιο κάτω προγράμματος; Program Vatmoi; uses Wincrt; TYPE Grades = (A,B,C,D,E,F); PassMark = A..D; VAR Pass : PassMark; Begin (* main *) For Pass := A to D do Case Pass of A : writeln(’Excellent’); B : writeln(’Very Good’); C : writeln(’Good’); D : writeln(’Pass’); End End. Γιατί η ποιο κάτω δήλωση είναι λάθος; Grades = (1,2,3,4,5,6,7,8,9,10);
Άσκηση 2 Πιο είναι το αποτέλεσμα του πιο κάτω προγράμματος; Program ColoursWithCountries; uses Wincrt; TYPE Colours = (Red,Blue,Black,Orange,Green,White); Countries = (France,Italy,Greece,Spain); VAR Colour : Colours; Country : Countries; i : Integer; Begin (* main *) For Colour := White downto Orange do For Country := Italy to Spain do Begin i := ORD(Colour) + ORD(Country); writeln(i:5,succ(i)); End End.
Οι διαδικασίες DisplayMonth και DisplaySeason στην επόμενη σελίδα Άσκηση 3 Πιο είναι το αποτέλεσμα του πιο κάτω προγράμματος; Program EpoxesTouXronou; uses wincrt; TYPE Month = (Jan,Feb,Mar,Apr,May,Jun, Jul,Aug,Sep,Oct,Nov,Dec); Season = (Winter,Spring,Summer,Autumn); VAR m : Month; s : Season; Begin (* main *) s := Winter; for m := Jan to Dec do DisplayMonth(m); if (ORD(m)+1) DIV 3 = 0 then if s = Autumn then s := Winter else s := SUCC(s); DisplaySeason(s); End. Οι διαδικασίες DisplayMonth και DisplaySeason στην επόμενη σελίδα
Άσκηση 3 (συνέχεια) Procedure DisplayMonth(m:Month); Begin Case m of Jan : write(’Γενάρης : ’); Feb : write(’Φλεβάρης : ’); Mar : write(’Μάρτης : ’); ... Dec : write(’Δεκέμβρης : ’); End End; Procedure DisplaySeason(s:Season); case s of Winter : writeln(’Χειμώνας’); Spring : writeln(’Άνοιξη’); Summer : writeln(’Καλοκαίρι’); Autumn : writeln(’Φθινόπωρο’);