[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

Re: Pouvez-vous m'aider ?

Message par Micoute »

La finalité de mon logiciel est qu'il est destiné pour les clubs du 3ème age, en fait c'est une aide à la compréhension des mots fléchés qui peuvent s'écrire dans n'importe quel sens, donc, dans le logiciel terminé, on tape le mot qu'on cherche et aussitôt on a la coordonnée X,Y du début de notre mot, on pourrait penser que c'est pour tricher, mais quand est presque sénile, on n'y pense même pas.
Pour les procédures, j'y ai pensé, mais il faut que le logiciel lise d'abord de gauche à droite et s'il ne trouve pas, il continue en lisant de haut en bas, puis dans l'autre sens, jusqu'à là pas de problème puisqu'on lit de la case 0 à la case LongueurLigne et de 0 à NombreLigne dans l'autre sens, mais le problème ce sont les diagonales, sutout quand on ne connaît pas la longueur de la grande diagonale.
En espérant m'être fait comprendre, je te remercie prendre de ton temps pour m'aider et je je suis d'accord du "tu" sur la 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 !
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 »

J'aurai procédé comme ça pour initialiser la taille du tableau dans le cas d'un tableau "carré"

Code : Tout sélectionner


; --------------------
; Initialisation
; --------------------
Declare Remplir()
Declare CompteCar(fichier$)

Global MonFichier$ = "e:\MULTIMEDIA\PUREBASIC\4.40\tableau6x6.txt"


; --------------------
; PROCEDURES
; --------------------

Procedure CompteCar(fichier$)
  Shared NbrCarLigne, NumLigne
  
  If ReadFile(0, fichier$)  
    NbrCarX = 0 :  NbrLigne = 0
    
    While Eof(0) = 0
      Ligne$ = ReadString(0)
      NbrCarLigne = Len(Ligne$)
      NbrCarX + NbrCarLigne
      NumLigne + 1
    Wend
    CloseFile(0)
    
    If NbrCarLigne = NumLigne
      ProcedureReturn 1 ; tout est Ok
    Else
      ProcedureReturn 0 ; différence entre nbr ligne et nombre de col
    EndIf  

  Else
    ProcedureReturn -1 ; fichier non lu
  EndIf
EndProcedure



; --------------------
; PROGRAMME
; --------------------

;- Création du tableau vide
If CompteCar("E:\MULTIMEDIA\PUREBASIC\4.40\tableau6x6.txt") = 1
  NbrX = NbrCarLigne - 1
  NbrY = NumLigne - 1
  
  Global Dim Cel(NbrX,NbrY)
  
 MessageRequester("Information","Tableau de " +Str(NbrCarLigne) + " x " + Str(NumLigne) + " créé !")
  
ElseIf CompteCar(MonFichier$) = -1
  MessageRequester("Information","Impossible d'ouvrir le fichier!",#MB_ICONERROR)

Else  
  Debug "Tableau de taille incorrecte."

EndIf
 

End

je t'invite à regarder le code de ce topic : http://www.purebasic.fr/french/viewtopi ... hilit=melo
~~~~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
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message par Micoute »

Très grande classe, on voit bien qu'on n'à pas à faire à un débutant, que du bonheur !!!
Je voudrais passer pour un rabat-joie mais, c'est dommage que ça ne traite que d'un tableau déterminé
Merci encore et respect !
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
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message par Micoute »

Je voulais dire, "je ne veux pas passer pour un rabat-joie", on devrait toujours se relire avant d'envoyer
Mille excuses
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
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 :c'est dommage que ça ne traite que d'un tableau déterminé
Le tableau que tu va lire depuis un fichier au format texte sera forcement déterminé.
Tu connais le nombre de ligne que tu vas lire et je pense que tu peux connaitre le nombre de caractères par ligne.
Ce qui donne les dimensions 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 »

Tu n'as pas bien compris ce que je voulais dire. La taille du tableau est déterminée par le fichier que l'utilisateur va ouvrir, ça va de soi.
Je sais bien que les "petits-vieux" sont un peu têtus, mais peut-être pas au point d'ouvrir toujours le même fichier ! Donc, la taille du fichier, je ne peux pas la connaître à l'avance !
C'est pour cette seule raison que je ne peux pas définir la diagonale la plus grande, sinon, je ferais une boucle conditionnelle.

Et encore mille mercis pour l'aide plutôt collégiale que je reçois. Vraiment merci à tous.
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
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pouvez-vous m'aider ?

Message par falsam »

J'insiste quand même :). Si tu ouvres un fichier texte, tu peux connaitre facilement le nombre de lignes. Ensuite je pars du principe que chaque ligne est de longueur fixe que tu peux connaitre aussi très facilement.

mon fichier texte exemple (demo.txt)

Code : Tout sélectionner

ERSUAENIARTG
TEDRTGOEFNUU
TENOJATTEIVR
OSISENNERPUE
HLSACOVLBARE
EIVEBTAEASTN
XUOHRNUINJEI
IANCDADEBMIM
UOIEJSBFLOGE
ONVREUCREUUH
XASCENNORUOC
XUAEDACRHOBB
le code associé.

Code : Tout sélectionner

Enumeration
  #File
EndEnumeration

Lines=0
LineLen=0
Buffer$=""

Filtre$ = "Texte (*.txt)|*.txt"

Fichier$ = OpenFileRequester("Choisissez un fichier de mots à charger", "", Filtre$, 0)

If Fichier$
  ReadFile(#File, Fichier$)
  While Eof(#File) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
    Buffer$ =  ReadString(#File)      ; Affiche ligne par ligne le contenu du fichier
    Debug Buffer$
    Lines+1
    If Lines = 1
      LineLen = Len(Buffer$)
    EndIf
  Wend
  CloseFile(#File)
  
  Buffer$ = "le fichier "+Fichier$+" Contient "+Str(lines)+" lignes"+#CRLF$
  Buffer$ + "Chaque ligne à une longueur de "+Str(LineLen)+" caractéres."
  MessageRequester("Information", Buffer$)  
  
Else
  
  MessageRequester("Information", "La sélection a été annulée.", 0)
EndIf 
Peut être que tu pourrais donner un exemple d'un de tes fichiers de mots.
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
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pouvez-vous m'aider ?

Message par Ar-S »

Peut être que tu pourrais donner un exemple d'un de tes fichiers de mots.
Carrément :wink:
~~~~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
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message par Micoute »

Ok c'est juste pour l'exemple

MADAME
ABATTU
BACHER
OBTENU
ULTIME
LIMIER

et par exemple je veux CHER, le programme doit répondre X = 3, Y = 3
et si je tape DAME, il affichera X = 3, Y = 1 etc... par exemple BBD X = 1,Y = 3 , mais je pense que toute le monde a compris !!!

Mon problème c'est juste les diagonales.

là, il faut retrouver les groupes de lettres

0010111101abc110
d011101000101110
e000100011001001
f110111101010011
0110ihg110010110
11101001l0101101
00101110k1000110
10110101j0100101
1101011010111010
1101010111011101
0101101010110101
1110110111000010
0011000010111011
0001100011000110
1100110011001100
0000111100001111

Là, on n'a pas la même diagonale, je m'enfonce, je sais, mais je veux que tout le monde comprenne

mille excuses si je monopolise votre temps et mille mercis de vouloir m'aider, car j'ai vu que vous êtes à la hauteur de la tâche.
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 !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pouvez-vous m'aider ?

Message par Backup »

je suis en Vacance, mais je lis le forum .... :lol:

et franchement, je dis que t'a meme pas besoin de tableau pour faire ça !

tu as la fonction Findstring() qui peut te donner la place d'un mot dans une chaine$


de plus utiliser un tableau (DIM) n'est pas judicieux pour les diagonales

si tu regarde comment est fait un tableau de 6x6

ça donne

1-000000
2-111111
3-222222
4-333333
5-444444
6-555555

le fait de ne pas utiliser de tableau mais une seule et unique chaine va te simplifier la taches :

donc notre "tableau" deviens : 000000111111222222333333444444555555

du coup l'emploi de findstring deviens reellement efficace sur une seule chaine ! retrouver le debut de la ligne "222222" sera un jeux d'enfant !

pour les diagonale regarde : ( je reprends notre tableau et le mot a trouver sera les X )

1-X00000
2-1X1111
3-22X222
4-333X33
5-4444X4
6-55555X


mis en ligne ça donne : X000001X111122X222333X334444X455555X

si tu regarde bien tu vas t' apercevoir que les X (lettres du mot a trouver en diagonale ) sont espacés a chaque fois de 6 caracteres !! ( pour un tableau de 6x6 )

(et a 5 caracteres pour une diagonal inverse ...donc >>>> largeur tableau-1 )

bref trouver un mots en diagonal reviens a chercher toute les X position , cette position est déterminée par le premier X et ensuite par le PAS (step) qui correspond a la largeur du "tableau"
il se trouve qu'en Basic , la boucle For-next permet un saut (Step) ... mais d'autres méthodes existent (variable incrémenté ) ;)


bon cette fois , je me barre pour de bon en vacances :lol:
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 beaucoup, voila la réponse que j'attendais. Vraiment là je suis anges, car bien sûr que c'est la solution.
Encore merci de cette compétence qui vient de l'expérience et que vous partagez avec moi !
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 »

Dobro a écrit :je suis en Vacance, mais je lis le forum .... :lol:

et franchement, je dis que t'a meme pas besoin de tableau pour faire ça !

tu as la fonction Findstring() qui peut te donner la place d'un mot dans une chaine$


de plus utiliser un tableau (DIM) n'est pas judicieux pour les diagonales

si tu regarde comment est fait un tableau de 6x6

ça donne

1-000000
2-111111
3-222222
4-333333
5-444444
6-555555

le fait de ne pas utiliser de tableau mais une seule et unique chaine va te simplifier la taches :

donc notre "tableau" deviens : 000000111111222222333333444444555555

du coup l'emploi de findstring deviens reellement efficace sur une seule chaine ! retrouver le debut de la ligne "222222" sera un jeux d'enfant !

pour les diagonale regarde : ( je reprends notre tableau et le mot a trouver sera les X )

1-X00000
2-1X1111
3-22X222
4-333X33
5-4444X4
6-55555X


mis en ligne ça donne : X000001X111122X222333X334444X455555X

si tu regarde bien tu vas t' apercevoir que les X (lettres du mot a trouver en diagonale ) sont espacés a chaque fois de 6 caracteres !! ( pour un tableau de 6x6 )

(et a 5 caracteres pour une diagonal inverse ...donc >>>> largeur tableau-1 )

bref trouver un mots en diagonal reviens a chercher toute les X position , cette position est déterminée par le premier X et ensuite par le PAS (step) qui correspond a la largeur du "tableau"
il se trouve qu'en Basic , la boucle For-next permet un saut (Step) ... mais d'autres méthodes existent (variable incrémenté ) ;)


bon cette fois , je me barre pour de bon en vacances :lol:
Les vacances ça purifie l'esprit :mrgreen:
Bonne idée :P
~~~~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
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Pouvez-vous m'aider ?

Message par G-Rom »

@Dobro , si tu est à Tahiti , ramène moi la petite tahitienne que tu m'avais fait voir ( je ne l'ai pas oublié :D ) , je viendrais te rendre visite dans ton bled :D
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 »

G-Rom a écrit :@Dobro , si tu est à Tahiti , ramène moi la petite tahitienne que tu m'avais fait voir ( je ne l'ai pas oublié :D ) , je viendrais te rendre visite dans ton bled :D
Je plussoie :mrgreen:
~~~~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
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pouvez-vous m'aider ?

Message par Micoute »

J'ai de nouveau un soucis, l'idée de Dobro est excellente, mais il y a un inconvénient, je refais le schéma :

X00000
1X1111
22X222
333X33
4444X4
55555X

pas de problème si ma chaîne se situe à droite du X, mais si je fais :

000000
111111
X22222
3X3333
44X444
555X55

là, ça ne va plus, la boucle For va de 0 à LongueurFichier au pas de LongueurLigne + 1, qui notre cas est 7, comment pourrais-je faire pour lire le premier X qui est à la 12ème position ?

Je vous remercie tous pour votre bonne volonté.
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 !
Répondre