Page 1 sur 1
					
				[Demande]-Tableau multi dimension déclaré dans une structure
				Publié : dim. 02/avr./2006 0:34
				par flaith
				Bonjour les gens,
comment faire pour que j'ai ca ?
Code : Tout sélectionner
Structure TCar
  TheCar.c                      ; le caractère
  ch.b[20,20]                   ; Maximum pour un car = 20x20 pixels
EndStructure
Dim Tab_Alpha.TCar(96)
cela concerne la ligne ou se trouve 
ch.b[20,20]
car je voudrais ensuite y accéder de cette façon :
merci  

 
			
					
				
				Publié : dim. 02/avr./2006 2:34
				par Guimauve
				Primo faire un tableau multiple dans une structure de donnée n'est pas aussi simple que ça. Faire comme ceci :
C'est impossible, il faut faire comme suit :
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure >>>>>
Structure Line
   
   Array.b[20]
   
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs >>>>>
Procedure SetLineArray(*ObjetA.Line, Index, Array.b)
   
   *ObjetA\Array[Index] = Array
   
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs >>>>>
Procedure.b GetLineArray(*ObjetA.Line, Index)
   
   ProcedureReturn *ObjetA\Array[Index]
   
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure >>>>>
Structure TCAR
   
   TheCar.c
   ch.Line[20]
   
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs >>>>>
Procedure SetTCARTheCar(*ObjetA.TCAR, TheCar.c)
   
   *ObjetA\TheCar = TheCar
   
EndProcedure
Procedure SetTCARCh(*ObjetA.TCAR, Index, *Ch.Line)
   
   CopyMemory(*Ch, *ObjetA\ch[Index], SizeOf(Line))
   
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs >>>>>
Procedure.c GetTCARTheCar(*ObjetA.TCAR)
   
   ProcedureReturn *ObjetA\TheCar
   
EndProcedure
Procedure GetTCARCh(*ObjetA.TCAR, Index)
   
   ProcedureReturn *ObjetA\ch[Index]
   
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le mutateur Spécial >>>>>
ProcedureDLL SetTCARchNumber(*ObjetA.TCAR, LineIndex, RowIndex, Number.f)
   
   SetLineArray(GetTCARCh(*ObjetA, LineIndex), RowIndex, Number)
   
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'observateur Spécial >>>>>
ProcedureDLL.f GetTCARchNumber(*ObjetA.TCAR, LineIndex, RowIndex)
   
   ProcedureReturn GetLineArray(GetTCARCh(*ObjetA, LineIndex), RowIndex)
   
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Dim Alpha.TCAR(96)
For Comteur = 0 To 95
   
   For LineIndex = 0 To 19
      
      For RowIndex = 0 To 19
         
         SetTCARchNumber(Alpha(Compteur), LineIndex, RowIndex, 1)
         
      Next 
      
   Next 
   
Next 
   
For Comteur = 0 To 5 ; 95
   
   Debug "Index Tableau (Dim) no. " +  Str(Compteur)
   
   For LineIndex = 0 To 5 ; 19
      
      Debug "Ligne Tableau Static no. " +  Str(LineIndex)
      
      For RowIndex = 0 To 5 ; 19
         
         Debug "Rangé Tableau Static no. " + Str(RowIndex)
         Debug GetTCARchNumber(Alpha(Compteur), LineIndex, RowIndex)
      
      Next 
    
   Next 
 
Next
D'accord le code n'est pas très élégant mais ça fonctionne. J'espère que ça peut t'aider.
A+
Guimauve
 
			
					
				
				Publié : dim. 02/avr./2006 9:33
				par comtois
				je ne me casse pas la tête , je n'utilise qu'une dimension
Code : Tout sélectionner
Structure TCar
  TheCar.c                    ; le caractère
  ch.b[400]                   ; Maximum pour un car = 20x20 pixels
EndStructure
Dim Tab_Alpha.TCar(96)
For k = 65 To 96 
	Index = 0
	For j = 0 To 19
		For i = 0 To 19
			Tab_Alpha(k)\ch[Index] = 1
			Index + 1
		Next i
	Next j		
Next k		
; et si tu n'es pas dans une boucle et que tu veux connaitre la valeur de 'Tab_Alpha\ch[i,j]'
; Tu as juste à faire : 
;Index = j * 20 + i
;Tab_Alpha(k)\ch[Index]
comme ça tu as deux solutions  à toi de voir 

 
			
					
				
				Publié : dim. 02/avr./2006 10:18
				par flaith
				Merci beaucoup à vous deux
@guimauve : impressionnant ton code
@comtois : pas mal, j'avais pensé à cette soluce
c'est vrai que cela aurait été plus simple si on avait la possibilité de définir des tableaux multi dans une structure ... bah ... pour la 4.1 pitêtre  
 
 
Encore merci à tous les deux, je m'en vais de ce pas m'amuser avec vos codes  

 
			
					
				
				Publié : dim. 02/avr./2006 10:27
				par Guimauve
				J'espère qu'il n'est pas trop tard ...
Une autre solution cette fois avec une Macro
Code : Tout sélectionner
Structure Vector5D
   Coords.f[5]
EndStructure
Structure Matrix5X5
   Line.Vector5D[5]
EndStructure
Macro MatrixAccess(Matrix, i,j)
   
   Matrix\Line[ i ]\Coords[ j ]
   
EndMacro
Matrice.Matrix5X5
MatrixAccess(Matrice, 0,0) = 6
For Line = 0 To 4
   
   Debug "Ligne no. " + Str(Line)
   
   For Row = 0 To 4
      
      Debug "Rangée no. " + Str(Row)
      Debug MatrixAccess(Matrice, Line,Row)
      
   Next
   
Next
A+
Guimauve
 
			
					
				
				Publié : dim. 02/avr./2006 10:36
				par flaith
				Merci guimauve, je viens de le voir sur le forum anglais, t'as été plus rapide que moi 
 
 
sinon il n'est jamais trop tard, ca fera une 3ème soluce de plus ce qui n'est pas mal du tout ... hop hoph je teste ca de suite ...
encore merci  

 
			
					
				
				Publié : dim. 02/avr./2006 10:54
				par Guimauve
				Avec une macro c'est plus simple car elle peut accèder au tableau dans les 2 sens (Lecture - Écriture) alors que le premier code que j'avais donnée comporte une commande en lecture et une en écriture. 
C'est plus gros à mettre en oeuvre. Mais si tu es du genre comme moi, à faire de la programmation basé objet et faire des librairies avec Tailbite, c'est la seule solution
Si non les macros c'est la meilleur solution.
A+
Guimauve
			 
			
					
				
				Publié : dim. 02/avr./2006 11:38
				par flaith
				En fait j'essaye ( 

 ) de convertir un de mes programmes fait avec Delphi sous Pure, donc le côté objet est interessant, mais sous Pure c'est assez dur à avaler et comme je suis de la vieille école, je suis resté fidèle au C (un jour, qui sait, je me mettrais au C++) donc j'vais prendre la macro  
