Page 1 sur 2
tableau, liste chainée, procédure...
Publié : lun. 03/mai/2004 19:57
par Pierre
1) bon alors comment j'échange des données entre 2 procédures seulement (ou plus si je veut)?
les données: tableaux, listes chainées
parce que j'ai regardé shared, global ok pour les variables mais pour les tableaux, les listes chainées
2) ça existe les listes chainées a 2 dimensions? (je me suis encore jamais servi des listes chainées)
tiens, c'est la 1ére fois que je poste dans une section débutant!
(remarque, je suis débutant quand ça m'arrange!)
merci pour les réponses (et merci de ne pas rigoler pour mes questions)
Publié : lun. 03/mai/2004 20:03
par cederavic
1) les tableau et liste chainée sont alloués dynamiquement donc global
2) non ça n'existe pas

Publié : lun. 03/mai/2004 20:09
par Chris
...(je me suis encore jamais servi des listes chainées)
Ben tu devrais essayer, parce que c'est super pratique, et on ne peut pas faire plus simple!
Chris

Publié : lun. 03/mai/2004 20:15
par Pierre
Merci
donc je vais me farcir encore des tableaux... ...sinon mon idée:
je lis mon fichier, dès que je suis a la fin d'une ligne je met un caractère spécial et je dirais a mon programme que ce caractère signifie un passage au début de la ligne d'en dessous...
avez vous bien compris mon explication?
bonne ou mauvaise idée?
Publié : lun. 03/mai/2004 20:18
par Chris
Si les lignes dont tu parles sont celles de ton fichier, il suffit d'appeler ReadString(), et chaque ligne est lue l'une après l'autre.
Chris

