Ir ao conteúdo

Posts recomendados

Postado

Converter uma string recebida do usuario contendo um número por extenso entre zero e novecentos e noventa e nove, para inteiro.

 

codigo até agora:

 

#include <stdio.h>
#include <string.h>
int main(){
    int num;
    char num_ext[999];

    printf("Digite um numero: ");
    scanf("%[^\n]s", num_ext);
    num = atoi(num_ext);
    printf("%d", num);

    return 0;

}

 

  • Obrigado 1
Postado

@luis.paulo    para os dez primeiros poderia ser assim :

#include <stdio.h>
#include <string.h>
char unid[10][5]={"zero","um","dois","tres","quatro","cinco","seis","sete","oito","nove"};
int main(){
    int num,i;
    char num_ext[5];
    printf("Digite um numero: ");
    scanf("%[^\n]s", num_ext);/* num por extenso é em forma de palavras */
    //num = atoi(num_ext);/* converter string que contenha apenas digitos de zero até nove */
    for(i=0;i<10;i++){
        if(strcmp(num_ext,unid[i])==0)
            printf(" => %s eh igual a -> %d\n",num_ext,i);
    }
    return 0;
}

 

  • Curtir 1
Postado
#include <stdio.h>
#include <string.h>
#include <stdlib.h>//sem essa biblioteca aoi nao funciona

int main(){
    char num_ext[3];//3 digitos no máximo 999
    printf("Digite um numero: ");
    scanf("%s", num_ext);
    int num = atoi(num_ext);
    printf("%d", num);
}

 

  • Obrigado 1
Postado

@devair1010 Tentei editar para exibir até 999 mas não imprime.

#include <stdio.h>
#include <string.h>
char unid[10][5]={"zero","um","dois","tres","quatro","cinco","seis","sete","oito","nove"};
char dez[10][20]={"Zero","Dez","Vinte","Trinta","Quarenta","Cinquenta","Sessenta","Setenta","Oitenta","Noventa"};
char cent[10][20]={"Zero","Cento","Duzentos","Trezentos","Quatrocentos","Quinhentos","Seiscentos","Setecentos","Oitocentos","Novecentos"};
char excecao[10][20]={"Dez","Onze","Doze","Treze","Catorze","Quinze","Dezesseis","Dezessete","Dezoito","Dezenove"};

