Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Programa de números repetidos? (https://www.clubdelphi.com/foros/showthread.php?t=73040)

TheBlackUnix 28-03-2011 17:33:23

Programa de números repetidos?
 
Hola, Necesito hacer un programa en delphi 5 que me diga cuantos números repetidos hay entre dos Edits..
Ejemplo:
En el primer edit coloco: 1784
En el segundo edit coloco: 1967

El resultado seria que hay dos repetidos, los cuales serian en este caso el 1 y el 7 ...
Esto me tiene un poco confundido.. E intentado muchas combinaciones con el COPY y mediante bucles... pero nada.. Podrian ayudarme, por favor..

gatosoft 28-03-2011 17:53:11

Buenos días amigo TheBlackUnix

Con gusto te ayudamos, pero no es política del club "hacer la tarea"... pues para esto existen "sitios especializados" (como: www.rincondelvago.com )

Nosotros te podemos ayudar revisando el código que ya has intentando y diciendote en que estas fallando... por ahora te reomiendo:

Búsquedas:
http://www.clubdelphi.com/foros/search.php

"La guia de estilo" (normas del club)
http://www.clubdelphi.com/foros/guiaestilo.php

"La otra guia de estilo"
http://www.clubdelphi.com/foros/show...24&postcount=6

Es importante siempre que indiues la versión de Delphi que manejas y que conocimeintos de programación tienes...

No lo tomes como un regaño, son solo sugerencias, para servirte mejor,

Un saludo,

TheBlackUnix 28-03-2011 17:58:58

xDDD no hay problema.. Mira mi codigo hasta ahora es así..
Actualmente el programa me dice cuanto repetidos hay, pero solo si se encuentran en el mismo orden.. Osea si esta por ejemplo así:
Edit1 : 1989
Edit2: 1989
Numero de repetidos : 4
Pero yo busco que me lo muestre aun esten en diferentes orden..
En cuanto a la versión de Delphi, tengo la V5..
Mi codigo actualmente:

a:=0;
IF copy(edit1.text,1,1)= copy(edit2.text,1,1) then
a:=a +1;
IF copy(edit1.text,2,1)= copy(edit2.text,2,1) then
a:=a +1;
if copy(edit1.text,3,1) = copy(edit2.text,3,1) then
a:=a+1;
if copy(edit1.text,4,1) = copy(edit2.text,4,1) then
a:=a+1;
edit3.text:=inttostr(a);

ContraVeneno 28-03-2011 18:15:57

necesitas tener un arreglo de dos dimensiones, donde guardes el número y las veces que se ha repetido. Algo así:
[0, 2] que significa que el número cero se ha encontrado dos veces.
[1, 0] el uno no se ha encontrado
[2, 3] el dos está tres veces
y así hasta el nueve.

Y para saber los números necesitas extraer de la cadena del edit, de uno por uno, así que tienes que utilizar un FOR para recorrer la cadena. Luego necesitas el número donde puedes usar un COPY y por último necesitas comparar ese número, ese proceso lo puedes hacer utilizan on CASE.

Código:

Desde i = 1 hasta el final de la cadena
 Case Cadena[i]
  Cuando sea 0 entonces Arreglo[0] = Arreglo[0] + 1
  Cuando sea 1 entonces Arreglo[1] = Arreglo[1] + 1
  .... hasta el nueve.

algo así mas o menos, a menos que alguien tenga una mejor idea...

gatosoft 28-03-2011 18:19:11

Pues si quieres seguir con tu metodología, tendrías que hacer una comparación por cada posición que tengas, de forma tal que obtendrías un producto cartesiano...

comparar posicion 1 con posicion 1
comparar posicion 1 con posicion 2
comparar posicion 1 con posicion 3
comparar posicion 1 con posicion 4
comparar posicion 2 con posicion 1
....

Lo cual no aconsejo, ya que para esto existen las estructuras como FOR o While...

Adicionalmente hay que tener en cuenta que las cadenas de texto en Pascal permiten acceder a cada uno de sus carcateres de forma individual, como si fuera un vector, asi:

Código Delphi [-]
Var
 CadenaDeTexto: String;
....
 CadenaDeTexto:='Hola';
 ShowMessage(CadenaDeTexto[1]) ; // lo cual mostraria un mensaje con la letra"H" (la primera posición es uno)

Según lo anterior, tu solución seria algo como:

Código Delphi [-]
  For i:= 1 to 4 do
   for j:= 1 to 4 do
      if Edit1.text○[i]=Edit2.text[j] then
          contadorderepetidos:= contadorderepetidos +1;

bye.

TheBlackUnix 28-03-2011 19:56:13

Cita:

Empezado por gatosoft (Mensaje 394852)
Pues si quieres seguir con tu metodología, tendrías que hacer una comparación por cada posición que tengas, de forma tal que obtendrías un producto cartesiano...

comparar posicion 1 con posicion 1
comparar posicion 1 con posicion 2
comparar posicion 1 con posicion 3
comparar posicion 1 con posicion 4
comparar posicion 2 con posicion 1
....

Lo cual no aconsejo, ya que para esto existen las estructuras como FOR o While...

Adicionalmente hay que tener en cuenta que las cadenas de texto en Pascal permiten acceder a cada uno de sus carcateres de forma individual, como si fuera un vector, asi:

Código Delphi [-]
Var
 CadenaDeTexto: String;
....
 CadenaDeTexto:='Hola';
 ShowMessage(CadenaDeTexto[1]) ; // lo cual mostraria un mensaje con la letra"H" (la primera posición es uno)

Según lo anterior, tu solución seria algo como:

Código Delphi [-]
  For i:= 1 to 4 do
   for j:= 1 to 4 do
      if Edit1.text○[i]=Edit2.text[j] then
          contadorderepetidos:= contadorderepetidos +1;

bye.

Gracias !!!! Pude resolver mi problema..


La franja horaria es GMT +2. Ahora son las 07:24:43.

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