Sunteți pe pagina 1din 4

Adunarea, scaderea, nmulirea , mprirea, factorial Vom scrie un program ce execut operaiile matematice de baz: Adunarea, scaderea, nmulirea

i mprirea a dou numere. Numerele sunt presupuse ntregi i sunt introduse de utilizator. n DevCPP vom scrie urmtorul cod //////////////////////////////////////////////////////////////////////////////////////////////////// #include <stdio.h> int main() { int primul, aldoilea, adunare, scadere, inmultire; float impartire; printf("Introduceti doua numere intregi\n"); scanf("%d%d", &primul, &aldoilea); adunare = primul + aldoilea; scadere = primul - aldoilea; inmultire = primul * aldoilea; impartire = primul / (float) aldoilea; //fortam tipul variablei la float printf("Suma numereleor %d i %d este %d\n",primul, aldoilea, adunare); printf("Scaderea celor doua numere %d si %d are ca rezultat %d\n", primul, aldoilea, scadere); printf("Inmultirea lui %d cu %d este %d\n", primul, aldoilea, inmultire); printf("Impartirea lui %d la %d este %.2f\n", primul, aldoilea, impartire); // aditional sa urmarim ce se intampla daca nu fortam tipul varianbilei aldoilea la float printf("Impartirea lui %d la %d este %.2f\n", primul, aldoilea, primul/aldoilea); return 0; } //////////////////////////////////////////////////////////////////////////////////////////////////// Comentati rezultatul obtinut pentru impartire in cele doua cazuri: cu forarea tipului de variabila i fara aceasta fortare si completati rezultatele mai jos. Integer/integer = ....................... integer/float = ........................ Factorial Vom calcula factorialul unui numr dat ( variabila de tip intreg) folosind trei metode: bucla, funcie factorial i folosind apelarea recursiv a unei functii. De obicei reprezentm factorialul unui numr adugnd semnul ! dup numrul respectiv. Vom calcula factorialul numrului N > 0 folosind relaia: N!=1*2*3*...*N Pentru N = 0, N! = 1 Cazul 1. Programul pentru a calcula factorialul unui numr este:

//////////////////////////////////////////////////////////////////////////////////////////////////// #include <stdio.h> int main() { int c, n, factorial = 1; printf("Introduceti un numar:\n"); scanf("%d", &n); for (c = 1; c <= n; c++) factorial = factorial * c; printf("Factorial numarului %d este %d\n", n, factorial); printf("sau %d! = %d\n", n, factorial);

return 0; } //////////////////////////////////////////////////////////////////////////////////////////////////// In acest caz avem nevoie de 3 variabile intregi: c pentru a pastra valorile de la 1 la n, n numarul pentru care dorim sa calculam factorialul factorial = rezultatul Din definiia factorialului observm c putem l calcula prin inmulirea numerelor de la 1 la n. Codul de mai sus va realiza aceasta operatie in etape. Prima etapa este factorial = 1. A doua etap este realizarea operaiilor de nmulire. Pentru acest lucru definim variabila c pentru a trece prin valorile de la 1 la n. La prima trecere valoarea lu c va fi 1, iar factorial = factorial * c => factorial = 1 A doua trecere: c = 2 (incrementare realizata de operatorul ++) i rezultatul va fi factorial = factorial * c => factorial = 2 A doua trecere: c = 3 (incrementare realizata de operatorul ++) i rezultatul va fi factorial = factorial * c => factorial = 6 ... A n-a trecere: c = n (incrementare realizata de operatorul ++) i rezultatul va fi factorial = factorial * c => factorial = factorial*n Cazul 2. Programul pentru a calcula factorialul unui numar este:

//////////////////////////////////////////////////////////////////////////////////////////////////// #include <stdio.h> long factorial(int); // declararea functiei int main() { int numar; long fact = 1; printf("Introduceti un numar:\n"); scanf("%d", &numar); printf("%d! = %ld\n", numar, factorial(numar)); return 0; } long factorial(int n) { int c; long rezultat = 1; for (c = 1; c <= n; c++) rezultat = rezultat * c; return rezultat; } //////////////////////////////////////////////////////////////////////////////////////////////////// Acest caz este asemantor primului caz, dar vom construi o funcie separat pentru a calcu la factorialul, respectiv bucla n care nmulim pe rnd numerele de la 1 la n. n C orice funcie trebuie declarat iniial. Acest lucru se realizeaz prin linia long factorial(int); // declararea functiei din cod. Declararea unei funcii implic specificarea parametrilor ( tipul variabilelor din paranteza de dup numele funciei, respectiv tipul variabilei returnat de funcie aflat n faa numelui). n exemplu, funcia are un parametru numr ntreg, i va returna un numr de tip lo ng(intreg 32 biti). Cazul 3. Apelare recursiv a unei funcii Este un caz mai special, n care vom construi bucla de nmulire pentru calculul factorialul folosind o funciei care se apeleaz singur. n acest caz vom folosi urmtorul cod:

//////////////////////////////////////////////////////////////////////////////////////////////////// #include<stdio.h> long factorial(int); //definitia functiei int main() { int n; long f; printf("Introduceti un numar intreg\n"); scanf("%d", &n); if (n < 0) printf("Numerele intregi negative nu sunt permise.\n"); else { f = factorial(n); printf("%d! = %ld\n", n, f); } return 0; } long factorial(int n) { if (n == 0) // 0! = 1 return 1; else return(n * factorial(n-1)); } //////////////////////////////////////////////////////////////////////////////////////////////////// n acest caz bucla este realizat de functia factorial. La primul pas parametrul n al funciei este n. Se verific dac avem cazul n = 0, caz n care rezultatul va fi 1 i funcia a finalizat operaia de calcul i va ntoarce rezultatul. Dac n > 0, avem a doua alegere din condiionare cu if unde apare din nou numele funciei, dar parametrul funciei este n-1. Etapele vor fi: 1: n = n, factorial = n*factorial(n-1) 2:n=n-1, factorial = (n-1)*factorial(n-2) 3 :n= n-2, factorial = (n-2)*factorial(n-3) n:n=n-n+1, factorial = (n-n+1)*factorial((n-n+1)-1) factorial((n-n+1)-1) = factorial(0) =1 aici este finalizata bucla.