Sunteți pe pagina 1din 8

Laborator 1

Generalități. Fundamente C/C++


1. Aplicaţii rezolvate

Exercițiu 1. Transmiterea unui mesaj pe ecran

#include<iostream>
using namespace std;

void main()
{
printf("\tSalut limbajul de programare C/C++\n"); //varianta C/C++
cout << "\tSalut limbajul de programare C/C++\n"; //varianta C++
}

Exercițiu 2. Afisarea din mai multe ipostaze a caracterului 'A'

#include<iostream>
using namespace std;

void main()
{

const char a='A'; // a este numele constantei, 'A' este valoarea

//obtinerea informatiilor de prelucrare dorite


printf("zec=%d oct=%o hex=%x\n", a, a, a); //varianta C/C++
cout << "zec=" << int(a) << ' ' << "oct=" << oct << int(a) << ' ' << "hex=" << hex <<
int(a) << '\n'; //varianta C++

//transmiterea informatiei rezultat


printf("%c %c %c %c %c %c %c\n", a, 'A', 65, 0101, 0x41, '\101', '\x41'); //varianta
C/C++
cout << a << ' ' << 'A' << ' ' << char(65) << ' ' << char(0101) << ' ' << char(0x41)
<< ' ' << '\101' << ' ' << '\x41' << '\n'; //varianta C++
}

Exercițiu 3. Adunarea a doua numere intregi

//caz a) - valorile sunt direct introduse la iesire

#include<iostream>
using namespace std;

int main()
{
printf("2+5=%d\n", 2 + 5); //varianta cu printf
cout << "2+5=" << 2 + 5 << '\n'; //varianta cu cout
system("pause");
return 0;
}

//caz b) - valorile sunt inregistrate prin constante (locatii de memorie cu valoare


rezervata fixa)

#include<iostream>
using namespace std;

int main()
{
const int a = 4, b = 2;
printf("%d+%d=%d\n", a, b, a + b); //varianta cu printf
cout << a << '+'<<b << '=' << a + b << '\n'; //varianta cu cout
system("pause");
return 0;
}

//caz c) - valorile sunt inregistrate prin variabile (locatii de memorie cu valoare


variabila (schimbabila))

#include<iostream>
using namespace std;

int main()
{
int a = 4, b; //a se declara cu initializare, b fara initializare
b = 2; //lui b i se atribuire o valoare ulterioara declararii acesteia
printf("%d+%d=%d\n", a, b, a + b); //varianta cu printf
b++; //am folosit operatorul de incrementare, practic b primeste o noua valoare, si
anume 3
cout << a << '+'<<b << '=' << a + b << '\n'; //varianta cu cout
system("pause");
return 0;
}

//caz d) - cele doua valori intregi se vor da de la tastatura

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

int main()
{
int a, b;

//vom utiliza printf-scanf


printf("Dati primul numar: ");
scanf("%d", &a);

//vom utiliza cout-cin


cout << "Dati al doilea numar: ";
cin >> b;

//suma celor doua numere citite


int s;
s = a + b;
printf("%d+%d=%d\n", a, b, s);
cout << a << '+' << b << '=' << s << '\n';

system("pause");
return 0;
}

//caz e) - se va completa suma cu media aritmetica a celor doua valori

#include<iostream>
using namespace std;

int main()
{
int a, b;
cout << "Dati primul numar: ";
cin >> a;
cout << "Dati al doilea numar: ";
cin >> b;
//suma celor doua numere citite
int s;
s = a + b;
//media aritmetica
float m;
m = (float)s / 2; //m = s / 2.;
cout << "Suma lui " << a << " si " << b <<": " << s << '\n';
cout << "Media lui " << a << " si " << b <<": " << m << '\n';
system("pause");
return 0;
}

//caz f) - incrementari/decrementari in suma

#include<iostream>
using namespace std;

int main()
{
int a, b;
cout << "Dati primul numar: ";
cin >> a;
cout << "Dati al doilea numar: ";
cin >> b;
int s1,s2;
s1 = ++a + b++; //a++;s1=a+b;b++; //s1 = --a + b--;
s2 = (a++)+(++b); //s2 = (a--) + (--b);
cout << s1 << ' ' << s2 << '\n';
system("pause");
return 0;
}
Exemplu:
a=2 b=5
s1=(++a)+(b++); → 3+5=8
a=3 b=6
s2=(a++)+(++b); → 3+7=10

