Você está na página 1de 7

INSTITUTO FEDERAL DE EDUCAO, CINCIA E

TECNOLOGIA DO MARANHO IFMA


CAMPUS SO LUS
DIRETORIA DE ENSINO
COORDENAO DE ENGENHARIA
DISCIPLINA DE TECNICAS DE PROGRAMAO
PROF.: ORLANDO ROCHA FILHO

UNIDADE 1 - PRIMEIRO TRABALHO

LUIZ FERNANDO MELO PINHEIRO

So Lus, Maranho
setembro de 2013

INSTITUTO FEDERAL DE EDUCAO, CINCIA E


TECNOLOGIA DO MARANHO IFMA
CAMPUS SO LUS
DIRETORIA DE ENSINO
COORDENAO DE ENGENHARIA
DISCIPLINA DE TECNICAS DE PROGRAMAO
PROF.: ORLANDO ROCHA FILHO

UNIDADE 1 - PRIMEIRO TRABALHO

LUIZ FERNANDO MELO PINHEIRO


Primeiro

trabalho

da

unidade 1 da disciplina de
Tecnicas
visando

de
a

Programao,
obteno

da

primeira nota (3,0 pontos).

So Lus, Maranho
setembro de 2013

VERSAO 3.0 do PRIMEIRO TRABALHO (3,0 pontos)

Exerccio 1 - Maxdivisor Recursivo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

/*********************************************************************
* Programa: MDC Recursivo
* Autor...: Luiz Fernando Melo Pinheiro
EE1324001-21
* Data....: 25/08/2013
* Compilado com: Code::Blocks 12.11
*********************************************************************/
/*********************************************************************
* O calculo do M.D.C. foi feito pelo mtodo das divises sucessivas.
*
* Sequencia de execuo bsica:
*
*
1) dividimos o nmero maior pelo nmero menor;
*
2) agora, dividimos o divisor da diviso anterior, pelo resto
* da diviso anterior, e assim sucessivamente;
*
3) O divisor da diviso exata o M.D.C.
*********************************************************************/
#include<stdio.h>
#include<stdlib.h>
long long int maxdivisor (int x, int y);
int main()
{
system("cls");
int a,b;
int R;
printf("Programa MDC Recursivo\n\n");
printf("Digite o primeiro numero:");
scanf("%d",&a);
printf("\nDigite o segundo numero:");
scanf("%d",&b);
R=maxdivisor(a,b);
printf("\n O MDC de %d e %d eh: %d \n\n\n",a,b,R);
system("pause");
return 0;
}
long long int maxdivisor (int x, int y)
{
int resto;
resto = x % y;
if (resto == 0)
return y;
else
return maxdivisor(y, resto);
}

Exerccio 2 - Fatorial Recursivo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

/*********************************************************************
* Programa: Fatorial Recursivo
* Autor...: Luiz Fernando Melo Pinheiro
EE1324001-21
* Data....: 25/08/2013
* Compilado com: Code::Blocks 12.11
*********************************************************************/
/*********************************************************************
* O calculo do fatorial(n!)segue a logica basica abaixo:
*
*
1) 1
se n=0 ou n=1;
*
2) n x (n-1)! se n>1
*********************************************************************/
#include<stdio.h>
#include<stdlib.h>
long long int fatorial (int n);
int main()
{
system("cls");
int a;
int R;
printf("Programa Fatorial Recursivo\n\n");
printf("Digite numero:");
scanf("%d",&a);
R=fatorial(a);
printf("\n O Fatorial de %d eh:%d\n\n\n",a,R);
system("pause");
return 0;
}
long long int fatorial (int n)
{
if ((n==0) || (n==1))
return 1;
else
return fatorial(n-1)*n;
}

Exerccio 3 - Combinacional Recursivo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

