Chiffrement de césar

rama340 Messages postés 15 Date d'inscription dimanche 4 avril 2010 Statut Membre Dernière intervention 30 novembre 2012 - 28 nov. 2012 à 21:41
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 29 nov. 2012 à 13:31
bonsoir,voici mon petit programme qui représente le chiffrement de césar; le programme bugs en exécution et je ne sais pas pour quoi! . Quelqu'un pouvez maider ?
merci d'avance.
*****************
#include<stdio.h>
#include<string.h>
void remplire(char tab_cesar[],int n){
int j;
tab_cesar[0]='A';
for(j=1;j<27;j++)
tab_cesar[j]= tab_cesar[j]+1;
}
main(){
char Tab_msg[80];
char Tab_cesar[27];
int i,j,n,k;

printf(" \n entrez K ");
scanf ("%d", &k);

printf(" \n entrez votre message: ");
scanf("%s",Tab_msg);

while (Tab_msg[i] != '.'){
if((Tab_msg[i]>=65) && (Tab_msg[i]<=90)){
for(j=0;j<27;j++){

Tab_msg[i]= Tab_cesar[j+ k]% 26;
}
}
else
printf(" \n votre message est non correct ");
}
printf(" \n votre nouveau message est :%s", Tab_msg);

getchar();
return 0;
}
A voir également:

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 nov. 2012 à 22:11
Bonsoir,
Il bug peut-être, mais ce n'est pas un bug de :
Forum > CodeS-SourceS > A propos des sites CodeS-SourceS > Un bug sur CodeS-SourceS




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
29 nov. 2012 à 07:32
Bonjour, tu ne précises même pas le langage utilisé, même s'il est mieux comme le fait remarquer ucfoutu de poster directement dans le bon forum!

Pour plus de lisibilité, la prochaine fois que tu postes un code utilises la balise de coloration syntaxique, (3ième icône en partant de la droite : )

J'ai cru reconnaitre du C alors ça donnerais ça:
#include<stdio.h> 
#include<string.h> 
void remplire(char tab_cesar[],int n){ 
int j; 
tab_cesar[0]='A'; 
for(j=1;j<27;j++) 
tab_cesar[j]= tab_cesar[j]+1; 
} 
main(){ 
char Tab_msg[80]; 
char Tab_cesar[27]; 
int i,j,n,k; 

printf(" \n entrez K "); 
scanf ("%d", &k); 

printf(" \n entrez votre message: "); 
scanf("%s",Tab_msg); 

while (Tab_msg[i] != '.'){ 
if((Tab_msg[i]>=65) && (Tab_msg[i]<=90)){ 
for(j=0;j<27;j++){ 

Tab_msg[i]= Tab_cesar[j+ k]% 26; 
} 
} 
else 
printf(" \n votre message est non correct "); 
} 
printf(" \n votre nouveau message est :%s", Tab_msg); 

getchar(); 
return 0; 
} 


Et en cas de copier coller directement depuis ton environnement de programmation, l'indentation est conservée.

Whismeril
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
29 nov. 2012 à 13:14
Hello,
le programme bugs en exécution et je ne sais pas pour quoi!

Zut! Ma boule de cristal est au SAV...désolé...
...
Bon, plus sérieusement, il est où le problème? As-tu essayé ton programme en Debug, pas à pas?

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 nov. 2012 à 13:31
Bonjour.

Plusieurs soucis:
- main() => int main(void)
- Tu oublies d'incrémenter i
- Pour savoir jusqu'où itérer sur ta boucle principale, récupère la taille de Tab_msg via strlen, plutôt que de rechercher un '.'
- Le message "votre message est non correct" s'affiche pour chaque caractère ! Il ne devrait pas s'afficher du tout. Un caractère qui n'est pas entre a-zA-Z devrait être laissé tel quel.
- "if((Tab_msg[ i]>=65) && (Tab_msg[ i]<=90))" peut s'écrire "if((Tab_msg[ i]>='a') && (Tab_msg[ i]<='z'))"

Au niveau du code, on a vraiment l'impression que tu mets bout à bout des morceaux que tu ne comprends pas (méthode inutilisée, inversion de variables).

Au niveau de la technique, un seul tableau, et une seule boucle suffisent ! Il te suffit de directement modifier le tableau donné par l'utilisateur. Le tableau avec 27 éléments ne sert à rien (pourquoi 27 et pas 26 d'ailleurs ? Ça n'a pas de sens).
En voyant ceci: "Tab_cesar[ j + k] % 26", on sent que tu ne maîtrise pas ton sujet. (Tu confonds avec (tab_cesar[ j ] + k) % 26). Je pourrais certe, t'écrire une solution élégante (en très peu de ligne), mais ça ne t'aiderait pas. À la place je vais t'écrire le squelette du programme, que je vais te laisser compléter.
Je t'invite à revoir les tableaux et ce qu'est la table ASCII.

#include <stdio.h>
#include <string.h>

void clearBuffer()
{
  char ch = 0;
  while ((ch = getchar()) != EOF && ch != '\n')
    ;
}

void cesar(char* msg, int shift)
{
  int i = 0;
  int size = strlen(msg);

  while (i < size)
  {
    /* A compléter */
    ++i;
  }
}

int main(void)
{
  char msg[64] = {0};
  int shift = 0;

  printf("Entrez le decalage: ");
  scanf("%d", &shift);
  clearBuffer();

  printf("Entrez votre message: ");
  scanf("%[^\n]s", msg);

  cesar(msg, shift);
  printf("Votre nouveau message est: %s\n", msg);

  return 0;
}




________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Rejoignez-nous