Programme en C sur Linux

Fermé
marsilla02 - 11 mars 2008 à 13:45
cijad Messages postés 30 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 8 mai 2008 - 12 mars 2008 à 02:14
Bonjour, je dois réaliser un programme de C sur linux. Le programme consiste à coder un texte dont on donne le nom du fichier le contenant en argument. Ce programme doit mettre les caractères en majuscule et il doit modifier le texte de la façon suivante:
A devient D, B devient E, C devient F, etc. Tout autre caractère ne doit pas être afficher, y compris les lettres accentuées. Pour coder les caractères, je n'ai pas eu de problème, mais je n'arrive à supprimer tout autre caractère. Autre problème, je dois répartir le texte sur des blocs de 512 octets, mais je n'arrive qu'à travailler sur un seul bloc. Pouvez-vous m'aider? Merci d'avance.

Voici le programme:
#include <stdio.h>


int main(int argn, char *argv[])

{
char buf [513];
char tab[513];

int j,i,var,lu,x;

// Ouverture du fichier
FILE *f;

f = fopen(argv[1],"r");

j=0;
// Initialisation du tableau à 0
for(i=0;i<=lu;i++)

{

tab[i]=0;

}

do

{

var=feof(f);

lu=fread(buf,x,512,f);


// Mise en majuscule des caractères

for(i=1;i<=lu;i++)

{

buf[i] = toupper(buf[i]);

}



//Encodage

for(i=0;i<=lu;i++)

{

if ((buf[i]>'A') && (buf[i]<'W'))

tab[j]=buf[i]+3;


else if (buf[i]='X')

tab[j]='A';

else if (buf[i]='Y')

tab[j]='B';

else if (buf[i]='Z')

tab[j]='C';


j++;


}


x=x+512;


}

while (var != 0);




printf("%s\n",tab);

}
A voir également:

1 réponse

cijad Messages postés 30 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 8 mai 2008 60
12 mars 2008 à 02:14
lut,

bon pour ce qui est de l'encodage et des caractères laissés de côtés, j'aurais tout rassemblé en une opération en utilisant le code ascii au max
if(car>96 && car<123) car=(car-96+3)%26+64 ;
else car=32;//met un espace a la place du caractère
si tu veux l'explication : a vaut 97 et z 122, donc si tu soustais 96 ça te donne le numéro du caractère dans l'alphabet français, quand tu lui ajoute 3 pour décaler de trois lettres, %26 donne le reste de la division par 26 autrement dis si tu dépasse 26 tu recommence à 1 (pas besoin de test) enfin tu ajoute 64 pour revenir au code ascii mais en commence aux lettres majuscules cette fois (A vaut 65 et Z vaut 90). L'espace c'est 32. Je te laisse réécrire ça pour ton exos.

Par contre pour le fait qu'il ne fasse qu'une longueur je ne sais pas trop, j'ai lu rapidemment. Peut etre ton affichage devait etre dans la boucle pour qu'il te sorte chaque serie de 512 caractères, làje crois qu'il ne te rend que la dernière... je ne suis pas sur.
0