| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
CoDiGiT

Registrado: 26 May 2003 Mensajes: 12
| Publicado: 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
| Publicado: 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 | |
 |
CoDiGiT

Registrado: 26 May 2003 Mensajes: 12
| Publicado: 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
| Publicado: 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 | |
 |
quique
Registrado: 30 Mar 2004 Mensajes: 720 Ubicación: Por ahí
| Publicado: 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
| Publicado: 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  |
Muy bueno quique!!!
No me había dado cuenta....  |
|
| Volver arriba | |
 |
|
|