c++ aπλά μαθήματα

37
Γενική Μορφή Η Γενική μορφή ενός προγράμματος C++ είναι η εξής: #include <iostream.h> #include <stdlib.h> void main() { ... ΕΝΤΟΛΕΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ... } Βιβλιοθήκες (Libraries): Στην αρχή με πράσινα γράμματα φαίνονται οι βιβλιοθήκες που θα χρησιμοποιήσουμε μέσα στο πρόγραμμα. Οι βιβλιοθήκες δεν είναι τίποτα άλλο παρά αρχεία που περιέχουν κώδικα γραμμένος σε C++. Συγκεκριμένα τα αρχεία αυτά έχουν την κατάληξη .h και βρίσκονται μέσα στον φάκελο που εγκαταστήσαμε τον compiler (Ισχύει για όλους τους compiler και όχι μόνο για τον Dev-C++). Με την εντολή #include είναι σαν να συμπεριλαμβάνουμε όλον τον κώδικα που βρίσκεται σε αυτό το αρχείο καταναλώνοντας μόνο μια γραμμή μέσα στο πρόγραμμά μας. Αν και μπορεί ο κάθε προγραμματιστής, να δημιουργήσει δικές του βιβλιοθήκες, σε αυτή τη σειρά μαθημάτων θα χρησιμοποιήσουμε τις έτοιμες βιβλιοθήκες που μας παρέχει ο Compiler. Oι δύο βιβλιοθήκες που φαίνονται πάνω (iostream.h και stdlib.h) είναι οι δύο βασικές βιβλιοθήκες που περιέχουν τις εντολές που θα χρησιμοποιήσουμε στα μαθήματα. Θα τις συμπεριλαμβάνουμε σε κάθε πρόγραμμα μας. Η συνάρτηση main: Κάτω από τις βιβλιοθήκες υπάρχει η συνάρτηση main. Η συνάρτηση αυτή, είναι το κύριο μέρος του προγράμματος. Οι αγκύλες υποδηλώνουν, την αρχή και το τέλος της συνάρτησης. Μέσα στις αγκύλες, γράφουμε τις εντολές του προγράμματος. Case Sensitive: Η C++ είναι μια γλώσσα case sensitive. Αυτό σημαίνει οτι ξεχωρίζει τα κεφαλαία από τα πεζά γράμματα και έτσι θα πρέπει να είμαστε προσεκτική στο τί γράφουμε, γιατί αν γράψουμε μια εντολή με κεφαλαία ενώ θα έπρεπε να την γράψουμε με πεζά, δεν θα γίνει κατανοητή από τον compiler, και θα βγάλει μήνυμα σφάλματος. Page 1

Upload: despina-koronidi

Post on 24-Nov-2014

137 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: C++ Aπλά μαθήματα

Γενική Μορφή

Η Γενική μορφή ενός προγράμματος C++ είναι η εξής:

#include <iostream.h>#include <stdlib.h>

void main(){

...ΕΝΤΟΛΕΣ ΠΡΟΓΡΑΜΜΑΤΟΣ...

}

Βιβλιοθήκες (Libraries): Στην αρχή με πράσινα γράμματα φαίνονται οι βιβλιοθήκες που θα χρησιμοποιήσουμε μέσα στο πρόγραμμα. Οι βιβλιοθήκες δεν είναι τίποτα άλλο παρά αρχεία που περιέχουν κώδικα γραμμένος σε C++. Συγκεκριμένα τα αρχεία αυτά έχουν την κατάληξη .h και βρίσκονται μέσα στον φάκελο που εγκαταστήσαμε τον compiler (Ισχύει για όλους τους compiler και όχι μόνο για τον Dev-C++).Με την εντολή #include είναι σαν να συμπεριλαμβάνουμε όλον τον κώδικα που βρίσκεται σε αυτό το αρχείο καταναλώνοντας μόνο μια γραμμή μέσα στο πρόγραμμά μας.Αν και μπορεί ο κάθε προγραμματιστής, να δημιουργήσει δικές του βιβλιοθήκες, σε αυτή τη σειρά μαθημάτων θα χρησιμοποιήσουμε τις έτοιμες βιβλιοθήκες που μας παρέχει ο Compiler. Oι δύο βιβλιοθήκες που φαίνονται πάνω (iostream.hκαι stdlib.h) είναι οι δύο βασικές βιβλιοθήκες που περιέχουν τις εντολές που θα χρησιμοποιήσουμε στα μαθήματα. Θα τις συμπεριλαμβάνουμε σε κάθε πρόγραμμα μας.

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

Case Sensitive: Η C++ είναι μια γλώσσα case sensitive. Αυτό σημαίνει οτι ξεχωρίζει τα κεφαλαία από τα πεζά γράμματα και έτσι θα πρέπει να είμαστε προσεκτική στο τί γράφουμε, γιατί αν γράψουμε μια εντολή με κεφαλαία ενώ θα έπρεπε να την γράψουμε με πεζά, δεν θα γίνει κατανοητή από τον compiler, και θα βγάλει μήνυμα σφάλματος.

Page 1

Page 2: C++ Aπλά μαθήματα

Η εντολή εξόδου COUT

Πάμε να γράψουμε το πρώτο μας πρόγραμμα. Ένα πρόγραμμα το οποίο θα τυπώνει στην οθονη την φράση "ftou skoulikomirmigotrypa"

#include <iostream.h>#include <stdlib.h>

void main(){

     cout<<"ftou skoulikomirmigotrypa"<<endl;     system("PAUSE");

}

cout: Είναι η εντολή εξόδου. Με αυτήν εκτυπώνουμε στην οθόνη.

cout << τιμή

endl: Στο πρόγραμμά μας, μετά από την εντολή cout, ακολουθεί η εντολή endl; Αυτή η εντολή μας μεταφέρει τον κέρσορα, μια γραμμή ποιο κάτω. Είναι σαν να πατάμε Enter στο MS Word. Χρησιμεύει για να ξεχωρίζουμε τα αποτελέσματά μας στην οθόνη.

system("PAUSE"): Δε ξέρω για τους άλλους compilers, στον Dev-C++ πάντος αυτή η εντολή, χρειάζεται υποχρεωτικά στο τέλος του προγράμματος, για να μπορέσουμε να δούμε τα αποτελέσματα μάς. Αν δε τον συμπεριλάβουμε, τότε το παράθυρο θα κλείσει σε χρόνο dt, χωρίς να μπορέσουμε να δούμε τι κάναμε. Σε φυσιολογικές συνθήκες, το πρόγραμμα μας θα έχει τελειώσει όταν δούμε στην οθόνη το μύνημα "Press any key to continue".

Το ελληνικό ερωτηματικό (;): Συμβολίζει το τέλος της κάθε εντολής. Πολλές φορές όταν το ξεχνάμε χτυπάει ο compiler *

Λεξιλόγιο

*χτυπάει ο compiler = μας βγάζει μύνημα οτι κάτι έχουμε κάνει λάθος

  

Page 2

Page 3: C++ Aπλά μαθήματα

Μεταβλητές

Φανταστείτε τις μεταβλητές σαν κουτάκια τα οποία μπορούν να πάρουν τιμές μέσα.

Όπως λέει και το όνομά, οι τιμές αυτές τις περισσότερες φορές μεταβάλονται. Η τιμή αυτή μπορεί να είναι απο ένας θετικός ή αρνητικός αριθμός μέχρι μια λέξη, ή μια ολόκληρη πρόταση. Έτσι ανάλογα με τί τιμή μπορεί να πάρει κάθε μεταβλητή τις χωρίζουμε σε διάφορους τύπους.Στον παρακάτω πίνακα αναφέρονται οι τύποι των μεταβλητών, το μέγεθος των byte που χρησιμοποιούν, καθώς και η εμβέλεια των τιμών που μπορούν να πάρουν.

 

Τύπος Χαρακτηρισμός Bytes Εμβέλεια τιμών

int Ακέραιος Αριθμος 4

unsigned int -||- 4

short -||- 2 –32,768 έως 32,767

unsigned short -||- 2 0 έως 65,535

long -||- 4 –2,147,483,648 έως 2,147,483,647

