Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-05-2012
gabtroc gabtroc is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 10
Poder: 0
gabtroc Va por buen camino
Ayuda con ciclo de repeticion(bucle)

ok para aclarar ciertas cosas estoy estudiando ingenieria estoy viendo clases de programacion y trabajamos con delphi, como practica me mandaron a hacer un programa para determinar cuantos y cuales son los numeros naturales de 4 cifras que no tienen digitos repetidos en una aplicacion tipo consola.

Para eso se me ocurrio empezar realizando un programa al cual le ingrese un numero este numero sea separado en digitos individuales y realizar una comprobacion para ver si los digitos de ese numero son iguales o no y el codigo es asi:

Código Delphi [-]
Readln(x);
auxiliar:=x;


  d4:=auxiliar mod 10;
  auxiliar:=auxiliar div 10;
  d3:=auxiliar mod 10;
  auxiliar:=auxiliar div 10;
  d2:=auxiliar mod 10;
  auxiliar:=auxiliar div 10;
  d1:=auxiliar mod 10;



if (d1-d2<>0) and (d1-d3<>0) and (d1-d4<>0) then
    begin
      if (d2-d3<>0) and (d2-d4<>0) then
          begin
            if (d3-d4<>0) then Writeln(x);
          end;
    end;

Siendo x el numero ingresado por el usuario y d1,d2,d3 y d4 los digitos individuales del numero original.

Ahora lo que de verdad quiero es un programa que me imprima la lista de los numeros que no tienen digitos repetidos para eso se me ocurre utilizar un ciclo de repeticion que empieze por el 1000 y termine en el 9999 realizando la comprobacion que puse en el codigo anterior, el unico problema es que cada vez que intento realizar un ciclo de repeticion el programa o no comienza o no imprime los numeros en pantalla.

Alguien me podria ayudar diciendome como coloco un ciclo de repeticion o bucle como creo que le dicen que me haga lo que quiero?
Seria de gran ayuda. Gracias

Última edición por Casimiro Notevi fecha: 12-05-2012 a las 02:22:26. Razón: Poner etiquetas [delphi] [/delphi]
Responder Con Cita
  #2  
Antiguo 12-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gabtroc y bienvenido a Club Delphi

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Creo que podrías hacer:
Código Delphi [-]
...
var
  aux, i: Integer;
  d1, d2, d3, d4: Integer;
begin
  for i:= 1000 to 9999 do  //  para i <- desde 1000 hasta 9999 hacer
  begin
    aux:= i;
    d4:= aux mod 10;
    aux:= aux div 10;
    d3:= aux mod 10;
    aux:= aux div 10;
    d2:= aux mod 10;
    aux := aux div 10;
    d1:= aux mod 10;
    if (d1<>d2)and(d1<>d3)and(d1<>d4)and(d2<>d3)and(d2<>d4)and(d3<>d4) then
      Write(i:5);
  end;
  Readln;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 12-05-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Y el algoritmo 'apá? Antes de siquiera meter el primer begin, tendrías que haber empezado por diseñar un algoritmo, el cual puedes "ejecutar" físicamente para verificar que funciona y una vez hecho esto, entonces sí, pasarlo al programa. Siendo que deseas ser ingeniero vete acostumbrando a empezar por el diseño y luego seguimos con el código. Si el algoritmo esta mal, por muy bonito y elegante que sea tu código, simplemente no servirá.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 13-05-2012
gabtroc gabtroc is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 10
Poder: 0
gabtroc Va por buen camino
Me parecio mas facil copiar el codigo que lo tengo en la pc a copiar el algoritmo que lo hice a mano en papel pero tranquilo que el algoritmo lo hago.

Gracias por el codigo ecfisa ya vi cual era mi error ya el programa terminado me quedo asi
Código Delphi [-]
Writeln('Ingrese cuantos digitos desea imprimir en pantalla');
Readln(numlin);
Writeln('Presione ENTER para comenzar el programa');
Readln;

lineas:=0;
cont:=0;

  for x := 1000 to 9999 do
   begin

  //Separacion en digitos individuales

  auxiliar:=x;
  d4:=auxiliar mod 10;
  auxiliar:=auxiliar div 10;
  d3:=auxiliar mod 10;
  auxiliar:=auxiliar div 10;
  d2:=auxiliar mod 10;
  auxiliar:=auxiliar div 10;
  d1:=auxiliar mod 10;

 // comparacion de variables d

  if (d1-d2<>0) then
    if (d1-d3<>0) then
      if (d1-d4<>0) then
        if (d2-d3<>0) then
          if (d2-d4<>0) then
            if (d3-d4<>0) then begin
                          Writeln(x);
                          lineas:=lineas+1;
                          cont:=cont+1;
            if lineas=numlin then  begin
                                Writeln;
                                Writeln('....Presione ENTER para continuar');
                                readln;
                                lineas:=0;
                                end; // 
                                end; // 