//caz g) - cele doua valori ce se se sumeaza, se vor retine intr-un sir de numere

#include<iostream>
using namespace std;

int main()
{
int a[] = {2,5}; //acesta este sirul ce va contine doua numere: 2 si 5
int s; //suma celor doua numere din sir
s = a[0] + a[1]; //a[0] este primul numar din sir (adica, 2), a[1] este cel de-al
doilea numar din sir (adica, 5)
cout << a[0] << '+' << a[1] << '=' << s << '\n';
system("pause");
return 0;
}

Exercițiu 4. Se citesc doua numere intregi de la tastatura. Se vor determina valorile extreme

//caz a) - utilizarea operatorului conditional in program

#include<iostream>
using namespace std;

int main()
{
int a, b; //numerele ce vor fi citite
int m, M; //m - minimul, M - maximul
cout << "Primul numar: ";
cin >> a;
cout << "Al doilea numar: ";
cin >> b;
(a < b) ? (m = a, M = b) : (m = b, M = a);
cout << "Minimul: " << m << '\n';
cout << "Maximul: " << M << '\n';
system("pause");
return 0;
}

//caz b) - utilizarea operatorului conditional in macrouri de definire. Vom utiliza macrouri


cu parametri

#include<iostream>
using namespace std;
#define min(x,y) x<y?x:y
#define max(x,y) x>y?x:y

int main()
{
int a, b; //numerele ce vor fi citite
int m, M; //m - minimul, M - maximul
cout << "Primul numar: ";
cin >> a;
cout << "Al doilea numar: ";
cin >> b;
m = min(a, b);
M = max(a, b);
cout << "Minimul: " << m << '\n';
cout << "Maximul: " << M << '\n';
system("pause");
return 0;
}

Exercițiu 5. Se dau trei numere intregi a,b,c. Pot reprezenta ele lungimile laturilor unui triunghi?

//(Vom utiliza macrouri tip constanta)

#define _CRT_SECURE_NO_WARNINGS

#define intregi int


#define afiseaza printf
#define citeste scanf
#define adevarat ?
#define altfel :
#define si &&

#include<iostream>
using namespace std;

void main()
{
intregi a, b, c;

afiseaza("Dati lungimile laturilor:\n");


afiseaza("\tprima latura: ");
citeste("%d", &a);
afiseaza("\ta doua latura: ");
citeste("%d", &b);
afiseaza("\ta treia latura: ");
citeste("%d", &c);
((a > 0) si(b > 0) si(c > 0) si(a < b + c) si(b < a + c) si(c < a + b)) adevarat
afiseaza("Formeaza triunghi.\n") altfel afiseaza("Nu formeaza triunghi.\n");

system("pause");
}

Exercițiu 6. Caractere și șiruri

//Declararea/Afisarea unui caracter

#include<iostream>
using namespace std;

int main()
{
char a = 'A';
printf("%c",a);
cout << a;
system("pause");
return 0;
}

//Declararea/Afisarea unui sir de caracter

#include<iostream>
#include<string>
using namespace std;

int main()
{
const char* s1 = "ABC";
char s2[] = "DEF";
string s3 = "GHI";
cout << s1;
cout << s2;
cout << s3;
cout << '\n';
system("pause");
return 0;
}

Exercițiu 7. Să se calculeze puterea a n-a a lui 2, unde n este un întreg citit de la tastatură.
Acest exemplu il putem folosind unul dintre operatorii speciali pe care ii are C++-ul si anume,
operatorul de deplasare pe biti spre stanga <<. Fie x un numar intreg. Prin x<<1 intelegem deplasarea spre
stanga a bitilor din reprezentarea pe biti (in baza 2) a lui x, completandu-se cu 0 in dreapta. Astfel, de
exemplu, daca x=5, adica 101,atunci deplasarea pe spre stanga va duce la obtinerea numarului x=10, adica
1010. De fapt, o deplasare spre stanga cu o unitate reprezinta o inmultire a lui x cu 2.
O deplasare spre stanga cu p pozitii a lui x reprezinta o inmultire a lui x cu 2 de p ori. Folosind
aceste artificiu se poate calcula puterea lui 2 a unui numar dat.

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>

int main()
{
int n, m = 1; /* aici se declara atat variabila n, cat si m care se initializeaza cu
1 */
printf("Dati puterea lui 2: ");
scanf("%d", &n);
printf("2^%d = %d\n", n, m = (m << n));
system("pause");
return 0;
}

