Programação I

Soluções dos exercícios da aula prática 6

Exercício 1

     /*************************************
      * impar -- Diz se um número é ímpar
      *
      * Parâmetros
      * numero -- um número inteiro
      *
      * Devolve
      * 1 -- se numero é ímpar
      * 0 -- se numero é par
      *************************************/
     int impar (int numero)
     {
        if (numero % 2 == 0)
          return (0);
        else
          return (1);
     }

Exercício 2

     /*************************************
      * primo -- Diz se um número é primo
      *
      * Parâmetros
      * numero -- um número inteiro
      *
      * Devolve
      * 1 -- se numero é primo
      * 0 -- se numero não é primo
      *************************************/
     int primo (int numero)
     {
        int i;  /* divisores sucessivos */
     
        if ( numero < 2 )
          return (0);
        for (i = 2; i <= numero - 1; i++)
        {
          if ( numero % i  ==  0)
            return (0);
        }
        return (1);
      }
     

Programa 1

     /***************************************************************
      * a6_p1 -- Este programa diz se um determinado numero e' primo
      *     ou não, e se é par ou ímpar.
      *
      * Input : Um número inteiro
      * Output: Mensagem - E' ou NAO E' primo; E' PAR ou IMPAR
      ***************************************************************/
     #include <stdio.h>
     
     #define TRUE   1
     #define FALSE  0
     
     /*************************************
      * impar -- Diz se um número é ímpar
      *
      * Parâmetros
      * n -- um número inteiro
      *
      * Devolve
      * TRUE -- se numero é ímpar
      * FALSE -- se numero é par
      *************************************/
      int impar (int n)
      {
        if( n % 2 == 0)
          return (FALSE);
        else
          return (TRUE);
      }
     
     
     /*************************************
      * primo -- Diz se um número é primo
      *
      * Parâmetros
      * n -- um número inteiro
      *
      * Devolve
      * TRUE -- se numero é primo
      * FLASE -- se numero não é primo
      *************************************/
      int primo (int n)
      {
        int i;  /* divisores intermedios sucessivos */
     
        if ( numero < 2 )
          return (FALSE);
        for (i = 2; i <= n - 1; i++)
        {
          if ( n % i  ==  0)
            return (FALSE);
        }
        return (TRUE);
      }
     
     void main ()
     {
       int numero;
     
       do
       {
         printf("Introduz um numero inteiro (termina com -1): ");
         scanf( "%d", &numero );
     
         if (numero != -1)
         {
     
           if ( impar(numero) == TRUE )
             printf("O numero %d e' impar ", numero);
           else
             printf("O numero %d e' par ", numero);
     
           if ( primo(numero) == TRUE )
             printf("e e' primo\n\n");
           else
             printf("e nao e' primo\n\n");
     
         }
       }
       while (numero != -1);
     }
    

Programa 2

     /***************************************************************
      * a6_p2 -- Este programa mostra os primeiros 100 numeros primos
      *
      * Input :
      * Output: Os 100 primeiros primos
      ***************************************************************/
     #include <stdio.h>
     
     #define TRUE   1
     #define FALSE  0
     
     /*************************************
      * primo -- Diz se um número é primo
      *
      * Parâmetros
      *	n -- um número inteiro
      *
      * Devolve
      *	TRUE -- se numero é primo
      *	FALSE -- se numero não é primo
      *************************************/
      int primo (int n)
      {
        int i;  /* divisores intermedios sucessivos */
     
        if ( numero < 2 )
          return (FALSE);
        for (i = 2; i <= n - 1; i++)
        {
          if ( n % i  ==  0)
            return (FALSE);
        }
        return (TRUE);
      }
     
     

     void main ()
     {
       int numero, conta_primos;
     
       numero = 1;
       conta_primos = 1;
       while (conta_primos <= 100)
       {
         if ( primo(numero) == TRUE )
         {
           printf("%03d\t", numero);
           conta_primos++;
         }
         numero++;
       }
     }
     

