Από την 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 παρατηρούμε πως:
- απουσιάζει το αρχικό 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.