elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Contar dígitos con Pascal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Contar dígitos con Pascal  (Leído 20,387 veces)
juanqla

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Contar dígitos con Pascal
« en: 13 Julio 2009, 00:56 am »

Hola gente, tengo un problema con un ejercicio en pascal: estoy aprendiendo -hace un par de semanas, así que soy muy n00b- a programar, he conseguido unos ejercicios muy básicos por ahí, y los hice con bastante facilidad, hasta que me topé con uno que pedía lo siguiente:

Citar

Dado un número entero "x", contar la cantidad "c" de dígitos que lo forman. Ej: si c=343, entonces c=3; si x=-20, entonces c=2.


Lo que he hecho es lo siguiente:

Código
  1. program cuentadigitos;
  2.        var
  3.           c,d: integer;
  4.           x: real;
  5.        begin
  6.             writeln ('Para terminar ingrese "0"');
  7.             repeat
  8.                   c:=0;
  9.                   d:=0;
  10.                   readln (x);
  11.                   x:=x*10;
  12.                   repeat
  13.                         c:=c+1;
  14.                         x:=x / 10
  15.                   until abs (x)<10;
  16.                   repeat
  17.                         d:=d+1;
  18.                         x:=x*10
  19.                   until d=c;
  20.                   writeln ('El numero ',x,' esta formado por ',c,' digitos');
  21.             until x=0
  22.        end.

Pero tiene algunos defectos, primero, que "x" es real, en lugar de entero, y no es lo que pide el ejercicio, además la forma en que se muestran los reales en la consola es muy incómoda (si alguien sabe como quitar todos esos ceros le agradecería que me lo dijera :P); segundo, que no encuentro una forma de cerrar el programa que no sea introduciendo un número (en este caso, "0"), me interesaría por ejemplo que el programa terminase cuando se introduce "end". Y también tengo la sospecha de que hay formas más sencillas que ésta para contar dígitos...
Si alguien sabe como solucionar alguno de estos problemas, me le voy a estar muy agradecido.

Saludetes.

PD.: Los estoy viendo! no se rían de mi código, les avisé que soy muy n00b xD


« Última modificación: 13 Julio 2009, 01:17 am por juanqla » En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Contar dígitos con Pascal
« Respuesta #1 en: 13 Julio 2009, 03:31 am »

Para convertir tu real a enteros, y obtener parte entera y decimal:

Código
  1. program Untitled;
  2.  
  3. uses
  4.    crt;
  5. var
  6.   x:real;
  7.   PE:integer;
  8.   PD:real;
  9. begin
  10.     write('Ingresa numero:');
  11.     readln(x);
  12.     PE:= TRUNC(x);
  13.     PD:=x-PE;
  14.     writeln('Parte entera:',PE);
  15.     writeln('Parte decimal:',PD);
  16.     readln();
  17. end.


En línea

juanqla

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Contar dígitos con Pascal
« Respuesta #2 en: 15 Julio 2009, 20:52 pm »

Hola, muchas gracias por responder, hoy me he percatado de que hay una forma bastante más sencilla que la anterior de hacerlo:

Código
  1. program cuentadigitos;
  2.        var
  3.           x,c,aux:integer;
  4.        begin
  5.             repeat
  6.                   write ('Nuevo numero: ');
  7.                   read(x);
  8.                   aux:=1;
  9.                   c:=0;
  10.                   repeat
  11.                         c:=c+1;
  12.                         aux:=aux*10
  13.                   until abs(x)<aux;
  14.                   writeln ('El numero ',x,' esta formado por ',c,' digitos');
  15.             until x=0
  16.        end.
 
Con lo que "x" es entero de principio a fin ;D

Ahora tengo problemas con otros dos:

Citar
Dado un número entero "x", calcular la suma "s" de todos los dígitos que lo forman. Ej: si x=12, entonces s=1+2=3.
Citar
Determinar si un dígito "d" está presente en un entero "x". Ej: el dígito 5 está presente en el entero 345; el dígito 3 no está presente en el entero -122.

El primero lo estoy terminando, pero es exageradamente largo y también tiene el problema de que el "entero x" resulta siendo real  :-\. Respecto al segundo, tengo la sospecha de que me va a quedar parecido al primero. Así que si alguien tiene alguna idea de como hacerlos, me ayudaría mucho que me orientaran, obviamente no diciéndome exactamente como hacerlo sino dándome alguna pista, qué funciones podría usar...

Saludos y muchas gracias!!!
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Contar dígitos con Pascal
« Respuesta #3 en: 15 Julio 2009, 21:30 pm »

El segundo ejercicio para buscar el dígito deberás utilizar una lista.
Y al primero no lo veo nada largo :S
En línea

jvchino
Solo soy un
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.999


La felicidad no es una meta, es un camino.


Ver Perfil
Re: Contar dígitos con Pascal
« Respuesta #4 en: 16 Julio 2009, 20:41 pm »

Para el segundo: Si "digito" está presente en "numero"
Inicializas una variable boolean como "false"
1.- Leer numero
2.- Leer digito
3.- "presente=falso"
4.- Hallar el resto de "numero" entre 10  (resto = numero mod 10)
5.- Si "resto = digito" entonces "presente=verdadero"
6.- De lo contrario quitar el ultimo digito a numero (numero = numero div 10)
7.- Repetir desde el paso 4 hasta que "presente=verdadero" o "numero=0"
8.- Si "presente=verdadero" entonces "Si esta presente"; de lo contrario "No esta presente"

Advertencia... puede contener pequeños errores.  :P

Suerte.

En línea

Si ayudo a una sola persona a tener esperanza, no habré vivido en vano.

No, nada llega tarde, porque todas las cosas
tienen su tiempo justo, como el trigo y las rosas
andreqd

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Contar dígitos con Pascal
« Respuesta #5 en: 28 Septiembre 2012, 16:16 pm »

no entiendo porque no funcionaaaaaa

program Project1;
var
nro,valor,i,suma:integer;

begin
     writeln('ingrese un numero ');
     read(nro);
     suma:=0;
     repeat
           begin  if nro < 0 then
                nro := -(nro);
                writeln(nro);
                valor:= nro mod 10 ;
                nro := nro div 10;
                suma:= suma + valor;
             else
             valor:= nro mod 10 ;
             nro := nro div 10;
             suma:= suma + valor;
     until valor = 0;
    end;
writeln('suma ', suma);
readln;readln;
end.                           
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Key 40 dígitos hexadecimal tuenti?
Criptografía
NetJava 5 7,207 Último mensaje 19 Marzo 2011, 00:15 am
por NetJava
calculadora de 30 digitos « 1 2 »
Programación C/C++
peterfly 19 15,179 Último mensaje 2 Julio 2011, 01:22 am
por Nork
Hack WPA Puros Digitos
Hacking Wireless
w1r3d 3 3,728 Último mensaje 15 Diciembre 2012, 21:30 pm
por P4nd3m0n1um
Clave wpa 13 digitos
Hacking Wireless
andvilla07 5 4,589 Último mensaje 27 Marzo 2013, 22:16 pm
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines