ΗΜΕΡΟΜΗΝΙΑ |
ΗΜΕΡΕΣ |
ΩΡΕΣ |
Παραδόθηκε |
ΠΑΡΑΣΚΕΥΗ |
3η |
Ας Γνωριστούμε , εισαγωγή |
|
ΔΕΥΤΕΡΑ |
4η,5η,6η |
Παραδείγματα writeln Αναγνωριστικά, Δεσμευμένες λέξεις ,ειδικά σύμβολα Εμβαδόν ορθογωνίου,5Χ10 |
|
|
|
Εμβαδόν ορθογωνίου, με read Εμβαδόν Τριγώνου με read Εμβαδόν κύκλου Ασκ. Tb=(a+b+2*G)/4 με read |
|
ΠΕΜΠΤΗ |
5η |
Παράδειγμα εκτέλεσης βήμα –βήμα, αναγνωριστικά div-mod S>H:M:S |
|
ΠΑΡΑΣΚΕΥΗ |
6η,7η |
Κελσίου-Φαρενάιτ |
|
ΠΕΜΠΤΗ |
5η,6η,7η |
Κεφ 1 θεωρία Τυποποιημένες Συναρτήσεις, σταθερές με αναγνωριστικά, ασκ επιτόκιο |
|
ΠΑΡΑΣΚΕΥΗ |
6η,7η |
Μεγαλύτερος 2 αριθμών, με ίσους, Παραλλαγή με βαθμούς μαθητών |
|
ΠΕΜΠΤΗ |
5η,6η,7η |
Κεφ 2 θεωρία ,φωτοτυπία ,ασκ σε pascal |
|
6 ΝΟΕΜΒΡΗ |
ΠΑΡΑΣΚΕΥΗ |
6η,7η |
Τυποποιημένες Συναρτήσεις Ασκ τεστ για σκορ? |
ΠΕΜΠΤΗ |
4η,5η,7η |
Κεφ 3 θεωρία |
|
ΠΑΡΑΣΚΕΥΗ |
6η,7η |
Hlikia,menu
-if |
|
ΠΕΜΠΤΗ |
4η,5η,7η |
Κεφ 4 θεωρία Y=1/x-1/(x-2) |
|
ΠΑΡΑΣΚΕΥΗ |
6η,7η |
Εμβαδόν Τριγώνου με τύπο του Ήρωνα Τριψήφιος-απομόνωση των ψηφίων του |
|
27 ΝΟΕΜΒΡΗ |
ΠΑΡΑΣΚΕΥΗ |
6η,7η |
|
3 ΔΕΚΕΜΒΡΗ |
ΠΕΜΠΤΗ |
4η,5η,7η |
διαγώνισμα |
7,12,13 ΔΕΚΕΜΒΡΗ |
|
|
κλειστό |
ΠΕΜΠΤΗ |
4η,5η,7η |
Εντολή while Παρ. 10 φορές μπράβο Απόφαση χρήστη Άθροισμα αριθμών –χρήστη, 0 Μέσος όρος |
|
18 ΔΕΚΕΜΒΡΗ |
ΠΑΡΑΣΚΕΥΗ |
6η,7η |
επανάληψη |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Εισαγωγή
Τα προγράμματα που γράφει
ο προγραμματιστής σε μια γλώσσα προγραμματισμού υψηλού επιπέδου ονομάζονται πηγαία προγράμματα.
Τα πηγαία προγράμματα δεν είναι άμεσα κατανοητά από τον Η/Υ. Για να γίνουν κατανοητά τα πηγαία προγράμματα είναι απαραίτητα κάποια ειδικά μεταφραστικά προγράμματα που δέχονται σαν είσοδο το πηγαίο πρόγραμμα και το μετατρέπουν σε πρόγραμμα γλώσσας μηχανής που ονομάζεται αντικείμενο πρόγραμμα. Το μεταφραστικό πρόγραμμα για την Pascal το λέμε μεταγλωττιστή της Pascal (Pascal compiler)
πηγαίο πρόγραμμα |
à |
μεταγλωττιστής της Pascal |
à |
αντικείμενο πρόγραμμα |
Το περιβάλλον της Turbo Pascal
Από το μενού Έναρξη επιλέξτε Προγράμματα και μετά TPW
1.5
Μετά από λίγο εμφανίζεται το παράθυρο της Turbo Pascal .
Αναλυτικά η δομή ενός προγράμματος Pascal
περιγράφεται από το παρακάτω σχήμα:
Σχήμα 2.1 Δομή ενός προγράμματος Pascal.
Ένα πρόγραμμα Pascal γράφεται χρησιμοποιώντας κάποιες λέξεις που αποκαλούμε αναγνωριστικά, ορισμένα ειδικά σύμβολα και σταθερές τιμές δεδομένων. Τα αναγνωριστικά και οι τιμές δεδομένων πρέπει να ξεχωρίζουν μεταξύ τους με ένα ειδικό σύμβολο ή ένα τουλάχιστον κενό (διαχωριστή).
ΤΑ ΑΝΑΓΝΩΡΙΣΤΙΚΑ
Τα αναγνωριστικά διακρίνονται σε τρεις κατηγορίες:
α) Δεσμευμένα αναγνωριστικά ή δεσμευμένες λέξεις.
β) Τυποποιημένα αναγνωριστικά (προκαθορισμένα)
γ) Αναγνωριστικά που ορίζει ο προγραμματιστής ή απλά αναγνωριστικά .
Δεσμευμένες λέξεις λέμε όσες
χρησιμοποιεί ο μεταφραστής (compiler) της γλώσσας με προκαθορισμένη, ειδική και
αμετάβλητη σημασία
Τα τυποποιημένα αναγνωριστικά έχουν και αυτά προκαθορισμένη ειδική σημασία αλλά δεν δεσμεύονται από την Pascal.
απλά αναγνωριστικά είναι λέξεις που ορίζει, δηλώνει και χρησιμοποιεί ο προγραμματιστής για διάφορα στοιχεία του προγράμματος π.χ. ονόματα μεταβλητών, διαδικασιών, συναρτήσεων, τύπων κ.τ.λ.
Κανόνες γραφής των αναγνωριστικών:
Κάθε αναγνωριστικό πρέπει να υπακούει στους εξής κανόνες:
α) Να αποτελείται μόνο από γράμματα (λατινικού αλφάβητου), ψηφία και τον χαρακτήρα υπογράμμισης "_" . ΠΡΟΣΟΧΗ !!! όχι παύλα "-" .
β) Να αρχίζει από γράμμα. (όχι ψηφίο)
γ) Να μην είναι δεσμευμένη λέξη (αυτονόητο).
δ) Το πλήθος των χαρακτήρων (το μήκος) του αναγνωριστικού να μην ξεπερνά ένα όριο που στην Turbo Pascal είναι αρκετά μεγάλο ώστε να μην μας προβληματίζει σχεδόν καθόλου. Είναι διαφορετικό σε διάφορες εκδόσεις (127 χαρακτήρες στην Turbo Pascal Ver.3 , 32 στην Ver4.0, 8 στην standard Pascal). Στην tpw v.1.5 είναι χωρίς περιορισμό αλλά σημαντικοί είναι οι πρώτοι 64. Πέραν των 64 απλώς αγνοούνται από τον compiler.
Συμβουλή: ποτέ δεν χρειαζόμαστε και είναι άβολο να χρησιμοποιούμε αναγνωριστικά με μεγάλο μήκος π.χ. μεγαλύτερο των 32 χαρακτήρων.
Να σημειώσουμε ότι τα μικρά με τα αντίστοιχα κεφαλαία γράμματα θεωρούνται ίδια.
Παραδείγματα αναγνωριστικών μπορείτε να βρείτε σε όλα τα προγράμματα που ακολουθούν. Παρακάτω δίνουμε ενδεικτικά μερικά
N |
I |
number |
arithmos_paidiwn |
mesos_oros |
X1 |
p200 |
plhthosEpityxiwn |
Εμφανίζει τις τιμές των παραστάσεων που ξεχωρίζουν με κόμμα.
Εντολή |
Εμφανίζει στην οθόνη |
writeln(10); |
10 |
writeln( 2*3 , (10-7)*6 , 0 , 3*8 ); |
618024 |
writeln('ΓΙΑ ΧΑΡΑ'); |
ΓΙΑ ΧΑΡΑ |
writeln('Α=',5*7); |
A=35 |
writeln(-183.75) |
-1.8375000000Ε+02 |
writeln |
αλλάζει γραμμή |
Έξοδος (εμφάνιση) ακεραίων αριθμών
Το παρακάτω είναι ένα πρόγραμμα που χρησιμοποιεί την εντολή writeln για να εμφανίσει τις τιμές κάποιων παραστάσεων με ακέραιους αριθμούς.
program TestWriteln1;
uses wincrt;
begin
writeln(10);
writeln( 10 , -5 );
writeln( 10-8 );
writeln( 2*3 , (10-7)*6 , 0 , 3*8 );
end.
η οθόνη μετά την εκτέλεση του προγράμματος θα είναι
10
10-5
2
618024
_ <- ο οθονοδείκτης
program TestWriteln2;
uses wincrt;
begin
writeln('Αυτό είναι το πρώτο μου πρόγραμμα');
writeln('αυτή είναι η δεύτερη γραμμή');
writeln('Α=',5*7);
writeln('Β=',(20-30)*2);
end.
Τα ακριβή αποτελέσματα του προγράμματος στην ΟΘΟΝΗ θα είναι
Αυτό είναι το πρώτο μου πρόγραμμα
αυτή είναι η δεύτερη γραμμή
Α=35
Β=-20
_
|
Εντολή |
Τυπώνει |
1) |
WriteLn(15) |
15 |
2) |
WriteLn(-10,15) |
-1015 |
3) |
WriteLn(10:5) |
10 |
4) |
WriteLn(10:5,-7:6) |
10 -7 |
5) |
WriteLn(
(3+4)*6:4) |
42 |
6) |
WriteLn(2147:2) |
2147 |
|
Εντολή |
Έξοδος. |
1) |
WriteLn(-15.7) |
-1.5700000000E+01 |
2) |
WriteLn(10E2 , 123.5) |
~1.0000000000E+03~1.2350000000E+02 |
3) |
WriteLn(10.250E15:8,10.5:10) |
~1.0E+16~1.050E+01 |
4) |
WriteLn(1.0:20) |
~~~~1.0000000000E+00 |
5) |
WriteLn(-246.287:15:2) |
~~~~~~~~-246.29 |
6) |
WriteLn(250.1:10:3) |
~~~250.100 |
7) |
WriteLn(1850.12:10:0) |
~~~~~~1850 |
8) |
WriteLn(12345678.15:5:1) |
12345678.1 |
|
Εντολή |
Δίνει έξοδο |
1. |
WriteLn('A'); |
A |
2. |
WriteLn('A',' ','B'); |
A~B |
3. |
WriteLn('A',',','B'); |
A,B |
4. |
WriteLn('A' : 5); |
~~~~A |
5. |
WriteLn('A': 5,'B': 4); |
~~~~A~~~B |
6. |
WriteLn(''''); |
' |
|
Εντολή |
Δίνει έξοδο |
1) |
WriteLn('ABCDEFGH') |
ABCDEFGH |
2) |
WriteLn('ABCDEFGH':15) |
~~~~~~~ABCDEFGH |
3) |
WriteLn('ABCDEFGH':5) |
ABCDEFGH |
4) |
WriteLn('12345':3,'ABCD':5) |
12345~ABCD |
5) |
WriteLn('κι''αυτό') |
κι'αυτό |
6) |
WriteLn('A','','B') |
AB |
7) |
WriteLn('''') |
' |
·
· Να γραφεί πρόγραμμα που θα εμφανίζει τα αρχικά του ονόματός σας σχηματίζοντάς τα μόνο με το χαρακτήρα '*' καταλαμβάνοντας 5 γραμμές και μέχρι πέντε στήλες για κάθε γράμμα π.χ. Κ Χ.
program asterakia;
uses wincrt;
begin
writeln(' * * * * ');
writeln(' * * * * ');
writeln(' * * * ');
writeln(' * * * * ');
writeln(' * * * * ');
end.
1) Προβλέψτε τι θα εμφανίσει το παρακάτω πρόγραμμα γράφοντας την έξοδό του στο χαρτί και επαληθεύστε το γράφοντας και τρέχοντάς το στην Pascal
program first;
uses wincrt;
begin
writeln('Αυτό είναι το κείμενο');
writeln('και αυτό ','είναι ','ένα κείμενο');
end.
Λύση:Τα ακριβή αποτελέσματα του προγράμματος στην ΟΘΟΝΗ θα είναι
Αυτό είναι το κείμενο
και αυτό είναι ένα κείμενο
1) Προβλέψτε τι θα εμφανίσει το παρακάτω πρόγραμμα γράφοντας την έξοδο του στο χαρτί και επαληθεύστε το γράφοντας και τρέχοντάς το στην Pascal
program first;
uses wincrt;
begin
writeln('Τα παρακάτω είναι σταθερές');
writeln(12,'
',-302,' ',0);
writeln(12:5,-302:7,0:3);
writeln((12+5):5,(2+3)+7:6,3-7:5);
writeln(' ':10,15,' ':7,13,' ',-5);
writeln('Αυτό είναι το ':20,10);
end.
Λύση:Τα ακριβή αποτελέσματα του προγράμματος στην ΟΘΟΝΗ θα είναι
Τα σχόλια αγνοούνται τελείως από τον COMPILER. Είναι σαν να μην υπάρχουν.
Τα σχόλια οριοθετούνται από αριστερά με το
ανοικτό άγκιστρο "{" και από
δεξιά με το κλειστό άγκιστρο
"}"
Τον ίδιο ρόλο έχουν και τα ειδικά σύμβολα (* και *) για την αρχή και το τέλος αντίστοιχα.
{Αυτό είναι ένα σχόλιο}
Τα αναγνωριστικά και οι τιμές δεδομένων πρέπει να ξεχωρίζουν μεταξύ τους με ένα τουλάχιστον κενό ή ένα ειδικό σύμβολο της Pascal.
Επίσης χωρίς να επηρεάζουν το πρόγραμμα κενά μπορούν να μπαίνουν σε οποιοδήποτε σημείο του προγράμματος αρκεί να μη διασπούν ένα αναγνωριστικό ένα ειδικό σύμβολο ή μια τιμή.
Τελεστές |
προτεραιότητα |
κατηγορία |
@ , not |
Πρώτη (υψηλή) |
Ενικοί τελεστές |
*,/,div,mod,and,shl,shr |
Δεύτερη |
Πολλαπλασιαστικοί τελεστές |
+,-,or,xor |
Τρίτη |
Προσθετικοί τελεστές |
=,<>,<,>,<=,>=,in |
Τέταρτη (χαμηλή) |
Συσχετιστικοί τελεστές |
Την μεγαλύτερη προτεραιότητα έχουν οι ενικοί τελεστές
ακολουθούν οι πολλαπλασιαστικοί μετά οι προσθετικοί και τέλος οι συσχετιστικοί με
την μικρότερη προτεραιότητα.
Οι τελεστές της ίδιας κατηγορίας έχουν μεταξύ τους
την ίδια προτεραιότητα.
όπου έχετε
αμφιβολία για την σειρά εκτέλεσης των πράξεων χρησιμοποιείστε παρενθέσεις αφού
ότι βρίσκεται μέσα σ' αυτές θα εκτελεστεί πρώτο.
οι πράξεις
γίνονται μεταξύ στοιχείων του ίδιου τύπου και το αποτέλεσμα είναι επίσης του
ίδιου τύπου.
Εξαίρεση σ' αυτό τον κανόνα αποτελεί ο τελεστής της διαίρεσης (/) με ακέραια ορίσματα πού δίνει αποτέλεσμα Real.
Όταν σε ένα τελεστή από τους (+,-,/,*) το ένα όρισμα
είναι ακέραιος και το άλλο πραγματικός αριθμός, τότε το αποτέλεσμα θα είναι
πραγματικός
ΣΥΝΤΑΞΗ εντολής καταχώρησης
Η σύνταξη της εντολής φαίνεται και στο παρακάτω συντακτικό διάγραμμα της εντολής
Η εντολή καταχώρησης χαρακτηρίζεται από το ειδικό σύμβολο (:=) πριν από το οποίο υπάρχει μία μεταβλητή ενώ μετά απ' αυτό μπαίνει μια παράσταση.
Η τιμή της παράστασης θα πρέπει να είναι του ίδιου (ή συμβατού) τύπου με την μεταβλητή.
Συμβατός τύπος σημαίνει ότι είναι αυτόματα μετατρέψιμος, από την Pascal, στον τύπο της μεταβλητής.
( Π.Χ. Οι τύποι ακεραίων( integer, byte, shortint, longint, word) είναι μεταξύ τους συμβατοί, αρκεί η τιμή , της παράστασης, να βρίσκεται στο εύρος του τύπου της μεταβλητής. Οι τύποι πραγματικών είναι μεταξύ τους συμβατοί. Επιτρέπετε η μεταβλητή να είναι πραγματική και η τιμή της παράστασης ακέραιη, όχι όμως αντίστροφα. Επιτρέπεται επίσης η τιμή να είναι χαρακτήρα και η μεταβλητή string.
Δεν επιτρέπεται η μεταβλητή να είναι μεταβλητή τύπου αρχείου).
Πρώτα υπολογίζεται η τιμή της παράστασης πού βρίσκεται μετά το (:=). Η τιμή αυτή αποδίδεται στην μεταβλητή πού υπάρχει πριν το (:=).
Η μεταβλητή θα έχει την τιμή αυτή μέχρι να πάρει μία άλλη τιμή με εντολή καταχώρησης ή με την εντολή readln που θα δούμε αργότερα. Άλλοι τρόποι δεν υπάρχουν για να πάρει μια μεταβλητή τιμή στα πλαίσια αυτού του βιβλίου.
Παράδειγμα:
Το πρόγραμμα που ακολουθεί υπολογίζει και τυπώνει το άθροισμα του 5 με το 10.
Program
TEST_EKXWRHSHS;
Uses wincrt;
Var A,B,C: Integer;
Begin
A:=5; { το Α παίρνει τιμή το 5 }
B:=10; { το Β παίρνει τιμή το 10 }
C:=A+B; { το C παίρνει τιμή το 15 }
WriteLn('C=',C);
End.
ΑΠΟΤΕΛΕΣΜΑ:
C=15
Στην Turbo Pascal ένα πρόγραμμα που βρίσκει
την απόσταση των 15 ποδιών σε μέτρα είναι το παρακάτω.
Program TEST_VAR;
Uses wincrt;
Begin
writeln('τα 15 πόδια =',0.348*15,' μέτρα');
End.
Μια
βελτίωση για την μετατροπή των 15 ποδιών σε μέτρα είναι το παρακάτω
Program TEST_VAR;
Uses wincrt;
Var f,m: real;
Begin
f:=15;
m:=0.348*f;
writeln('τα ',f:10:2,' πόδια =',m:10:1,' μέτρα');
End.
Το παρακάτω
πρόγραμμα βρίσκει την απόσταση των ποδιών που δίνει ο χρήστης σε μέτρα .
Program TEST_VAR;
Uses wincrt;
Var f,m: real;
Begin
writeln('Δώσε
την απόσταση σε πόδια ');
readln(f);
m:=0.348*f;
writeln('τα ',f:10:2,' πόδια =',m:10:1,' μέτρα');
End.
Η πράξη
εύρεσης του ακέραιου πηλίκου δύο ακέραιων αριθμών είναι η div
παραδείγματα:
|
παράσταση |
|
αποτέλεσμα |
|
|
|
11 div 4 |
= |
2 |
|
|
|
12 div 4 |
= |
3 |
|
|
|
13 div 4 |
= |
3 |
|
|
|
1 div 4 |
= |
0 |
|
|
|
0 div 4 |
= |
0 |
|
|
|
5 div (-2) |
= |
-2 |
|
|
|
-5 div (-2) |
= |
2 |
|
|
|
-10 div 4 |
= |
-2 |
|
|
Η πράξη εύρεσης του ακέραιου υπολοίπου δύο ακέραιων
αριθμών είναι η mod
παραδείγματα:
|
παράσταση |
|
αποτέλεσμα |
|
|
|
11 mod 4 |
= |
3 |
|
|
|
12 mod 4 |
= |
0 |
|
|
|
13 mod 4 |
= |
1 |
|
|
|
1 mod 4 |
= |
1 |
|
|
|
0 mod 4 |
= |
0 |
|
|
|
5 mod (-2) |
= |
1 |
|
|
|
-5 mod (-2) |
= |
-1 |
|
|
|
-10 mod 4 |
= |
-2 |
|
|
Ασκ.9.1
1) Να γράψετε
πρόγραμμα που να τυπώνει:
Στη γραμμή
1 αυτό είναι το πρώτο μου πρόγραμμα
Στη γραμμή
2 το όνομά σας
Στη γραμμή
3 την ημερομηνία
program askhsh_9_1;
uses wincrt;
begin
writeln('αυτό είναι το πρώτο μου
πρόγραμμα');
writeln('Χρίστος
Κουσουλής');
writeln('5/10/2009');
end.
6) Να
γραφεί πρόγραμμα το οποίο θα διαβάζει το επώνυμο , τους βαθμούς τετραμήνων και
γραπτού σ’ ένα μάθημα θα βρίσκει και θα εμφανίζει το τελικό βαθμό στο μάθημα
από τη σχέση ΤΒ=(Τ1+Τ2+2Τ)/4 καθώς και το επώνυμό του
program bathmoi;
uses wincrt;
var t1,t2,gr:integer;
tb:real;
begin
write('βαθμός Α΄ τετραμήνου:');
readln(t1);
write('βαθμός Β΄ τετραμήνου:');
readln(t2);
write('βαθμός Γραπτών:');
readln(gr);
tb:=(t1+t2+2*gr)/4;
writeln('ο τελικός βαθμός=',tb:10:2);
writeln;
write('θα συνεχίσεις (Ν/Ο);');
end.
Το παρακάτω πρόγραμμα βρίσκει το εμβαδόν ενός κύκλου όταν του δώσουμε την ακτίνα του από τον τύπο E = πR²
program Embadon;
var R,E:real;
begin
write('Δώσε
την ακτίνα:');
readln(R);
E:=pi*sqr(R); { ή E:=3.14*R*R;}
writeln('το
εμβαδόν κύκλου με ακτίνα ',R:8:1,
' είναι ',E:10:2);
end.
2) Να εκτελεστεί βήμα –βήμα στο χαρτί και να απεικονισθεί η μνήμη και η οθόνη στο παρακάτω πρόγραμμα.
program ASKHSH;
uses wincrt;
var i,j,k:integer;
begin
i:=5;
j:=7; k:=10;
writeln(i,
i+1, i+j, i+j+k);
k:=i+j;
writeln(k);
j:=j+1;
writeln(j);
i:=3*i+j;
writeln(i);
end.
Λύση:Τα ακριβή αποτελέσματα του προγράμματος στην ΟΘΟΝΗ θα είναι
Ασκ.9.2
2) Να
γράψετε πρόγραμμα στο οποίο να γίνεται η εισαγωγή των δεδομένων μήκος , πλάτος
, ύψος έτσι , ώστε να υπολογίζονται και να τυπώνονται τα παρακάτω αποτελέσματα:
το εμβαδόν
της βάσης είναι........... τετρ. εκ.
το εμβαδόν
της έδρας με διαστάσεις ………. , ……… είναι ……….. τετρ. εκ.
το εμβαδόν
της έδρας με διαστάσεις ………. , ……….. είναι ……….. τετρ. εκ.
ο όγκος του
παραλληλεπιπέδου είναι ……… κυβ. εκ.
program parallhlepipedo;
uses wincrt;
var m,p,y,eb,ed1,ed2,v:real;
begin
writeln('δώσε το μήκος,το πλάτος
και το ύψος του παραλληλεπιπέδου');
readln(m,p,y);
eb:=m*p;
writeln('το εμβαδόν της βάσης
είναι ',eb:8:1,' τετρ. εκ.');
ed1:=m*y;
writeln('το εμβαδόν της έδρας με
διαστάσεις ',m:8:1,',',y:8:1,' είναι ',ed1:8:1,' τετρ. εκ.');
ed1:=p*y;
writeln('το εμβαδόν της έδρας με
διαστάσεις ',p:8:1,',',y:8:1,' είναι ',ed2:8:1,' τετρ. εκ.');
v:=eb*y;
writeln('ο όγκος του
παραλληλεπιπέδου είναι ',v:8:1,' κυβ. εκ.');
end.
ασκ.9.3
3) Να
γράψετε πρόγραμμα το οποίο να διαβάζει έναν αριθμό και να τυπώνει το διπλάσιο
και το τριπλάσιο του .Να γίνει η ίδια διαδικασία για τους 2 επόμενους απ’ αυτόν
αριθμούς. Η μορφή της εκτύπωσης να είναι σύμφωνα με το παρακάτω υπόδειγμα:
8 16
24
9 18
27
10 20
30
program arithmoi;
uses wincrt;
var a:integer;
begin
writeln('δώσε έναν αριθμό:');
readln(a);
writeln(a,' ',2*a,' ',3*a);
writeln(a+1,' ',2*(a+1),'
',3*(a+1));
writeln(a+2,' ',2*(a+2),'
',3*(a+2));
end.
4) Να
γραφεί πρόγραμμα που θα διαβάζει 2 ακέραιες τιμές Α , Β και θα τυπώνει το
ακέραιο πηλίκο και ακέραιο υπόλοιπο
program ypoloipo_poiliko;
uses wincrt;
var a,b:integer;
c,d:integer;
begin
writeln('Δώσε 2 αριθμούς:');
readln(a,b);
c:=a mod b;
d:=a div b;
writeln('Το υπόλοιπο είναι ',c,'
και το πηλίκο ',d,'.');
end.
· Να γραφεί πρόγραμμα που διαβάζει τον χρόνο σε δευτερόλεπτα και θα βρίσκει τον ίδιο χρόνο σε hh:mm:sec
program
time;
uses
wincrt;
var
sec,h,m,s:longint;
begin
write('Δώσε
χρόνο σε δευτερόλεπτα:');
readln(sec);
s:=sec
mod 60;
h:=sec
div 3600;
m:= (sec div 60) mod 60;
writeln(sec,'sec=',h:2,':',m:2,':',s:2)
end.
ασκ.9.9
·
Να γραφεί πρόγραμμα το οποίο θα μετατρέπει τους
βαθμούς Κελσίου σε Φαρενάιτ F=9/5 *c+32
·
program fahrenheit;
uses wincrt;
var C:integer;
F:real;
begin
writeln('Δώστε τη θερμοκρασία σε
βαθμούς Κελσίου.');
readln(C);
F:=9/5*C+32;
writeln('Η
θερμοκρασία αυτή στην κλίμακα ',
' Fahrenheit είναι ',F:0:2,'F.');
end.
Κεφ 1 θεωρία
βλπ φωτοτυπία.
Σε διάφορα σημεία
ενός προγράμματος παρουσιάζεται η ανάγκη να ομαδοποιηθούν κάποιες εντολές ώστε
να αποτελούν μια ενότητα. Ιδιαίτερα σε δομημένες εντολές όπου η Pascal
αναφέρεται πάντα σε <εντολή> ενώ στην ουσία θέλουμε μια ομάδα εντολών.
Η Pascal χρησιμοποιεί τις δεσμευμένες λέξεις begin
(αρχή) και end (τέλος) σαν ένα είδος παρενθέσεων που ομαδοποιούν μια σειρά
εντολών ώστε συντακτικά να θεωρούνται μία εντολή και την ονομάζουμε σύνθετη
εντολή.
begin
write('Δώσε
αριθμό :');
readln(a);
writeln('Έδωσες
τον αριθμό ',a);
end
Το συντακτικό διάγραμμα της σύνθετης εντολής είναι:
Η σύνθετη εντολή όπως φαίνεται στο συντακτικό διάγραμμα αρχίζει με τη λέξη begin και τελειώνει με τη λέξη end.
Μεταξύ των λέξεων αυτών γράφονται εντολές που ξεχωρίζουν με τον ειδικό χαρακτήρα ";" . Η τελευταία εντολή, πριν το end στην Turbo Pascal μπορεί να έχει τον χαρακτήρα ";" ενώ η πρότυπη Pascal δεν το επέτρεπε ( αυτό προκύπτει από την ύπαρξη στην Turbo Pascal της κενής εντολής ).
Παρατηρήστε ότι το τμήμα εντολών του προγράμματος είναι μια σύνθετη εντολή.
α) if <λογική παράσταση> then <Εντολή>
β) if <λογική παράσταση> then <Εντολή1> else
<Εντολή2>
της εντολής if είναι:
Η εντολή αρχίζει με την δεσμευμένη λέξη if και ακολουθούν κατά σειρά μια λογική παράσταση , η δεσμευμένη λέξη then και μια εντολή (εντολή 1).
Προαιρετικά ακολουθεί ακόμη η δεσμευμένη λέξη else και μια ακόμα εντολή (εντολή 2).
παραδείγματα διευκρινιστικά της σύνταξης.
► if a>0 then count:=count+1
► if n=0 then
begin
writeln('το αποτέλεσμα είναι=', s);
c:=c+1;
end
► if x>0 then
begin
writeln('θετικός αριθμός.);
t:=t+1;
end
else
begin
writeln('μη θετικός
αριθμός.');
a:=a+1;
end
Ο τρόπος με τον οποίο εκτελείται η εντολή
if < λογική παράσταση > then <Εντολή>
περιγράφεται από το λογικό διάγραμμα
Λογικό διάγραμμα της
εντολής
if <λ.π.> then <εντολή>
που σημαίνει ότι, αν η <λογική παράσταση> (λ.π.) είναι αληθής (τιμή true) τότε θα εκτελεστεί η εντολή που ακολουθεί το then . Αν όμως είναι ψευδής (τιμή false) η εντολή που ακολουθεί το then παραλείπεται.
Η δεύτερη μορφή της εντολής if περιγράφεται από το παρακάτω λογικό διάγραμμα.
Λογικό διάγραμμα της
εντολής
If <λ.π.> then <εντολή 1> else <εντολή 2>
που σημαίνει ότι αν η <λ.π.> είναι αληθής τότε θα εκτελεστεί η εντολή μετά το then (εντολή 1) ενώ αν η <λ.π.> είναι ψευδής θα εκτελεστή η εντολή μετά το else (εντολή 2).
Ας δούμε ολοκληρωμένο το πρόγραμμα για την εύρεση της τιμής του εισιτηρίου από την ηλικία που αναφέραμε στο παράδειγμα 1.
program Eisithrio;
uses wincrt;
var Hlikia:integer;
TimhEisithrioy:real;
begin
writeln('δώσε την ηλικία:');
readln(Hlikia);
if Hlikia<18 then
TimhEisithrioy:=5
else
TimhEisithrioy:=10;
writeln('η τιμή του εισιτηρίου = ', TimhEisithrioy:10:2);
end.
Στη σύνταξη της εντολής if φαίνεται ότι μια μόνο εντολή ακολουθεί το then ή το else. Αυτό σημαίνει ότι αν θέλω να εκτελεστεί ένας αριθμός από εντολές θα πρέπει να μπουν μέσα σε begin .. end ώστε να γίνουν μία σύνθετη εντολή.
παρακάτω είναι ολοκληρωμένο ένα πρόγραμμα για την εύρεση του πηλίκου του παραδείγματος 2.
program phliko;
uses wincrt;
var P,A,N:real;
begin
writeln('δώσε τον αριθμητή:');
readln(A);
writeln('δώσε τον παρονομαστή:');
readln(N);
if N<>0
then
begin
P:=A/N;
writeln('το
πηλίκο=',P:10:2);
end
else
begin
writeln('ο παρονομαστής είναι μηδέν');
writeln('δεν επιτρέπεται διαίρεση με μηδέν');
end;
end.
3) Να γραφεί πρόγραμμα που θα διαβάζει το βαθμό ενός μαθητή σε ένα μάθημα και θα βρίσκει αν περνάει το μάθημα ( μεγαλύτερο ή ίσο του 10).
program vathmos;
uses wincrt;
var x:integer;
begin
writeln('Dwste ton vathmo tou mathiti');
readln(x);
if x>=10 then
writeln('perna to mathima');
end.
4) Να γραφεί πρόγραμμα που θα διαβάζει τους βαθμούς ενός μαθητή σε τέσσερα μαθήματα, θα βρίσκει τον μέσο όρο και αν αυτός είναι μεγαλύτερος ή ίσος του 14 να εμφανίζει "επιτυχόν" διαφορετικά 'Αποτυχόν'.
program o_mesos_oros;
uses wincrt;
var a,b,c,d:integer;
s:real;
begin
writeln('Dwste ton vathmo 4 mathimatwn');
readln(a,b,c,d);
s:=(a+b+c+d)/4;
if s>=14 then
writeln('επιτυχόν')
else
writeln('Αποτυχόν');
end.
5) Συγκρίνετε τα παρακάτω τμήματα προγράμματος. (Είναι ισοδύναμα;) Δοκιμάστε με αρχική τιμή A=0 , Α= -1
1) |
2) |
3) |
if A<0 then A:=A+1; if A>=0 then A:=A-1; writeln(A); |
if A>=0 then A:=A-1; if A<0 then A:=A+1; writeln(A); |
if A<0 then A:=A+1 else A:=A-1; writeln(A); |
6) Τι ακριβώς θα εμφανίσουν τα παρακάτω προγράμματα
program display1; uses wincrt; var a,b:integer; begin a:=21; b:=3; writeln(a mod b); writeln(a div b); end. |
program display2; uses wincrt; var a,b:integer; begin a:=21; b:=3; if a>b then writeln(a
mod b) else writeln(a div b) end. |
5) Να γραφεί πρόγραμμα το οποίο θα διαβάζει 2
ακέραιους αριθμούς και θα βρίσκει τον μεγαλύτερο
program max2;
uses wincrt;
var A,B:integer;
begin
writeln(' Δώσε αρ.1');
readln(A);
writeln('Δώσε αρ.2');
readln(B);
if A>B then
writeln('ο μεγαλύτερος είναι:',A)
else
writeln('ο μεγαλύτερος είναι:',B);
end.
program max2;
uses wincrt;
var A,B,Max:integer;
begin
writeln('Δώσε αρ.1');
readln(A);
writeln('Δώσε αρ.2');
readln(B);
Max:=A;
if B>A then
Max:=B;
writeln('ο μεγαλύτερος είναι:',Max);
end.
program test;
uses wincrt;
var a,b:real;
begin
writeln('Δώστε δύο αριθμούς:');
readln(a,b);
if a>b then
begin
writeln('Ο ',a,' είναι μεγαλύτερος του ',b,'.')
end
else if a<b then
begin
writeln('Ο ',a,' είναι μικρότερος του ',b,'.')
end
else
writeln('Οι αριθμοί αυτοί είναι ίσοι.')
end.
7) Να γραφεί πρόγραμμα το οποίο θα διαβάζει την ηλικία (Η) ενός ατόμου και θα βρίσκει και θα εμφανίζει τον κατάλληλο χαρακτηρισμό της ηλικίας σύμφωνα με τον παρακάτω πίνακα.
Ηλικία (Η) |
Χαρακτηρισμός |
Η<20 |
ΠΑΙΔΙ |
20<=Η<40 |
ΝΕΟΣ |
40<=Η<60 |
ΜΕΣΗΛΙΚΑΣ |
60<=Η |
ΗΛΙΚΙΩΜΕΝΟΣ |
program XarakthrisnosHlikias;
uses wincrt;
var
Hlikia:integer;
begin
write('Δώσε την Ηλικία:');
readln(Hlikia);
if Hlikia < 20 then writeln(' ΠΑΙΔΙ ')
else if Hlikia < 40 then writeln(' ΝΕΟΣ ')
else if Hlikia < 60 then writeln(' ΜΕΣΗΛΙΚΑΣ ')
else writeln(' ΗΛΙΚΙΩΜΕΝΟΣ ')
end.
8) Να γραφεί πρόγραμμα το οποίο θα εμφανίζει ένα μενού με επιλογές για τις τέσσερις βασικές πράξεις με ακέραιους αριθμούς.(1.πρόσθεση, 2. Αφαίρεση,3. πολλ/μος, 4. Διαίρεση). Ο χρήστης θα δίνει από το πληκτρολόγιο τον αριθμό της επιλογής για την πράξη που θέλει να εκτελεστή και στην συνέχεια το πρόγραμμα θα του ζητά δύο αριθμούς και θα υπολογίζει και τυπώνει το αποτέλεσμα της πράξης.
ασκ.10.6
11) Να γραφεί πρόγραμμα πού θα εμφανίζει ένα μενού με
επιλογές για τις 4 βασικές πράξεις ο χρήστης θα δίνει από το πληκτρολόγιο τον
αριθμό της επιλογής για την πράξη πού θέλει και στη συνέχεια το πρόγραμμα θα
του ζητά τους αριθμούς και θα εκτελεί την πράξη
Να γραφεί πρόγραμμα το οποίο θα βρίσκει αν ένα έτος
είναι δίσεκτο.
program disekto;
uses wincrt;
var e:integer;
begin
writeln('Δώστε το έτος:');
readln(e);
if ((e
mod 4=0) and (e mod 100<>0)) or (e mod 400=0) then
writeln('Το έτος αυτό είναι δίσεκτο.')
else
writeln('Το έτος αυτό δεν είναι δίσεκτο.');
end.
30/10/2009
10) να γραφεί πρόγραμμα το οποίο να διαβάζει το έτος
και θα βρίσκει ποιο από τα παρακάτω μηνύματα θα εμφανίσει .
<είναι έτος ολυμπιακών αγώνων>
<θα γίνουν οι ολυμπιακοί αγώνες τον επόμενο
χρόνο>
<έγιναν ολυμπιακοί
αγώνες πέρυσι >
<θα γίνουν ολυμπιακοί αγώνες σε 2 χρόνια>
program OA;
uses wincrt;
var
m,etos:integer;
begin
writeln('δώσε το έτος');
readln(etos);
m:=etos mod 4;
if m=0 then writeln('είναι έτος ολυμπιακών
αγώνων');
if m=1 then writeln('έγιναν ολυμπιακοί αγώνες
πέρυσι');
if m=2 then writeln('θα γίνουν ολυμπιακοί
αγώνες σε 2 χρόνια');
if m=3 then writeln('θα γίνουν οι ολυμπιακοί
αγώνες τον επόμενο χρόνο');
end.
13/11/2009
Πολλαπλή διακλάδωση με if
Όπως είδαμε στα προηγούμενα παραδείγματα με την εντολή if μπορούμε να επιλέξουμε αν θα εκτελεστεί ή όχι μια ομάδα εντολών (μορφή α) ή να επιλέξουμε την εκτέλεση της μιας από δυο ομάδες εντολών (μορφή β).
Τι γίνεται όμως αν έχω να επιλέξω μια από πολλές (>2) ομάδες εντολών. Η λύση δίνεται με κατάλληλο συνδυασμό πολλών εντολών if .
Μια γενική λύση μπορεί να είναι η ακόλουθη:
if <Λ.Π. 1> then <Εντολή 1>
else if <Λ.Π. 2> then <Εντολή 2>
else if <Λ.Π. 3> then <Εντολή 3>
...
...
else if <Λ.Π. Ν> then <Εντολή N>
[else <Εντολή >]
program XarakthrisnosBathmou;
uses wincrt;
var
bathmos:integer;
begin
write('Δώσε το βαθμό (1-20):');
readln(bathmos);
if bathmos
>= 18 then writeln(' ΑΡΙΣΤΑ ')
else if
bathmos >= 15 then writeln(' ΠΟΛΥ ΚΑΛΑ ')
else if
bathmos >= 12 then writeln(' ΚΑΛΑ ')
else if
bathmos >= 10 then writeln(' ΜΕΤΡΙΑ ')
else writeln(' ΑΣΧΗΜΑ ');
end.
9) Τι ακριβώς θα εμφανίσουν τα παρακάτω προγράμματα;
program display3; uses wincrt; var a,b:integer; begin readln(a,b); if (a mod 2=0) or (b mod 2 = 0) then writeln(a*b)
else writeln(a/b); end. |
program display4; uses wincrt; var x:integer; begin readln(x); if (x<0) or (x>20) then writeln('λάθος') else
if x<=9 then writeln('απορρίπτεται') else
writeln ('πέτυχε με βαθμό',x); end. |
με είσοδο: α) 10 4 β) 10 5 γ) 3 5 |
με είσοδο: α) 10 β) 7 γ) 13 δ) 34 |
Κεφ 4 θεωρία
10) Να γραφεί πρόγραμμα για τον υπολογισμό της παράστασης
11) Να
γραφεί πρόγραμμα που θα υπολογίζει το εμβαδόν τριγώνου από τις τρις πλευρές
του(α, β, γ). Ο τύπος του Ήρωνα μας δίνει το εμβαδόν τριγώνου από τις πλευρές
του.
όπου
πρέπει τα τ-α>0, τ-β>0, τ-γ>0
· 12) Να γραφεί πρόγραμμα το οποίο θα διαβάζει ένα τριψήφιο ακέραιο αριθμό και θα εμφανίζει ένα – ένα τα ψηφία του
· (παραλλαγή)Να γράψετε πρόγραμμα που να διαβάζει ένα τριψήφιο ακέραιο αριθμό και να τυπώνει ένα άλλο που έχει τα ψηφία του αντίστροφα. Π.χ. για τον αριθμός 123 να τυπώσει 321.
Συντακτικό διάγραμμα της εντολής while
το συντακτικό διάγραμμα της εντολής while είναι
Η λέξη While (όσο) και η λέξη do (κάνε) είναι δεσμευμένες λέξεις της Pascal. Όπως βλέπουμε στο συντακτικό διάγραμμα της εντολής μεταξύ των ειδικών συμβόλων while και do υπάρχει μια λογική παράσταση (συνθήκη). Η <εντολή> μετά το do είναι οποιαδήποτε εντολή της Pascal. Σχεδόν πάντα είναι μια σύνθετη εντολή (begin...end) Θα δούμε γιατί παρακάτω). Την εντολή μετά το do θα την λέμε εσωτερική εντολή της WHILE.
ΠΑΡΑΔΕΙΓΜΑΤΑ διευκρινιστικά της ΣΥΝΤΑΞΗΣ
Ø while a<>0 do
begin
sum=sum+a;
readln(a);
end
Ø while i<>10 do
begin
sum=sum+i;
i:=i+1;
end
Ø while Α<B do A := A -
B;
Ø while apanthsh = 'n' do
begin
readln(a);
s:=s+a
write ('θα συνεχίσεις (n/o):');
readln(apanthsh)
end;
Το νόημα της εντολής while είναι να εκτελείται η εσωτερική εντολή (η εντολή μετά το do) ξανά και ξανά όσο η λογική παράσταση είναι αληθής (true). Η εντολή ολοκληρώνεται μόνο όταν η λογική παράσταση βρεθεί ψευδής ( false ).
program Athroisma_me_while;
uses wincrt;
var {δήλωση μεταβλητών}
A, {Α για τους αριθμούς}
S :real; {S για το άθροισμα }
begin
s:=0; {Αρχική τιμή του αθροίσματος }
write ('δώσε ένα αριθμό (0=τέλος):') ;
readln(A); { διάβασμα του πρώτου αριθμού}
while A<>0 do {αθροίζουμε όσο ο αριθμός που
εξετάζουμε
δεν είναι το 0}
begin
s:=s+A; {νέο άθροισμα = παλιό άθροισμα + νέος αριθμός}
write('Δώσε ένα αριθμό (0=τέλος) :');
readln(A); {διάβασμα νέου αριθμού}
end;
writeln ('το άθροισμα =',
s:10:2)
end.
Το παρακάτω πρόγραμμα εμφανίζει τη λέξη "ΜΠΡΑΒΟ"
10 φορές
program mprabo;
uses wincrt;
var I:integer; {μετρητής επαναλήψεων}
begin
I:=0; {αρχική τιμή του μετρητή 0}
while I<10 do {όσο ο μετρητής <10 }
begin
writeln('ΜΠΡΑΒΟ'); {εμφάνισε "ΜΠΡΑΒΟ"}
I:=I+1; {αυξάνει ο μετρητής κατά 1}
end;
end.
Να βρεθεί ο μεγαλύτερος αριθμός Ν ώστε το άθροισμα
1+2+3+...+Ν<=1000
Μια λύση του προβλήματος είναι η παρακάτω.
program sum1000;
uses wincrt;
var sum,i:integer; {άθροισμα, προσθετέος}
begin
sum:=0;i:=1; {αρχική τιμή αθροίσματος, προσθετέου}
while sum<=1000 do
begin
sum:=sum+i; {υπολογισμός αθροίσματος}
i:=i+1; {ο επόμενος προσθετέος}
end;
writeln('το ζητούμενο Ν=',i-2);
end.
Πολλές φορές χρειαζόμαστε διάφορους αριθμούς είτε για να δοκιμάσουμε τη λύση ενός προβλήματος είτε να προσομοιάσουμε κάποια τυχαία συμβάντα. Η Turbo Pascal έχει τις τυποποιημένες συναρτήσεις random και random(m) για την δημιουργία τυχαίων (ψευδοτυχαίων) αριθμών.
Η συνάρτηση random χωρίς όρισμα επιστρέφει ένα τυχαίο αριθμό μεταξύ 0 και 1 με το 0 να συμπεριλαμβάνεται αλλά όχι το 1. Ο τυχαίος αριθμός είναι τύπου real στο διάστημα [0,1).
π.χ. με την εντολή
x:=random;
Η μεταβλητή x θα πάρει μια τυχαία τιμή με 0 ≤ x < 1
Η συνάρτηση random(m) με όρισμα m ακέραιο επιστρέφει ένα τυχαίο ακέραιο αριθμό μεταξύ 0 και m-1. Ο τυχαίος αριθμός είναι ακέραιος (τύπου word) με 0 ≤ random(m) < m.
π.χ. με την εντολή
x:=random(100);
Η μεταβλητή x θα πάρει μια τυχαία ακέραιη τιμή με 0 ≤ x ≤ 99
Γενικά αν θέλω ένα τυχαίο πραγματικό αριθμό x στο διάστημα [a,b) μπορώ να τον έχω με την εντολή
x:=(b-a)*random + a;
Αν θέλω ένα τυχαίο ακέραιο αριθμό x με a ≤x ≤b μπορώ να τον έχω με την εντολή
x:= random(b-a+1)+a;
Το b-a+1 εκφράζει πόσες πιθανές τιμές θα έχουμε (εύρος) και το a την αρχή του διαστήματος των πιθανών τιμών.
π.χ. για να πάρω την τιμή της ρήψης ενός ζαριού έχω
z:=random(6)+1
Κάθε φορά που καλείται η συνάρτηση έχουμε νέο τυχαίο αριθμό. Έτσι διαδοχικές κλήσης μας δίνουν μια σειρά τυχαίων αριθμών.
Όμως κάθε φορά που εκτελείται ένα πρόγραμμα από την αρχή, αυτή η σειρά θα είναι η ίδια εκτός αν καλέσουμε την διαδικασία randomize.
Η διαδικασία randomize δίνει τυχαία τιμή εκκίνησης στη γεννήτρια τυχαίων αριθμών με αποτέλεσμα να έχουμε τυχαία σειρά αριθμών με κάθε εκτέλεση του προγράμματος που καλεί τις συναρτήσεις random , random(M).
Το παρακάτω πρόγραμμα βρίσκει τον μέσο όρο των αριθμών που δίνει
ο χρήστης μέχρι να δώσει τον αριθμό μηδέν
Program Mesos_Oros;
uses wincrt;
var mo,a,s :real;
n :integer;
begin
n:=0;
s:=0;
writeln('δώσε αριθμό(0=Τέλος):');
readln(a);
while a<>0 do
begin
s:=s+a;
n:=n+1;
writeln('δώσε αριθμό(0=Τέλος):');
readln(a);
end;
if n >0 then
begin
writeln('άθροισμα=',S:10:1);
writeln('δώθηκαν ',n,' αριθμοί');
mo:=s/n;
writeln('μέσος όρος=',mo:10:1);
end
else writeln('Δεν δόθηκαν αριθμοί');
end.
Το παρακάτω πρόγραμμα βρίσκει τον κρυφό αριθμό.
program test;
uses wincrt;
var
x,k,i,found:integer;
begin
write('Δώστε έναν αριθμό από το 1 έως το 100:');
readln(x);
clrscr;
found:=0;
i:=1;
write('Δώστε τον αριθμό που πιστεύετε ότι είναι κρυμμένος:');
readln(k);
while (i<=6) and (found=0) do
begin
if k=x then
begin
found:=1;
writeln('Μπράβο, το βρήκατε!');
end
else if k<x then
writeln('Δώστε μεγαλύτερο αριθμό.')
else
writeln('Δώστε μικρότερο αριθμό.');
i:=i+1;
write('Δώστε τον αριθμό που πιστεύετε ότι είναι κρυμμένος:');
readln(k);
end;
if found=0 then
writeln('Ο κρυμμένος αριθμός ήταν ο ',x,'!');
end.