Sunteți pe pagina 1din 6

2022/07/09 05:37 1/6 Operatori

Operatori

Scopul acestui laborator este prezentarea operatorilor disponibili în limbajul C, ce pot fi utilizați în
vederea procesării datelor. Sursa de lucru pentru acest laborator poate fi descărcată de aici:

laborator3.cpp

Operatorii pot fi împarțiți în mai multe categorii, după cum urmează:

1. Aritmetici

2. Relaționali

3. Logici

4. Operatori pe biți

5. Operatori de asignare

6. Alți operatori

1.Operatori aritmetici

Pentru a explica modul în care sunt utilizați operatorii, vom utiliza doi operanzi, a=5 si b=3.

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2021/10/03 11:58 c:1:prog:lab:lab3 https://wiki.mta.ro/c/1/prog/lab/lab3

2.Operatori relaționali

3.Operatori logici

Pentru această secțiune vom presupune că a=0 și b=1. Convenția legată de valorile de adevăr este
că 0 înseamnă fals, iar orice este diferit de 0 ( în general se folosește valoarea 1 ) înseamnă
adevărat.

4.Operatori pe biți

Pentru a aplica un operator pe biți asupra unui operand, vom aplica un o regulă asupra fiecărui bit a
acelui operand. Funcțiile aplicate pe 2 biți, numiți p și q, sunt prezentate în următorul tabel.

https://wiki.mta.ro/ Printed on 2022/07/09 05:37


2022/07/09 05:37 3/6 Operatori

Presupunând că A și B sunt două variabile de tipul unsigned char cu A=60 și B=13,

A = 0 0 1 1 1 1 0 0
B = 0 0 0 0 1 1 0 1
A&B = 0 0 0 0 1 1 0 0
A|B = 0 0 1 1 1 1 0 1
A^B = 0 0 1 1 0 0 0 1
~A = 1 1 0 0 0 0 1 1

5.Operatori de asignare

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2021/10/03 11:58 c:1:prog:lab:lab3 https://wiki.mta.ro/c/1/prog/lab/lab3

6.Alți operatori

Random

Problema generării unor numere aleatoare poate fi considerată iniţial una complicată, dar limbajul C
ne pune la dispoziţie biblioteca stdlib, cu ajutorul căreia lucrurile vor deveni foarte simple. Funcţiile şi
constantele acestei biblioteci sunt declarate în header-ul stdlib.h pe care va trebui să-l includeţi la
începutul programului pe care îl scrieţi.

Utilizând funcţia rand() veţi genera numere aleatoare cu valori cuprinse între 0 si RAND_MAX, unde
RAND_MAX este o constanta definită în stdlib.h, având în general valoarea maximă a tipului int.

Valorile returnate de această funcţie sunt de fapt termenii unui şir de numere generat după o anumită
formula ce foloseşte ca punct de plecare o valoare dată. Din cauza acestui aspect, pentru aceeasi
valoare iniţială fixată, programul va genera la fiecare rulare aceleaţi numere aleatoare. Pentru a evita

https://wiki.mta.ro/ Printed on 2022/07/09 05:37


2022/07/09 05:37 5/6 Operatori

acest lucru, biblioteca pune la dispozitie funcţia srand() care primeşte ca parametru un număr întreg
reprezentând valoarea iniţiala utilizată în calcularea şirului de numere aleatoare.

Astfel, paşii pentru rezolvarea problemei noastre sunt următorii :

1. fixarea valorii utilizate în generarea numerelor: srand( seed ); - unde seed este o valoare de tip
intreg

2. obţinerea unui număr pseudoaleator: n = rand(); - unde n este numarul intreg generat aleator

Notă: pentru a garanta că la fiecare rulare a programului valoarea seed este unică, recomandăm
apelarea funcţiei srand cu ora locală a calculatorului în secunde.

Exerciții

1. Scrieți un program care să afișeze dimensiunea tuturor tipurilor de date.

2. Se consideră un număr real, x, reprezentând un unghi exprimat în radiani. Să se convertească în


grade, minute şi secunde valoarea lui x. Nu este permisă utilizarea cast-urilor.

3. Afişati pe ecran 5 rânduri, fiecare conţinând 3 numere întregi, separate prin spaţiu, generate în
mod aleator.

3.1. Rulaţi programul de mai multe ori cu aceeasi valoare seed. Ce


observaţi ?
3.2. Schimbaţi valoarea seed şi rulaţi din nou. Ce observaţi ?

4. Găsiți o metodă prin care să generați numere diferite la fiecare rulare a programului.

5. Se consideră două numere naturale nenule a şi b. Se cere să se genereze şi să se afiseze:

un număr natural aleator mai mic decât a;


un număr natural întreg aleator din intervalul [-a, b];
un număr natural aleator din intervalul [a, b];
un număr natural real aleator din intervalul [-a, b];

6. Care este diferenta dintre urmatoarele 2 secvente de cod si din ce cauza obtinem rezultate diferite:

// Secventa 1
#include <stdlib.h>
#include <stdio.h>

void main()
{
int x = 0;

int rez_x = x++;


int y = --rez_x;

printf("x=%d\n", x);
printf("rez_x=%d\n", rez_x);

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2021/10/03 11:58 c:1:prog:lab:lab3 https://wiki.mta.ro/c/1/prog/lab/lab3

printf("y=%d",y);
}

// Secventa 2
#include <stdlib.h>
#include <stdio.h>

void main()
{
int x = 0;

int rez_x = ++x;


int y = rez_x--;

printf("x=%d\n", x);
printf("rez_x=%d\n", rez_x);
printf("y=%d", y);
}

From:
https://wiki.mta.ro/ - Cursuri Academia Tehnică Militară "Ferdinand I"

Permanent link:
https://wiki.mta.ro/c/1/prog/lab/lab3

Last update: 2021/10/03 11:58

https://wiki.mta.ro/ Printed on 2022/07/09 05:37

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