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);
}