unsigned long -||- 4 0έως 4,294,967,295

float Δεκαδικός Αριθμός 4 3,4e-38 έως 3,4e38 (7 ψηφία)

double -||- 8 1,7e-308 έως 1,7e308 (15 ψηφία)

long double -||- 12

char Χαρακτήρας 1 –128 έως 127

unsigned char -||- 1 0 έως 255

bool Boolean 1 false ή true

Παρατηρήστε τη διαφορά μερικών τύπων μεταβλητών, με κάποιών άλλων οι οποίοι έχουν το ίδιο όνομα με τον χαρακτηρισμό unsigned μπροστά. Η εμβέλεια είναι η ίδια, αλλά η διαφορά είναι η εξής: Οι unsigned μεταβλητές, μπορούν να έχουν ώς τιμές, μεγαλύτερους αριθμούς απ'ότι οι μη unsigned, αλλα ταυτόχρονα έχουν το μειονέκτημα ότι δεν μπορούν να πάρουν καθόλου αρνητικούς αριθμούς.

ΟνοματολογίαΕπίσης στις μεταβλητές δίνουμε και ονόματα. Βεβαίως δε θα μπορούσαμε να ονομάσουμε μια μεταβλητή Αλέξανδρο, Σούζυ ή Μπάμπη. Συνήθως τα ονόματα που δίνουμε στις μεταβλητές, χαρακτηρίζουν την ιδιότητα της τιμής που αποθηκεύουν, έτσι ώστε να θυμίζει και στον προγραμματιστή.Πχ. αν θέλουμε μια μεταβλητή η οποία να αποθηκεύει την ηλικία του χρήστη, τότε θα την ονομάσουμε ilikia ή age.

Υπάρχουν ορισμένοι κανόνες ονοματολογίας που θα πρέπει να προσέξουμε έτσι ώστε να αποφεύγουμε άσκοπα λάθη. Απλά να ξέρετε οτι για ένα όνομα μεταβλητής μπορείτε να χρησιμοποιείτε όλους τους χαρακτήρες απο a-z και 0-9 καθώς επίσης και την παύλα ( _ ). Επίσης, ένα όνομα μεταβλητής απαγορεύεται να αρχίζει με αριθμό.

Page 3

Page 4: C++ Aπλά μαθήματα

Δήλωση μεταβλητών και ανάθεση τιμών σε αυτέςΠρίν χρησιμοποιήσουμε μια μεταβλητή, θα πρέπει να την δηλώσουμε μέσα στο πρόγραμμα. Τις μεταβλητές τις δηλώνουμε, δηλώνοντας πρώτα τον τύπο της μεταβλητής, το όνομά της, και αν θέλουμε ορίζουμε και μια αρχική τιμή.

τύπος όνομα;

ή

τύπος όνομα = τιμή;

Η ανάθεση όπως φένεται από το δείγμα, γίνεται με το σύμβολο του ίσον (=). Από τη στιγμή που ο compiler θα δεί μια τέτοια ισότητα, θα πάει στο "κουτάκι" που προαναφέραμε και θα το γεμίσει με την τιμή που βρίσκεται δεξιά από το ίσον. Πχ

int arithmos = 235;

και το κουτάκι θα διαμορφωθεί ως εξής:

Από δώ και στο εξής, οπουδήποτε χρησιμοποιήσουμε την μεταβλητή arithmos, θα είναι σα να χρησιμοποιούμε τον αριθμό 235.

Επίσης, μπορούμε σε οποιοδήποτε μέρος του προγράμματος να αλλάξουμε την τιμή της μεταβλητής arithmos, με μια καινούρια τιμή, πάλι με ανάθεση, αρκεί δηλαδή να γράψουμε

arithmos = 14;

και το κουτάκι θα διαμορφωθεί ως εξής:

Σημειώστε οτι αυτή τη φόρά δε χρειάζεται να συμπεριλάβουμε την λέξη int στην εντολή μας, γιατί την μεταβλητή την έχουμε ήδη δηλώσει πιο πάνω στο πρόγραμμα.

Προσέξτε το παρακάτω πρόγραμμα:

#include <iostream.h>#include <stdlib.h>

void main(){

    char frouto[10]="peponi";

    cout<< frouto <<endl;

    system("PAUSE");

}

Στην αρχή δηλώνουμε μια μεταβλητή τύπου char με το όνομα frouto η οποία μπορεί να πάρει το πολύ μέχρι 10 χαρακτήρες. Στην ίδια γραμμή, ορίζουμε ως αρχική τιμή για την μεταβλητή frouto, το string "peponi".

Page 4

Page 5: C++ Aπλά μαθήματα

Στην συνέχεια ζητάμε από το πρόγραμμα να μας εκτυπώσει στην οθόνη τα περιεχόμενα της μεταβλητής frouto, δηλαδή, αυτό που θα δούμε τελικά στην οθόνη θα είναι η λέξη "peponi".

Άλλα παραδείγματα δηλώσεων μεταβλητών και αναθέσεων τιμών σε αυτές:

int x;x=3459;

Δηλώνουμε έναν ακέραιο με το όνομα x. Στη συνέχεια αναθέτουμε την τιμή 3459.

 

int y;z;

Δηλώνουμε δύο ακαίραιους με τα όνοματα y και z. Βολεύει πολύ τις μεταβλητές του ίδιου τύπου να τις δηλώνουμε στην ίδια γραμμή απ' ότι, τη μία κάτω από την άλλη.

 

unsigned short age=18;

Δηλώνουμε έναν ακαίραιο με το όνομα age και ταυτόχρονα του δίνουμε την τιμή 18. Επιλέξαμε short γιατί χρησιμοποιεί λιγότερα bytes απ' ότι ο τύπος int και μας βοηθάει στην εξοικονόμηση μνήμης.

 

float price;price=5.2;

Δηλώνουμε έναν δεκαδικό με το όνομα price. Στη συνέχεια δίνουμε στην price την τιμή 5.2

 

float pi=3.14;

Δηλώνουμε έναν δικαδικό με το όνομα pi και ταυτόχρονα του αναθέτουμε αρχική τιμή το 3.14

 

double eti_fotos;

Δηλώνουμε έναν δεκαδικό μεγάλης εμβέλειας και του δίνουμε το όνομα eti_fotos. Ο λόγος που επηλέξαμε double είναι προφανής

 

char onoma[10]="Maria";

Δηλώνουμε μια ακολουθία 10 χαρακτήρων onoma, και της δίνουμε για αρχική τιμή τη λέξη "Maria".

Page 5

Page 6: C++ Aπλά μαθήματα

Σημείωση 1: Πάντα όταν χρησιμοποιούμε μεταβλητές τύπου char θα αναθέτουμε ακολουθία χαρακτήρων και όχι μεμονωμένους χαρακτήρες. Ο αριθμός μέσα στην αγκύλη υποδηλώνει τον μέγιστο αριθμό χαρακτήρων που μπορεί να πάρει η μεταβλητή. Έτσι και αναθέσουμε μια τιμή με περισσότερους χαρακτήρες, τότε ο compiler, θα "χτυπήσει".Σημείωση 2: Οι ακολουθίες χαρακτήρων (ή αλλιώς strings), πάντα πρέπει να βρίσκονται μέσα σε διπλά εισαγωγικά (αυτάκια). Έτσι και δε συμπεριλάβουμε αυτάκια, δηλαδή έτσι και γράψουμε

char onoma[10]=Maria;

αυτό που θα καταλάβει ο compiler είναι οτι αναθέτουμε στην μεταβλητή όνομα, την τιμή μιας άλλης υποτιθέμενης μεταβλητής με το όνομα Maria.

 

char countdown[15]="321";

Όπως και πάνω, δηλώνουμε μια ακολουθία 15 χαρακτήρων με το όνομα countdown, και της δίνουμε για αρχική τιμή τη λέξη "321".

Προσοχή!!! Το 321, το λαμβάνει σαν φράση και όχι σαν αριθμό, επειδή βρίσκεται μέσα σε εισαγωγικά. 

int x=5+4;

