Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [C / C++ / C#] » Dénombrement
Login Mot de passe

2 visiteurs sur ce topic (0 membre(s), 2 invité(s) )


Auteur
Sujet : Dénombrement
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.16 par jour)


Score :

Message du 21-06-2009 @ 17:06      Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Bonjour,

Je cherche à dénombrer des valeurs dans un tableau.

Je lis un tableau avec des valeurs numériques 1,1,3,1,45,5,12,36,1,2,45,5,5,12,88 etc. par exemple et je souhaite dans mon programme (langage C) compter le nombre de 1, de 3, de 5 etc.

Comment procéder ?

Merci pour votre entraide.
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -
Aquillon
Vétéran
Membre # 6518

 Avatar du membre
Lieu : Genève

Messages :
3749 (0.7 par jour)


Score :

Message du 22-06-2009 @ 11:20   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Tu fais un test quand tu lis un nombre et si c'est ok tu incrémentes un compteur ?
----------
- Haut de page -
bambino
Sage
Membre # 8669

 Avatar du membre
Lieu : lille

Messages :
1257 (0.24 par jour)




Message du 22-06-2009 @ 11:37   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Le probleme c'est qu'en C on ne connait pas forcement la longueur du tableau sauf si celle ci est passé en paramètre de la fonction.
Dès lors que tu connais la longueur du tableau, il n'y a plus spécialement de diffculté: un compteur ou tableau de compteur, et hop le tour est joué.
----------
Sachant que Woody Allen a déclaré: "Quand j'écoute Wagner, j'ai envie d'envahir la pologne", quelle musique écoute Georges Bush jr?
- Haut de page -
Flymann TTH
Vétéran
Membre # 11665

 Avatar du membre
Lieu : Dax / Rodez

Messages :
4512 (0.89 par jour)


Score :

Message du 22-06-2009 @ 11:44   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

bambino a écrit

Le probleme c'est qu'en C on ne connait pas forcement la longueur du tableau sauf si celle ci est passé en paramètre de la fonction.
Dès lors que tu connais la longueur du tableau, il n'y a plus spécialement de diffculté: un compteur ou tableau de compteur, et hop le tour est joué.



:???:

sizeof(tonTableau) ?

Après il y a des histoires de -1 vu qu'on part de 0 ou des trucs du genre, mais rien de folichon.

EDIT : Je pensais que ton problème se situait au niveau du tri du tableau de façon optimisé, mais j'ai percuté après, c'est juste un dénombrement que tu veux :aga:


[message édité le 22-06-2009 @ 11:45 Par Flymann TTH]
----------
Core2Duo E8400 @ 4,25Ghz + 1A-HV3 + Kit 1A, P5Q Pro + 1A nb, 2*2 Go G-skill @473Mhz 4-4-4-12
Sapphire 4870 + EKwaterblocks, Alim Seasonic S12 600W, Antec SuperLan Boy
DD Samsung - 4 x 500 Go RAID 0+5 - RAID 0 : 340Mo/s, 10ms - RAID 5 : 210Mo/s, 15ms
Panasonic CF-T4 - 12" P-m 1.2 ULV - 915GM - 1Go DDR2 - Momentus 5400 160Go ____ 22H d'autonomie avec 2 batteries
Nikon D700 + Nikkor AF-S 24-70mm f/2.8G ED + SB-900
- Haut de page -
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.16 par jour)


Score :

Message du 22-06-2009 @ 12:14   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Bonjour,

J'avais envisagé cette solution mais cela oblige "à poser" et tester un nombre. Je vais m'en contenter pour le moment.

J'ai essayé ce code mais je dois avoir un problème de taille de tableau.
Soit 5 fichiers placés sous /tmp, portant les noms suivants : J0, J1, J2, J3, J4, J5
Dans chaque fichier est écrit les valeurs suivantes :
18
12

Voici le code source :

Code :


#include <stdlib.h>
#include <stdio.h>

#define SIZE 4

