Partage
  • Partager sur Facebook
  • Partager sur Twitter

détection et correction d'erreurs

2 janvier 2015 à 15:11:41

bonjour, pourriez-vous m'aider pour un exercice svp ? 

le fichier : http://cjoint.com/?EAbtp4iGAJa

Mon code : 

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

typedef struct Donnees Donnees;
struct Donnees
{
char donnees[256]; 
unsigned int taille;
};

void simulerTransmission(Donnees * resultat, const Donnees * donnees, float stabilite)
{
 const unsigned int max = 10000; 
 unsigned int i = 0; 
 resultat->taille = donnees->taille;
 for(i = 0; i < donnees->taille; i++)
 {
  if (rand() % max >= max * stabilite)
   resultat->donnees[i] = donnees->donnees[i] == '0' ? '1' : '0';
  else
   resultat->donnees[i] = donnees->donnees[i];
 }
 
}

void afficherDonnees(const Donnees * donnees)
{

unsigned int k;
    for (k =0 ; k < donnees-> taille ; k++)
    {
        printf("%c",donnees->donnees[k]);
    }
}


void encoderTriple(Donnees * resultat, const Donnees * donnees)
{
 unsigned int k,j;
    int i=0;
    resultat->taille = donnees->taille*3;
    for( k = 0; k < donnees->taille; k++)
    {
        for( j= 0; j < resultat->taille; j++)
            resultat->donnees[i]= donnees->donnees[k];
            i++;
            resultat->donnees[i]= donnees->donnees[k];
            i++;
            resultat->donnees[i]= donnees->donnees[k];
            i++;
    printf("%d\n", i);
        printf("%d\n", j);
        }
}
void decoderTriple(Donnees * resultat, const Donnees * donnees)
{
unsigned int p,m;
int o; 
o = 0;
resultat -> taille = donnees -> taille / 3; 

for( p = o; p < donnees -> taille; p++)
    {
        resultat -> donnees[o] = donnees -> donnees[p];
        o+=3;
        
        printf("%d\n", o);
        printf("%d\n", m);
    }
}

void encoderParite(Donnees * resultat, const Donnees * donnees, unsigned int n)
{
 
}
int verifierParite(const Donnees * donnees, unsigned int n)
{
 
}

void test ()
{
Donnees donnees = {"110010001011", 12}, triple, parite, tripleAltere, pariteAltere, tripleReconstruit;
 int resultatParite, resultatTriple;
 
 encoderTriple(&triple, &donnees); 
 encoderParite(&parite, &donnees, 3); 
 
 simulerTransmission(&tripleAltere, &triple, 0.8); 
 simulerTransmission(&pariteAltere, &parite, 0.8); 
 
 decoderTriple(&tripleReconstruit, &tripleAltere);
 resultatParite = verifierParite(&pariteAltere, 3);
 
 resultatTriple = strncmp(donnees.donnees, tripleReconstruit.donnees, donnees.taille);
 
 printf("Chaine de données originale: ");
 afficherDonnees(&donnees);
 printf("\n\nAprès codage 'triple bit': ");
 afficherDonnees(&triple);
 printf("\nAprès codage 'bit de parité': ");
 afficherDonnees(&parite);
 
 printf("\n\nAltération du codage 'triple bit': ");
 afficherDonnees(&tripleAltere);
 printf("\nAltération du codage 'bit de parité': ");
 afficherDonnees(&pariteAltere);
 printf("\n\n");
 

 printf("Après décodage 'triple bit': ");
 afficherDonnees(&tripleReconstruit);
 if(resultatTriple == 0) 
  printf(" == ");
 else
  printf(" != ");
 afficherDonnees(&donnees);
  
  
 printf("\n");
 if(resultatParite)
  printf("Le codage 'bit de parité' n'a pas détecté une altération de la chaine de données originale.\n");
 else
  printf("Le codage 'bit de parité' a détecté une altération de la chaine de données originale.\n");

}


int main (void)
{
 test();
 
 return 0;
}

Je suis bloqué à la fonction decodertriple :(

merci pour votre aide :)

  • Partager sur Facebook
  • Partager sur Twitter
3 avril 2023 à 13:24:18 - Message modéré pour le motif suivant : Merci d’utiliser le bouton code pour inséré un code sur le forum


3 avril 2023 à 15:41:06

La totale !

Déterrage, spam du sujet d'un autre,  pas de question, pas de balise code ...

  • Partager sur Facebook
  • Partager sur Twitter
...
3 avril 2023 à 15:53:57

Bonjour,

Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Déterrage & bingo

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)