Cryptage de cesar sur c++ [Résolu]

juniordiaw 7 Messages postés jeudi 24 juin 2010Date d'inscription 20 juillet 2010 Dernière intervention - 24 juin 2010 à 23:37 - Dernière réponse : juniordiaw 7 Messages postés jeudi 24 juin 2010Date d'inscription 20 juillet 2010 Dernière intervention
- 13 juil. 2010 à 13:48
bjr a tous g un problemea vec mon code o faite lorske g rentre un letre il me la crypte mai sil sagi dun mo ou dune phrase il ne crypte ke la premiere letre voici le code o faite g suis nvo en domaine de programmation
c un cryptage de cesar avec un saut de 3 letre cest a dir a => d et b=>e


#include <cstdlib>
#include
#include <conio.h>
#include <string>

using namespace std;

char recherche(char c);

int main(int argc, char *argv[])
{
char txt;

cout << "Saisir texte ";
cin >> txt;

cout <<"Texte crypte : "<< recherche(txt) <<"\n";

system("PAUSE");
return EXIT_SUCCESS;
}

char recherche(char c)
{
char tab[26],i;
int j=0;

for(i='a'; i<='z';i++)
{
tab[j]=i;
j++;
}

for (j=0; j <= 25; j++)
{
if (tab[j]==c)
return tab[j+3];
else if (j==23)
return (tab[0]);
else if (j==24)
return (tab[1]);
else if (j==25)
return (tab[2]);

}
}
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
juniordiaw 7 Messages postés jeudi 24 juin 2010Date d'inscription 20 juillet 2010 Dernière intervention - 25 juin 2010 à 11:32
3
Merci
merci je vais le corriger pour voir ce que sa va donner.

Merci juniordiaw 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de juniordiaw
cptpingu 3797 Messages postés dimanche 12 décembre 2004Date d'inscription 13 août 2018 Dernière intervention - 24 juin 2010 à 23:53
0
Merci
Pas de langage sms. Fais un effort d'orthographe. Voir le règlement: http://www.cppfrance.com/reglement.aspx

Pas d'effort, pas de réponse.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu
juniordiaw 7 Messages postés jeudi 24 juin 2010Date d'inscription 20 juillet 2010 Dernière intervention - 25 juin 2010 à 00:20
0
Merci
Bonjour à tous j'ai un probleme avec mon code au faite lorsque je rentre un léttre il me la crypte mais s'il sagit d'un mot ou d'une phrase il ne crypte que la premiere léttre voici le code.Au faite je suis nouveau en domaine de programmation
c'est un cryptage de cesar avec un saut de 3 léttre par exemple: a => d et b=>e


#include <cstdlib>
#include
#include <conio.h>
#include <string>

using namespace std;

char recherche(char c);

int main(int argc, char *argv[])
{
char txt;

cout << "Saisir texte ";
cin >> txt;

cout <<"Texte crypte : "<< recherche(txt) <<"\n";

system("PAUSE");
return EXIT_SUCCESS;
}

char recherche(char c)
{
char tab[26],i;
int j=0;

for(i='a'; i<='z';i++)
{
tab[j]=i;
j++;
}

for (j=0; j <= 25; j++)
{
if (tab[j]==c)
return tab[j+3];
else if (j==23)
return (tab[0]);
else if (j==24)
return (tab[1]);
else if (j==25)
return (tab[2]);

}
}
Commenter la réponse de juniordiaw
cptpingu 3797 Messages postés dimanche 12 décembre 2004Date d'inscription 13 août 2018 Dernière intervention - 25 juin 2010 à 11:06
0
Merci
1) On ne dit pas cryptage, mais chiffrement. Cryptage ne veut rien dire.
2) Attention, ici tu vas chiffrer un caractère mais pas une chaîne de caractère.
3) #include <cstdlib>, #include <conio.h> et #include <string> sont inutiles.
4) N'utilise jamais "using namespace std;", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
5) Pas la peine de faire plein de "if", utilise un modulo (%) pour éviter de déborder.

