Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateC
C sharpCalculatoareCorel drawDot netExcelFox pro
FrontpageHardwareHtmlInternetJavaLinux
MatlabMs dosPascalPhpPower pointRetele calculatoare
SqlTutorialsWebdesignWindowsWordXml

Operatori speciali. Pointeri

calculatoare



+ Font mai mare | - Font mai mic



Operatori speciali. Pointeri

Notiuni teoretice



1.1 Operatorul ?

Operatorul ? este un operator foarte puternic si comod de folosit care inlocuieste declaratiile cu forma if-then-else (daca - atunci - altfel). Operatorul ternar ? are forma generala:

Exp1 ? Exp2: Expr3

Modul de lucru al operatorului ? este:

- se evalueaza expresia Exp1.

- daca este adevarata, se evalueaza Exp2 si devine valoarea expresiei

- daca Exp1 este falsa, se evalueaza Exp3 si valoarea acesteia devine valoarea expresiei. Exemplu:

x = 10;

y = x>9 ? 100 : 200;

In acest caz, lui y i se atribuie valoarea 100. Daca x ar fi fost mai mic decat 9, lui y i s-ar fi atribuit valoarea 200. Scris cu o declaratie de tip if - else, fragmentul de program ar fi aratat astfel:

x= 10;

if (x>9) y = 100;

else y = 200 ;

1.2. Operatorii de pointer & si *

Un pointer este o variabila care contine o adresa de memorie. Aceasta adresa reprezinta locatia unui alt obiect (cel mai adesea o alta variabila) din memorie. O variabila pointer este o variabila despre care s-a precizat in mod explicit ca pastreaza un pointer al unui obiect de tipul specificat al acelei variabile. Cunoasterea adresei unei variabile poate fi de mare ajutor in anumite rutine.

Operatorul & este un operator unar care returneaza operandului sau adresa de memorie. Exemplu:

m= &cont;

In m este plasata adresa de memorie a variabilei cont. Aceasta adresa reprezinta localizarea interna a variabilei in interiorul calculatorului si nu are nici o legatura cu valoarea variabilei cont. Presupunand ca variabila cont se afla la locatia de memorie 2000 si valoarea 100, m va avea valoarea 2000.

Operatorul * reprezinta complementul lui &. Operatorul * calculeaza valoarea variabilei localizate la adresa care urmeaza. De exemplu, daca m contine adresa variabilei de memorie cont,

q = *m;

amplaseaza valoarea lui cont in q. Acum q are valoarea 100

Obs. Operatorul de pointer & nu are nici o legatura cu operatorul pe biti & (SI).

Operatorul de poninter * nu are nici o legatura cu operatorul de multiplicare *.

Declaratia unui pointer consta dintr-un tip de baza, un asterisc si numele variabilei . Forma generala de declarare a unei variabile pointer este:

tip *nume;

De exmplu, pentru a declara ch   ca pointer pentru un caracter, scrieti:

char *ch;

In acest caz, ch nu este un caracter, ci un pointer la caracter. Tipul de date indicat de pointer este denumit tipul de baza al pointerului. Un pointer trebuie sa indice numai spre date de acelasi tip cu tipul sau de baza. Intr-o declaratie se pot combina variabile pointer cu variabile nonpointer. De exemplu:

int x, *y, cont;

declara x si cont ca variabile intregi si y ca pointer spre o variabila de tip intreg.

1.3. Operatorul virgula

Operatorul virgula se foloseste pentru evaluarea succesiva a mai multor expresii. Partea stanga a operatorului virgula este intotdeauna considerata de tip void. Aceasta inseamna ca expresia din dreapta devine valoarea totala a intregii expresii separate prin virgula. De exemplu:

x = (y=3, y+1);

mai intai atribuie lui y valoarea 3 si apoi ii atribuie lui x valoarea 4. Parantezele sunt necesare intrucat operatorul virgula are o prioritate mai redusa decat operatorul de atribuire.

Operatorul virgula are oarecum aceeasi semnificatie ca a cuvantului "si' folosit in expresia "fa asta si asta si ailalta'.

1.4. Alti operatori

Operatorul sizeof este un operator unar activ la compilare, care calculeaza lungimea in octeti a variabilei sau a specificatorului de tip, incadrat intre paranteze, pe care il precede. De exemplu, presupunand ca intregii au 2 octeti si variabilele in virgula mobila au 8 octeti, programul:

float f;

cout<<sizeof f;

cout<<sizeof (int);

va afisa pe ecran un 4 si un 2 sau doi de 4.

Operatorul punct (.) este folosit atunci cand se lucreaza cu o structura sau uniune. Operatorul sageata (->) este folosit la utilizarea unui pointer de structura sau uniune.

Parantezele sunt operatori care determina cresterea prioritarii operatiilor dintre acestea.

Parantezele drepte efectueaza indexarea tablourilor.

Cu prioritate maxima

() [] ->

!~++ -- - * & sizeof

<< >>

< <= > =>

&

&&

Cu prioritate minima

1.5. Expresii

Operatorii, constantele si variabilele reprezinta componentele expresiilor. In C/C++, o expresie este orice combinatie valida a acestor elemente. Deoarece majoritatea expresiilor tind sa se conformeze principiilor generale ale algebrei, acestea sunt respectate adesea. Cu toate acestea, cateva aspecte ale expresiilor sunt specifice limbajelor C/C++.

Standarul ANSI C nu specifica ordinea in care sunt evaluate subexpresiile din cadrul unei expresii. Aceasta lasa compilatorului de C libertatea de a rearanja o expresie in vederea unei utilizari optime a codurilor. Cu toate acestea, o alta semnificatie a acestui fapt este ca in realizarea unui program nu trebuie niciodata sa contez pe o anumita ordine de evaluare a subexpresiilor. De exemplu, expresia:

