![]() |
Ejercicio con Posiciones de dígitos
Hola,
una vez más...me he bloqueado con un ejercicio, y el tema es, que no sé como tratar las posiciones de los digitos pertenecientes a determinada cifra. El enunciado del problema es el siguiente: Código:
Se introduce por el teclado una clave formada por un número entero de 5 cifras. Esta clave se considera correcta siempre que el valor del ultimo digito leído sea igual al ultimo digito de la suma de los 4 primeros dígitos de la clave. El programa deberá validar la clave y escribir en pantalla si es correcta o no.Es decir mi problema es la posición de los dítios, que no se cómo tratarlas, no el ejercicio en sí. Si me pudieseis echar una mano, os lo agradecería. Un saludo, Geru. |
¿Cuando lees la clave, la lees como un string o como un numero?
|
Jo jo jo, ahora ya hacemos hasta tareas :D :D :D
|
Hola,
gracias por contestar :-) @Seoane: pues la verdad, no sé :-S, he empezado a hacerlo como integer, pero la verdad es que no sé. ¿Cómo sería mejor? @Johnny: muchas gracias, pero no puedo utilizar funciones tan avanzadas, ya que estos ejercicios únicamente me permiten solucionarlos con estructuras de control anidadas, bucles... y poco más :-) Pero te agradezco mucho tu aporte. Un saludo, Geru. |
El código de jhonny no es tan avanzado que digamos, además no veo otra forma de hacerlo.
|
Pues mas o menos es igual de complicado:
Aqui te lo dejo leyendo la clave como integer:
|
A continuación... un lujo que uno se puede dar, solo de la manera mas rebuscada del mundo...
seoane, tu funcion tiene un pequeño problemita:
Bueno gerupc, como bien dice D&W la funcion que te mostre no es muy avanzada, de hecho me parece mas avanzada la de seoane :D |
Perdone usted, pero cuando yo pongo un punto es porque es un punto :cool:
:D :D |
Cita:
|
En la facultad a mi me hacen programar con C y por lo general estos ejericios los resolvemos usando arreglos del tipo char... es decir seria una cadena de caracteres, en otras palabras un string. Lo primero q se hace es ir validando caracter por caracter para ver si es un digito si no lo es entonces volvemos a pedir q ingrese un valor valido, de lo contrario procedemos a trabajar con los valores de la cadena... Se entiende?
En C existe una funcion q se llama isdigit(char) q devuelve 0 si es un digito, en delphi creo q es la misma... Luego posicionandote en el ultimo valor de la cadena [ strlen(cadena) - 1 ] <-- Asi seria en c, obtenemos el valor del ultimo numero... Si lo deseas puedo pasarte lo q seria el codigo hecho en C y luego intentas o intentamos traducirlo... De todos modos creo q las propuestas de Seoane y Jhonny utilizando Div y Mod es una buena forma de llegar a lo q tu quieres... eso depende de como te lo pidan en la consigna... A mi por lo general siempre me piden un control de datos, pudiendo ser el usuario tan torpe q si le pedimos q ingrese el numero nos ingrese una letra, y en ese caso daria un error la aplicacion al intentar cargar un caracter en un integer, pero si no es tu caso ya tienes la solucion... {Saludos} |
tambien podrias utilizar el siguiente ejemplo
debes tener 2 componentes... 1 Edit -> llamado en este caso vVar 1 Boton -> en el evento del boton puedes poner este codigo..
espero te sirva.. ahh. y tambien es algo sencillo..... lo que hace es trabajar el texto como un array :D |
Hola,
muchísimas gracias por contestar y por vuestra atención. Bien, la mejor solución es la que me da Seoane, ya que como he dicho, no es porque sean avanzadas o no, esa es otra cuestión, si no porque 'me exigen' (aunque no me lo vayan a mirar, lo hago para practicar los ejercicios que tendré que hacer) que lo haga mediante este tipo de métodos, es decir sin funciones, procedimientos,etc... Pero la culpa ha sido mia por no haber explicado estos detalles en el primer post :o Asi que, una vez más, gracias. B3nshi, me parece que tu solució sería muy buena. La de Seoane me basta, pero si no te importa, como dices, miramos el código en C e intentamos (más que nada yo, que soy el que tiene que aprender ;) ) traducirlo a Delphi. Un saludo, Geru. |
Hola,
perdonad, pero hay una cosa que no entiendo, si se supone que ' k:= k + (i mod 10);' y ' j := i mod 10', porqué : ' k:= k + j; no me funciona?? Y qué función cumple el que haga: 'a la variable k le asigno el valor de k + último dígito' ? sumar todos los digitos de la cifra? y que la clave se divida entre 10 en la siguiente sentencia?? Lo siento, os voy a volver locos...:o muchas gracias a todos. Un saludo, Geru. |
Cita:
|
Aupa Seoane,
vale,vale...:p, no me había dado cuenta... Oye la última cosilla, si no es mucho pedir, me podrías explicar las siguientes sentencias?
Es que algo las entiendo, pero no quiero asimilarlas estos conceptos mal...muchísimas gracias. Un saludo, Geru. |
Cita:
Si tenemos en cuenta lo anterior, podemos obtener las cifras que forman un numero aplicando sucesivamente las operación mod y div. Con mod obtenemos la cifra mas a la derecha y con div desplazamos todas las cifras un puesto hacia la derecha. Por ejemplo: Código:
1234 |
Hola,
una vez más, muchas gracias por tu ayuda, me ha sido de gran utilidad. Ya que conocia la función de 'mod', pero no la manera en la que se aplicaba en este caso. Un saludo, Geru. |
Aupa de nuevo,
faltaba un pequeño detalle, ya que no me cuadraban algunos resultados... El fallo era que la suma de el ultimo digito de la suma de los "cuatro" primeros digitos, tenia que ser igual al último digito de la clave entrante. Y claro, de la anterior manera, lo que se hacía era la suma de todos los digitos, para ello lo que he hecho ha sido hacer a k:=-Ult_digito, quedando así el código:
Un saludo! Geru. :D |
Hola...
En el código de seoane, la variable J guarda el valor del último dígito, así que el único cambio que podrías hacerle para que funcione como esperas es:
Saludos... |
Aupa,
de acuerdo, muchas gracias!! Todo solucionado... Un saludo, Geru. |
| La franja horaria es GMT +2. Ahora son las 21:28:00. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi