Ir ao conteúdo

Posts recomendados

Postado

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
Postado

   @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
Postado
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
Postado

@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;
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!