Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: TaLaP0 XoR BiT en 2 Diciembre 2012, 14:14 pm



Título: ayuda con este programa, tengo un error logico creo
Publicado por: TaLaP0 XoR BiT en 2 Diciembre 2012, 14:14 pm
bueno pues estoy haciendo un programa que me permita cifrar y descifrar un texto usando el cifrado de cesar. este es mi codigo:

Código:


#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <cstdio>
#include <cstring>


using namespace std;

int op;// opcion del menu
char ts;//centinela
char texto[50];
int desp=1,tam,aux;

//funcion que cifra

void cifra()
{
    cout<<"Indique el texto a cifrar: ";
    gets(texto);
    tam=strlen(texto);
    for(int i=0;i<tam;i++)
    {
      aux=texto[i];
      if(aux+desp>122)
      {
         aux=((aux+desp)-122)+96;
      }
      else
      {
          aux=aux+desp;
      }
      if(texto[i]!=' ')
      {
         texto[i]=aux;
      }
    }
    cout<<"Texto cifrado a: "<<texto;
    getch();
    }


//funcion que descifra

void descifra()
{

    cout<<"Indique el texto a descifrar: ";
    gets(texto);
    tam=strlen(texto);
    for(int i=0;i<tam;i++)
    {
     aux=texto[i];
      if(aux-desp<97)
      {
        aux=122-(96-(aux-desp));
      }
      else
      {
         aux=aux-desp;
      }
      if(texto[i]!=' ')
      {
         texto[i]=aux;
      }
    }
    cout<<"Texto descifrado a: "<<texto;
    getch();
    }



int main()
{
    do{
    
    cout<<"| cifra un mensaje, envialo a tus contactos |"<<endl;
    cout<<"| y solo ellos veran su contenido!!            |"<<endl;
    cout<<"|==============================================|"<<endl;
    cout<<"| Que deseas hacer??                           |"<<endl;
    cout<<"| 1.cifra un mensaje                        |"<<endl;
    cout<<"| 2.descifra el mensaje                     |"<<endl;
    cout<<"| 3.Sacame de aqui                             |"<<endl;
    cout<<"|==============================================|"<<endl<<endl;
    cout<<"Ingresa tu opcion: ";
    cin>>op;
   system("cls");
    switch (op){

            case 1:
                cifra();

                break;

            case 2:
                descifra();

                break;

            case 3:
                 cout<<"Realmente deseas salir, no ";
                break;

            default:
                cout<<"La Opcion elejida no existe. ";

                break;
    }

      cout<<"deseas realizar otra operacion? S/N"<<endl;
      cin>>ts;
      system ("cls");

    }while( ts=='s' || ts =='S');

    return 0;
}




ese es mi codigo la cuestion esta que las funciones cifra y descifra si me funcionan si las compilo por separado, pero cuando las uso llamandolas desde el main, cuando escogo por ejemplo la opcion 1, no me permite ingresar datos. cual sera mi error??. :huh: compilenlo y pruebenlo y me cuentan sus opiniones se los agradeceria muchisimo.


Título: Re: ayuda con este programa, tengo un error logico creo
Publicado por: leosansan en 2 Diciembre 2012, 14:59 pm
Citar
Un problema con el \n que se queda en el buffer, que se arregla con getchar.
Te que da por pulir el caso 3 y el default, ya que ambos te conducen a la última instrucción. Pero muy bien el ejercicio:
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <conio.h>
  4. #include <cstdio>
  5. #include <cstring>
  6.  
  7.  
  8. using namespace std;
  9.  
  10. int op;// opcion del menu
  11. char ts;//centinela
  12. char texto[50];
  13. int desp=1,tam,aux;
  14.  
  15. //funcion que cifra
  16.  
  17. void cifra()
  18. {
  19.    getchar();
  20.    cout<<"Indique el texto a cifrar: ";
  21.    gets(texto);
  22.    tam=strlen(texto);
  23.    for(int i=0;i<tam;i++)
  24.    {
  25.      aux=texto[i];
  26.      if(aux+desp>122)
  27.      {
  28.         aux=((aux+desp)-122)+96;
  29.      }
  30.      else
  31.      {
  32.          aux=aux+desp;
  33.      }
  34.      if(texto[i]!=' ')
  35.      {
  36.         texto[i]=aux;
  37.      }
  38.    }
  39.    cout<<"Texto cifrado a: "<<texto;
  40.    getch();
  41.    }
  42.  
  43.  
  44. //funcion que descifra
  45.  
  46. void descifra()
  47. {
  48.    getchar();
  49.    cout<<"Indique el texto a descifrar: ";
  50.    gets(texto);
  51.    tam=strlen(texto);
  52.    for(int i=0;i<tam;i++)
  53.    {
  54.     aux=texto[i];
  55.      if(aux-desp<97)
  56.      {
  57.        aux=122-(96-(aux-desp));
  58.      }
  59.      else
  60.      {
  61.         aux=aux-desp;
  62.      }
  63.      if(texto[i]!=' ')
  64.      {
  65.         texto[i]=aux;
  66.      }
  67.    }
  68.    cout<<"Texto descifrado a: "<<texto;
  69.    getch();
  70.    }
  71.  
  72.  
  73.  
  74. int main()
  75. {
  76.    do{
  77.  
  78.    cout<<"| cifra un mensaje, envialo a tus contactos |"<<endl;
  79.    cout<<"| y solo ellos veran su contenido!!            |"<<endl;
  80.    cout<<"|==============================================|"<<endl;
  81.    cout<<"| Que deseas hacer??                           |"<<endl;
  82.    cout<<"| 1.cifra un mensaje                        |"<<endl;
  83.    cout<<"| 2.descifra el mensaje                     |"<<endl;
  84.    cout<<"| 3.Sacame de aqui                             |"<<endl;
  85.    cout<<"|==============================================|"<<endl<<endl;
  86.    cout<<"Ingresa tu opcion: ";
  87.  
  88.    cin>>op;
  89.   system("cls");
  90.    switch (op){
  91.  
  92.            case 1:
  93.                cifra();
  94.  
  95.                break;
  96.  
  97.            case 2:
  98.                descifra();
  99.  
  100.                break;
  101.  
  102.            case 3:
  103.                 cout<<"Realmente deseas salir, no ";
  104.                break;
  105.  
  106.            default:
  107.                cout<<"La Opcion elejida no existe. ";
  108.  
  109.                break;
  110.    }
  111.  
  112.      cout<<"\ndeseas realizar otra operacion? S/N"<<endl;
  113.      cin>>ts;
  114.      system ("cls");
  115.  
  116.    }while( ts=='s' || ts =='S');
  117.  
  118.    return 0;
  119. }
Saluditos!.
P.D: cuando eliges las etiquetas GeSHi elige la opción de C++, aunque el código sea en C; así sale coloreado y es más fácil de seguir.


Título: Re: ayuda con este programa, tengo un error logico creo
Publicado por: TaLaP0 XoR BiT en 3 Diciembre 2012, 04:06 am
Leosansan gracias nuevamente por iluminar mi camino. Se agradece pulire el programa y seguire practicando mas. tomare en cuenta la sugierencia de c++ en Geshi. gracias.