23 Aug 2012

Introducere C - probleme rezolvate (3)

Salutare tuturor!

Astăzi o să vă prezint ultima parte a problemelor simple urmând ca, de data viitoare, să trecem la modularizare și alte lucruri interesante.
Pe ordinea de zi, avem tot două probleme, după cum urmează

1. Fiind date de la tastatură două numere întregi, să se afișeze cel mai mare divizor comun al lor. (Indiciu: Algoritmul lui Euclid)

#include <stdio.h>

int main(){
   // declaram variabilele; ele vor fi initializate automat la zero
   int a, b, r;

   printf("Introduceti primul numar: ");
   scanf("%d",&a);

   printf("Introduceti al doilea numar: ");
   scanf("%d",&b);

   // testam cazul limita cand b este zero
   if (b == 0) {
       printf("Cmmdc este %d\n",a);
       return 0;
   }
   // aici ar fi mers un 'else', dar nu e nevoie datorita return-ului anterior
   // aici este algoritmul propriu-zis
   do{
       r = a % b;
       a = b;
       b = r;
   }while(r);

   // la final, cmmdc-ul este in 'a'
   printf("Cmmdc este %d\n",a);

   return 0; 

}


2. Să se verifice dacă un număr introdus de la tastatură este prim.

#include <stdio.h>

int main(){
   // vom folosi o variabila auxiliara pentru a putea afisa mesajul afirmativ de la sfarsit
   // pornim de la ideea ca numarul este prim
   int nr, i, prim = 1;

   printf("Introduceti numarul: ");
   scanf("%d",&nr);

   /* pentru fiecare numar mai mic decat numarul nostru, verificam daca exista vreunul la care
   * acesta acesta din urma se imparte exact
   * s-a aratat ca nu e cazul sa verificam toate numerele, ci doar pe acelea mai mici decat nr/2
   */
   for (i = 2; i < nr/2; ++i) {
       if (nr % i == 0) {
           printf("Numarul nu este prim\n");
           prim = 0;
           break; // am gasit ca numarul nu este prim si iesim fortat din bucla; nu are sens sa continuam
       }
   }  
   // aici era corect si if (prim == 1)
   // in C, o structura de tipul if (ceva) este echivalenta cu if (ceva != 0)
   if (prim) {
       printf ("Numarul este prim\n");
   }
   return 0;
}

No comments:

Post a Comment