int main(){
    int num,i;
    char num_ext[5];

    printf("Digite um numero: ");
    scanf("%[^\n]s", num_ext);

    for(i=0;i<999;i++){
        if(strcmp(num_ext,unid[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,dez[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,cent[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,excecao[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }

    }
    return 0;
}

 

  • Obrigado 1
Postado
5 horas atrás, luis.paulo disse:

@devair1010 Tentei editar para exibir até 999 mas não imprime.


#include <stdio.h>
#include <string.h>
char unid[10][5]={"zero","um","dois","tres","quatro","cinco","seis","sete","oito","nove"};
char dez[10][20]={"Zero","Dez","Vinte","Trinta","Quarenta","Cinquenta","Sessenta","Setenta","Oitenta","Noventa"};
char cent[10][20]={"Zero","Cento","Duzentos","Trezentos","Quatrocentos","Quinhentos","Seiscentos","Setecentos","Oitocentos","Novecentos"};
char excecao[10][20]={"Dez","Onze","Doze","Treze","Catorze","Quinze","Dezesseis","Dezessete","Dezoito","Dezenove"};

int main(){
    int num,i;
    char num_ext[5];

    printf("Digite um numero: ");
    scanf("%[^\n]s", num_ext);

    for(i=0;i<999;i++){
        if(strcmp(num_ext,unid[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,dez[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,cent[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,excecao[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }

    }
    return 0;
}

 

 

@devair1010 Pode me ajudar?

  • Obrigado 1
  • 2 semanas depois...
Postado

@luis.paulo     precisa colocar os nomes referentes aos números unidade dezena centena  , em um vetor para pesquisar nele , então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <windows.h>
#define H GetStdHandle(STD_OUTPUT_HANDLE)
#define cls system("cls");
void textcolor_2(int l,int f){SetConsoleTextAttribute(H,l+(f<<4));}
void gotoxy_2(int x,int y){COORD c={x,y};SetConsoleCursorPosition(H,c);}
char palavras[42][15]={
     "zero"       , "um"           , "dois"       ,"tres"       , "quatro"    ,
     "cinco"      , "seis"         , "sete"       ,"oito"       , "nove"      ,
     "dez"        , "onze"         , "doze"       ,"treze"      , "quatorze"  ,
     "quinze"     , "dezesseis"    , "dezessete"  ,"dezoito"    , "dezenove"  ,
     ":"          , ","            , "vinte"      ,"trinta"     , "quarenta"  ,
     "cinquenta"  , "sessenta"     , "setenta"    ,"oitenta"    , "noventa"   ,
     ":"          , "cem"          , "cento"      ,">"          , "duzentos"  ,
     "trezentos"  , "quatrocentos" , "quinhentos" ,"seiscentos" , "setecentos",
     "oitocentos" , "novecentos" } ,
     dep[3][15]   ,
     palavras_validas[3][15]       ;
int letras[25][5]={{15,16,14, 1,30}, /* S */
                   {14,17,31,17,17}, /* A */
                   {14, 4, 4, 4,14}, /* I */
                   {17,25,21,19,17}, /* N */
                   {30,17,17,17,30}, /* D */
                   {14,17,17,17,14}, /* O */
                   { 0, 0, 0, 0, 0}, /*   */
                   { 1, 2, 4, 0,16}, /* ! */
                   {17,25,21,19,17}, /* N */
                   {17,17,17,17,14}, /* U */
                   {17,27,21,17,17}, /* M */
                   {31,16,30,16,31}, /* E */
                   {30,17,30,18,17}, /* R */
                   {14,17,17,17,14}, /* O */
                   {15,16,14, 1,30}, /* S */
                   {30,17,30,16,16}, /* P */
                   {14,17,17,17,14}, /* O */
                   {30,17,30,18,17}, /* R */
                   {31,16,30,16,31}, /* E */
                   {17,10, 4,10,17}, /* X */
                   {31, 4, 4, 4, 4}, /* T */
                   {31,16,30,16,31}, /* E */
                   {17,25,21,19,17}, /* N */
                   {15,16,14, 1,30}, /* S */
                   {14,17,17,17,14}, /* O */
                   };
void desenhar(int y,int n){
    int w,px,py,x;                            /* variáveis simples                       */
    CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela      */
    GetConsoleScreenBufferInfo(H, &SBInfo);   /* pega a posição do cursor do console     */
    px = SBInfo.dwCursorPosition.X;           /* pX posição da col do cursor no console  */
    py = SBInfo.dwCursorPosition.Y;           /* pY posição da linh do cursor no console */
    int y1=py+2,x1=20,y2=y1,x2=x1,j,i,a,b;    /*y1=linh ini y2 p/ recuperar a linh inici */
    if(n==3)x2+=12;
    for(i=0;i<n;i++){                /* sao 8 letras                                     */
        for(j=0;j<5;j++){            /* o caractere é de 5 linhas                        */
            x1 = x2;
            a=letras[i+y][j];        /* pega o numero da 1 linha do caractere            */
            for(b=0;b<5;b++){        /* aqui eh um numero de apenas 8 bits               */
                gotoxy_2(x1,y1);
                if(a % 2 != 0){      /* se bit 0 igual 1                                 */
                    printf("%c",219);/* coloc espaço invertido senão coloc espaço normal */
                }
                else{
                    printf(" ");     /* senão coloca espaço normal                       */
                }
                a=a/2;               /* dividir numero por 2 desloca os bits para direita*/
                x1--;
                if(n==8)Sleep(10);
            }
            y1++;                    /* muda para proxima linha                          */
            x1=x2;                   /* volta para a coluna inicial                      */
        }                            /* proxima linha                                    */
        x2=x2+6;                     /* avança 6 colunas posicionando para o prox caract */
        y1=y2;                       /* volta para linha inicial                         */
    }                                /* imprimiu o primeiro caractere                    */
}
void borda(char *barra){
    int j;
    textcolor_2(11,0);
    printf("%s",barra);
    for(j=0;j<23;j++){
        gotoxy_2(0,j);
        printf("%c",186);
        gotoxy_2(79,j);
        printf("%c",186);
    }
    printf("%s",barra);
    gotoxy_2(0 , 0);printf("%c",201);
    gotoxy_2(79, 0);printf("%c",187);
    gotoxy_2( 0,23);printf("%c",200);
    gotoxy_2(79,23);printf("%c",188);
}
int main(){
    int j,q,z,i,tm,k,m,w,val,c,flag;
    char num_ext[35],nome[20]={},op,barra[81]={};
    for(j=0;j<80;j++)barra[j]=(char)205;barra[80]='\0';
    do{
        textcolor_2(14,0);
        cls;
        borda(barra);
        gotoxy_2(0,0);
        textcolor_2(14,0);
        desenhar( 8,7);
        desenhar(15,3);
        desenhar(18,7);
        textcolor_2(14,0);
        val=0;
        i=-1;
        c=0;
        w=0;
        z=0;
        gotoxy_2(5,20);
        printf("Digite um numero em forma de texto : ");
        fflush(stdin);
        scanf("%[^\n]s",num_ext);/* num por extenso é em forma de palavras */
        do{
            c=-1;
            do{
                i++;
                c++;
                if(num_ext[i]!=' '&& num_ext[i] != '\0'){
                    nome[c] = num_ext[i];                        /* pega a palavra do nome */
                }
            }while(num_ext[i] != ' ' && num_ext[i+1] != '\0' );  /* até completar a palavra ou terminar a frase */
            if(strlen(nome) > 0 )
                if(num_ext[i+1]=='\0')c++;
            nome[c]='\0';
            if(num_ext[i]==' '){
                if(num_ext[i+1]=='e')i+=2;
            }
            flag=0;
            k=0;
            m=1;
            for(j=0;j<42;j++){
                if(strcmp(nome,palavras[j])==0){                 /* verifica qual número */
                    if(strcmp(palavras[j+1],">")==0){k--;j++;}   /* cem e cento é a mesma coisa */
                    val+=(m*k);                                  /* calcula o valor do número */
                    strcpy(palavras_validas[z],nome);            /* arquiva as palavras que não são números */
                    z++;                                         /* próxima posição no vetor */
                    flag=1;                                      /* informa que encontrou a palavra */
                    break;                                       /* e sai desse loop For */
                }
                else{                                            /* se não é um número */
                    if(strcmp(palavras[j],":")==0){              /* dois pontos significa */
                        m*=10;                                   /* multiplicar por dez o multiplicador */
                        k=0;                                     /* reseta o multiplicando */
                        if( strcmp(palavras[j+1],",")==0 ){      /* vrgula significa */
                            k=1;                                 /* multiplicando igual a hum */
                            j++;                                 /* avança para o próximo caractere */
                        }
                    }
                }
                if(strcmp(palavras[j],">")==0)                   /* menorque significa */
                    k-=2;                                        /*decrementar em dois o multiplicando */
                k++;                                             /* incrementa o multiplicando */
            }
            if( ! flag ){                                        /* se flag igual a zero , palavra não é um número */
                strcpy(dep[w],nome);                             /*  guarda a palavra */
                w++;                                             /* incremnta a posição no vetor de palavras inválidas */
            }
        }while( num_ext[ i+1 ] != '\0' );                        /* repete até terminar a frase */
        gotoxy_2(5,22);                                          /* posiciona o cursor na col 5 e linha 22 da tela */
        textcolor_2(11,0);                                       /* colorir as letras */
        if( z ){                                                 /* se z diferente de zero */
            for(q=0;q<z;q++){
                printf("%s",palavras_validas[q]);                /* imprime todas as palavras */
                if(z>1 && q<z-1)printf(" e ");
            }
        }
        else{
            printf("%s ",num_ext);                               /* imprime o que foi digitado pelo usuário */
        }
        printf(" %c igual => %d\n",130,val);                     /* mostra o valor do número digitado */
        if( w ){                                                 /* se w diferente de zero */
            textcolor_2(10,12);                                  /* colorir as letras */
            for(q=0;q<w;q++)
                printf(" A Palavra %12s N%co Condiz Com Os Fatos . . . ! \n",/* imprime as palavras inválidas */
                       dep[q],198);
        }
        textcolor_2(12,15);                                      /* colorir as letras */
        gotoxy_2(25,24);
        printf("   outro numero S/N     \b\b\b");
        flag=1;
        op=' ';
        while( ! kbhit()&&flag){
            op=(char)getch();
            if(op!=' ')flag=0;
        }
        printf("\n");
    }while( toupper(op) != 'N' );
    textcolor_2(11,0);
    printf("\n\n");
    desenhar(0,8);
    printf("\a\n\n");
    textcolor_2(10,12);
    return 0;
}

 

  • Curtir 1

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...