Programme en C sur Linux
marsilla02
-
cijad Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
cijad Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
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 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:
- Programme en C sur Linux
- Programme demarrage windows - Guide
- Linux reader - Télécharger - Stockage
- Mettre en veille un programme - Guide
- Toutou linux - Télécharger - Systèmes d'exploitation
- Message programmé iphone - Guide
1 réponse
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
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.
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èresi 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.