end; 

Writeln;
Writeln('Cantidad de numeros sin digitos repetidos: ',cont);

Writeln;
Writeln;
Writeln('Presione ENTER para terminar');
Readln;
end.

Gracias por la ayuda

Última edición por ecfisa fecha: 13-05-2012 a las 04:19:50. Razón: Agregar etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #5  
Antiguo 13-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gabtroc.

De nada.

Recuerda usar los TAG's cuando pongas código en tus mensajes para hacerlo más legible. Te pongo una imágen que explica su uso:



Ya agregué las etiquetas a tu mensaje.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 13-05-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por gabtroc Ver Mensaje
Código Delphi [-]
if (d1-d2<>0) then
    if (d1-d3<>0) then
      if (d1-d4<>0) then
        if (d2-d3<>0) then
          if (d2-d4<>0) then
            if (d3-d4<>0) then
Fíjate que eso se puede mejorar, justo como el ejemplo que te ha dado ecfisa. Analiza tus ifs anidados. Fíjate que para que se ejecute el último if deben cumplirse los anteriores, por tanto todas las condiciones deben de ser necesariamente verdaderas. Dado este escenario entonces es inpráctico estar separando cada evaluación. Para el caso es lo mismo:

Código Delphi [-]
if A then if B then ...

que

Código Delphi [-]
if A AND B AND ...

Ya que la tabla de verdad AND indica que o se cumplen todos o ninguno.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 14-05-2012
gabtroc gabtroc is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 10
Poder: 0
gabtroc Va por buen camino
Vale, Gracias delphius ya corregi eso no me habia dado cuenta que era lo mismo, error de novato xd.

Para no estar haciendo otro tema preguntare esto por aqui mismo necesito hacer un programa que me genere numeros aleatorios por la tecnica del cuadrado medio. Si no lo saben consiste en tomar un número de N cifras elevarlo al cuadrado y usar los N dígitos centrales como número aleatorio, luego repetir el proceso para generar nuevos números aleatorios usando como semilla el aleatorio anterior.

Necesito escribir el programa para que lea un número entero cualquiera de N cifras y genere una lista de 20 números aleatorios utilizando esa tecnica, pero no logro hacer un algoritmo que me sirva y no tengo idea de como hacer que solo agarre los numeros centrales. Alguna idea?

Si la tienen se los agradecere mucho, de todas formas gracias por la ayuda con el programa anterior.
Responder Con Cita
  #8  
Antiguo 14-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por gabtroc Ver Mensaje
Para no estar haciendo otro tema preguntare esto por aqui mismo necesito hacer un programa que me genere numeros aleatorios por la tecnica del cuadrado medio.
Hola gabtroc.

Contrariamente yo te aconsejo que inicies un nuevo hilo con tu nueva pregunta. Y entre otros, los principales motivos son: Facilitar la búsqueda temática e incrementar tu posibilidad de recibir respuestas.

Un saludo.

Edito: Ya me olvidaba... Aplicando la ley de De Morgan también podés utilizar:
Código Delphi [-]
  if not((d1=d2)or(d1=d3)or(d1=d4)or(d2=d3)or(d2=d4)or(d3=d4)) then
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-05-2012 a las 02:37:55.
Responder Con Cita
  #9  
Antiguo 14-05-2012
gabtroc gabtroc is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 10
Poder: 0
gabtroc Va por buen camino
Ok ecfisa ya genero un nuevo tema con la pregunta, si tienes alguna idea para eso te invito a contestarla.
Responder Con Cita
  #10  
Antiguo 14-05-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
El generador que debes implementar se llama Generador de Lehmer no del cuadrado medio. Ha repasar la teoría de Modelos y Simulación

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #11  
Antiguo 14-05-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Yo y mi bocota, mejor mandenme a mi recursar la cátedra... confundí el Cuadrado Central con Lehmer. Esto me pasa por confundir los primeros estudios de Lehmer, ya que fue el quien a quien se lo conoce como el iniciador de los generadores.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
dblookupcombobox - Repeticion shoulder Varios 0 09-02-2011 16:46:12
ayuda con ciclo for que no se repite microbiano Conexión con bases de datos 6 18-10-2010 17:20:49
Ejemplo de ciclo o bucle infinito ecfisa Humor 4 09-07-2010 17:44:59
crear label por codigo en un ciclo for.. las beses de el ciclo sakuragi .NET 3 29-09-2005 05:04:29
bucle dentro de un bucle Cosgaya Varios 2 06-06-2005 07:05:16


La franja horaria es GMT +2. Ahora son las 16:04:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi