Page 1 sur 3

[Résolu] Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 8:42
par Micoute
Il y a déjà un moment que je creuse et j'ai des problèmes pour trouver la solution.
Voici mon projet : lire un tableau en diagonales normales et inversées.
Voici ce que j'ai fait :

Code : Tout sélectionner

	
X = 0 : Y  = 0
If Y = 0
  ChaineTrouvee$ = Tableau1(X,  Y) ; haut gauche
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
  Goto DDI
  EndIf
  ChaineTrouvee$ = Tableau1(X+5, Y+5) ; bas droite
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
EndIf
Y + 1
If Y = 1
  ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) ; deuxième ligne, première colonne
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
  ChaineTrouvee$ = Tableau1(X+4, Y+4) + Tableau1(X+5, Y+3) ; avant dernière colonne, avant dernière ligne
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
EndIf
Y + 1
If Y = 2
  ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) + Tableau1(X+2, Y-2)
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
  ChaineTrouvee$ = Tableau1(X+3, Y+3) + Tableau1(X+4, Y+2) + Tableau1(X+5, Y+1)
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
EndIf
Y + 1
If Y = 3
  ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) + Tableau1(X+2, Y-2) + Tableau1(X+3, Y-3)
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
  ChaineTrouvee$ = Tableau1(X+2, Y+2) + Tableau1(X+3, Y+1) + Tableau1(X+4, Y) + Tableau1(X+5, Y-1)
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
EndIf
Y + 1
If Y = 4
  ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) + Tableau1(X+2, Y-2) + Tableau1(X+3, Y-3) + Tableau1(X+4, Y-4)
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
  ChaineTrouvee$ = Tableau1(X+1, Y+1) +Tableau1(X+2, Y) + Tableau1(X+3, Y-1) + Tableau1(X+4, Y-2) + Tableau1(X+5, Y-3)
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
EndIf
Y + 1
If Y = 5
  ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) +Tableau1(X+2, Y-2) + Tableau1(X+3, Y-3) + Tableau1(X+4, Y-4) + Tableau1(X+5, Y-5)
  Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
  Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
  If Rech1
    Goto DMN
  ElseIf Rech2
    Goto DDI
  EndIf
EndIf
Le problème c'est que ça me limite à un tableau de 6x6 et j'aimerais bien trouver une solution pour pouvoir utiliser n'importe quel tableau.
Je me rends bien compte que ce n'est pas la bonne solution, alors pouvez-vous m'aider s'il vous plait ?

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 9:35
par TazNormand
Bonjour,

je vois que vous avez enfin trouvé comment utiliser le forum :wink:

Bien, votre "bout" code n'est pas fonctionnel tel que posté plus haut, mais ce que je peux vous dire, c'est que si vous connaissez la taille de votre tableau, il suffit de l'indiquer aux lignes où apparaissent les chiffres 5, en spécifiant "taille-1", par exemple tailleX-1 et tailleY-1.