/*********************************************************************
* Programa: Combinacional Recursivo
* Autor...: Luiz Fernando Melo Pinheiro
EE1324001-21
* Data....: 25/08/2013
* Compilado com: Code::Blocks 12.11
*********************************************************************/
/*********************************************************************
* O calculo do combinacional(n,k)segue a logica basica abaixo:
*
*
1) n
se k=1;
*
2) 1
se n=k;
*
3) comb (n-1,k-1)+comb(n-1,k)
se 1<k<n
*********************************************************************/
#include<stdio.h>
#include<stdlib.h>
long long int comb (int n,int k);
int main()
{
system("cls");
int a,b;
int R;
printf("Programa Combinacional Recursivo\n\n");
printf("Digite o primeiro numero:");
scanf("%d",&a);
printf("\nDigite o segundo numero:");
scanf("%d",&b);
R=comb(a,b);
printf("\nO combinacional de %d e %d eh: %d\n\n\n",a,b,R);
system("pause");
return 0;
}
long long int comb (int n,int k)
{
if((k>1)&&(k<n))
return comb(n-1,k-1)+comb(n-1,k);
else if(k==n)
return 1;
else if(k==1)
return n;
}

Exerccio 4 - Raiz Recursivo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

/*********************************************************************
* Programa: Raiz Quadrada Recursiva - Metodo de Newton-Raphson
* Autor...: Luiz Fernando Melo Pinheiro
EE1324001-21
* Data....: 25/08/2013
* Compilado com: Code::Blocks 12.11
*********************************************************************/
/*********************************************************************
* O calculo da raiz quadrada(x,xo,erro)segue a logica basica abaixo:
*
*
1) xo
se |xo^2 - x|<erro;
*
2) RaizQ(x,(xo^2 + x)/2xo,erro)
caso contrario
*
* Onde:
*
x = numero a ser calculado a raiz quadrada
*
xo = estimativa de valor inicial da raiz (chute inicial)
*
e = erro
*
* Obs.: atribui como padro o chute inicial b=10 e
*
atribui como padro o erro c=0.00001
*********************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long double raiz (float x,float xo,float e);
int main()
{
system("cls");
float a,b=10,c=0.00001;
float R;
printf("Programa Raiz Quadrada Recursiva - Metodo de Newton-Raphson\n\n");
printf("Digite o numero que deseja obter a raiz quadrada: ");
scanf("%f",&a);
R=raiz(a,b,c);
printf("A raiz quadrada eh igual a:%.3f\n",R);
system("pause");
return 0;
}
long double raiz (float x,float xo,float e)
{
if((fabs(pow(xo,2)-x))<e)
return xo;
else
return raiz(x,(pow(xo,2)+x)/(2*xo),e);
}

Exerccio 5 - Funo de Ackermann


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

/*********************************************************************
* Programa: Funo de Ackermann Recursiva
* Autor...: Luiz Fernando Melo Pinheiro
EE1324001-21
* Data....: 25/08/2013
* Compilado com: Code::Blocks 12.11
*********************************************************************/
/*********************************************************************
* O calculo da funo de ackermann(m,n)segue a logica basica abaixo:
*
*
1) n+1
se m=0;
*
2) A(m-1,1)
se m>0 e n=0;
*
3) A(m-1,A(m,n-1))
se m>0 e n>0
*********************************************************************/
#include<stdio.h>
#include<stdlib.h>
long long int ackermann(int m,int n);
int main()
{
system("cls");
int a,b;
int R;
printf("Funcao de Ackermann Recursiva\n\n");
printf("Digite o primeiro numero: ");
scanf("%d",&a);
printf("\nDigite o segundo numero: ");
scanf("%d",&b);
R=ackermann(a,b);
printf("\nO Ackermann de %d e %d eh: %d\n\n\n",a,b,R);
system("pause");
return 0;
}
long long int ackermann(int m,int n)
{
if((m > 0)&&(n > 0))
return ackermann(m - 1,ackermann(m,n - 1));
else if((m > 0)&&(n == 0))
return ackermann(m - 1, 1);
else
return n+1;
}