Δηλώνουμε την ακαίραια μεταβλητή x της οποίας η τελική τιμή είναι το αποτέλεσμα της πράξης 5+4, δηλαδή 9.

 

bool condition=true;

Εδώ ορίζουμε μια μεταβλητή τύπου Boolean. Αυτός είναι ένας περίεργος τύπος μεταβλητής. Οι μεταβλητές αυτές, μπορούν να πάρουν μόνο 2 τιμές, τις τιμές true (1) ή false (0).

Page 6

Page 7: C++ Aπλά μαθήματα

Πράξεις και Μεταβλητές

Σημείωση: Για εξοικονόμηση χώρου και χρόνου, από δώ και στο εξής, όπου αναφέρω παραδείγματα σε κώδικα C++, θα παραλείπονται σκοπίμως, εκτός από μερικές περιπτώσεις, μερικές στοιχειώδεις και αυτονόητες εντολές της C++, όπως οι #include, η function main(), και καμιά φορά και  η δήλωση μεταβλητών.

Με τις μεταβλητές και τους αριθμούς μπορούμε να παίξουμε. Έχουμε πχ

int x,y,z,miso;

x=7;y=3;z=x+y;

miso=z/2;

Η τιμή του z είναι το άθροισμα των τιμών του x και y δηλαδή 10, ενώ η τιμή της μεταβλητής miso είναι η τιμή του z διά 2, δηλαδή 10/2=5.Θυμίζουν τις εξισώσεις που κάναμε στο γυμνάσιο, με μία σημαντική διαφορά όμως, σε καμία φορά οι παραπάνω αναθέσεις δε θα μπορούσαν να γίνουν αντίστροφα, δηλαδή σε καμία περίπτωση ΔΕΝ θα μπορούσαμε να πούμε

7=x;3=y;x+y=z;z/2=miso;

Επίσης ισχύει και το εξής: Προσέξτε το παρακάτω παράδειγμα:

int x;

x=5;

x=x+10;

Στην αρχή ορίζουμε την μεταβλητή x και της δίνουμε την τιμή 5. Απο κάτω ένας μαθητής του λυκείου θα έλεγε οτι πρέπει να λύσουμε την εξίσωση για να βρούμε το x!!Αυτό που ισχύει πραγματικά είναι ότι αναθέτουμε μια καινούρια τιμή στη μεταβλητή x. Η τιμή αυτή θα είναι ίση με την ήδη υπάρχουσα τιμή που έχει το x (δηλαδή 5) σύν τον αριθμό 10. Η καινούρια τιμή του x είναι 15.

Σημείωση: Περιττό να πούμε οτι η παλιά τιμή του x, δηλαδή το 5, αποτελεί πλέον παρελθόν και δε μπορεί να ανακτηθεί.

Οι πράξεις που μπορούμε να κάνουμε στη C++ είναι πάνω κάτω αυτές που ξέρουμε και χρησιμοποιούμε τα εξής σύμβολα:

+ Πρόσθεση

Αφαίρεση

* Πολλαπλασιασμός

/ Διαίρεση

% Υπόλοιπο Ακαίρεας Διαίρεσης

Page 7

Page 8: C++ Aπλά μαθήματα

Οι πράξεις με το σύμβολο του ποσοστού %, μας επιστρέφει το υπόλοιπο της ακέραιας διαίρεσης. Διαιρεί δηλαδή τους συντελεστές της πράξης και μας δίνει το υπόλοιπο. Έχουμε πχ

w= 87%4; x=15%5; y = 200%2; z = 23%7;

Στην πρώτη ανάθεση, το 4 χωράει 21 φορές στο 87 (4x21=84) και περισσεύουν 3. Άρα ο w πέρνει την τιμή 3

Στην δεύτερη ανάθεση το 15 διαιρείται ακριβώς με το 5, άρα δεν έχουμε υπόλοιπο. Οπότε ο x πέρνει την τιμή 0.

Στην τρίτη ανάθεση το ίδιο με την δεύτερη.

Στην τέταρτη ανάθεση το 7 χωράει 3 φορές στο 23 (3x7=21) και περισσεύουν 2. Άρα ο z πέρνει την τιμή 2.

Αύξηση μιας τιμής κατά 1

Επίσης κάτι άλλο που θα έπρεπε να σημειώσουμε ειναι η συντομογραφία της αύξησης της τιμής μιας αριθμητικής μεταβλητής κατά 1. Σε κανόνικές συνθήκες θα έπρεπε να γράψουμε

x=x+1;

Επειδή η παραπάνω ανάθεση χρησιμοποιήται αρκετά συχνά στα προγράμματα γι'αυτο καθορίστηκε μια συντομογραφία η οποία είναι η εξής:

x++;

Παρόμοια συντομογραφία έχουμε και για την μείωση κατα 1:

x--;

Page 8

Page 9: C++ Aπλά μαθήματα

H εντολή εισόδου CIN

Ας γράψουμε τώρα ένα πρόγραμμα το οποίο θα μας ζητάει το όνομά μας και στη συνέχεια θα το εκτυπώνει στην οθόνη.

 

#include <iostream.h>#include <stdlib.h>

void main(){

char onoma[15];

cout<<"pos se lene?";cin>>onoma;cout<<"To onoma sou einai "<<onoma<<endl;

system("PAUSE");

}

Δηλώνουμε μια μεταβλητή τύπου char μήκους 15 χαρακτήρων. Εκτυπώνουμε στην οθόνη το μήνυμα "pos se lene".

cin: Είναι η εντολή εισόδου

cin >> μεταβλητη;

όταν ο compiler βλέπει αυτήν την εντολή, τότε το πρόγραμμα σταματάει, και περιμένει ανταπόκριση από τον χρήστη, μέχρι να πληκτρολογίσει κάτι και να πατήσει το Enter. Στη συνέχεια, την τιμή που πληκτρολογουμε την αναθέτει στην μεταβλητή που γράφουμε στα δεξιά της εντολής.

Στη συνέχεια εκτυπώνουμε το μύνημα "To onoma sou einai " ακολουθούμενο από την τιμή της μεταβλητής onoma, η οποία είναι πλέον αυτό που έχει πληκτρολογήσει ο χρήστης.

Page 9

Page 10: C++ Aπλά μαθήματα

Η εντολή επανλάληψης FOR

Η εντολή for μας επιτρέπει να επαναλάμβάνουμε τις εντολές τις οποίες συμπεριλαμβάνει για συγκεκριμένο αριθμό επαναλήψεων.

Σύνταξη

for (αρχική_τιμη_μετρητή; συνθήκη_λήξης; βήμα){

...Εντολές...

} αρχική_τιμή_μετρητή: ορίζουμε την αρχική τιμή από την οποία θα αρχίσει η εντολή

να μετράει συνθήκη_λήξης: Μια απλή ή σύνθετη συνθήκη κατά την οποία όσο ισχύει, θα

εκτελούνται οι εντολές της for βήμα: Ένας μετρητής ο οποίος αυξάνεται η μειώνεται κάθε φορά που γίνεται

καινούρια επανάληψη. Αυτός ο μετρητής είναι απαραίτητος έτσι ωστε μετά ορισμένο αριθμό επαναλήψεων, να ισχύσει η συνθήκη_λήξης, και να βγούμε από τον βρόχο της for.

Σημείωση: Αν υπάρχει μία μονο εντολή που πρέπει να εκτελέσει η for, τότε μπορούμε να παραλείψουμε τα άγγιστρα {}, που υποδηλώνουν την αρχή και το τέλος της for

Ας γράψουμε ένα πρόγραμμα το οποίο θα τυπώνει τους αριθμούς από το 1 μέχρι το 100

 

#include <iostream.h>#include <stdlib.h>

void main(){

int i;

for (i=1;i<=100;)     << i <<endl;

system("PAUSE");

}

Στην αρχή δηλώνουμε έναν ακέραιο i, τον οποίο θα τον χρησιμοποιήσουμε μέσα στην for, αμέσως μετά.

Ορίζουμε ώς αρχική τιμή του μετρητή το 1. Εκτελείται η εντολή που έχουμε μέσα στην for, και εκτυπώνεται στην οθόνη ο αριθμός

