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

Validação ISBN em C++

Discussão em 'Programação' iniciada por J.Joao, 25 de Abril de 2012. (Respostas: 3; Visualizações: 1272)

  1. Boas pessoal!

    Alguém conhece alguma função em c++ que valide o ISBN, já procurei e já encontrei muita coisa pelo google, acontece que ainda sou um novato em programação e não sei como implementar, já tentei várias maneiras e códigos mas sem sucesso. Será que me podem dar uma ajuda e tentar perceber melhor?


    Cumprimentos
     
  2. xBoShY

    xBoShY Power Member

    Para ISBN de 13 digitos:
    Código:
    # C/C++
    bool is_valid_isbn13(char digits[13])
    {
            int i, check=0;
            for (i=0; i<13; i+=2)
                    check += digits[i];
            for (i=1; i<12; i+=2)
                    check += 3*digits[i];
            return check%10==0;
    }
    in Wikipedia
     
  3. Obrigado! =) Realmente nem me lembrei do wikipedia x)

    Já consegui implementar a validação tanto para 10 dígitos como para 13, o meu problema agora consiste em conseguir validar o metodo de entrada
    só para números sendo que a solução que tentei foi um:

    for(i=0;i<100;i++)
    if( p >= ':' || p <= '/') // Controla se o valor introduzido é um número.
    teste();


    Mas aquando a introdução não aceita nem números nem letras :/ Será que me podem dar uma ajuda?


    Em baixo deixo a minha implementação completa:

    #include <string>
    #include <conio.h>




    //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||



    bool is_isbn_valid(char digits[10]) {
    int i, a = 0, b = 0;
    for (i = 0; i < 10; i++) {
    a += digits; // Assumed already converted from ASCII to 0..9
    b += a;
    }
    return b % 11 == 0;
    }




    //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||




    bool is_valid_isbn13(char digits[13])
    {
    int i, check=0;
    for (i=0; i<13; i+=2)
    check += digits;
    for (i=1; i<12; i+=2)
    check += 3*digits;
    return check%10==0;
    }




    //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    // Chamada de funÁıes:
    void teste();
    //~~~~~~~~~~~~~~~~~~~~~~~


    void isbninvalido()
    {

    setlocale(LC_ALL,""); // corrige caracteres acentuados
    system("cls");
    printf("\n\n\n");
    printf("\n\n\n\t****************************************************************\n");
    printf("\t* *\n");
    printf("\t* ||||||||||||||||||||||||||| *\n");
    printf("\t* ||| | *\n");
    printf("\t* || ISBN Inv·lido ! || *\n");
    printf("\t* | ||| *\n");
    printf("\t* ||||||||||||||||||||||||||| *\n");
    printf("\t* *\n");
    printf("\t****************************************************************\n");
    printf("\n\n\n\n\n\n\nPrima qualquer tecla para voltar.");
    getche();
    teste();
    }




    //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||




    void teste(){


    char isbn[100],n,i,*p=isbn;


    system("cls");
    puts("Introduza ISBN:\n");
    gets(isbn);


    for(i=0;i<100;i++)
    if( p >= ':' || p <= '/') // controla se o valor introduzido È um n˙mero
    teste();


    printf("\n");


    n=strlen(isbn);


    switch(n){
    case 10: is_isbn_valid("isbn"); break;
    case 13: is_valid_isbn13("isbn"); break;
    default: isbninvalido();


    }
    }



    Obrigado :)
     
  4. Solução para limiar introdução apenas a valores numéricos: :)

    Código:
    void main(){	char st[100],fim,*pst,b;
    
    
    	do{
    		b=1;
    		puts("Introduza texto:");
    		gets(st);
    		fim=strlen(st)-1;
    		for(pst=st;pst<=st+fim;pst++)
    			if(*pst<'0' || *pst>'9')
    				b=0;
    	}while(b==0);
    
    
    
    
    }
     

Partilhar esta Página