ATUALIZADO!!!
Obs.:Fiz até aqui,mas não consigo mostrar minha lista de números,é só tirar os “bla.digito[i]=conversor(ch);” e o “ble.digito[j]=conversor(ch);” que eles aparecem,e não sei pq eles poderiam estar dando problema.Alguma luz?(Na soma ainda…)Não formatei direito,faço no codeblocks por causa da facul,e o txt ta mesma pasta e talz…
Meu trabalho de faculdade é fazer uma calculadora de 4 operações infinita no qual qualquer número de qualquer tamanho pode ser calculado (com isso estipula-se qualquer número que possa talvez até estourar a capacidade da variável),alocar esse número até que sei como usando arrays e tal,mas depois fazer operações com eles é o complicado,alguma dica ou modo que eu possa começar a fazer isso?
#include <stdio.h> typedef struct { double *digito; }numero;
double soma(numero bla,numero ble,int i,int j){ numero blu; int g=0,c=1,t,z; t=i;z=j; blu.digito=calloc(1,sizeof(double)); if(i<j){ while(i>=0){ blu.digito = realloc(blu.digito,(++c)*sizeof(double)); <a href="//blu.digito">//blu.digito</a>[g]=NULL; blu.digito[g]=bla.digito[i]+ble.digito[j]; if(blu.digito[g]>9){ blu.digito[g]=blu.digito[g]-10; ble.digito[j–]=1+ble.digito[j–]; j++; } g++; i–;j–; } while(j>=0){ blu.digito = realloc(blu.digito,(++c)*sizeof(double)); <a href="//blu.digito">//blu.digito</a>[g]=NULL; blu.digito[g]=0+ble.digito[j]; if(blu.digito[g]>9){ blu.digito[g]=blu.digito[g]-10; ble.digito[j–]=1+ble.digito[j–]; j++; } g++; j–; } printf(“RESULTADO: \n”); while(g>=0){ printf("%dXXX",blu.digito[g]); g–; } }else{ while(j>=0){ blu.digito = realloc(blu.digito,(++c)*sizeof(double)); <a href="//blu.digito">//blu.digito</a>[g]=NULL; blu.digito[g]=bla.digito[i]+ble.digito[j]; if(blu.digito[g]>9){ blu.digito[g]=blu.digito[g]-10; bla.digito[i–]=1+bla.digito[i–]; i++; } g++; i–;j–; } while(i>=0){ blu.digito = realloc(blu.digito,(++c)*sizeof(double)); <a href="//blu.digito">//blu.digito</a>[g]=NULL; blu.digito[g]=0+bla.digito[i]; if(blu.digito[g]>9){ blu.digito[g]=blu.digito[g]-10; bla.digito[i–]=1+bla.digito[i–]; i++; } g++; i–; } printf(“RESULTADO: \n”); while(g>=0){ printf("%dxxx",blu.digito[g]); g–; } } }
int menu(numero bla,numero ble,int i,int j){ int opcao; printf("\n\nCALCULADORA ‘INFINITA’\n"); printf(“OPCOES:(digite numero correspondente)\n”); printf(“1-SOMA\n”); printf(“2-SUBTRAÇÃO\n”); printf(“3-MULTIPLICAÇÃO\n”); printf(“4-DIVISÃO\n”); printf(“5-RESTO\n”); printf(“6-SAIR\n”); scanf("%d",&opcao); if((opcao<0)||(opcao>6)){ printf(“Opção inválida”); //menu(); } switch(opcao){ case 1: soma(bla,ble,i,j); break; case 2: //subtracao(); break; case 3: //multiplicacao(); break; case 4: //divisao(); break; case 5: //resto(); break; } }
double conversor(char cho){ numero blas;int ii=0; if(cho==‘0’){ blas.digito[ii]=0; }else if(cho==‘1’){ blas.digito[ii]=1; }else if(cho==‘2’){ blas.digito[ii]=2; }else if(cho==‘3’){ blas.digito[ii]=3; }else if(cho==‘4’){ blas.digito[ii]=4; }else if(cho==‘5’){ blas.digito[ii]=5; }else if(cho==‘6’){ blas.digito[ii]=6; }else if(cho==‘7’){ blas.digito[ii]=7; }else if(cho==‘8’){ blas.digito[ii]=8; }else if(cho==‘9’){ blas.digito[ii]=9; } return blas.digito[ii]; }
int main(void) { char url[]=“teste.txt”; char ch; FILE *arq; numero bla,ble; int i=0,j=0,cont=0,contt=1,aux; bla.digito=calloc(1,sizeof(double)); ble.digito=calloc(1,sizeof(double));
arq = fopen(url, "r"); if(arq == NULL){ printf("Erro, nao foi possivel abrir o arquivo\n"); }else{ while( (ch=fgetc(arq))!= EOF ){ if((ch=='\n')||(ch=='\r')){ break; } putchar(ch); bla.digito = realloc(bla.digito,(++cont)*sizeof(double)); bla.digito[i]=conversor(ch); } printf("\n\n"); while( (ch=fgetc(arq))!= EOF ){ putchar(ch); ble.digito = realloc(ble.digito,(++contt)*sizeof(double)); ble.digito[j]=conversor(ch); } } fclose(arq); menu(bla,ble,cont,contt); return 0;
}