-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.c
More file actions
117 lines (104 loc) · 2.88 KB
/
main.c
File metadata and controls
117 lines (104 loc) · 2.88 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <stdio.h>
#include <stdlib.h>
#include "bignum.h"
#include "list.h"
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
int simpleFib(int n){
if(n==0)
return 0;
if(n==1)
return 1;
return simpleFib(n-1) + simpleFib(n-2);
}
int dynamicFib(int n){
int fib[n+2];
fib[0]=0;
fib[1]=1;
for(int i=2;i<=n;i++)
fib[i] = fib[i-1] + fib[i-2];
return fib[n];
}
bignum bigFib(int n){
bignum fib[n+2];
fib[0] = intToBignum(0);
fib[1] = intToBignum(1);
for(int i=2;i<=n;i++)
fib[i] = add2(fib[i-1],fib[i-2]);
return fib[n];
}
void exemplos(){
int x,y;
printf("=========================================\n");
printf("= Exemplos das operaçoes implementadas: =\n");
printf("=========================================\n");
printf("\n");
printf("Introduza 2 bignumbers que pretende somar:\n");
scanf("%d",&x);
scanf("%d",&y);
printBignum(add2(intToBignum(x),intToBignum(y)));
printf("\n");
printf("Introduza 2 bignumbers que pretende subtrair:\n");
scanf("%d",&x);
scanf("%d",&y);
printBignum(dif(intToBignum(x),intToBignum(y)));
printf("\n");
printf("Introduza 2 bignumbers que pretende multiplicar:\n");
scanf("%d",&x);
scanf("%d",&y);
printBignum(mult(intToBignum(x),intToBignum(y)));
printf("\n");
printf("Introduza 2 bignumbers que pretende dividir:\n");
scanf("%d",&x);
scanf("%d",&y);
printBignum(div1(intToBignum(x),intToBignum(y)));
}
void fib(){
int limite,opcao;
printf("=========================================\n");
printf("= Números de Fibonnaci: =\n");
printf("=========================================\n");
printf("\n");
printf("Selecione qual a função de calculo que pretente:\n");
printf("1) Fibonnaci Recursivo\n");
printf("2) Fibonnaci com programação dinâmica\n");
printf("3) Fibonnaci com programação dinâmica aplicado a Bignumbers\n");
scanf("%d",&opcao);
if(opcao<1 || opcao>3){
printf("Erro: Opção Inválida. Tente novamente.\n");
exit(1);
}
printf("Introduza o limite máximo de geração que pretende utilizar\n");
scanf("%d",&limite);
if(opcao==1)
for(int i=0;i<limite;i++)
printf("%d ",simpleFib(i));
if(opcao==2)
for(int i=0;i<limite;i++)
printf("%d ",dynamicFib(i));
if(opcao==3)
for(int i=0;i<limite;i++)
printBignum(bigFib(i));
printf("\n");
}
void main(int argc, char** argv){
if(argc!=2){
printf("Erro: Opção inválida\n");
printf("Para executar este programa proceda de uma das seguinte maneira:\n");
printf("./a.out EXEMPLOS\n");
printf("./a.out FIB\n");
exit(1);
}
if(strcmp(argv[1],"EXEMPLOS")==0)
exemplos();
else if(strcmp(argv[1],"FIB")==0)
fib();
else{
printf("Erro: Opção inválida\n");
printf("Para executar este programa proceda de uma das seguinte maneira:\n");
printf("./a.out EXEMPLOS\n");
printf("./a.out FIB\n");
exit(1);
}
}