x= f1() + f2();

nu ne asigura de faptul ca f1() va fi apelata inaintea lui f2().

Aplicatii

Lansati in executie aplicatia Visual C++ 2008 Express Edition:

a)   Din meniul Start-> Programs-> Microsoft Visual C++ 2008 Express Edition, executati clic pe optiunea Microsoft Visual C++ 2008 Express Edition.

Creati un nou proiect, Proiect1 si un nou fisier File1.cpp:

a)      Din meniul File->New, alegeti optiunea Project;

b)      In fereastra New Project selectati optiunea Win32 si verificati sa fie selectat Win32 Console Application;

c)      In campul Name introduceti Proiect1 si apasati OK;

d)      In fereastra deschisa apasati Next si apoi selectati optiunea Empty Project si apasati Finish;

e)      In sectiunea Solution Explorer executati clic dreapta pe directorul Source File si alegeti optiunea New-> Item

f)        In fereastra Add New Item selectati categoria Code si verificati sa fie selectata optiunea C++ File (.cpp);

g)      In campul Name tastati numele File1 si apasati Add.

In fisierul File1.cpp introduceti si testati urmatorul program:

#include <iostream>

using namespace std;

void main()

a)      Tastati programul dat, respectand liniile de cod;

b)      Compilati programul executand clic dreapta pe numele fisierului din sectiunea Solution Explorer si executand clic pe optiunea Compile;

c)      Corectati eventualele erori semnalate in sectiunea Output conform indicatiilor din laboratorul anterior;

d)      Dupa rezolvarea eventualelor erori, rulati programul selectand, din meniul Debug, optiunea Start Without Debugging

Obs. Acest program foloseste operatorul ? pentru a ridica la patrat o valoare intreaga data de catre utilizator, conservand semnul.

Pentru a compila un program se poate folosi combinatia de taste Ctrl+F7, iar pentru a rula programul Ctrl+F5.

Creati un nou proiect, Proiect2, si un nou fisier File2.cpp. Introduceti in fisierul creat si testati urmatorul program:

#include <iostream>

using namespace std;

void main()

a)      Urmati pasii prezentati la punctele 2.2 si 2.3.

Obs. Programul foloseste operatorii * si & pentru a memora valoarea 10 intr-o variabila denumita destinatie. Programul afiseaza pe ecran valoarea 10.

Creati un nou proiect, Proiect3, si un nou fisier File3.cpp. Introduceti in fisierul creat si testati urmatorul program:

#include <iostream>

using namespace std;

void main()

a)      Urmati pasii prezentati la punctele 2.2 si 2.3.

Obs. Programul afiseaza adresa de memorie a variabilei x. Adresa de memorie e exprimata in hexazecimal.

Creati un nou proiect, Proiect4, si un nou fisier File4.cpp. Introduceti in fisierul creat si testati urmatorul program:

#include <iostream>

using namespace std;

void main()

a)      Urmati pasii prezentati la punctele 2.2 si 2.3.

Obs. Programul afiseaza adresa variabilei x.

Creati un nou proiect, Proiect5, si un nou fisier File5.cpp. Introduceti in fisierul creat si testati urmatorul program:

#include <iostream>

using namespace std;

void main()

a)      Urmati pasii prezentati la punctele 2.2 si 2.3.

Obs. Urmatorul program afiseaza lungimea in octeti a tipurilor de date float si int.

Modificati programul anterior pentru a afla si numarul de octeti pe care sunt reprezentate tipurile de date char si double

a)      Introduceti doua instructiuni cout pentru a afisa sizeof char) si sizeof double

b)      Compilati programul si rezolvati eventualele erori;

c)      Cand la compilare nu mai sunt returnate erori rulati programul;

Creati un nou proiect, Proiect6, si un nou fisier File6.cpp. Introduceti in fisierul creat si testati urmatorul program:

#include <iostream>

using namespace std;

void main()

a)      Urmati pasii prezentati la punctele 2.2 si 2.3.

Obs. Urmatorul program testeaza daca trei numere introduse de utilizator pot constitui sau nu laturile unui triunghi.

Sa se scrie un program care afiseaza maximul dintre doua numere citite de la tastatura.

a)      Folositi ca baza de pornire programul anterior;

b)      Vor fi declarate si se vor citi de la tastatura doar variabilele a si b;

c)      Se va folosi operatorul ? pentru a testa daca a > b. Cand expresia este adevarata se va afisa concluzia ca a este mai mare decat b in caz contrar se va afisa mesajul ca b este mai mare decat a;

d)      Compilati (Ctrl+F7) si rulati programul (Ctrl+F5).

Sa se scrie un program care citeste trei numere, a, b si c, testeaza si afiseaza daca acestea sunt in progresie aritmetica.

a)      Folositi ca baza de pornire programul de la punctul 2.9;

b)      Modificati conditia. Indicatie: a, b, c sunt in progresie aritmetica daca: b (a+c)/2 sau a=(b+c)/2 sau c=(a+b)/2;

c)      <Modificati mesajele ce vor fi afisate in cele doua cazuri (cand sunt in progresie aritmetica si cand nu pot fi in progresie aritmetica);

d)      Compilati (Ctrl+F7) si rulati programul (Ctrl+F5).

Sa se scrie un program care sa citeasca de la tastatura un an, sa testeze si sa afiseze daca anul este bisect sau nu (anul trebuie sa fie divizibil cu 4, sa nu fie divizibil cu 100, mai putin anii care sunt divizibili cu 400).

Bibliografie

https://msdn.microsoft.com/en-us/library/ms859264.aspx



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1877
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved