C++ variabile

C/C++ este un limbaj multi-paradigmă de nivel mediu, orientat pe obiecte, folosit pe scară largă în industria software datorită echilibrului dintre viteză şi complexitate. Dacă ai nelămuriri în legătură cu acest limbaj sau vrei să ne înveți ceva chiar tu, intră aici.

C++ variabile

Postby CristiMoldovan » 30 Nov 2011, 10:40

Salve.
Imi poate explica cineva ce inseamna fiecare mod de citire a variabilelor .. double , int , float si care mai sunt.Cand se folosesc fiecare ?
edit : Imi cer scuze, rog moderatorul sa mute topicul la" Discutii despre Programare " , acum am observat topicul
0,0p / 0 votes
User avatar
CristiMoldovan
Bit
 
Joined: 29 Nov 2011
Status: 0

Re: C++ variabile

Postby depraved » 30 Nov 2011, 17:29

Dar esti anul I Informatica.....nu pricep :-/
In C++,poti citi variabilele cu obiectul "cin", indiferent de tipul lor.

Editat de DarkByte : nu cred ca e nevoie de ironie.
0,0p / 0 votes
User avatar
depraved
Bit
 
Joined: 03 Sep 2011
Status: 1

Re: C++ variabile

Postby andreiandreiq » 30 Nov 2011, 17:41

Salut,

Cred ca te referi la tipurile de date: double , int , float, char si long int.

-double reprezinta numere in virgula mobila, cu o precizie de cel putin 15 zecimale exacte;
-int reprezinta numere intregi in intervalul [-32767,32767];
-float reprezinta numere in virgula mobila, cu o precizie de cel putin 7 zecimale exacte;
-char reprezinta caractere ASCII;
-long int reprezinta numere intregi in intervalul [-2147483647, 2147483647];

Cum se folosesc fiecare, poate iți explica altcineva... eu nu am timp acuma.
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: C++ variabile

Postby jolgau » 30 Nov 2011, 18:10

Dupa cum ti-a explicat si @andreiandreiq eu am sa iti dau doua exemple :

Unul cu tip int :
O sa folosesc tipul int deoarece o sa folosesc doar numere intregi pentru calcule matematice simple.
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int a,b,c;
  7. cin>>a>>b;
  8. c = a + b;
  9. cout<<c;
  10.  
  11. return 0;
  12. }


In exemplul de mai sus daca doresti sa faci o impartire de exemplu in loc de c = a + b sa pui c = a / b rezultatul care se va afisa nu va fi cel corect , pentru cazurile acestea exista tipul float.

Float :

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. float a,b,c;
  7. cin>>a>>b;
  8. c = a / b;
  9. cout<<c;
  10.  
  11. return 0;
  12. }


Aici daca a / b are cel mult 7 zecimale dupa virgula ele vor fi afisate.

Daca foloseam tipul int in exemplul de mai sus el mi-ar fi afisat doar partea intreaga din a / b . [ a / b ].
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0

Re: C++ variabile

Postby smith » 01 Dec 2011, 10:30

Nu știu cât știi, dar am să încerc să fiu de folos.


În limbajele C/C++ există tipurile de date primitive care le-a enumerat și andreiandreiq. Practic, tipurile de date precizează cât spațiu ocupă o variabilă în memorie și cum va fi reprezentată valoarea variabilei în memorie.

O variabilă este un nume de locație din memorie. Poți să te gândești în felul următor. Memoria este o stradă lungă (unidimensională) cu case. Fiecare casă are o adresă.

În memoria calculatorului, unitatea de măsură cea mai mică a memoriei este byte-ul (care esta format din 8 biți - șir de 0 și 1). Asta ar însemna că într-o casă intră 8 biți iar adresele caselor merg din 8 în 8 biți. Presupun că știi că numerele din baza 10 sunt reprezentate în binar în calculator - deci practic, calculatoarele lucrează DOAR cu numere - în baza 2.

