-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuncoes.c
117 lines (114 loc) · 3.34 KB
/
funcoes.c
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
116
117
#include "funcoes.h"
#include <stdio.h>
#include <math.h>
#include <string.h>
int Procura_Num(int TAM_BaseX, char **BaseX, char c){
int j;
for(j=0; j<TAM_BaseX; j++){
if(BaseX[j][0] == c)
return j;
}
return -1;
}
void trataNum (char str[], int a, int TAM_BaseX, char **BaseX) {
int i, j, bases[2], expoente, procurado;
double soma=0;
for (i=1; str[i]!=' '; i++);
int aux=i;
for (j=0; j<2; j++) {
i++;
if (str[i] == '1') {
bases[j]=str[i+1] - '0' + 10;
}else if(str[i] == '-'){
bases[j] = -1;
}
else {
bases[j]=str[i] - '0';
}
for (; str[i]!=' '; i++);
}
for (j=aux; str[j]!='.'; j--);
if(bases[0] != -1){
for (i=j-1; i>=1; i--) {
if (str[i] > '9') {
soma+=(str[i]-'0'-7)*pow(bases[0],j-1-i);
} else {
soma+=(str[i]-'0')*pow(bases[0],j-1-i);
}
}
for (i=j+1; i<aux; i++) {
if (str[i] > '9') {
soma+=(str[i]-'0'-7)*pow(bases[0],j-i);
} else {
soma+=(str[i]-'0')*pow(bases[0], j-i);
}
}
}else{
for(i=j-1, expoente = 0; i>=1; i--){
procurado = Procura_Num(TAM_BaseX, BaseX, str[i]);
if(procurado != -1)
soma+=(procurado)*pow(TAM_BaseX, expoente++);
}
for(i=j+1, expoente = -1; i<aux; i++){
procurado = Procura_Num(TAM_BaseX, BaseX, str[i]);
if(procurado != -1)
soma+=(procurado)*pow(TAM_BaseX, expoente--);
}
}
if (str[0] == '-') {
soma*=-1;
}
numeros[a][0]=soma;
numeros[a][1]=bases[1];
}
void converteNum (FILE *saida, double v[], int TAM_BaseX, char **BaseX) {
int i, T;
char str[192], mat[192][10];
if (v[0]<0) {
fprintf(saida, "-");
v[0]*=-1;
} else {
fprintf(saida, "+");
}
int parte_inteira=floor(v[0]);
float parte_decimal=v[0]-parte_inteira;
if(v[1] != -1){
for (i=0; parte_inteira>=v[1]; i++, parte_inteira/=(int)v[1]) {
str[i]=(parte_inteira%((int)v[1]))+'0';
if (str[i] > '9') {
str[i]+=7;
}
}
str[i]=parte_inteira+'0';
if (str[i] > '9') {
str[i]+=7;
}
for (; i>=0; i--) {
fprintf(saida, "%c", str[i]);
}
fprintf(saida, ".");
}else{
for(i = 0; parte_inteira>=TAM_BaseX; i++, parte_inteira/=(int)TAM_BaseX){
sprintf(mat[i], "%s", (BaseX[(parte_inteira%TAM_BaseX)]));
}
for (; i>=0; i--) fprintf(saida, "%s", mat[i]);
}
if(v[1] != -1){
for (i=-1; parte_decimal != 0.0; i--) {
T=parte_decimal*(int)v[1];
if (T>9) {
fprintf(saida, "%c", T+'0'+7);
} else {
fprintf(saida, "%d", T);
}
parte_decimal = (parte_decimal*(int)v[1]) - T;
}
}else{
for(i=-1; parte_decimal != 0.0; i--){
T=parte_decimal*TAM_BaseX;
fprintf(saida, "%s", BaseX[T]);
parte_decimal = (parte_decimal*TAM_BaseX) - T;
}
}
fprintf(saida, "\n");
}