Limbaje de Programare Curs 3 Iteraţia. Reprezentare internă. Operatori pe biţi

Σχετικά έγγραφα
Metode iterative pentru probleme neliniare - contractii

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.

III. Reprezentarea informaţiei în sistemele de calcul

Curs 4 Serii de numere reale

Aplicaţii ale principiului I al termodinamicii la gazul ideal

Sisteme diferenţiale liniare de ordinul 1

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.

Curs 1 Şiruri de numere reale

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro

MARCAREA REZISTOARELOR

Subiecte Clasa a VII-a

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.

Metode de interpolare bazate pe diferenţe divizate

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.

1. Reprezentarea numerelor şi operaţii aritmetice în sisteme de calcul.

Instructiunea while. Forma generala: while (expresie) instructiune;

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE


COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.

5.4. MULTIPLEXOARE A 0 A 1 A 2

Conice. Lect. dr. Constantin-Cosmin Todea. U.T. Cluj-Napoca

Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"

Asupra unei inegalităţi date la barajul OBMJ 2006

BARAJ DE JUNIORI,,Euclid Cipru, 28 mai 2012 (barajul 3)

Analiza bivariata a datelor

Subiecte Clasa a V-a

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor

2. Circuite logice 2.5. Sumatoare şi multiplicatoare. Copyright Paul GASNER

Esalonul Redus pe Linii (ERL). Subspatii.

Sisteme de numeraţie

Componente şi Circuite Electronice Pasive. Laborator 3. Divizorul de tensiune. Divizorul de curent

Laborator 11. Mulţimi Julia. Temă

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile

V O. = v I v stabilizator

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0

Seminar 5 Analiza stabilității sistemelor liniare

riptografie şi Securitate

Subiecte Clasa a VIII-a

Integrala nedefinită (primitive)

III.2.2. Reprezentarea în virgulă mobilă

SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0

Laborator 4 suport teoretic Tipuri de date utilizate în limbajul de programare C.

Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu

Curs 2 DIODE. CIRCUITE DR

Curs 2 Şiruri de numere reale

SEMINARUL 3. Cap. II Serii de numere reale. asociat seriei. (3n 5)(3n 2) + 1. (3n 2)(3n+1) (3n 2) (3n + 1) = a

Valori limită privind SO2, NOx şi emisiile de praf rezultate din operarea LPC în funcţie de diferite tipuri de combustibili

* K. toate K. circuitului. portile. Considerând această sumă pentru toate rezistoarele 2. = sl I K I K. toate rez. Pentru o bobină: U * toate I K K 1

Lucrarea de laborator nr. 2

MULTIMEA NUMERELOR REALE

2 Transformări liniare între spaţii finit dimensionale

Ecuaţia generală Probleme de tangenţă Sfera prin 4 puncte necoplanare. Elipsoidul Hiperboloizi Paraboloizi Conul Cilindrul. 1 Sfera.

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

Lucrare. Varianta aprilie I 1 Definiţi noţiunile de număr prim şi număr ireductibil. Soluţie. Vezi Curs 6 Definiţiile 1 şi 2. sau p b.

Examen AG. Student:... Grupa:... ianuarie 2011

a. 11 % b. 12 % c. 13 % d. 14 %

Proiectarea filtrelor prin metoda pierderilor de inserţie

Programarea Calculatoarelor

Subiecte Clasa a VIII-a

Functii Breviar teoretic 8 ianuarie ianuarie 2011

T R A I A N ( ) Trigonometrie. \ kπ; k. este periodică (perioada principală T * =π ), impară, nemărginită.

Ovidiu Gabriel Avădănei, Florin Mihai Tufescu,

CARACTERISTICILE LIMBAJULUI DE PROGRAMARE

Să se arate că n este număr par. Dan Nedeianu

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Algebră (1)

Metode Runge-Kutta. 18 ianuarie Probleme scalare, pas constant. Dorim să aproximăm soluţia problemei Cauchy

Fig Impedanţa condensatoarelor electrolitice SMD cu Al cu electrolit semiuscat în funcţie de frecvenţă [36].