1. Κάθε φορά που η for φτάνει στο τέλος (συγκεκριμένα κάθε φορά που εκτελέιται η

εντολή cout), γίνεται έλεγχος της συνθήκης_λήξης. Αν ισχύει δηλαδή, αν το i είναι ίσο ή μικρότερο του 100, τότε θα εκτελεστεί το i++, και αμέσως μετά ξανά η εντολή cout. Αυτή τη φορά θα εκτυπωθεί ο αριθμός 2 γιατί το i έχει αυξηθεί κατά 1. Αυτό

συνεπώς θα συνεχίζεται μέχρι το i να πάρει την τιμή 100

Page 10

Page 11: C++ Aπλά μαθήματα

Η Boolean λογική

Οι Boolean είναι μεταβλητές οι οποίες μπορούν να πάρουν δύο μόνο τιμές. TRUE ή FALSE. Πέρα από τις Boolean μεταβλητές χρησιμοποιούμε την λεγόμενη Boolean μεθοδο για να προσδιορίσουμε αν μια συνθήκη είναι αληθής ή ψευδής μέσα σε ένα πρόγραμμα. Τέτοιες συνθήκες συνήθως είναι όταν βάζουμε το πρόγραμμα να ελέγχει ισότητες και ανισότητες. Παρακάτω αναφέρονται τα σύμβολα που χρησιμοποιούμε για τον έλεγχο αυτό

== Ισο

> μεγαλύτερο

>= μεγαλύτερο ή ίσο

< μικρότερο

<= μικρότερο ή ίσο

!= άνισο

Παράδειγμα έστω οτι έχουμε την συνθηκη x>=5. Αν όντος το x είναι μεγαλύτερο ή ίσο του 5, τότε αυτή η συνθήκη είναι TRUE, αλλιώς είναι FALSE.

Η παραπάνω συνθήκη είναι απλή. Πέρα από τις απλές έχουμε και τις σύνθετες συνθήκες. Οι σύνθετες συνθήκες συνδιάζουν δύο ή και περισσότερες συνθήκες όπως η παραπάνω. Οι συνθήκες αυτές συνδέονται με κάποια συνδετικά. Ανάλογα με αυτά τα συνδετικά, και το αν οι επι μέρους συνθήκες είναι αληθείς ή ψευδείς, ολόκληρη η σύνθετη συνθήκη μπορεί να είναι αληθής ή ψευδής. Τα συνδετικά αυτά είναι:

&& AND Λογικο ΚΑΙ

|| OR Λογικό Η

^ XOR Λογικο Ή

! NOT Λογικό ΟΧΙ

Έτσι μπορεί να έχουμε συνθήκες όπως η εξής

(x>50) && (x<100): Ελέγχουμε αν το x είναι μεγαλύτερο από το 50 ΚΑΙ ταυτόχρονα μικρότερο του 100.

(x=40) || (x>150): Ελέγχουμε αν το x είναι ίσο με 40 Ή μεγαλύτερο από το 150. ! ((x>=0) && (x<=20)): Ελέγχουμε αν το x ΔΕΝ είναι μεγαλύτερο ίσο του 0 και

ταυτόχρονα μικρότερο ίσο του 20. Με άλλα λόγια αυτή η συνθήκη είναι αληθής μόνο αν το x είναι μικρότερο από 0 ή μεγαλύτερο από 20.

Το XOR: Είναι το λογικό Ή (ήτα διαζευτικό). Για να είναι αληθής μια τέτοια σύνθετη συνθήκη πρέπει ΜΟΝΟ ΚΑΙ ΜΟΝΟ ΜΙΑ από τις επιμέρους συνθήκες να είναι αληθής.

Παρακάτω παρουσιάζονται όλες οι περιπτώσεις σύνθετων συνθηκών που μπορούμε να έχουμε ανάλογα με το συνδετικό, και το αποτέλεσμα της κάθε συνθήκη

συνθήκη Α   συνθήκη Β   αποτέλεσμα

TRUE AND TRUE = TRUE

TRUE AND FALSE = FALSE

FALSE AND TRUE = FALSE

FALSE AND FALSE = FALSE

Page 11

Page 12: C++ Aπλά μαθήματα

 

συνθήκη Α   συνθήκη Β   αποτέλεσμα

TRUE OR TRUE = TRUE

TRUE OR FALSE = TRUE

FALSE OR TRUE = TRUE

FALSE OR FALSE = FALSE

 

συνθήκη Α   συνθήκη Β   αποτέλεσμα

TRUE XOR TRUE = FALSE

TRUE XOR FALSE = TRUE

FALSE XOR TRUE = TRUE

FALSE XOR FALSE = FALSE

 

  συνθήκη Α   αποτέλεσμα

NOT TRUE = FALSE

NOT FALSE = TRUE

 

Για να γίνουν πιο κατανοητές αυτές οι πράξεις, παρακάτω χρησιμοποιούμε ένα πιο καθημερινό παράδειγμα:

συνθήκη Α AND συνθήκη Β

  

Λέει η Μαρία στη μαμά της:

  Θα πάω στο σχολείο  KAI μετά θα πάω για καφέ  

  |------ συνθήκη Α ------|    |------- συνθήκη Β --------|  

 

Η Μαρία λοιπόν

α) πήγε στο σχολείο  ΚΑΙ πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ

β) πήγε στο σχολείο  ΚΑΙ δεν πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ

γ) δεν πήγε στο σχολείο  ΚΑΙ πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ

δ) δεν πήγε στο σχολείο  ΚΑΙ δεν πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ

! Δεν μας απασχολεί που μπορεί να πήγε η Μαρία αφού ούτε στο σχολείο πήγε ούτε και για καφέ ;)

συνθήκη Α OR συνθήκη Β

 

Λέει η Μαρία στη μαμά της:

Page 12

Page 13: C++ Aπλά μαθήματα

 

  Θα πάω στο σχολείο  ή θα πάω για καφέ  

  |----- συνθήκη Α ------|   |---- συνθήκη Β ---|  

         

Η Μαρία λοιπόν:

α) πήγε στο σχολείο και μετά πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ

β) πήγε στο σχολείο αλλα δεν πήγε για καφε Άρα είπε ΑΛΗΘΕΙΑ

γ) δεν πήγε στο σχολείο αλλά πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ

δ)δεν πήγε ούτε σχολείο

ούτε για καφέ Άρα είπε ΨΕΜΑΤΑ

 

συνθήκη Α XOR συνθήκη Β

Λέει η Μαρία στη μαμά της:

           

  ή θα πάω στο σχολείο ή θα πάω για καφέ

    |---- συνθήκη Α ------|    |----συνθήκη Β ----|  

 

Η Μαρία λοιπόν

α)   πήγε στο σχολείο και μετά πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ

β)   πήγε στο σχολείο αλλά δεν πήγε για

καφέΆρα είπε ΑΛΗΘΕΙΑ

γ)   δεν πήγε στο σχολείο   αλλά πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ

δ)   δεν πήγε ούτε στο σχολείο ούτε για καφέ Άρα είπε ΨΕΜΑΤΑ

 

NOT συνθήκη Α

Λέει η Μαρία στη μαμά της:

 

  δεν θα πάω για καφέ  

    |---- συνθήκη Α ------|  

 

Η Μαρία λοιπόν

α)   πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ

β)   δεν πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ

 

Page 13

Page 14: C++ Aπλά μαθήματα

Page 14

Page 15: C++ Aπλά μαθήματα

Η εντολή διάζευξης IF...ELSE

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

Σύνταξη

if (συνθήκη){

...Εντολές1...

}else{

...Εντολές2...

} συνθήκη: Η συνθήκη κατά την οποία αν είναι TRUE, εφαρμόζονται οι εντολές στα

πλαίσια της if (Εντολες1), αλλιώς, αν είναι FALSE, εφαρμόζονται οι εντολές της

else (Εντολές2) Σημειώστε ότι η χρήση του βρόχου else είναι προερετική

Ας γράψουμε ένα πρόγραμμα το οποίο θα μας ζητάει εναν αριθμό. Αν ο αριθμός που του δώσουμε είναι θετικός (>=0), τότε θα εκτυπώνεται το μύνημα "O arithmos einai thetikos" ενω αν είναι αρνητικός (<0), τότε θα εκτυπώνεται το μύνημα "O arithmos

