voila le code de départ donc jai un problème lorsque je donne la chaîne source sous cette forme "ababababab" normalement il m'affiche 10ababababab mais c'est pas le cas
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
char first[36],
med[36],
last[36];
int i, occ,s, j,z, deb, vrai = 1, entrer = 0;
int l, k;
float taux,y;
//char chaine[37];
//Fonction qui lit une chaine de caracteres
void ecriture(char t[], int n)
{
printf("\nDonner la chaine : ");
scanf("%s",first);
printf("\n");
l=strlen(first);
}
//Fonction qui permet d'afficher la chaine
void lecture(char t[],int n)
{
printf("\nAffichage de la chaine initiale : ");
for(i = 0 ; i < n ; i++)
printf("%c",t[i]);
printf("\n\n");
}
//Fonction de compression en RLE
void compressionRLE()
{
i = 0; j = 0;
printf("\nAffichage de la chaine intermediaire : ");
while(i < l)//Tant que ce n'est pas la fin de la chaine
{
occ = 1;
//Tant que les caracteres se ressemblent et que ce n'est pas la fin du tableau
while(first[i] == first[i+1] && i < l)
{//On calcule le nombre d'occurrence
occ++;
i++;
}
med[j] = occ;
printf("%d",med[j]);
med[j+1] = first[i];
printf("%c",med[j+1]);
j = j + 2;
i++;
}
printf("\n\n");
printf("\nAffichage de la chaine finale : ");
i = 0; k = 0, deb = 0;
while(i < j)
{
if(med[i] >= 3)
{
//Traiter le cas de non repetition
if(entrer == 1)
{
occ = 0;
s = deb;
while(s < i)
{
occ = occ + med[s];
s = s + 2;
}
last[k] = occ;
printf("%d",last[k]);
k++;
s = deb;
while(s < j && med[s] < 3)
{
for(z = 0; z < med[s]; z++)
{
last[k] = med[s+1];
printf("%c", last[k]);
k++;
}
s = s + 2;
}
entrer = 0;//On la remet a zero puisqu'on a traiter la sequence
}
//traiter le cas de redondance
occ = med[i] + 128;
printf("%d",occ);
//last[k] = occ;
//printf("%d",last[k]);
last[k+1] = med[i+1];
printf("%c", last[k+1]);
k = k + 2;
}
else
{
if(vrai == 1)//Si c'est le 1er nbr < 3 de la sequence
deb = i;//On garde le debut de la chaine qui se repete pas
entrer = 1;//Variable qui permet de savoir si on est entre dans ce bloc
vrai = 0;
}
i = i + 2;
}
//Si il reste des caracteres qui se repetent pas a la fin
if(entrer == 1)
{
occ = 0;
s = deb;
while(s < i)
{
//printf("occ : %d\n",occ);
//printf("med[%d] : %d\n",s,med[s]);
occ = occ + med[s];
s = s + 2;
}
last[k] = occ;
printf("%d", last[k]);
k++;
for(s = deb; s < l; s++)
{
last[k] = med[s];
printf("%c",last[k]);
k++;
}
entrer = 0;//On la remet a zero puisqu'on a traiter la sequence
}
printf("\n\n\n");
printf("lespace iniale est %d \n",l);
printf("lespace copresse est %d \n",k);
y=(k/l);
taux=1-y;
printf("le taux est %f",taux);
printf("\n\n");
}
int main()
{
lecture(first,l);
ecriture(first,l);
compressionRLE();
return 0;
}
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI
Merci d'y penser dans tes prochains messages. |