Pour faire simple si vous savez que votre tableau fait 10x10, que l'on commence en position 0-0 (ou 1-1) c'est à dire en haut à gauche, alors en incrémentant la position x et la position y de 1 par 1, en avance en diagonale haut-gauche vers bas-droite (vision classique d'un tableau/matrice).
La diagonale inverse sera accessible en partant de x=0 (ou 1 si on part de 1) et y=9 (ou 10 selon que l'on commence à 0/zéro ou 1), et en effectuant x+1 et y-1 jusqu'à ce que y soit égal à -1 (ou 0 si vous partez de 1).

quand je dis que x ou y doivent valoir 0 ou 1 en départ, cela dépend de votre façon de "numéroter" vos cases de tableau :
Soit vous partez de 1, donc 1,2,3,4,5,6,...
soit vous partez de 0, donc 0,1,2,3,4,5,...

Ce qui implique que pour 6 cases (comme dans votre extrait de code), en partant de 0 on obtient : 0,1,2,3,4,5
et en partant de 1 on obtient alors 1,2,3,4,5,6.

Suis-je assez clair ?

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 10:00
par Micoute
En fait, je commence mon tableau à 0,0 , si il faisait 1024x1024, ça ferait pas mal de mémoire perdue pour rien (1 Mo) et comme je n'ai de 2Go, je ne veux pas gâcher. Pour revenir à mon problème, je ne connais pas du tout la taille de mon tableau au départ. D’ailleurs je poste mon code qui n'est pas encore terminé

Code : Tout sélectionner

Enumeration
	#Fichier
	#Droite
	#Gauche
	#Haut
	#Bas
	#DiagonaleDN ; descendante normale
	#DiagonaleMN ; montante normale
	#DiagonaleDI ; descendante inversée
	#DiagonaleMI ; descendante inversée
EndEnumeration

Global NomFich$, LongFich.i, *IDMem.i, *AdrFich.String, Fich$, NbrLigFich.i, LongLigFich.i, Lig, Lig$, Col.i, Dir$, Rech1.i, Rech2.i
Global D.i, XD.i, XA.i, YD.i, YA.i, L.i, PosLig.i, PosCol.i, ChaineATrouver$, ChaineTrouvee$,Caractere$, X.i, Y.i, NonTrouve.b = 0

Declare Afficher()

Procedure ChercheChaineDoubleDim(ChaineATrouver.s)
	ChaineATrouver$ = ChaineATrouver
	NomFich$ = OpenFileRequester("Veuillez sélectionner un fichier", "", "Fichiers Textes | *.txt", 0)
	If NomFich$
		If ReadFile(#Fichier, NomFich$)
			LongFich = Lof(#Fichier)
			*IDMem = AllocateMemory(LongFich)
			If *IDMem
				ReadData(#Fichier, *IDMem, LongFich)
				*AdrFich.String = @*IDMem
				Fich$ = *AdrFich\s
				If Fich$ <> ""
					NbrLigFich = CountString(Fich$, #CRLF$)
					LongLigFich = Len(StringField(Fich$, 1, #CRLF$))
					L = Len(ChaineATrouver$)
					Global Dim Tableau1.s(LongLigFich-1, NbrLigFich-1) ;- Tableau horizontal
					Global Dim Tableau2.s(LongLigFich-1, NbrLigFich-1) ;- Tableau vertical
					CloseFile(#Fichier)
				Else
					MessageRequester("Attention", "Le fichier "+NomFich$+" n'a pas pu être chargé !", #MB_ICONEXCLAMATION)
				EndIf
			Else
				MessageRequester("Erreur", "Impossible d'allouer "+Str(LongFich)+" octets !", #MB_ICONERROR)
			EndIf
		EndIf
	EndIf
	;- création du tableau1
	For Lig = 1 To NbrLigFich
		ChaineTrouvee$ = StringField(Fich$, Lig, #LF$)
		For Col = 1 To LongLigFich
			Caractere$ = Mid(ChaineTrouvee$, Col,1)
			Tableau1(Col-1, Lig-1) = Caractere$
		Next Col
	Next Lig
	;- lecture du tableau1
	For Lig = 1 To NbrLigFich
		ChaineTrouvee$ = ""
		For Col = 1 To LongLigFich
			ChaineTrouvee$ + Tableau1(Col-1, Lig-1)
		Next Col
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ChaineTrouvee$, ReverseString(ChaineATrouver$))
		If Rech1 ;- gauche à droite
			If Mid(ChaineTrouvee$, FindString(ChaineTrouvee$,ChaineATrouver$), Len(ChaineATrouver$)) = ChaineATrouver$
				D = #Droite
				XD = Rech1
				YD = Lig
				Afficher()
				Break
			EndIf
		ElseIf  Rech2 ;- droite à gauche
			ChaineTrouvee$ = ReverseString(ReverseString(ChaineATrouver$))
			If ChaineTrouvee$ = ChaineATrouver$
				D = #Gauche
				XD = Rech2 ;+ L -1
				YD = Lig
				Afficher()
				Break
			EndIf
		Else
			;- création du tableau2
			For PosLig = 1 To NbrLigFich
				For PosCol = 1 To LongLigFich
					Tableau2(PosLig-1, PosCol-1) + Mid(Tableau1(PosCol-1, PosLig-1), Lig, 1)
					ChaineTrouvee$ = Tableau2(Lig-1, PosCol-1)
				Next PosCol
			Next PosLig
			;- lecture du tableau2
			For Col = 1 To LongLigFich
				ChaineTrouvee$ + Tableau2(Col-1, Lig-1)
			Next Col
			Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
			Rech2 = FindString(ChaineTrouvee$, ReverseString(ChaineATrouver$))
			If Rech1 ;- haut en bas
				If Mid(ChaineTrouvee$, FindString(ChaineTrouvee$,ChaineATrouver$), Len(ChaineATrouver$)) = ChaineATrouver$
					D = #Haut
					XD = Lig
					YD = Rech1 -1
					Afficher()
					Break
				EndIf
			ElseIf Rech2 ;- bas en haut
				ChaineTrouvee$ = ReverseString(ReverseString(ChaineATrouver$))
				If ChaineTrouvee$ = ChaineATrouver$
					D = #Bas
					XD = Lig
					YA =Rech2 -1
					Afficher()
					Break
				EndIf
			EndIf ; vertical							
		EndIf ; horizontal
	Next Lig
	
	;- diagonales normales
	Rech1 = 0
	Rech2 = 0
	X = 0 : Y  = 0
	If Y = 0
		ChaineTrouvee$ = Tableau1(X,  Y) ; haut gauche
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
		ChaineTrouvee$ = Tableau1(X+5, Y+5) ; bas droite
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
	EndIf
	Y + 1
	If Y = 1
		ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) ; deuxième ligne, première colonne
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
		ChaineTrouvee$ = Tableau1(X+4, Y+4) + Tableau1(X+5, Y+3) ; avant dernière colonne, avant dernière ligne
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
	EndIf
	Y + 1
	If Y = 2
		ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) + Tableau1(X+2, Y-2)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
		ChaineTrouvee$ = Tableau1(X+3, Y+3) + Tableau1(X+4, Y+2) + Tableau1(X+5, Y+1)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
	EndIf
	Y + 1
	If Y = 3
		ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) + Tableau1(X+2, Y-2) + Tableau1(X+3, Y-3)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
		ChaineTrouvee$ = Tableau1(X+2, Y+2) + Tableau1(X+3, Y+1) + Tableau1(X+4, Y) + Tableau1(X+5, Y-1)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
	EndIf
	Y + 1
	If Y = 4
		ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) + Tableau1(X+2, Y-2) + Tableau1(X+3, Y-3) + Tableau1(X+4, Y-4)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
		ChaineTrouvee$ = Tableau1(X+1, Y+1) +Tableau1(X+2, Y) + Tableau1(X+3, Y-1) + Tableau1(X+4, Y-2) + Tableau1(X+5, Y-3)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
	EndIf
	Y + 1
	If Y = 5
		ChaineTrouvee$ = Tableau1(X, Y) + Tableau1(X+1, Y-1) +Tableau1(X+2, Y-2) + Tableau1(X+3, Y-3) + Tableau1(X+4, Y-4) + Tableau1(X+5, Y-5)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DMN
		ElseIf Rech2
			Goto DDI
		EndIf
	EndIf
	;-diagonale montante normale
	DMN:
	If Mid(ChaineTrouvee$, FindString(ChaineTrouvee$, ChaineATrouver$), Len(ChaineATrouver$)) = ChaineATrouver$
		D = #DiagonaleMN
		XD =Rech1
		YD = X
		XA = XD + L -1
		YA = YD - L +1
		Afficher()
	Else
		NonTrouve = 1
	EndIf
	
	;-diagonale descendante inversée
	DDI:
	If Mid(ReverseString(ChaineTrouvee$), FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$), Len(ChaineATrouver$)) = ChaineATrouver$
		D = #DiagonaleDI
		YD = Rech2
		XD = L
		XA = XD - L +1
		YA = X - L  +1
		Afficher()
	Else
		NonTrouve = 1
	EndIf
	;-diagonales inversées
	Rech1 = 0
	Rech2 = 0
	X = 1
	If X = 1
		ChaineTrouvee$ = Tableau2(5,  0)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
		ChaineTrouvee$ = Tableau2(0, 5)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
	EndIf
	X + 1
	If X = 2
		ChaineTrouvee$ = Tableau2(4, 0) + Tableau2(5, 1)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
		ChaineTrouvee$ = Tableau2(0, 4) + Tableau2(1, 5)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
	EndIf
	X + 1
	If X = 3
		ChaineTrouvee$ = Tableau2(3, 0) + Tableau2(4, 1) + Tableau2(5, 2)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
		ChaineTrouvee$ = Tableau2(0, 3) + Tableau2(1, 4) + Tableau2(2, 5)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
	EndIf
	X + 1
	If X = 4
		ChaineTrouvee$ = Tableau2(2, 0) + Tableau2(3, 1) + Tableau2(4, 2) + Tableau2(5, 3)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
		ChaineTrouvee$ = Tableau2(0, 2) + Tableau2(1, 3) + Tableau2(2, 4) + Tableau2(3, 5)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
	EndIf
	X + 1
	If X = 5
		ChaineTrouvee$ = Tableau2(1, 0) + Tableau2(2, 1) + Tableau2(3, 2) + Tableau2(4, 3) + Tableau2(5,4)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
		ChaineTrouvee$ = Tableau2(0, 1) +Tableau2(1, 2) + Tableau2(2, 3) + Tableau2(3, 4) + Tableau2(4, 5)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
	EndIf
	X + 1
	If X = 6
		ChaineTrouvee$ = Tableau2(0, 0) + Tableau2(1, 1) +Tableau2(2, 2) + Tableau2(3,3) + Tableau2(4,4) + Tableau2(5, 5)
		Rech1 = FindString(ChaineTrouvee$, ChaineATrouver$)
		Rech2 = FindString(ReverseString(ChaineTrouvee$), ChaineATrouver$)
		If Rech1
			Goto DDN
		ElseIf Rech2
			Goto DMI
		EndIf
	EndIf
	End
	;- diagonale montante inversée	
	DMI:
	If Mid(ChaineTrouvee$, FindString(ChaineTrouvee$, ChaineATrouver$), Len(ChaineATrouver$)) = ChaineATrouver$
		D = #DiagonaleMI
		XD = Rech2
		YD = LongLigFich+L-1
		Afficher()
	Else
		NonTrouve = 1
	EndIf
	;- diagonale descendante normale
	DDN:
	If  Mid(ChaineTrouvee$, FindString(ChaineTrouvee$, ChaineATrouver$), Len(ChaineATrouver$))  = ChaineATrouver$
		D = #DiagonaleDN
		XD = Rech1
		YD = L
		Afficher()
	EndIf
	End
	;CallDebugger
EndProcedure

Procedure Afficher()
	Select D
		Case #Droite
			Dir$ = "de gauche à droite"
		Case #Gauche
			Dir$ = "de droite à gauche"
		Case #Haut
			Dir$ = "de haut en bas"
		Case #Bas
			Dir$ = "de bas en haut"
		Case #DiagonaleDN
			Dir$ = "diagonale descendante normale"
		Case #DiagonaleMN
			Dir$ = "diagonale montante normale"
		Case #DiagonaleDI
			Dir$ = "diagonale desendante inversée"
		Case #DiagonaleMI
			Dir$ = "diagonale montante inversée"
	EndSelect
	MessageRequester("Résultats", "Direction de recherche : "+Dir$+#CRLF$+"Position X : "+Str(XD)+#CRLF$+"Position Y : "+Str(YD)+#CRLF$+"Longueur de la chaine : "+Str(L)+#CRLF$+"Chaîne à trouver : "+ChaineATrouver$,#MB_ICONINFORMATION)
EndProcedure
Il ne me reste plus que les diagonales et se sera parfait. Merci à tous pour votre contribution généreuse.

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 10:21
par G-Rom
dayvid a écrit :Ah, voilà une personne de premier choix :mrgreen:
Micoute, que tu parle bien :lol:
Va falloir que je prenne modèle sur toi moi si je veux me faire des amis :)
Tu est pas sur meetic ici...
En fait, je commence mon tableau à 0,0 , si il faisait 1024x1024, ça ferait pas mal de mémoire perdue pour rien (1 Mo)
Dans le cadre d'un tableau de byte ou de char oui mais dans ton cas , cette taille augmente, vu que c'est un tableau de string.
4mo minimum rien que pour le stockage des pointeurs ( 8 en x64 ), plus les strings eux-même suivi du 0 de fin , ca fait bien plus ;)

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 10:46
par Micoute
Ce qui n'est pas négligeable !

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 11:02
par dayvid
Ah, voilà une personne de premier choix :mrgreen:
Micoute, que tu parle bien :lol:
Va falloir que je prenne modèle sur toi moi si je veux me faire des amis :)

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 11:04
par Mindphazer
dayvid a écrit :Ah, voilà une personne de premier choix :mrgreen:
Micoute, que tu parle bien :lol:
Va falloir que je prenne modèle sur toi moi si je veux me faire des amis :)
Trop tard
tu es grillé et bientôt banni.

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 11:11
par falsam
Deux fois de suite les memes phrases sur le meme post! Dayvid pourrais tu te suicider (auto-bannir) en silence stp?

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 11:13
par Micoute
Dayvid as_tu lu les informations concernant le droits d'expression sur un forum ?

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 11:42
par dayvid
Deux fois de suite les memes phrases sur le meme post! Dayvid pourrais tu te suicider (auto-bannir) en silence stp?
Pourquoi il l'a effacer aussi hein, ya rien de méchant la dans !
C'est fred qui va surement le faire ça, pas moi, je ne peut pas le faire, c'est trop dur, j'ai aucun autre endroit ou aller
Donner moi un autre endroit ou aller pour PureBasic et je m'en vais !, je reviendrais de temps en temps quand même hein :)
Micoute a écrit :Dayvid as_tu lu les informations concernant le droits d'expression sur un forum ?
Surement mais j'ai du oublier, je vais les relire pour voir :)

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 11:44
par Micoute
Et si on revenait à mon problème de programmation ? Il me semble bien qu'on s'est un peu égarés !

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 12:04
par Ar-S
Salut Micoute et bienvenue.

Pas le temps de décortiquer le code mais à vu d'oeil, beaucoup de if et de goto.

Petite syntaxe pour info dans les globales, tu peux éviter d'indiquer à chaque fois tes .i
Plutôt que de mélanger les types :

Code : Tout sélectionner

Global NomFich$, LongFich.i, *IDMem.i, *AdrFich.String, Fich$, NbrLigFich.i, LongLigFich.i, Lig, Lig$, Col.i, Dir$, Rech1.i, Rech2.i
Global D.i, XD.i, XA.i, YD.i, YA.i, L.i, PosLig.i, PosCol.i, ChaineATrouver$, ChaineTrouvee$,Caractere$, X.i, Y.i, NonTrouve.b = 0
Tu peux faire comme ceci :

Code : Tout sélectionner

Global.i NbrLigFich, D, XD, XA, YD, YA, L, PosLig, PosCol ; etc etc 
Le résultat est le même mais ça créé un peu moins de répétitions.

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 13:30
par falsam
Micoute a écrit :Pour revenir à mon problème, je ne connais pas du tout la taille de mon tableau au départ.
Bonjour Micoute, Ton tableau est alimenté au préalable par un fichier contenant les mots et que tu lis séquentiellement. Je pense que chaque ligne de ton fichier correspond à une ligne de ton tableau.
Comment peux tu donc ne pas connaitre la taille de ton tableau ?

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 14:17
par Micoute
Merci Ar-s pour ce tuyau, je ne connaissais pas cette syntaxe
Merci aussi à falsam de s'être penché sur mon problème, mais justement, le problème, c'est que je ne sais pas quel fichier l'utilisateur va ouvrir, ce qui va déterminer la taille du tableau.
J'ai pris arbitrairement un tableau de 6x6 pour faire un exemple simple, mais en fait je voudrais qu'on puisse ouvrir n'importe quel fichier texte et que les résultats soient justes à chaque fois
Je voudrais aussi si c'est possible éviter les Goto, j'aurais préféré plutôt des Gosub à la rigueur et ça m'aurait simplifié le travail.
En tous cas, milles mercis à tous et excusez mes erreurs de débutant.

Re: Pouvez-vous m'aider ?

Publié : lun. 23/juil./2012 14:26
par TazNormand
Qu'elle est la finalité de ta demande (excuses ma familiarité, mais on se tutoie tous sur le forum) ?

Pourquoi vouloir "lire" en diagonale dans un fichier texte ?

Sans savoir où tu veux en venir, il est difficile de t'aider.

Ensuite, oublies les GOTO et GOSUB hérités d'une programmation plus qu'obsolète.

PureBasic te fournit les "procédures" que tu peux appeler où et quand tu le désires, je t'invite à consulter la doc à ce propos.