einai arnitikos".

 

#include <iostream.h>#include <stdlib.h>

void main(){

int x;

cout<<"Dose arithmo: ";cin>>x;

if (x>=0)    cout<<"O arithmos einai thetikos"<<endl;else    cout<<"O arithmos einai arnitikos"<<endl;

system("PAUSE");

Page 15

Page 16: C++ Aπλά μαθήματα

}

Ορίζουμε έναν ακέραιο x. Εκτυπώνουμε το μύνημα "Dose arithmo:"

Γίνεται είσοδος αριθμού από τον χρήστη με την cin. Αν ισχύει η συνθήκη x>=0, τότε εκτυπώνεται το μύνημα "O arithmos einai

thetikos" αλλιώς εκτελούντε οι εντολές μέσα στον βρόχo της else δηλαδή στη συγκεκριμένη περίπτωση θα εκτυπωθεί το μύνημα "O arithmos einai

arnitikos".

Page 16

Page 17: C++ Aπλά μαθήματα

Η εντολή διάζευξης SWITCH

Η εντολή switch είναι περίπου σαν την if. Την χρησιμοποιούμε όμως όταν οι περιπτώσεις που μπορεί να έχουμε είναι χαρακτηριστικά πολλές.

Σύνταξη

switch (μεταβλητή){

case τιμή_1: ...Εντολές1... ; break;case τιμή_2: ...Εντολές2... ; break;case τιμή_3: ...Εντολές3... ; break;case τιμή_4: ...Εντολές4... ; break;...default: ...Εντολές5... ;

}

μεταβλητή: Μια μεταβλητή της οποίας την τιμή ελέγχουμε στη συνέχεια. case: Στη συνέχεια ο compiler ελέγχει μια προς μια τις τιμές μέσα στον βρόχο της

switch. Αν κάποια από αυτές τις τιμές ισούται με την τιμή της μεταβλητής, τότε εκτελούνται οι εντολές που βρίσκονται στα δεξιά, και κατόπιν βγένει από τον βρόχο με την βοήθεια της εντολής break.

default: Αν καμία από αυτές τις τιμές δεν ισούται με την τιμή της μεταβλητής, τότε εκτελούνται οι εντολές που ορίζει το default.

Ας γράψουμε ένα πρόγραμμα που θα ζητάει να του δώσουμε έναν βαθμό από το 1-5. Ανάλογα με τον βαθμό θα διατυπώνεται το ανάλογο μύνημα

 

#include <iostream.h>#include <stdlib.h>

void main(){

int vathmos;

cout<<"dose vathmo(1-5): ";cin>>vathmos;

switch (vathmos){    case 1: cout<<"poly kakos"<<endl; break;    case 2: cout<<"kakos"<<endl; break;    case 3: cout<<"metrios"<<endl; break;    case 4: cout<<"kalos"<<endl; break;    case 5: cout<<"aristos"<<endl; break;    default: cout<<"eipame apo 1-5"<<endl;}

system("PAUSE");

}

Page 17

Page 18: C++ Aπλά μαθήματα

Δηλώνουμε μια μεταβλητή vathmos. Εκτυπώνουμε το μύνημα "Dose vathmo: " Gίνεται είσοδος ενός αριθμού από τον χρήστη με την cin, και αναθέτεται στην

μεταβλητή βαθμός. Ελέγχεται αν η τιμή της μεταβλητής vathmos συμπίπτει με κάποια από τις τιμές

μέσα στον βροχο της switch. Αν ναι, τότε τυπώνεται το μύνημα στα δεξιά της

σωστής τιμής. Αν όχι, εκτυπώνεται το μύνημα "eipame apo 1-5".

Page 18

Page 19: C++ Aπλά μαθήματα

Η εντολή επανάληψης Do While

Η εντολή αυτή είναι μια εντολή επανάληψης, όπως η for. Η διαφορά της είναι οτι αυτή τη φορά, δεν ξέρουμε τον πραγματικό αριθμό των επαναλήψεων. Οι εντολές που βρίσκονται μέσα στον βρόχο της do while, θα επαναλαμβάνονται μέχρι κάποια συνθήκη να γίνει ψευδής.

Σύνταξη

do {

...Εντολές...

}while (συνθήκη)

ή

while (συνθήκη){

...Εντολές...

} συνθήκη: η συνθήκη που μέχρις ότου να ισχύσει θα εκτελούνται οι εντολές. Την πρώτη μορφή την χρησιμοποιούμε όταν θέλουμε οποσδήποτε οι εντολές που

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

Παραδείγμα 1Γράψτε ένα πρόγραμμα που θα μας ζητάει έναν αριθμό από το ένα μέχρι το 12. Αν του δώσουμε αριθμό από το 1-12, θα επαναλαμβάνει την ερώτηση, αλλιώς θα τελειώνει. 

#include <iostream.h>#include <stdlib.h>

void main(){

int arithmos=0;

do{    cout<<"Dose arithmo: ";    cin>>arithmos;}while ((arithmos>0)&&(arithmos<=12));

system("pause");

}

 

Παραδείγμα 2Γράψτε ένα πρόγραμμα το οποίο θα μας ζητάει μια σειρά από  αριθμούς. Όταν του δώσουμε το 0, θα σταματήσει να μας ζητάει αριθμούς και θα τυπώνει το άθροισμα

#include <iostream.h>#include <stdlib.h>

void main()

Page 19

Page 20: C++ Aπλά μαθήματα

{

int arithmos;int athroisma=0;

while (arithmos!=0){

     cout<<"Dose arithmo: "<<endl;     cin>>arithmos;     athroisma = athroisma + arithmos;     }

cout<<"To athroisma einai "<<athroisma <<endl;

system("pause");

}

 

Page 20

Page 21: C++ Aπλά μαθήματα

Σχόλια

Πρίν προχωρήσω στους πίνακες θα ήθελα να σου πω δυο λόγια για τα σχόλια μέσα σε ένα πρόγραμμα. Πολλές φορές χρειάζεται να προσθέσουμε σχόλια μέσα σε ένα πρόγραμμα, δηλαδη επεξηγήσεις οι οποίες βοηθούν σε 3 πράγματα:

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

2. Για εκπαιδευτικούς λόγους, δηλαδή να μπορέσούν άλλοι να καταλάβουν τι κάνει κάποιο σηγκεκριμένο σημείο μέσα στον κώδικα.

3. Να τεστάρουμε το πρόγραμμα μας αγνοώντας προσωρινά ένα μέρος του κώδικα χωρίς να χρειαστεί να τον σβήσουμε.

Τα σχόλια τα προσθέτουμε μετά από τις δύο κάθέτους //. Για παράδειγμα έστω ότι γράφουμε μέσα στο πρόγραμμά μας:

int i;                    //dilonoume tis metavlitesint x;for (i=1;i<=40;i++){       //edo i edoli FOR typonei   cout<<”hihihi”<<endl;   //40 fores "hihihi" stin othoni mas}

Σ'αυτό το παράδειγμα ο compiler θα αγνοήσει ότι γράφουμε μετά τις γραμμές //.Άρα δεν έχει σημασία, μπορούμε να γράφουμε ότι θέλουμε μετά τις 2 καθέτους.

Page 21

Page 22: C++ Aπλά μαθήματα

Πίνακες

Οι πίνακες είναι μεταβλητές που έχουν την ιδιότητα να μπορούν να έχουν πάνω από 1 τιμές ταυτόχρονα.Όπως και με τις απλές μεταβλητές, στη C++ τους πίνακες τους δηλώνουμε πρίν τους χρησιμοποιήσουμε ως εξής:

τύπος όνομα_πίνακα[μέγεθος πίνακα];

πχ η εντολή

int pinakas[10];

δηλώνει έναν πίνακα ο οποίος μπορεί να παίρνει μέχρι 10 ξεχωριστούς ακέραιους αριθμούς.

Όταν θέλουμε να καταχωρήσουμε μία τιμή σε μια θέση του πίνακα δηλώνουμε τη θέση του πίνακα που θέλουμε να καταχωρηθεί η τιμή.

