Détection et correction d'erreur

Fermé
paul02524 Messages postés 1 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 2 janvier 2015 - Modifié par crapoulou le 2/01/2015 à 14:14
Bonjour,

Je n'arrive pas à faire la fonction Decodertriple et je ne suis pas sûr que ma fonction encodertriple soit juste. Pourriez-vous m'aider svp ?

Voici mon code déjà écrit :
#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;
}


l'énoncé se trouve ici : https://www.cjoint.com/c/EAbtp4iGAJa

merci pour votre aide :)
Paul