Laborator 3

Exercitiile din acest laborator necesita includerea urmatoarelor fisiere / biblioteci:

#include<stdio.h>
#include<conio.h>

 

  • Calculati suma a doua numere naturale intregi introduse de la tastatura, folosind operatii pe biti


void main() {
    int a, b;

    printf("a=");
    scanf_s("%d", &a);
    printf("b=");
    scanf_s("%d", &b);

    int x = 0;

    while (b != 0) {
        x = a&b;
        a = a^b;
        b = x << 1;
    }
    printf("\nSuma este: %d ", a);

   _getch();
}

  •  Calculati diferenta (scaderea) dintre doua numere naturale intregi introduse de la tastatura, folosind operatii pe biti  


void main() {
     int a, b;

     printf("a=");
     scanf_s("%d", &a);
     printf("b=");
     scanf_s("%d", &b);

     int x = 0;

     while (b != 0) {
          x = (~a) & b;
          a = a^b;
          b = x << 1;
      }

      printf("\nSuma este: %d ", a);

      _getch();
}

 

  •   Calculati produsul a doua numere naturale intregi introduse de la tastatura, folosind operatii pe biti


void main() {
     int a, b;

     printf("a=");
     scanf_s("%d", &a);
     printf("b=");
     scanf_s("%d", &b);

     int x = 0;

     while (b != 0) {
          if ((b & 1) != 0) {
                x += a;
          }
          a <<= 1;
          b >>= 1;
      }

      printf("\nSuma este: %d ", x);

      _getch();
}

 

  •  Sa se verifice daca un numar intreg, introdus de la tastatura, este prim sau nu


void main() {
     int n, prim=0;

     printf("Introduceti numarul = ");
     scanf_s("%d", &n);

     for (int i = 1; i <= n; i++) {
         if ((n % i) == 0)
             prim++;
     }

     if (prim == 2)
           printf("\nNumarul %d este prim", n);
     else
           printf("\nNumarul %d nu este prim", n);

     _getch();
}


 

  •     Sa se calculeze suma S=1^2+2^2+3^3...+n^2, cu n introdus de la tastatura


void main() {
     int n, suma=0;

     printf("Introduceti numarul = ");
     scanf_s("%d", &n);

     for (int i = 1; i <= n; i++) 
        suma = suma + i*i;
     
     printf("\nSuma = %d", suma);

     _getch();
}

 

  •   Suma si produsul primelor n numere naturale intregi mai mici decat n, din 5 in 5, cu n introdus de la tastatura


void main() {
     int n, suma=0, produs=1;

     printf("Introduceti numarul = ");
     scanf_s("%d", &n);

     for (int i = 5; i <= n; i = i + 5) {
            suma = suma + i;
            produs = produs*i;
     }
     printf("\nSuma primelor %d numere, din 5 in 5, este = %d, iar produsul = %d", n, suma, produs);

     _getch();

}

 

  •   Afisarea tabelului Fahrenheit-Celsius pt f=0,20,...,300 folosind formula C=(5/9)*(F-32)


void main() {
     int i,c;

     printf("Tabelul Fahrenheit-Celsius este: \n");

     for (i = 0; i <= 300; i += 20) {
         double c = (5.0 / 9.0)*(i - 32); //conversia tipului int la double
         printf("%g\n", c);
      }

     _getch();
}

 

  •    Sa se citeasca un numar de la tastatura si sa se afiseze pe ecran un triunghi de forma

*
**
***
....
****...* (n caractere *)

void main() {
     int n, i,j;

     //printf("Introduceti numarul = ");
     //scanf_s("%d", &n);

     do {
          printf("Introduceti un numar intreg pozitiv = ");
          scanf_s("%d", &n);
      } while (n <= 0);

      for (i = 1; i <= n; i++) {
           for (j = 0; j < i; j++) {
                printf("*");
           }
           printf("\n");
       }

       _getch();
}

 

  •   Aflati si afisati cati biti de 1 sunt in reprezentarea binara a unui nr introdus de la tastatura, folosind : a) for si b) operatii pe biti