ΠΡΟΣΟΧΗ: Οι θέσεις του πίνακα αρχίζουν πάντα από το 0 (Μηδέν).

Φαντάσου ότι ένας πίνακας είναι ένα δωμάτιο που έχει μέσα του αριθμιμένες καρέκλες. Ο pinakas[10] θα είναι ένα δωμάτιο που θα έχει μέσα του 10 καρέκλες οι οποίες όμως θα είναι αριθμημένες από το 0-9.

Έτσι αν θέλουμε να εισάγουμε τις τιμές 1 μέχρι 10 στον πίνακα θα πρέπει να γράψουμε:

pinakas[0]=1;pinakas[1]=2;pinakas[2]=3;pinakas[3]=4;pinakas[4]=5;pinakas[5]=6;pinakas[6]=7;pinakas[7]=8;pinakas[8]=9;pinakas[9]=10;

Παράδειγμα 1Έστω ότι θέλουμε ένα πρόγραμμα το οποίο θα χρησιμοποιεί πινακα και θα τυπώνει τους αριθμούς 1-10 στην οθόνη:

α) Η απλή μέθοδος:

#include <iostream.h>#include <stdlib.h>

void main(){

        int array[10];          //Dilonoume ton Pinaka        array[0]=1;             //Dinoume times ston pinaka        array[1]=2;        array[2]=3;        array[3]=4;        array[4]=5;        array[5]=6;        array[6]=7;        array[7]=8;

Page 22

Page 23: C++ Aπλά μαθήματα

        array[8]=9;        array[9]=10; 

       cout<<array[0]<<endl;   //Typonoume ta periexomena tou        cout<<array[1]<<endl;   //pinaka       cout<<array[2]<<endl;       cout<<array[3]<<endl;       cout<<array[4]<<endl;       cout<<array[5]<<endl;       cout<<array[6]<<endl;       cout<<array[7]<<endl;       cout<<array[8]<<endl;       cout<<array[9]<<endl;

       system("PAUSE");}

β) Η έξυπνη και πρακτική μέθοδος:

#include <iostream.h>#include <stdlib.h>

void main(){

int i;                  //Dilonoume tis metavlites kai int array[10];          //ton pinaka pou tha xrisimopoioisoume for (i=0;i<10;i++){     //"Gemizoume" ton pinaka me times    array[i]=i+1;       //Giati den vazoume array[i]=i ????                        //An valoume array[i]=i tha ton                        //gemisoume me arithmous apo to 0-9                        //kai oxi apo to 1-10                           cout<<array[i]<<endl;//typonoume ta periexomena tou pinaka   }

      system("PAUSE");}

Παράδειγμα 2Γράψε το παραπάνω πρόγραμμα, με τη μαγκιά να τους τυπώνει ανάποδα!!

#include <iostream.h>#include <stdlib.h>

void main(){

     int i;         //Dilonoume tis metavlites kai ton pinaka     int array[10]; //pou tha xrisimopoioisoume

     for (i=0;i<10;i++){ //"Gemizoume" ton pinaka me times          array[i]=i+1;  //kanonika opos prin

     for (i=0;i<10;i++){          //typonoume ta           cout<<array[9-i]<<endl; //periexomenatou pinaka     }                            //apo to telos pros tin arxi

     system("PAUSE");}

Page 23

Page 24: C++ Aπλά μαθήματα

 ΆσκησηΓράψε ενα πρόγραμμα στο οποόο ο χρήστης θα δίνει 10 τιμές δεκαδικές (float). Οι τιμές αυτές θα καταχωρούντε σε ένα πίνακα. Στις τιμές αυτές θα προστίθεται το 18% (...και καλά ΦΠΑ).Στη συνεχεια θα τυπονονται αναποδα!!!!

Δισδιάστατοι Πίνακες

Πως δηλώνουμε 2D πίνακες;

τύπος όνομα_πίνακα[στήλες][γραμμές];

πχ η εντολή

int pinakas[5][10];

δημιουργεί έναν πίνακα με 5 στήλες και 10 γραμμές

  j (στήλες)

   

   

   

     i (γραμμές)                       pinakas[5][10]

Για αναφερθούμε στην τιμή μιας θέσης στον πίνακα αρκεί να δηλώσουμε τις «συντεταγμένες» της θέσης αυτής μέσα στον πίνακα, δηλαδή τη γραμμή που βρίσκεται η θέση αυτή και έπειτα τη στήλη.

πχ. Αν γράψουμε μέσα στο πρόγραμμά μας

pinakas[4][7]=25;

τότε  ο παραπάνω πίνακας θα διαμορφωθεί ως εξής: 

j

   

   

   

   i                                      pinakas[5][10]

Ένας εύκολος τρόπος να γεμίζουμε με τιμές έναν 2D πίνακα:Στη περίπτωση που θέλουμε να γεμίσουμε τον πίνακά μας με αρχικές τιμές οι οποίες διαφέρουν μεταξύ τους μπορούμε να ακολουθήσουμε την εξής μέθοδο όταν δηλώνουμε τον πίνακα!!.

Page 24

  1 2 3 4 5 6 7 8 9 10

1                    

2                    

3                    

4                    

5                    

  1 2 3 4 5 6 7 8 9 10

1                    

2                    

3                    

4             25      

5                    

Page 25: C++ Aπλά μαθήματα

int pinakas[5][10]={   {3,2,3,4,5,4,1,0,1,0},                       {0,2,0,0,5,1,7,8,5,8},                       {0,0,0,0,0,0,0,0,0,0},                       {1,0,3,2,5,4,7,8,9,0},                       {7,2,3,2,8,6,7,2,9,8}                    };

Και θα δημιουργηθεί αυτόματα ένας πίνακας με τις εξής τιμές:

j

   

   

   

    i                              pinakas[5][10]

Αν βέβαια θέλουμε να γεμίσουμε όλον τον πίνακα με μηδενικά πχ. θα χρησιμοποιήσουμε την εξής μέθοδο:

for (i=0;i<=4;i++){           //”saronoume” mia–mia kathe                              //grammi tou pinaka      for (j=0;j<=9;j++){    //”sarronoume” ena-ena ta                              // steiheia tis ekastote grammis            pinakas[i][j]=0; //thetoyme to stoiheio tou                             //pinaka=0      }}

ΠαράδειγμαΈστω ότι θέλουμε να γεμίσουμε έναν πινακα 10x10 με τους αριθμούς από το 1 μέχρι το 100. Στη συνέχεια θα τους τυπώνει με την εξής μορφή:

1 2 3 4 ... ... 1011 12 13 14 ... ... 2021 22 23 24 ... ... 30. . . . . .  . . . . . .  . . . . . .  

91 92 93 94 . . 100

 

#include <iostream.h>#include <stdlib.h>

void main(){

    //dilonoume ton pinaka kai tis metavlites    int pinakas[10][10];    int i,j,metritis=0;

    //eisagoume tis times ston pinaka    for (i=0;i<=9;i++){        for (j=0;j<=9;j++){

Page 25

  1 2 3 4 5 6 7 8 9 10

1 3 2 3 4 5 4 1 0 1 0

2 0 2 0 0 5 1 7 8 5 8

3 0 0 0 0 0 0 0 0 0 0

4 1 0 3 2 5 4 7 8 9 0

5 7 2 3 2 8 6 7 2 9 8

Page 26: C++ Aπλά μαθήματα

            metritis=metritis+1;    //o metritis kathe fora                                    //afxanetai kata 1            pinakas[i][j]=metritis; //eisagoume tin timi tou                                     //metriti sti thesi            }                       //tou pinaka    }

    //ektyponoume ton pinaka stin othoni      for (i=0;i<=9;i++){             for (j=0;j<=9;j++){                   cout<<pinakas[i][j]<<" ";             }             cout<<endl;    //pigainei stin apokato grammi      }

      system("PAUSE");}

 

Page 26

Page 27: C++ Aπλά μαθήματα

Functions

Όπως σε όλες τις γλώσσες προγραμματισμού έτσι και στη C++ σημασία έχει η καλή οργάνωση του προγράμματός μας. Οι functions είναι μικρά «υποπρογράμματα» μέσα στον κώδικά μας που σκοπό έχουν να μας κάνουν τη ζωή μας ποιο εύκολη.

Φαντάσου ότι θέλουμε ένα πρόγραμμα το οποίο να μας εμφανίζει ξεχωριστά για 3 αγορές που κάναμε κάθε μέρα της περασμένης βδομάδας (όπως φαίνεται παρακάτω) το συνολικό ποσό που πληρώσαμε + ΦΠΑ18%.

1) Την Δευτέρα αγοράσαμε προϊόντα αξίας 554, 10 και 20 €2) Την Τρίτη αγοράσαμε προϊόντα αξίας 3.000, 1 και 28 €3) Την Τετάρτη αγοράσαμε προϊόντα αξίας 24, 5 και 43 €4) Την Πέμπτη αγοράσαμε προϊόντα αξίας 54, 98 και 187 €5) Την Παρασκευή αγοράσαμε προϊόντα αξίας 12, 12 και 25 €6) Το Σάββατο αγοράσαμε προϊόντα αξίας 5, 10 και 7 €7) Τη Κυριακή δεν αγοράσαμε τίποτα! Ηταν κλειστά τα μαγαζιά. Από βδομάδα πάλι (0,0 και 0 €)