Ex:
char tab[] = "abc";

tab[0] => 'a'
tab[1] => 'b'
tab[2] => 'c'

Si tu veux rester entre 0 et 2, il te suffit de faire un modulo de la taille du tableau:

tab[0 % 3] => tab[0] => 'a'
tab[1 % 3] => tab[1] => 'b'
tab[2 % 3] => tab[2] => 'c'
tab[3 % 3] => tab[0] => 'a'
tab[4 % 3] => tab[1] => 'b'
tab[5 % 3] => tab[2] => 'c'
etc...

Donc pour ton exercice, il te suffit de faire un modulo 26.

Tu peux directement écrire l'alphabet plutôt que de la calculer:
static const char tab[] = "abcdefghijklmnopqrstuvwxyz";

Pour trouver le début du tableau, tel que 'a' == 0, il suffit de soustraire 'a'.
Donc si tu fais ch - 'a', tu obtiens une position.
Ex:
Si ch 'a', alors ch - 'a' 'a' - 'a' == position 0
Si ch 'b', alors ch - 'a' 'b' - 'a' == position 1
Si ch 'c', alors ch - 'a' 'c' - 'a' == position 2
etc...

Ensuite, avec un simple modulo, tu devrais facilement t'en sortir:
tab[(ch - 'a' + j) % 26]

Essaie de corriger ton erreur et poste ton programme corrigé. On regardera ensemble comment l'améliorer.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu
juniordiaw 7 Messages postés jeudi 24 juin 2010Date d'inscription 20 juillet 2010 Dernière intervention - 26 juin 2010 à 14:57
0
Merci
merci pour ton aide mais pour te dire je sais même pa ou est ce qu'il faud mettre ces corrections au faite mon problème est je suis nouveau et je dirais que c'est 4ieme cour de c++ et le prof avance trop vite.donc si tu peut être plus clair et plus précis ça m'aidera beaucoup par ce que je suis un grand commencent en c++.ce code je lais fait en traduisant un algo et avec laide de mon livre mai même ça je me retrouve pas du tout.
Commenter la réponse de juniordiaw
cptpingu 3797 Messages postés dimanche 12 décembre 2004Date d'inscription 13 août 2018 Dernière intervention - 28 juin 2010 à 11:33
0
Merci
Il n'y a pas de corrections toute faite. Je t'ai juste expliqué le principe. Donc après, c'est à toi de le coder.
Avec ce que je t'ai donné, c'est amplement suffisant pour réussir à chiffrer un caractère.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu
cptpingu 3797 Messages postés dimanche 12 décembre 2004Date d'inscription 13 août 2018 Dernière intervention - 9 juil. 2010 à 14:22
0
Merci
Pour ceux qui tomberais sur cette page, la réponse à la question est celle-ci:
(J'ai fait exprès de mettre du temps à répondre afin de laisser juniordiaw chercher la solution par lui même)

#include 

static const char symbol[] = "abcdefghijklmnopqrstuvwxyz";

char convert(char c, int shift)
{
  if (c < 'a' || c > 'z')
    return c;

  return symbol[(c - 'a' + shift) %
(sizeof (symbol) - 1)];
}

std::string convert(const std::string& s, int shift)
{
  std::string res;
  res.resize(s.size());
  for (unsigned int i = 0; i < s.size(); ++i)
    res[i] = convert(s[i], shift);

  return res;
}

int main()
{
  std::string txt;
  const int shift = 3; // choix de la valeur de décalage

  std::cout << "Saisir texte ";
  std::cin >> txt;

  std::cout << "Texte: "<< txt << std::endl
    << "Texte chiffré: " << convert(txt, shift) << std::endl;

  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 quand un post répond à votre question
Commenter la réponse de cptpingu
juniordiaw 7 Messages postés jeudi 24 juin 2010Date d'inscription 20 juillet 2010 Dernière intervention - 13 juil. 2010 à 13:48
0
Merci
merci a toi
Commenter la réponse de juniordiaw

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.