void main() {
     int n, i, unu=0, numar;
     int lungime = sizeof(int) * 8;

     printf("Introduceti numarul = ");
     scanf_s("%d", &n);

     numar = n;
     for (i = 0; i < lungime; i++) {
          if ((numar % 2) == 1)
               unu++;
          numar = numar / 2;
      }


       //operatii pe biti
       // while (numar != 0) {
       // if (numar & 1 == 1)
       // unu++;
       // numar = numar >> 1;
       // }

       if (unu >= 1)
               printf("\nNumarul %d are in reprezentarea sa binara %d biti de 1", n, unu);
       else
               printf("\nNumarul %d are in reprezentarea sa binara %d biti de 1", n, unu);

       _getch();
}

 

  •      Calculati cmmdc si cmmmc a doua numere naturale nenule, introduse de la tastatura


void main() {
     int a, b, cmmmc, rest;
     int x, y;

     printf("Introduceti primul numar intreg pozitiv\na = ");
     scanf_s("%d", &a);
     

     while (a < 1) {

          printf("\nReintroduceti a = ");

          scanf_s("%d", &a);
      }

      printf("\nIntroduceti cel de-al doilea numar intreg pozitiv\nb = ");
      scanf_s("%d", &b);

       while (b < 1) {
             printf("\nReintroduceti b = ");
             scanf_s("%d", &b);
        }

        x = a; y = b;
        while (b != 0){ //prin impartiri repetate
             rest = a%b;
             a = b;
             b = rest;
        }
        printf("\nCmmdc este %d", a);

        cmmmc = (x*y) / a;
        printf("\nCmmmc este %d", cmmmc);

        _getch();
}

 

  •     Se considera un numar natural n. Sa se afiseze reprezentarea lui n in baza 2 folosind operatiile logice pe biti


void main() {
     int n;
     int lung = sizeof(int) * 8;

     printf("Introduceti un numar intreg a=");
     scanf_s("%d", &n);

     printf("\nReprezentarea in baza 2 a nr %d este: \n", n);

     for (int i = lung-1; i >= 0; i--) 
         printf("%d",((n >> i) & 1));

     _getch();
}

 

  •       Afisarea unui numar intreg pe 32 de biti (sau in functie de versiune compilatorului)


void main() {
       int a, r[32];
       int lung = sizeof(int) * 8;

       printf("Introduceti un numar intreg a=");
       scanf_s("%d", &a);

       for (int i = 0; i < lung; i++) {
             r[i] = a % 2;
             a = a / 2;
        }

        printf("\nReprezentarea binara este:\n");        

        for (int i = lung-1; i>=0; i--) 
               printf("%d", r[i]);

        _getch();
}

 

  •      Program care recunoaste operatia aritmetica introdusa de la tastatura si afiseaza rezultatul operatiei asupra celor doua numere

 

void main() {
     int a, b, operatie;

     printf("Introduceti primul numar = ");
     scanf_s("%d", &a);

     printf("Introduceti cel de-al doilea numar = ");
     scanf_s("%d", &b);

     printf("Introduceti o operatie: ");
     operatie=_getche(); //citeste un caracter cu ecou


     switch(operatie) {
                 case '+': printf("\n%d + %d = %d", a, b, a + b);
                     break;
                 case '-': printf("\n%d - %d = %d", a, b, a - b);
                     break;
                 case '*': printf("\n%d * %d = %d", a, b, a * b);
                     break;
                //pentru a putea face impartirea trebuie sa facem vonversia tipurilor folosind cast()
                //tipul int in convertim la tipul float pt a putea face impartirea a oricaror doua numere intregi naturale
                 case '/': printf("\n%.0f / %.0f = %.2f", (float)a, (float)b, ((float)(a) / (float)(b)));
                     break;
                 case '%': printf("\n%d mod %d = %d", a, b, a % b);
                     break;
                 default: printf("\nOperatie/Caracter necunoscut/a");
      }

      _getch();
}