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 14-10-2016
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Ayuda con error list index out of bounds

Hola, después de mucho tiempo sin entrar y casi el mismo sin hacer nada en delphi (por trabajo), vuelvo buscando vuestra ayuda y conocimientos y más despues del tiempo sin tocar nada de programación, pero el tiempo muerto es mucho (trabajo de noche), así que me puse con una tonteria, pero una tonteria que me trae de cabeza. Es el tipico programa para sacar combinaciones de la loteria. El programa corre y no da error, hasta que le pido los seis numeros mas repetidos y entonces me tira el error "list index out of bounds (6)".

Os he adjuntado el archivo rar con todo el programa. El error lo da cuando se pulsa el boton "Buscar repeticiones"
Está hecho en xe7 por que una vez consiga que haga lo que quiero me gustaria pasarlo a android despues claro, de cambiar las 4 cosas que sean necesarias. También unso un hilo de ejecucion y no tengo ni idea de si funcionara en android, pero bueno paso a paso, ahora lo que me trae loco es ese error al mostrar resultados.

Espero vuestra ayuda, un saludo a todos.
Ah, por cierto, el código que deberia mostrar el resultado es una respuesta (creo) que de ecfisa que ya me ayudo con este problema hace mucho tiempo, incluso tengo el ejemplo que el me paso y que NO da error, pero a mi en xe7, si.
Archivos Adjuntos
Tipo de Archivo: rar PRIMITIVA.rar (140,1 KB, 8 visitas)
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #2  
Antiguo 14-10-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
No he visto el código, pero por lo que dices, ¿no será que estás contando desde el 1 y deberías contar desde el 0? Lo digo porque a veces a mi también me pasa.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 14-10-2016
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola ñuño,

el error salta cuando se pulsa este boton..
Código Delphi [-]
procedure TForm1.Button4Click(Sender: TObject);
var
   i, j, p : Integer;
   ModaCount : Array[0..5] of Integer;
   AModa : Array[0..5] of TModa;
   b : Boolean;

begin

   // Cuenta cuantas ocurrencia hay de un número.
   // la posición del arreglo corresponde al número generado aleatoriamente
   // El valor del arreglo corresponde a la cantidad de ocurrencias encontradas para ese número.
   FillChar(ModaCount,Sizeof(ModaCount),0);
   for i := 0 to lista.Items.Count - 1 do
   begin
      for j := 0 to lista.Items.Item[i].SubItems.Count - 1 do
      begin
         p := StrToInt(lista.Items.Item[i].SubItems.Strings[j]);
         ModaCount[p] := ModaCount[p] + 1;
      end;
   end;

   // Genera un arreglo con los 6 primeros números en orden de repetición.
   FillChar(AModa,Sizeof(AModa),-1);
   for i := Low(AModa) to High(AModa) do
      for j := Low(ModaCount) to High(ModaCount) do
      begin
         if AModa[i].Count < ModaCount[j] then
         begin

            for p := 0 to 5 do
               if (AModa[p].Number = j) then
                  b := True;

            if not b then
            begin
               AModa[i].Number := j;
               AModa[i].Count := ModaCount[j];
            end;

            b := False;

         end;
      end;

   // Muestra los primeros números repetidos en secuencia hasta un máximo de 6
   for i:= 0 to 6 do
   begin
      if (AModa[i].Count <> 0) then
        ShowMessage(Format('El %s número es %d con %d ocurrencias',[Secuencia[i],AModa[i].Number,AModa[i].Count]));
   end;
end;

Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #4  
Antiguo 14-10-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sigue paso a paso el código con el depurador y mira la línea que da error.
Responder Con Cita
  #5  
Antiguo 14-10-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Deberías ser más específico en cuanto a la localización del error. Sin embargo, en el código que escribes, el útimo ciclo seguramente te producirá el error de "Index out of bounds":

Código Delphi [-]
   // Muestra los primeros números repetidos en secuencia hasta un máximo de 6
   for i:= 0 to 6 do
   begin
      if (AModa[i].Count <> 0) then
        ShowMessage(Format('El %s número es %d con %d ocurrencias',[Secuencia[i],AModa[i].Number,AModa[i].Count]));
   end;

AModa va de 0 a 5 y tu ciclo va de 0 a 6.

LineComment Saludos
Responder Con Cita
  #6  
Antiguo 14-10-2016
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola, escribió desde el móvil lo digo por si alguna palabra no se entiende..
Gracias por responder, lo del 0..6, el 6 lo puse por probar, pero el error ya me daba
Con 0..5
Hola casimiro, ahora mismo estoy en el curro, pero mañana miraré lo del depurador.
Gracias otra vez y un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #7  
Antiguo 17-10-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por danielmj Ver Mensaje
Hola, escribió desde el móvil lo digo por si alguna palabra no se entiende..
Gracias por responder, lo del 0..6, el 6 lo puse por probar, pero el error ya me daba
Con 0..5
Pues si haces una pregunta y pones un código, trata de que éste coincida con tu problema. Y sigues sin contestar en qué punto exactamente ocurre el error.

LineComment Saludos
Responder Con Cita
  #8  
Antiguo 18-10-2016
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola, ya esta solucionado, el problema es que no habia declarado los campos "max y rows" en el apartado de constantes. Estuve toqueteando y debí borrarlo.
El código que tiene relacion con el error y la pregunta en cuestion es este:

Código Delphi [-]
private
    { Private declarations }
  public
    { Public declarations }
  end;

  TModa = record
     Number : Integer;
     Count : Integer;
  end;

  THilo = class( TThread )
    Ejecutar: procedure of object;
    procedure Execute; override;
  end;

const
  {Max = 50; // Número máximo de elementos a generar aleatoriamente
  Rows = 100; // Número máximo de lineas del control TListview}
  Secuencia : Array[0..5] of String = ('primero','segundo', 'tercero', 'cuarto', 'quinto', 'sexto');
  Max = 50; // Número máximo de elementos a generar aleatoriamente
  Rows = 150000000; // Número máximo de lineas del control TListview

Como se puede ver, max y rows aparecen marcados como comentarios y ahí estaba el error.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
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
error list index out of bounds bothy Varios 2 16-04-2010 10:00:19
Error (List Index of bounds)? DM2005 Varios 2 08-07-2006 12:53:29
Error List index out of bounds (14) AMINOA2R Firebird e Interbase 3 30-09-2005 00:32:57
Error: List Index Out Bounds() MasterXP SQL 4 18-02-2005 06:41:06
Error (list index out of bounds) en Zeos DBO 6.0.12 hhuillcen MySQL 2 09-12-2003 19:44:11


La franja horaria es GMT +2. Ahora son las 00:00:25.


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