next up previous contents
Next: Probleme propuse Up: Functii de biblioteca Previous: Functii de conversie   Cuprins


Exemple rezolvate

  1. Sa se scrie un program care citeste o succesiune de linii ce contin date calendaristice în formatul: zi/luna/an. Se cere sa se afiseze liniile scrise corect conform formatului specificat anterior.

    #include <stdio.h>
    
    void main(void)
    {
       char linie[80];
       int zi, luna, an;
    
       while (gets(linie)!=NULL)
          if (sscanf(linie, "%d/%d/%d", &zi, &luna, &an)==3)
             printf("%s\n", linie);
    }
    

  2. Sa se realizeze programul care citeste o secventa de numere reale, terminata cu Ctrl-Z si afiseaza dupa fiecare citire suma valorilor absolute citite pâna în acel moment. Afisarea sumei se face cu o precizie de 3 cifre zecimale.
    #include <stdio.h>
    #include <math.h>
    
    void main(void)
    {
       double suma=0, valoare;
            
       while(1)
       {
          printf("\nDati un numar: ");
          if (scanf("%lf", &valoare)==EOF) break;
             printf("\t %.3lf\n", suma+=fabs(valoare));
       }
    }
    
    Observatie: Unii autori recomanda, pe cât posibil, evitarea unei bucle while(1) si iesirea prin instructiunea break, deoarece prin aceasta practica se distruge lizibilitatea programelor. Conditia de iesire din bucla e bine sa apara ca si conditie pentru while, chiar daca aceasta înseamna lungirea cu 2-3 linii a secventei.

  3. Se citeste de la tastatura un text terminat cu Ctrl-Z. Se cere sa se afiseze toate numerele întregi continute în text.
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #define N   15
    
    void main(void)
    {
       char c;        /* caracterul citit la un moment dat */
       char s[20];    /* buffer cu caract. ce compun un numar */
       int numere[N]; /* tablou cu numerele citite */
       int i=0, j=0;
    
       c=getchar();
       while (c!=EOF)
            
       if (isdigit(c))  /* incepe un numar */
       {
          i=0;
          s[i++]=c;
          while (isdigit(c=getchar()))
             s[i++]=c;
          s[i]='\0';
          numere[j++]=atoi(s);
       }
       else
          c=getchar();
    
       /* afisarea numerelor */
       for (i=0; i<j; i++)
          printf("\n %6d", numere[i]);
    }
    
    Observatie: Pentru a testa daca un caracter este cifra s-a folosit functia isdigit() declarata în fisierul antet ctype.h (va fi prezentata în capitolele urmatoare). Dupa ce s-au citit caracterele corespunzatoare unui numar, folosind functia atoi se face conversia în numarul întreg corespunzator. Numerele întâlnite în cadrul textului se memoreaza în tabloul numere.


next up previous contents
Next: Probleme propuse Up: Functii de biblioteca Previous: Functii de conversie   Cuprins
Cristian Gavrila 2001-10-02