Justification d'un texte

Contenu du snippet

Etant donné un texte écrit de façon aléatoire on veut le justifier sur une ligne de longueur X.
Un texte est dit justifié si toutes ses lignes sont justifiées.
Une ligne est dite justifiée si son dernier mot se termine a la position X.

Source / Exemple :


REALISE PAR GHASSEN EL HADJ

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
void remplir_tab(FILE *text,int nbmot[25],int nb_esp_res[25],int *lig,char **nom_fich);
void justif(FILE *text,FILE *temp1,int nbmot[25],int lig,char *nom_fich);
void ajout_espace(FILE *temp1,FILE *temp,int nbmot[25],int nb_esp_res[25],int lig);

//____________PROGRAMME PRINCIPALE______________//

void main()
{
clrscr();
FILE *text;
FILE *temp;
FILE *temp1;
int lig;
int nbmot[25];
int nb_esp_res[25];
char *nom_fich;

remplir_tab(text,nbmot,nb_esp_res,&lig,&nom_fich);
justif(text,temp1,nbmot,lig,nom_fich);
ajout_espace(temp1,temp,nbmot,nb_esp_res,lig);
printf("le chemin du texte justifi? est: c:\temp.txt");
getch();
}

//_____________________________________________//

void remplir_tab(FILE *text,int nbmot[25],int nb_esp_res[25],int *lig,char **nom_fich)
{
int x,nbcar,j,i;
char c;

printf("Donner le chemin complet du fichier qui contient le texte a justifier: ");
scanf("%s",nom_fich);
if ((text=fopen(*nom_fich,"r"))==NULL)
   printf(" \n erreur ? l'ouverture, ce fichier n'existe pas");
else
   {
      printf("donnez la longueur de la ligne: ");
      scanf("%d",&x);

  • lig=0;
nbcar=0; do { nbmot[*lig]=0; nb_esp_res[*lig]=x; j=x-nbcar; do { c=fgetc(text); j--; nbcar++; if (c==' '||c=='\n') { nb_esp_res[*lig]-=nbcar; if (j==0) nb_esp_res[*lig]+=1; nbmot[*lig]++; nbcar=0; } if (j==0) { c=fgetc(text); nbcar++; if (c==' '||c=='\n') { nbmot[*lig]++; nb_esp_res[*lig]-=nbcar-1; nbcar=0; } if (nb_esp_res[*lig]>1) nb_esp_res[*lig]+=1; } } while (j!=0&&!feof(text)); (*lig)++; /* compteur pour le nb de lignes */ } while(!feof(text)); printf("lig= %d\n",*lig); for (i=0;i<*lig;i++) { printf("nbmot[%d]= %d ",i,nbmot[i]); printf("nb_esp_res[%d]= %d\n",i,nb_esp_res[i]); } fclose(text); } } //__________________________________________// void justif(FILE *text,FILE *temp1,int nbmot[25],int lig,char *nom_fich) { int i,mot; char c; temp1=fopen("c:\\temp1.txt","w"); text=fopen(nom_fich,"r"); for (i=0;i<lig;i++) { mot=nbmot[i]; do { c=fgetc(text); if (c!='\n') { if (mot!=1) fputc(c,temp1); else { if (c!=' ') fputc(c,temp1); } } if (c==' '||c=='\n') mot--; if (c=='\n') fputc(' ',temp1); } while (mot>0); fputc('\n',temp1); } fclose(text); fclose(temp1); } //__________________________________________// void ajout_espace(FILE *temp1,FILE *temp,int nbmot[25],int nb_esp_res[25],int lig) { int i,j; float esp; char c; temp=fopen("c:\\temp.txt","w"); temp1=fopen("c:\\temp1.txt","r"); for (i=0;i<lig;i++) { esp=ceil((float)nb_esp_res[i]/(nbmot[i]-1));//nb d'espaces a ajouter entre les mots printf("espace a ajouter a la ligne %d : %2.0f\n",i+1,esp); do { c=fgetc(temp1); fputc(c,temp); if (c==' ') { for (j=1;j<=esp&&nb_esp_res[i]>0;j++) //ajout des espaces { fputc(' ',temp); nb_esp_res[i]--; } } } while (c!='\n'&&c!='\o'); printf("\n"); } fclose(temp); fclose(temp1); }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.