1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

programaçao

Discussão em 'Programação' iniciada por Gonçalo Almeida, 4 de Fevereiro de 2006. (Respostas: 5; Visualizações: 869)

  1. tenho uma questao sobre outro trabalho que estou a desenvolver sobre o calculo do iva.
    espero k m possam ajudar!!!!
    o problema esta na funcao assinalada a vermelho!!
    quando o programa pede ao utilizador introduzir o codigo do produto, o preço e a quantidade que o programa so aceitasse numeros reais e nao letras .... o que devo fazer!!
    abaixo encontra-se o codigo!!!!!


    _______________________________________________________________________________


    // ******** Definição de cabeçalhos e bibliotecas **********************************
    #include <stdlib.h>
    #include <iostream.h>
    #include <conio.h>
    #include <stdio.h>
    #include <windows.h>
    #include <winbase.h> // Contem a função HANDLE GetStdHandle(DWORD nStdHandle);
    #include <math.h>
    float preco,quant,iva1=0.05, iva2=0.12, iva3=0.21;

    // ******** Apresentação das funções usadas ****************************************
    void define_cor(int cor_letra);
    //***********Funções para o calculo do Iva********************************************

    float calculo_iva(int op)
    {
    float preco_final=0.0, preco=0.0;
    int quant=0;
    printf("\n\t- Pre%co sem IVA: ", char(135));
    scanf(" %f", &preco);
    printf("\n\t- Quantidade: ");
    scanf(" %d", &quant);

    if(op>0 && op<= 3)
    preco_final = quant*preco*(1+iva1);
    else
    if(op>3 && op<=6)
    preco_final = quant*preco*(1+iva2);
    else
    preco_final = quant*preco*(1+iva3);
    return preco_final;
    }

    void calculos(void)
    {
    float preco_iva[6], soma_iva5=0.0, soma_iva12=0.0, soma_iva21=0.0, soma=0.0, aux=0.0;
    int i, produtos[9], opcao;
    for(i=0;i<9;i++)
    produtos=i;
    for(i=1; i<6; i++)
    {
    opcao=0;
    while ((opcao<=0) || (opcao>=10))
    {
    printf("\t__________________________________\n");
    printf("\n\t- Digite o c%cdigo do %d%c produto:", char(162), i, char(167));
    scanf(" %d", &opcao);
    fflush(stdin);
    if (opcao<=0 || opcao>=10)
    {
    printf("\n\tOp%c%co Inv%clida!!!\n", char(135), char(132), char(160));
    // opcao=0;
    fflush(stdin); // Limpa o buffer de entrada (teclado)
    }
    }

    preco_iva=calculo_iva(opcao);
    // calculo_iva(opcao);


    if(opcao>0 && opcao<=3)
    {
    aux=preco_iva/(1+iva1);
    soma_iva5 = soma_iva5+(preco_iva-aux);
    }
    else
    {
    if(opcao>=4 && opcao<=6)
    {
    aux=preco_iva/(1+iva2);
    soma_iva12 = soma_iva12+(preco_iva-aux);
    }
    else
    {
    aux=preco_iva/(1+iva3);
    soma_iva21 = soma_iva21+(preco_iva-aux);
    }
    }

    soma=soma_iva5+soma_iva12+soma_iva21;
    }

    printf("\t__________________________________\n\t__________________________________\n");
    for(i=1;i<6;i++)
    printf("\n\t%d%c Produto - Pre%co Total = %.2f\n\n", i, char(167), char(135), preco_iva);
    printf("\t__________________________________\n\t__________________________________\n");
    printf("\n\t - IVA 5%c = %.2f\n", char(37), soma_iva5);
    printf("\n\t - IVA 12%c = %.2f\n", char(37), soma_iva12);
    printf("\n\t - IVA 21%c = %.2f\n", char(37), soma_iva21);
    printf("\t__________________________________");
    putchar('\n');
    printf("\n\t - IVA Total = %.2f\n", soma);
    printf("\t__________________________________\n\t__________________________________\n");
    getch();
    }

    // ******** Função menu principal **************************************************
    void menu_principal(void)
    {

    define_cor(1);//Fundo cinzento;Letra vermelha
    system("cls");
    int i;
    char car;
    car=char(201); printf("\t\t%c",car);//tipo de caracter do canto superior esquerdo
    for (i=20;i<=65;i++)//tamanho da barra superior//
    {car=char(205); printf("%c",car); }//tipo de caracter da barra superior
    car=char(187); printf("%c",car);//tipo de caracter do canto superior direito
    car=char(186);//tipo de caracteres das barras laterais
    printf("\n\t\t%c %c",car,car);
    printf("\n\t\t%c %c",car,car);
    printf("\n\t\t%c C%clculo do IVA %c",car,char (160),car);
    printf("\n\t\t%c %c",car,car);
    printf("\n\t\t%c 1-Consultar tabela de IVA %c",car,car);
    printf("\n\t\t%c %c",car,car);
    printf("\n\t\t%c 2-Consultar tabela de Produtos %c",car,car);
    printf("\n\t\t%c %c",car,car);
    printf("\n\t\t%c 3-C%clculo do IVA %c",car,char (160),car);
    printf("\n\t\t%c %c",car,car);
    printf("\n\t\t%c 4-Cr%cditos %c",car,char (130),car);
    printf("\n\t\t%c %c",car,car);
    printf("\n\t\t%c 9- Sair %c",car,car);
    printf("\n\t\t%c %c",car,car);
    printf("\n\t\t%c %c",car,car);
    car=char(200); printf("\n\t\t%c",car);//tipo de caracter do canto inferior esquerdo
    for (i=20;i<=65;i++)//tamanho das barras inferiores
    {car=char(205); printf("%c",car); }//tipo de caracter da barra inferiores
    car=char(188); printf("%c",car);//tipo de caracter do canto inferior direito
    fflush(stdin);//apaga o conteudo do teclado
    }
    // ******** Função Consultar tabela de IVA *****************************************************
    void consultartabeladeiva(void)
    {
    define_cor(1);//Fundo cinzento;Letra vermelha
    system("cls");
    printf("\n\n\n\n\n\n");
    printf("\n\t\7----------------------------------------------------------");
    printf("\n\t* *");
    printf("\n\t* Tabela de IVA *");
    printf("\n\t* *");
    printf("\n\t----------------------------------------------------------");
    printf("\n\t* C%cdigo IVA * Tipo de Bens * Taxa de IVA *", char(162));
    printf("\n\t----------------------------------------------------------");
    printf("\n\t* * * *");
    printf("\n\t* 1 * Bens %c taxa reduzida * %.0f%c *", char(160),(float (iva1)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t* 2 * Bens %c taxa interm%cdia * %.0f%c *", char(160), char(130) ,(float (iva2)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t* 3 * Bens %c taxa normal * %.0f%c *", char(160),(float (iva3)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t----------------------------------------------------------\n");



    printf("\n\t Carregue numa tecla p/ ");
    printf("\n\t voltar ao menu principal ");
    }
    // ******** Função Consultar tabela de Produtos *************************************************
    void consultartabeladeprodutos(void)
    {

    define_cor(1);//Fundo cinzento;Letra vermelha
    system("cls");
    printf("\n\n\n\n\n\n\n\n");
    printf("\n\t\7---------------------------------------------------");
    printf("\n\t* *");
    printf("\n\t* Tabela de produtos *");
    printf("\n\t* *");
    printf("\n\t---------------------------------------------------");
    printf("\n\t* Produto * C%cdigo Produto * Taxa IVA *", char(162));
    printf("\n\t---------------------------------------------------");
    printf("\n\t* * * *");
    printf("\n\t* Agua * 1 * %.0f%c *", (float (iva1)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t* P%co * 2 * %.0f%c *",132,(float (iva1)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t* Carne * 3 * %.0f%c *", (float (iva1)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t---------------------------------------------------");
    printf("\n\t* * * *");
    printf("\n\t* Margarina * 4 * %.0f%c *", (float (iva2)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t* Caf%c * 5 * %.0f%c *",130,(float (iva2)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t* Compota * 6 * %.0f%c *", (float (iva2)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t---------------------------------------------------");
    printf("\n\t* * * *");
    printf("\n\t* Sumos * 7 * %.0f%c *", (float (iva3)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t* Rebu%cados * 8 * %.0f%c *",135,(float (iva3)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t* Detergente* 9 * %.0f%c *", (float (iva3)*100), char(37));
    printf("\n\t* * * *");
    printf("\n\t---------------------------------------------------\n");


    printf("\n\t Carregue numa tecla p/ ");
    printf("\n\t voltar ao menu principal ");

    }

    // ******** Função Calculo do IVA **********************************************************
    void calculodoiva(void)
    {

    define_cor(1);//Fundo cinzento;Letra vermelha
    system("cls");
    printf("\n\n\n\n");
    printf("\n\t\7---------------------------------------------------");
    printf("\n\t* *");
    printf("\n\t* C%clculo do IVA *", char(160));
    printf("\n\t* *");
    printf("\n\t---------------------------------------------------\n");

    calculos();


    }
    // ******** Função creditos *************************************************
    void creditos(void)
    {

    define_cor(1);//Fundo cinzento;Letra vermelha
    system("cls");
    printf("\n\n\n\n\n\n");
    printf("\n\t\7---------------------------------------------------");
    printf("\n\t* *");
    printf("\n\t* Cr%cditos *",char (130));
    printf("\n\t* *");
    printf("\n\t----------------------------------------------------");
    printf("\n\t* *");
    printf("\n\t* Tiago Lopes n%c6709 *", char(167));
    printf("\n\t* *");
    printf("\n\t* Ariana Rodrigues n%c7558 *", char(167));
    printf("\n\t* *");
    printf("\n\t---------------------------------------------------\n");

    printf("\n\t Carregue numa tecla p/ ");
    printf("\n\t voltar ao menu principal");
    }
    //********************************SUBALGORITMO CORES**************************************/
    void define_cor(int cor_letra)
    {
    HANDLE handle;
    handle = GetStdHandle ( STD_OUTPUT_HANDLE );
    switch(cor_letra){
    case 1: //Fundo cinzento;Letra vermelha
    SetConsoleTextAttribute ( handle, FOREGROUND_RED | FOREGROUND_RED| BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN );
    break;
    }
    }
    // ******** Função principal *******************************************************
    void main(void)
    {
    int opcao;
    do {
    menu_principal();
    printf("");
    printf("\n\tDigite a sua op%c%co: ",char (135), char(132));
    scanf("%d",&opcao);
    switch (opcao) {
    case 1:
    consultartabeladeiva();
    break;
    case 2:
    consultartabeladeprodutos();
    break;
    case 3:
    calculodoiva();
    break;
    case 4:
    creditos();
    break;
    case 9:
    printf("\n\tA sua op%c%co foi: Sair",char (135), char (132));
    break;
    default:
    printf("\n\tEscolha uma op%c%co correcta", char(135), char(132));
    } while (!kbhit()); /* Enquanto não clicar numa tecla , espera ... */
    system("cls");
    } while (opcao!=9);

    }
     
  2. dickseed

    dickseed Power Member

    Assim de repente não me estou a lembrar de nada mais imediato, mas basta definires um array com os valores de 0 a 9 e verificares se a string recebi está dentro desse universo.
    (A supor k recebes como string)
     
  3. Jorge Candeias

    Jorge Candeias Power Member

    Experimenta este progzito de meia tijela:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    while(1)
    {
    float input;
    input = -888888888;
    while(input==-888888888)
    {
    printf("Bota aí um num \n");
    scanf("%f", &input);
    fflush(stdin);
    if(input == -888888888)
    {
    printf("YO!, numeros carago!!! \n\n");
    }
    }
    printf("Num=%f \n\n",input);
    }
    return 0;
    }


    Não podes meter -888888888 no input senão dá bug...


    Cumprimentos
     
  4. Miguel Correia

    Miguel Correia Power Member

    aconselho-t a guardares o input do teclado numa string... a partir daí consegues tirar o valor ascii de cada caracter.. se estiver entre o 48 e o 57... é inteiro e usas o atoi() para converter para inteiro... ou fazes uma funçao k o faça.. se nao tiver entre o 48 e 57, repetes o pedido d um inteiro..


    problem solved.
     
  5. TuxBoss

    TuxBoss Power Member

    Se tiveres a desenvolver a aplicação para uma plataforma *NIX
    http://unixhelp.ed.ac.uk/CGI/man-cgi?isalpha+3
    É mais fácil e é uma biblioteca conhecida e mais que provada como segura :)

    Edited:
    Também podia deixar de ser anormal e ler o código e ver o #include <windows.h>...De qq maneira vê se a lib ctype existe no win ou não.
     
  6. Problem solved...
    thks ppl

    abrcs
     

Partilhar esta Página