Wednesday, 11 January 2012

2. Μαθήματα Προγραμματισμού με τη C++,

Variables(Μεταβλητές) 
Σίγουρα θα έχετε ακούσει τον όρο μεταβλητές στα μαθηματικά(συνήθως τη μεταβλητή Χ) στα οποία αντιπροσωπεύει κάποιον αριθμό.Στο προγραμματισμό είναι περίπου το ίδιο. 
Θα ξεκινήσω λέγοντας πως ο επεξεργαστής εκτελεί όπως είπαμε και στο προηγούμενο μάθημα με τη σειρά τις εντολές που του δίνουμε. Μία από αυτές τις εντολές είναι να δεσμεύσει κάποιο χώρο στη μνήμη Ram για να τη χρησιμοποιήσουμε. Τι ακριβός βάζουμε στη μνήμη RAM ? Στη RAM μπορούμε να βάλουμε αριθμούς, χαρακτήρες, προτάσεις (stings) ή και ολόκληρα αρχεία πχ εικόνες. Στο συγκεκριμένο μάθημα θα ασχοληθούμε μόνο με αριθμούς και strings.


Για να καταλάβουμε καλύτερα πως λειτουργεί η RAM και η δέσμευση μνήμης θα φανταστούμε πως η RAM είναι ένας ακόμη σκληρός δίσκος με αρχεία και φακέλους. Κάθε φάκελος είναι ένα πρόγραμμα που περιλαμβάνει τα αρχεία του(μεταβλητές). Κάθε αρχείο ανάλογα με το τι περιέχει (αριθμούς, γράμματα, προτάσεις) θα έχει και συγκεκριμένο μέγεθος. Επίσης και η RAM έχει συγκεκριμένο μέγεθος.



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

char (χαρακτήρας πχ,α,β,-,*) : 1 byte
int (integer = ακέραιος αριθμός πχ 100) : 4 bytes 
float (δεκαδικός αριθμός πχ 12.30): 4 bytes 
double (δεκαδικός αριθμός για μεγαλύτερες τιμές): 8 bytes
bool (αληθής η ψευδής πχ true): 1 byte

Μεταβλητή τύπου Bool:
bool είναι ένας τύπος που απλά κρατάει αν είναι αληθές η ψευδές κάτι.
Παράδειγμα το mute του ήχου στο λειτουργικό σύστημα σας έχει μία μεταβλητή bool.
Αν είναι ανοιχτός ο ήχος η μεταβλητή mute(σίγαση) είναι ψευδής.
Αν είναι κλειστός ο ήχος η μεταβλητή mute είναι αληθής.(γιατί όντος είσαι σε κατάσταση σίγασης) 

Όρια αριθμών:
Ο κάθε τύπος μεταβλητής έχει ένα όριο για τι αριθμούς μπορεί να κρατήσει.
πχ ο integer μπορεί να πάρει τιμές απο το -2147483648 μέχρι 2147483647.
Θα ξανά αναφερθώ σε αυτά παρακάτω. 

Τύπος string:
Ένας άλλος τύπος μεταβλητής που θα δούμε σήμερα είναι το string ( οι προτάσεις/λέξεις δλδ ).
To string δεν έχει συγκεκριμένο μέγεθος. Ουσιαστικά το string είναι μια σειρά από πολλές τύπου char μεταβλητές. Πχ η πρόταση: "Γεια σας" περιλαμβάνει 8 χαρακτήρες(μαζί με το κενό) άρα ο τύπος string είναι ίσος με 8 μεταβλητές char (8 bytes). Αν η πρόταση ήταν μεγαλύτερη η μικρότερη θα είχαμε διαφορετικό μέγεθος.

Θα ξανά αναφερθώ στις μεταβλητές και στο μέγεθός τους πιο μετά. 
Επίσης δεν υπάρχει πραγματικά τύπος μεταβλητής song. 
Θα δούμε σε παρακάτω μάθημα πως φτιάχνουμε δικές μας μεταβλητές.

Πρόγραμμα Μαθήματος:
Ας φτιάξουμε όμως τώρα ένα πρόγραμμα για να καταλάβουμε καλύτερα τη χρησιμότητα των μεταβλητών.Ξεκινάμε δείχνοντας στο πρόγραμμα τα αρχεία που περιέχουν τις εντολές μας και την ομάδα που ανήκουν.
#include <iostream>
#include <string>
using namespace std;

Θα παρατηρήσατε πως προσθέσαμε ακόμη ένα αρχείο στο πρόγραμμα μας που ονομάζεται "string"Αυτό το αρχείο είναι απαραίτητο για να χρησιμοποιήσουμε τον τύπο μεταβλητής string(προτάσεις).

Πάμε στην Βάση του προγράμματος μας:
int main()
{
     int ilikia;
     ilikia = 20;
     string onoma = "Γιάννης";
   
     cout << "Ονομα " << onoma << endl;
     cout << "Ηλικία " << ilikia;
     return 0;
}

Πολλά καινούργια πράγματα στο νέο μας πρόγραμμα ας τα δούμε σιγά σιγά.
int ilikia;
Δημιουργούμε μια μεταβλητή τύπου integer με το όνομα ilikia.(στα μαθηματικά μπορεί να ήταν x). *Ας πούμε ότι με αυτό τον τρόπο δημιουργούμε ένα αρχείο με όνομα ilikia, τύπου integer μέσα στο φάκελο του προγράμματος μας( το οποίο βρίσκεται μέσα στη RAM) που ξέρουμε ότι το μέγεθος του είναι 4 bytes.*
Μπορείτε να δώσετε ότι όνομα θέλετε στη μεταβλητή(φανταστείτε το ως αρχείο) αλλά πρέπει να ξεκινάει με χαρακτήρα ή κάτω παύλα.
Επίσης υπάρχουν μερικές λέξεις που δεν μπορούν να μπουν στο όνομα της μεταβλητής γιατί είναι εντολές που κάνουν κάτι άλλο.