Αυτό σημαίνει ότι θα πρέπει να επαναλάβουμε την ίδια ακριβώς διαδικασια (δηλαδη να προσθέτουμε τις τιμές κάθε ημέρας και να προσθέτουμε το 18%) 7 φορές! Κάθε φορά θα αλλάζουμε τις εκάστοτε τιμές.Και καλά μου λες εσύ ότι έχεις την γαϊδουρίσια υπομονή να γράψεις τον ίδιο κώδικα 7 φορές. Για φαντάσου να είχες να υπολογίσεις τις αγορές του μήνα!!!

Κατανόηση - Θεωρία

Εδώ έρχεται και μας λύνει τα χέρια η function.

Φαντάσου την function σαν ένα μαγικό κουτί που του δίνουμε εμείς τα δεδομένα που θέλουμε και αυτό τα επεξεργάζεται και ανάλογα με τα δεδομένα μας επιστρέφει το αντίστοιχο αποτέλεσμα.Σημείωση: Μπορούμε βεβαίως να έχουμε μια function η οποία να κάνει κάποια πράγματα χωρίς να μας επιστρέφει τίποτα

Το καλό με τις functions είναι ότι μπορούν (όχι απαραίτητα) και παίρνουν παραμέτρους έτσι ώστε να γενικεύουν την επεξεργασία των δεδομένων σε κάθε περίπτωση.

Μια function είναι άχρηστη από μόνη της. Για να δουλέψει θα πρέπει να την καλέσουμε μέσα στο πρόγραμμα.

Στο παραπάνω πρόβλημα αν καλούσαμε μια function, τότε η είσοδος δεδομένων θα ήταν οι εκάστοτε τιμές κάθε φορά (πχ.

Page 27

Page 28: C++ Aπλά μαθήματα

553,10 και 20 για την Δευτέρα). Η function θα πάρει αυτές τις τιμές θα κάνει την κατάλληλη επεξεργασία όπως εμέις ορίσουμε με τις παραμέτρους δηλαδή θα πεί πχ.

( timi1 + timi2 + timi3 ) * (18/100)

θα αντικαταστήσει τις παραμέτρους με τις εκάστοτε τιμές

(553+10+20)*0,18

και αυτό που θα μας επιστρέψει θα είναι το καθαρό αποτέλεσμα (687,94)

Στην Πράξη

Κάθε πρόγραμμα που γράφουμε έχει πάντα μία κύρια function, τη γνωστή μας main που είναι απαραίτητη στη ροή του προγράμματος.

Τις functions τις γράφουμε έξω από την main αλλά τις καλούμε μέσα σ’αυτήν

Επίσης μπορούμε μέσα σε μια function να καλέσουμε μια άλλη function

 

Μορφή:

τυπος ονομα (τύπος μεταβλητή1, τύπος μεταβλητή2,

τύπος μεταβλητή, ...){                                 …               ΕΝΤΟΛΕΣ ΤΗΣ FUNCTION                                 …

               return τιμή;}

Παράδειγμα:

int mesos_oros(int x, int y, char z[10]){

        …ΕΝΤΟΛΕΣ ΤΗΣ FUNCTION        …

     return x;}

Τύπος: Όπως και στις μεταβλητές, έτσι όταν δημιουργούμε μια function δηλώνουμε τί τύπου είναι η τιμή που μας επιστρέφει (int, char, float κλπ). Σε περίπτωση που δε μας επιστρέφει τίποτα τότε αντι για τον τύπο γράφουμε void(= κενός).

Όνομα: Το όνομα που δίνουμε στη function θα πρέπει να είναι τέτοιο ώστε να μας θυμίζει τι κάνει ή τι μας επιστρέφει. Πχ. Αν μια function μας βρίσκει το ΜΟ κάποιων τιμών τότε προφανώς το όνομα που θα δίναμε σε αυτήν θα ήταν mesos_oros.

Παράμετροι: Μετά το όνομα ακολουθεί μια λίστα με

Page 28

Page 29: C++ Aπλά μαθήματα

παραμέτρους-μεταβλητές οι οποίες θα χρησιμοποιηθούν μόνο και μόνο απο τη συγκεκριμένη function. Τα ονόματα των μεταβλητών δεν έχουν σημασία. Μπορούμε να χρησιμοποιήσουμε σαν ονόματα αυτών των μεταβλητών, ονόματα που έχουμε ήδη χρησιμοποιήσει σε άλλες function ή ακόμα και στην main (Δες Local και Global Μεταβλητές)

Εντολές: Ότι εντολές θέλουμε. Return: Αν η function ειναι void τότε δε χρειάζεται στο

τέλος να προσθέσουμε την εντολή return. Η εντολή return είναι αυτή που μας ειστρέφει την τελική τιμή δηλαδή το τελικό αποτέλεσμα όλης της διεργασίας που έκανε στα δεδομένα η function. Η τιμή αυτή πρέπει να είναι τέτοιου τύπου όπως ορίζει η function. Δεν μπορούμε δηλαδή να έχουμε μια function τύπου int και να μας επιστρέφει μια τιμή τύπου char.

Παράδειγμα 1:1. Πώς θα πραγματοποιήσουμε το παραπάνω πρόγραμμα με τις τιμές:

#include <iostream.h>#include <stdlib.h>

//Ftiaxnoume tin function pou tha kanei ton ypologismo

void exoda_imeras(int timi1, int timi2, int timi3){     float teliki_timi;     teliki_timi=(timi1+timi2+timi3)*0.18;     cout<<teliki_timi<<endl;}

void main(){     exoda_imeras (554,10,20);   //Kaloume tin function me     exoda_imeras (3000,1,28);   //tis ekastote times     exoda_imeras (24,5,43);     exoda_imeras (54,98,187);     exoda_imeras (12,12,25);     exoda_imeras (5,10,7);     exoda_imeras (0,0,0);

     system("PAUSE");}

Παράδειγμα 2:Φτιάξε ένα πρόγραμμα με μια function που θα μας επιστρέφει τον μέσο όρο από 3 ακαιραιους αριθμούς που του δίνουμε:

#include <iostream.h>#include <stdlib.h>

float mesos_oros(float x, float y, float z){      float MO;      MO=(x+y+z)/3;      return MO;}

void main(){      float x,y,z;      cout<<"1os arithmos: ";      cin>>x;endl;

Page 29

Page 30: C++ Aπλά μαθήματα

      cout<<"2os arithmos: ";      cin>>y;endl;      cout<<"3os arithmos: ";      cin>>z;endl;      cout<<"O Mesos Oros einai "<<mesos_oros(x,y,z)<<endl;

      system("PAUSE");}

 

Local(Τοπικές) και Global(Σφαιρικές-Ολικές) Μεταβλητές

