Mettre une liste chainée en global, c possible?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

Moi aussi j'suis nul et pourtant je me bats pas avec un écrase patate breveté !
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

:D excusez moi c'était juste pour faire un peu de vent... j'ai fais mon diablotin le temps d'un post :evil:
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

pas de mal Flype ! :D
Pacificator
Messages : 43
Inscription : mer. 15/déc./2004 16:28

Message par Pacificator »

J'aurai pas cru que ma question aurait alimenté un tel débat :lol:


en résumé, ce qui est pratique avec les global, c'est qu'on peut stocker un nombre destiné a être réutilisé. Et ce qui est bien avec les local, c'est qu'elles servent a faire les calculs intermédiaire...
Pacificator
Messages : 43
Inscription : mer. 15/déc./2004 16:28

Message par Pacificator »

j'ai fait un tableau dans un processusDLL dans ma lib
et apparemment ce tableau n'est pas accessible a partir du code principal...
Donc si j'ai bien compris, les linked list et les tableau, ne sont globaux qu'a condition que le procecus se trouve dans le code...
Est-il possible de rendre global un tableau généré a partir d'un procecusDLL ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

perso , je ne pense pas !

voici pourquoi
moi je vois les dll comme une procedure normale de ton programme principale sauf que tu serai obligé de mettre un DIM a l'interieur de cette procedure (un dll est une procedure exterieur au prog principal ) , comme cette procedure (la dll) est appelé en cas de besoin elle commencerai par le fameux dim qui initialise le tableau , donc , perte des valeurs qu'il contenait a l'appel precedent !
bref c'est comme si tu mettais a jour le tableau a chaque appel !!

par contre peut etre que ponctuellement on peut utiliser un tableau
qui se trouverai dans la dll , pour le temps d'utilisation de la fonction a l'interieur de la dll , mais des la sortie de la dll pour retour au prg principale
le prochain appel a ce tableau passerai necessairement par DIM qui a mon avis effacerai toute les valeurs !

je suis pas sur d'avoir ete clair la ! :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

A la place d'un tableau qui n'est accessible que depuis la dll, tu peux utiliser une structure, et tu donnes à chaque champ de la structure un paramètre comme pour un tableau.

Bon, je ne sais pas comment ça s'appelle, (moi, j'appelle ça un tableau de structures, mais ça n'engage que moi :lol: ), mais ça se présente comme ça:

Code : Tout sélectionner

Structure BIDON
  Baba.l[201]
  Bibi.l[201]
  Bobo.s[201]
EndStructure
Et dans ta dll, tu remplis ça un peu comme un tableau.

Code : Tout sélectionner

ProcedureDLL AppelBidon(Valeur.l, *test.BIDON)
  For i = 0 To 200
    *test\Baba[i] = Valeur * i
    *test\Bibi[i] = Valeur * (i * 5)
    *test\Bobo[i] = "Chaine " + Str(Valeur * i)
  Next
EndProcedure
Pour utiliser la dll dans ton programme principal

Code : Tout sélectionner

Structure BIDON
  Baba.l[201]
  Bibi.l[201]
  Bobo.s[201]
EndStructure

If OpenLibrary(0,"MaDll.dll")
  CallFunction(0,"AppelBidon", 15, @Valeur.BIDON)
  
  For i = 0 To 200
    Debug Str(Valeur\Baba[i]) + " --- " + Str(Valeur\Bibi[i]) + "  " + Valeur\Bobo[i]
  Next
  CloseLibrary(0)
EndIf
Bon, je sens que je vais encore me faire engueuler et qu'on va me dire: "Noooon!!!. Faut pas faire comme ça....!", mais chez moi, ça fonctionne sans problème.

Edité :
J'ai oublié!
Tu peux aussi mettre des chaines et des valeurs numériques dans la structure, comme avec une structure normale.
J'ai modifié le code en conséquence
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Voici un bel exemple de code avec récursivité qui nécessite un tableau
>> il faut placé ce code dans un dossier qui contient des sous dossiers

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :

