Compter les chiffres

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
langa68
Messages : 56
Inscription : dim. 29/avr./2007 16:03

Compter les chiffres

Message 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.
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Message 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
Avatar de l’utilisateur
langa68
Messages : 56
Inscription : dim. 29/avr./2007 16:03

Compter les chiffres

Message par langa68 »

Exactement ce qu'il me fallait.

Merci Case
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Message 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 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 ! :)
Jeff
Messages : 72
Inscription : sam. 13/mai/2006 18:09

Message 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
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Message 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 :)
Répondre