paul02524
Messages postés1Date d'inscriptionjeudi 1 janvier 2015StatutMembreDerniè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;
}