Cryptage de cesar sur c++

Résolu
juniordiaw Messages postés 7 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 20 juillet 2010 - 24 juin 2010 à 23:37
juniordiaw Messages postés 7 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 20 juillet 2010 - 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]);

}
}

8 réponses

juniordiaw Messages postés 7 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 20 juillet 2010
25 juin 2010 à 11:32
merci je vais le corriger pour voir ce que sa va donner.
cptpingu Messages postés 3839 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 29 juin 2024 124
24 juin 2010 à 23:53
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]
juniordiaw Messages postés 7 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 20 juillet 2010
25 juin 2010 à 00:20
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]);

}
}
cptpingu Messages postés 3839 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 29 juin 2024 124
25 juin 2010 à 11:06
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]

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juniordiaw Messages postés 7 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 20 juillet 2010
26 juin 2010 à 14:57
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.
cptpingu Messages postés 3839 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 29 juin 2024 124
28 juin 2010 à 11:33
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]
cptpingu Messages postés 3839 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 29 juin 2024 124
9 juil. 2010 à 14:22
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
juniordiaw Messages postés 7 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 20 juillet 2010
13 juil. 2010 à 13:48
merci a toi
Rejoignez-nous