int main()
{
   int j, cpt, number1, number2;
   int obs;
   int tab[10];
   char filename[3];
   FILE *file;
   
   for(j = 0; j <= SIZE; j++)
   {
      sprintf(filename,"/tmp/J%d",j);
      if ((file = fopen ( filename, "r" )) == NULL)
      {
         perror ("Impossible d'ouvrir le fichier.");
      }
      else
      {
         while ( fscanf ( file, "%d %d", &number1, &number2 ) == 2)
         tab[j] = number2;
         printf("tab[%d] = %d\n", j, tab[j]);
         fclose (file);
      }
   }
   printf("Numéro à compter ? ");
   scanf("%d",&cpt);
   
   /* compteur */
   obs = 0;
   for(j = 0; j <= SIZE; j++)
   {
      printf("tab[%d] = %d\n", j, tab[j]);
      if(tab[j] == cpt)
      {
         obs = obs + 1;
      }
   }
   printf("Total : %d\n", obs);
   return EXIT_SUCCESS;
}



La sortie est la suivante :

tab[0] = 12
tab[1] = 12
tab[2] = 12
tab[3] = 12
tab[4] = 12
Numéro à compter ? 12
tab[0] = 877277040
tab[1] = 0
tab[2] = 12
tab[3] = 12
tab[4] = 12
Total : 3

Pourquoi mon tableau est-il modifié ?

Merci bien

[message édité le 22-06-2009 @ 12:17 Par zorgh]
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -
Flymann TTH
Vétéran
Membre # 11665

 Avatar du membre
Lieu : Dax / Rodez

Messages :
4512 (0.89 par jour)


Score :

Message du 22-06-2009 @ 12:45   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

zorgh a écrit


J'avais envisagé cette solution mais cela oblige "à poser" et tester un nombre. Je vais m'en contenter pour le moment.



Il n'y a pas 150 000 façon de bien faire :aga:

Quand on a un tableau, peu importe le langage (enfin sans tomber dans du brain-fuck ou autre), dans toute boucle de parcours de tableau on utilise un monTableau.length() ou un sizeOf(monTableau).

Après on est pas obligé de déclarer une variable pour ça, en général, le compilateur est suffisamment intelligent pour éviter de faire un calcul à chaque tour de boucle :p


[message édité le 22-06-2009 @ 12:45 Par Flymann TTH]
----------
Core2Duo E8400 @ 4,25Ghz + 1A-HV3 + Kit 1A, P5Q Pro + 1A nb, 2*2 Go G-skill @473Mhz 4-4-4-12
Sapphire 4870 + EKwaterblocks, Alim Seasonic S12 600W, Antec SuperLan Boy
DD Samsung - 4 x 500 Go RAID 0+5 - RAID 0 : 340Mo/s, 10ms - RAID 5 : 210Mo/s, 15ms
Panasonic CF-T4 - 12" P-m 1.2 ULV - 915GM - 1Go DDR2 - Momentus 5400 160Go ____ 22H d'autonomie avec 2 batteries
Nikon D700 + Nikkor AF-S 24-70mm f/2.8G ED + SB-900
- Haut de page -
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.16 par jour)


Score :

Message du 22-06-2009 @ 13:06   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Il y a à priori une autre façon de faire via la technique du tri à paniers
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -
bambino
Sage
Membre # 8669

 Avatar du membre
Lieu : lille

Messages :
1257 (0.24 par jour)




Message du 22-06-2009 @ 14:27   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

montableau.length() c'est en java.

SizeOf(monTableau) te renvoie pas la taille du tableau, mais la taille du pointeur vers le tableau (Enfin si je me souviens bien de mes cours de C qui datent un peu :D ).
----------
Sachant que Woody Allen a déclaré: "Quand j'écoute Wagner, j'ai envie d'envahir la pologne", quelle musique écoute Georges Bush jr?
- Haut de page -
Flymann TTH
Vétéran
Membre # 11665

 Avatar du membre
