Bonjour tout le monde,
Je suis un débutant en PB et j’ai le problème suivant:
J’ai rempli un tableau avec des chiffres, et j’aimerai compter combien de fois le même chiffre se trouve dans ce tableau. (Tableau chiffres)
L’idée est un tableau en 2 dimentions (Tableau nombre)
Le nom nombre devra être inscrit dans le champ A1.1, celui du nombre de fois dans le champ A1.2
Par exemple:
Tableau chiffres : 1 ;2 ;2 ;3 ;3 ;5 ;7 ;7 ;8 ;8 ;8 ;8 ;9 ;10
Tableau nombre (A1.1) 1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9 ;10 ;11 ;etc….
Tableau nombre (A1.2) 1 ;2 ;2 ;0 ;1 ;0 ;2 ;4 ;1 ;1 ;0
Qui peut m’aider ??
Merci par avance.
Compter les chiffres
pour compter de chiffres de 0 a 9 une façon serais de procéder ainsi
Code : Tout sélectionner
Dim table(9,9) ; cree un tableau a deux dimension contenant les chiffres
;---------------------------
Debug "tableau généré"
For y=0 To 9
For x=0 To 9
table(x,y)=Random(9) ; remplis le tableau avec des chiffres de facon aleatoire
a$=a$+"["+Str(table(x,y))+"]"
Next
Debug a$
a$=""
Next
Debug "---------------------------"
Dim count(9); crée un tableau pour le compte des chiffres
For x=0 To 9
For y=0 To 9
count(table(x,y))=count(table(x,y))+1 ; ajoute 1 au compteur du chiffre contenu a la position du tableau
Next
Next
Debug "chiffres comptes"
For a=0 To 9
Debug "["+Str(a)+"]"+" : "+Str(count(a))
Next
Compter les chiffres
Exactement ce qu'il me fallait.
Merci Case
Merci Case
Code : Tout sélectionner
For x=0 To 9
For Y=0 To 9
count(table(x,Y))=count(table(x,Y))+1 ; ajoute 1 au compteur du chiffre contenu a la position du tableau
Next
Next

je serai parti sur des if .... alors que c'etait si simple !!

vraiment bien joué !!

je n'ai pas l'habitude d'utiliser les tableaux de cette façon, mais c'est vrais que c'est vraiment cool !

une idée pour de grands chiffres (65 000) passer par une chaine de caractères et compter le nombre d'occurence.
Code : Tout sélectionner
#Chiffre_max=100
Dim tableau.l(#Chiffre_max) ; contiendra les chiffres
chaine.s="" ; contiendra la liste des chiffres sous forme de chaine
; création d'un tableau de chiffres
For i=0 To #Chiffre_max-1
tableau(i)=Random(#Chiffre_max)
chaine=chaine+";"+Str(tableau(i)) ; concaténation des chiffres ";chiffre....
Debug tableau(i)
Next
chaine=chaine+";" ; on finit la chaine
; on compte les chiffres
Debug chaine
For i=0 To #Chiffre_max-1
Debug Str(i)+ "==> Qté : "+ Str(CountString(chaine,";"+Str(i)+";"))
Next
; après on reprend ton code pour MAJ les tableaux
je pense que passer par une chaine c'est plus lent surtout si tu as un grand tableau a traiter
car tu dois déjà parcourir l'ensemble du tableau pour créer ta chaine
et ensuite chercher dans la chaine les occurrences de chaque chiffre
voir ce post très intéressant sur le forum anglais au sujet des strings et leur vitesse pour ceux qui comprenent l'anglais
http://www.purebasic.fr/english/viewtopic.php?t=30630
enfin un nombre sur 32bit occupe 4 octets en mémoire et vas de 1 a 4294967295 ce qui prendrais 10 octets dans une chaine sans compter les separateurs bien sur un tableau pour compter de tels chiffres prendrais plus de 17GO si mes calculs sont exacts
bref il faut vraiment adapter le code suivant ses besoins
car tu dois déjà parcourir l'ensemble du tableau pour créer ta chaine
et ensuite chercher dans la chaine les occurrences de chaque chiffre
voir ce post très intéressant sur le forum anglais au sujet des strings et leur vitesse pour ceux qui comprenent l'anglais
http://www.purebasic.fr/english/viewtopic.php?t=30630
enfin un nombre sur 32bit occupe 4 octets en mémoire et vas de 1 a 4294967295 ce qui prendrais 10 octets dans une chaine sans compter les separateurs bien sur un tableau pour compter de tels chiffres prendrais plus de 17GO si mes calculs sont exacts

bref il faut vraiment adapter le code suivant ses besoins
