1 #.Μάθημα Προγραμματισμού με τη C++

   
http://ilektrikpages.blogspot.gr/

  Σε όλες τις γλώσσες προγραμματισμού υπάρχουν μερικές θεμελιώδεις αρχές που πρέπει να γνωρίζετε, πριν μπορέσετε να γράψετε ακόμη και τα πιο στοιχειώδη προγράμματα. Σε αυτό το μάθημα θα μιλήσουμε για τα εξής θέματα: βασική κατασκευή προγράμματος, μεταβλητές και είσοδος-έξοδος.
Θα θεωρήσουμε ότι δεν έχετε κάποια εμπειρία με άλλη γλώσσα προγραμματισμού και υπενθυμίζουμε ότι για να μάθετε να προγραμματίζετε στη C++ δεν χρειάζεται να γνωρίζεται τη C. Σας συνιστούμε να προμηθευτείτε ένα μεταγλωττιστή (compiler) της C++ , ώστε να κάνετε μόνοι σας εξάσκηση. Να θυμάστε ότι μόνο μέσα από τη συνεχή ενασχόληση και τη διόρθωση των λαθών σας θα βελτιωθείτε. Εμείς θα ακολουθήσουμε μία σειρά μαθημάτων με διδασκαλία μέσω των σελίδων μας προσπαθώντας να αντικαταστήσουμε όπου είναι δυνατό το μεταγλωττιστή της C++.
Βασική Κατασκευή Προγράμματος
Ας γράψουμε το πρώτο μας πρόγραμμα:
#include <iostream>
void main()
{
cout << "Hello world" ;
}
Παρά το μικρό του μέγεθος το πρόγραμμα αυτό δείχνει τον τρόπο με τον οποίο κατασκευάζονται τα προγράμματα στη C++.

Σε αυτό το σημείο θα ήταν χρήσιμο να αναφέρουμε περιληπτικά τον τρόπο με τον οποίο τα προγράμματα μετουσιώνονται σε μία επαφή-διάλογο του χρήστη με τον υπολογιστή. Το προγράμματα αποτελούνται από εντολές οι οποίες γράφονται σε έναν απλό επεξεργαστή κειμένου, συνήθως στην Αγγλική γλώσσα. Ο υπολογιστής όμως κατανοεί μόνο τη γλώσσα μηχανής (σειρές από 0 και 1). Υπάρχουν δύο τρόποι για να δημιουργηθεί γλώσσα μηχανής από τις εντολές του επεξεργαστή κειμένου.



Ο πρώτος είναι να μεταφραστεί ολόκληρο το πρόγραμμα σε γλώσσα μηχανής. Η τελευταία μπορεί να εκτελεστεί σε οποιοδήποτε υπολογιστή και δεν απαιτείται η εγκατάσταση της συγκεκριμένης γλώσσας προγραμματισμού. Το σύνολο των εντολών της γλώσσας προγραμματισμού, που αποκωδικοποιεί τις εντολές του επεξεργαστή κειμένου και τις μετατρέπει σε γλώσσα μηχανής λέγεται μεταφραστής (compiler).

 Όταν αγοράζουμε και εγκαθιστούμε μία γλώσσα προγραμματισμού ουσιαστικά αυτό που αγοράζουμε και εγκαθιστούμε είναι ο μεταφραστής της. Η C++ είναι μία γλώσσα που έχει μεταφραστή και δημιουργεί αρχεία εκτελέσιμα τα οποία εκτελούνται και σε υπολογιστικά μηχανήματα που δεν υπάρχει η γλώσσα εγκατεστημένη. ’λλες τέτοιες γλώσσες που λειτουργούν με αυτόν τον τρόπο είναι η C και η Pascal.