/* Al doilea apel al functiei printf are un element de afisare a valorii expresiei m=(m<<n).
Valoarea unei expresii de forma m=e, care este si instructiune de atribuire, este tocmai
valoarea expresiei e.
Astfel, cand scriem m=(m<<n), inseamna ca m este shiftat spre stanga cu n pozitii, deci m,
initial 1, devine egal
cu puterea n a lui 2. Aceasta este si valoarea expresiei m=(m<<n), care va fi afisata. */

Exercițiu 8. Să se realizeze o rutină care execută lucrul pe biţi.

#include<iostream>

int main()
{
unsigned int a = 5;
const int b = 7;
printf("%d <sau pe biti> %d este %d\n", a, b, a | b);
printf("%d <si pe biti> %d este %d\n", a, b, a & b);
printf("%d <sau exclusiv pe biti> %d este %d\n", a, b, a ^ b);
printf("5 <complementat pe biti> este %u variabila fiind pe %u octeti\n", ~a,
sizeof(a));
system("pause");
return 0;
}

Exercițiu 9. Se citeste un număr zecimal si unul in hexa de cel mult 4 cifre fiecare şi se cere să se afişeze
valorile respective în sistemele de numerotaţie cu baza 10, 8, şi 16.

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>

int main()
{
unsigned int i, h;
printf("Dati nr. intreg zecimal: ");
scanf("%d", &i);
printf("Dati nr. intreg hexazecimal: ");
scanf("%x", &h);

printf("\nnr. zec -\tBaza 10: %u\tBaza 8: %o\tBaza 16: %x", i, i, i);


printf("\nnr. hex -\tBaza 10: %u\tBaza 8: %#o\tBaza 16: %#X\n", h, h, h);
/* # este folosit ptr. afisarea unui prefix (0 sau 0x) inaintea valorilor octale,
respectiv hexazecimale */
system("pause");
return 0;
}

Exercițiu 10. Să se scrie un program care citeşte valoarea lui x, pozitiv, afişează valorile lui x, [x], {x},
calculează şi afişează valoarea următoarei expresii: 5*x*[x]-3*{x}+15.

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>

int main()
{
double x;
int y; // pentru partea intreaga
double z; // pentru partea zecimala

scanf("%lf", &x);

printf("x= %g\t", x);


printf("[x]= %d\t", y = x);
printf("{x}= %f\n", z = x - y);

printf("e= %g\n", 5 * x * y - 3 * z + 15);

system("pause");
return 0;
}

Exercițiu 11. Rezolvaţi următoarele teste grilă propuse.


a) Cu ce linie trebuie completat spaţiul punctat, pentru ca afişarea rezultată să fie următoarea:
25_ _:_7.040?
#include<iostream>

void main()
{
int a=25;
float b=7.04;
......
}

a) printf("\n%4d:%-10f",a,b);
b) printf("\n%6d:%10f",a,b);
c) printf("\n%-4d:%6.3f",a,b);
d) printf("\n%-4d:%-10.3f",a,b);
e) printf("\n%-d:%-.3f",a,b);

Răspuns final: c)

b) Care va fi valoarea afişată în urma execuţiei rutinei de mai jos?


#include<iostream>
void main()
{
int a=3, b=2, c=4, d;
d=(a<<c)+(a&b)+(c|b);
printf("%d\n",d);
}
a) 41
b) 56
c) 61
d) eroare
e) 0
Răspuns final: b)

2. Aplicaţii propuse
1. Să se scrie un program care citeşte pe n de tip întreg şi afişează valoarea expresiei
n/(n+1) cu 15 zecimale.
2. Să se determine maximul şi minimul a două numere întregi, folosind macrouri şi
cunoştinţele din acest laborator.
3. Să se scrie un program care să calculeze numărul de picioare dintr-o curte, în care se
află g găini, p pisici şi un om.
4. Folosind operatorul condiţional să se verifice dacă un număr real x se află în intervalul

[a,b), unde a şi b sunt date de la tastatură.


5. Folosind operatorul condiţional, să se scrie un program care citeşte valoarea variabilei
x şi afişează valoarea funcţiei f(x) definită ca mai jos:
| 3x*x+7x-10 pentru x<0
f(x) = | 2 pentru x=0
| 4x*x pentru x>0

S-ar putea să vă placă și