[ Foro de Pascal ]

principiante: primer dígito igual al último dígito

22-Apr-2014 19:55
Invitado (joseluis99)
10 Respuestas

hola a todos soy nuevo en esto de la progracion, he estado leyendo los apuntes del profesor y su actualizacion y son simplemente geniales.
queria preguntarles por un ejercicio que me tiene dando vueltas y no logro resolver.
se trata de hacer un programa que dado un numero de n cifras (n menor 10),permita saber si su ultimo digito es menor que el valor del primer digito.
no se permite utilizar vectores.

agradezco la generosidad del profesor o de cualquier compañero que me ayude en este mi gran problema. gracias


22-Apr-2014 21:10
Luis Torres (+18)

Como el número puede ser muy grande puedes usar una variable string para almacenar "el número", con la función length(variable_string) obtendrás el índice del último "dígito" y, con variable_string[1] tendrás el el valor del primer dígito.

Saludos.


22-Apr-2014 21:48
Invitado (joseluis99)

gracias por responder compañero, pero es que no se pueden utilizar ni vectores ni string, solo se debe tratar el ejercicio como un numero, algo menciono el profesor que podia resolverse con mod o ocn div , pero no se como , gracias


23-Apr-2014 00:37
Nacho Cabanes (+83)

La última cifra la puedes saber con mod(10), el resto de la división entre 10.

La primera cifra la puedes saber con div(n), donde n será la mayor potencia de 10. Por ejemplo, en el número 3005, n sería 1000. El problema es que si no te dejan usar "length" para saber el tamaño del número, tendrás que dividir varias veces entre 10, hasta que obtengas un número menor que 10.


24-Apr-2014 00:04
Invitado (joseluis99)

hola profesor, podrias decirme si mi solucion esta correcta o que ves que debo corregir, gracias por tu ayuda cordial.


program cifras;
Uses CRT;

Var
  INICIO, FIN, N : LongInt; {INICIO y FIN podrían ser tipo byte o incluso shortint si utilizas números negativos}

BEGIN
  inicio:=0;
  fin:=0;
  writeln('N: ');
  readln(N);
  fin:=n mod 10;

  while n>=10 do
    n:=n div 10;
  inicio:=n;
  if fin<inicio then
    writeln('El d¡gito final es menor que el primero');
  readln;
END.



26-Apr-2014 02:56
Nacho Cabanes (+83)

No lo puedo probar aquí, pero la apariencia es buena.


28-Apr-2014 17:32
Invitado (joseluis99)

hola profesor y participantes de este foro.
bien con la explicacion que me diste pude lograr el ejercicio, sin embargo como estoy en este tema queria por favor me ayudaran en como hacer para mostrar sin usar vectores los digitos en orden y por separado ,una vez haya calculado( sin usar length , ni cadenas) la cantidad de digitos de un numero que se ingresa por teclado.
yo intento hacerlo con el mod pero no logro hacerlo si pudieran ayudarme.
les dejo mi codigo , por favor si alguien puede ayudarme a completar la parte de mostrar por separado y en orden los digitos del numero,(como veran la parte de contar los digitos ya la tengo hecha) se los agradezco mucho.


Program Cuenta_Digitos;
uses crt;
Var
num:longint;
cd: byte;
begin
   clrscr;
   writeln(' Digite un numero entero: ' );
  readln(num);
  cd := 0;

  while num <> 0 do
    begin
        num := num div 10;
        cd := cd + 1;
       
       {resto:= num mod 10;    //esto es lo que intento para los digitos pero nada ????
        writeln(resto);}  

   end;

writeln('El numero digitado tiene: ',cd ,' digitos');
readln;
end. 



28-Apr-2014 21:57
Nacho Cabanes (+83)

No acabo de entender la pregunta...  ¿debes mostrar los números que forman la cifra, en el mismo orden, por separado?  Es decir, ¿para 135, deberás mostrar
1
3
5
?


28-Apr-2014 22:23
Invitado (joseluis99)

Exactamente profesor como el ejemplo de 135, tal cual pero no me sale ojala me ayudes, lo he intentado como  puedes ver en el codigo.gracias


28-Apr-2014 22:32
Nacho Cabanes (+83)

Puedes plantearlo empezando por la potencia de 10 más alta que permita el tipo de datos que emplees. Por ejemplo, para un entero de 16 bits, el número más grande sería 65.636, luego la potencia sería 10.000.

En cada pasada, la cifra será tu número dividido entre esa potencia, y el número pasará a ser el resto de esa división. Entonces pasas a la siguiente potencia más pequeña (1.000, y luego 100, y así sucesivamente).

Ese algoritmo te escribiría algo como
0
0
1
3
5

Sólo faltaría un refinamiento más: eliminar los ceros iniciales (insisto, sólo los iniciales: el número 105 se debe mostrar bien). Para eso puedes ayudarte de un booleano que te avise de que ya has encontrado la primera cifra significativa (y, por tanto, a partir de ese momento ya no debes ignorar los ceros).

¡Duro con ello!


29-Apr-2014 18:22
Invitado (joseluis99)

profesor perdona es que no entiendo muy bien , podrias indicarme en codigo esto que me planteas:
En cada pasada, la cifra será tu número dividido entre esa potencia, y el número pasará a ser el resto de esa división. Entonces pasas a la siguiente potencia más pequeña (1.000, y luego 100, y así sucesivamente).

gracias si puedes ayudarme en ello






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)