/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Capturar mas de diez numeros

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
CoDiGiT



Registrado: 26 May 2003
Mensajes: 12

MensajePublicado: 21/10/2004 10:55 am
Título: Capturar mas de diez numeros

Hola soy new en estoy y el profesor me ha mandado a hacer un algoritmo el cual me diga si el numero de una tarjeta de credito es valido o no.
Segun los datos dados por el profesor el algoritmo deberia recibir 16 DIGITOS en una sola variable (ese es mi inconveniente), luego el de esos 16 coje los impares y los suma asi luego coje los pares y tambien los suma, luego suma el valor total de los pares y los impares, y si es multiplo de 10 la tarjeta es valida.

Tengo todos los datos necesarios para empezar y todo, lo unico que quiero saber, es que la tarjeta de credito tiene 16 numeros en que tipo de variable puedo yo almacenar 16 numeros, pues no tengo ni idea de como empezar a trabajar en eso. Si em pueden ayudar o algo le estaria muy agardecido.


Si quieren los datos exactos de cual es el algoritmos pra la tarjead e credito es decir cual es el metodo de autentificacion me avisan y se lo envio todo bien detallado.

Gracias
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 21/10/2004 11:23 am
Título:

Hola.

Utiliza una cadena de caracteres para almacenar los dígitos. Luego, puedes calcular el valor que representa cara carácter restando '0'.
Por ejemplo:
Código:
#include <stdio.h>
#include <string.h>

int main()
{
   char tarjeta[17];
   int i, digito;
   int pares = 0, impares = 0;

   strcpy(tarjeta,"1234567890123456");
   for (i = 0; i < 16; i++) {
      digito = tarjeta[i] - '0';
      if (digito % 2)
         impares += digito;
      else
         pares += digito;
   }

   if ((pares + impares) % 10 == 0)
      printf("\nLa tarjeta es válida");
   else
      printf("\nLa tarjeta NO es válida");
   return 0;
}


Un saludo.
Volver arriba
Yahoo Messenger
CoDiGiT



Registrado: 26 May 2003
Mensajes: 12

MensajePublicado: 21/10/2004 3:49 pm
Título: NOUtilizar Arreglos

Ah se me olvido aclarar que era sin usar arreglo, por eso es que me ha salido tan incomodo hacerlo porque con arreglo es muy simple resolverlo.

Thanks y Gracias Por todo.
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 22/10/2004 2:52 pm
Título:

Uff....sin arrays.... yo utilizaría un double o un long double para asegurarme de que entran los 16 dígitos.

Un saludo.
Volver arriba
Yahoo Messenger
quique



Registrado: 30 Mar 2004
Mensajes: 720
Ubicación: Por ahí

MensajePublicado: 25/10/2004 7:48 am
Título:

Con 16 numeros, el valor más grande que tienes es el:
9.999.999.999.999.999, que para lo cual necesitas 7 bytes

en Windows, solo logras esa cantidad con valores "double" o "long double", que tienen 8 bytes. Revisa tu compilador para ver si en tu entorno puedes definir esas variables.

Si no, puedes declararte una variable que sean dos long (4 bytes), de la siguiente manera:
Código:
#include <stdio.h>

typedef struct MY_LONG {
long MSB;
long LSB;
} MY_LONG;

void main (void)
{
 MY_LONG myLong;
 int iAux = 0;
 int iTotal = 0;
 printf ("Introduce valor: ");
 fflush (stdin);
 scanf ("%08ld%08ld",&(myLong.MSB), &(myLong.LSB));

 printf ("\nValor: %08ld%08ld\n", myLong.MSB, myLong.LSB);
 // Suma total: OJO! sumar los impares y luego los pares para
 // despues sumarlo todo, es igual a sumalos todos directamente :-D

 for (iAux=0;iAux<8;iAux++)
 {
  iTotal += myLong.MSB%10;
  iTotal += myLong.LSB%10;
  myLong.MSB = myLong.MSB/10;
  myLong.LSB = myLong.LSB/10;
 }

 printf ("La suma total es: %d\n", iTotal);

 // Fin del programa
 scanf ("%d", &iAux);
}


Lo he probado "por encima" y funciona

Salu2
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 25/10/2004 11:40 am
Título:

Cita:
// Suma total: OJO! sumar los impares y luego los pares para
// despues sumarlo todo, es igual a sumalos todos directamente Very Happy


Muy bueno quique!!!

No me había dado cuenta.... Laughing
Volver arriba
Yahoo Messenger
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com