Ir ao conteúdo
  • Cadastre-se
Oliveira_Lucas

C++ calculadora npr em C

Posts recomendados

estou com um problema ao criar uma calculadora com Notação Polonesa Reversa, preciso receber do teclado uma string com dois numeros de 1 a 9 e um sinal (+,-,*,/) ex; (1 4 -) e o programa tem que converter essa string para int, Ao receber números, o valor deve ser armazenado na pilha; . Ao receber espaços, nada deve ser feito; . Ao receber operadores (+, -, *, /) devem ser retirados dois valores da pilha, realizada a operação e o valor armazenado na pilha. Ao final da operação deve restar somente um número na pilha; Retirar o número da pilha e apresentar o valor da expressão; Caso a pilha esteja vazia ou com mais de um valor apresentar mensagem “Expressão estava errada”.

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

   @Oliveira_Lucas     se você pegar essa string , de seu exemplo :

(14+)

o dígito 1 está na posição zero da string    // string[0];
o dígito 4 está na posição hum  da string    // string[1];
o caractere + está na posição dois da string // string[2]; 
  

no teclado  ,  então você pode usar o comando  isdigit(string[0])  para saber se o caractere da string é número ou algum outro caractere , e se for número  você pode converter esse dígito em um inteiro por fazer uma variável do tipo int ,  igual ao caractere menos 48 , pois os dígitos que são os números de zero até nove ,  na tabela ASCII estão a partir da posição 48 ,  assim o caractere zero que está na string  tem o valor ASCII igual a 48 , então 48 menos 48 igual a zero , e o mesmo para os outros dígitos também  ,  depois use um switch para fazer a operação que foi pedida e imprima o resultado , e se você quiser fazer mais cálculos então coloque isso tudo dentro de um while , que se repetirá enquanto você quiser ,    mas não posso te dar um código pronto , pois é contra as regras do fórum , então faça seu código e poste aqui para vermos como está e em que podemos ajudar   .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
int main(){
	char a;
	int b;
	int operacao;
	int atoi(
	const char);
	cout<<"digite uma expressao no modelo npr:";
	cin>>a;
	int _atoi_l(const char *a, _locale_t locale);
	printf("\%s\ ",a); 
}

essa e uma parte do código que estou tentando resolver pela função atoi, mas não está imprimindo o que é lido pelo teclado 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

😶

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Oliveira_Lucas

@Oliveira_Lucas    você vai usar a linguagem c ou c++ ?    pois tem algumas diferenças , então em c++ você precisa colocar esse comando la no inicio antes da main : using namespace std;

e a função atoi seria assim :  b=atoi(a);

mas o char a precisa ter varias posições assim:

char a[30]; 

isso na linguagem c , ou se for em c++ , seria assim :

string a;

mas para que a função atoi funcione é preciso que na string haja apenas digito de zero ate nove , pois se houver pelo menos um caractere diferente desses dígitos , a atoi não funcionará , então por isso seria melhor converter cada caractere da string usando a tabela ASCII.e se é para fazer o algoritmo na linguagem c , então seu código com algumas modificações poderia ser assim  ;

#include <stdio.h>
#include <string.h>
int main(){
    char cod[30],sinal,op;
    int j,d1,d2,flag;
    do{
        do{
            flag=0;
            d1=-1;
            d2=-1;
            printf("digite dois digitos e um sinal aritmetico ");
            fflush(stdin);
            scanf("%s",cod);
            system("cls");
            for(j=0;j<3;j++){
                if(isdigit(cod[j])&&d1<0)d1=cod[j]-48;/* converte caractere da string em inteiro */
                else
                    if(isdigit(cod[j])&&d1>=0)d2=cod[j]-48;/* converte caractere da string em inteiro */
                    else
                        if( ! isdigit(cod[j]))sinal=cod[j];
            }
            if(d1 < 0 || d2 < 0)flag=1;
            if(sinal!='+' && sinal!='-' && sinal!='*' && sinal!='/')flag=1;
        }while( flag );
        switch(sinal){
        case '+':
            printf("\n  Resultado Da soma -> %d\n",d1+d2);
            break;
        case '-':
            printf("\n  Resultado Da subtracao -> %d\n",d1-d2);
            break;
        case '*':
            printf("\n  Resultado Da multiplicacao -> %d\n",d1*d2);
            break;
        case '/':
            printf("\n  Resultado Da divisao -> %d\n",d1/d2);
           break;
        }
        printf("\n  Outra Operacao  S / N ");
        fflush(stdin);
        scanf("%c",&op);
    }while(toupper(op) != 'N');
    printf("\n\n\n");
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 ,obrigado, pois realmente estava perdido e nao sabia como fazer a conversão usando isdigit, agora so vou inserir os elementos em uma pilha para o calculo!!

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!