Programme en c qui permet le calcul d'entropie

Résolu
chuupa8 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour! je veux faire un programme en c qui me permettra de calculer l'entropie d'un texte ( ce programme calculera le nombre de caractere du texte, la frequence d'apparition de chaque lettre, la probabilité d'apparition de chaque lettre et enfin l'entropie)

2 réponses

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Nous ne feront pas votre exercice à votre place.
Merci de décrire précisément votre problème et en postant le code déjà réalisé.

Cliquez ici pour des conseils d'écriture des messages et ici concernant les devoirs scolaires ou PFE.

Pour poster votre code, merci de penser à la coloration syntaxique.
0
chuupa8 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
ofet jai deja realisé un code mais je ne sai pas cest quoi exactement le probleme ca ne marche pas (je veux determiner le nombre d'occurence de chaque lettre de lalphabet)



#include <stdio.h>
#include <stdlib.h>
void count(const char* str, int nb_letters[26])
{
while (*str != '\0')
{
++str;
}
}

void print(int nb_letters[26])
{
char c = 0;
for (c ='a';c<='z';c++)
printf("%c => %i\n", c, nb_letters[c - 'a']);
}

int main()
{
char ch[50] = {0};
int nb_letters[26] = {0};

printf("donnez une chaine ch\n");
scanf("%s",ch);

count(ch, nb_letters);
print(nb_letters);

system("PAUSE");
return 0;


}
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,
Il suffit de comptabiliser chaque lettre dans la boucle par :
if ( *str >= 'a' && *str <= 'z' )
    nb_letters[*str - 'a']++;
else if ( *str >= 'A' && *str <= 'Z' )
    nb_letters[*str - 'A']++;
0
chuupa8 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Dalfab regarde ca ne marche toujour pas quand je ais l'execution tous les caracteres sont a zero



#include <stdio.h>
#include <stdlib.h>
void count(const char* str, int nb_letters[26])
{
while (*str != '\0')
{
// remplir nb_letters correctement ici.
++str;
}
}

void print(int nb_letters[26])
{
char c = 0;
for (c ='a';c <='z'; c++)
printf("%c => %d\n", c, nb_letters[c - 'a']);

// c - 'a'permet de convertir un code ascii en numéro. Exemple: 'a' - 'a' => 0, 'b' - 'a' => 1, etc...
}

int main()
{ int c;
char ch[50] = {0};
int nb_letters[26] = {0};

printf("donnez une chaine ch\n");
scanf("%s",ch);

if (c >= 'a' && c <= 'z' )
nb_letters[c - 'a']++;
else if ( c >= 'A' && c <= 'Z' )
nb_letters[c - 'A']++;

count(ch, nb_letters);
print(nb_letters);

system("PAUSE");
return 0;


}
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
@chuupa8 : tu es sûr que c'est toi qui as écrit la fonction
count()
et le commentaire qu'elle contient ?
0
Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
int main() 
{ int c; 
char ch[50] = {0}; 
int nb_letters[26] = {0}; 

printf("donnez une chaine ch\n"); 
scanf("%s",ch); 

if (c >= 'a' && c <= 'z' ) 
nb_letters[c - 'a']++; 
else if ( c >= 'A' && c <= 'Z' ) 
nb_letters[c - 'A']++; 

count(ch, nb_letters); 
print(nb_letters); 

system("PAUSE"); 
return 0; 


}


Tu ne remplis jamais c, comment tu veux que ta condition fonctionne?
0
chuupa8 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   > [Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention  
 
le commentaire cest moi ki l'ai ecri parck un ami m'a di cest quoi le role de count() et je l'ai ecri pour mieu vous expliqué ce que jai fai
0
chuupa8 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   > Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention  
 
sisii pierre j'ai rempli le c.. ofet je suis nouvelle dans ces affaire de programmation du coup je ne maitrise pas bien le language
0