#MaxFichier = 100
#MaxDossier = 50
Dim Dossier.s(#MaxFichier, #MaxDossier)
Dim Temp.s(#MaxFichier)

Structure InfoExplorer
  Dossier.s
  Type.l
EndStructure
NewList Explorer.InfoExplorer()

Global Position
Position = -1

Enumeration
  #Arbre
  #Explorer
EndEnumeration

#Arbre_X = 250
#Arbre_Y = 300

#Win_X = #Arbre_X
#Win_Y = #Arbre_Y

Procedure ListeDossier(Numero, Dossier.s, PositionDepart)
  
  If n > #MaxDossier
    MessageRequester("Erreur", "Dépassement de capacité des dossiers", 0)
    End
  EndIf
  
  If ExamineDirectory(Numero, Dossier, "*.*")
    
    ;- Analyse du contenu du dossier
    
    Cpt_Dossier = -1
    
    Repeat
      
      FileType = NextDirectoryEntry()
      Nom.s = DirectoryEntryName()
      
      If FileType = 2 And Nom <> "." And Nom <> ".."
        Cpt_Dossier + 1
        If Cpt_Dossier > #MaxFichier
          MessageRequester("Erreur", "Dépassement de capacité des fichiers", 0)
          End
        EndIf
        
        Temp(Cpt_Dossier) = Nom
        
      EndIf
      
    Until FileType = 0
    
    ;- Triage des fichiers et dossiers
    SortArray(Temp(), 2, 0, Cpt_Dossier)
    
    ; Transfert
    For n = 0 To Cpt_Dossier
      Dossier(n, Numero) = Temp(n)
    Next
    
    ;- Affichage
    
    For n = 0 To Cpt_Dossier
      Position + 1
      AddElement(Explorer())
      Explorer()\Dossier = Dossier + Dossier(n, Numero) + "\"
      Explorer()\Type = Numero
      AddGadgetItem(#Arbre, Position, Dossier(n, Numero))
      OpenTreeGadgetNode(#Arbre)
      ListeDossier(Numero + 1, Dossier + Dossier(n, Numero) + "\", Position)
      CloseTreeGadgetNode(#Arbre)
    Next
    
    ; On ouvre le noeud
    SetGadgetItemState(#Arbre, PositionDepart, #PB_Tree_Expanded)
    
  EndIf
EndProcedure


;/ Début du programme

;- Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, #Win_X, #Win_Y, #PB_Window_Invisible | #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget, "Logithèque") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf

;- Gadgets
TreeGadget(#Arbre, 0, 0, #Arbre_X, #Arbre_Y, #PB_Tree_AlwaysShowSelection)
ListeDossier(0, "", 0)

HideWindow(0, 0)

Repeat
  Event = WaitWindowEvent()
  
Until Event = #PB_EventCloseWindow
Le but du tableau est simple : trié les sous dossier de chaque dossier et les affiché avec récursivité jusqu'à ce qu'il n'y est plus de sous dossier.

donc pour chaque dossier, je rempli le tableau avec les sous dossier, je les trie (SortArray) et j'affiche

Et bien pour m'en sortir, au lieu d'avoir un tableau Dim Machin(1000)
j'ai un tableau Dim(Machin, Recursif)
la variable "Recursif" étant différente pour chaque appel de la procedure.
Cela me permet d'avoir un tableau "local" (mais simulé) pour chaque appel de la procedure.
Dans le cas contraire, à chaque appel de la procedure "récursive fille", j'écrase les infos contenu dans le tableau qui servent à la procedure "récursive mère"
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Pas mal :D
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

je pense que les tableaux/listes pourront etre locaux avec PB v4.0. C'est une grosse limitation à mon avis.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Fred a écrit :je pense que les tableaux/listes pourront etre locaux avec PB v4.0. C'est une grosse limitation à mon avis.
:D :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

C'est une grosse limitation à mon avis.
:D les grand esprits se rencontre ! :lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

extra :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

je pense que les tableaux/listes pourront etre locaux avec PB v4.0. C'est une grosse limitation à mon avis.
:?:

Ca ne peut être une limitation, dans la mesure où on a le choix entre global et local .
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ca ne peut être une limitation, dans la mesure où on a le choix entre global et local
je ne pense pas que Fred parle de la possibilitée , mais de l'utilitée ! :D
Répondre