Όταν δηλώνουμε μια μεταβλητή μέσα σε μια function τότε η μεταβλητή αυτή χρησιμοποιήται μόνο από την ίδια την function. Για αυτό το λόγο η μεταβλητή ονομάζεται Local.

Υπάρχει περίπτωση να θέλουμε να δηλώσουμε μεταβλητές τις οποίες να μπορούμε να χρησιμοποιήσουμε σε όλο το πρόγραμμα σε όσες και οποιεσδήποτε function χρειάζεται. Για να μπορούμε να έχουμε μια τέτοια Global μεταβλητή η οποία θα είναι διαθέσιμη σε οποιοδήποτε μέρος του προγράμματος την χρησιμοποιήσουμε, θα πρέπει να την δηλώσουμε έξω απο οποιαδήποτε function, ακόμα και από την main.

ΠαράδειγμαΦτιάχνουμε ένα πρόγραμμα που τυπώνει "μπάμια" ή "πεπόνι" ανάλογα:

Έξοδος (Τι μας γράφει στην Οθόνη)

#include <iostream.h>#include <stdlib.h>

typose(){                 //ftiaxnoume mia FUNCTION

 char frouto[25]="peponi"; //Dilonoume LOCAL                           //metavliti cout<<frouto<<endl;

main(){ typose();     //Edo kaloume tin FUNCTION

 system("PAUSE");

peponiPress any key to continue...

Εδώ δημιουργούμε μια function "typose". Αυτή περιέχει μια Local (Τοπικη) μεταβλητή "frouto" η οποία είναι διαθέσιμη μόνο για την ίδια την function

 

2) Έξοδος (Τι μας γράφει στην Οθόνη)

#include <iostream.h>#include <stdlib.h>

peponiPress any key to

Page 30

Page 31: C++ Aπλά μαθήματα

void typose(){                 //ftiaxnoume mia FUNCTION     char frouto[25]="peponi"; //dilonoume LOCAL                                //metavliti     cout<<frouto<<endl;}

void main(){     char frouto[25]="mousmoulo"; //Dilonoume LOCAL                                //metavliti     typose();                 //edo kaloume tin FUNCTION

     system("PAUSE");}

continue...

Εδώ δηλώνουμε άλλη μια Local μεταβλητή μέσα στην main με το ίδιο όνομα "frouto". Το πρόγραμμα δεν μπερδεύει τις δύο μεταβλητές. Χρησιμοποιεί εκείνη που βρίσκεται μέσα στην function από την οποία καλείται.

 

3) Έξοδος (Τι μας γράφει στην Οθόνη)

#include <iostream.h>#include <stdlib.h>

char zarzavatiko[25]="bamia" ; //dilonoume GLOBAL                                //metavliti

void typose(){                 //ftiaxnoume mia FUNCTION     char frouto[25]="peponi";        //dilonoume LOCAL                                //metavliti   cout << frouto << endl;   cout << zarzavatiko << endl;}

void main(){    char frouto[25]="mousmoulo"; //dilonoume LOCAL                                 //metavliti    cout << zarzavatiko << endl;    typose();                  //edo kaloume tin FUNCTION

    system("PAUSE");}

bamiapeponibamiaPress any key to continue...

Εδώ δηλώνουμε και μια Global μεταβλητή "zarzavatiko"  η οποία είναι διαθέσιμη σε όλο το πρόγραμμα. Τυπώνουμε πρώτα το zarzavatiko και μετά εκτελείται η function.

Page 31

Page 32: C++ Aπλά μαθήματα

 

3) Έξοδος (Τι μας γράφει στην Οθόνη)

#include <iostream.h>#include <stdlib.h>

char zarzavatiko[25]="bamia" ;              //dilonoume GLOBAL                                     //metavliti

void typose(){                 //ftiaxnoume mia FUNCTION    char frouto[25]="peponi";   //dilonoume LOCAL                                 //metavliti    cout << frouto << endl;    cout << zarzavatiko << endl;}

void main(){    char frouto[25]="mousmoulo";      //dilonoume LOCAL                                       //metavliti    cout << zarzavatiko << endl;    typose(frouto);            //edo kaloume tin FUNCTION

    system("PAUSE");}

bamiapeponibamiaPress any key to continue...

Εδώ δηλώνουμε και μια Global μεταβλητή "zarzavatiko"  η οποία είναι διαθέσιμη σε όλο το πρόγραμμα. Τυπώνουμε πρώτα το zarzavatiko και μετά εκτελείται η function.

Page 32

Page 33: C++ Aπλά μαθήματα

Structures

Υπάρχουν περιπτώσεις όπου χρειαζόμαστε διαφορετικούς τύπους μεταβλητών απ αυτούς που ξέραμε μέχρι τώρα. Η C++ μας επιτρέπει να δημιουργούμε δικούς μας, σύνθετους, τύπους μεταβλητών.

Τέτοιου είδους μεταβλητών μας διευκολύνουν να διαχειριζόμαστε τις μεταβλητές σε ορισμένες περιπτώσεις

Μορφή

struct όνομα_structure{        τύπος μεταβλητή_1;        τύπος μεταβλητή 2;        τύπος μεταβλητή 3;        ...};

Παράδειγμα

struct book{        char name[10];        char author[10];        int price;};

Την δηλώνουμε πάντα έξω απο την main

Σημαντική σημείωση για χρήση με Strings

Χρειάζεται να συμπεριλάβουμε την βιβλιοθήκη "string.h"

#include <string.h>

Έτσι θα μπορέσουμε να κανουμε ανάθεση τιμών σε μεταβλητές τύπου char με την χρήση της εντολής strcpy.

 

Σύνταξη της strcpy:

strcpy (μεταβλητή, τιμή);

Με την strcpy μπορούμε και "αντιγράφουμε" την τιμή που βρίσκεται στα δεξιά της παρενθέσεως, στην μεταβλητη που βρίσκεται στα αριστερά της παρενθέσεως. Στην ουσία είναι σαν να κάνουμε το εξής μεταβλητή=τιμη; αλλά με τα stractures δεν λειτουργεί αυτό (@#$#!^%*$) οπότε αναγκαστικά

ΠαράδειγμαPage 33

Page 34: C++ Aπλά μαθήματα

#include <iostream.h>#include <stdlib.h>#include <string.h>

struct book{          //ftiaxnoyme ton typo pou theloume. Vivlio    char name[100];   //oi parametroi toy typou    char author[50];    char eidos[20];    float price;};

void main(){    book vivlio1,vivlio2,vivlio3;   //dilonoume 3 metavlites                                    //typou "book"

    //Katahoroume tis times stis metavlites typou "book"    strcpy (vivlio1.name, "20.000 levges");    strcpy (vivlio1.author, "Ioulios Vern");    strcpy (vivlio1.eidos, "Epistimoniki Fadasia");    vivlio1.price=35.1;

    strcpy(vivlio2.name, "O Dolofonos me to Pirouni");    strcpy(vivlio2.author, "Takis Palavos");    strcpy(vivlio2.eidos, "Tromou");    vivlio2.price=30.14;

    strcpy(vivlio3.name, "H Siopili Kravgi");    strcpy(vivlio3.author, "Souzy Tsouzy");    strcpy(vivlio3.eidos, "Mythistorima");    vivlio3.price=28.7;

    //ektyponoume stin othoni    cout<<"To 1o vivlio to ehei grapsei o "<<vivlio1.author<<endl;    cout<<"To 2o vivlio onomazetai '"<<vivlio1.name<<"'"<<endl;    cout<<"To 3o vivlio kostizei "<<vivlio1.price<<" EU"<<endl;

    system("PAUSE");}

 

Άσκηση:(Όποιος θέλει την κάνει)Να γράψετε ένα πρόγραμμα όπου θα φτιάχνετε έναν τύπο μεταβλητής με το όνομα student. Οι παράμετροι που θα πέρνει αυτός ο τύπος θα είναι το όνομα του μαθητή, το επίθετο, η ηλικία και ο βαθμός. Θα δημιουργήσετε 3 μεταβλητές τύπου student για 3 μαθητές σας(λεμε τωρα). Στη συνέχεια θα φένονται αυτά τα στοιχεία στην οθόνη.

Page 34