Page 1 sur 1

Compter les chiffres

Publié : sam. 19/janv./2008 16:21
par langa68
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.

Publié : sam. 19/janv./2008 17:12
par case
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

Publié : sam. 19/janv./2008 17:36
par langa68
Exactement ce qu'il me fallait.

Merci Case

Publié : sam. 19/janv./2008 17:47
par case
le seul inconvénient c'est que pour compter des nombres de 0 a 65000 par exemple il faudra dimentioner le tableau count a 65000

ce n'est pas vraiment genant de nos jours avec la memoire disponible mais bon :)

Publié : sam. 19/janv./2008 19:05
par Backup

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
tres ingenieux !! :D

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

vraiment bien joué !! :D

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

Publié : sam. 19/janv./2008 19:43
par Jeff
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

Publié : sam. 19/janv./2008 20:19
par case
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 :)