Doriți să reacționați la acest mesaj? Creați un cont în câteva clickuri sau conectați-vă pentru a continua.

Capitolul 2.6. Operatori relationali si logici

In jos

Capitolul 2.6. Operatori relationali si logici Empty Capitolul 2.6. Operatori relationali si logici

Mesaj  zooky Mier Mar 18, 2009 11:45 am

Operatorii relationali sint > >= < <=. Ei au toti aceasi pondere. Sub ei in tabelul de ponderi se afla operatorii de egalitate == != , care au o aceeasi pondere. Operatorii relationali au ponderea mai mica decit cei aritmetici, asa ca expresii de tipul i < lim-1 se evalueaza ca i < (lim-1), asa cum ar fi de asteptat.

Mai interesanti sint conectorii logici && si ||. Expresiile care-i contin sint evaluate de la stinga la dreapta si evaluarea se opreste in clipa in care se cunoaste adevarul sau falsul rezultatului. Aceste proprietati se dovedesc critice in scrierea programelor. De exemplu iata o bucla luata din functia de intrare getline, pe care am scris-o in Capitolul 1:

for (i=0; i<lim-1 && (c = getchar()) != '\n' && c != EOF;++i)
s[i] = c;

In mod clar, inainte de a citi un nou caracter trebuie vazut daca mai exista loc pentru a-l depune in tabloul s , asa ca testul i<lim-1 trebuie facut in primul rind. Nu numai atit dar daca testul esueaza, nu trebuie sa mai citim un nou caracter.
Similar, ar fi nepotrivit sa testam daca c este EOF inainte de apelul lui getchar; apelul trebuie sa aiba loc inainte ca sa testam caracterul c.
Ponderea lui && este mai mare decit cea a lui || si amindoua sint mai mici decit cele ale operatorilor relationali si de egalitate, asa ca expresii de tipul

i<lim-1 && (c = getchar()) != '\n' && c != EOF

nu mai au nevoie de paranteze suplimentare. Dar, deoarece ponderea lui != este mai mare decit cea a asignarii, este nevoie de paranteze in

(c = getchar()) != '\n'

pentru a obtine rezultatul dorit.
Operatorul unar de negatie "!" converteste un operand nonzero sau adevarat in zero si un operand zero sau fals in 1. O utilizare obisnuita a lui ! este in constructii de tipul

if (!inword)

mai degraba decit

if (inword == 0)

Este mai greu sa generalizam care forma este mai buna. Constructiile de tipul !inword arata mai frumos ("daca nu e in cuvint"), dar constructiile mai complicate pot fi greu de inteles.

Exercitiul 2.1. Scrieti o bucla echivalenta cu bucla for de mai sus fara a folosi &&.
zooky
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 31
Localizare : Cernatesti City

https://e-learning.forumgratuit.ro

Sus In jos

Sus

- Subiecte similare

 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum