--------------------------------------------------------------------
 MAC-115  - Turma T23 -  Outubro  -    Uso de funções
====================================================================

EXEMPLO 6
=========

/*
 * arquivo: SomaDePrimos.c
 *
 * Este programa recebe um número inteiro m, e verifica 
 * se m = p + q onde p e q sao primos. 
 * 
 * Usar uma funcao que verifica se um  dado numero é primo; esta funcao deve 
 * devolver 1 se o número é primo,  e devolver 0 se o número nao é
 * primo.
 * OBS: Se houver mais do que um par p,q nas condicoes desejadas,
 * o progrma encontra todos tais pares.
 */


#include <stdio.h>

int primo (int n);

int main()
{
  int m, p, sim = 0;
  
  printf("De o valor de m:  " );
  scanf ("%d", &m);
  p = 2;
  while (p <= m/2){
    if (primo (p))
      if (primo(m-p)) {
        printf("sim, %d = %d + %d\n", m, p, m-p);
        sim = 1;
      }
    p = p +1;
  }
  if (!sim) printf(" %d nao e' soma de dois primos\n", m);
  return 0;

}

int primo (int n)
{ 
  int d, OK, resto;
  d = 2;
  OK = 1;
  if (n == 1) OK = 0;
  while (OK  && d  <=  n/2){
     resto = n % d;
     if (resto == 0) OK = 0;
     d = d + 1;
  }
  if (OK) return 1 ;
  else return 0;
} 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

EXEMPLO 7
=========

/*
 * Arquivo: problemaExtra1.c
 * -------------------------
 * Este programa lê um ponto origem (x_0, y_0) e uma sequência de n
 * pontos e determina o ponto mais proimo do ponto origem.
 *
 * OBS: Nao esquecer das opcoes na hora de compilar: 
 * gcc -ansi -lm -g -pedantic problemaExtra1.c -o problemaExtra1
 */

#include <stdio.h>
#include <math.h> /***** uso do sqrt( ) ******/
#include <float.h> /***** uso do FLT_MAX ******/

/* Prototipo da funcao ********/
    float distancia(float x1, float y1, float x2, float y2);
/* Funcao que calcula a distancia entre os pontos (x1,y1) e (x2,y2)
  ********************************************************************* */

int main()
{
    int i, n;			/* total de pontos */
    float x0, y0,		/* coordenadas do ponto origem */
     x, y,			/* coordenadas de um ponto */
     dist, 
     distMin,	           	/* distancia minima encontrada */
     xpontoMin, ypontoMin;	/* coordenadas do ponto mais proximo */

    printf("Forneca as coordenadas reais do ponto origem (x0,y0): ");
    scanf("%f %f", &x0, &y0);
    printf("Forneca o valor de n (total de pontos): ");
    scanf("%d", &n);

    distMin = FLT_MAX; 	/* inicializacao com o maior numero real */
    printf("distancia minima inicializada  = %e\n\n", distMin);

    for (i = 0; i < n; i++) {
	printf("Forneca as coordenadas do proximo ponto: ");
	scanf("%f %f", &x, &y);
	dist = distancia(x0, y0, x, y);
	printf("distancia ate' o ponto origem = %f\n", dist);
	if (dist < distMin) {
	    distMin = dist;
	    xpontoMin = x;
	    ypontoMin = y;
	}
	printf("distancia minima ate agora = %f\n\n", distMin);
    }
    printf
	("O ponto mais proximo do ponto origem e' (%f, %f) \n", xpontoMin, ypontoMin);
    printf("Este ponto esta' a distancia  %f \n", distMin);

    return 0;
}
/*
 * Funcao: distancia
 * Uso: distancia (x1,y1,x2,y2)
 * Esta funcao calcula a distancia entre os pontos (x1,y1) e (x2,y2)
 */
float distancia(float x1, float y1, float x2, float y2)
{
    float dist;
    dist = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    return dist;
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

EXEMPLO 8
=========

/*
 * Arquivo: coef-binomial.c
 * -----------------------
 * Faça um programa que lê um número inteiro n > 0 e imprime os coeficientes
 * da expansão de (a+b)^n.
 */

#include <stdio.h>

/* Prototipos das funcoes ********/
     int fatorial(int n);
/* Funcao que recebe n e calcula n! */
     int binomial(int m, int n);
/* Funcao que recebe dois inteiros m e n, e usando a funcao fatorial 
 * calcula o coeficiente binomial comb(m,n) definido como m!/(n!(m-n)!) */

/**********************************************************************/

int main()
{
    int n, k, coef;

    printf("Entre o valor de n (inteiro positivo): ");
    scanf("%d", &n);

    printf("Os valores dos coeficientes sao: \n");

    for (k = 0; k <= n; k++) {
	coef = binomial(n, k);
	printf("O valor de comb(%d,%d) e' %d \n", n, k, coef);
    }

    return 0;
}

/*
 * Funcao: fatorial 
 * Uso: fatorial(n)
 * Esta funcao calcula n!
 */

int fatorial(int n)
{
    int i, fat;
    fat = 1;

    for (i = 1; i <= n; i++)
	fat *= i;
    return (fat);
}

/*
 * Funcao: binomial 
 * Uso: binomial(m,n)
 * Esta funcao calcula  m!/(n!(m-n)!) 
 */

int binomial(int m, int n)
{
    int valor;
    valor = fatorial(m) / (fatorial(n) * fatorial(m - n));
    return (valor);
}