Componente şi Circuite Electronice Pasive. Laborator 4. Măsurarea parametrilor mărimilor electrice

Spatii liniare. Exemple Subspaţiu liniar Acoperire (înfăşurătoare) liniară. Mulţime infinită liniar independentă

Laborator 6. Integrarea ecuaţiilor diferenţiale

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

Orice izometrie f : (X, d 1 ) (Y, d 2 ) este un homeomorfism. (Y = f(x)).

Ecuatii exponentiale. Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. a x = b, (1)

TEMA 9: FUNCȚII DE MAI MULTE VARIABILE. Obiective:

Geometrie computationala 2. Preliminarii geometrice

10 REPREZENTAREA DIGITALĂ

Criptosisteme cu cheie publică III

CIRCUITE LOGICE CU TB

Problema a II - a (10 puncte) Diferite circuite electrice

RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,

GEOMETRIE PLANĂ TEOREME IMPORTANTE ARII. bh lh 2. abc. abc. formula înălţimii

Mulțumim anticipat tuturor acelora care vor transmite critici/observații/sugestii

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB

PROGRAMAREA CALCULATOARELOR Note de curs


Arhitectura Calculatoarelor. Fizică - Informatică an II. 2. Circuite logice. Copyright Paul GASNER 1

Erori si incertitudini de măsurare. Modele matematice Instrument: proiectare, fabricaţie, Interacţiune măsurand instrument:

1. BAZE ŞI SISTEME DE NUMERAŢIE REPREZENTAREA DATELOR ÎN CALCULATOR ELEMENTE DE TEORIA CODURILOR... 36

( ) () t = intrarea, uout. Seminar 5: Sisteme Analogice Liniare şi Invariante (SALI)

1. PROPRIETĂȚILE FLUIDELOR

2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER

O generalizare a unei probleme de algebră dată la Olimpiada de Matematică, faza judeţeană, 2013

Capitolul 2 - HIDROCARBURI 2.5.ARENE

Al cincilea baraj de selecţie pentru OBMJ Bucureşti, 28 mai 2015

Transcript:

Limbaje de Programare Curs 3 Iteraţia. Reprezentare internă. Operatori pe biţi Dr. Casandra Holotescu Universitatea Politehnica Timişoara

Ce discutăm azi... 1 Iteraţia 2 Reprezentare internă 3 Operaţii pe biţi

Cicluri Cum obţinem prelucrări repetate ale datelor? recursivitate: fiecare apel creează noi copii de parametri cu alte valori cicluri: control direct al iteraţiilor, se modifică prin atribuire valorile variabilelor Două tipuri de cicluri: cu test iniţial (condiţia anterioară prelucrării) cu test final (condiţia după prelucrare)

Cicluri instruct. nu conditie? da instruct. da conditie? nu

Instrucţiunea while test iniţial nu conditie? da instruct.

Instrucţiunea while while ( expresie ) instrucţiune Atenţie: parantezele ( şi ) sunt obligatorii în jurul expresiei! Semantica instrucţiunii while: se evaluează expresia dacă e adevărată se execută instrucţiunea (sau setul de instrucţiuni) se revine la începutul ciclului, la re-evaluarea expresiei dacă e falsă nu se execută nimic! Corpul ciclului se execută atâta timp cât condiţia e adevărată.

Exemple: citirea unui nr. în mod iterativ #i n c l u d e <c t y p e. h> // pt. i s d i g i t ( ) #i n c l u d e <s t d i o. h> // pt. g e t c h a r ( ), ungetc ( ) u n s i g n e d r e a d n a t ( v o i d ){ i n t c ; u n s i g n e d r = 0 ; w h i l e ( i s d i g i t ( c = g e t c h a r ( ) ) ) // c a t timp e c i f r a r = 10 r + c 0 ; // compune numarul ungetc ( c, s t d i n ) ; // pune i n a p o i ce nu i c i f r a r e t u r n r ; i n t main ( v o i d ) { p r i n t f ( numarul c i t i t : %u\n, r e a d n a t ( ) ) ;