Programa 3

     /*
      * a6_p3: Desenha um rectangulo
      *
      * Input : Um caracter, num de linhas e num de colunas
      * Output: Rectangulo pedido
      *
      */
     
     #include <stdio.h>
     
     /* Desenha rectangulo a pedido */
     void rectangulo(char c, int n_lin, int n_col)
     {
       int i,j;
     
       for( i=1; i<=n_lin; i++ )
         for( j=1; j<=n_col; j++ )
         {
           if( i==1 || i==n_lin || j==1 || j==n_col )
             printf("%c", c);
           else
             printf(" ");
           if( j==n_col )
             printf("\n");
         }
     }
     
     main()
     {
       char caracter;
       int n_linhas, n_colunas;
     
       printf("Introduz um caracter:\n");
       scanf("%c", &caracter );
       printf("Introduz o numero de linhas:\n");
       scanf("%d", &n_linhas );
       printf("Introduz o numero de colunas:\n");
       scanf("%d", &n_colunas );
       rectangulo(caracter, n_linhas, n_colunas);
     }
     

Programa 4

     /*
      * a6_p4: Calcula o factorial de 5
      *
      * Input :
      * Output: factorial de 5
      *
      */
     
     #include <stdio.h>
     
      /* função iterativa para calcular o factorial */
      int factorial( int n )
      {
          int i,p;
     
          p = 1;
          for( i=2; i<=n; i++ )
              p = p * i;
          return p;
      }
     
     void main()
     {
         printf("O factorial de 5 e' %d\n", factorial(5));
     }
     

Programa 5

     /*
      * a6_p5: Calcula o factorial de 5
      *
      * Input :
      * Output: factorial de 5
      *
      */
     
     #include <stdio.h>
     
      /* função recursiva para calcular o factorial */
      int factorial( int n )
      {
          if (n == 0)
              return(1);
          /* else */
          return ( n * factorial(n-1) );
      }
     
     void main()
     {
         printf("O factorial de 5 e' %d\n", factorial(5));
     }
     

Programa 6

     /*
      * Lanca moeda ao ar 1000 vezes
      *
      * Input:
      * Output: Quantas vezes saiu 'cara' e quantas saiu 'coroa'
      */
     
     #include <stdio.h>
     #include <stdlib.h>
     #include <time.h>
     
     #define CARA    0
     #define COROA   1
     
     /* Prepara a geracao de numeros aleatorios */
     void randomize()
     {
       time_t agora;
     
       agora = time(0); /* tb podia ser  time(&agora); */
       srandom(agora);
     }
     
     /* devolve um inteiro aleatorio no intervalo 0..n-1 (inclusive) */
     int aleatorio( int n )
     {
       int numero;
     
       numero = (random() % n);
       return( numero );
     }
     
     /* Lanca moeda ao ar 1 vez */
     int LancaMoeda (void)
     {
       if (aleatorio(2) == 0)
         return CARA;
       else
         return COROA;
     }
     
     /*  Lanca moedas ao ar varias vezes */
     int main()
     {
       int resultado, n_caras, n_coroas, i;
     
       n_caras = 0; n_coroas = 0;
       randomize();
       for ( i = 0; i < 1000; i++ )
         {
           resultado = LancaMoeda();
           if ( resultado == CARA )
     	     n_caras++;
           else
     	     n_coroas++;
         }
       printf("Sairam %d caras e %d coroas\n", n_caras, n_coroas);
       return 0;
     }
     

Programa 7

     /*
      *  a7_p7: Gera 1000 números reais aleatórios entre 0 e 1
      *
      *  Input:
      *  Output: Diz quantos numeros foram gerados por intervalo   
      *
      */
     
     #include <stdio.h>
     #include <stdlib.h>
     #include <time.h>
     
     /* Prepara a geracao de numeros aleatorios */
     void randomize()
     {
       time_t agora;
     
       agora = time(0);
       srandom(agora);
     }
     
     /* Gera um numero aleatório no intervalo entre 0 e 1 */
      double aleatorio01 (void)
      {
          return (double) rand() / (double) RAND_MAX;
      }
     
     void main()
     {
         int i, cont1, cont2, cont3;
         double numero;
     
     
         cont1 = 0;
         cont2 = 0;
         cont3 = 0;
     
         randomize();
         for (i = 0; i < 1000; i++)
         {
             numero = aleatorio01();
             if (numero >= 0.0 && numero < 0.5)
                 cont1++;
             else if (numero >= 0.5 && numero < 0.8)
                 cont2++;
             else if (numero >= 0.8 && numero < 1.0)
                 cont3++;
         }
         printf("No intervalo [0.0, 0.5[ cairam %d numeros\n", cont1);
         printf("No intervalo [0.5, 0.8[ cairam %d numeros\n", cont2);
         printf("No intervalo [0.8, 1.0[ cairam %d numeros\n", cont3);
     }