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