Ο δεύτερος τρόπος είναι να λαμβάνεται μία εντολή κάθε φορά, να ερμηνεύεται, να εκτελείται και η διαδικασία να επαναλαμβάνεται με την επόμενη εντολή. Το σύνολο των εντολών της γλώσσας που ερμηνεύει κάθε εντολή του επεξεργαστή και την εκτελεί, λέγεται διερμηνευτής (interpreter). Ο διερμηνευτής λειτουργεί μέσα από το περιβάλλον της γλώσσας προγραμματισμού, για αυτό και η διαδικασία αυτή δεν μπροεί να λειτουργήσει σε υπολογιστές που δεν είναι εγκατεστημένη η γλώσσα. Μία τέτοια γλώσσα που λειτουργεί με διερμηνευτή είναι η BASIC.
Θα πρέπει ωστόσο να αναφέρουμε ότι στην περίπτωση των μεταφραστών η δημιουργία εκτελέσιμων αρχείων είναι λίγο πιο σύνθετη.
Οι εντολές που γράψαμε στον επεξεργαστή μεταφράζονται από τον μεταφραστή (compiler) και δημιουργείται ένα αρχείο το οποίο το ονομάζουμε "αντικείμενο πρόγραμμα" και έχει κατάληξη .OBJ (από τη λέξη object=αντικείμενο). Αυτό το αρχείο το λαμβάνει ένας μηχανισμός που ονομάζεται συνδέτης (linker) και το συνδέει με αρχεία τα οποία είναι απαραίτητα στο να δημιουργηθούν τα εκτελέσιμα αρχεία και τα οποία ανήκουν στη γλώσσα προγραμματισμού. Έτσι δημιουργείται το εκτελέσιμο αρχείο με κατάληξη .EXE (από τη λέξη executable=εκτελέσιμο) το οποίο μπορεί να εκτελεστεί και σε υπολογιστές στους οποίους δεν υπάρχει η γλώσσα προγραμματισμού.


