Από την Pascal στη C

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Δομή

Σε αντίθεση με την Pascal η οποία σχεδιάστηκε ως εκπαιδευτική γλώσσα, η γλώσσα προγραμματισμού C σχεδιάστηκε από την αρχή ως φορέας υλοποίησης συγκεκριμένων εφαρμογών. Οι παρακάτω σημειώσεις έχουν ως σκοπό να μεταφέρουν αδρά τις γενικές γνώσεις της Pascal στη γλώσσα προγραμματισμού C.

Η C είναι μια γλώσσα προγραμματισμού γενικού σκοπού που προσφέρει οικονομία στην έκφραση, μοντέρνο έλεγχο της ροής του προγράμματος, πλήρεις δομές δεδομένων καθώς και ένα πλούσιο σύνολο τελεστών. Η απουσία περιορισμών και η γενικότητά της την κάνουν ιδιαίτερα εύχρηστη και αποτελεσματική για την υλοποίηση μεγάλου εύρους εφαρμογών.

Τα προγράμματα της C αποτελούνται από ένα σύνολο ορισμών συναρτήσεων και μεταβλητών. Η εκτέλεση του προγράμματος αρχίζει πάντα από τη συνάρτηση main η οποία πρέπει να έχει οποσδήποτε οριστεί. Το παρακάτω είναι ένα απλό πρόγραμμα σε C:

/* Τύπωσε hello, world */
#include <stdio.h>

int
main()
{
	printf("hello, world\n");
	return (0);
}

Σε σχέση με την Pascal παρατηρούμε πως:

Οι συναρτήσεις ορίζονται με βάση το όνομά τους, τον τύπο του αποτελέσματος που επιστρέφουν και τα ονόματα και τους τύπους των ορισμάτων τους. Η τιμή που θα επιστρέψει η συνάρτηση δίδεται ως παράμετρος στην εντολή return. Η παρακάτω συνάρτηση επιστρέφει το τετράγωνο ενός ακεραίου:
int
sqr(int n)
{
	return (n * n);
}
Η παρακάτω συνάρτηση επιστρέφει το άθροισμα δύο αριθμών:
int
sum2(int a, int b)
{
	return (a + b);
}

Ο προεπεξεργαστής

Ένα στοιχείο το οποίο (σωστά μάλλον) απουσιάζει από την Pascal είναι ο προεπεξεργαστής. Το πρόγραμμα της C πριν το μεταγλωτιστή περνά από τον προεπεξεργαστή ο οποίο και εκτελεί ορισμένες απλές λεκτικές αλλαγές. Συγκεκριμένα επιτρέπει:

Βασικοί τύποι

Οι ορισμοί τύπων στη 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 υποστηρίζει τις παρακάτω δομές ελέγχου:
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 είναι ο εξής:

Άσκηση

Βιβλιογραφία