Pesquisar na Comunidade
Mostrando resultados para as tags ''#calculadorapolonesa''.
Encontrado 1 registro
-
Então galera, sou novato no fórum me avisem se fiz algo errado, já pesquisei sobre mas não achei exatamente minha dúvida. Então to fazendo programação na faculdade, e tenho um trabalho para fazer uma calculadora polonesa. Ainda não tenho conhecimentos sobre ponteiros e nem funções por isso não utilizei no meu programa. O mesmo compila (compilador = gcc), mas quando digito qualquer equação ele dá um Segmentation Fault, que sei que é um problema relacionado a alocação de memória mas não tenho ideia de como resolver-lo nem como achá-lo, só sei que o mesmo está dentro de um if que criei na função que está sinalizado abaixo. Gostaria da ajuda de vocês. Segue o código: #include <stdio.h> #include <string.h> #include <stdlib.h> void main (){ int vas, num_e=1; // vassoura, número de equações char equacao[160],ch1,ch2; //2n-1 + /0. int cont1,cont3, cont2, lim, i=0, num1, num2,final=0,num3, numr; char res[3]; char eq2[80],eq3[80],ch3[2]; printf("Calculadora Polonesa:\nEste programa só aceita números de 0 à 9 e os operadores \"+,-,*,%%,/\". \n\n"); printf("Para inserir uma equação, digite números de 0 à 9 e\ndepois os operadores todos separados por espaços. \n\n"); printf("Digite \"exit\" para terminar o programa.\n\n"); for (vas=1;;vas++){ printf("Insira a %dº equação: \n",num_e); gets(equacao); lim = strlen(equacao); for(cont3=1;cont3<lim;cont3+=2){ //TESTE DE ESPAÇOS NA EQUAÇÃO if (equacao[cont3]!=' '){ printf("Erro. Partes da equação não estão separadas por um espaço.\n"); strcpy(equacao,""); printf("Insira a %dº equação novamente: \n",num_e); gets (equacao); cont3=1; } lim = strlen(equacao); } if((equacao[0]=='e') && (vas==1)){ printf("Encerrando o programa...\n"); break; } if((equacao[0]=='e') && (vas>1)) break; for(cont3=0;cont3<lim;cont3++){ //For para imprimir a equação de entrada printf("%c",equacao[cont3]); } for (cont1=0; cont1<lim; cont1++){ //RESULOÇÃO DA EQUAÇÃO NESTE FOR lim = strlen(equacao); ch3[0] = equacao[cont1]; num3 = atoi(ch3); if (((num3>57) || (num3<48)) && equacao[cont1]!=' ') { //O PROBLEMA ESTÁ NESSE IF...LEU UM SINAL, E PEGA OS 2 NÚMEROS ANTERIORES. ch1 = equacao[cont1-2]; //Convertendo caracteres para inteiro ch2 = equacao[cont1-4]; num1 = ch1-48; num2 = ch2-48; switch (equacao[cont1]){ case '+': numr=num1+num2; break; case '-': numr=num2-num1; break; case '*': numr=num1*num2; break; case '/': numr=num2/num1; break; case '%': numr=num2%num1; break; } cont2=0; while(cont2<(cont1-4)){ //Copiando a parte inicial da equação para eq2(antes do sinal) eq2[cont2]=equacao[cont2]; cont2++; } cont2=(cont1+1); //Copiando a parte final da equação(após o sinal) while(cont2<lim){ eq3[i]=equacao[cont2]; i++; } res[0]=numr+48; strcat(eq2,res); //Concatenando a parte inicial da equação mais o resultado da operação realizada strcat(eq2,eq3); //Concatenando parte inicial + resultado + parte final strcpy(equacao,""); strcpy(equacao,eq2); //Copiando nova equação concatenada para a principal strcpy(eq2,""); // Zerando strings strcpy(eq3,""); cont1=0; i=0; //zerando tudo para para repetir o for } } printf(" = %c\n",equacao[0]); final += atoi(equacao); //SOMANDO AO RESULTADO FINAL num_e++; } if ((vas>1) && (equacao[0]=='e')) printf("O resultado final é: %d\n",final); }========================================================= AVISO: Favor postar as suas duvidas no Forum Principal ( C, C++ )