Să vedem ce se întâmplă când facem următorul lucru:
  1. char variabila_mea = 65;
  2. printf("%c", variabila_mea);
  3. printf("%d", variabila_mea);
  4. printf("%p", &variabila_mea);


În exemplul de mai sus variabila_mea este de tip char. Întâmplător, tipul char ocupă 8 biți (sau un byte). Asta înseamnă că mulțimea valorilor pe care variabila_mea le poate lua sunt în intervalul [0,255] ().

Funcția printf din C ne ajută la afișare în consolă. Ea are forma următoare:
  1. printf("string pentru formatarea variabilelor", v1, v2, v3 ...);

Unde: stringul pentru formatarea variabilelor are rolul de a afișa conținutul variabilelor într-o anumită manieră, iar v1, v2, v3 ... sunt variabilele care urmează să fie afișate corespunzător. Mai multe detalii și exemple despre printf poți găsi aici.

În interiorul variabila_mea se află valoarea 65. În biți ar arăta 01000001. Acești biți sunt plasați la adresa la care se află variabila_mea.

Primul printf are ca string de formatare specificatorul %c. Acesta spune funcției să afișeze conținutul din variabila_mea ca un caracter.
De aici și vine numele %c - de la char. Pe ecran va fi afișată litera "A". De ce?

Am spus mai devreme că calculatoarele lucrează cu numere. Astfel, pentru a putea lucra și cu caractere, s-a introdus un standard care a atribuit unui număr, un anumit caracter. Există mai multe standarde de genul acesta, dar noi vom vorbi despre ASCII. În codul ascii, numărului 65 este atribuit caracterul "A". Pentru a vedea tot tabelul, poți da un ochi aici: http://www.asciitable.com/.
ASCII suportă 256 de caractere (de la 0 la 255) deci, cât să încapă pe un byte - 8 biți (adică char-ul nostru).

Al doilea printf folosește specificatorul %d - care vine de la decimal. Astfel, se va afișa valoarea 65 pe ecran sub formă de număr în baza 10 (chiar dacă noi am spus că variabila_mea este de tip char - am trecut cu vederea peste acest fapt și i-am spus funcției printf să se uite la variabila_mea cu "alți ochi" - adică să se uite la variabila_mea ca la un număr simplu).

În ultimul printf am pus operatorul & în față la variabila_mea. Acesta returnează ADRESA la care se află variabila_mea. Specificatorul %p spune funcției că urmează să se afișeze un pointer - adică o adresă. Pe ecran se va afișa o valoare aproape aleatorie în baza 16 care reprezintă adresa unde se află variabila_mea.

Același lucru putem să facem cu un int sau orice altă variabilă de alt tip de date. Dacă vrem să vedem care este dimensiunea pe ca le ocupă variabilele noastre în memorie putem folosi operatorul unar sizeof. Tipurile de date am mărimi diferite în funcție de compilator, sistemul de operare, mașina pe care rulezi etc. Astfel, valorile prezentate mai sus de andreiandreiq pot fi diferite pe sistemul tău. Dacă dimensiunea pe care o ocupă un anumit tip de date primitiv diferă, înseamnă că valorile pe care acesta le poate cuprinde diferă de asemenea.

Iată un exemplu de cod:
  1. #include <cstdio>
  2.  
  3. int main() {
  4.  
  5.     char my_char = 65; // echivalentu cu char c = 'A';
  6.     int my_int = 10;
  7.     float my_float = 12345.643;
  8.     double my_double = 98763.1234;
  9.  
  10.  
  11.     printf("char-ul ocupa %d bytes\n", sizeof(my_char));
  12.     printf("int-ul ocupa %d bytes\n", sizeof(my_int));
  13.     printf("float-ul ocupa %d bytes\n", sizeof(my_float));
  14.     printf("double-ul ocupa %d bytes\n", sizeof(my_double));
  15.  
  16.     printf("\nEchivalent cu:\n\n");
  17.  
  18.     printf("char-ul ocupa %d bytes\n", sizeof(char));
  19.     printf("int-ul ocupa %d bytes\n", sizeof(int));
  20.     printf("float-ul ocupa %d bytes\n", sizeof(float));
  21.     printf("double-ul ocupa %d bytes\n", sizeof(double));
  22.  
  23.     return 0;
  24. }


