[RESOLU]Entre Structrure et DIM

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Entre Structrure et DIM

Message par falsam »

J’espère que je ne plante pas dans ce code.

:arrow: Objectif :
-Obtenir la taille d'une structure
-Création de 1 000 000 d'éléments dans la liste chaînée.
-Obtenir la taille en Mega Octets de la liste chaînée.

Code : Tout sélectionner

Structure Test
  field1.s
  field2.s
  field3.s
EndStructure

Debug "Taille de la structure" + Str(SizeOf(Test)) + " Octets"


Global NewList MyTest.test(), Result.i

For N=1 To 1000000
  Result = AddElement(MyTest())
  
  If Result <> 0
    MyTest()\field1 = "Field1 " + Str(N)
    MyTest()\field2 = "Field2 " + Str(N)
    MyTest()\field2 = "Field3 " + Str(N)
  Else
    MessageRequester("Ooops !!!", "Impossible d'allouer de la mémoire pour le nouvel élément")
    Break
  EndIf 
Next

Debug "Nombre d'éléments " +Str(ListSize(Mytest()))

Debug Str(ListSize(MyTest())) + " élements occupant " + StrF((ListSize(MyTest())*SizeOf(Test))/1024/1024,2) + " Mo"
Résultat 11,44 Mo
Dernière modification par falsam le jeu. 21/mars/2013 15:09, modifié 1 fois.
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
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Entre Structrure et DIM

Message par omega »

J'obtiens une erreur ici:

Code : Tout sélectionner

Debug Str(ListSize(MyTest())) + " élements occupant " + StrF((ListSize(MyTest())*SizeOf(Test))/1024/1024,2) + " Mo"
J'ai changé cette ligne par debug n (car c'est ce nbre qui m'intéresse le plus, pour l'instant)
et je sais que, au moins le maxi>=1000000 (sur ma config évidemment)
La liste a atteint les 1000000 mais je ne comprends pas pourquoi debug m'affiche 10000001 au lieu de 1000001... (encore qq chose de bizarre...)

1000000 (itérations) + 1 (maxi+1)= 1000001 et non pas 10000001 ??
Win7 (x64) 64 bits Pb 5.72
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Entre Structrure et DIM

Message par Backup »

omega a écrit :
J'ai changé cette ligne par debug n (car c'est ce nbre qui m'intéresse le plus, pour l'instant)

La liste a atteint les 1000000 mais je ne comprends pas pourquoi debug m'affiche 10000001 au lieu de 1000001... (encore qq chose de bizarre...)

1000000 (itérations) + 1 (maxi+1)= 1000001 et non pas 10000001 ??

au lieu de lancer des soupçons de bug , pourquoi ne donnes tu pas ton code que nous puissions voir, ou TU te plante ?
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Entre Structrure et DIM

Message par omega »

@Dobro

Le code est déjà affiché ci-dessus (celui de Falsam)

Je le reprends ici (avec une seule ligne modifiée à cause d'un bug à mon niveau)

Code : Tout sélectionner

Structure Test
  field1.s
  field2.s
  field3.s
EndStructure

Debug "Taille de la structure" + Str(SizeOf(Test)) + " Octets"


Global NewList MyTest.test(), Result.i

For N=1 To 1000000
  Result = AddElement(MyTest())
  
  If Result <> 0
    MyTest()\field1 = "Field1 " + Str(N)
    MyTest()\field2 = "Field2 " + Str(N)
    MyTest()\field2 = "Field3 " + Str(N)
  Else
    MessageRequester("Ooops !!!", "Impossible d'allouer de la mémoire pour le nouvel élément")
    Break
  EndIf 
Next

;cette ligne ci-dessous étant l'originale que j'ai remplacée par un debug n
;Debug Str(ListSize(MyTest())) + " élements occupant " + ;StrF((ListSize(MyTest())*SizeOf(Test))/1024/1024,2) + " Mo"

Debug n

Win7 (x64) 64 bits Pb 5.72
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Entre Structrure et DIM

Message par Backup »

ben il semble qu'il y ai un BUG de Purebasic 8O

ceci ne devrai pas ecrire "1000001" mais bien 1000000

Code : Tout sélectionner

For N=1 To 1000000
Next  N

Debug n
j'ai posé la question sur le Forum Anglais ...

je dirai que c'est due au fait que les boucle for-next compte a partir de zero ... mais j'attends confirmation :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Entre Structrure et DIM

Message par falsam »

omega a écrit :La liste a atteint les 1000000 mais je ne comprends pas pourquoi debug m'affiche 10000001 au lieu de 1000001... (encore qq chose de bizarre...)
Rien de bizarre. C'est le principe d'une boucle for ..Next

Code : Tout sélectionner

For k = 0 To 10 
  Debug k
Next

Debug k
La boucle est interrompue dès que la valeur de k est supérieure à 10. Pour cela, k aura pris la valeur 11.
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%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Entre Structrure et DIM

Message par Backup »

oui c'est ce que dit SkyWalk sur le forum anglais :)

donc un simple

Code : Tout sélectionner

For N=1 To 1000000
Next  N

Debug n-1
corrige le bleme :lol:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Entre Structrure et DIM

Message par falsam »

Dobro a écrit :oui c'est ce que dit SkyWalk sur le forum anglais :)
Dans l'aide aussi c'est dit. :mrgreen:
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
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Entre Structrure et DIM

Message par falsam »

Pour connaitre le nombre d'éléments d'une liste chaînée, utilise la fonction ListSize()

Ce qui donne pour ton code

Code : Tout sélectionner

Debug "Nombre d'éléments " +Str(ListSize(Mytest()))
A placer en dessous de Next.

J'ai corrigé le code initial.

Je viens de voir que tu utilises ListSize() dans ton code. Le bug vient de là ? si oui Quel version de Purebasic ?
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
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Entre Structrure et DIM

Message par omega »

Rien de bizarre. C'est le principe d'une boucle for ..Next
Non Falsam, relis bien ma remarque: j'ai dit qu'il fallait que le programme affiche

1000001 (1 million +1)

et non pas

10000001 (10 millions +1)??

Je crois que le système a fait afficher :

Str(n) + str(1) ce qui donne bien "1000000" + "1" ="10000001"

Je viens de voir que tu utilises ListSize() dans ton code. Le bug vient de là ? si oui Quel version de Purebasic ?
Oui, effectivement, le problème vient de là (pb 4.2) dans l'aide, ListSize n'existe pas

J'ai testé sur un autre pc (mais je vais tester sur mon portable où la version est plus récente)
Win7 (x64) 64 bits Pb 5.72
Répondre