- Κύριο πρόγραμμα και συναρτήσεις
- Μέθοδοι ανάγνωσης/εκτύπωσης
- Μέθοδοι ανάγνωσης/εκτύπωσης αρχείων
- Επανάληψη FOR
- Τελεστές και μαθηματικές συναρτήσεις
- Δυναμική διαχείριση μνήμης
- Πραγματικοί αριθμοί και σταθερές
Αυτή η εντολή ορίζει το σημείο εκκίνησης του προγράμματος. Επομένως, ο κύριος κώδικάς σου θα πρέπει να περικλείεται από ένα μπλοκ PROGRAM {}
.
#include "pzhelp"
PROGRAM {
WRITELN("Hello world!");
}
Δηλώνει μία διαδικασία, δηλαδή μία συνάρτηση που δεν επιστρέφει τιμή.
PROC hello_world() {
WRITELN("Hello world!");
// δεν επιστρέφει τιμή
}
Δηλώνει μία συνάρτηση.
FUNC int square(int x) {
return x * x;
}
Διαβάζει έναν ακέραιο αριθμό από τον χρήστη και επιστρέφει την τιμή του.
int age = READ_INT();
Διαβάζει έναν πραγματικό αριθμό από τον χρήστη και επιστρέφει την τιμή του.
REAL height = READ_REAL();
Διαβάζει ένα string, δηλαδή μία ακολουθία χαρακτήρων, από τον χρήστη και επιστρέφει την τιμή του. Παίρνει δύο παραμέτρους, την πρώτη που είναι το μέγεθος του string που θα διαβαστεί και τη δεύτερη που είναι η string μεταβλητή στην οποία θα αποθηκευτεί η είσοδος.
char * name;
READ_STRING(20, name);
ή συντομότερα,
char * name = READ_STRING(20, name);
Παραλείπει μία γραμμή από την είσοδο του χρήστη, διαβάζοντας και αγνοώντας χαρακτήρες μέχρι να διαβάσει new line ή να φτάσει στο τέλος του αρχείου (EOF).
SKIP_LINE();
Δέχεται μία λίστα παραμέτρων, οι οποίες μπορούν να είναι μεταβλητές οποιουδήποτε τύπου, και τις τυπώνει στον χρήστη διαχωρισμένες με κενά. Οι τύποι μεταβλητών που υποστηρίζονται είναι τα int (περιλαμβάνονται και τα unsigned, long ή long long), τα REAL, τα float, τα double, τα character, τα string και τα boolean.
Τα REAL, τα float και τα double τυπώνονται πάντοτε με ακρίβεια έξι δεκαδικών ψηφίων.
WRITE(42, 3.14, ',', "no man is an island");
Επιτελεί την ίδια λειτουργία με την WRITE, μόνο που μετά το τέλος της εξόδου τυπώνει και μία νέα γραμμή.
WRITELN("This string will be printed on its own line");
Ανοίγει το αρχείο που αντιστοιχεί στο path που δίνεται ως παράμετρος, και ανακατευθύνει το stdin
σε αυτό το αρχείο. Αυτό σημαίνει ότι κάθε μέθοδος εισόδου, όπως είναι η READ_INT
, η READ_STRING
κλπ. στο εξής θα διαβάζει από το αρχείο αντί να διαβάζει από το standard input.
INPUT("grades.csv");
char * first_entry = READ_STRING(100, first_entry);
Ανοίγει το αρχείο που αντιστοιχεί στο path που δίνεται ως παράμετρος, και ανακατευθύνει το stdout
σε αυτό το αρχείο. Αυτό σημαίνει ότι κάθε μέθοδος εξόδου, όπως είναι η WRITE
, η WRITELN
κλπ. στο εξής θα τυπώνει σε αυτό το αρχείο αντί να τυπώνει στο standard output.
OUTPUT("results.txt");
WRITELN("This will be stored in the results.txt file");
Εκτελεί ένα μπλοκ κώδικα για έναν δεδομένο αριθμό επαναλήψεων. Ελέγχει επίσης αν η μεταβλητή ελέγχου ή το όριο του loop μεταβάλλονται μέσα στο μπλοκ, οπότε και εμφανίζει κατάλληλο σφάλμα.
Χρειάζεται να ορίσεις τις εξής παραμέτρους:
- Μεταβλητή ελέγχου: Η μεταβλητή που χρησιμοποιείται για να ελέγχονται τα όρια του loop, και η οποία θα αλλάζει σε κάθε επανάληψη. Πρέπει να έχει δηλωθεί πριν από το μπλοκ επανάληψης.
- Τιμή έναρξης: Αυτή θα είναι η αρχική τιμή της μεταβλητής ελέγχου, δηλαδή η τιμή που θα πάρει στην πρώτη επανάληψη.
- Τιμή λήξης: Αυτή θα είναι η τελική τιμή της μεταβλητής ελέγχου, δηλαδή η τιμή που θα πάρει στην τελευταία επανάληψη. Προσέξτε ότι το loop δεν τερματίζεται μόλις η μεταβλητή ελέγχου πάρει αυτήν την τιμή, αλλά μόλις τελειώσει η σχετική επανάληψη.
- Τιμή βήματος: Αυτό θα είναι το βήμα κατά το οποίο η μεταβλητή ελέγχου θα αυξάνεται ή θα μειώνεται. Αν το βήμα είναι τέτοιο ώστε η μεταβλητή ελέγχου να μην μπορεί να πάρει ακριβώς την τελική τιμή, το loop θα τερματιστεί μόλις ξεπεραστεί η τελική τιμή.
Η σύνταξη της επανάληψης FOR είναι αρκετά απλή. Ακολουθούν παραδείγματα:
int i;
// Χρησιμοποίησε "TO" μεταξύ της αρχικής και της τελικής τιμής όταν η μεταβλητή ελέγχου αυξάνεται
FOR(i, 1 TO 10) {
WRITE(i, ' '); // αποτέλεσμα: 1 2 3 4 5 6 7 8 9 10
}
int i;
// Χρησιμοποίησε "DOWNTO" όταν η μεταβλητή ελέγχου μειώνεται
FOR(i, 10 DOWNTO 1) {
WRITE(i, ' '); // αποτέλεσμα: 10 9 8 7 6 5 4 3 2 1
}
int i;
// αυτό θα τυπώσει όλους τους ζυγούς αριθμούς από το 2 μέχρι το 20
FOR(i, 2 TO 20 STEP 2) {
WRITE(i, ' '); // αποτέλεσμα: 2 4 6 8 10 12 14 16 18 20
}
int i;
// συνδυασμός των παραπάνω
FOR(i, 17 DOWNTO -5 STEP 4) {
WRITE(i, ' '); // αποτέλεσμα: 17 13 9 5 1 -3
}
Επιστρέφει το υπόλοιπο της Ευκλείδιας διαίρεσης μεταξύ δύο τελεστέων. Αν χρησιμοποιηθούν αρνητικοί αριθμοί, τότε το πρόσημο του υπολοίπου θα είναι το ίδιο με αυτό του διαιρετέου.
int r = 42 MOD 17;
Επιστρέφει το αποτέλεσμα της πράξης AND μεταξύ δύο boolean τελεστέων. Επομένως, επιστρέφει true
αν και μόνο αν και οι δύο τελεστέοι έχουν boolean τιμή ίση με true
.
if(hour >= 5 AND hour < 12) {
WRITELN("Good morning!");
}
Επιστρέφει το αποτέλεσμα της πράξης OR μεταξύ δύο boolean τελεστέων. Επομένως, επιστρέφει true
αν και μόνο αν τουλάχιστον ένας από τους δύο τελεστέους έχει boolean τιμή ίση με true
.
if(day == 6 OR day == 7) {
WRITELN("It's weekend, let's PaRtY!");
}
Επιστρέφει το αρνητικό της boolean τιμής μιας έκφρασης.
if(NOT(month == 12 AND day == 7)) {
WRITELN("It's not Noam Chomsky's birthday yet");
}
Επιστρέφει το ελάχιστο δύο αριθμών που δίνονται ως παράμετροι.
int answer = min(17, 42);
Επιστρέφει το μέγιστο δύο αριθμών που δίνονται ως παράμετροι.
int true_answer = max(17, 42);
Δεσμεύει δυναμικά μνήμη. Χρειάζεται να περάσεις ως πρώτη παράμετρο τον τύπο μεταβλητής που θα αποθηκευτεί, ώστε να δεσμευτεί ο σωστός αριθμός bytes.
Μπορείς επίσης να δεσμεύσεις έναν πίνακα από μεταβλητές τέτοιου τύπου αντί για μόνο μία, περνώντας ως δεύτερη παράμετρο το μέγεθος του πίνακα.
Επιστρέφει τη διεύθυνση της νέας μεταβλητής ή τη διεύθυνση του πρώτου στοιχείου του νέου πίνακα. Γι' αυτόν τον λόγο χρειάζεται να αποθηκεύουμε την τιμή που επιστρέφεται, σε έναν pointer (θυμήσου, ένας pointer είναι απλά μία μεταβλητή που περιέχει τη διεύθυνση μιας άλλης μεταβλητής).
int * shoe_size = NEW(int);
*shoe_size = 42;
// αυτό σου επιτρέπει να δηλώσεις έναν πίνακα του οποίου το μέγεθος ίσως να μην είναι γνωστό κατά τη μεταγλώττιση
int len = READ_INT();
int * shoe_sizes = NEW(int, len);
int i;
FOR(i, 0 TO len - 1) {
shoe_sizes[i] = 42;
}
Απελευθερώνει μνήμη που είχε δεσμευτεί προηγουμένως. Δέχεται ως παράμετρο έναν pointer προς αυτήν τη μνήμη. Αν η μνήμη που είχε δεσμευτεί ήταν για έναν δυναμικό πίνακα, τότε το DELETE θα απελευθερώσει όλα τα κελιά μνήμης που κατείχε αυτός ο πίνακας.
DELETE(arr);
Το PZHelp ορίζει τον τύπο μεταβλητής REAL
, ο οποίος χρησιμοποιείται για την αποθήκευση πραγματικών αριθμών. Οι μεταβλητές REAL
μπορούν να κρατήσουν μέχρι 15 ή 16 ψηφία, συμπεριλαμβανομένων αυτών που βρίσκονται πριν την υποδιαστολή αλλά και μετά από αυτήν.
REAL pi = 3.14159265358979;
Το πλήθος των ψηφίων ακρίβειας στο δεκαδικό σύστημα για τον τύπο μεταβλητής REAL
.
Ο ελάχιστος θετικός πραγματικός αριθμός που μπορεί να αναπαρασταθεί στον τύπο μεταβλητής REAL
.
Ο μέγιστος αριθμός που μπορεί να αναπαρασταθεί στον τύπο μεταβλητής REAL
.
Η διαφορά μεταξύ του αριθμού 1 και του ελάχιστου αριθμού που μπορεί να αναπαρασταθεί στον τύπο μεταβλητής REAL
, ο οποίος είναι μεγαλύτερος του 1.