Rezultatul pe sistemul meu este următorul:
  1. char-ul ocupa 1 bytes
  2. int-ul ocupa 4 bytes
  3. float-ul ocupa 4 bytes
  4. double-ul ocupa 8 bytes
  5.  
  6. Echivalent cu:
  7.  
  8. char-ul ocupa 1 bytes
  9. int-ul ocupa 4 bytes
  10. float-ul ocupa 4 bytes
  11. double-ul ocupa 8 bytes
  12.  


Folosind formula
int-ul poate lua valori. Adică 4294967296.

Acuma este o problemă. Care-i treaba cu semnul numerelor? Cum facem să avem numere cu semna sau fără semn?

Păi se folosește primul bit de semn - dacă el este 1 înseamnă că numărul este negativ, iar dacă este 0 numărul este pozitiv. Ar fi multe lucruri de discutat dar treburile astea ar trebui să le faci la facultate la limbaje de asamblare, bazele matematice ale calculatoarelor sau ceva materie dinasta.

Când noi zicem:

Se produce un int cu semn. Adică pe mașina mea ia valori în intervalul [-2147483648, 2147483647] - în total sunt 4294967296, cum am calculat cu formula.

Dacă hotărâm că nu avem nevoie de numere negative putem zice:

Se produce un int fără semn care poate lua valori în intervalul [0, 4294967295] - în total 4294967296 valori.

Codul următor folosește librăria climits -despre care poti să citesti mai mult aici.
  1. #include <cstdio>
  2. #include <climits>
  3.  
  4. int main() {
  5.  
  6.     printf("%d \n", CHAR_MAX);
  7.     printf("%d \n", CHAR_MIN);
  8.     printf("%d \n", INT_MAX);
  9.     printf("%d \n", INT_MIN);
  10.  
  11.     printf("%u \n", UCHAR_MAX);
  12.     printf("%u \n", UINT_MAX);
  13.  
  14.     return 0;
  15. }

Rezultatul pe mașina mea:
  1. 127
  2. -128
  3. 2147483647
  4. -2147483648
  5. 255
  6. 4294967295


Despre tipuri de date cu virgulă mobilă nu am să vorbesc că este mai complicat și nici la noi la facultate nu a insistat prea mult - prezentând doar puțin teoria din spate. Dacă te interesează limitele acestori tipuri de date poți intra aici.

De asemenea, dacă te interesează să știi mai multe despre variabile și tipuri de date, poți citi tutorialul acesta. Dacă știi engleză și vrei să înveti bine C++, îți recomand tot tutorialul.
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: C++ variabile

Postby CristiMoldovan » 01 Dec 2011, 18:25

Va multumesc ! Mi-au fost de folos.
ps: depraved, scuze , m-am exprimat gresit!
0,0p / 0 votes
User avatar
CristiMoldovan
Bit
 
Joined: 29 Nov 2011
Status: 0

Re: C++ variabile

Postby smith » 01 Dec 2011, 20:34

^Vezi că am updatat explicația. :P
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: C++ variabile

Postby likeromanian » 10 Feb 2012, 08:45

andreandreiq:Vezi ca pana la 32767 merg in borland c++,in mingw e cuprins intre -2 miliarde si 2 miliarde
0,0p / 0 votes
User avatar
likeromanian
Bit
 
Joined: 29 Jan 2012
Status: 0


Return to C / C++

Who is online

Users browsing this forum: No registered users and 0 guests

cron