Laborator 2

Exercitiile din acest laborator necesita includerea urmatoarelor fisiere / biblioteci:

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

 

  • Realizati un program care sa inverseze valorile a doua variabile intregi pozitive folosind operatia XOR, adica sau exclusiv

 

void main() {
   int a, b;

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

   a = a ^ b;  
   b = b ^ a; 
   a = a ^ b;

   printf("Dupa inversare vom avea:\na=%d\nb=%d", a, b);

   _getch();
}

 

  • Sa se citeasca de la tastatura un numar intreg natural, n, si sa se seteze pe 0 bitul k (dat de la tastatura) din n

void main() {

    int n, k;

    printf("Introduceti un numar natural: ");
    scanf_s("%d", &n);

    printf("Introduceti bitul ce se va seta pe 0: ");
    scanf_s("%d", &k);

    printf("\nIn urma setarii pe 0 a bitului %d in numarul %d, rezultatul va fi %d", k, n, (n & ~(1 << k)));

    _getch();

}

 

  • Sa se citeasca de la tastatura un numar intreg natural, n, si sa se seteze pe 1 bitul k (dat de la tastatura) din n

void main() {

    int n, k;

    printf("Introduceti un numar natural: ");
    scanf_s("%d", &n);

    printf("Introduceti bitul ce se va seta pe 1: ");
    scanf_s("%d", &k);

    printf("\nIn urma setarii pe 1 a bitului %d in numarul %d, rezultatul va fi %d", k, n, (n | (1 << k)));

    _getch();

}

 

  •  Se citeste un numar natural n. Sa se verifice daca n este par sau impar, folosind operatii pe biti

void main() {

    int n;

    printf("Introduceti un numar natural: ");
    scanf_s("%d", &n);


    //operatorul & are rol de a testa bitii, daca n este impar atunci in reprezentarea in baza 2
    //cel mai din dreapta bit este 1, ex: n=13, in binar este = 1101 si 1101 & 1 =1
    //daca n = 14, in binar n=1110 deci cel mai din drepata bit va fi 0 si 1110 & 1 = 0

    if ((n & 1) == 1)
       printf("\nNumarul %d este impar", n);
    else
       printf("\nNumarul %d este par", n);

    _getch();
}

 

  • Sa se afiseze bitul de pe pozitia k a unui numar n, cu n si k date de la tastatura

 

void main(){

    int n, k;

    printf("Introduceti un numar natural: ");
    scanf_s("%d", &n);

    printf("Introduceti pozitia bitului dorit: ");
    scanf_s("%d", &k);

    if( (n >> k) & 1)
           printf("\n\nBitul este 1");
    else
           printf("\nBitul este 0");

    _getch();

}

 

  • Sa se citeasca de la tastatura un numar intreg natural si folosind operatorul conditional ?: sa se verifice daca acel numar este pozitiv, negativ sau zero

 

void main() {
      int numar;

      printf("Introduceti un numarul intreg natural : ");
      scanf_s("%d", &numar);


      (numar < 0) ? printf("\nNumarul este negativ") : (numar>0) ? printf("\nNumarul este pozitiv") : printf("\nNumarul este egal cu zero");

      _getch();
}

 

  •  Realizati un program care sa afiseze valoarea bitului de pe ultima pozitie(LSb=bitul cel mai putin semnificativ-inferior).

void main() {
    unsigned int numar;  //pentru o variabila de tip intreg fara semn
    int i=0;

    printf("Introduceti un numar: ");
    scanf_s("%d", &numar);

    if (numar == 0) 
       i = 0;
    else
       i = numar % 2;

    printf("\nBitul de pe prima pozitie este: %d", i);

    _getch();

}

 

  • Se considera un numar natural n, dat de la tastatura. Sa se verifice daca n este o putere a lui 2, si sa se faca operatiile de inmultire respectiv impartire la 2 sau puteri ale lui 2. 

void main() {
    int n;

    printf("Introduceti un numar natural: ");
    scanf_s("%d", &n);

    if ((n & (n - 1)) == 0) { 
          printf("\nNumarul %d este putere a lui 2", n);
          printf("\nImpartirea numarului introdus %d la 2:", n);
          printf("\nCatul este: %d", (n >> 1));    //8: 2^1=4, daca am scrie 2, ar insemna 8:2^2=2
          printf("\nProdusul este: %d", (n << 1));   //8*2^1=16, daca am scrie 2 ar insemna 8*2^2=32
            //n<<i echivalent cu n*2^i
           //n>>i impartirea intreaga a lui n la 2^i
     }
     else
          printf("\nNumarul %d nu este putere a lui 2", n);

     _getch();
}

 

  •  Realizati un program ce rezolva ecuatia de gradul I, cu valorile lui a si b reale, introduse de la tastatura

void main() {
    float a, b;
    float x;

    printf("Ecuatia de gradul I: ax+b=0");
    printf("\nIntroduceti a=");
    scanf_s("%f", &a);
    printf("\nIntroduceti b=");
    scanf_s("%f", &b);

    if (b == 0)
       printf("\nSolutia ecuatiei este 0");
    else
       if (a != 0) {

             x = -b / a;

             printf("\nSolutia ecuatiei %.0fx+%.0f=0 este x=%.2f", a, b, x);
        }
        else
             printf("\nEcuatia este imposibila !");

     _getch();
}

 

  •  Realizati un program ce rezolva ecuatia de gradul II

 

void main() {

    float a=0, b, c, x1, x2, delta;

    printf("Ecuatia de gradul II: ax^2+bx+c=0\n");
    printf("Introduceti a=");
    scanf_s("%f", &a);

    if (a == 0){
        printf("\nValoarea lui a trebuie sa fie diferita de 0");
        printf("\nReintroduceti a=");
        scanf_s("%f", &a);
     }

     printf("\nIntroduceti b=");
     scanf_s("%f", &b);
     printf("\nIntroduceti c=");
     scanf_s("%f", &c);

     delta = b*b - 4*a*c; 

     if (delta < 0)
         printf("\nEcuatia nu are solutii reale!");
     else {
              if (delta > 0) {
                   x1 = (-b + sqrt(delta) )/ (2 * a);
                   x2 = (-b - sqrt(delta)) / (2 * a);

                  printf("\nSolutiile ecuatiei sunt:\nx1=%.2f\nx2=%.2f", x1, x2);
               }
               else {
                       x1 = -b/(2*a);
                       printf("\nEcuatia are doua solutii egale, si anume x1=x2=%.2f",x1);
                }
       }

       _getch();
}

 

  •    Sa se citeasca 3 valori intregi de la tastatura a,b,c. Sa se afiseze in ordine crescatoare,


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

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

     if (a < b){
         if (b < c)
             printf("\n%d\t%d\t%d", a, b, c);
         else
             if (a < c)
                 printf("\n%d\t%d\t%d", a, c, b);
             else
                 printf("\n%d\t%d\t%d", c, a, b);

     }
     else{
          if (a < c)
              printf("\n%d\t%d\t%d", b, a, c);
          else
               if (b < c)
                    printf("\n%d\t%d\t%d", b, c, a);
               else
                    printf("\n%d\t%d\t%d", c, b, a);

     }

      _getch();
}