Lieu : Dax / Rodez

Messages :
4512 (0.89 par jour)


Score :

Message du 22-06-2009 @ 14:28   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

zorgh a écrit

Il y a à priori une autre façon de faire via la technique du tri à paniers



Comme je le disais un peu plus haut, au départ j'ai cru que tu voulais faire un tri, ce qui demandes des algorithmes optimisés suivant le cas que nous avons à traiter.

Tu dis vouloir faire un "dénombrement" et non un tri.
Ici l'algorithme sert à faire un tri, ce qui au final ne te compte pas le nombre d'occurrence de tes "chiffres", mais te les trie dans un ordre (croissant ou décroissant suivant le tri).

:!!!:
----------
Core2Duo E8400 @ 4,25Ghz + 1A-HV3 + Kit 1A, P5Q Pro + 1A nb, 2*2 Go G-skill @473Mhz 4-4-4-12
Sapphire 4870 + EKwaterblocks, Alim Seasonic S12 600W, Antec SuperLan Boy
DD Samsung - 4 x 500 Go RAID 0+5 - RAID 0 : 340Mo/s, 10ms - RAID 5 : 210Mo/s, 15ms
Panasonic CF-T4 - 12" P-m 1.2 ULV - 915GM - 1Go DDR2 - Momentus 5400 160Go ____ 22H d'autonomie avec 2 batteries
Nikon D700 + Nikkor AF-S 24-70mm f/2.8G ED + SB-900
- Haut de page -
Flymann TTH
Vétéran
Membre # 11665

 Avatar du membre
Lieu : Dax / Rodez

Messages :
4512 (0.89 par jour)


Score :

Message du 22-06-2009 @ 14:33   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

bambino a écrit

montableau.length() c'est en java.

SizeOf(monTableau) te renvoie pas la taille du tableau, mais la taille du pointeur vers le tableau (Enfin si je me souviens bien de mes cours de C qui datent un peu :D ).



Citation

Utiliser l'opérateur sizeof() : l'opérateur sizeof() permet de retourner directement la taille de l'élément qui lui est passé en argument, ainsi en lui passant un tableau comme opérande, sizeof() est capable de vous retourner directement la taille de celui-ci



Cette fonction renvoie la taille de ton tableau...

EDIT :
http://en.wikipedia.org/wiki/Sizeof

Ou sur n'importe quel "man C" ;)


EDIT 2 : C'est gentil pour le code JAVA, mais bon je crois avoir suffisamment précisé que c'était un exemple sur "la programmation en général". J'ai bien précisé que le C nécessite un "sizeof".


[message édité le 22-06-2009 @ 14:35 Par Flymann TTH]
----------
Core2Duo E8400 @ 4,25Ghz + 1A-HV3 + Kit 1A, P5Q Pro + 1A nb, 2*2 Go G-skill @473Mhz 4-4-4-12
Sapphire 4870 + EKwaterblocks, Alim Seasonic S12 600W, Antec SuperLan Boy
DD Samsung - 4 x 500 Go RAID 0+5 - RAID 0 : 340Mo/s, 10ms - RAID 5 : 210Mo/s, 15ms
Panasonic CF-T4 - 12" P-m 1.2 ULV - 915GM - 1Go DDR2 - Momentus 5400 160Go ____ 22H d'autonomie avec 2 batteries
Nikon D700 + Nikkor AF-S 24-70mm f/2.8G ED + SB-900
- Haut de page -
bambino
Sage
Membre # 8669

 Avatar du membre
Lieu : lille

Messages :
1257 (0.24 par jour)




Message du 22-06-2009 @ 16:23   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Arf c'est donc mes cours de C qui datent. (et ma mémoire qui se transforme en gruyère.)
----------
Sachant que Woody Allen a déclaré: "Quand j'écoute Wagner, j'ai envie d'envahir la pologne", quelle musique écoute Georges Bush jr?
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.062 secondes