Informatica
Instructiuni de controlInstructiuni de control OBIECTIVE 1.operatori relationali, de egalitate si logici; 2.operatori si expresii relationale; 3.operatori si expresii de egalitate; 4.operatorul , ; 5.operatorul conditional ?: 6.instructiuni de test: if, if-else, switch (break) 7.instructiuni repetitive: while, for, do-while 8.functii: parametri formali, parametri actuali, apel prin valoare, void, return, exit 9.operatori pentru biti: ^, &, |, <<, >>, masti 10.complement fata de 2, impachetare, despachetare. CERINTE 1.12 probleme din primele 18 pentru nota 8; 2.suplimentar inca 2 probleme din 19, , 22 pentru nota 10. EXERCITII 1.Program care calculeaza si afiseaza valoarea functiei f(x)=x^2+3x-5, pentru toti x din multimea . 2.Din moment ce + si ++ sunt operatori, rezulta ca expresia a+++b poate fi interpretata fie ca a++ + b fie a + ++b depinzand de modul de grupare semnului +. Scrieti un program scurt pentru a vedea ce interpretare face compilatorul C. 3.Program care calculeaza n!, pentru un n citit de la tastatura. 4.Scrieti un program care citeste un numar natural n si determina, aplicand criteriile de divizibilitate, daca este divizibil cu 2,3,4,5,9,25. 5.Scrieti un program C care sa calculeze cel mai mare divizor comun dintre a si b, unde a, b sunt numere intregi, folosind algoritmul lui Euclid. 6.Folosind structura for, scrieti un program care calculeaza urmatoarele formule logice (sub forma unei tabele de adevar): b1 || b3 || b5 si b1 && b2 || b4 && b5 7.Fie functia lui Collatz: =a_+a_n, n>=1 11.Se da un numar intreg n > 0. .Gasiti toate perechile de numere intregi (x,y) pentru care x^2+n=y^2. .Gasiti perechea (a,b) pentru care n=2^a(2*b+1). 12.Folosind functiile 'rand()', 'min(,)' si 'max(,)', sa se genereze n numere naturale si sa se afiseze minimul si maximul dintre acestea. 13.(Jocul cap-pajura, simulare Monte-Carlo) Presupunem ca dispunem de o moneda ideala (nemasluita). Doi jucatori arunca cu moneda dupa urmatoarele reguli: 1.a. Se fac un numar total de n aruncari; 1.b. Primul jucator arunca moneda si celalalt spune 'cap' sau 'pajura'; 1.c. Daca acesta 'ghiceste' ce va pica moneda, atunci se inverseaza jucatorii (adica arunca al doilea si primul incearca sa ghiceasca); 1.d. La sfarsit, trebuie afisat scorul (si procentul de castig al fiecaruia). 14.(Jocul hartie, pumn, foarfece) Presupunem ca avem doi jucatori care folosesc mana dreapta pentru reprezentarea a trei obiecte:
hartie = palma intinsa pumn = mana stransa sub forma de pumn foarfece = doua degete departate (semnul Victoriei) Ei isi arata simultan mana dreapta in una din aceste configuratii (de mai multe ori). Daca ei arata acelasi lucru, este remiza (nu castiga nimeni). Daca nu se aplica una din urmatoarele trei reguli: a) Hartia acopera pumnul. (deci palma intinsa castiga fata de pumn) b) Pumnul sparge foarfecele. c) Foarfecele taie hartia. Sa se simuleze acest joc, facand un numar arbitrar de evenimente precizand scorul final. Se cere sa se joace persoana-calculator, si varianta a doua calculator-calculator. 15.O ruleta este o masina care selecteaza la intamplare un numar intre 0 si 35 la intamplare. Jucatorul poate paria pe un numar par/impar sau poate paria pe un numar oarecare. Castigul unui pariu par/impar se premiaza cu 2/1 dolari, cu exceptia celor in care ruleta alege 0. Daca jucatorul 'prinde' numarul selectat de ruleta, atunci este platit cu 35 1 dolari. Intrebare: Considerand ca jucam pariuri de 1 dolar, cate parieri trebuie sa facem astfel incat sa pierdem 10 dolari ? 16.(Conjectura lui Goldbach) Orice numar par mai mare decat 2 se poate scrie ca suma a doua numere prime. Scrieti un program C care verifica aceasta conjunctura pentru numere situate intre m si n. De exemplu, daca m=700 si n=1100, atunci afisati: 700 = 17 + 683 702 = 11 + 691 704 = 3 + 701 1098 = 5 + 1093 1100 = 3 + 1097 Generalizare: Scrieti toate combinatiile posibile de adunare a doua numere prime egal cu un numar dat. 17.Folosind functia 'bit_print' construiti un tabel (cu trei coloane) care sa contina n, reprezentarea binara a lui 2^n, reprezentarea binara a lui 2^n-1, pentru n = 0, 1, 2, , 32. Apoi, afisati un tabel (tot cu trei coloane) care sa contina n, 10^n si 10^n-1 pentru n = 0, 1, 2, , 7 (in baza zece). Ce asemanare observati ? 18.Zilele secolului 20 pot fi notate folosind intregi in forma 'zi/luna/an'. De exemplu, 1/7/93 inseamna 1 iulie 1993. Scrieti o functie care memoreaza ziua, luna si anul compact, astfel: a) pentru zile (maxim 31) sunt suficienti 5 biti; b) pentru luna (12) sunt suficienti 4 biti; c) pentru ani (100) sunt suficienti 7 biti; Functia trebuie sa aiba la intrare ziua, luna si anul ca intregi si trebuie sa returneze data 'impachetata' pe un 'intreg' pe 16 biti. Scrieti inca o functie care face 'despachetarea'. 19.(*) Folosind operatori pe biti, scrieti programe C care: a) testeaza daca un numar de tip 'int' sau 'long' este divizibil cu 8. Generalizare (divizibilitate cu 2^n); b) testeaza daca un numar este pozitiv sau negativ; c) calculeaza pentru un n dat, multiplii de 2, 4, Generalizare; d) calculeaza pentru un n dat, [n/2], [n/4], Generalizare; e) calculeaza m^n, folosind reprezentarea in baza 2 a lui n si metoda 'divide et impera'. 20.Scrieti un program de transformare a numarului n din baza p in baza q (n,p si q se citesc). 21.(Serii Farey) Seria Farey de ordinul n= sirul crescator al fractiilor reduse, cuprinse intre 0 si 1, cu numitorul <=n. De exemplu, seria Farey de ordinul 7: Notam seria Farey de ordinul n prin (x_1,y_1),(x_2,y_2), .Aratati ca x_(k+1) * y_k - x_k * y_(k+1) = 1. .Aratati ca : x_0 = 0, x_1 = y_0 =1, y_1 = n x_(k+2) = [(y_k+n) / y_(k+1)] * x_(k+1) - x_k y_(k+2) = [(y_k+n) / y_(k+1)] * y_(k+1) - y_k .Scrieti un program care genereaza seria Farey de ordinul n, pentru n dat. Sa se genereze numarul natural n, pornind de la cifra 4 si efectuand la fiecare pas una din urmatoarele operatii: .impartire la 2 .adaugarea(concatenarea) la dreapta a cifrei 0 .adaugarea(concatenarea) la dreapta a cifrei 4 Poate fi generat astfel orice numar natural n?
|