Publié : lun. 03/mai/2004 20:41
par Pierre
je me suis mal exprimé,
j'ai un tableau a 2 dimensions:
tab(y,x)
Y: c'est le numéro de la ligne
X: dans mon prog je stocke tous les caractères de la ligne 1 par 1 dans X
si je veux remplacer ça par des listes chainées, mon idée:
dès que j'arrive a la fin d'une ligne je passe a celle d'en dessous (quand je stocke mes données)(dans le tableau du dessus si j'arrive a la fin de X, je met +1 a Y)
donc si dans les listes chainées c'est pas comme mon tableau a 2 dimensions et ben dès que j'arrive a la fin d'une ligne et ben je met un caractère qui voudra dire que c'est la fin de la ligne,
donc quand je regarde ce que contient ma liste chainée tout est en 1 seule ligne (mes caractères sont séparés) donc quand je regarde ce que contient ma liste chainée, dès que j'arrive a mon caractère qui indique la fin de ligne et ben je sais qu'après c'est la ligne d'en dessous
j'ai toujours du mal a m'expliquer...
pis pour ceux qui comprennent pas je ferais p'têtre un exemple ce week-end
mais je pense pas que c'est une super bonne idée...
Publié : lun. 03/mai/2004 20:52
par Flype
Salut Pierre
mais je pense pas que c'est une super bonne idée...
ouais moi non plus
et puis il faudrait savoir si tes "lignes" ont toujours le meme nombre de caractères ou pas forcement
en tout cas savoir si toutes les lignes sont de la meme longueur que la 1ere ligne
et j'entrevois un peu (faut décrypter quoi

) ce que tu veux faire
tu ferais mieux nd'y aller cash avec les pointeurs et les accès mémoire.
genre, en gros :
*MemoireTampon = AllocateMemory( TailleDeMonFichier )
ReadFile( 0, "MonFichier" )
ReadData( *MemoireTampon, TailleDeMonFichier )
et ensuite qqchose comme çà :
MaValeur.b = PeekB( *MemoireTampon + IndexMemoire )
enfin çà se discute, çà dépend de ton truc...
Publié : lun. 03/mai/2004 21:01
par Pierre
bah en fait je vais rêflèchir a ça parce que la y a mon lit qui m'appelle
donc je vais trouver une solution (j'en ferais part demain)
Publié : lun. 03/mai/2004 21:25
par Chris
Ce que tu voudrais, c'est un truc dans ce genre là ?
Code : Tout sélectionner
NewList MaListe.s(); Crée une nouvelle liste
;- On va faire une liste avec 10 elements, chaque éléments contiendra une ligne
For Ligne = 0 To 9 ; On ajoute une ligne
Chaine.s = "" ; Vide la chaine
AddElement(MaListe()); Ajoute un element à MaListe()
;- Toute cette partie ne sert qu'à construire des chaines.
;- elle est inutile dans le cas ou tu lis les lignes
r = Random(20)+1
For i = 0 To r ;i représente "un certain nombre" de caractère par ligne
C = Random(25)+65
MonCaractere.s = Chr(C)
Chaine.s + MonCaractere+"," ;Ajoute le caractère à la chaine
Next
Chaine = Left(Chaine,Len(Chaine)-1); vire la virgule à la fin
;-
MaListe() = Chaine; Attribue la valeur de chaine à l'élément
Next ; et rebelote, jusqu'à la fin
;- Controle
i = 1
ForEach MaListe()
Debug "Chaine "+Str(i)+" = "+ MaListe()
i + 1
Next
Bon, là, je crée les chaines. mais j'aurais aussi pu aller les chercher dans un fichier, ou dans des datas.
Je sais pas trop si j'ai bien compris.
Chris

Publié : mar. 04/mai/2004 6:42
par cederavic
ou un truc dans ce genre :
Code : Tout sélectionner
Structure blabla
Line.l
Content.s
EndStructure
NewList List.blabla()
OpenFile(0, "blablabla.txt")
Repeat
AddElement(List())
t + 1
List()\Line = t
List()\Content = ReadString()
Until Eof(0)
ForEach List()
Debug "Ligne " + Str(List()\Line) + " : " + List()\Content
Next
Publié : ven. 07/mai/2004 19:33
par Pierre
Salut,
ouais, bon, si je met en mémoire des lignes n'ayant pas les mêmes longueurs (je me comprend)
il faudrait que je stocke la longueur de chaque ligne, donc je vais faire en sorte que ces lignes soit toutes de même longueurs
sinon, Merci a vous pour ces réponses
Publié : ven. 07/mai/2004 20:14
par Flype
ce serait abusé de dire que je te connais bien pierre
mais je suis sûr que tu va faire 10 x trop compliqué...
c'est quoi le fichier que tu veux charger ?
un format à toi ? une map pour un jeu ? un fichier de preferences ?
si tu veux dis moi exactement ce que tu cherches à faire et je t'aiderai

Publié : sam. 08/mai/2004 6:54
par Pierre
non, la c'est pas compliqué ce que je fait:
j'ai un fichier texte contenant ça (pour l'instant, c'est pour tester) :
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
0 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0
0 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0
0 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0
0 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0
0 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0
1 espace = 0
1 chiffre = 1 numéro de sprite
les chiifres peuvent aller de 0 a 999 (3 chiffres)(j'ai pas besoin de plus que ça!)
donc avec mon code je récupère ce qu'il y a dans le fichier (je prend les chiffres du fichier 3 par 3)
ça donne:
sprite numéro:
001
002
...
et je met ces chiffres dans un tableau, et j'affiche (j'explique pas ce que je fait pour afficher, pas besoin, c'est bien comme ça!(puis y en a trop a expliquer!))
c'est clair les explications?
Publié : sam. 08/mai/2004 11:29
par nico
Par curiosité, le partage de donnée entre processus, c'est entre un programme Pure Basic et un ????

Publié : sam. 08/mai/2004 12:52
par Flype
@pierre
donc tu peux avoir un fichier comme çà si je comprends bien :
1 2 3 4 5 6 7 8 9 0 111 226 3 4 5 6 7 8 9 0
0 9 8 7 6 5 440 3 2 1 1 2 3 4 5 6 7 8 9 0
0 999 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 831 9 0
0 9 8 7 6 5 4 33 2 1 1 200 3 4 5 6 7 8 9 0
0 9 8 7 6 5 4 369 2 1 100 2 3 4 541 6 7 8 9 0
0 9 800 7 655 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0
les lignes ont leur importance ou à la limite toutes les lignes pourraient etre collées sur la meme ?