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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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 ?
Dernière modification par Micoute le ven. 31/août/2012 12:58, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Pouvez-vous m'aider ?

Message 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 ?
Image
Image
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Pouvez-vous m'aider ?

Message 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 ;)
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message par Micoute »

Ce qui n'est pas négligeable !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Pouvez-vous m'aider ?

Message 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 :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Mindphazer
Messages : 693
Inscription : mer. 24/août/2005 10:42

Re: Pouvez-vous m'aider ?

Message 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.
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pouvez-vous m'aider ?

Message par falsam »

Deux fois de suite les memes phrases sur le meme post! Dayvid pourrais tu te suicider (auto-bannir) en silence stp?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message par Micoute »

Dayvid as_tu lu les informations concernant le droits d'expression sur un forum ?
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Pouvez-vous m'aider ?

Message 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 :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message par Micoute »

Et si on revenait à mon problème de programmation ? Il me semble bien qu'on s'est un peu égarés !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pouvez-vous m'aider ?

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pouvez-vous m'aider ?

Message 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 ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Pouvez-vous m'aider ?

Message 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.
Image
Image
Répondre