Tipuri de date, date simple, operatori, expresii
  • Tematica
  • Noi notiuni, functii si instructiuni utilizate

  • Reprezentarea informatiilor in memoria calculatoarelor

        Informatiile sunt reprezentate in calculator sub forma binara. Utilizatorii folosesc in general codificarea zecimala a informatiei. Totusi, pe lānga baza de numeratie 10, se folosesc si bazele de numeratie 2, 8 si 16, iar sistemele de numeratie respective se numesc binar, octal si hexazecimal. In sistemul hexazecimal, se folosesc 16 cifre si anume cifrele de la 0-9 iar cifrele de la 10 la 15 se noteaza cu literele de la A pana la F. In memoria calculatorului informatia este pastrata numai sub forma binara. Deoarece este greu de operat cu numere mari īn baza 2, pentru exprimarea unor cantitati binare se foloseste baza 16. De exemplu, numarul 255 se poate exprima in binar ca fiind 11111111 iar in hexa FF, numarul 147 se poate exprima in binar ca fiind 10010011 iar in hexa 93, numarul 231 se poate exprima in binar ca fiind 11100111 iar in hexa E7.
       Pentru exemplificare, vom realiza in continuare o aplicatie care afiseaza numarul 231 sub forma binara folosind functii care afiseaza un numar intreg zecimal sub forma binara.
       Aplicatia se bazeaza pe deci pe functiile afis_binar(unsigned int,int) respectiv afis_bin(unsigned int,int) , functii care vor fi incluse direct in program.

    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    static void afis_bin(unsigned int n,int nb)
    {
    	system("COLOR 0B");
    	int i,k;
    	char val_b[32];
    	if ((n > 0)&&(n <= 255))
    		k=8;
    	if ((n > 255)&&(n <= 65535))
    		k=16;
    	if ((n > 65535)&&(n <= 2147483646))
    		k=32;
    	if (nb > 0)
    		k=nb;
    	if (n > 2147483646){
    		k=0;
    		cout << "\nNumar prea mare";
    	}
    	for (i=0; i < k; i++){
    		if (n%2==0)
    			val_b[k-1-i]='0';
    		else
    			val_b[k-1-i]='1';
    		n=n/2;
    	}
    	// afisare binara
    	for (i=0; i < k; i++){
    		if (val_b[i]=='0')
    			cout << char(176) << " ";
    		else
    			cout << char(219) <<  " ";
    	}
    	// prompter pe prima pozitie
    	for (i=0;i < (2*k+1); i++){
    			cout<<"\b";
    	}
    }
    
    static void afis_binar(unsigned int n,int nb)
    {
    	system("COLOR 0B");
    	int i,k;
    	char val_b[32];
    	if ((n > 0)&&( n <= 255))
    		k=8;
    	if ((n > 255)&&(n <= 65535))
    		k=16;
    	if ((n > 65535)&&(n <= 2147483646))
    		k=32;
    	if (nb>0)
    		k=nb;
    	if (n > 2147483646){
    		k=0;
    		cout << "\nNumar prea mare";
    	}
    	for (i=0; i < k; i++){
    		if (n%2==0)
    			val_b[k-1-i]='0';
    		else
    			val_b[k-1-i]='1';
    		n=n/2;
    	}
    	// afisare binara
    	for (i=0; i < k; i++){
    		cout << val_b[i] << " ";
    	}
    
    	// prompter pe prima pozitie
    	for (i=0;i < 2*k+1; i++){
    			cout << "\b";
    	}
    }
    
    int main(void)
    {
     	cout << " \n\n\tAfisare binara: ";
    	cout<<"\n\n\t";
    	afis_bin(231,8);
    	cout<<"\n\n\t";
    	afis_binar(231,8);
    	cin.ignore();
    	cin.get();
    	return 0;
    }


    Dupa rularea programului in "Command Prompt" se afiseaza:



        Orice fel de informatie (programe, valori numerice, texte, imagini, sunete, etc.) este codificata numeric in baza 2 (Codificare binara). Se grupeaza apoi cate 4 biti si se reprezinta informatia pe ecran in cod hexazecimal pentru o mai usoara citire.


       Tabelul de valori hexa afisat mai sus, reprezinta continutul memoriei de la o anumita adresa.
        Informatia este grupata in memorie pe grupe de cāte 8 cifre binare (biti). Un asemenea grup se mai numeste si octet(sau byte). Octetul este unitatea de masura īn care se exprima volumul memoriei unui calculator. Deoarece dimensiunea memoriei este totdeauna o putere a lui 2, multiplii folositi pentru octeti nu sunt 100, 1000 etc., ci puteri adecvate ale lui 2. Astfel, un numar de 2 la puterea 10 = 1024 de octeti se mai numeste si kilooctet sau kilobyte (pe scurt KO sau KB). Similar, un numar de 2 la puterea 20 = 10264576 octeti se numeste megaoctet sau megabyte (MO sau MB).
        Pentru a reprezenta diverse tipuri de date, se recurge la codificare astfel:
        Numerele īntregi ar putea fi reprezentate pe unul sau mai multi octeti. In general, avand n biti, numarul total de valori distincte este 2 n     Pentru numerele fara semn, valoarea interna a bitilor, reprezinta chiar valoarea numarului.
        Pentru numerele cu semn, prin conventie, primul bit reprezinta semnul (1 pentru numere negative si 0 pentru numere pozitive). Daca bitul de semn este 0, atunci configuratia interna reprezinta chiar valoarea numarului. Daca bitul de semn este 1, atunci valoarea absoluta a numarului se obtine prin complement fata de 2, adicå prin complementarea tuturor bitilor (0 devine 1 si reciproc) si prin adunarea apoi a valorii 1. Aceasta regula se aplica pentru ambele sensuri de conversie (de la reprezentari interne la numere cu semn si reciproc).
        Numerele reale ar putea fi codificate in mai multe moduri:     Datele alfanumerice ar putea fi codificate folosind codul standard ASCII (American Standard Code for Information Interchange)-Codul Standard American pentru Schimb de Informatii.
        Codul ASCII standard este un cod pe 7 biti, deci cuprinde 128 de caractere distincte. Un caracter ASCII se reprezinta pe un octet, īn care bitul cel mai semnificativ este 0. Domeniul de valori este deci de la 0 la 127 (īn zecimal) sau de la 00 la 7F (īn hexazecimal).
        Dintre cele 128 de caractere, 32 sunt caractere de control si nu au reprezentari grafice (nu sunt afisabile).
        Restul de 96 de caractere pot fi afisate pe ecranul calculatorului, la imprimanta etc. Caracterele afisabile se noteaza de obicei prin scrierea simbolului grafic respectiv īntre apostrofuri. De exemplu, 'A' īnseamna codul ASCII corespunzator literei A mare, '!' īnseamna codul ASCII pentru semn de exclamare etc.


        Deoarece caracterele de control nu au reprezentari grafice, ele au nume speciale (exprimate de obicei prin prescurtari de 2 sau 3 litere). Dintre caracterele de control uzuale, pot fi amintite: CR (Carriage Return), LF (Line Feed)

    Nume Descriere Definire cu esc in C
    nul null byte \0
    bel bell character \a
    bs backspace \b
    ht horizontal tab \t
    np formfeed \f
    nl newline \n
    cr carriage return \r
    vt vertical tab
    esc escape
    sp space


        S-a definit si un asa-numit cod ASCII extins, īn care se folosesc toti cei 8 biti ai unui octet.
        Setul ASCII standard este un subset al acestui cod ASCII extins.



        Observatie

        Modurile de reprezentare prezentate anterior ilustreaza faptul ca datele din memoria calculatorului se pot interpreta diferit.
        Aceste interpretari sunt facute de programul care foloseste datele in functie de ce reprezinta ele. De exemplu octetul 1001 0100 poate reprezenta numarul zecimal pozitiv 148 daca il interpretam ca un numar in binar fara semn , poate reprezenta numarul zecimal negativ -108 daca il interpretam ca un numar in binar fara cu semn, poate reprezenta caracterul ASCII ö din setul extins de caractere, daca il interpretam ca fiind un cod ASCII etc.

  • Tipuri de date īn limbajul C++

        Tipul unei date determina lungimea zonei de memorie ocupata de acea data.

        Tipurile de baza sunt:
  • Program C++ pentru determinarea dimensiunii diferitelor tipuri de date

    
    // Program scris in C++ Visual Studio 2005 de tipul:CLR console application
    // Determinarea dimensiunii diferitelor tipuri de date
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	cout <<" Dimensiunea tipului de date short este:" << sizeof(short) <<"\n";
    	cout <<" Dimensiunea tipului de date int este:" << sizeof(int) <<"\n";
    	cout <<" Dimensiunea tipului de date long este:" << sizeof(long) <<"\n";
    	cout <<" Dimensiunea tipului de date float este:" << sizeof(float) <<"\n";
    	cout <<" Dimensiunea tipului de date double este:" << sizeof(double) <<"\n";
    	cout <<" Dimensiunea tipului de date long double este:" << sizeof(long double) <<"\n";
    	cout <<" Dimensiunea tipului de date char este:" << sizeof(char) <<"\n";
    	cout <<" Dimensiunea tipului de date bool este:" << sizeof(bool) <<"\n";
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


    Dupa rularea programului in "Command Prompt" se afiseaza:



  • Constante


    O constanta este un literal (o forma externa de reprezentare) numeric, caracter sau sir de caractere. Numele si valoarea unei constante sunt identice. Valoarea unei constante nu poate fi schimbata īn timpul executiei programului īn care a fost utilizata. Tipul si valoarea ei sunt determinate īn mod automat, de catre compilator, pe baza caracterelor care compun literalul.


        Constante intregi

    O constanta īntreaga consta dintr-o succesiune de cifre.Exemplu: 36789


        Constante numerice reale

    Daca o constanta numerica contine punctul zecimal, ea este de tipul double.
    Exemplu: 3.141 tip double
    Daca numarul este urmat de L sau l, este de tip long double. Exemplu 3.7659L--tip long double


        Constante numerice flotante

    O constanta flotanta consta dintr-o parte īntreaga, un punct zecimal, o parte fractionara, litera e sau E, si optional un exponent care este un īntreg cu semn


        Constante caracter

    O constanta caracter consta dintr-un singur caracter scris īntre apostrofuri, de exemplu 'x'

        Constante siruri

    Un sir este o succesiune de caractere scrise īntre ghilimele, de exemplu "Programare".


        Exemplu de program ce utilizeaza constante

        In cadrul unei instructiuni de scriere pe consola standard vor fi folosite de data aceasta expresii cum ar fi:
    "\tValoare\t\t= "+cant*pret in care functia de scriere nu mai are numai un singur argument ci o intreaga expresie. Sunt folosite de asemenea si secvente escape cum ar fi \t\n\a etc, semnificatia lor fiind urmatoarea:

    \n new-line\r carriage return\\ backslash
    \t tab orizontal\f form feed \' apostrof
    \b backspace\a semnal sonor\" ghilimele


  • Program pentru calculul valorii unei facturi ( inclusiv TVA)



        In aceasta aplicatie vom folosi doua constante: o constanta de tip double pentru tva si o constanta string.

    
    // Program C++ care utilizeaza constante
    
    #include "stdafx.h"
    #include < iostream >
    #include < string >
    using namespace std;
    int main(void)
    {
    	const double tva = 0.19; 
    	const string linie_o = "\n\t-------------------------------\n";
    	double pret = 123.25;
    	double cant = 23.5;
    	cout << "\n\n\t\tValoare marfa\n\n\a";
    	cout << "\n\tCantitate\t = " << cant;
    	cout << linie_o;
    	cout << "\tValoare\t\t= " << cant * pret;
    	cout << "\n\n\tTVA 19 % \t= " << pret * cant * tva;
    	cout << linie_o;
    	cout << "\tTotal General\t= " << pret * cant * (1 + tva);
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


        Daca am incerca sa introducem in cadrul programului, o instructiune in care sa atribuim alta valoare constantei tva, compilatorul ar da eroare. Constantele au fost introduse tocmai pentru a proteja valoarea constntelor pe durata programului satfel incat acestea sa nu poata fi modificata.
        Sa incercam acum sa scriem aceeasi aplicatie dar in C# spatiul System

    C#

    
    // Program C# care utilizeaza constante
    
    static void Main(string[] args)
    {
    	const double tva = 0.19;
    	const String linie_o = "\n\t-------------------------------\n";
    	double pret = 123.25;
    	double cant = 23.5;
    	Console.Write("\n\n\t\tValoare marfa\n\n");
    	Console.Write("\tPret\t\t= " + pret);
    	Console.Write("\n\tCantitate\t= " + cant);
    	Console.Write(linie_o);
    	Console.Write("\tValoare\t\t= " + cant * pret);
    	Console.Write("\n\n\tTVA 19 % \t= " + pret * cant * tva);
    	Console.Write(linie_o);
    	Console.Write("\tTotal General\t= " + pret * cant * (1 + tva));
    	Console.ReadLine();
    }
    


  • Variabile


        Spre deosebire de constante, variabilele sunt date (obiecte informationale) ale caror valori se pot modifica īn timpul executiei programului.
        Si variabilele sunt caracterizate de atributele nume, tip, valoare si clasa de memorare.
        Variabilele sunt nume simbolice utilizate pentru memorarea valorilor introduse pentru datele de intrare sau a rezultatelor.
        Daca la o constanta ne puteam referi folosind caracterele componente, la o variabila ne vom referi prin numele ei.
        Numele unei variabile ne permite accesul la valoarea ei, sau schimbarea valorii sale, daca este necesar acest lucru.
        Numele unei variabile este un identificator ales de programator.



        Sintaxa de declarare a variabilelor

         Inainte de folosire, orice variabila trebuie declarata, pentru a i se putea aloca memorie in vederea stocarii ei. Variabila este defapt adresa primei locatii in care este rezervata memorie pentru continutul ei. Sintaxa pentru declararea unei variabile este urmatoarea:

        [tip date] [nume variabila]

        Exemple:
    int anul;
    int cantitate
    string nume
    double pi

  • Tipul de variabila caracter si string


    O variabila de tip caracter se declara prin specificatorul de tip char. Zona de memorie alocata unei variabile de tip char este de un octet.
    Variabila sir de caractere sau string se declara ca fiind masive de tip char sau in unele spatii de nume se declara string

    Exemple de utilizare a variabilelor char si string

  • Program pentru citirea si afisarea unui text utilizand ANSI C

    
    // Program pentru citirea unui sir de caractere si afisarea unui text
    
    #include "stdafx.h"
    #include < stdio.h >
    
    int main() {
    char c[1];
    char nume[40];
    printf("\n\tCum va numiti:");
    gets(nume);
    printf("\n\n\tBine ati venit la cursul de : Programarea Calculatoarelor: ");
    puts(nume);
    gets(c);
    return 0;
    }
    


  • Program pentru citirea si afisarea unui text utilizand spatiu de nume std::

    
    // Program pentru citirea unui text (string sau sir de caractere) si afisarea unui text
    
    #include "stdafx.h"
    #include < iostream >
    #include < string >
    
    using namespace std;
    
    int main(void)
    {
    	string nume;
    	cout <<"\n\tIntroduceti numele:";
    	cin >> nume;
    	cout << "\n\n\tBine ai venit " << nume << "!\n";
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


        Asupra sirurilor se pot face si operati. Cea mai cunoscuta este operatia de adunare a sirurilor sau concatenare.
        Programul urmator face o astfel de operatie.

    
    // concatenarea a doua siruri
    
    #include "stdafx.h"
    #include "stdafx.h"
    #include < iostream >
    #include < string >
    
    using namespace std;
    
    int main(void)
    {
    	string nume;
    	string prenume;
    	string nume_pr;
    	cout <<"\n\tIntroduceti numele:";
    	cin >> nume;
    	cout <<"\n\tIntroduceti prenumele:";
    	cin >> prenume;
    	nume_pr=nume+" "+prenume;
    	cout <<"\n\n\n\tNumele tau este: " << nume_pr;
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


        Pentru a citi numele si prenumele cu o singura instructiune trebuie sa folosim o instructiune noua care nu ignora caracterele introduse dupa caracterul spatiu. Va trebui sa definim o variabila de tip caracter de dimensiune sa zicem 80.

    // Utilizarea instructiunii cin.getline pentru a citi variabile string ce contin spatii
    
    #include "stdafx.h"
    #include "stdafx.h"
    #include < iostream >
    #include < string >
    
    using namespace std;
    
    int main(void)
    {
    	char nume[80];
    	cout <<"\n\tIntroduceti numele si prenumele:";
    	cin.getline(nume,80);
    	cout <<"\n\n\n\tNumele tau este: " << nume;
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


  • Program pentru citirea si afisarea unui text utilizand spatiu de nume System

        Functia ReadLine citeste un text de la dispozitivul de intrare. Pentru a pastra valoarea citita trebuie sa declaram o variabila de tip sir de caractere si sa-i atribuim valoarea Console::ReadLine(). In spatiul de nume System o variabila sir se declara astfel:String nume_sir unde nume_sir este numele variabilei sir de caractere.



        C#

            static void Main(string[] args)
            {
    		String  nume;
    		Console.Write("\n\n\tBuna ziua utilizatorule! ");
    		Console.Write("\n\n\tCum te numesti? :");
    		nume = Console.ReadLine();
    		Console.Write("\n\n\n\tSucces la programare " + nume + " !\n");
    		Console.ReadLine();
    	}
    


  • Tipul de variabila numeric

        Variabile intregi

        Variabilele īntregi pozitive sau negative pot fi declarate prin specificatorul de tip int.
        Zona de memorie alocata unei variabile intregi poate fi de cel mult trei dimensiuni.
        Relatii despre dimensiune sunt furnizate de calificatorii short, long si unsigned, care pot fi aplicati tipului int.
        Calificatorul short se refera totdeauna la numarul minim de octeti pe care se reprezinta un īntreg, de obicei 2.
        Calificatorul long se refera la numarul maxim de octeti pe care poate fi reprezentat un īntreg, de obicei 4.

        Vom realiza in continuare un program pentru afisarea a trei numare aleatoare

    // program pentru afisarea a 3 numare aleatoare
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	int nr;
    	nr=rand();
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << nr ;
    	nr=rand();
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << nr ;
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << rand() ;
    	cin.get();
    	return 0;
    }
    
    


        Numerele aleatoare afisate nu sunt absolut aleatoare. La fiecare rulare se obtine acelasi set de numere. Pentru a genera alt set de numere, va trebui sa apelam functia srand(unsegned int_seed) unde argumentul functiei adica (unsegned int_seed) reprezinta schema de generare a setului de numere. In urmatoarea aplicate va fi generat un nou set de numere.

    // program pentru afisarea a 3 numare aleatoare din schema 1000
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	int nr;
    	srand(1000);
    	nr=rand();
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << nr ;
    	nr=rand();
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << nr ;
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << rand() ;
    	cin.get();
    	return 0;
    }
    
    


        Pentru a obtine numere absolut aleatoare in sensul ca la fiecare rulare se obtine o alta schema de numere, nu vom mai da valoarea 1000 lui int_sed, vom pune o valoare care depinde de ceasul calculatorului si vom folosi functia time()

    // program pentru afisarea a 3 numare absolut aleatoare 
    #include "stdafx.h"
    #include < iostream >
    #include < ctime >    // pentru functia time()
    using namespace std;
    
    int main(void) 
    {
    	int nr;
    	int seed=time(0);
    	srand(seed);
    	nr=rand();
    	cout <<" \n\tValoarea parametrului lui srand este :" << seed ;
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << nr ;
    	nr=rand();
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << nr ;
    	cout <<" \n\tNumarul aleator intre 0 si :"<< RAND_MAX <<" este: " << rand() ;
    	cin.get();
    	return 0;
    }
    

        Aplicatia care afiseaza un numar sub forma binara poate fi rescrisa utilizand o variabila x de tip int care se citeste de la utilizator.

    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	int x;
    	cout << " \n\n\tAfisare binara ";
    	cout << " \n\n\tIntroduceti un numar: ";
    	cin >> x;
    	cout<<"\n\n\t";
    	afis_bin(x,16);
    	cout<<"\n\n\t";
    	afis_binar(x,16);
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    

        Valoarea lui x poate fi introdusa direct in hexazecimal, in aces caz, programul devine:

    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	int x;
    	cout << " \n\n\tAfisare binara ";
    	cout << " \n\n\tIntroduceti un numar in format hexa: ";
    	cin >> hex >> x;
    	cout<<"\n\n\t";
    	afis_bin(x,16);
    	cout<<"\n\n\t";
    	afis_binar(x,16);
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    

        Valoarea hexa poate fi utilizata direct in program cu conditia folosirii prefixului 0x, astfel:

    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	int nr=0xFE37;
    	cout << " \n\n\tAfisare binara ";
    	cout<<"\n\n\t";
    	afis_bin(nr,16);
    	cout<<"\n\n\t";
    	afis_binar(nr,16);
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


        Variabile flotante (virgula mobila)

        Variabilele flotante pot fi īn simpla precizie si atunci se declara prin specificatorul de tip float sau īn dubla precizie si atunci se declara prin specificatorul double.
        Majoritatea sistemelor de calcul admit si reprezentarea īn precizie extinsa; o variabila īn precizie extinsa se declara prin specificatorul long double.

        Exemple de programe care folosesc variabile numerice

  • program pentru citirea unui numar si afisarea patratulu acelui numar utilizand spatiul de nume std::

    
    // program pentru citirea unui numar si afisarea patratulu acelui numar utilizand spatiul de nume std::
    // citesc un numar de tip double si calculez patratul lui 
    
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	double nr;
    	float nrp;
    	cout <<" \n\tIntroduceti un numar:";
    	cin >> nr;
    	nrp=nr*nr;
    	cout <<" \n\tPatratul numarului :"<< nr << "este : " << nrp;
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


  • Alte tipuri de variabile


        Exista o multitudine de alte tipuri de variabile predefinite cum ar fi data si ora calendaristica.
        Spatiul de nume System:: ofera spre exemplu tipul de variabila DateTime

  • Program se foloseste tipul de variabila System.DateTime pentru a afisa data si ora

        C#

            static void Main(string[] args)
            {
    		String  nume;
    		String  ani_s;
    		System.DateTime dt = System.DateTime.Now;
    		double ani;
    		Console.Write("\n" + dt);
    		Console.Write("\n\n\tCum te numesti?:");
    		nume = Console.ReadLine();
    		Console.Write("\n\n\tCiti ani ai?:");
    		ani_s = Console.ReadLine();
    		ani = System.Convert.ToDouble(ani_s);
    		Console.Write("\n\n\t" + nume + ", inseamna ca ai, cel putin :" + ani * 360 + " zile");
    		Console.ReadLine();
    	}
    

        Folosind WFA vom realiza o aplicatie cafre afiseaza data si ora sistem. Aplicatia este asemanatoare cu cea realizata in mod consola, diferind doar elementele grafice utilizate.

       Deschidem un nou proiect numit data dupa care:
    • Plasam un buton cu numele button1
    • Plasam un obiect label cu numele implicit label1
    • Selectam button1 si pe evenimentul Click completam procedura cu:
    this.label1.Text=System.Convert.ToString(System.DateTime.Now);
    

       Rulam aplicatia si dupa apasarea butonului obtinem:


        Daca dorim sa afisam in mod continuu ora adica sa reinprospatam valoarea afisata in label1 va trebui sa introducem un nou obiect. De aceasta data obiectul nu mai este vizibil, va rula "in spatele form-ului" si va relansa instructiunea care atribuie valoarea datei curente textului obiectului label1. Abiectul se numeste "timer" si are posibilitatea setarii intervalului intre evenimente numite Tick

       Deschidem un nou proiect numit ceas dupa care:
    • Plasam un obiect label cu numele implicit label1
    • Plasam un obiect timer cu numele implicit timer1 caruia ii setam proprietatea "Interval" la 1000 si proprietatea "Enabled" la True
    • Selectam timer1 si pe evenimentul Tick completam procedura cu:
       C#
    this.label1.Text=System.Convert.ToString(System.DateTime.Now);
    

       Rulam aplicatia si dupa apasarea butonului obtinem:


       Aplicatia afiseaza in mod continuu data si ora sistem. Intervalul dupa care se face o noua afisare este setat prin intermediul proprietatii "Interval" setata la 1000 milisecunde adica la 1 secunde. Daca am dori afisarea din minut in minut am seta proprietatea "Interval" la 60000.

       Reluam aplicatia de sus pentru a afisa atat secundele cat si milisecundele
       Deschidem un nou proiect numit ceas_v1 dupa care:
    • Plasam sase obiecte label cu numele implicit label1 ... lanel6
    • Plasam un obiect timer cu numele implicit timer1 caruia ii setam proprietatea "Interval" la 100 si proprietatea "Enabled" la True
    • Selectam timer1 si pe evenimentul Tick completam procedura cu:
       C#
    this.label1.Text=System.Convert.ToString(System.DateTime.Now);
    this.label2.Text=System.Convert.ToString(Syste.DateTim.Now.Hour);
    this.label3.Text=System.Convert.ToString(System.DateTime.Now.Minute);
    this.label4.Text=System.Convert.ToString(System.DateTime.Now.Second);
    int ms;
    ms=System.Convert.ToInt16(System.DateTime.Now.Millisecond);
    this.label5.Text=System.Convert.ToString(ms/100);
    this.label6.Text=System.Convert.ToString(ms);
    

       Rulam aplicatia si dupa apasarea butonului obtinem:


       Aplicatia afiseaza in mod continuu data si ora sistem, precum si separat ora:min:sec:zecimi:milisecunde

       In multe aplicatii este nevoie sa se lucreze cu data calendaristica. In WFA avem posibilitatea sa utilizam obiecte prietenoase care ne ajuta sa introducem date calendaristice prin alegerea datei dintr-un calendar. Obiectul care permite alegerea datei calendaristice se numeste "dateTimerPicker". Vom realiza in continuare o aplicatie care permite alegerea datei calendaristice dupa care acceseaza componentele care formeaza data calendaristica. Avand variabile de tipul "System.DateTime" putem face calcule cu aceste variabile. Putem de exemplu sa calculam timpul dintre data curenta si data aleasa prin simpla operatie de scadere intre cele doua variabile.
       Deschidem un nou proiect numit aleg_data dupa care:
    • Plasam opt obiecte label cu numele implicit label1 ... lanel8
    • Plasam un obiect "dateTimerPicker" cu numele implicit dateTimerPicker1
    • Selectam dateTimerPicker"1 si pe evenimentul ValueChanged completam procedura cu:
       C#
    	this.label1.Text=System.Convert.ToString(dateTimePicker1.Value);
    	this.label2.Text=System.Convert.ToString(dateTimePicker1.Value.Year );
    	this.label3.Text=System.Convert.ToString(dateTimePicker1.Value.Month );
    	this.label4.Text=System.Convert.ToString(dateTimePicker1.Value.Day );
    	this.label5.Text=System.Convert.ToString(dateTimePicker1.Value.Hour );
    	this.label6.Text=System.Convert.ToString(dateTimePicker1.Value.Minute );
    	this.label7.Text=System.Convert.ToString(dateTimePicker1.Value.Second );
    	this.label8.Text=System.Convert.ToString(System.DateTime.Now.Date);
    	this.label10.Text = System.Convert.ToString(dateTimePicker1.Value-System.DateTime.Now.Date);
    

       Rulam aplicatia si dupa apasarea alegerea unei date calendaristice folosind obiectul dateTimerPicker1, obtinem:


       Aplicatia afiseaza data aleasa precum si separat componentele din care se compune data calendaristica

  • Conversii de tip

        De multe ori e necesar sa convertim variabilele dintr-un tip in altul. Sa scriem un program care citeste raza cercului si afiseaza aria. Citirea se face cu Console.ReadLine() care citeste un sir de caractere in cazul de fata un sir de numere, care trebuie convertit intr-un numar. Conversia se face cu System.Convert.ToDouble()
        Pentru a calcula aria cercului avem nevoie de constanta pi, pe care o apelam din biblioteca System.Math astfel double pi= System.Math.PI

  • Program pentru calculul ariei cercului utilizand spatiul de nume System

        C#

             static void Main(string[] args)
            {
    		double raza;
    		String  raza_s;
    		double pi = System.Math.PI;
    		Console.Write("\n\n\tIntroduceti raza cercului:");
    		raza_s = Console.ReadLine();
    		raza = System.Convert.ToDouble(raza_s);
    		Console.Write("\n\n\tAria cercului de raza: " + raza + " este: " + pi * raza * raza);
    		Console.ReadLine();
    	}
    

       Ne propunem sa afisam sinusul unui unghi exprimat in radiani realizat in Windows Forms Application.

       Va trebui sa initiem un nou proiect de tipul CLR Windows Forms Application cu numele calc_sin_v0 .
    • Redimensionam formul si-i modificam proprietatea text in "Calculare sinus"
    • Plasam un label cu numele label1 si-i modificam proprietatea text in "Sin",font bold si size 10
    • Plasam un obiect NumericUpDown cu numele implicit numericUpDown1 si-i setam: proprietatea DecimalPlaces la 4 , proprietatea Maximum la 1000
    • Plasam un label cu numele label2 si-i modificam proprietatea text in "=",font bold si size 10
    • Plasam un label cu numele label3 si-i modificam proprietatea text in "Valoare sinus"
    • Selectam NumericUpDown si pe evenimentul ValueChanged completam procedura cu:


       C#
    		double rad2;
    		rad2=System.Convert.ToDouble(this.numericUpDown1.Value);
    		this.label3.Text = System.Convert.ToString(System.Math.Sin(rad2));
    

       Formul trebuie sa arate astfel:

       Se lanseaza in executie si formul trebuie sa arate astfel:



       In aplicatia anterioara am utilizat un obiect de tip NumericUpDown care ne permite sa introducem valori numerice.
       In cazul in care dorim sa utilizam un simplu obiect TextBox in care se pot introduce atat texte cat si cifre si punem aceeasi procedura pe evenimentul TextChanged adica:    C#
    		double rad2;
    		rad2=System.Convert.ToDouble(this.numericUpDown1.Value);
    		this.label3.Text =System.Convert.ToString(System.Math.Sin(rad2));
    


        In momentul cand tastam numai cifre aplicatia merge corect insa daca se tasteaza si caractere, aplicatia se blocheaza si se afiseaza un mesaj de eroare.
        Va trebui sa luam masuri suplimentare si sa ne asiguram ca nu se introduc si caractere in acest camp, in caz contrar aplicatia nu ruleaza corect si la apasarea unui caracter alfanumeric (altul decat cifra) se genereaza un mesaj de eroare care anunta ca formatul nu este corespunzator si aplicatia se opreste.
       Va trebui sa tratam aceasta eroare, sa afisam un mesaj si sa pastram controlul programului.

       Deschidem un nou proiect numit calc_sin_v2 dupa care:
    • Plasam un obiect TextBox cu numele implicit textBox1
    • Plasam un label cu numele label1 si-i modificam proprietatea text in "Valoare sinus"
    • Selectam textBox1 si pe evenimentul TextChanged completam procedura cu:


       C#
    try{
    	double rad ;
    	rad=System.Convert.ToDouble(this.textBox1.Text);
    	this.label1.Text =System.Convert.ToString(System.Math.Sin(rad));
    }
    catch(System.FormatException err){
    	this.label1.Text="Format necorespunzator!\nIntroduceti o valoare numerica";
    }
    

       Rulam aplicatia tastam un "x" si obtinem:


       Instructiunea try - catch ete cea care sesizeaza o exceptie de format si permite afisarea textului:

    Format necorespunzator!
    Introduceti o valoare numerica


  • Variabile locale, variabile globale

        In aplicatiile realizate pana acum am folosit de obicei un singur eveniment. Daca trebuie sa utilizam mai multe evenimente ar trebui sa ceem de fiecare data obiectele si variabilele de care avem nevoie, deoarece ele fiind definite in cadrul unei proceduri, au caracter local si nu vor fi vazute in cadrul procedurilor deschise pe alte evenimente. Solutia este sa creem variabile si obiecte globale care vor fi vazute in toate procedurile.

       In urmatoarea aplicatie fill_02 , vom folosi mai multe evenimente, variabile si obiecte globale pentru a afisa dinamic un arc de cerc si un contor.



       C#
            System.Drawing.Graphics desen;
            System.Drawing.Pen creion_albastru;
            System.Random n;
            System.Drawing.SolidBrush pensula;
            int contor;
            private void Form1_Load(object sender, EventArgs e)
            {
                desen = this.CreateGraphics();
                creion_albastru = new System.Drawing.Pen(System.Drawing.Color.Blue);
                pensula = new System.Drawing.SolidBrush(System.Drawing.Color.Aquamarine); 
                n = new System.Random();
            }
            private void timer1_Tick(object sender, EventArgs e)
            {
                contor = contor + 1;
                desen.Clear(this.BackColor);
                desen.FillPie(pensula, 50, 10, 200, 200, 45+n.Next(315),45);
                desen.DrawEllipse(creion_albastru, 50, 10, 200, 200);
                this.label1.Text = contor.ToString();
            }
    


       Variabilela contor si obiectele desen, creion_albastru, n, pensula sunt de tip global fiind plasate in afara procedurilor: Form1_Load si timer1_Tick. Ele vor fi vizibile in ambele proceduri.

  • Operatori

        Un operator este un simbol care reprezinta o anumita actiune

        Operatorul de adresa

        Prin declararea unei variabile se aloca memorie in functie de tipul variabilei.Numele variabilei este chiar adresa de inceput a zonei de memorie rezervata. Aceasta adresa se gaseste folosind operatorul: &.
        Sintaxa este:&[nume variabila]

    #include "stdafx.h"
    #include < iostream >
    #include < string >
    
    using namespace std;
    
    int main(void)
    {
    	string nume;
    	cout <<"\n\tIntroduceti numele:";
    	cin >> nume;
    	cout << "\n\n\tBine ai venit " << nume << "!\n";
    	cout << "\n\n\tAdresa variabilei nume este :" << &nume;
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    

        Dupa rularea acestei aplicatii, obtinem:



        Operatorul de atribuire

        Se foloseste pentru a asocia o valoare unei variabile: &.
        Sintaxa este:[nume variabila]=[valoare]

        Valoarea atribuita unei variabile trebuie sa fie compatibila cu tipul de date al variabilei. In caz de incompatibilitate se genereaza erori.
        Vom folosi in continuare Windows Forms Application pentru realiza o aplicatie grafica ce va inchide si va deschide circuitul de jos.

       Aplicatia nu face altceva decat atribuie unor proprietati ale unor obiecte niste valori: De exemplu
       -atribuim proprietatii text a butonului, valoarea "Start"
       -atribuim proprietatii Image a obiectului pictureBox1 ,valoarea System.Drawing.Image.FromFile( "circ_i.gif" )

       Sa initiem un nou proiect Windows Forms Application cu numele led.
    • Redimensionam formul si-i modificam proprietatea text in "Alimentare led"
    • Plasam doua butoane cu numele button1 respectiv button2 apoi le modificam proprietatea text atribuindu-i valorile "ON" respectiv "OFF"
    • Plasam un obiect PictureBox cu numele pictureBox1
    • Pregatim doua imagini cu numele circ_i.gif respectiv circ_d.gif de forma celor doua imagini de jos:
    • Copiem cele doua fisire in folder-ul Projects/led/led
    • Selectam fisierul "circ_d.gif" la proprietatea Image a obiectului pictureBox1
    • Setam proprietatea SizeMode a obiectului pictureBox1 la "AutoSize"

       In acest moment Formul arata astfel:



       -Procedura button1_Click a evenimentul Click a obiectului button1 va fi completata cu:

       C#
    		this.pictureBox1.Image = System.Drawing.Image.FromFile( "circ_i.gif" );
    

       -Procedura button2_Click a evenimentul clicka obiectului button2 va fi completata cu:

       C#
    		this.pictureBox1.Image = System.Drawing.Image.FromFile( "circ_d.gif" );
    

       -Se lanseaza in executie aplicatia. Ecranul aplicatiei va arata astfel:



        Operatorul de adunare

        
    //Suma a doua numere intregi 
    
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
     int  numar1,numar2,suma;
      cout << "Introduceti primul numar intreg: ";
      cin >> numar1 ;
      cin.ignore();
      cout << "Introduceti al doi-lea numar intreg: ";
      cin  >> numar2;
      cin.ignore();
      suma=numar1 + numar2;
      cout <<"Suma: "<< numar1 << " + " << numar2 << " = ";
      cout << suma << endl;
      cin.get();
      return 0;
    }
    


        Operatorul de scadere

        
    //Diferenta a doua numere intregi 
    
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
     int  numar1,numar2,difer;
      cout << "Introduceti primul numar intreg: ";
      cin >> numar1 ;
      cin.ignore();
      cout << "Introduceti al doi-lea numar intreg: ";
      cin  >> numar2;
      cin.ignore();
      difer= numar1 - numar2;
      cout <<"Diferenta: "<< numar1 << " - " << numar2 << " = ";
      cout << difer << endl;
      cin.get();
      return 0;
    }
    


        Operatorul de inmultire

        
    //Produsul a doua numere intregi 
    
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
    int  numar1,numar2,produs;
      cout << "Introduceti primul numar intreg: ";
      cin >> numar1 ;
      cin.ignore();
      cout << "Introduceti al doi-lea numar intreg: ";
      cin  >> numar2;
      cin.ignore();
      produs=numar1 * numar2;
      cout <<"Produsul: "<< numar1 << " * " << numar2 << " = ";
      cout << produs << endl;
      cin.get();
      return 0;
    }
    


        Operatorul de impartire

        
    //Raportul a doua numere intregi 
    
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
    float  numar1,numar2,raport;
      cout << "Introduceti primul numar : ";
      cin >> numar1 ;
      cin.ignore();
      cout << "Introduceti al doi-lea numar : ";
      cin  >> numar2;
      cin.ignore();
      raport=numar1/numar2;
      cout <<"Raportul: "<< numar1 << " / " << numar2 << " = ";
      cout << raport << endl;
      cin.get();
      return 0;
    }
    
    


        Toate aplicatiile de sus pot fi condensate intr-o singura aplicatie:
        
    //Operatii Cu Intregi
    
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
     float  numar1,numar2;
      cout << "Introduceti doua numere separate prin spatiu : ";
      cin >> numar1 >> numar2;
      cin.ignore();
      cout << numar1 << " + " << numar2 << " = "
           << numar1 + numar2 << endl;
      cout << numar1 << " - " << numar2 << " = "
           << numar1 - numar2 << endl;
      cout << numar1 << " * " << numar2 << " = "
           << numar1 * numar2 << endl;
      cout << numar1 << " / " << numar2 << " = "
           << numar1 / numar2 << endl;
      cout << numar1 << " % " << numar2 << " = "
           << numar1 % numar2 << endl;
    
      cin.get();
      return 0;
    }
    


        Operatorul combinat de atribuire si aritmetic

        Pentru a evita expresiile de genul: i=i+1 adica sa atribuim lui i vechea valoare a lui i adunata cu 1, se foloseste operatorul combinat de atribuire si aritmetic. Conform acestui operator expresia i=i+1 se mai poate scrie: i+=1
        Aceasta forma de scriere nu este limitata la operatorul de adunare. Putem deci scrie in loc de i=i*22 expresia: i*=22 sau in loc de valmax=valmax/55 putem scrie valmax/=55

        Operatorul modulo

        Efectueaza impartirea a doua numere dar returneaza numai restul
        Exemplu 7 % 5 returneaza 2

  • Operatori pe biti

        AND logic -- operatorul &

        Operatia AND este deseori folosita pentru a realizeaza o masca pentru extragerea anumitor biti dintr-un operand. Operatorul folosit este & .
       Pentru exemplificare, vom realiza in continuare o aplicatie care realizeaza functia logica & intre doi operanzi si sub forma binara atat operanzii cat si rezultatul.
       Aplicatia se bazeaza pe deci pe functia afis_bin(unsigned int,int) , functie care se presupune ca este inclusa in fisierul stadfx.h sau in programul principal:

    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	unsigned int a,b;
    	cout << " \n\n\tOperatii pe biti: ";
    	cout <<"\n\n\t Introduceti numarul a:";
    	cin >> a;
    	cout <<"\n\t Introduceti numarul b:";
    	cin >> b;
    	cout<<"\n\n    a:\t";
    	afis_bin(a,16);
    	cout<<"\n\n    b:\t";
    	afis_bin(b,16);
    	cout<<"\n\na & b:\t";
    	afis_bin(a&b,16);
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


    Dupa rularea programului in "Command Prompt" se afiseaza:



    Daca se doreste introducerea operanzilor in format hexa, programul devine:

    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main(void)
    {
    	unsigned int a,b;
    	cout << " \n\n\tOperatii pe biti: ";
    	cout <<"\n\n\t Introduceti numarul a:";
    	cin >> hex >> a;
    	cout <<"\n\t Introduceti numarul b:";
    	cin >> hex >> b;
    	cout<<"\n\n    a:\t";
    	afis_bin(a,16);
    	cout<<"\n\n    b:\t";
    	afis_bin(b,16);
    	cout<<"\n\na & b:\t";
    	afis_bin(a&b,16);
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


        SAU logic -- operatorul |

        Operatia SAU este deseori folosita pentru a realizeaza o setare a anumitor biti dintr-un operand. Operatorul folosit este |

        SAU exclusiv - operatorul ^

        Operatia SAU exclusiv este deseori folosita pentru complementarea anumitor biti dintr-un operand. Operatorul folosit este ^

        NOT - operatorul ~

        Operatia NOT realizeaza complementarea bitilor dintr-un operand. Operatorul folosit este ~

         Operatorul de siftare stanga
         n << p ;
        Deplaseaza spre stanga cu p pozitii a bitilor ce compun in binar valoarea n. Pe pozitia cea mai nesemnificativa se pune 0. O deplasare spre stanga cu 1 pozitie este echivalenta cu o inmultire cu 2. Astfel 3 << 2 =12

         Operatorul de siftare dreapta
         n >> p;
        Deplaseaza spre dreapta cu p pozitii a bitilor ce compun in binar valoarea n. Pe pozitia cea mai semnificativa se pune 0. O deplasare spre dreapta cu 1 pozitie este echivalenta cu o impartire cu 2 cu 2. Astfel 24 << 3 = 3

  • Exponenti

        Nu exista operator pentru functia exponent dar se pot calcula folosind functia pow. Functia pow are doua argumente: primul argument este numarul iar cel de-al doilea este exponentul.

         Exemplu de aplicatie ce utilizeaza functia pow

        Urmatorul program calculeaza aria laterala a unei roti la care se cunoaste raza jentii si inaltimea cauciucului.
        Se utilizeaza functia pow din < math.h >

    #include "stdafx.h" 
    #include < iostream >
    #include < math.h >
    using namespace std;
    int main()
    {
    	double raza, h_cauciuc;
    	double pi = 3.14;
    	cout << "\n\n\tIntroduceti raza jentii:";
    	cin >> raza;
    	cout << "\n\n\tIntroduceti inaltimea cauciucului:";
    	cin >> h_cauciuc;
    	raza += h_cauciuc;
    	cout << "\n\n\tAria laterala a rotii de raza : " << raza << " este : " << pi * pow(raza, 2.0);
    	cin.ignore();
    	cin.get();
    	return 0;
    }
    


        C#

    static void Main(string[] args)
    {
    	double raza, h_cauciuc;
    	String  raza_s;
    	String  h_cauciuc_s;
    	double pi = System.Math.PI;
    	Console.Write("\n\n\tIntroduceti raza jentii:");
    	raza_s = Console.ReadLine();
    	Console.Write("\n\n\tIntroduceti inaltimea cauciucului:");
    	h_cauciuc_s = Console.ReadLine();
    	raza = System.Convert.ToDouble(raza_s);
    	h_cauciuc = System.Convert.ToDouble(h_cauciuc_s);
    	raza += h_cauciuc;
    	Console.Write("\n\n\tAria laterala a rotii de raza :" + raza + " este:" + pi * System.Math.Pow(raza, 2));
    	Console.ReadLine();
    }
    


  • Conceperea si realizarea unui program


        Pana in prezent am prezentat diverse programe in scopul de a introduce diverse notiuni cum ar fi : constanta, variabila, instructiune, declaratie, functie, biblioteca, spatiu de nume.
        In acest moment putem sa concepem si sa realizam un program, avand suficiente notiuni.


        Etapele realizarii unui program


        Realizarea unui program presupune o serie de etape care trebuiesc urmate cum ar fi:
    • Analiza problemei de rezolvat, schitarea schemei logice.
    • Stabilirea mediului de programare
    • Stabilirea variabilelor principale
    • Stabilirea variabilelor secundare (intermediare)
    • Se ia un "schelet" de program.
    • Se definesc variabilele.
    • Citirea valorilor si atribuirea acestora, variabilelor
    • Implementarea schemei logice
    • Afisarea rezultatelor
    • Testarea rularii corecte
    • Reluarea pasilor anteriori daca programul nu a rulat corect sau au fost greseli


        Sa luam de exemplu o tema extrem de simpla:

         Tema program

        Sa se realizeze un program care cere utilizatorului doua numere reale, dupa care afiseaza produsul acestora.

         Rezolvare
    • Analiza problemei- Trebuiesc citite doua valori si inscrise in doua variabile. Se face produsul lor si se afiseaza rezultatul
    • Stabilirea mediului de programare - Aleg Visual Studio2005 - Console Applications
    • Stabilirea variabilelor principale - Stabilesc variabilele double op1 si double op2
    • Stabilirea variabilelor secundare - Stabilesc variabila intermediara float prd
    • Se ia un "schelet" de program ( partea minimala a unui program, parte care trebuie continuta de orce program).
    //Aceasta parte de program este continuta de orice program scris in spatiul std
    
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
    
      cin.ignore();
      cin.get();
      return 0;
    }
    
    • Se definesc variabilele.
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
    
      double op1,op2;
      float prd;
    
      cin.ignore();
      cin.get();
      return 0;
    }
    
    • Citirea valorilor si atribuirea acestora, variabilelor
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
      double op1,op2;
      float prd;
      
      cout << "Introduceti primul numar: ";
      cin >> op1 ;
      cout << "Introduceti al doilea numar: ";
      cin  >> op2;
     
      cout << prd ;
      cin.ignore();
      cin.get();
      return 0;
    }
    
    • Implementarea schemei logice
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
      double op1,op2;
      float prd;
      cout << "Introduceti primul numar: ";
      cin >> op1 ;
      cout << "Introduceti al doilea numar: ";
      cin  >> op2;
      
      prd=op1 * op2;
     
      cin.ignore();
      cin.get();
      return 0;
    }
    
    • Afisarea rezultatelor
    // Programul calculeaza produsul a doua numere
    #include "stdafx.h"
    #include < iostream >
    using namespace std;
    
    int main()
    {
      double op1,op2;
      float prd;
      cout << "Introduceti primul numar: ";
      cin >> op1 ;
      cout << "Introduceti al doilea numar: ";
      cin  >> op2;
      prd=op1 * op2;
    
      cout <<"Produsul este:";
      cout << prd ;
      
      cin.ignore();
      cin.get();
      return 0;
    }
    


       C#