Αυτό γίνεται με την παρακάτω διαδικασία:
- Κάντε Double click στο Network Neighborhood
- Κάντε Double click στο Polycratis
- Πιέστε το δεξί πλήκτρο του mouse πάνω στο φάκελο Apps
- Επιλέξτε Map Network Drive
- Επιλέξτε Drive: Z και τσεκάρετε την επιλογή Reconnect at logon
- Κάντε click στο OK
- Πιέστε το δεξί πλήκτρο του mouse στο Home
- Επιλέξτε Map Network Drive
- Επιλέξτε Drive: Y
- Κάντε click στο OK
- Κάντε Double-click στο Applications
- Πιέστε το δεξί πλήκτρο του mouse στο Borland Pascal
- Επιλέξτε Properties
- Επιλέξτε Program
- Πηγαίνετε στο Working : και πληκτρολογήστε Y:\students
- Επιλέξτε OK
Όταν αποθηκεύετε το πρόγραμμά σας μέσα από την Pascal πρέπει πάντα
να δίνετε το σωστό φάκελο αποθήκευσης (π.χ. Y:\CS99\s99101).
Τακτικοί τύποι
Οι τύποι integer, boolean και char ονομάζονται
τακτικοί τύποι (ordered types) διότι
ορίζονται σε πεπερασμένες διατεταγμένες ακολουθίες.
Στους τύπους αυτούς μπορούμε να ορίσουμε τις παρακάτω συναρτήσεις:
- succ
- Επόμενη τιμή
- pred
- Προηγούμενη τιμή
- ord
- Σειρά στην ακολουθία
Λογικές παραστάσεις
Μεταβλητές τύπου boolean μπορούν να ενωθούν σε λογικές παραστάσεις με
τις παρακάτω τελεστές:
- and
- Σύζευξη
- or
- Διάζευξη
- not
- Άρνηση
Βιβλιογραφία
- Θ. Αλεβίζου, Α. Καμπουρέλη
Μαθήματα προγραμματισμού: Εισαγωγή με τη γλώσσα Pascal.
σ. 108-110, 127-130.
Θυμέλη, 1995.
- Doug Cooper and
Michael Clancy.
Oh! Pascal, pages 55–58, 188–191.
W. W. Norton & Company, second edition, 1985.
Ασκήσεις
- Να γραφεί πρόγραμμα σε Pascal το οποίο να μετατρέπει έναν
αριθμό από το δεκαδικό σύστημα στο δυαδικό.
Ο αριθμός στο δυαδικό σύστημα επιτρέπεται να τυπώνεται και ανάποδα (από
το τέλος προς την αρχή).
- Να γραφεί πρόγραμμα σε Pascal το οποίο να τυπώνει σε δύο στήλες την
κωδικοποίηση των χαρακτήρων του υπολογιστή (χαρακτήρας, κωδικός).
Ο πρώτος χαρακτήρας που θα τυπωθεί πρέπει να είναι το κενό (' ') και
έχει τον κωδικό 32 και ο τελευταίος πρέπει να είναι η περισπωμένη και
έχει τον κωδικό 126.
Περισσότερες λεπτομέρειες για τις ασκήσεις
Ορίσματα και εμβέλειες
Δομή των συναρτήσεων και διαδικασιών
Οι συναρτήσεις και οι διαδικασίες έχουν τη μορφή ενός προγράμματος.
Μετά την επικεφαλίδα της συνάρτησης ή της διαδικασίας ορίζουμε:
- Σταθερές
- Μεταβλητές
- Άλλες συναρτήσεις και διαδικασίες
- Τις εντολές που θα εκτελεστούν
Παράδειγμα:
program Example;
const
g = 9.81;
var
height : real;
procedure clearScreen;
const
numLines = 24;
var
count : integer;
begin
count := 0;
while count < numLines do
writeln;
end;
begin
clearScreen;
readln(height);
writeln(sqrt(2 * height / g), 's')
end.
Ορίσματα
Οι τυπικές παράμετροι (formal parameters) που ορίζονται
στην επικεφαλίδα της συνάρτησης ή της διαδικασίας μας επιτρέπουν να
της περνάμε τιμές.
Στο σώμα της συνάρτησης ή της διαδικασίας οι παράμετροι αυτές έχουν την
τιμή την οποία περάσαμε κατά την κλήση και μπορούμε να τις χρησιμοποιήσουμε
σαν μεταβλητές.
Ορίζουμε δύο είδη παραμέτρων:
- παράμετρος τιμής (value parameter)
-
Αλλαγές στην τιμή της παραμέτρου στο σώμα της διαδικασίας ή της
συνάρτησης δεν αντικατοπτρίζονται έξω από τη συνάρτηση.
Παράδειγμα ορισμού:
procedure test(i : integer);
- παράμετρος μεταβλητής (variable parameter)
-
Αλλαγές στην τιμή της παραμέτρου στο σώμα της διαδικασίας ή της
συνάρτησης αλλάζουν την τιμή της μεταβλητής η οποία υποχρεωτικά
δώθηκε σαν παράμετρος κατά την κλήση.
Παράδειγμα ορισμού:
procedure test(var i : integer);
Εμβέλεια
- Τα ίδια ονόματα μπορούν να επαναχρησιμοποιούνται χωρίς πρόβλημα μέσα σε
συναρτήσεις και διαδικασίες.
- Όταν αναφερόμαστε σε ένα όνομα με το οποίο έχουν οριστεί πολλές
οντότητες τότε αναφερόμαστε στην οντότητα η οποία βρίσκεται στο
εσώτερο σημείο ορισμού σε σχέση με το σημείο χρήσης.
- Μπορούμε να φανταστούμε το πρόγραμμα και τις διαδικασίες σαν κουτιά το
ένα μέσα στο άλλο. Κάθε κουτί βλέπει αυτά που έχουν οριστεί έξω από αυτό
(εκτός αν τα έχει ορίσει και το ίδιο) αλλά τα εξωτερικά κουτιά δεν βλέπουν
τι έχει οριστεί στα εσωτερικά κουτιά.
- Απτό σχετικό παράδειγμα αποτελεί η λειτουργία της τοπικής αυτοδιοίκησης.
Σε κάθε επίπεδο ισχύουν οι κανόνες που ορίζονται στα ανώτερα επίπεδα
(αντίστοιχα οι μεταβλητές που ορίσθηκαν έξω από τη διαδικασία), αλλά
μπορούν να οριστούν και νέοι κανόνες οι οποίοι φυσικά δεν ισχύουν στα
ανώτερα επίπεδα (αντίστοιχα, έξω από τη διαδικασία).
Παράδειγμα
program Test;
var
a : integer; {a1}
procedure Dummy;
var
a : integer; {a2}
begin
a := 3 {use a2}
end;
begin
a := 8 {use a1}
end.
Βιβλιογραφία
- Θ. Αλεβίζου, Α. Καμπουρέλη
Μαθήματα προγραμματισμού: Εισαγωγή με τη γλώσσα Pascal.
σ. 167-175.
Θυμέλη, 1995.
- Doug Cooper and
Michael Clancy.
Oh! Pascal, pages 67–98.
W. W. Norton & Company, second edition, 1985.
Ασκήσεις
Pascal 03
- Να γραφεί πρόγραμμα σε Pascal το οποίο να περιέχει τα
παρακάτω στοιχεία:
- Διαδικασία INC με όρισμα παράμετρο μεταβλητής η οποία να αυξάνει
την τιμή της κατά 1.
- Διαδικασία COUNT με όρισμα παράμετρο τιμής η οποία να τυπώνει τους
αριθμούς από την τιμή αυτή μέχρι το 10 κάνοντας χρήση της διαδικασίας
INC.
- Κλήση της διαδικασίας COUNT με όρισμα σε μεταβλητή για να τυπωθούν
οι αριθμοί από το 3 μέχρι το 10.
- Εκτύπωση της τιμής της παραπάνω μεταβλητής μετά το τέλος της
διαδικασίας.
- Όλες οι μεταβλητές και τα ονόματα των ορισμάτων στο πρόγραμμα
να είναι ίδια.
(Η απαίτηση αυτή έχει εκπαιδευτικό μόνο χαρακτήρα. Κανονικά όλες
οι μεταβλητές πρέπει να ονοματίζονται με τρόπο ώστε να αποφεύγεται
η πιθανότητα σύγχυσης.)
Περισσότερες λεπτομέρειες για τις ασκήσεις
Πρόσθετες δομές ελέγχου
Επανάληψη σε ακέραιες τιμές
- Μπορούμε να
επαναλάβουμε μια εντολή (ή ομάδα εντολών) ορισμένες
φορές δίνοντας σε μια συγκεκριμένη μεταβλητή ελέγχου τακτικού τύπου
(char, integer, boolean)
τιμές από μια προκαθορισμένη περιοχή τιμών με την δομή ελέγχου
for
.
- Στη δομή
for
εκχώριση σε μεταβλητή to
τελική τιμή do
εντολή
ορίζουμε την πρώτη και την
τελευταία τιμή που θέλουμε να λάβει η μεταβλητή ελέγχου.
- Άν η πρώτη τιμή είναι μικρότερη από την τελευταία χρησιμοποιούμε
την δομή
for ... downto ... do ...
Παράδειγμα:
for i := 1 to 10 do
begin
writeln(i);
k := k + i
end
for c := 'Z' downto 'A' do
write(c)
Επιλογή περιπτώσεων
- Με τη δομή ελέγχου
case
επιλογή of
σταθερά: εντολή
σταθερά: εντολή
...
end
μπορούμε να ορίσουμε να εκτελείται διαφορετικός κώδικας ανάλογα με την
έκφραση της επιλογής.
- Όταν η έκφραση της επιλογής είναι ίση με κάποια από τις σταθερές
εκφράσεις τότε εκτελείται η αντίστοιχη εντολή.
- Η έκφραση της επιλογής και οι τιμές των σταθερών πρέπει να είναι
τακτικοί τύποι.
- Μπορούμε να παραθέσουμε και περισσότερες από μία σταθερές χωρίζοντάς τις
με ,.
Παράδειγμα:
case c of
'A' : writeln('alpha');
'B', 'C' : writeln('beta');
'1', '2': writeln('digit');
end
Σύνθετες επιλογές
- Μπορούμε να γράψουμε σύνθετες μορφές ελέγχου βάζοντας
στη σειρά
if ... then ... else if ... then ... else if ... then ...
Παράδειγμα:
if i < 10 then
writeln('Number too small')
else if i > 1000 then
writeln('Number too large')
else
writeln(i)
Έλεγχος βρόχου στο τέλος
- Μπορούμε να επαναλάβουμε ένα βρόχο τουλάχιστον μια φορά με τη δομή
ελέγχου
repeat
εντολές
until
συνθήκη
Παράδειγμα:
repeat
readln(number);
writeln(number)
until number < 0;
Βιβλιογραφία
- Θ. Αλεβίζου, Α. Καμπουρέλη
Μαθήματα προγραμματισμού: Εισαγωγή με τη γλώσσα Pascal.
σ. 271-277, 397-405.
Θυμέλη, 1995.
- Doug Cooper and
Michael Clancy.
Oh! Pascal, pages 99–174, 215–229.
W. W. Norton & Company, second edition, 1985.
Ασκήσεις
Pascal 04
- Να γραφεί πρόγραμμα σε Pascal σύμφωνα με τις παρακάτω
προδιαγραφές:
- Το πρόγραμμα επαναλαμβανόμενα διαβάζει από το
χρήστη έναν αριθμό Α, το σύμβολο μιας από τις τέσσερεις πράξεις
Σ και έναν ακόμα αριθμό Β και τυπώνει το αποτέλεσμα Α Σ Β.
- Όταν το αποτέλεσμα είναι 0 το πρόγραμμα να τερματίζει τη
λειτουργία του.
- Αποτελέσματα με τιμές από το 1 μέχρι το 9 παριστάνονται και
με το σύμβολο * επαναλαμβανόμενο ανάλογα με το αποτέλεσμα.
Παράδειγμα:
3
*
4
12
3
+
3
6 (******)
4
-
2
2 (**)
2
-
2
0
Περισσότερες λεπτομέρειες για τις ασκήσεις
Τύποι οριζόμενοι από το χρήστη
Ορισμός τύπων
H Pascal μας επιτρέπει να ορίσουμε νέους τύπους βασισμένους σε τύπους
που υπάρχουν με τη δήλωση TYPE
.
Η δήλωση αυτή γίνεται πριν από τη δήλωση των μεταβλητών.
Παράδειγμα:
type
force = real;
mass = real;
acc = real;
var
carMass : mass;
carAcc : acc;
function theForce(m : mass; a : acc) : force;
begin
theForce := m * a
end;
begin
readln(carMass);
readln(carAcc);
writeln(theForce(carMass, carAcc)
end.
Τύποι υποπεριοχής
Μπορούμε ακόμα να ορίσουμε νέους τύπους ως
τύπους υποπεριοχής σε σχέση
με υπάρχοντες τακικούς τύπους.
Παράδειγμα:
type
upper = 'A' .. 'Z';
lower = 'a' .. 'z';
months = 1..12;
Απαριθμήσιμοι τακτικοί τύποι
Τέλος, μπορούμε να ορίσουμε
απαριθμήσιμους τακτικούς τύπους
ως σύνολο ονομασμένων τιμών με διάταξη που ορίζει ο χρήστης.
Παράδειγμα:
type
ScreenColor = (Red, Green, Blue);
Shape = (Line, Triangle, Rectangle, Circle);
Τους απαριθμήσιμους τακτικούς τύπους μπορούμε να τους χρησιμοποιήσουμε σχεδόν
όπως και τους υπόλοιπους τακτικούς τύπους.
Δεν μπορούμε να τους διαβάσουμε με την εντολή ReadLn και να τους
τυπώσουμε με την εντολή WriteLn.
Παράδειγμα:
Program EnumExample;
type
ScreenColor = (Red, Green, Blue);
var
Color : ScreenColor;
begin
Color := Red;
while Color < Blue do
begin
writeln(ord(Color));
Color := succ(Color)
end
end.
Βιβλιογραφία
- Θ. Αλεβίζου, Α. Καμπουρέλη
Μαθήματα προγραμματισμού: Εισαγωγή με τη γλώσσα Pascal.
σ. 194-201.
Θυμέλη, 1995.
- Doug Cooper and
Michael Clancy.
Oh! Pascal, pages 300–302.
W. W. Norton & Company, second edition, 1985.
Ασκήσεις
Pascal 05
- Να γραφεί πρόγραμμα σε Pascal το οποίο να διαβάζει από το
χρήστη το ύψος από την επιφάνεια της γης στο οποίο βρίσκεται ένα
αντικείμενο και να τυπώνει το χρόνο που θα διαρκέσει η ελεύθερη πτώση
του σύμφωνα με τους παρακάτω περιορισμούς:
- Ο υπολογισμός να γίνεται με τη βοήθεια συνάρτησης.
- Όλοι οι τύποι φυσικών μεγεθών να οριστούν ξεχωριστά.
- Η σταθερά της βαρύτητας να οριστεί ως σταθερά της Pascal.
Περισσότερες λεπτομέρειες για τις ασκήσεις
Γραφικά με υπολογιστή
Παράσταση γραφικών
- Η παράσταση γραφικών από υπολογιστές γίνεται με δύο τρόπους:
- Διανυσματικά (vector)
- Χαρτογραφικά (bitmap)
- Το χρώμα παριστάνεται με την αθροιστική σύνθεση τριών βασικών χρωμάτων
- Στη χαρτογραφική παράσταση κάθε βασικό σημείο της οθόνης ονομάζεται
εικονοστοιχείο (pixel)
- Ο αριθμός των εικονοστοιχείων στην οριζόντια και κάθετη διεύθυνση
ορίζει την ανάλυση της οθόνης.
- Τυπικές αναλύσεις ξεκινούν από 640 x 480 και καταλήγουν σε 1280 * 1024.
Συστήματα συντεταγμένων
Γραφικά σε Turbo Pascal
- Η Turbo Pascal παρέχει τη δυνατότητα χρήσης χαρτογραφικών γραφικών.
- Πριν τη χρήση τους είναι απαραίτητο να καθορίσουμε τον κατάλογο
στον οποίο βρίσκονται οι απαραίτητες βιβλιοθήκες.
Αυτό γίνεται από την επιλογή της Pascal: Options - Directories.
Στην οθόνη που εμφανίζεται καθορίζουμε στην επιλογή:
Unit directories: c:\apps\bp\units
και στην επιλογή:
Resource directories: c:\apps\bp\units
Για να μην απαιτηθεί να ξανακαθορίσουμε τις επιλογές αυτές,
επιλέγουμε στο τέλος την εντολή Options - Save.
- Για τη χρήση τους πρέπει το πρόγραμμα να περιέχει τις
παρακάτω δηλώσεις:
program test;
uses Graph, Crt;
- Το σύστημα γραφικών αρχικοποιείται ως εξής:
var
grDriver: Integer;
grMode: Integer;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,'c:/apps/bp/bgi');
- Η ανάλυση της οθόνης στην οριζόντια και κάθετη διεύθυνση
επιστρέφεται από τις συναρτήσεις GetMaxX, GetMaxY.
- Το μέγιστο δυνατό χρώμα επιστρέφεται από τη συνάρτηση
GetMaxColor
.
- Το (0,0) των συντεταγμένων βρίσκεται πάνω αριστερά στην οθόνη.
- Ένα εικονοστοιχείο στις συντεταγμένες της οθόνης x, y
μπορεί να πάρει ένα ορισμένο χρώμα c με την εντολή:
putpixel(x ,y , c);
- Για να συνεχίσουμε να βλέπουμε την οθόνη των γραφικών μετά το
τέλος των λειτουργιών του προγράμματος μπορούμε στο τέλος να προσθέσουμε
τις εντολές:
Readln;
CloseGraph;
end.
Βιβλιογραφία
- Peter Burger and Duncan
Gillies.
Interactive Computer Graphics: Functional, Procedural and Device-level
Methods.
Addison-Wesley, 1989.
Ασκήσεις
Pascal 06
- Να γραφεί πρόγραμμα σε Pascal σύμφωνα με τις παρακάτω
προδιαγραφές:
- Το πρόγραμμα σχεδιάζει στην οθόνη τους άξονες συντεταγμένων (x,y)
καθώς και τη γραφική παράσταση μιας συνάρτησης της αρεσκείας σας
για ένα κατάλληλο (ορισμένο από σας) πεδίο τιμών.
Περισσότερες λεπτομέρειες για τις ασκήσεις
Πίνακες
Ορισμός πινάκων
- Οι πίνακες επιτρέπουν την οργάνωση ομοειδών στοιχείων.
- Έχουμε πρόσβαση σε κάθε στοιχείο του πίνακα με βάση τον ακέραιο δείκτη του.
- Ο ορισμός του πίνακα περιλαμβάνει το εύρος τιμών του δείκτη καθώς και
τον τύπο των τιμών.
- Μπορούμε να ορίσουμε και πίνακες πολλαπλών διαστάσεων.
Παράδειγμα:
const
red = 0;
green = 1;
blue = 2;
var
grades : array [1..120] of integer;
temperatures : array [-5..5] of real;
table : array [0..10,0..20] of real;
screen : array [0..479,0..639] of array [red..blue] of integer;
Χρήση στοιχείων
- Κάθε στοιχείο του πίνακα είναι προσβάσιμο με βάση το όνομα του πίνακα a
καθώς και τον δείκτη του i με το συμβολισμό
a[i]
.
- Ο δείκτης πρέπει να είναι τακτικού τύπου (ακέραιος, boolean, υποσύνολο).
- Αν ο πίνακας είναι πολλαπλών διαστάσεων χωρίζουμε τους δείκτες με ,
Παράδειγμα:
grades[15] := 9;
temperatures[-2] := 37.8;
table[3,2] := 12.3;
screen[5,7][red] := 12;
Χρήση πινάκων
- Οι πίνακες μπορούν να περαστούν ως όρισμα σε συνάρτηση με βάση
τύπο που τους καθορίζει.
- Επιτρέπεται ακόμα η εκχώρηση τιμών ανάμεσα σε πίνακες ίδιου τύπου.
Παράδειγμα:
type
grades = array [1..120] of integer;
var
thisYear, lastYear : grades;
procedure readGrades(var theGrades : grades);
...
begin
readGrades(lastyear);
thisYear := lastYear
end.
Βιβλιογραφία
- Θ. Αλεβίζου, Α. Καμπουρέλη
Μαθήματα προγραμματισμού: Εισαγωγή με τη γλώσσα Pascal.
σ. 271-331.
Θυμέλη, 1995.
- Doug Cooper and
Michael Clancy.
Oh! Pascal, pages 331–382.
W. W. Norton & Company, second edition, 1985.
Ασκήσεις
Pascal 07
- Να γραφεί πρόγραμμα σε Pascal το οποίο να διαβάζει 5 χαρακτήρες
και να τους τυπώνει σε αλφαβητική σειρά.
Παράδειγμα:
O
S
I
D
A
A
D
I
O
S
Περισσότερες λεπτομέρειες για τις ασκήσεις
Ορμαθοί χαρακτήρων
Ορισμός ορμαθών χαρακτήρων
Παράδειγμα:
var
myname : packed array [0..32] of char;
Χρήση ορμαθών χαρακτήρων
Με μεταβλητές που έχουν οριστεί ως ορμαθοί χαρακτήρων μπορούμε:
- να διαβάσουμε από το χρήστη και να τυπώσουμε τα περιεχόμενά τους με τις
εντολές ReadLn και WriteLn.
- να αναθέσουμε μια μεταβλητή σε μια άλλη με χρήση του :=
- να συγκρίνουμε δύο μεταβλητές μεταξύ τους με τους τελεστές
=, <, >, <=, >=.
Το αποτέλεσμα της σύγκρισης εξαρτάται από την απόλυτη αλφαβητική σειρά
των περιεχομένων των δύο μεταβλητών σύμφωνα με τον πίνακα χαρακτήρων
του συστήματος.
Παράδειγμα:
program test;
var
a, b : packed array [0..10] of char;
begin
readln(a);
b := a;
writeln(b);
writeln(b = a)
end.
Πρόσβαση στους χαρακτήρες
Σε μεταβλητές που έχουν οριστεί ως ορμαθοί χαρακτήρων μπορούμε ακόμα
να επεξεργαστούμε τα στοιχεία τους γράμμα-γράμμα όπως σε πίνακες
μιας διάστασης.
Παράδειγμα:
program test;
var
a : packed array [0..10] of char;
i : integer;
begin
readln(a);
for i := 0 to 10 do
write(a[i]);
writeln
end.
Βιβλιογραφία
- Θ. Αλεβίζου, Α. Καμπουρέλη
Μαθήματα προγραμματισμού: Εισαγωγή με τη γλώσσα Pascal.
σ. 333-365.
Θυμέλη, 1995.
- Doug Cooper and
Michael Clancy.
Oh! Pascal, pages 122–125.
W. W. Norton & Company, second edition, 1985.
Ασκήσεις
Pascal 08
- Να γραφεί πρόγραμμα σε Pascal το οποίο να παίζει το παιγνίδι της
"κρεμάλας" ανάμεσα σε δύο χρήστες Α και Β.
Το πρόγραμμα διαβάζει από τον χρήστη Α μια λέξη και το μήκος της,
και καθαρίζει την οθόνη τυπώνοντας 24 κενές γραμμές.
Στη συνέχεια ζητά από το χρήστη Β να μαντέψει τη λέξη
γράμμα-γράμμα.
Για κάθε σωστό γράμμα που μαντεύει ο χρήστης Β το πρόγραμμα τυπώνει
τη λέξη με το γράμμα στη σωστή θέση.
Οι υπόλοιπες θέσεις της λέξης συνεχίζουν να εμφανίζονται με παύλες.
Για κάθε λάθος γράμμα που μαντεύει ο χρήστης Β το πρόγραμμα εμφανίζει
το χαρακτήρα * τόσες φορές όσα μέλη έχουν απομείνει στο χρήστη (αρχικά 5).
Το πρόγραμμα τερματίζει εμφανίζοντας το ανάλογο μήνυμα αν ο χρήστης Β χάσει
όλα τα μέλη του ή μαντέψει όλη τη λέξη.
Παράδειγμα:
Lexi: PASCAL
Mikos: 6
Gramma: E
****
Gramma: Q
***
Gramma: A
-A--A-
Gramma: T
**
Gramma: P
PA--A-
Gramma: I
*
Gramma: L
PA--AL
Gramma: C
PA-CAL
Gramma: S
PASCAL
You made it!!!
Περισσότερες λεπτομέρειες για τις ασκήσεις
Εγγραφές
Ορισμός εγγραφών
- Οι εγγραφές επιτρέπουν την οργάνωση ομοειδών και μη ομοειδών
στοιχείων με βάση το όνομά τους.
- Ο ορισμός της εγγραφής περιλαμβάνει ένα όνομα για πρόσβαση σε
κάθε τιμή καθώς και τον τύπο της τιμής.
- Έχουμε πρόσβαση σε κάθε στοιχείο της εγγραφής (το πεδίο
της εγγραφής) με βάση το όνομά του.
Παράδειγμα:
program test;
type
date = record
day : 1..31;
month : 1..12;
year : integer
end;
member = record
name : packed array [1..4] of char;
from, ending : date
end;
var
coordinate : record
x, y : integer
end;
members : array [1..100] of member;
Χρήση στοιχείων
- Κάθε πεδίο της εγγραφής είναι προσβάσιμο με βάση το όνομα της
μεταβλητής r που περιέχει την εγγραφή καθώς και το όνομά του n με το συμβολισμό
r.n
.
- Το παραπάνω σχήμα μπορεί να χρησιμοποιηθεί αναλογικά και για πιο
σύνθετους τύπους όπως εγγραφές που περιέχουν πίνακες, εγγραφές
που περιέχουν εγγραφές, πίνακες που περιέχουν εγγραφές κ.λπ.
Παράδειγμα:
program test;
type
date = record
day : 1..31;
month : 1..12;
year : integer
end;
member = record
name : packed array [1..4] of char;
from, ending : date
end;
var
coordinate : record
x, y : integer
end;
members : array [1..100] of member;
begin
coordinate.x := 5;
coordinate.y := 4;
writeln(coordinate.x);
writeln(coordinate.y);
members[1].name := 'R2D2';
members[1].from.day := 22;
members[1].from.month := 5;
members[1].from.year := 4567;
members[1].ending.day := 22;
members[1].ending.month := 5;
members[1].ending.year := 4570;
end.
Χρήση εγγραφών
- Οι εγγραφές μπορούν να περαστούν ως όρισμα σε συνάρτηση με βάση
τύπο που τις καθορίζει.
- Επιτρέπεται ακόμα η εκχώρηση τιμών ανάμεσα σε εγγραφές ίδιου τύπου.
Παράδειγμα:
program test;
type
date = record
day : 1..31;
month : 1..12;
year : integer
end;
member = record
name : packed array [1..4] of char;
from, ending : date
end;
var
coordinate : record
x, y : integer
end;
members : array [1..100] of member;
procedure MyPlot(c : coordinate);
begin
putpixel(c.x, c.y, 1)
end;
begin
coordinate.x := 5;
coordinate.y := 4;
MyPlot(coordinate);
members[1].name := 'R2D2';
members[1].from.day := 22;
members[1].from.month := 5;
members[1].from.year := 4567;
members[1].ending.day := 22;
members[1].ending.month := 5;
members[1].ending.year := 4570;
members[2] := members[1];
members[2].name := 'C3PO'
end.
Βιβλιογραφία
- Θ. Αλεβίζου, Α. Καμπουρέλη
Μαθήματα προγραμματισμού: Εισαγωγή με τη γλώσσα Pascal.
σ. 367-374.
Θυμέλη, 1995.
- Doug Cooper and
Michael Clancy.
Oh! Pascal, pages 383–418.
W. W. Norton & Company, second edition, 1985.
Ασκήσεις
Pascal 09
- Να γραφεί πρόγραμμα σε Pascal το οποίο να υλοποιεί αριθμομηχανή
μιγαδικών αριθμών σύμφωνα με τις παρακάτω προδιαγραφές:
- Το πρόγραμμα διαβάζει από το
χρήστη
ένα ζεύγος αριθμών Α, B,
το σύμβολο μιας από τις τέσσερεις πράξεις Σ,
ένα ακόμα ζεύγος αριθμών Γ, Δ,
και τυπώνει το αποτέλεσμα (Α + Bi) Σ (Γ + Δi).
- Όταν το αποτέλεσμα είναι (0 + 0i) το πρόγραμμα να τερματίζει τη
λειτουργία του.
Οι μιγαδικοί αριθμοί να οριστούν με τη χρήση εγγραφών.
Παράδειγμα:
5 3
+
1 2
6 + 5i
1 1
*
1.5 2
-0.5 + 3.5i
Για την υλοποίηση του προγράμματος μπορείτε να επαναχρησιμοποιήσετε το
πρόγραμμα της άσκησης PASCAL 04.
Περισσότερες λεπτομέρειες για τις ασκήσεις
Σειριακά αρχεία
Εισαγωγή στα αρχεία
- Τα
αρχεία (files)
παρέχουν στην Pascal τη δυνατότητα μεταφοράς των δεδομένων
από και προς τις αντίστοιχες οντότητες που υποστηρίζει
το λειτουργικό σύστημα.
- Έτσι από την Pascal μπορούμε να δημιουργήσουμε αρχεία στην
περιφερειακή μνήμη (λ.χ. τη μονάδα δίσκου) για να φυλάξουμε στοιχεία
τα οποία θα έχουν διάρκεια ζωής μεγαλύτερη από αυτή του προγράμματός
μας.
- Ως υπηρεσία που προσφέρεται από το λειτουργικό σύστημα ο
χειρισμός των αρχείων αλλάζει ανάλογα με την υλοποίηση της γλώσσας
και το λειτουργικό σύστημα.
- Εμείς εξετάζουμε τη χρήση των αρχείων σε Turbo Pascal
κάτω από το MS-DOS.
Βασικός χειρισμός
- Ο χειρισμός των αρχείων στην Pascal γίνεται μέσω μιας
μεταβλητής τύπου
FILE OF ...
- Πριν θελήσουμε να διαβάσουμε ή να γράψουμε ένα αρχείο πρέπει
να συνδέσουμε τη μεταβλητή χειρισμού του αρχείου (π.χ. FileVar) με το
όνομα του αρχείου που θα χρησιμοποιήσει το λειτουργικό σύστημα.
Η σύνδεση αυτή γίνεται με την εντολή
assign(FileVar, FileName)
- Πριν γράψουμε στο αρχείο
πρέπει να καλέσουμε την εντολή
rewrite(FileVar)
ενώ πριν διαβάσουμε από το αρχείο
πρέπει να καλέσουμε την εντολή reset(FileVar)
.
- Από το αρχείο διαβάζουμε και γράφουμε με τη χρήση των
εντολών
read(FileVar, Var ...)
και
write(FileVar, Var ...)
.
- Οι εντολές αυτές μεταφέρουν τα δεδομένα μεταξύ της μεταβλητής
και του αρχείου σύμφωνα με την παράσταση των δεδομένων στην
εσωτερική μνήμη του υπολογιστή.
- Κατά την ανάγνωση του αρχείου μπορούμε να ελέγξουμε αν το αρχείο
περιέχει και άλλα στοιχεία με τη συνάρτηση
EOF(FileVar)
(End of File).
- Τέλος, όταν τελειώσουμε τη χρήση του αρχείου καλούμε την εντολή
close(FileVar)
για να σταματήσει ο συσχετισμός της
μεταβλητής χειρισμού του αρχείου με το αρχείο του λειτουργικού
συστήματος.
Παράδειγμα:
program testfile;
var
f : file of integer;
i : integer;
begin
assign(f, 'INT.DAT');
rewrite(f);
for i := 1 to 5 do
write(f, i);
close(f);
reset(f);
while not eof(f) do
begin
read(f, i);
writeln(i)
end;
close(f);
end.
Μετά την εκτέλεση του παραπάνω προγράμματος
το αρχείο INT.DAT θα περιέχει τις παρακάτω τιμές:
01 00 02 00 03 00 04 00 05 00
Αρχεία κειμένου
- Η Pascal ορίζει έναν ειδικό τύπου αρχείου το αρχείο κειμένου
(
TEXT
) κατά τη χρήση του οποίου οι τιμές
που περιέχονται στο αρχείο μετατρέπονται αυτόματα ανάμεσα σε
κείμενο και την εσωτερική παράσταση του υπολογιστή.
- Τα αρχεία αυτά έχουν τις παρακάτω διαφορές σε σχέση με
τα αρχεία τα οποία έχουμε δει μέχρι τώρα:
- Μπορούν να διαβαστούν και να γραφούν από άνθρωπο με τη χρήση
κειμενογράφου.
- Μπορούν να μεταφερθούν ανάμεσα σε υπολογιστές με διαφορετική
αρχιτεκτονική.
- Μπορούν να χρησιμοποιηθούν για τη φύλαξη διαφορετικών τύπων
τιμών χωρίς τη χρήση εγγραφών.
- Δεν μπορούν να χρησιμοποιηθούν για τη φύλαξη σύνθετων στοιχείων
(πινάκων, εγγραφών).
- Η λειτουργία τους είναι πιο αργή λόγω του κόστους της μετατροπής.
- Κατά τη χρήση των αρχείων αυτών μπορούμε να γράφουμε και να
διαβάζουμε τιμές με τις εντολές
WRITE, WRITELN, READ, READLN
όπως θα γράφαμε τιμές στην οθόνη και θα τις διαβάζαμε τιμές από το
πληκτρολόγιο.
Παράδειγμα:
program testfile;
var
f : text;
i : integer;
begin
assign(f, 'INT.TXT');
rewrite(f);
for i := 1 to 5 do
writeln(f, i);
close(f);
reset(f);
while not eof(f) do
begin
readln(f, i);
writeln(i)
end;
close(f);
end.
Μετά την εκτέλεση του παραπάνω προγράμματος
το αρχείο INT.TXT θα περιέχει το παρακάτω κείμενο:
1
2
3
4
5
Παράδειγμα
Το παρακάτω παράδειγμα ζητάει από το χρήστη να προσδιορίσει
δύο ονόματα αρχείων Α, Β και αντιγράφει το αρχείο Α στο αρχείο Β.
program copyfile;
var
infname, outfname : packed array [0..8] of char;
fin, fout : file of char;
c : char;
begin
write('Give input file:');
readln(infname);
write('Give output file:');
readln(outfname);
assign(fin, infname);
assign(fout, outfname);
rewrite(fout);
reset(fin);
rewrite(fout);
while not eof(fin) do
begin
read(fin, c);
write(fout, c)
end;
close(fin);
close(fout);
end.
Βιβλιογραφία
- Θ. Αλεβίζου, Α. Καμπουρέλη
Μαθήματα προγραμματισμού: Εισαγωγή με τη γλώσσα Pascal.
σ. 211-250.
Θυμέλη, 1995.
- Doug Cooper and
Michael Clancy.
Oh! Pascal, pages 419–458.
W. W. Norton & Company, second edition, 1985.
Ασκήσεις
Pascal 10
- Να επεκταθεί το πρόγραμμα της αριθμομηχανής (Pascal 09) έτσι
ώστε να καταγράφει σε αρχείο κειμένου τις πράξεις και τα αποτελέσματα.
- Ως παραδοτέο της άσκησης να αποσταλεί (με τον κωδικό PASCAL 20)
και ένα αντίγραφο του αρχείου
αυτού που να περιέχει δείγματα όλων των πράξεων.
Παράδειγμα του αρχείου:
(5 + 3i) + (1 + 2i) = (6 + 5i)
(5 + 3i) - (1 + 2i) = (4 + 1i)
(1 + 1i) * (1.5 + 2i) = (-0.5 + 3.5i)
...
Περισσότερες λεπτομέρειες για τις ασκήσεις
Συναρτησιακός προγραμματισμός
Συναρτησιακές παράμετροι
Μπορούμε να ορίσουμε ως ορίσμα μιας διαδικασίας ή συνάρτησης
μια άλλη διαδικασία ή συνάρτηση αρκεί να ορίσουμε τον αντίστοιχο τύπο.
Παράδειγμα:
program maptest;
{$F+}
type
realmap = function(x : real) : real;
function map2(f : realmap; n : real) : real;
begin
map2 := f(f(n))
end;
function double(x : real) : real;
begin
double := x * 2
end;
begin
writeln(map2(double, 1))
end.
Το πρόγραμμα θα υπολογίσει την τιμή double(double(1)) και θα τυπώσει 4.
Σημείωση
Στην Turbo Pascal 7.0 πρέπει στην αρχή του προγράμματος να δωθεί
το σχόλιο {$F+} για να υποστηριχτεί η λειτουργία αυτή.
Η συνάρτηση map
Η διαδικασία map μετασχηματίζει μια σειρά στοιχείων σε μια άλλη,
με βάση μια συνάρτηση από στοιχείο σε στοιχείο.
Αν η συνάρτηση είναι η f και η σειρά αποτελείται από τα στοιχεία:
σ1, σ2, σ3, σ4, σ5 ...
τότε η νέα σειρά θα είναι:
f(σ1), f(σ2, f(σ3), f(σ4), f(σ5) ...
Για παράδειγμα με βάση τη διαδικασία map και αντίστοιχη συνάρτηση f μπορούμε
εύκολα να δημιουργήσουμε από έναν πίνακα v έναν νέο πίνακα v' του οποίου
τα στοιχεία να είναι διπλάσια κάθε στοιχείου του v:
program Map;
{$F+}
const
maxindex = 10;
type
realmap = function(x : real) : real;
mylist = array [1..maxindex] of real;
var
i : integer
l1, l2 : mylist;
procedure map(f : realmap; v : mylist; var vnew : mylist);
var
i : integer;
begin
for i := 1 to maxindex do
vnew[i] := f(v[i])
end;
function double(x : real) : real;
begin
double := x * 2
end;
begin
for i := 1 to maxindex do
readln(l1[i]);
map(double, l1, l2);
for i := 1 to maxindex do
writeln(l2[i]);
end.
Η συνάρτηση fold
Η συνάρτηση fold "διπλώνει" μια σειρά στοιχείων σε μια τιμή με
βάση μια συνάρτηση από στοιχείο και τιμή σε τιμή και μια αρχική τιμή.
Αν η συνάρτηση είναι η f, η αρχική τιμή α και η σειρά αποτελείται από τα
στοιχεία:
σ1, σ2, σ3 ...
τότε η νέα σειρά θα είναι:
f(...,f(σ3, f(σ2, f(σ1, α))))...
Για παράδειγμα με βάση τη συνάρτηση fold και αντίστοιχη συνάρτηση f μπορούμε
εύκολα να βρούμε το άθροισμα των στοιχείων ενός πίνακα:
program TestFold;
{$F+}
const
maxindex = 10;
type
realmap = function(x : real; y : real) : real;
mylist = array [1..maxindex] of real;
var
i : integer;
l : mylist;
function fold(f : realmap; a : real; v : mylist) : real;
var
i : integer;
result : real;
begin
result := a;
for i := 1 to maxindex do
result := f(v[i], result);
fold := result;
end;
function sum(x : real; y : real) : real;
begin
sum := x + y
end;
begin
for i := 1 to maxindex do
readln(l[i]);
writeln(fold(sum, 0, l))
end.
Αριθμητικές μέθοδοι
Με βάση συναρτησιακές παραμέτρους μπορούμε να υλοποιήσουμε παραμετρικά
διάφορες αριθμητικές μεθόδους.
Τα παρακάτω παραδείγματα αν και απλοϊκά ως προς τις τεχνικές και
τις μεθόδους υλοποίησης δείχνουν τον τρόπο της παραμετρικής
χρήσης συναρτησιακών παραμέτρων.
Εύρεση ρίζας εξίσωσης με τη μέθοδο Newton-Raphson
Μπορούμε να επιλύσουμε μια εξίσωση της μορφής f(x) = 0
με βάση την επαναλαμβανόμενη εφαρμογή του
μέχρι η διαφορά μεταξύ δύο εφαρμογών να γίνει αρκετά μικρή.
Η αρχική τιμή που χρησιμοποιούμε είναι απλώς μια υπόθεση.
Η εύρεση της παραγώγου f' της f για μια τιμή x μπορεί και αυτή
να υπολογιστεί αριθμητικά ως:
για μια αρκετά μικρή τιμή του h.
Το παρακάτω πρόγραμμα βρίσκει αριθμητικά μια ρίζα (1.4142135624) της
εξίσωσης x^2 - 2 = 0.
program NewtonRaphsonExample;
{$F+}
const
Epsilon = 1e-8; {Αρκετά μικρή τιμή}
type
realfun = function(x : real) : real;
{Εύρεση παραγώγου της f για την τιμή x}
function DerivativeValue(f : realfun; x : real) : real;
begin
DerivativeValue := (f(x + epsilon) - f(x)) / epsilon
end;
{Εύρεση ρίζας της f για αρχική πιθανή τιμή x}
function NewtonRaphson(f : realfun; x1 : real) : real;
var
x0 : real;
begin
repeat
x0 := x1;
x1 := x0 - f(x0) / DerivativeValue(f, x0)
until abs(x1 - x0) < epsilon;
NewtonRaphson := x1
end;
{Εξίσωση - παράδειγμα (χ^2 - 2 = 0)}
function Example(x : real) : real;
begin
Example := sqr(x) - 2
end;
begin
writeln(NewtonRaphson(Example, 12))
end.
Αριθμητικός υπολογισμός ολοκληρώματος με τη μέθοδο του τραπεζίου
Χωρίζοντας την επιφάνεια που ορίζει μια συνάρτηση σε μεγάλο αριθμό
τραπεζίων μπορούμε να προσεγγίσουμε αριθμητικά την τιμή του ολοκληρώματος:
ως άθροισμα των εμβαδών τους.
Το όρισμα μιας τέτοιας συνάρτησης είναι της μορφής:
Function Integrate(f : realfun; a, b : real) : real;
Βιβλιογραφία
- Doug Cooper and Michael
Clancy.
Oh! Pascal, pages 558-559.
W. W. Norton & Company, second edition, 1985.
- Anthony J. Field and
Peter G. Harrison.
Functional
Programming.
Addison-Wesley, 1988.
- John Hughes.
Why functional programming matters.
In David A. Turner, editor, Research Topics in Functional
Programming, chapter 2, pages 17-42. Addison-Wesley, 1990.
Also appeared in the April 1989 issue of The Computer Journal.
- William H. Press and
Brian P. Flannery.
Numerical
Recipes in Pascal : The Art of Scientific Computing.
Cambridge University Press, 1989.
Ασκήσεις
Pascal 11
- Να γραφεί πρόγραμμα σε Pascal το οποίο να υπολογίζει με τη μέθοδο
του τραπεζίου το ολοκλήρωμα μιας συνάρτησης.
Με βάση το πρόγραμμα αυτό να υπολογιστεί η τιμή Α του
και να τυπωθεί το Α και το 4*Α.
Ο υπολογισμός του ολοκληρώματος να γίνει σε ξεχωριστή συνάρτηση
με παραμέτρους τη συνάρτηση για την οποία θα υπολογιστεί το
ολοκλήρωμα, καθώς και τα άνω και κάτω όρια, α και β.
Περισσότερες λεπτομέρειες για τις ασκήσεις
Από την Pascal στη C
Δομή
Σε αντίθεση με την Pascal η οποία σχεδιάστηκε ως εκπαιδευτική γλώσσα,
η γλώσσα προγραμματισμού C σχεδιάστηκε από την αρχή ως φορέας υλοποίησης
συγκεκριμένων εφαρμογών.
Οι παρακάτω σημειώσεις έχουν ως σκοπό να μεταφέρουν αδρά τις γενικές γνώσεις
της Pascal στη γλώσσα προγραμματισμού C.
Η C είναι μια γλώσσα προγραμματισμού γενικού σκοπού που προσφέρει
οικονομία στην έκφραση,
μοντέρνο έλεγχο της ροής του προγράμματος,
πλήρεις δομές δεδομένων καθώς
και ένα πλούσιο σύνολο τελεστών.
Η απουσία περιορισμών και η γενικότητά
της την κάνουν ιδιαίτερα εύχρηστη και αποτελεσματική για την υλοποίηση
μεγάλου εύρους εφαρμογών.
Τα προγράμματα της C αποτελούνται από ένα σύνολο ορισμών συναρτήσεων
και μεταβλητών.
Η εκτέλεση του προγράμματος αρχίζει πάντα από τη συνάρτηση main
η οποία πρέπει να έχει οποσδήποτε οριστεί.
Το παρακάτω είναι ένα απλό πρόγραμμα σε C:
/* Τύπωσε hello, world */
#include <stdio.h>
int
main()
{
printf("hello, world\n");
return (0);
}
Σε σχέση με την Pascal παρατηρούμε πως:
- απουσιάζει το αρχικό Program Name;,
- το κυρίως πρόγραμμα ορίζεται ως μια συνάρτηση με ειδικό όνομα (main).
- το ; τερματίζει και δε διαχωρίζει τις εντολές μεταξύ
τους,
- τα σχόλια σχηματίζονται με την ακολουθία /* Σχόλιο */,
- υπάρχει διάκριση ανάμεσα στους πεζούς και τους κεφαλαίους χαρακτήρες.
Οι συναρτήσεις ορίζονται με βάση το όνομά τους, τον τύπο του αποτελέσματος
που επιστρέφουν και τα ονόματα και τους τύπους των ορισμάτων τους.
Η τιμή που θα επιστρέψει η συνάρτηση δίδεται ως παράμετρος στην εντολή
return.
Η παρακάτω συνάρτηση επιστρέφει το τετράγωνο ενός ακεραίου:
int
sqr(int n)
{
return (n * n);
}
Η παρακάτω συνάρτηση επιστρέφει το άθροισμα δύο αριθμών:
int
sum2(int a, int b)
{
return (a + b);
}
Ο προεπεξεργαστής
Ένα στοιχείο το οποίο (σωστά μάλλον) απουσιάζει από την Pascal είναι
ο προεπεξεργαστής.
Το πρόγραμμα της C πριν το μεταγλωτιστή περνά από τον προεπεξεργαστή
ο οποίο και εκτελεί ορισμένες απλές λεκτικές αλλαγές.
Συγκεκριμένα επιτρέπει:
- Την παρεμβολή ενός αρχείου του συστήματος με την εντολή #include <file.h>
- Την παρεμβολή ενός αρχείου του χρήστη με την εντολή #include "file.h"
- Τον καθορισμό μιας σταθερής τιμής με την εντολή #define name value
- Την μεταγλώττιση υπό αίρεση με τις εντολές #if #else #elif #endif
- Τον προσδιορισμό του αρχείου, της γραμμής του, της ημερομηνίας και της
ώρας με τις μεταβλητές __FILE__, __LINE__, __DATE__, __TIME__
Βασικοί τύποι
Οι ορισμοί τύπων στη C σε παράθεση με τους αντίστοιχους
της Pascal είναι:
Pascal | C |
i: Integer | int i; |
c: Char | char c; |
r: Real | double r; |
b: Boolean | int b; |
a: array [0..9] of integer | int a[10]; |
k: Packed array [0..49] of char | char k[50]; |
Οι λογικές τιμές αληθές και ψευδές παριστάνονται με ακέραιους διάφορους
του 0 (π.χ. 1) και το 0 αντίστοιχα.
Τελεστές
- Στην C κάθε εντολή είναι μια έκφραση ή μια δομή ελέγχου.
- Η αντιστοιχία τελεστών της Pascal με τη C είναι η παρακάτω:
Pascal | C |
not | ! |
* | * |
/ | / |
div | / |
mod | % |
and | && |
+ | + |
- | - |
or | || |
= | == |
<> | != |
< | < |
<= | <= |
> | > |
>= | >= |
- H C παρέχει ακόμα τους παρακάτω τελεστές:
- ~
- Δυαδική άρνηση
- ++
- Άυξηση της μεταβλητής κατά ένα
- --
- Μείωση της μεταβλητής κατά ένα
- <<
- Μετάθεση των bit προς τα αριστερά
- >>
- Μετάθεση των bit προς τα δεξιά
- &
- Δυαδική σύζευξη
- ^
- Δυαδική αποκλειστική διάζευξη
- |
- Δυαδική διάζευξη
- e1 ? e2 : e3
- e2 ή e3 ανάλογα με τον αν η e1 είναι αληθής ή ψευδής
- =
- Ανάθεση σε μεταβλητή
- +=
- Πρόσθεση σε μεταβλητή
- -=
- Αφαίρεση από μεταβλητή
- *=
- Πολλαπλασιασμός μεταβλητής
- /=
- Διαίρεση μεταβλητής
- %=
- Η μεταβλητή αποκτά την τιμή του υπολοίπου της διαίρεσης
- >>
- Μετάθεση των bit της μεταβλητής προς τα αριστερά
- >>
- Μετάθεση των bit της μεταβλητής προς τα δεξιά
- ,
- Παράθεση εκφράσεων
Δομές ελέγχου
Η C σε αντιστοιχία με την Pascal υποστηρίζει τις παρακάτω δομές ελέγχου:
Pascal | C |
BEGIN | { |
END | } |
IF έκφραση THEN εντολή1 ELSE εντολή2 |
if (έκφραση) εντολή1 else εντολή2 |
WHILE έκφραση DO εντολή |
while (έκφραση) εντολή |
REPEAT εντολή UNTIL έκφραση |
do εντολή while (!έκφραση) |
FOR μεταβλητή := αρχή TO τέλος DO εντολή |
for (μεταβλητή = αρχή; μεταβλητή <= τέλος; μεταβλητή++) εντολή |
CASE έκφραση OF
σταθερά1:
εντολή1;
σταθερά2:
εντολή2
END
|
switch (έκφραση) {
case σταθερά1:
εντολή1;
break;
case σταθερά2:
εντολή2;
break;
}
|
Ακόμα η C υποστηρίζει τις παρακάτω εντολές ελέγχου:
- break;
- Τερματισμός της εκτέλεσης του εσώτερου while, do, ή for.
- continue;
- Επανεκτέλεση του εσώτερου while, do, ή for από την αρχή
του βρόχου.
Σε όλες τις περιπτώσεις μια εντολή μπορεί να αντικατασταθεί από περισσότερες
με την χρήση των { }.
Είσοδος και έξοδος
Η C σε αντιστοιχία με την Pascal υποστηρίζει τις παρακάτω εντολές εισόδου
εξόδου:
Pascal | C |
WRITE(IntValue) | printf("%d", IntValue); |
WRITELN(IntValue) | printf("%d\n", IntValue); |
WRITELN(RealValue) | printf("%g\n", RealValue); |
WRITELN(StringValue) | printf("%s\n", StringValue); |
WRITELN(Int1, Int2) | printf("%d %d\n", Int1, Int2); |
READ(IntValue) | scanf("%d ", &IntValue); |
Γενικά ο τρόπος χρήσης των εντολών είναι printf και scanf είναι ο εξής:
- Το πρώτο όρισμα ορίζει του τύπους και τον τρόπο εκτύπωσης των αποτελεσμάτων:
%d | int |
%g | double |
\n | Νέα γραμμή |
- Τα επόμενα ορίσματα περιέχουν τις τιμές που ορίστηκε να τυπωθούν από
το πρώτο.
- Στην εντολή scanf οι μεταβλητές πρέπει να έχουν μπροστά τους το
σύμβολο &
Άσκηση
- Γράψτε ένα πρόγραμμα σε C που να τυπώνει τις τιμές του παραγοντικού
των αριθμών από το 1 μέχρι το 10.
Το παραγοντικό να οριστεί ως ξεχωριστή συνάρτηση.
Βιβλιογραφία
- Samuel P. Harbison
and Guy L. Steele Jr.
C: A Reference Manual.
Prentice-Hall, third edition, 1991.
- Brian W. Kernighan and
Dennis M. Ritchie.
The C Programming Language.
Prentice-Hall, second edition, 1988.
- Andrew Koenig.
C Traps and Pitfalls.
Addison-Wesley, 1988.
- Don Libes.
Obfuscated C and Other Mysteries.
John Wiley and Sons, 1993.
- William H. Press, Brian P.
Flannery, Saul A. Teukolsky, and William T. Vetterling.
Numerical Recipes in C.
Cambridge University Press, 1988.
- Robert Sedgewick.
Algorithms in C.
Addison-Wesley, 1990.
- The Accredited
Standard Committee X3, Information Processing Systems, Technical Committee
for Programming Language C (X3J11).
Rationale for the ANSI C Programming Language.
Silicon Press, 25 Beverly Road, Summit, NJ 07901, USA, 1990.
Θέματα ύφους
Εισαγωγή
Η συγγραφή ενός προγράμματος ξεκινά από το σχεδιασμό και καταλήγει
στην υλοποίηση, την αποσφαλμάτωση και τη συντήρησή του.
Ο κύκλος αυτός απαιτεί το πρόγραμμα να είναι στιβαρό, χωρίς λάθη,
ευκολονόητο τόσο σε κοντινό όσο και σε γενικό επίπεδο και να
διευκολύνει τον έλεγχο και τη συντήρηση.
Ένα καλά γραμμένο πρόγραμμα μπορεί να έχει ποιότητα παρόμοια με αυτή
ενός έργου τέχνης.
Οι επόμενες ενότητες περιέχουν απλές συμβουλές για τον προγραμματισμό
στα τμήματα, τον προγραμματισμό στο σύνολο, και τον έλεγχο και την
αποσφαλμάτωση ενός προγράμματος.
Προγραμματισμός στα τμήματα
Προγραμματισμός στο σύνολο
- Χρησιμοποιείτε για κάθε εργασία το κατάλληλο εργαλείο ή την κατάλληλη γλώσσα
- Χρησιμοποιείτε έτοιμες διαδικασίες, βιβλιοθήκες και αλγορίθμους
- Μη σκέφτεστε την ταχύτητα εκτέλεσης του προγράμματος.
- Μετατρέψτε επαναλαμβανόμενες αριθμητικές ή λογικές εκφράσεις σε συνάρτηση
- Αναλύστε πρώτα το πρόγραμμα σε επίπεδο ψευδοκώδικα και στη συνέχεια
υλοποιείστε το στη γλώσσα προγραμματισμού
- Χωρίστε το πρόγραμμά σας σε ενότητες και ορίστε μια διαδικασία για κάθε ενότητα
- Τα σοβαρά λανθασμένα προγράμματα πρέπει να ξαναγράφονται και όχι να μπαλώνονται
Έλεγχος και αποσφαλμάτωση
- Ελέγχετε τα προγράμματά σας λίγο-λίγο, αρχίζοντας από τις διαδικασίες και τις συναρτήσεις
- Όπου κατά τον έλεγχο σας λείπει μια συνάρτηση αντικαταστήστε την με μια κενή.
- Προσθέστε σε καίρια σημεία του κώδικά σας ελέγχους της κατάστασης των
μεταβλητών (προϋποθέσεις και μετασυνθήκες). Σε περίπτωση που ένας έλεγχος
αποτύχει το πρόγραμμα θα πρέπει να σας ειδοποιεί με μήνυμα.
- Ελέγχετε τα στοιχεία που διαβάζετε για το αν είναι λογικά και δεν ξεπερνούν τα όρια του προγράμματος
- Αν τα στοιχεία εισόδου περιέχουν λάθη πρέπει να τα επισημάνετε στο χρήστη και αν είναι δυνατό να τα διορθώσετε
- Αν βρείτε ένα λάθος συνεχίσετε να ψάχνετε και για άλλα
- Χρησιμοποιείτε περιβάλλον ανάπτυξης που να περιλαμβάνει συμβολικό αποσφαλματωτή
Βιβλιογραφία
- Brian W. Kernighan and P. J. Plauger.
The Elements of Programming Style.
McGraw-Hill, second edition, 1978.
- Jon Louis Bentley.
Writing Efficient Programs.
Prentice-Hall, 1982.
- Jon Louis Bentley.
Programming Pearls.
Addison-Wesley, 1986.
- Jon Louis Bentley.
More Programming Pearls: Confessions of a Coder.
Addison-Wesley, 1988.
- Doug Cooper and Michael
Clancy.
Oh! Pascal, pages 315-330.
W. W. Norton & Company, second edition, 1985.
Εξερεύνηση δυναμικών συστημάτων (1997)
Ορισμοί
Επαναληπτικές συναρτήσεις
Η σύνθεση μιγαδικών συναρτήσεων της μορφής f(z) = z * z δημιουργεί
δυναμικά συστήματα.
Για παράδειγμα:
- η f(f(z)) "μεταφέρει" το i στο 1 σε δύο βήματα.
- η f(f(z)) "μεταφέρει" το i + 1 στο -4 σε δύο βήματα.
- η f(f(f(z))) "μεταφέρει" το 1 + i στο 16 σε τρία βήματα.
Η συμπεριφορά της συνάρτησης σε επαναλαμβανόμενες συνθέσεις της εκφράζει
τη δυναμική της.
Τα σύνολα Mandelbrot και Julia μας δίδουν πληροφορίες για τη δυναμική
συμπεριφορά συναρτήσεων της μορφής f(z) = z*z
Τροχιές
- Κατά την επανάληψη της f(z) κάθε σημείο ακολουθεί μια τροχιά.
- Διακρίνουμε τρεις περιπτώσεις:
- Τα σημεία μέσα στον κύκλο με ακτίνα 1 τείνουν στο 0.
- Τα σημεία έξω από τον κύκλο με ακτίνα 1 τείνουν στο άπειρο.
- Τέλος, τα σημεία πάνω στον κύκλο με ακτίνα 1 μπορεί να:
- Τερματίζουν στο 1.
- Ακολουθουν μια περιοδική τροχιά.
- Ακολουθουν μια μη περιοδική, μη τερματιζόμενη τροχιά.
Το σύνολο Julia
- Ορίζουμε ως σύνολο Julia μιας συνάρτησης f το σύνολο των τιμών οι οποίες
για την επαναλαμβανόμενη σύνθεση της f δεν αποτελούν σταθερά ελκτικά
σημεία ή σημεία περιοδικής τροχιάς.
- Για τη συνάρτηση f(z) = z * z το σύνολο αυτό βρίσκεται στον
κύκλο με ακτίνα 1.
Το σύνολο Mandelbrot
Τέλος, ορίζουμε ως σύνολο Mandelbrot το σύνολο των
σημείων c για τα οποία το σύνολο Julia της συνάρτησης f(z) = z * z + c είναι "συνδεδεμένο".
Παράσταση του συνόλου Mandelbrot
- Το σύνολο Mandelbrot μπορεί εύκολα να βρεθεί εξετάζοντας για κάθε c την
τροχιά του σημείου z = 0:
- Αν αυτή βγει έξω από κύκλο με κέντρο το 0 και ακτίνα 2 τότε θα
τείνει στο άπειρο, το αντίστοιχο σύνολο Julia δε θα είναι συνδεδεμένο
και άρα το σημείο δεν ανήκει στο σύνολο.
- Ο αριθμός των επαναλήψεων της f μέχρι η τιμή της να βγει έξω από την
ακτίνα 2 ορίζει μια περιοχή προσέγγισης στο σύνολο Mandelbrot και
μπορεί να παρασταθεί στην οθόνη του υπολογιστή με αντίστοιχο χρώμα.
Βιβλιογραφία
- H.-O. Peitgen and P. H. Richter
The beauty of fractals: images of complex dynamical systems
Springer-Verlag publ., 1986
Ασκήσεις
Pascal 07
- Να γραφεί πρόγραμμα σε Pascal σύμφωνα με τις παρακάτω
προδιαγραφές:
- Το πρόγραμμα σχεδιάζει το σύνολο Mandelbrot και τις περιοχές
προσέγγισης για κάποια καθορισμένη περιοχή του επιπέδου των μιγαδικών
και μέγιστο αριθμό επαναλήψεων.
- Αν το μέτρο της f(z) για το σημείο c αποκτήσει τιμή μεγαλύτερη του 2
μετά από ορισμένες επαναλήψεις
τότε το σημείο ζωγραφίζεται με χρώμα ανάλογο του αριθμού των επαναλήψεων.
- Αρχικές συνταταγμένες δοκιμής είναι -2 + -2i μέχρι 2 + 2i για 50
επαναλήψεις.
- Σχεδιάστε το σύνολο με κέντρο το 0.4445568792550437+0.4099331083009843i, ακτίνα 0.1
για 240 επαναλήψεις (προαιρετικά).
- Σχεδιάστε το σύνολο με κέντρο το -0.6356170288412094+0.4919204152038624i, ακτίνα 0.075
για 240 επαναλήψεις (προαιρετικά).
- Σχεδιάστε το σύνολο με κέντρο το -1.2963551381730362+0.4418516057351966i, ακτίνα 0.175
για 240 επαναλήψεις (προαιρετικά).
- Σχεδιάστε το σύνολο με κέντρο το -1.25+0i, ακτίνα 0.153 για 1920
επαναλήψεις (προαιρετικά).
- Σχεδιάστε το σύνολο με κέντρο το 1.309375+0i, ακτίνα 0.094 για 2480
επαναλήψεις (προαιρετικά).
- Εξερευνήστε το σύνολο σε άλλες περιοχές (προαιρετικά).
Σημείωση: Όπου ο αριθμός των επαναλήψεων είναι μεγαλύτερος από τον αριθμό
των χρωμάτων (GetMaxColor) ο αριθμός αυτός πρέπει να προσαρμόζεται
κατάλληλα για να είναι νόμιμο χρώμα με τη χρήση των τελεστών mod ή div.
Περισσότερες λεπτομέρειες για τις ασκήσεις
Θέματα εξετάσεων
Εργαστήριο αυτοαξιολόγησης 1997
ΠΑΝΕΠΙΣΤΗΜΙΟ
ΑΙΓΑΙΟΥ
Τμήμα
Μαθηματικών
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΣΕ PASCAL
(Εργαστήριο
αυτοαξιολόγησης)
Διδάσκων: Διομήδης Σπινέλλης
| 15 Απριλίου 1997
|
Θέμα
1ο:
Να γραφεί
πρόγραμμα
σε Pascal το οποίο
να ορίζει:
- τη μάζα,
τη δύναμη
και την επιτά÷υνση
ως νέους τύπους,
- συνάρτηση
που να δέ÷εται
ως όρισμα
τη μάζα ενός
σώματος και
τη δύναμη
που εξασκείται
επάνω του και
να επιστρέφει
την επιτά÷υνσή
του,
- συνάρτηση
που να δέ÷εται
ως όρισμα
έναν ÷αρακτήρα
και να επιστρέφει
αληθές αν
ο ÷αρακτήρας
αυτός είναι
μικρό η κεφαλαίο
γράμμα.
Θέμα
2ο:
Τι θα
τυπώσει το
παρακάτω πρόγραμμα;
program test;
var x : integer;
procedure a(var y : integer);
begin
y := y + 4;
x := x + 12
end;
function b(x : integer) : integer;
begin
b := x * 2;
x := x div 2
end;
procedure c;
begin
x := 8
end;
begin
c; writeln(x);
x := b(x); writeln(x);
a(x); writeln(x)
end.
Θέμα
3ο:
Να γραφεί
πρόγραμμα
το οποίο με
τη ÷ρήση των
δομών CASE, FOR και
REPEAT θα διαβάζει
÷αρακτήρες
από το ÷ρήστη
και θα τυπώνει
10 φορές στην
οθόνη την παράστασή
τους σύμφωνα
με τον κώδικα
Morse (Α: .- Β: -... Γ: --. Δ: -.. Ε:
.) μέ÷ρι ο ÷ρήστης
να δώσει ως
είσοδο το ÷αρακτήρα
×. (Το πρόγραμμα
να υλοποιηθεί
μόνο για τους
παραπάνω ÷αρακτήρες).
Θέμα
4ο:
Να γραφεί
πρόγραμμα
το οποίο με τη
÷ρήση της
διαδικασίας
setpixel(x, y) να σ÷εδιάζει
σε οθόνη με
διαστάσεις
100*100 εικονοστοι÷εία
μια περίοδο
της συνάρτησης:
f(x) = ημ x
Διάρκεια εξέτασης 1.5 ώρα.
| Καλή επιτυ÷ία!
|
Εξεταστική περιόδος Ιουνίου 1997
ΠΑΝΕΠΙΣΤΗΜΙΟ
ΑΙΓΑΙΟΥ
Τμήμα
Μαθηματικών
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ
Διδάσκων: Διομήδης Σπινέλλης
| Εξεταστική περίοδος
Ιουνίου 1997
|
Θέμα
1ο:
Να γραφεί
πρόγραμμα
σε Pascal το οποίο
να ορίζει:
- το μήκος
και τον όγκο
ως νέους τύπους,
- συνάρτηση
που να δέχεται
ως όρισμα
τα τρία μήκη
των ακμών
ενός ορθογωνίου
παραλληλεπιπέδου
και να επιστρέφει
τον όγκο του.
Θέμα
2ο:
Τι θα
τυπώσει το
παρακάτω πρόγραμμα
αν στη γραμμή
σημειωμένη
με **** αντικαταστήσετε
τις τιμές
των χαρακτήρων
που τίθενται
στις μεταβλητές
με τους τέσσερις
πρώτους χαρακτήρες
του επωνύμου
σας; Για παράδειγμα
αν σας λένε
"Μαρία Αστέρη"
οι γραμμή
θα είναι:
a := 'A'; b := 'S'; c := 'T'; d:= 'E';
program test;
var a, b, c, d : char;
procedure p(var x : char; y : char);
var c : char;
begin
x := '2';
y := '3';
c := '4';
d := '5';
end;
begin
a := 'S'; b := 'P'; c := 'I'; d:= 'N'; { **** }
p(a, b);
writeln(a, b, c, d)
end.
Θέμα
3ο:
Να γραφεί
πρόγραμμα
σε Pascal το οποίο
θα διαβάζει
βαθμούς γραπτών
από το χρήστη
μέχρι αυτός
να δώσει ως
είσοδο τον
αριθμό -1. Στη
συνέχεια
το πρόγραμμα
θα τυπώνει
στην οθόνη
και θα γράφει
και σε αρχείο
κειμένου (TEXT)
τον αριθμό
των γραπτών
που συγκέντρωσαν
κάθε βαθμό
(0-10), τον αντίστοιχο
βαθμό, καθώς
και το μέσο
όρο όλων των
βαθμών.
Θέμα
4ο:
Να γραφεί
πρόγραμμα
σε Pascal το οποίο
με τη χρήση
της διαδικασίας
setpixel(x, y) να σχεδιάζει
σε οθόνη με
διαστάσεις
1000*1000 εικονοστοιχεία
τις τιμές
της συνάρτησης:
f(x) = x2 + 5
για το
x να παίρνει
τιμές από το
-2 έως το 2. Η συνάρτηση
f καθώς και
οι συναρτήσεις
μετασχηματισμού
από συντεταγμένες
κόσμου σε συντεταγμένες
οθόνης ή/και
αντίστροφα
να οριστούν
ως συναρτήσεις
της Pascal. Θεωρήστε
ότι το σύστημά
σας δουλεύει
μόνιμα σε
ρυθμό γραφικών
(δε χρειάζετε
να καλέσετε
άλλες διαδικασίες).
Διάρκεια εξέτασης 2 ώρες
| Καλή επιτυχία!
|
Εξεταστική περιόδος Σεπτεμβρίου 1997
ΠΑΝΕΠΙΣΤΗΜΙΟ
ΑΙΓΑΙΟΥ
Τμήμα
Μαθηματικών
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ
Διδάσκων: Διομήδης Σπινέλλης
| Εξεταστική περίοδος
Σεπτεμβρίου 1997
|
Θέμα
1ο:
Να γραφεί
πρόγραμμα
σε Pascal το οποίο
να ορίζει (με
τη χρήση εγγραφών):
- τα σημεία
του επιπέδου
ως νέο τύπο,
- συνάρτηση
που να δέχεται
ως όρισμα
δύο σημεία
(A, B) και
να επιστρέφει
το μήκος του
διανύσματος
που ορίζεται
από αυτά.
Θέμα
2ο:
Τι θα
τυπώσει το
παρακάτω πρόγραμμα
αν στη γραμμή
σημειωμένη
με **** αντικαταστήσετε
τις τιμές
των χαρακτήρων
που τίθενται
στις μεταβλητές
με τους τέσσερις
πρώτους χαρακτήρες
του επωνύμου
σας; Για παράδειγμα
αν σας λένε
"Γιώργο Ατσίδα"
οι γραμμή
θα είναι:
a := 'A'; b := 'T'; c := 'S'; d:= 'I';
program test;
var a, b, c, d : char;
procedure p(x : char;var y : char);
var a, d : char;
begin
x := '2';
y := '3';
c := '4';
d := '5';
end;
begin
a := 'S'; b := 'P'; c := 'I'; d:= 'N'; { **** }
p(a, b);
writeln(a, b, c, d)
end.
Θέμα
3ο:
Να γραφεί
πρόγραμμα
σε Pascal το οποίο
θα διαβάζει
ένα αρχείο
χαρακτήρων
((FILE OF CHAR) και
στη συνέχεια
θα τυπώνει
τον αριθμό
των χαρακτήρων
που διάβασε
καθώς και
τη συχνότητα
εμφάνισης
για κάθε έναν
από τους χαρακτήρες.
Θέμα
4ο:
Να γραφεί
πρόγραμμα
σε Pascal το οποίο
με τη χρήση
της διαδικασίας
setpixel(x, y) να σχεδιάζει
σε οθόνη με
διαστάσεις
200*100 εικονοστοιχεία
τις τιμές
της συνάρτησης:
f(x) = x3
+ x
για το
x να παίρνει
τιμές από το
0 έως
το 10. Η
συνάρτηση
f καθώς και
οι συναρτήσεις
μετασχηματισμού
από συντεταγμένες
κόσμου σε συντεταγμένες
οθόνης ή/και
αντίστροφα
να οριστούν
ως συναρτήσεις
της Pascal. Θεωρήστε
ότι το σύστημά
σας δουλεύει
μόνιμα σε
ρυθμό γραφικών
(δε χρειάζεται
να καλέσετε
άλλες διαδικασίες).
Διάρκεια εξέτασης 2 ώρες
| Καλή επιτυχία!
|
Εργαστήριο αυτοαξιολόγησης 1998
ΠΑΝΕΠΙΣΤΗΜΙΟ
ΑΙΓΑΙΟΥ
Τμήμα
Μαθηματικών
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΣΕ PASCAL
(Εργαστήριο
αυτοαξιολόγησης)
Διδάσκων: Διομήδης Σπινέλλης
| 24 Μαρτίου 1998
|
Θέμα
1ο:
Να γραφεί πρόγραμμα σε Pascal το οποίο να διαβάζει από το χρήστη δύο ημερομηνίες (μέρα μήνα, μήνα, έτος) Η1, Η2 (Η1 < Η2, έτος > 1900) και να τυπώνει τον αριθμό ημερών ανάμεσα στις Η1 και Η2.
Παρατηρήσεις:
- ο υπολογισμός των ημερών ανά μήνα να γίνει σε ξεχωριστή συνάρτηση με τη χρήση της δομής CASE,
- να μη λαμβάνονται υπόψη τα δίσεκτα έτη,
- να οριστούν τύποι υποπεριοχής για τη μέρα μήνα, το μήνα, και το έτος,
- μπορεί να σας βοηθήσει ο ορισμός συνάρτησης που για μια ημερομηνία να επιστρέφει αριθμό ημερών που έχουν περάσει από την 1-1-1900.
Θέμα
2ο:
Τι θα
τυπώσει το
παρακάτω πρόγραμμα;
program test;
var x : integer;
procedure a(var y : integer);
begin
y := y + 4;
x := x + 12
end;
function b(x : integer) : integer;
begin
b := x * 2;
x := x div 2
end;
procedure c;
begin
x := 8
end;
begin
c; writeln(x);
x := b(x); writeln(x);
a(x); writeln(x)
end.
Διάρκεια εξέτασης 1.5 ώρα.
| Καλή επιτυ÷ία!
|
Εξεταστική περιόδος Ιουνίου 1998
ΠΑΝΕΠΙΣΤΗΜΙΟ
ΑΙΓΑΙΟΥ
Τμήμα
Μαθηματικών
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ
Διδάσκων: Διομήδης Σπινέλλης
| Εξεταστική περίοδος
Ιουνίου 1998
|
Θέμα
1ο: (2.5 βαθμοί)
Ένα πρόγραμμα
Pascal περιέχει
τους ορισμούς
και τις δηλώσεις
που ακολουθούν:
const
pi = 3.1415;
var
i, j : integer;
a, b : real;
p, q : boolean;
c, d : char;
Για όσες
από τις παρακάτω
εντολές θεωρείτε
εσφαλμένες
τεκμηριώστε
με μια φράση
την άποψή σας:
- c := succ(d)
- d := d + 1
- i := ord(c) + ord(d)
- a := b / pi
- i := j / 2
|
- p := i = j
- q := q and (ord(c) = 'w')
- 'c' := d
- if q then writeln(a,b)
- while i + 1 do writeln(i)
|
Θέμα
2ο: (2.5 βαθμοί)
Tι θα
τυπώσει το
παρακάτω πρόγραμμα
αν στη γραμμή
σημειωμένη
με **** αντικαταστήσετε
τις τιμές
των χαρακτήρων
που τίθενται
στις μεταβλητές
με τους πέντε
πρώτους χαρακτήρες
του επωνύμου
σας; Για παράδειγμα
αν σας λένε
"Μαρία Ατσίδα"
οι γραμμή
θα είναι:
a := 'A'; b := 'T'; c := 'S'; d:= 'I'; e:= 'D';
Τεκμηριώστε
περιληπτικά
την απάντησή
σας.
program test;
var a, b, c, d, e, f : char;
function p(d : char; var y : char): char;
var b : char;
begin
c := '2'; b := '3';
d := '4'; y := '5';
p := d;
end;
begin
a:='S'; b:='P'; c:='I'; d:='N'; e:='E'; {****}
writeln(a, b, c, d, e);
f := p(a, e);
writeln(a, b, c, d, e, f)
end.
Θέμα
3ο: (5 βαθμοί)
Τα στοιχεία
των ποδοσφαιριστών
μιας ομάδας
του MUNDIAL 98 φυλάσσονται
σε αρχείο χαρακτήρων
(FILE OF CHAR) με
την παρακάτω
γραμμογράφηση:
όνομα,
ύψος, ηλικία,
επιτυχημένα
τέρματα.
Παράδειγμα:
Ronaldo 1.82 21 77
Να γραφεί
πρόγραμμα
σε Pascal το οποίο
διαβάζει από
το αρχείο τα
στοιχεία 22 ποδοσφαιριστών
και θα τα φυλάει
σε πίνακα εγγραφών.
Στη συνέχεια
τυπώνει: α)
για κάθε ποδοσφαιριστή
τα πλήρη στοιχεία
του καθώς και
τόσα θαυμαστικά
(!) όσα και τα
επιτυχημένα
του τέρματα,
β) τα ονόματα
και την ηλικία
των ποδοσφαιριστών
με ηλικία μεγαλύτερη
των 30 ετών και
γ) το συνολικό
αριθμό και
το μέσο όρο
των επιτυχημένων
τερμάτων της
ομάδας. Τα θαυμαστικά
που αντιστοιχούν
στα τέρματα
να τυπώνονται
από ξεχωριστή
διαδικασία.
Διάρκεια εξέτασης 2 ώρες
| Καλή επιτυχία!
|
Εξεταστική περιόδος Σεπτεμβρίου 1998
ΠΑΝΕΠΙΣΤΗΜΙΟ
ΑΙΓΑΙΟΥ
Τμήμα
Μαθηματικών
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ
Διδάσκων: Διομήδης Σπινέλλης |
Εξεταστική περίοδος
Σεπτεμβρίου 1998 |
Θέμα 1ο: (4 βαθμοί)
Γράψτε ένα πρόγραμμα σε Pascal το οποίο να ζωγραφίζει σε οθόνη με διαστάσεις 100 * 100 εικονοστοιχεία έναν κύκλο. Για την εμφάνιση ενός εικονοστοιχείου αρκεί η κλήση της συνάρτησης setpixel(x, y).
Θέμα 2ο: (4 βαθμοί)
Γράψτε ένα πρόγραμμα σε Pascal το οποίο διαβάζει από το χρήστη 100 ονόματα και αντίστοιχους βαθμούς (0-10) και στη συνέχεια τυπώνει τα ονόματα με τους βαθμούς αυξημένους ή μειωμένους κατά 1 ανάλογα με το αν ο μέσος όρος των αρχικών βαθμών ήταν αντίστοιχα μικρότερος ή μεγαλύτερος του 5. Οι βαθμοί 0 και 10 να παραμένουν ίδιοι μετά από αντίστοιχη μείωση ή αύξηση (δηλαδή σε καμία περίπτωση να μην τυπώνεται -1 ή 11).
Θέμα 3ο: (2 βαθμοί)
Tι θα τυπώσει το παρακάτω πρόγραμμα αν του δοθούν ως είσοδος οι αριθμοί από το 1Ψ5; Εξηγήστε.
program TestFold;
const
maxindex = 5;
type
realmap = function(x : real; y : real) : real;
mylist = array [1..maxindex] of real;
var
i : integer;
l : mylist;
function fold(f : realmap; a : real; v : mylist) : real;
var
i : integer;
result : real;
begin
result := a;
for i := 1 to maxindex do
result := f(v[i], result);
fold := result;
end;
function prod(x : real; y : real) : real;
begin
prod := x * y
end;
begin
for i := 1 to maxindex do
readln(l[i]);
writeln(fold(prod, 1, l))
end.
Διάρκεια εξέτασης 2 ώρες |
Καλή επιτυχία! |