Instrucţiunea for O altă formă de ciclu cu test iniţial. for ( expr-initializare ; expr-conditie ; expr-actualizare ) instrucţiune poate fi rescris cu while astfel: expr-initializare ; while ( expr-conditie ) expr-actualizare Observaţii: oricare din cele 3 expresii (init., cond., act.) poate lipsi, dar cele 2 ; rămân (putem aveam for(;;)) daca lipseşte expr-conditie ciclu infinit

Exemple suma a n cifre de la intrare u n s i g n e d sumancif ( u n s i g n e d n ){ i n t i =0; u n s i g n e d r = 0 ; f o r ( i =0; i <n ; i ++){ // de l a 0 l a n 1 ( n o r i ) i n t c = g e t c h a r ( ) ; // c i t e s t e c a r a c t. i f ( c!= EOF && i s d i g i t ( c ) ) { // e c i f r a? r = r + ( c 0 ); // aduna l a r e z u l t a t r e t u r n r ;

Instrucţiunea do while test final instruct. da conditie? nu

Instrucţiunea do while Dacă ştim sigur că un ciclu trebuie executat cel puţin odată. do instrucţiune while ( expresie ) ; Semantica instrucţiunii do while: se execută instrucţiunea (sau setul de instrucţiuni) se evaluează expresia dacă e adevărată se revine la începutul ciclului, la re-executarea corpului ciclului dacă e falsă nu se mai execută nimic!

Exemple cifra max. până la EOF char maxcif ( ) { char r = 0 ; // i n i t cu \0 do{ i n t c = g e t c h a r ( ) ; // c i t e s t e c a r a c t. i f ( i s d i g i t ( c ) && c > r ){ // e c i f r a mai mare? r = c ; // pastram c i f r a max. w h i l e ( c!= EOF ) ; // pana l a s f. i n t r a r i i r e t u r n r ;

Cum gândim ciclurile? 1 identificăm ce variabile se modifică în fiecare iteraţie 2 identificăm condiţia de ieşire din ciclu 3 avem grijă să actualizăm valoarea variabilei/variabilelor pentru a ne apropia de condiţia de ieşire (altfel ciclul devine infinit!)

Instrucţiunea break Produce ieşirea din corpul ciclului imediat înconjurător. O folosim dacă nu dorim să continuăm restul prelucrărilor din ciclu. Sintaxa: break; De regulă, ieşirea din ciclu se face condiţionat: if (conditie) break;

Exemple numaram cuvintele #i n c l u d e <c t y p e. h> #i n c l u d e <s t d i o. h> i n t main ( v o i d ) { i n t c ; u n s i g n e d nrw = 0 ; w h i l e ( 1 ) { // c o n d i t i e mereu a d e v a r a t a w h i l e ( i s s p a c e ( c = g e t c h a r ( ) ) ) ; // consuma s p a t i i l e i f ( c == EOF) break ; // gata nrw = nrw + 1 ; // i n c e p u t de cuvant w h i l e (! i s s p a c e ( c = g e t c h a r ( ) ) && c!= EOF ) ; // se c i t e s t e c u v a n t u l p r i n t f ( %u\n, nrw ) ; r e t u r n 0 ;

Exemple scriem cuvintele cu majuscula #i n c l u d e <c t y p e. h> #i n c l u d e <s t d i o. h> i n t main ( v o i d ) { i n t c ; f o r ( ; ; ) { // c o n d i t i e a d e v a r a t a w h i l e ( i s s p a c e ( c = g e t c h a r ( ) ) ) p u t c h a r ( c ) ; // c i t i t / s c r i s s p a t i i i f ( c == EOF) break ; // gata p u t c h a r ( toupper ( c ) ) ; // prima l i t e r a w h i l e ( ( c = g e t c h a r ( ) )!= EOF) { p u t c h a r ( c ) ; i f ( i s s p a c e ( c ) ) break ; // l a s p a t i u i e s e // s i r e i a c i c l u l f o r r e t u r n 0 ;

Instrucţiunea continue Produce ieşirea din iteraţia curentă a ciclului imediat înconjurător şi trecerea la începutul iteraţiei următoare a acestuia, sărind peste restul instrucţiunilor. O folosim dacă nu dorim să continuăm restul prelucrărilor din iteraţia curentă, dar dorim să continuăm ciclul. Sintaxa: continue; De regulă, saltul la iteraţia următoare se face condiţionat: if (conditie) continue;

Exemple #i n c l u d e <c t y p e. h> #i n c l u d e <s t d i o. h> i n t main ( v o i d ) { i n t c ; w h i l e ( ( c = g e t c h a r ( ) )!= EOF) { // c i t e s t e c a r a c t e r nou, v e r i f i c a de EOF i f (! i s a l p h a ( c ) ) // daca nu e l i t e r a c o n t i n u e ; // t r e c e l a c i c l u l urmator p u t c h a r ( c ) ; // s c r i e c a r a c t e r u l p r i n t f ( %d, c ) ; // s i c o d u l sau ASCII r e t u r n 0 ;

Recursivitate vs Iteraţie Recursivitate: fiecare apel creează noi copii de parametri cu alte valori se re-execută aceeaşi funcţie cu alte date Cicluri: control direct al iteraţiilor se modifică prin atribuire valorile variabilelor se reia execuţia acelorlaşi instrucţiuni cu alte valori Ambele realizează prelucrări repetate. Recursivitatea se poate transforma în iteraţie şi viceversa.

Exemple Recursivitate şi Iteraţie // f a c t o r i a l r e c u r s i v u n s i g n e d i n t f a c t r e c ( u n s i g n e d n, u n s i g n e d r ){ i f ( n==0) r e t u r n r ; e l s e r e t u r n f a c t r e c ( n 1, n r ) ; // se a p e l e a z a f a c t r e c ( n, 1 ) ; // f a c t o r i a l i t e r a t i v u n s i g n e d i n t f a c t i t ( u n s i g n e d i n t n ){ u n s i g n e d r =1; w h i l e ( n>0){ r=r n ; n=n 1; r e t u r n r ;

Transformarea Recursivităţii în Iteraţie Rescrierea recursivităţii ca iteraţie e mai simplă în cazul recursivităţii cu rezultat parţial (recursivitate la stânga): testul de oprire al iteraţiei va fi acelaşi cu cazul de bază al recursivităţii valoarea iniţială a rezultatului rămâne aceeaşi varianta recursivă: fiecare apel creează copii noi de parametri, cu valori proprii (în funcţie de cele vechi): ex. n*r, n-1,x*r. varianta iterativă: actualizează la fiecare iteraţie valorile variabilelor, după aceleaşi relaţii. ex. r=n*r, n=n-1, r=x*r. ambele variante valoarea acumulată a rezultatului

Exemple Recursivitate şi Iteraţie // p u t e r e r e c u r s i v a i n t pow rec ( i n t x, u n s i g n e d n, i n t r ){ i f ( n==0) r e t u r n r ; e l s e r e t u r n pow rec ( x, n 1, x r ) ; // p u t e r e i t e r a t i v a i n t p o w i t ( i n t x, u n s i g n e d n ){ i n t r =1; w h i l e ( n>0){ r=x r ; n=n 1; r e t u r n r ;

Reprezentarea obiectelor în memorie Orice valoare (parametru, variabilă) ocupă loc în memorie. bit = cea mai mică unitate de memorare, are două valori posibile: 0 sau 1 octet (byte) = grup de 8 biţi, cea mai mică unitate care se poate scrie/citi în/din memorie Operatorul sizeof ne dă dimensiunea în octeţi (bytes) a unui tip sau a unei valori. Exemplu: sizeof( A )==sizeof(char)==1 (un caracter se reprezintă pe 1 octet!) Dimensiunea tipurilor depinde de sistem (procesor, compilator): ex. sizeof(int) poate fi 2, 4, 8,...

Reprezentarea internă întregi În memorie, numerele se reprezintă în binar (baza 2), ca şiruri de biţi (0 sau 1). Un întreg fără semn, cu k cifre binare (biţi): c k 1 c k 2...c 2 c 1 c 0 = 2 k 1 c k 1 + 2 k 2 c k 2 +... + 2 2 c 2 + 2 c 1 + 2 0 c 0 = Σ k 1 0 2 i c i Unde c k 1 e cifra binară (bitul) cea mai semnificativă iar c 0 cea mai puţin semnificativă. Ex: 110 (2) = 6 (10) 1100 (2) = 12 (10) 11101 (2) = 29 (10) 11111111 (2) = 255 (10)

Reprezentarea internă întregi Un întreg cu semn se reprezintă în complement de 2: bitul superior (primul bit, c k 1 ) e 1 nr. e negativ! 1c k 2...c 2 c 1 c 0 = 2 k 1 + 2 k 2 c k 2 +... + 2 2 c 2 + 2 c 1 + 2 0 c 0 = 2 k 1 + Σ k 2 0 2 i c i Exemple (pe 8 biţi): 11111111 (2) = 1 (10) 11111110 (2) = 2 (10) 10000000 (2) = 128 (10)

Tipuri întregi Înainte de int putem avea calificatori pentru: dimensiune: short, long, long long (C99) semn: unsigned, signed (implicit) char: signed char [-128, 127] sau unsigned char [0, 255] short, int: 2 octeţi, minim [ 2 15, 2 15 1] long: 4 octeţi, minim [ 2 31, 2 31 1] long long: 8 octeţi, minim [ 2 63, 2 63 1] unsigned are dimensiunea tipului cu semn (b octeti) : [0, 2 8b 1]. sizeof (short) sizeof (int) sizeof (long) sizeof (long long)

Reprezentarea internă nr. reale Numerele reale se reprezintă în memorie aproximativ, în virgulă flotantă. Reprezentare cu: semn, exponent, mantisă. S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM float simplă precizie, 32 de biţi: 1 bit de semn, 8 biţi exponent, 23 mantisă. pt. 0 < E < 255: nr. = ( 1) S 2 E 127 1.M în rest: 0, numere f. mici, ± double dublă precizie, 64 de biţi: 1 bit de semn, 11 biţi exponent, 52 mantisă.

Operatori pe biţi Oferă acces la reprezentarea binară a datelor în memorie. Se pot folosi doar pentru operanzi de tip întreg. Operator Semnificaţie & ŞI pe biţi: 1 & 1 e 1, altfel 0 SAU pe biţi: 0 0 e 0, altfel 1 SAU EXCLUSIV pe biţi: 1 dacă biţi diferiti, altfel 0 COMPLEMENT pt biţi: 1 devine 0, 0 devine 1 << SHIFT (deplasare) la stânga: introduce biţi de 0 >> SHIFT (deplasare) la dreapta: introduce biţi de semn Toţi operatorii lucrează simultan pe toţi biţii operanzilor!

Exemple: operaţii pe biţi ŞI SAU SAU EXCLUSIV 10110101 & 10110101 10110101 01110001 01110001 01110001 = 00110001 = 11110101 = 11000100 Complement pe biţi: 10110101 = 01001010 01110001 = 10001110 Deplasare la stânga: 10110101 << 1 = 01101010 10110101 << 2 = 11010100 10110101 << 3 = 10101000 10110101 << 6 = 01000000 Deplasare la dreapta: 10110101 >> 1 = 01011010 10110101 >> 2 = 00101101 10110101 >> 3 = 00010110 10110101 >> 6 = 00000010

Exemple n << k e echivalent cu n 2 k n >> k e echivalent cu n/2 k (pt. n unsigned!!) 1 << k e 2 k, are doar bitul k pe 1 pt. k < 8*sizeof(int) (1 << k) are doar bitul k pe 0, restul pe 1 0 are toţi biţii pe 1 (iar 0 toţi pe 0) 0 << k are k biţi din dreapta 0, restul pe 1 ( 0 << k) are k biţi din dreapta 1, restul pe 0 ( 0 << k) << p are k biţi pe 1, începând de la bitul p, restul 0 (Atenţie, complementul păstrează semnul tipului.)

Exemple b & 1 păstrează valoarea bitului b b & 0 e 0 n & (1 << k) e! = 0 dacă bitul k al lui n e 1 n & (1 << k) va avea 0 pe bitul k al lui n b 1 e 1 b 0 păstrează valoarea bitului b n (1 << k) va avea 1 pe bitul k al lui n