Professional Documents
Culture Documents
C++ Aπλά μαθήματα
C++ Aπλά μαθήματα
#include <iostream.h>
#include <stdlib.h>
void main()
{
...
ΕΝΤΟΛΕΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
...
Case Sensitive: Η C++ είναι μια γλώσσα case sensitive. Αυτό σημαίνει οτι ξεχωρίζει τα
κεφαλαία από τα πεζά γράμματα και έτσι θα πρέπει να είμαστε προσεκτική στο τί γράφουμε,
γιατί αν γράψουμε μια εντολή με κεφαλαία ενώ θα έπρεπε να την γράψουμε με πεζά, δεν θα
γίνει κατανοητή από τον compiler, και θα βγάλει μήνυμα σφάλματος.
Page 1
Η εντολή εξόδου COUT
Πάμε να γράψουμε το πρώτο μας πρόγραμμα. Ένα πρόγραμμα το οποίο θα τυπώνει στην
οθονη την φράση "ftou skoulikomirmigotrypa"
#include <iostream.h>
#include <stdlib.h>
void main()
{
cout<<"ftou skoulikomirmigotrypa"<<endl;
system("PAUSE");
• endl: Στο πρόγραμμά μας, μετά από την εντολή cout, ακολουθεί η εντολή endl; Αυτή
η εντολή μας μεταφέρει τον κέρσορα, μια γραμμή ποιο κάτω. Είναι σαν να πατάμε
Enter στο MS Word. Χρησιμεύει για να ξεχωρίζουμε τα αποτελέσματά μας στην
οθόνη.
• system("PAUSE"): Δε ξέρω για τους άλλους compilers, στον Dev-C++ πάντος αυτή
η εντολή, χρειάζεται υποχρεωτικά στο τέλος του προγράμματος, για να μπορέσουμε
να δούμε τα αποτελέσματα μάς. Αν δε τον συμπεριλάβουμε, τότε το παράθυρο θα
κλείσει σε χρόνο dt, χωρίς να μπορέσουμε να δούμε τι κάναμε. Σε φυσιολογικές
συνθήκες, το πρόγραμμα μας θα έχει τελειώσει όταν δούμε στην οθόνη το μύνημα
"Press any key to continue".
• Το ελληνικό ερωτηματικό (;): Συμβολίζει το τέλος της κάθε εντολής. Πολλές φορές
όταν το ξεχνάμε χτυπάει ο compiler *
Λεξιλόγιο
*χτυπάει ο compiler = μας βγάζει μύνημα οτι κάτι έχουμε κάνει λάθος
Page 2
Μεταβλητές
Όπως λέει και το όνομά, οι τιμές αυτές τις περισσότερες φορές μεταβάλονται. Η τιμή αυτή
μπορεί να είναι απο ένας θετικός ή αρνητικός αριθμός μέχρι μια λέξη, ή μια ολόκληρη
πρόταση. Έτσι ανάλογα με τί τιμή μπορεί να πάρει κάθε μεταβλητή τις χωρίζουμε σε
διάφορους τύπους.
Στον παρακάτω πίνακα αναφέρονται οι τύποι των μεταβλητών, το μέγεθος των byte που
χρησιμοποιούν, καθώς και η εμβέλεια των τιμών που μπορούν να πάρουν.
Ονοματολογία
Επίσης στις μεταβλητές δίνουμε και ονόματα. Βεβαίως δε θα μπορούσαμε να ονομάσουμε μια
μεταβλητή Αλέξανδρο, Σούζυ ή Μπάμπη. Συνήθως τα ονόματα που δίνουμε στις μεταβλητές,
χαρακτηρίζουν την ιδιότητα της τιμής που αποθηκεύουν, έτσι ώστε να θυμίζει και στον
προγραμματιστή.
Πχ. αν θέλουμε μια μεταβλητή η οποία να αποθηκεύει την ηλικία του χρήστη, τότε θα την
ονομάσουμε ilikia ή age.
Page 3
Τις μεταβλητές τις δηλώνουμε, δηλώνοντας πρώτα τον τύπο της μεταβλητής, το όνομά της,
και αν θέλουμε ορίζουμε και μια αρχική τιμή.
τύπος όνομα;
Η ανάθεση όπως φένεται από το δείγμα, γίνεται με το σύμβολο του ίσον (=). Από τη στιγμή
που ο compiler θα δεί μια τέτοια ισότητα, θα πάει στο "κουτάκι" που προαναφέραμε και θα το
γεμίσει με την τιμή που βρίσκεται δεξιά από το ίσον. Πχ
και το κουτάκι θα
διαμορφωθεί ως εξής:
Από δώ και στο εξής, οπουδήποτε χρησιμοποιήσουμε την μεταβλητή arithmos, θα είναι σα
να χρησιμοποιούμε τον αριθμό 235.
Επίσης, μπορούμε σε οποιοδήποτε μέρος του προγράμματος να αλλάξουμε την τιμή της
μεταβλητής arithmos, με μια καινούρια τιμή, πάλι με ανάθεση, αρκεί δηλαδή να γράψουμε
arithmos = 14;
Σημειώστε οτι αυτή τη φόρά δε χρειάζεται να συμπεριλάβουμε την λέξη int στην εντολή μας,
γιατί την μεταβλητή την έχουμε ήδη δηλώσει πιο πάνω στο πρόγραμμα.
#include <iostream.h>
#include <stdlib.h>
void main(){
char frouto[10]="peponi";
system("PAUSE");
Στην αρχή δηλώνουμε μια μεταβλητή τύπου char με το όνομα frouto η οποία μπορεί να
πάρει το πολύ μέχρι 10 χαρακτήρες.
Στην ίδια γραμμή, ορίζουμε ως αρχική τιμή για την μεταβλητή frouto, το string "peponi".
Στην συνέχεια ζητάμε από το πρόγραμμα να μας εκτυπώσει στην οθόνη τα περιεχόμενα της
μεταβλητής frouto, δηλαδή, αυτό που θα δούμε τελικά στην οθόνη θα είναι η λέξη "peponi".
Page 4
Άλλα παραδείγματα δηλώσεων μεταβλητών και αναθέσεων τιμών σε
αυτές:
• int x;
x=3459;
• int y;z;
Δηλώνουμε έναν ακαίραιο με το όνομα age και ταυτόχρονα του δίνουμε την
τιμή 18. Επιλέξαμε short γιατί χρησιμοποιεί λιγότερα bytes απ' ότι ο τύπος int
και μας βοηθάει στην εξοικονόμηση μνήμης.
• float price;
price=5.2;
• float pi=3.14;
• double eti_fotos;
• char onoma[10]="Maria";
Δηλώνουμε μια ακολουθία 10 χαρακτήρων onoma, και της δίνουμε για αρχική
τιμή τη λέξη "Maria".
Page 5
Σημείωση 2: Οι ακολουθίες χαρακτήρων (ή αλλιώς strings), πάντα πρέπει να
βρίσκονται μέσα σε διπλά εισαγωγικά (αυτάκια). Έτσι και δε συμπεριλάβουμε αυτάκια,
δηλαδή έτσι και γράψουμε
char onoma[10]=Maria;
αυτό που θα καταλάβει ο compiler είναι οτι αναθέτουμε στην μεταβλητή όνομα, την τιμή
μιας άλλης υποτιθέμενης μεταβλητής με το όνομα Maria.
• char countdown[15]="321";
Προσοχή!!! Το 321, το λαμβάνει σαν φράση και όχι σαν αριθμό, επειδή βρίσκεται
μέσα σε εισαγωγικά.
• int x=5+4;
• bool condition=true;
Εδώ ορίζουμε μια μεταβλητή τύπου Boolean. Αυτός είναι ένας περίεργος
τύπος μεταβλητής. Οι μεταβλητές αυτές, μπορούν να πάρουν μόνο 2 τιμές,
τις τιμές true (1) ή false (0).
Page 6
Πράξεις και Μεταβλητές
Σημείωση: Για εξοικονόμηση χώρου και χρόνου, από δώ και στο εξής, όπου αναφέρω
παραδείγματα σε κώδικα 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
Οι πράξεις με το σύμβολο του ποσοστού %, μας επιστρέφει το υπόλοιπο της ακέραιας
διαίρεσης. Διαιρεί δηλαδή τους συντελεστές της πράξης και μας δίνει το υπόλοιπο. Έχουμε
πχ
• 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. Σε κανόνικές συνθήκες θα έπρεπε να γράψουμε
x=x+1;
x++;
x--;
Page 8
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");
όταν ο compiler βλέπει αυτήν την εντολή, τότε το πρόγραμμα σταματάει, και
περιμένει ανταπόκριση από τον χρήστη, μέχρι να πληκτρολογίσει κάτι και
να πατήσει το Enter. Στη συνέχεια, την τιμή που πληκτρολογουμε την
αναθέτει στην μεταβλητή που γράφουμε στα δεξιά της εντολής.
• Στη συνέχεια εκτυπώνουμε το μύνημα "To onoma sou einai " ακολουθούμενο
από την τιμή της μεταβλητής onoma, η οποία είναι πλέον αυτό που έχει
πληκτρολογήσει ο χρήστης.
Page 9
Η εντολή επανλάληψης 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
Η Boolean λογική
Οι Boolean είναι μεταβλητές οι οποίες μπορούν να πάρουν δύο μόνο τιμές. TRUE ή FALSE.
Πέρα από τις Boolean μεταβλητές χρησιμοποιούμε την λεγόμενη Boolean μεθοδο για να
προσδιορίσουμε αν μια συνθήκη είναι αληθής ή ψευδής μέσα σε ένα πρόγραμμα. Τέτοιες
συνθήκες συνήθως είναι όταν βάζουμε το πρόγραμμα να ελέγχει ισότητες και ανισότητες.
Παρακάτω αναφέρονται τα σύμβολα που χρησιμοποιούμε για τον έλεγχο αυτό
== Ισο
> μεγαλύτερο
< μικρότερο
!= άνισο
Παράδειγμα έστω οτι έχουμε την συνθηκη x>=5. Αν όντος το x είναι μεγαλύτερο ή ίσο του 5,
τότε αυτή η συνθήκη είναι TRUE, αλλιώς είναι FALSE.
Η παραπάνω συνθήκη είναι απλή. Πέρα από τις απλές έχουμε και τις σύνθετες συνθήκες. Οι
σύνθετες συνθήκες συνδιάζουν δύο ή και περισσότερες συνθήκες όπως η παραπάνω. Οι
συνθήκες αυτές συνδέονται με κάποια συνδετικά. Ανάλογα με αυτά τα συνδετικά, και το αν οι
επι μέρους συνθήκες είναι αληθείς ή ψευδείς, ολόκληρη η σύνθετη συνθήκη μπορεί να είναι
αληθής ή ψευδής. Τα συνδετικά αυτά είναι:
|| OR Λογικό Η
^ XOR Λογικο Ή
Page 11
συνθήκη Α συνθήκη Β αποτέλεσμα
TRUE OR TRUE = TRUE
TRUE OR FALSE = TRUE
FALSE OR TRUE = TRUE
FALSE OR FALSE = FALSE
Για να γίνουν πιο κατανοητές αυτές οι πράξεις, παρακάτω χρησιμοποιούμε ένα πιο
καθημερινό παράδειγμα:
Η Μαρία λοιπόν
α) πήγε στο σχολείο ΚΑΙ πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ
β) πήγε στο σχολείο ΚΑΙ δεν πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ
γ) δεν πήγε στο σχολείο ΚΑΙ πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ
δ) δεν πήγε στο σχολείο ΚΑΙ δεν πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ
! Δεν μας απασχολεί που μπορεί να πήγε η Μαρία αφού ούτε στο σχολείο πήγε ούτε και για
καφέ ;)
συνθήκη Α OR συνθήκη Β
Η Μαρία λοιπόν:
α) πήγε στο σχολείο και μετά πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ
β) πήγε στο σχολείο αλλα δεν πήγε για καφε Άρα είπε ΑΛΗΘΕΙΑ
Page 12
γ) δεν πήγε στο σχολείο αλλά πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ
δ) δεν πήγε ούτε σχολείο ούτε για καφέ Άρα είπε ΨΕΜΑΤΑ
Η Μαρία λοιπόν
α) πήγε στο σχολείο και μετά πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ
δεν πήγε για
β) πήγε στο σχολείο αλλά Άρα είπε ΑΛΗΘΕΙΑ
καφέ
γ) δεν πήγε στο σχολείο αλλά πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ
δ) δεν πήγε ούτε στο σχολείο ούτε για καφέ Άρα είπε ΨΕΜΑΤΑ
NOT συνθήκη Α
Λέει η Μαρία στη μαμά της:
Η Μαρία λοιπόν
α) πήγε για καφέ Άρα είπε ΨΕΜΑΤΑ
β) δεν πήγε για καφέ Άρα είπε ΑΛΗΘΕΙΑ
Page 13
Η εντολή διάζευξης 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;
if (x>=0)
cout<<"O arithmos einai thetikos"<<endl;
else
cout<<"O arithmos einai arnitikos"<<endl;
system("PAUSE");
Page 14
}
Page 15
Η εντολή διάζευξης SWITCH
Η εντολή switch είναι περίπου σαν την if. Την χρησιμοποιούμε όμως όταν οι περιπτώσεις
που μπορεί να έχουμε είναι χαρακτηριστικά πολλές.
Σύνταξη
switch (μεταβλητή){
• μεταβλητή: Μια μεταβλητή της οποίας την τιμή ελέγχουμε στη συνέχεια.
• case: Στη συνέχεια ο compiler ελέγχει μια προς μια τις τιμές μέσα στον βρόχο της
switch. Αν κάποια από αυτές τις τιμές ισούται με την τιμή της μεταβλητής, τότε
εκτελούνται οι εντολές που βρίσκονται στα δεξιά, και κατόπιν βγένει από τον βρόχο
με την βοήθεια της εντολής break.
• default: Αν καμία από αυτές τις τιμές δεν ισούται με την τιμή της μεταβλητής, τότε
εκτελούνται οι εντολές που ορίζει το default.
Ας γράψουμε ένα πρόγραμμα που θα ζητάει να του δώσουμε έναν βαθμό από το 1-5.
Ανάλογα με τον βαθμό θα διατυπώνεται το ανάλογο μύνημα
#include <iostream.h>
#include <stdlib.h>
void main()
{
int 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 16
• Δηλώνουμε μια μεταβλητή vathmos.
• Εκτυπώνουμε το μύνημα "Dose vathmo: "
• Gίνεται είσοδος ενός αριθμού από τον χρήστη με την cin, και αναθέτεται στην
μεταβλητή βαθμός.
• Ελέγχεται αν η τιμή της μεταβλητής vathmos συμπίπτει με κάποια από τις τιμές
μέσα στον βροχο της switch. Αν ναι, τότε τυπώνεται το μύνημα στα δεξιά της
σωστής τιμής.
• Αν όχι, εκτυπώνεται το μύνημα "eipame apo 1-5".
Page 17
Η εντολή επανάληψης 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 18
{
int arithmos;
int athroisma=0;
while (arithmos!=0){
system("pause");
Page 19
Σχόλια
Πρίν προχωρήσω στους πίνακες θα ήθελα να σου πω δυο λόγια για τα σχόλια μέσα σε ένα
πρόγραμμα.
Πολλές φορές χρειάζεται να προσθέσουμε σχόλια μέσα σε ένα πρόγραμμα, δηλαδη
επεξηγήσεις οι οποίες βοηθούν σε 3 πράγματα:
Τα σχόλια τα προσθέτουμε μετά από τις δύο κάθέτους //. Για παράδειγμα έστω ότι γράφουμε
μέσα στο πρόγραμμά μας:
Σ'αυτό το παράδειγμα ο compiler θα αγνοήσει ότι γράφουμε μετά τις γραμμές //.
Άρα δεν έχει σημασία, μπορούμε να γράφουμε ότι θέλουμε μετά τις 2 καθέτους.
Page 20
Πίνακες
Οι πίνακες είναι μεταβλητές που έχουν την ιδιότητα να μπορούν να έχουν πάνω από 1 τιμές
ταυτόχρονα.
Όπως και με τις απλές μεταβλητές, στη C++ τους πίνακες τους δηλώνουμε πρίν τους
χρησιμοποιήσουμε ως εξής:
πχ η εντολή
int pinakas[10];
δηλώνει έναν πίνακα ο οποίος μπορεί να παίρνει μέχρι 10 ξεχωριστούς ακέραιους αριθμούς.
Όταν θέλουμε να καταχωρήσουμε μία τιμή σε μια θέση του πίνακα δηλώνουμε τη θέση του
πίνακα που θέλουμε να καταχωρηθεί η τιμή.
Φαντάσου ότι ένας πίνακας είναι ένα δωμάτιο που έχει μέσα του αριθμιμένες καρέκλες. Ο
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(){
Page 21
array[9]=10;
system("PAUSE");
}
#include <iostream.h>
#include <stdlib.h>
void main(){
system("PAUSE");
}
Παράδειγμα 2
Γράψε το παραπάνω πρόγραμμα, με τη μαγκιά να τους τυπώνει ανάποδα!!
#include <iostream.h>
#include <stdlib.h>
void main(){
system("PAUSE");
}
Page 22
Άσκηση
Γράψε ενα πρόγραμμα στο οποόο ο χρήστης θα δίνει 10 τιμές δεκαδικές (float). Οι τιμές αυτές
θα καταχωρούντε σε ένα πίνακα.
Στις τιμές αυτές θα προστίθεται το 18% (...και καλά ΦΠΑ).
Στη συνεχεια θα τυπονονται αναποδα!!!!
Δισδιάστατοι Πίνακες
Πως δηλώνουμε 2D πίνακες;
τύπος όνομα_πίνακα[στήλες][γραμμές];
πχ η εντολή
int pinakas[5][10];
1 2 3 4 5 6 7 8 9 10 j (στήλες)
1
2
3
4
5
i
(γραμμές) pinakas[5][10]
Για αναφερθούμε στην τιμή μιας θέσης στον πίνακα αρκεί να δηλώσουμε τις «συντεταγμένες»
της θέσης αυτής μέσα στον πίνακα, δηλαδή τη γραμμή που βρίσκεται η θέση αυτή και έπειτα
τη στήλη.
pinakas[4][7]=25;
1 2 3 4 5 6 7 8 9 10 j
1
2
3
4 25
5
i pinakas[5][10]
Page 23
{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}
};
1 2 3 4 5 6 7 8 9 10 j
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
i pinakas[5][10]
Αν βέβαια θέλουμε να γεμίσουμε όλον τον πίνακα με μηδενικά πχ. θα χρησιμοποιήσουμε την
εξής μέθοδο:
Παράδειγμα
Έστω ότι θέλουμε να γεμίσουμε έναν πινακα 10x10 με τους αριθμούς από το 1 μέχρι το 100.
Στη συνέχεια θα τους τυπώνει με την εξής μορφή:
1 2 3 4 ... ... 10
11 12 13 14 ... ... 20
21 22 23 24 ... ... 30
. . . . . .
. . . . . .
. . . . . .
91 92 93 94 . . 100
#include <iostream.h>
#include <stdlib.h>
void main(){
Page 24
//metriti sti thesi
} //tou pinaka
}
system("PAUSE");
}
Page 25
Page 26
Functions
Όπως σε όλες τις γλώσσες προγραμματισμού έτσι και στη C++ σημασία έχει η καλή
οργάνωση του προγράμματός μας. Οι functions είναι μικρά «υποπρογράμματα» μέσα
στον κώδικά μας που σκοπό έχουν να μας κάνουν τη ζωή μας ποιο εύκολη.
Φαντάσου ότι θέλουμε ένα πρόγραμμα το οποίο να μας εμφανίζει ξεχωριστά για 3
αγορές που κάναμε κάθε μέρα της περασμένης βδομάδας (όπως φαίνεται
παρακάτω) το συνολικό ποσό που πληρώσαμε + ΦΠΑ18%.
Αυτό σημαίνει ότι θα πρέπει να επαναλάβουμε την ίδια ακριβώς διαδικασια (δηλαδη
να προσθέτουμε τις τιμές κάθε ημέρας και να προσθέτουμε το 18%) 7 φορές! Κάθε
φορά θα αλλάζουμε τις εκάστοτε τιμές.
Και καλά μου λες εσύ ότι έχεις την γαϊδουρίσια υπομονή να γράψεις τον ίδιο κώδικα 7
φορές. Για φαντάσου να είχες να υπολογίσεις τις αγορές του μήνα!!!
Κατανόηση - Θεωρία
Το καλό με τις functions είναι ότι μπορούν (όχι απαραίτητα) και παίρνουν
παραμέτρους έτσι ώστε να γενικεύουν την επεξεργασία των δεδομένων σε κάθε
περίπτωση.
Μια function είναι άχρηστη από μόνη της. Για να δουλέψει θα πρέπει να την
καλέσουμε μέσα στο πρόγραμμα.
(553+10+20)*0,18
Όταν δηλώνουμε μια μεταβλητή μέσα σε μια function τότε η μεταβλητή αυτή χρησιμοποιήται μόνο από την ίδια την
function. Για αυτό το λόγο η μεταβλητή ονομάζεται Local.
Υπάρχει περίπτωση να θέλουμε να δηλώσουμε μεταβλητές τις οποίες να μπορούμε να χρησιμοποιήσουμε σε όλο
το πρόγραμμα σε όσες και οποιεσδήποτε function χρειάζεται. Για να μπορούμε να έχουμε μια τέτοια Global
μεταβλητή η οποία θα είναι διαθέσιμη σε οποιοδήποτε μέρος του προγράμματος την χρησιμοποιήσουμε, θα πρέπει
να την δηλώσουμε έξω απο οποιαδήποτε function, ακόμα και από την main.
Παράδειγμα
Φτιάχνουμε ένα πρόγραμμα που τυπώνει "μπάμια" ή "πεπόνι" ανάλογα:
void main(){
typose(); //Edo kaloume tin FUNCTION
system("PAUSE");
}
Εδώ δημιουργούμε μια function "typose". Αυτή περιέχει μια Local (Τοπικη) μεταβλητή "frouto" η οποία
είναι διαθέσιμη μόνο για την ίδια την function
void main(){
char frouto[25]="mousmoulo"; //Dilonoume LOCAL
//metavliti
typose(); //edo kaloume tin
FUNCTION
Page 28
system("PAUSE");
}
Εδώ δηλώνουμε άλλη μια Local μεταβλητή μέσα στην main με το ίδιο όνομα "frouto". Το πρόγραμμα δεν
μπερδεύει τις δύο μεταβλητές. Χρησιμοποιεί εκείνη που βρίσκεται μέσα στην function από την οποία καλείται.
void main(){
char frouto[25]="mousmoulo"; //dilonoume LOCAL
//metavliti
cout << zarzavatiko << endl;
typose(); //edo kaloume tin
FUNCTION
system("PAUSE");
}
Εδώ δηλώνουμε και μια Global μεταβλητή "zarzavatiko" η οποία είναι διαθέσιμη σε όλο το πρόγραμμα.
Τυπώνουμε πρώτα το zarzavatiko και μετά εκτελείται η function.
void main(){
Page 29
char frouto[25]="mousmoulo"; //dilonoume
LOCAL
//metavliti
cout << zarzavatiko << endl;
typose(frouto); //edo kaloume tin
FUNCTION
system("PAUSE");
}
Εδώ δηλώνουμε και μια Global μεταβλητή "zarzavatiko" η οποία είναι διαθέσιμη σε όλο το πρόγραμμα.
Τυπώνουμε πρώτα το zarzavatiko και μετά εκτελείται η function.
Page 30
Structures
Υπάρχουν περιπτώσεις όπου χρειαζόμαστε διαφορετικούς τύπους μεταβλητών απ αυτούς
που ξέραμε μέχρι τώρα. Η C++ μας επιτρέπει να δημιουργούμε δικούς μας, σύνθετους,
τύπους μεταβλητών.
Μορφή
struct όνομα_structure{
τύπος μεταβλητή_1;
τύπος μεταβλητή 2;
τύπος μεταβλητή 3;
...
};
Παράδειγμα
struct book{
char name[10];
char author[10];
int price;
};
#include <string.h>
Έτσι θα μπορέσουμε να κανουμε ανάθεση τιμών σε μεταβλητές τύπου char με την χρήση της
εντολής strcpy.
Με την strcpy μπορούμε και "αντιγράφουμε" την τιμή που βρίσκεται στα δεξιά της
παρενθέσεως, στην μεταβλητη που βρίσκεται στα αριστερά της παρενθέσεως. Στην ουσία
είναι σαν να κάνουμε το εξής μεταβλητή=τιμη; αλλά με τα stractures δεν λειτουργεί αυτό
(@#$#!^%*$) οπότε αναγκαστικά
Παράδειγμα
Page 31
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
void main(){
book vivlio1,vivlio2,vivlio3; //dilonoume 3 metavlites
//typou "book"
system("PAUSE");
}
Page 32