Οι συναρτήσεις είναι ένα από τα θεμελιώδη συστατικά της C++. Το πρόγραμμα αποτελείται σχεδόν όλο από μία συνάρτηση που ονομάζεται main (). Το μόνο μέρος του προγράμματος που δεν αποτελεί μέρος της main () είναι η πρώτη γραμμή που αρχίζει με το #include. Στο προηγούμενο μάθημα είδαμε ότι η συνάρτηση μπορεί να είναι μέρος μιας τάξης, οπότε ονομάζεται συνάρτηση-μέλος. Οι συναρτήσεις όμως μπορούν να υπάρξουν αυτόνομες, ανεξάρτητα από κλάσεις. Επειδή δεν είμαστε ακόμη έτοιμη να μιλήσουμε για κλάσεις θα εξετάσουμε συναρτήσεις που είναι αυτόνομες όπως εδώ η main ().
Όνομα συνάρτησης
Όλες οι συναρτήσεις έχουν ένα όνομα που ακολουθείται από παρενθέσεις. Οι παρενθέσεις είναι το διακριτικό χαρακτηριστικό μιας συνάρτησης. Χωρίς αυτές ο μεταγλωττιστής θα νόμιζε ότι αναφερόμαστε σε μια μεταβλητή. Παρακάτω θα δούμε ότι οι παρενθέσεις δεν είναι πάντοτε κενές. Χρησιμοποιούνται για να περιέχουν τα ορίσματα της συνάρτησης, δηλαδή τιμές που μεταβιβάζονται στη συνάρτηση από το πρόγραμμα που τις καλεί.
’γκιστρα
Το σώμα μιας συνάρτησης περικλείεται σε άγκιστρα. Τα άγκιστρα οριοθετούν ένα τμήμα προτάσεων, καθορίζουν δηλαδή την αρχή και το τέλος των εντολών που περικλείονται στην συνάρτηση (Τα άγκιστρα παίζουν τον ρόλο των εντολών BEGIN και END στη γλώσσα PASCAL). Κάθε συνάρτηση πρέπει να χρησιμοποιεί αυτό το ζεύγος αγκίστρων.
Η συνάρτηση main ()
Ένα πρόγραμμα στη C++ μπορεί να περιέχει πολλές συναρτήσεις όμως θα πρέπει οπωσδήποτε να περιέχει μία που να ονομάζεται main(). Όταν εκτελείται ένα πρόγραμμα στη C++ η πρώτη εντολή που εκτελείται θα είναι στην αρχή μιας συνάρτησης που ονομάζεται main(). Εάν δεν έχετε συμπεριλάβει στο πρόγραμμά σας συνάρτηση που να ονομάζεται main() τότε ο συνδέτης (linker) δίνει σήμα ότι βρήκε σφάλμα.
Επιστροφή τιμών από συναρτήσεις
Όταν μία συνάρτηση ολοκληρώσει την εκτέλεσή της μπορεί να επιστρέψει μία μόνο τιμή στο πρόγραμμα που την κάλεσε. Αυτή η επιστρεφόμενη τιμή αποτελεί την απάντηση στο πρόβλημα που έλυσε η συνάρτηση και μπορεί να αποθηκευτεί σε μία μεταβλητή. Είναι ίδια η χρήση των συναρτήσεων όπως μάθαμε στο σχολείο:
x=sin(3.14)
Η συνάρτηση υπολογισμού του ημιτόνου sin() δέχεται ως όρισμα έναν αριθμό και όταν εκτελέσει τους υπολογισμούς της, επιστρέφει μία τιμή η οποία αποθηκεύεται στη μεταβλητή x. Στη C++ θα πρέπει να είμαστε λίγο πιο σαφείς όταν ορίζουμε τη συνάρτηση: πριν το όνομά της δηλώνουμε τι τύπου θα είναι η επιστρεφόμενη τιμή. Έτσι εάν επιστρέφεται ακέραια τιμή θα γράψουμε πριν το όνομα τη δεσμευμένη λέξη int, εάν επιστρέφεται πραγματικός αριθμός τη δεσμευμένη λέξη float κ.α. Μέσα στο σώμα της συνάρτησης θα πρέπει να υπάρχει μία εντολή με τη δεσμευμένη λέξη return και την τιμή που επιστρέφεται.
Έτσι εάν θέλαμε να γράψουμε το παραπάνω πρόγραμμα με τη συνάρτηση main() να επιστρέφει μία ακέραια τιμή τότε:
#include <iostream>
int main()
{
cout << "Hello world" ;
return 0;
}
Όταν η main() επιστρέφει τιμή τότε αυτή περνά στο λειτουργικό σύστημα.
Με τη λέξη void να προηγείται του ονόματος της συνάρτησης υποδηλώνουμε ότι αυτή η συνάρτηση δεν έχει τιμή επιστροφής. Στη C++ σε αντίθεση με άλλες γλώσσες όπου υπάρχει διαχωρισμός μεταξύ των συναρτήσεων (που επιστρέφουν τιμή που μπορεί να αποδοθεί) και των διαδικασιών (που εκτελούν κάποιες εντολές) υπάρχουν μόνο συναρτήσεις.
Προτάσεις προγράμματος
Στο πρώτο μας πρόγραμμα υπάρχει μόνο μία πρόταση να εκτελεστεί:
cout << "Hello world" ;
Αυτή η πρόταση προγράμματος λέει στον υπολογιστή να εμφανίσει στην οθόνη τη φράση που βρίσκεται μέσα στα εισαγωγικά. Όταν θέλουμε να εμφανιστεί ένα κείμενο (το οποίο ονομάζεται αλφαριθμητική σταθερά) στην οθόνη το περικλείουμε σε διπλά εισαγωγικά.
Το ελληνικό ερωτηματικό σηματοδοτεί το τέλος της πρότασης. Αυτός είναι ένας κανόνας που μπορεί πολύ εύκολα να ξεχάσετε. Σε μερικές γλώσσες όπως η BASIC το τέλος της πρότασης σηματοδοτείται από το τέλος της γραμμής. Αυτό δεν ισχύει όμως στη C++ που μπορείτε να σπάσετε την πρόταση σε όσες γραμμές θέλετε αρκεί στο τέλος να εισάγετε το ελληνικό ερωτηματικό που σηματοδοτεί το τέλος της πρότασης. Εάν παραλείψετε το ερωτηματικό ο μεταγλωττιστής θα εμφανίσει ένα μήνυμα σφάλματος.
Έξοδος και είσοδος στο πρόγραμμα
Ένα πρόγραμμα για να είναι χρήσιμο θα πρέπει να είναι ένα ανοιχτό σύστημα, να επικοινωνεί δηλαδή με τον έξω κόσμο. Να μπορεί να δέχεται δεδομένα από τον χρήστη και να εμφανίζει τα αποτελέσματα των υπολογισμών του. Είπαμε παραπάνω ότι η πρόταση “Hello world” εμφανίζεται στην οθόνη του υπολογιστή. Αυτό γίνεται με τη βοήθεια του αναγνωριστικού:
cout
Το cout ουσιαστικά είναι ένα αντικείμενο. Έχει προκαθοριστεί από τη C++ να είναι το ρεύμα καθιερωμένης εξόδου. Εμάς όμως προς το παρόν δεν μας ενδιαφέρουν αυτά, εμείς θα γνωρίζουμε ότι με τη χρήση του cout εμφανίζουμε δεδομένα στη οθόνη.
Ο τελεστής << ονομάζεται τελεστής εξαγωγής και κατευθύνει τα δεδομένα που βρίσκονται στα δεξιά του προς το αντικείμενο που είναι στα αριστερά του, το cout.
Για να εισάγουμε δεδομένα στο πρόγραμμά μας χρησιμοποιούμε το αντικείμενο cin. Ο τελεστής >> ονομάζεται τελεστής εισαγωγής και κατευθύνει τα δεδομένα που δέχεται το αντικείμενο cin μέσα στο πρόγραμμα. Πχ
cin >> x ;
Με την παραπάνω εντολή σταματά η ροή εκτέλεσης του προγράμματος αναμένοντας από τον χρήστη να δώσει μία τιμή από το πληκτρολόγιο. Δίνοντας την τιμή και πατώντας το enter επιστρέφεται ο έλεγχος πάλι στο πρόγραμμα αποθηκεύεται η τιμή στη μεταβλητή x και συνεχίζεται η εκτέλεσή του από εκεί και κάτω.
Με τη χρήση ενός cout μπορούμε να εμφανίσουμε πολλά δεδομένα στην οθόνη χρησιμοποιώντας πολλές φορές τον τελεστή εξαγωγής <<
cout << "hello world "<< "this is my first program";
Όπως φαίνεται τα δύο αλφαριθμητικά εμφανίζονται στην ίδια γραμμή. Για να αλλάξω γραμμή θα πρέπει να γράψω τη λέξη endl. Η λέξη endl είναι ένας χειριστής ο οποίος εισάγει μία αλλαγή γραμμής.
cout << "hello world "<<endl<< "this is my first program" ;
Η οδηγία include
Η πρώτη γραμμή του προγράμματος μπορεί να μοιάζει με πρόταση προγράμματος αλλά δεν είναι. Δεν αποτελεί μέρος του σώματος κάποιας συνάρτησης και δεν καταλήγει με το ελληνικό ερωτηματικό. Αρχίζει με το σύμβολο # και είναι μια οδηγία προεπεξεργαστή. Ο προεπεξεργαστής είναι ένα μέρος του μεταγλωττιστή και χειρίζεται τις οδηγίες αυτές πριν ξεκινήσει η μεταγλώττιση.
Η οδηγία #include λέει στον μεταγλωττιστή να παρεμβάλει ένα άλλο αρχείο (το αρχείο iostream) μέσα στον κώδικά μας. Στην πράξη γίνεται αντικατάσταση της οδηγίας #include με τα περιεχόμενα του αρχείου. Το iostream χρειάζεται για να αναγνωρίσει η γλώσσα τα αντικείμενα εισόδου και εξόδου cin και cout και να ξέρει πως θα τα χειριστεί για να πραγματοποιηθεί είσοδος και έξοδος δεδομένων από το πρόγραμμα.
Σχόλια
Τα σχόλια είναι ένα σημαντικό τμήμα του προγράμματος γιατί βοηθούν αυτόν που θα διαβάσει τον κώδικα του προγράμματος να καταλάβει τι συμβαίνει. Τα σχόλια αρχίζουν με το διπλό σύμβολο της καθέτου // και τελειώνουν με το τέλος της γραμμής. Όταν θέλετε τα σχόλια να ξεπεράσουν την μία γραμμή μπορείτε να δηλώσετε την αρχή των σχολίων με το σύμβολο /* και το τέλος τους με το σύμβολο */ .
Να χρησιμοποιείται συχνά σχόλια γιατί δεν θα είναι καθόλου περίεργο εάν προσπαθείτε να διαβάσετε ένα πρόγραμμα δικό σας που το γράψατε πριν τρεις μήνες και να μη θυμάστε τι ακριβώς κάνετε μέσα στον κώδικά σας. Και κάτι σημαντικό, τα σχόλια δεν θα πρέπει να λένε τι κάνουμε στον κώδικα αλλά κυρίως γιατί το κάνουμε.