Απαγορευμένα ονόματα μεταβλητών:
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while

Ύστερα βλέπουμε το εξής
ilikia = 20;
Η μεταβλητή μας δημιουργήθηκε στην προηγούμενη γραμμή.
Τώρα θέλουμε να της περάσουμε μια τιμή , μια ηλικία. Αυτό το κάνουμε με το "ονομαΜεταβλητής = kati; ".
Τώρα η μεταβλητή ilikia έχει μέσα της τον αριθμό 20.

Πάμε παρακάτω
string onoma = "Γιάννης";
Δημιουργούμε μια μεταβλητή τύπου string με όνομα onoma και ακριβός στην ίδια γραμμή  βάζουμε μέσα της την λέξη ¨Γιάννης". Μπορείτε σε όλου του είδους τις μεταβλητές να τις δημιουργήτε και να τους δίνεται τιμές στην ίδια γραμμή.

Εμφάνιση στο terminal 
cout << "Ονομα " << onoma << endl;
cout << "Ηλικία " << ilikia;

Στο προηγούμενο μάθημα είπαμε πως μπορούμε να γράψουμε δύο διαφορετικές προτάσεις σε μία βάζοντας ανάμεσα στις προτάσεις << .Εδώ έχουμε μία λέξη στη κάθε εντολή cout και μία μεταβλητή. Όταν δίνουμε μια μεταβλητή στο terminal,αυτό δε θα διαβάσει το όνομα της μεταβλητής(το όνομα του αρχείου) αλλά αυτό που έχει μέσα. Τρέξτε το πρόγραμμα να δείτε το αποτέλεσμα.

Όνομα Γιάννης
Ηλικία 20

Το terminal διάβασε τι είχαν μέσα οι μεταβλητές και αυτό εμφάνισε.
Για να δούμε την εικόνα μέσα στη μνήμη Ram του προγράμματός μας τώρα.

  
Γρήγορη Επανάληψη:

Δημιουργία μεταβλητών:


Εμφάνιση μεταβλητών:
cout << onomaMetavlitis;

Μέγεθος Μεταβλητών Συνέχεια:
Μερικές φορές μπορεί να χρειαστούμε μεγαλύτερο αριθμό από το επιτρεπτό ή να μη θέλουμε να χρησιμοποιήσουμε τόσο πολύ χώρο από τη RAM(πράγμα που πρέπει να σκέφτεστε συνέχεια σαν καλοί προγραμματιστές). Η λύσεις είναι οι λέξεις, long, short, unsigned.
Ας πούμε ότι έχουμε μια μεταβλητή που μετράει δευτερόλεπτα. Αυτή η μεταβλητή δε θα είναι ποτέ αρνητική. Επίσης αυτή η μεταβλητή μετά απο αρκετή ώρα μπορεί να πάρει μεγάλες διαστάσεις.

Η λύση είναι να τη δηλώσουμε ως εξής:
unsigned int defterolepta;
unsigned σημαίνει ο αριθμός να μην έχει πρόσημο.
Τώρα η μεταβλητή defterolepta μπορεί να πάρει τιμές από το 0 μέχρι το 4294967295. Το διπλάσιο δηλαδή από πριν. 

Αν έχουμε έχουμε μια μεταβλητή τώρα που κρατάει την ηλικία ενός ανθρώπου. Δε χρειαζόμαστε τόσο χώρο όσο μας δίνει ο τύπος integer. Δύσκολα κάποιος άνθρωπος θα περάσει τα 100+ χρόνια. Τότε τη δηλώνουμε ως εξής:
short int ilikia;
Τώρα η μεταβλητή ilikia μπορεί να πάρει τιμές από το -32768 μέχρι το 32767.

Αλλά είναι ποτέ αρνητική η ηλικία του ανθρώπου ? Ας το διορθώσουμε αυτό:
short unsigned int ilikia;
Τώρα η τιμές που μπορεί να πάρει η μεταβλητή μας είναι απο το 0 μέχρι το 65535.
Με το short μειώσαμε το μέγεθός της και με το unsigned δηλώσαμε ότι δε θέλουμε αρνητικές τιμές. Επίσης επειδή είναι short αντί να καταναλώσει 4 bytes όπως θα έκανε ο απλός τύπος integer θα καταναλώσει 2 bytes.

Για περισσότερες πληροφορίες για τους τύπους αρχείων και μέχρι που μπορούν να φτάσουν οι τιμές τους δείτε εδώ:Data Types


Ασκήσεις:
  1. Γράψτε πρόγραμμα το οποίο θα εμφανίζει το όνομα σας και το επώνυμό σας με την εξής μορφή: Ονομάζομαι Γιώργος Σοφιανός. Το όνομα και το επώνυμο πρέπει να είναι δύο διαφορετικές μεταβλητές τύπου string.
  2. Γράψτε πρόγραμμα που θα εμφανίζει κατακόρυφα το όνομα, το ύψος, το βάρος και την  ηλικία . Πρέπει να χρησιμοποιήσετε μεταβλητές για την εμφάνιση τους. Αν χρησιμοποιήσετε και τις κατάλληλες μεταβλητές που θα δεσμεύουν λιγότερο χώρο ο βαθμός είναι Α+. HINT χρησιμοποιήστε το short.

0 comments:

Post a Comment