ΗPascalμεπαραδείγματα GeorgeHadjikyriacou 2007 ghadjikyriacou@yahoo.com
Περιεχόμενα Μάθημα1 Εισαγωγή Μάθημα2 Μεταβλητές Μάθημα3 ΠροτάσειςΕλέγχου Μάθημα4 Βρόγχοι Μάθημα5 Πίνακες Μάθημα6 Διαδικασίες Συναρτήσεις Μάθημα7 ΣειριακάΑρχεία Μάθημα8 ΛίγοΧρώμα... Μάθημα9 Γραφικά(BGI) Μάθημα10 Γραφικά(BGI) Κίνηση Μάθημα11 Ήχος Παράρτημα ΛύσειςΑσκήσεων 2 3 8 13 19 25 29 34 39 44 53 58 61 65
Μάθημα1 Εισαγωγή 3
ΓιαναξεκινήσουμεναπρογραμματίζουμεστηνPascalτο πρώτοπράγμαπουχρειαζόμαστεναέχουμεένανcompiler τηςpascal.γιαταπαρακάτωπαραδείγματα χρησιμοποιήθηκεοcompilerbloodsheddev Pascalέκδοση1.9.2. Αςξεκινήσουμελοιπόν.. ΈναπρόγραμμαστηνPascalέχειτηνεξήςδομή. ProgramΟνομα_προγραμματος; Begin «πρόγραμμα» End. Πρόγραμμα1 Οσκοπόςτουπρώτουμαςπρογράμματοςείναινα παρουσιάσειστηνοθόνημαςτομήνυμα«helloworld!!!». Παρακάτωδίνετεηλίστα: ProgramLesson1_Program1; UsesCrt; Begin Clrscr; Write('HelloWorld!!!');{σχόλια} Readln; End. ΕπεξήγησηΠρογράμματος ProgramLesson1_Program1; Τοόνοματουπρογράμματοςστηνπερίπτωσημαςλέγετε Lesson1_Program1 4
Begin Αρχήτουπρογράμματος Clrscr; ΚαθαρισμόςτηςΟθόνης. Write('HelloWorld!!!'); Παρουσιάζειστηνοθόνητουμήνυμαπουβρίσκετεμέσα στα('.') Readln; ΤοReadlnεδώχρησιμοποιείτεγιανασταματήσειτο πρόγραμμακαιναπεριμένειτονχρήστηναπατήσειenter γιανατερματιστεί. End. Τέλοςτουπρογράμματος Παρατηρήσεις 1. Όλεςοιεντολέςτελειώνουνμετοελληνικό ερωτηματικό«;» 2. Ότιγράψουμεμέσαστιςαγκύλες{}θεωρούνεσχόλια καιδενεκτελούνταιαπότονcompiler. ΒήματαΥλοποίησης Βήμα1.ΑνοίγουμετοπρόγραμμαDev Pascal Βήμα2.ΑπότομενούFileεπιλεγούμεNewSourceFile Βήμα3.Πληκτρολογούμετοκώδικα 5
Βήμα4.Κάνουμεcompileτοπρόγραμμαπουμόλιςγράψαμε (αφούγίνειέλεγχοςγιατυχόνλάθη)απότομενούexecute Compile Βήμα5.Αφούπάνεόλακαλά(Totalerrors:0)τρέχουμετο πρόγραμμαμαςμεexecute Run.Στηνοθόνηπαρουσιάζετε: 6
Ορισμοί ΤέλοςΜαθήματος γλώσσαπρογραμματισμού.τεχνικήγλώσσασχεδιασμένηγιανα δημιουργείήναεκφράζειπρογράμματα. Compiler.Πρόγραμμαυπολογιστήπουχρησιμοποιείταιγιανα μεταγλωττίζει(απόγλώσσαπρογραμματισμούσεγλώσσαπου μπορείνακαταλάβειοηλεκτρονικόςυπολογιστής) 7
Μάθημα2 Μεταβλητές 8
Μεταβλητή(variable)στιςγλώσσεςπρογραμματισμού ονομάζουμεέναγλωσσικόαντικείμενοπουμπορείναλάβει διάφορεςτιμές,μίακάθεφορά.οιτιμέςμιαςμεταβλητής περιορίζονταισυνήθωςσεένατύποδεδομένων. ΒασικοίτύποιδεδομένωντηςPascal: 1. integer ακραίοι,παίρνουντιμέςαπό 32768μέχρι32767 2. LongInt ακραίοι,παίρνουντιμέςαπό 2^31μέχρι2^31 1 38 3. real πραγματικοί,παίρνουντιμέςαπό3.4x10 μέχρι 3.4x1038 4. char χαρακτήρες,όπωςγιαπαράδειγμα:'a','b', '+' 5. Boolean ΠαίρνειμόνοδυοτιμέςTrue/False 6. String Συμβολοσειρά(μέγιστουμεγέθους255 χαρακτήρων)όπωςγιαπαράδειγμα:«hello» Σταθερέςconstant ΣταθερέςείναιαντικείμεναταοποίαπαίρνουνμόνοΜΙΑ τιμή.καιτοποθετούνταιπάνωαπότιςμεταβλητές. Συντάσσονταιέτσι: Const Όνομα_σταθεράς=τιμή; Πρόγραμμα1 Οσκοπόςτουπρογράμματοςείναιναδιαβάσει(είσοδος) δυοακεραίουςαπότοπληκτρολόγιοκαινατυπώσει (έξοδος)τοαποτέλεσμα.παρακάτωδίνετεηλίστα: ProgramLesson2_Program1; 9
VarNum1,Num2,Sum:Integer; Begin Write('Inputnumber1:'); Readln(Num1); Write('Inputnumber2:'); Readln(Num2); Sum:=Num1+Num2; Writeln('Sum:',Sum); Readln; End. ΑκολουθήστεταβήματαυλοποίησηςτουΜαθήματος1 (σελίδα3)γιανατρέξετετοπρόγραμμα. ΕπεξήγησηΠρογράμματος VarNum1,Num2,Sum:Integer; ΔήλωσημεταβλητώναυτόγίνετεξεκινώνταςμετοVar (απότοvariable),δηλώνουμεταονόματατωνμεταβλητών πουθαχρησιμοποιήσουμε(num1,num2,sum)καιστοτέλος δηλώνουμετιτύπουείναιαυτέςοιμεταβλητές(:integer). Readln(Num1); ΜετηνReadln(όνομα_μεταβλητής)τοπρόγραμμαπεριμένει μέχριναδοθείτιμήστηνμεταβλητή. Sum:=Num1+Num2; ΕδώγίνετεεκχώρησητιμήςστηνμεταβλητήSumαφού κάνειτηνπράξημεταξύτηςnum1καιnum2(πρόσθεση). Writeln('Sum:',Sum); Τυπώνειτοαποτέλεσματηςπρόσθεσης,δηλαδήτηντιμή τηςμεταβλητήςsum. Παρατηρήσεις 10
3. ΗεντολήWriteτυπώνειστηνοθόνηκαιοκέρσορας δεναλλάζειγραμμή,ενώμετηνεντολήwriteln τυπώνειστηνοθόνηκαιμετάοκέρσοραςαλλάζει γραμμή. 4. Μετο:=κάνουμεεκχώρησητιμήςσεμεταβλητή μέσαστοπρόγραμμα. 5. Ισχύουνοιπράξεις:+(πρόσθεση), (αφαίρεση), *(πολλαπλασιασμός),/(διαίρεση),( )(παρενθέσεις) Πρόγραμμα2 Συμβολοσειρές ProgramLesson2_Program2; Varname:String; Begin Write('WhatisyourName?:'); Readln(name); Writeln('Hello,',name,'areyouOK?'); Readln; End. 11
Άσκηση ΝαγράψετεέναπρόγραμμασεPascalπουθαδιαβάζειτρεις ακεραίουςαριθμούςαπότοπληκτρολόγιοκαινατυπώνει τονμέσοόροτους. Αριθμός1+Αριθμός2+Αριθμός3 Μέσοςόρος= 3 12 ΤέλοςΜαθήματος
Μάθημα3 ΠροτάσειςΕλέγχου 13
HΠρότασηΕλέγχουIF THEN Συντάσσεταιέτσι: If«πρόταση»then Begin «εντολές» End; ΟσκοπόςτηςπρότασηςελέγχουIF THENείναιναελέγχει μιαέκφρασηανείναιαληθήςήψευδής.σεπερίπτωσηπου είναιαληθήςτότεεκτελούνταιοιεντολέςπουακολουθούν αλλιώτικαπαραλείπονταιάραδενεκτελούνται.για παράδειγμα: Ανημεταβλητήaείναιμεγαλύτερηαπό0τότετύπωσε στηνοθόνη«θετικός»ανείναιμικρότερηαπό0τότε τύπωσε«αρνητικός»καιανείναιίσημε0τότετύπωσε «Έδωσες0». Γιαναδούμετώραπωςμπορούμενατοπούμεαυτόστην Pascal. Πρόγραμμα3 ProgramLesson3_Program1; Vara:Integer; Begin Write('Dosearithmo:'); Readln(a); if(a>0)then Begin Write('Thetikos'); End; if(a<0)then Begin 14
Write('Arnitikos'); End; if(a=0)then Begin Write('Edoses0'); End; Readln; End. HΠρότασηΕλέγχουIF THEN ELSE Συντάσσεταιέτσι: If«πρόταση»then Begin «εντολές» End else Begin «εντολές» End; ΟσκοπόςπουβάζουμετοELSE(αλλιώτικα)σεμια πρότασηελέγχουif THENείναισεπερίπτωσηπουδεν ισχύουνοιifαλλάκάτιάλλο. Γιαπαράδειγμα: Ανημεταβλητήbείναιμεγαλύτερηηίσημε100τότε τύπωσε«οκ»αλλιώτικατύπωσε«error». Πρόγραμμα2 ProgramLesson3_Program2; Varb:Integer; Begin Write('Dosearithmo:'); Readln(b); if(b>=100)then 15
Begin Write('OK'); End else Begin Writeln('Error'); End; Readln; End. Σεπερίπτωσητώραπουέχουμεπάνωαπόμιασυνθήκεςνα ελέγξουμεχρησιμοποιούμετουςλογικούςτελεστέςand καιor.τοandτοχρησιμοποιούμεάμαισχύουνολεσοι προτάσειςενώτοorχρησιμοποιείτεανισχύειμιααπό τιςπροτάσεις. Γιαπαράδειγμα: Ανημεταβλητήcείναιμικρότερηαπό100KAI μεγαλύτερηαπό0τότετύπωσε«είσαιμέσασταόρια» αλλιώτικατύπωσε«είσαιεκτόςορίων». Πρόγραμμα3 ProgramLesson3_Program3; Varc:Integer; Begin Write('Dosearithmo:'); Readln(c); if(c>=0)and(c<=100)then Begin Write('Eisemesastaoria') End else Begin Write('Eiseektosoriwn'); End; Readln; End. 16
HΠρότασηΕλέγχουCASE ΠαίζειτονρόλοτωνπολλώνIF,απότιςοποίεςθα εκτελεστείμόνοημία. Πρόγραμμα4 ProgramLesson3_Program4; Varc:char; Begin Write('Dosea,borc:'); Readln(c); casecof 'a': Begin writeln('alpha'); End; 'b': Begin writeln('beta'); End; 'c': Begin writeln('gamma'); End; End; Readln; End. Παρατηρήσεις ΠροσέξτεσεποιαEndμπαίνει«;»σεποιοEndμπαίνει«.» καισεποιοendδενμπαίνειτίποτα. Ασκήσεις 17
1. ΝαγραφείπρόγραμμαστηPascalπουθαζητάδυο ακεραίουςαριθμούςκαινατυπώνειτονμεγαλύτερο. 2. ΝαγραφείπρόγραμμαστηPascalπουθαμετατρέπει ποσάαπόκυπριακήλύρασεευρώκαθώςκαιαπό ΕυρώσεΚυπριακήλύρα.Στηναρχήτου προγράμματοςναυπάρχειμενούόπουθαεπιλέγουμε τιμετατροπήθέλουμενακάνουμε. ΝαυλοποιηθείμεCase.Τομενούναείναιτηςμορφής: 1.EUR CYP 2.CYP EUR Select>_ 18 ΤέλοςΜαθήματος
Μάθημα4 Βρόγχοι 19
Ολόγοςπουχρησιμοποιούμεβρόγχουςείναιότανθέλουμε ναεπαναλάβουμεένακομμάτικώδικαπολλέςφορές.οι βρόγχοιπουθαεξετάσουμεείναιοι:for,while.doκαιο βρόγχοςrepeat.until. ΟΒρόγχοςFOR Συντάσσεταιέτσι: Forμεταβλητή:=αρχήtoτέλοςdo Begin «Κώδικαςγιαεπανάληψη»; End; Πρόγραμμα1 Τυπώνεικάθετατουςαριθμούςαπότο1ωςτο10. ProgramLesson4_Program1; varcount:integer; begin forcount:=1to10do begin writeln(count); end; Readln; End. Εδώέχουμετηνμεταβλητήcount(τύπουinteger) τηςόποιαςδίνουμεαρχικήτιμή1καιτελικήτιμή 10(άραοβρόγχοςμαςθαεκτελεστεί10φορές), αυτόπουγίνετεμέσαστονβρόγχοείναιοτι τυπώνετεητιμήπουπαίρνεικάθεφοράημεταβλητή countδηλαδή1,2,3,4,5,6,7,8,9,10. Πρόγραμμα2 Τυπώνεικάθετατουςαριθμούςαπότο10ωςτο1. 20
ProgramLesson4_Program2; varcount:integer; begin forcount:=10downto1do begin writeln(count); end; Readln; End. Κάνειτοίδιομετοπρόγραμμα1αλλάαυτήτην φοράομετρητήςcountμετράανάποδα(downto).άρα ημεταβλητήcountπαίρνειτιςτιμές: 10,9,8,7,6,5,4,3,2,1 ΟΒρόγχοςWhile. do Συντάσσεταιέτσι: while«συνθήκη»do Begin «Κώδικαςγιαεπανάληψη»; End; Πρόγραμμα3 Τυπώνεικάθετατουςαριθμούςαπότο0ωςτο9. ProgramLesson4_Program3; vara:integer; begin a:=0; whilea<10do begin writeln(a); a:=a+1; end; 21
Readln; End. Καταρχάςδίνουμεαρχικήτιμήστημεταβλητήa :=0;. Όσοτοaείναιμικρότεροτου10τυπώνειτοaκαι στησυνέχειαπροσθέτει1 Άρατοaθαπαίρνει τιςτιμές0,1,2,3,4,5,6,7,8,9. Στοa<10(δηλαδήτο9)θατερματιστείοβρόγχος γιατονλόγωότιδενθαισχύειησυνθήκηκαιστην συνέχειαθατερματιστείτοπρόγραμμα. 22
ΟΒρόγχοςRepeat Until Συντάσσεταιέτσι: Repeat «Κώδικαςγιαεπανάληψη»; Until«Συνθήκη»; Πρόγραμμα4 ProgramLesson4_Program4; vara:integer; begin a:=0; Repeat writeln(a); a:=a+1; Until(a>9); Readln; End. ΌπωςκαιστοΠρόγραμμα3δίνουμεαρχικήτιμήστη μεταβλητήa:=0;. Θαπροσθέτει1στοaμέχριτοaναπάρειτιμή μεγαλύτερητου9 Άρατοaθαπαίρνειτιςτιμές 0,1,2,3,4,5,6,7,8,9. Μόλιςτοaπάρειτηντιμή10(a>9)θα τερματιστείοβρόγχοςγιατονλόγωότιδενθα ισχύειησυνθήκηκαιστηνσυνέχειαθατερματιστεί τοπρόγραμμα. Προσοχή!Οιβρόγχοιμεσυνθήκηπρέπεινα περιλαμβάνουνκάτιπουνααλλάζειτηντιμήτης έκφρασης,ώστεαυτήναγίνειψευδήςκαιοβρόγχος ναλήξει,αλλιώςδενθατελειώσειποτε. 23
Άσκηση ΝαγραφείπρόγραμμαστηPascal(χρησιμοποιώντας βρόγχο)πουθαδιαβάζει10ακεραίουςαπότο πληκτρολόγιοκαινατυπώνειτοάθροισματους. ΤέλοςΜαθήματος 24
Μάθημα5 Πίνακες 25
Πίνακες Arrays Πίνακαονομάζουμεδιάταξηδεδομένωνμιαςή περισσοτέρωνδιαστάσεωνηοποίαείναισυγκεκριμένου τύπουδεδομένων. Γιαπαράδειγμαέχουμεέναπίνακαακραίων5θέσεωντον οποίοονομάζουμεmyarrayκαιτονδηλώνουμεέτσιστις μεταβλητέςμας: myarray:array[1..5]ofinteger;. myarray[1] 4 myarray[2] myarray[3] 7 1 myarray[4] 3 myarray[5] 6 Πρώτοστοιχειότουπίνακαmyarrayείναιοmyarray[1]που έχειτιμήτονακέραιο4καιτοτελευταίοστοιχείοείναιο myarray[5]πουέχειτιμήτονακέραιο6. Γιαναδώσουμετιμήσεέναστοιχειότουπίνακαmyarray γραφούμε: Π.χ Κατευθείαν myarray[2]:=7; ήμέσωπληκτρολογίου readln(myarray[2]); Γιαναπαρουσιάσουμεμιατιμήαπότονπίνακαmyarray γραφούμε: Π.χ write(myarray[3]); 26
Άμαείναιμεγάλοςοπίνακαςκαλόείναινα χρησιμοποιούμεβρόγχουςγιατηνπροσπέλασητου. Πρόγραμμα1 ΓέμισμακαιΠαρουσίασηστοιχείωντουπίνακαστην οθόνη. ProgramLesson5_Program1; var myarray:array[1..5]ofinteger; count1,count2:integer; begin forcount1:=1to5do begin readln(myarray[count1]); end; forcount2:=1to5do begin write(myarray[count2]); end; readln; end. Άσκηση 1. ΝαγραφείπρόγραμμαστηPascalπουθαγεμίζειέναν πίνακαακεραίωντονpin1οποιοςείναι10θέσεων, στηνσυνέχειαθααθροίζειταστοιχείακαιθα τυπώνειτοαποτέλεσμα. 2. ΝαγραφείπρόγραμμαστηPascalπουθαγεμίζειέναν πίνακαακεραίωντονpin2οποιοςείναι5θέσεων,και 27
στηνσυνέχειαθατυπώνειτουςαρνητικούςαριθμούς καθώςκαιτοπλήθοςτους(πόσοιείναι). 3. ΝαγραφείπρόγραμμαστηPascalπουθαγεμίζειέναν πίνακαακεραίωντονpin3οποιοςείναι5θέσεων, στηνσυνέχειαθαβρίσκειτομικρότεροστοιχείοκαι θατοτυπώνειστηνοθόνη. ΟιασκήσειςναυλοποιηθούνμεβρόγχουςFOR. ΤέλοςΜαθήματος 28
Μάθημα6 Διαδικασίες Συναρτήσεις 29
Διαδικασίες procedures Διαδικασίαονομάζετεμιαομάδαεντολώνμεήχωρίς παραμέτρους,ηεκτέλεσητηςοποίαςπροκαλείταιμέσω μιαςκλήσηςδιαδικασίας. Μαζίμετιςσυναρτήσεις(functions)μαςγλυτώνουναπότον επαναληπτικόπρογραμματισμό. Πρόγραμμα1 ProgramLesson6_Program1; proceduredia(aa,bb,cc,dd:integer); begin writeln('aa:',aa,'bb:',bb,'cc:',cc,'dd:',dd); end; begin dia(10,22,37,49); readln; end. Βήματαεκτέλεσης: 4. Γίνετεηκλήσητηςδιαδικασίαςdia(10,22,37,49);Με ορισματατουςακεραίους10,22,37,49. 5. Οιακέραιοι10,22,37,49περνούνσανορίσματαστην διαδικασίαdia(aa,bb,cc,dd:integer);στιςμεταβλητέςaa, bb,cc,dd 6. Γίνετεηπαρουσίασητωνμεταβλητώνστηνοθόνηκαι τερματίζετεηδιαδικασία. 7. Πατάμε[ENTER]γιανατερματιστείτοπρόγραμμα. Έναάλλοπαράδειγμα: Πρόγραμμα2 ProgramLesson6_Program2; 30
vara,b:integer; procedureprosthesi(aa,bb:integer); begin writeln('prosthesi:',aa+bb); end; procedureaferesi(aa,bb:integer); begin writeln('aferesi:',aa bb); end; begin Write('Doseton1oakereo:'); readln(a); Write('Doseton2oakereo:'); readln(b); prosthesi(a,b); aferesi(a,b); readln; end. Βήματαεκτέλεσης: 1. Τοπρόγραμμαμαςζητάδυοαριθμούςπου αποθηκεύονταιστιςμεταβλητέςaκαιb. 2. Στησυνέχειακαλείτεηδιαδικασίαprosthesi(a,b); όπουεκτυπώνειτηνπρόσθεσητωνδυομεταβλητών καιτερματίζετεηδιαδικασία. 3. Μετάκαλείτεηδιαδικασίαaferesi(a,b);όπου εκτυπώνειτηναφαίρεσητωνδυομεταβλητώνκαι τερματίζετεηδιαδικασία. 4. Πατάμε[ENTER]γιανατερματιστείτοπρόγραμμα. Συναρτήσεις functions 31
Δουλεύουνόπωςτιςδιαδικασίεςαλλάοισυναρτήσεις επιστρέφουνμιατιμήστοκυρίωςπρόγραμμαμέσωτου ονόματοςτης. Πρόγραμμα3 ProgramLesson6_Program3; vara,b,pro,afe:integer; functionprosthesi(aa,bb:integer):integer; begin prosthesi:=aa+bb; end; functionaferesi(aa,bb:integer):integer; begin aferesi:=aa bb; end; begin Write('Doseton1oakereo:'); readln(a); Write('Doseton2oakereo:'); readln(b); pro:=prosthesi(a,b); afe:=aferesi(a,b); writeln('prosthesh:',pro,'aferesh:',afe); readln; end. Βήματαεκτέλεσης: 1. Τοπρόγραμμαμαςζητάδυοαριθμούςπου αποθηκεύονταιστιςμεταβλητέςaκαιb. 2. Στησυνέχειακαλείτεησυνάρτησηprosthesi(a,b); όπουυπολογίζειτηνπρόσθεσητωνδυομεταβλητών τοαποτέλεσμαεπιστρέφεικαιγίνετεεκχώρησητιμής στημεταβλητήproτουκυρίωςπρογράμματος. 32
3. Μετάκαλείτεησυνάρτησηaferesi(a,b);όπου υπολογίζειτηναφαίρεσητωνδυομεταβλητώντο αποτέλεσμαεπιστρέφεικαιγίνετεεκχώρησητιμής στημεταβλητήafeτουκυρίωςπρογράμματος. 4. Γίνετεπαρουσίασητωναποτελεσμάτωνστηνοθόνη. 5. Πατάμε[ENTER]γιανατερματιστείτοπρόγραμμα. Ασκήσεις 1. ΤροποποιείστετοΠρόγραμμα1ούτωςώστεη διαδικασίαdia(10,22,37,49);ναεκτελεστεί10φορές(να κάνετεχρήσηβρόγχου). 2. Ναγραφείμιασυνάρτηση(function)στηPascalπουθα δέχεταισανορίσματαδυοακεραίουςκαινα επιστρέφειστοκυρίωςπρόγραμματονμικρότερο.το διάβασματωνδυοακεραίωνκαθώςκαιηκλήσητης συνάρτησηςναγίνετεστοκυρίωςπρόγραμμα. ΤέλοςΜαθήματος 33
Μάθημα7 ΣειριακάΑρχεία 34
Αρχείακειμένου Ηδυνατότητανααποθηκεύσειςσεένααρχείοδεδομέναή ναανοίξειςένααρχείοκειμένουκαιναδιαβάσειςτα περιεχόμενατουμπορείναμαςβοηθήσειπάραπολύστην ανάπτυξηπρογραμμάτων. Εδώθαασχοληθούμεμετηνεγράφηκαιτηνανάγνωση αρχείωνκειμένουήσειριακώναρχείων(sequentialfiles). Εγγραφήσεαρχείοκειμένου Πρόγραμμα1 ProgramLesson7_Program1; VarFName,Txt:String; UserFile:Text; Begin Write('Doseonomaarxeiou(px.C:\test.txt):'); readln(fname); Assign(UserFile,FName); Rewrite(UserFile); Writeln('Grapsetokimeno:'); Readln(Txt); Writeln(UserFile,Txt); Close(UserFile); End. ΕπεξήγησηΠρογράμματος UserFile:Text Δηλώνουμεότιτοαρχείοθαπεριέχεικείμενο(text). Assign(UserFile,FName); Αντιστοίχησητουαρχείου.Περνούνταορίσματατύπος αρχείουκαιόνομααρχείου(πλήρηςδιαδρομή).δηλαδήτο αρχείοfnameθαείναιτύπουuserfileδηλαδήκείμενο. 35
Rewrite(UserFile); ΆνοιγματουαρχείουFNameγιαεγγραφή(ανέχειήδη κείμενοτοαρχείοσβήνετεκαιγράφειτονέο). ΚάνονταςχρήσητουAppend(UserFile);προσθέτουμετο κείμενοστοτέλοςτουαρχείου(εφόσονυπάρχειτο αρχείο!!!)κρατώνταςτοπροηγούμενοκείμενο. Writeln(UserFile,Txt); Εγγραφήκειμένουστοαρχείο(όχιστηνοθόνη). Close(UserFile); ΚλείσιμοτουαρχείουFName(απαιτείτε). Ανάγνωσηαπόαρχείοκειμένου Πρόγραμμα2 ProgramLesson7_Program2; VarUserFile:Text; FileName,TFile:String; Begin Write('Doseonomaarxeiou(px.C:\test.txt):'); readln(filename); Assign(UserFile,FileName); Reset(UserFile); Repeat Readln(UserFile,TFile); Writeln(TFile); UntilEof(UserFile); Close(UserFile); Readln; End. ΕπεξήγησηΠρογράμματος 36
Reset(UserFile); ΆνοιγματουαρχείουFileNameγιαανάγνωση. Repeat Readln(UserFile,TFile); Writeln(TFile); UntilEof(UserFile); ΔιάβαζεαπότοαρχείοReadln(UserFile,TFile);Καινα παρουσιάζειςστηνοθόνηwriteln(tfile);μέχρινα φτάσειςστοτέλοςτουαρχείουuntileof(userfile);. (Eof Endoffile) Close(UserFile); ΚλείσιμοτουαρχείουFileName(απαιτείτε). Παρατηρήσεις Ηανάγνωσητουαρχείουγίνετεγραμμή γραμμήμέχριτο τέλοςτουeof. ΔιαγραφήΑρχείου(Προσοχή Κίνδυνος!!!) Πρόγραμμα3 ProgramLesson7_Program3; VarUFile:Text; FileName:String; Begin Write('Doseonomaarxeiou(px.C:\test.txt):'); readln(filename); Assign(UFile,FileName); 37
Erase(UFile); End. ΕπεξήγησηΠρογράμματος Erase(UFile); ΆνοιγματουαρχείουFileNameγιαδιαγραφή. Άσκηση Ναγράψετεμιαδιαδικασία(procedure)στηνpascalπουθα ζητάτιςπληροφορίες:όνομα,επίθετο,e mail,τηλέφωνοκαι νατιςαποθηκεύεισεαρχείοκειμένου(append).στη συνέχειαθαγίνεταιερώτησηανθέλουμενασυνεχίσουμε ναπροσθέτουμεδεδομέναστοαρχείο.ανηαπάντηση είναιθετικήθαξανακαλείταιηδιαδικασία,ενώανείναι αρνητικήθατερματίζεταιτοπρόγραμμα. Ταδεδομένανααποθηκεύονταιστοαρχείοστηνεξής μορφή: Onoma:Γιώργος Epitheto:Χ. e mail:ghadjikyriacou@yahoo.com Tilefono:99123456 ΤέλοςΜαθήματος 38
Μάθημα8 ΛίγοΧρώμα 39
Αςδώσουμελίγοχρώμα ΕδώπρέπειναχρησιμοποιήσουμεέναUnitστηPascalπου ενεργοποιείορισμένεςλειτουργίεςπουείναιυπεύθυνες γιατηνέξοδοπροςτηνοθόνη,τοcrt. Μπαίνειστηναρχήτουπρογράμματοςμαςκάτωαπότο Program Συντάσσετεέτσι: Usescrt; ΗεντολήTextcolor(int); Ηεντολήtextcolor(int);μαςδίνειτηνδυνατότητανα αλλάξουμετοχρώματωνγραμμάτωντουπρογράμματος μας. Συντάσσετεέτσι: textcolor(int); Όπουintδηλώνουμεένανακέραιοαπότο0ωςτο15που αντιστοιχείτοκάθεχρώμα. Ταχρήματα: 0 Black 1 DarkBlue 2 DarkGreen 3 DarkCyan 4 DarkRed 5 Purple 6 Brown 7 LightGrey 8 DarkGrey 9 LightBlue 10 LightGreen 11 Cyan 12 LightRed 13 Pink 40
14 Yellow 15 White Παράδειγμαηεντολήtextcolor(14);Κάνειταγράμματατου προγράμματοςκίτρινα! 41
Πρόγραμμα 1 programlesson8_program1; Usescrt; var i:integer; begin fori:=0to15do begin textcolor(i); delay(200); clrscr; writeln('helloworld!!!'); end; readln; end. ΕπεξήγησηΠρογράμματος delay(200); Δίνειχρονικήκαθυστέρηση200ms(1000ms=1sec) clrscr; Καθαρισμόςτηςοθόνης ΗεντολήtextBackground(int) Ηεντολήtextcolor(int);μαςδίνειτηνδυνατότητανα αλλάξουμετοχρώματουbackgroundτωνγραμμάτωντου προγράμματοςμας. Συντάσσετεέτσι: Background(int); 42
Όπουintδηλώνουμεένανακέραιοαπό0ως7που αντιστοιχείτοκάθεχρώμα. Ταχρώματα: 0 Black 1 DarkBlue 2 DarkGreen 3 DarkCyan 4 DarkRed 5 Purple 6 Brown 7 LightGrey Πρόγραμμα2 programlesson8_program2; Usescrt; var i:integer; begin fori:=0to7do begin textbackground(i); delay(100); writeln('helloworld!!!'); end; readln; end. ΤέλοςΜαθήματος 43
Μάθημα9 Γραφικά(BGI) 44
Γιαταπαρακάτωπαραδείγματαχρησιμοποιήθηκεο compilerτηςεταιρίαςborlandturbopascal7(γιαdos). ΤααρχικάBGIσημαίνουνBorlandGraphicsInterface. ΤαBGIγραφικάχρησιμοποιούνανάλυση640x480(pixels) Αρχικοποίησητωνγραφικών USESCRT,GRAPH; VAR GD,GM:INTEGER; BEGIN InitGraph(GD,GM, '..\BGI'); { Πρόγραμμα } CloseGraph; END. ΕντολέςΣχεδιασμούστηνPascal Γραμμές Line(x,y,xx,yy); Κύκλοι Circle(x,y,size); Τετράγωνα Rectangle(x,y,xx,yy); Χρώματα SetColor(int); 45
SetBkColor(int); Γεμίσματα SetFillStyle(style,color); FloodFill(x,y,stop_color); Κειμενο Outtextxy(x,y,'TextHere'); Γραμμές Γιανακάνουμεμιαγραμμήχρησιμοποιούμετηνεντολή Line(x,y,xx,yy);.Όπουx,yείναιοι συντεταγμένες(σεpixel),τηςαρχήςτηςγραμμής ενώταxx,yyείναιοισυντεταγμένεςτουτέλους τηςγραμμής. Πρόγραμμα1 USESCRT,GRAPH; VAR GD,GM:INTEGER; BEGIN InitGraph(GD,GM,'..\BGI'); line(0,0,100,100); readln; CloseGraph; END. Έξοδος: 46
Κύκλοι Γιανακάνουμεμιαγραμμήχρησιμοποιούμετηνεντολή Circle(x,y,size);.Όπουx,yείναιοι συντεταγμένες(σεpixel),τουκέντρουτουκύκλου ενώτοsizeείναιηακτίνατουκύκλου. Πρόγραμμα 2 USESCRT,GRAPH; VAR GD,GM:INTEGER; BEGIN InitGraph(GD,GM,'..\BGI'); circle(100,100,50); readln; CloseGraph; END. Έξοδος : 47
Τετράγωνα Γιανακάνουμεένατεράγονοχρησιμοποιούμετηνεντολή Rectangle(x,y,xx,yy);.Όπουx,yείναιοι συντεταγμένες(σεpixel),τηςαρχήςτου τετραγώνου(πάνωαριστερά)ενώταxx,yyείναιοι συντεταγμένεςτουτέλουςτουτετραγώνου(κάτω δεξιά). Πρόγραμμα 3 USESCRT,GRAPH; VAR GD,GM:INTEGER; BEGIN InitGraph(GD,GM,'..\BGI'); rectangle(50,50,100,100); readln; CloseGraph; END. Έξοδος: 48
Χρώματα Γιαναδώσουμεχρώμασεένασχήματότε χρησιμοποιούμετηνεντολήsetcolor(int);ενώγια ναδώσουμεχρώμαστοφόντοχρησιμοποιούμετην εντολήsetbkcolor(int);.όπουintοαριθμόςτου χρώματος(0 15)πουαναφέρουμεστοΜάθημα8. Πρόγραμμα4 USESCRT,GRAPH; VAR GD,GM:INTEGER; BEGIN InitGraph(GD,GM,'..\BGI'); SetColor(14);{xromasxhmatoskitrino} SetBkColor(1);{xromafontoumple} rectangle(50,50,100,100); readln; CloseGraph; END. Έξοδος: 49
Γεμίσματα Γιαναγεμίσουμεένασχήμαμεχρώμα χρησιμοποιούμε2εντολές.μετηνεντολή SetFillStyle(style,color);Δηλώνουμεstyle γεμίσματος(1 10)καιχρώμαγεμίσματος(0 15 βλέπεμάθημα8),ενώμετηνεντολήfloodfill(x, y,stop_color);δίνουμετηνεντολήναγεμίζειαπό τοσημείοx,yμέχριναβρειτοχρώμαstop_color (0 15βλέπεμάθημα8). Πρόγραμμα5 USESCRT,GRAPH; VAR GD,GM:INTEGER; BEGIN InitGraph(GD,GM,'..\BGI'); cleardevice; SetColor(4);{kokkino} Circle(100,100,50); SetFillStyle(1,3); FloodFill(101,101,4); readln; 50
CloseGraph; END. Έξοδος: Κάπωςέτσι : ) Κείμενο Γιαναγράψουμεκείμενομπορούμεναχρησιμοποιήσουμε τηνεντολήouttextxy(x,y,'texthere');οπουx,y είναιοισυντεταγμένεςπουθαεμφανιστείτο κείμενο. Πρόγραμμα6 USESCRT,GRAPH; VAR GD,GM:INTEGER; BEGIN InitGraph(GD,GM,'..\BGI'); outtextxy(50,50,'george'); readln; CloseGraph; END. 51
Έξοδος: Άσκηση ΝαγράψετεέναπρόγραμμασεPascalπουνασχεδιάζειένα σπίτι(μεπόρτακαιπαράθυρα).όπωςτοσχήμα(περίπου): Γιαδικήσαςευκολίακαλόείναινα κάνετεχρήσητετραγωνισμένου χαρτιούγιατονυπολογισμότων σημείων. ΤέλοςΜαθήματος 52
Μάθημα10 Γραφικά(BGI) Κίνηση 53
Αςδώσουμελίγηκίνησητώρασταγραφικάμας. Πρόγραμμα1 Μπροστά PROGRAMLesson9_Program1; USESCRT,GRAPH; VAR GD,GM,i:INTEGER; BEGIN write('press[enter]tostart...'); readln; InitGraph(GD,GM,'..\BGI'); fori:=10to350do begin cleardevice; outtextxy(i,240,' =TEST'); delay(1000); end; outtextxy(0,0,'press[enter]toexit...'); readln; CloseGraph; END. Επεξήγησητουπρογράμματος cleardevice; Κάνεικαθαρισμότηςοθόνηςαπόταγραφικά. 54
Πρόγραμμα2 Καιπίσω PROGRAMLesson9_Program2; USESCRT,GRAPH; VAR GD,GM,i:INTEGER; BEGIN write('press[enter]tostart...'); readln; InitGraph(GD,GM,'..\BGI'); fori:=10to350do begin cleardevice; outtextxy(i,240,' =TEST'); delay(1000); end; fori:=350downto10do begin cleardevice; outtextxy(i,240,'test= '); delay(1000); end; outtextxy(0,0,'press[enter]toexit...'); readln; CloseGraph; END. 55
Πρόγραμμα3 ΈναScreensaver PROGRAMLesson9_Program3; USESCRT,GRAPH; VAR GD,GM,i:INTEGER; BEGIN Randomize; write('press[enter]tostart...'); readln; InitGraph(GD,GM,'..\BGI'); fori:=0to500do begin setcolor(random(15)); line(random(640),random(480),random(640),rando m(480)); delay(5000); end; cleardevice; setcolor(15); outtextxy(0,0,'press[enter]toexit...'); readln; CloseGraph; END. Επεξήγησητουπρογράμματος Randomize; 56
Αρχικοποίησητηςσυνάρτησηςπαραγωγήςτυχαίων αριθμών. random(int); Συνάρτησηπουπαράγειτυχαίουςαριθμούςαπό1ωςint. Άσκηση ΝαγράψετεέναπρόγραμμαστηνPascal(τύπουscreensaver) πουναεμφανίζεισετυχαίασημεία,τυχαίουμεγέθους κύκλους. ΤέλοςΜαθήματος 57
Μάθημα11 Ήχος 58
Γιαταπαρακάτωπαραδείγματαχρησιμοποιήθηκεο compilerτηςεταιρίαςborlandturbopascal7(γιαdos). ΓιαναβάλουμεήχοσεέναπρόγραμματηςPascal χρησιμοποιούμετηνσυνάρτησηsound(int),όπουint βάζουμετηνσυχνότητατουήχουσεhz(hertz). Πρόγραμμα1 ΟιΝότες programlesson11_program; USESCRT; {dilonoumetissixnotitessestatheres} const C=262; D=294; E=330; F=349; G=392; A=440; B=494; H=524; {dilonoumestatheratindiarkiasemillisecond} MS=20000; begin Sound(C); Delay(MS); NoSound; Sound(D); Delay(MS); NoSound; Sound(E); Delay(MS); NoSound; 59
Sound(F); Delay(MS); NoSound; Sound(G); Delay(MS); NoSound; Sound(A); Delay(MS); NoSound; Sound(B); Delay(MS); NoSound; Sound(H); Delay(MS); NoSound; end. ΤέλοςΜαθήματος 60
Παράρτημα 61
ΒασικέςΜαθηματικέςΠράξεις Πρόσθεση Αφαίρεση Πολλαπλασιασμός Διαίρεση Ακέραιαδιαίρεση Υπόλοιποδιαίρεσης x:=y+z; x:=y z; x:=y*z; x:=y/z; x:=ydivz; x:=ymodz; ΜαθηματικέςΣυναρτήσεις Τετράγωνο ΤετραγωνικήΡίζα Ημίτονο Συνημίτονο Συνεφαπτομένη 62 SQR(RealVariable) SQRT(RealVariable) SIN(Realvariable) COS(Realvariable) ARCTAN(Realvariable)
ΠίνακαςASCII 63
64
ΛύσειςΑσκήσεων 65
Μάθημα2 ProgramMathima2_Askisi1; Varnum1,num2,num3,sum:integer; Varmesos:real; Begin write('inputnumber1:'); readln(num1); write('inputnumber2:'); readln(num2); write('inputnumber3:'); readln(num3); mesos:=(num1+num2+num3)/3; writeln('mesosoros:',mesos); readln; End. Μάθημα3 ProgramMathima3_Askisi1; vara,b:integer; Begin write('dose1ari8mo:'); readln(a); write('dose2ari8mo:'); readln(b); If(a>b)then begin write(a); end; if(a=b)then begin write('isoi!'); end else begin write(b); end; readln; end. ProgramMathima3_Askisi2; Varsel:integer; Vara,met:real; Begin 66
Writeln('1.EUR CYP'); Writeln('2.CYP EUR'); Write('Select>'); Readln(sel); caseselof 1: Begin write('doseeur:'); readln(a); met:=a*0.58; writeln('cyp:',met) End; 2: Begin writeln('dosecyp:'); readln(a); met:=a*1.74; writeln('eur:',met); End; End; Readln; End. Μάθημα4 ProgramMathima4_Askisi1; varcount:integer; vara,sum:integer; Begin count:=1; sum:=0; whilecount<=10do begin readln(a); sum:=sum+a; count:=count+1; end; writeln('sum:',sum); readln; end. Μάθημα5 ProgramMathima5_Askisi1; varpin1:array[1..10]ofinteger; 67
varcount1,count2,sum:integer; begin forcount1:=1to10do begin readln(pin1[count1]); end; forcount2:=1to10do begin sum:=sum+pin1[count2]; end; writeln('sum:',sum); readln; end. ProgramMathima5_Askisi2; varpin2:array[1..5]ofinteger; varcount1,count2,count3:integer; begin forcount1:=1to5do begin readln(pin2[count1]); end; forcount2:=1to5do begin ifpin2[count2]<0then Begin Writeln(pin2[count2]); count3:=count3+1; End; end; writeln('oiarnitikoieinai:',count3); readln; end. ProgramMathima5_Askisi3; varpin3:array[1..5]ofinteger; varcount1,count2,min:integer; begin forcount1:=1to5do 68
begin readln(pin3[count1]); end; min:=pin3[1]; forcount2:=2to5do begin ifpin3[count2]<minthen Begin min:=pin3[count2]; End; end; writeln('omikroteroseinai:',min); readln; end. Μάθημα6 ProgramLesson6_Askisi1; varcount:integer; proceduredia(aa,bb,cc,dd:integer); begin writeln('aa:',aa,'bb:',bb,'cc:',cc,'dd:',dd); end; begin Forcount:=1to10do Begin dia(10,22,37,49); end; readln; end. ProgramLesson6_Askisi2; vara,b,mik:integer; functionmikroteros(aa,bb:integer):integer; begin if(aa<bb)then begin mikroteros:=aa; end; if(aa>bb)then 69
begin mikroteros:=bb; end; if(aa=bb)then begin mikroteros:=bb; end; end; begin Write('Doseton1oakereo:'); readln(a); Write('Doseton2oakereo:'); readln(b); mik:=mikroteros(a,b); writeln('mikroteros:',mik); readln; end. Μάθημα7 ProgramLesson7_Askisi; UsesCrt; procedureinsert(); Var UserFile:Text; name,surname,mail,phone:string; yn:char; begin Assign(UserFile,'C:\Phonebook.txt'); {ToarxeioC:\Phonebook.txtprepeinayparxei gianamporeseinagineiappend!!!} Append(UserFile); Write('Onoma:'); Readln(name); Write('Epitheto:'); Readln(surname); Write('E Mail:'); 70
Readln(mail); Write('Tilefono:'); Readln(phone); Writeln(UserFile,'Onoma:'+name); Writeln(UserFile,'Epitheto:'+surname); Writeln(UserFile,'E Mail:'+mail); Writeln(UserFile,'Tilefono:'+phone); Writeln(UserFile,' '); Close(UserFile); Write('Theletenasinexisete(y/n):'); Readln(yn); if(yn='y')then begin clrscr;{katharismostisothonis} insert(); end else begin Write('ByeBye...'); exit;{exodosapotoprogramma} end; end; begin insert(); readln; end. Μάθημα9 PROGRAMBGI_HOUSE; USESCRT,GRAPH; VAR GD,GM:INTEGER; BEGIN 71
InitGraph(GD,GM,'..\BGI'); setcolor(9); line(300,0,200,200); line(300,0,400,200); rectangle(200,200,400,400); setcolor(3); rectangle(220,220,270,270); rectangle(330,220,380,270); setcolor(3); rectangle(270,320,330,400); setcolor(14); outtextxy(170,420,'bgihousebygeorge HADJIKYRIACOU'); setcolor(7); outtextxy(220,440,'press[enter]toexit'); readln; CloseGraph; END. Μάθημα10 PROGRAMLesson10_Program; USESCRT,GRAPH; VAR GD,GM,i:INTEGER; BEGIN write('press[enter]tostart...'); readln; InitGraph(GD,GM,'..\BGI'); fori:=50to500do begin circle(random(640),random(480),random(100)); delay(5000); end; cleardevice; setcolor(15); outtextxy(0,0,'press[enter]toexit...'); readln; CloseGraph; 72
END. 73