Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

#631
A mí error, lo que se dice error, no meda. Otra cosa es que lo que pareces querer, que el string se componga de tantos signos + como la longitud de uno no funciona como en los arrays, sino que hay que hacer uso de .append o, como bien comenta amchacon en el siguiente post, de +=, para ir guardando/creando memoria. Otra cosa distinta es acceder a los elementos de un string ya creado como en un array, que sí se puede. Una salida como ejemplo aclaratorio;

Código (cpp) [Seleccionar]

ingrese uno
12345
+
++
+++
++++
+++++
12345  +++++


Código (cpp) [Seleccionar]

#include<iostream>
#include<string>

using  namespace std;

int main ()
{
   int i=0;
   string uno;
   string dos;
   cout<<"ingrese uno "<<endl;
   getline(cin, uno);
   for ( i = 0; i <uno.size(); i++)
{
dos.append("+");
cout<<dos<<endl;
}
   cout<<uno<<"  "<<dos<<endl;
   return 0;
}


Saluditos!
#632
Cita de: cpu2 en 14 Junio 2013, 12:22 PM
Código (asm) [Seleccionar]
ret

¿ret?, en C/C++ lo que yo conozco es return. Y aún así no funciona. ¿Podrías indicarnos que programa usas para programar en ensamblador?.

Y puestos a buscar soluciones "curiosas" me dio por encontrar una solución en que sólo se sume y reste el desplazamiento y sin más librería que stdio. Eso sí, he tenido que usar un "señor" array, pero conseguí el propósito mencionado:


Código (cpp) [Seleccionar]
#include <stdio.h>
int main(void)
{
   char frase[256] = {0};
   int i=0,j=0,desplazamiento=0;
   char abc[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"};
   while(1)
   {
       printf("Ingrese una cadena: ");
       fgets (frase,255,stdin);
       do
       {
           puts("Ingrese desplazamiento: (1-25) ");
           scanf ("%d",&desplazamiento);
           while (getchar()!='\n');
       }while (desplazamiento<0 || desplazamiento>25);
       for(i = 0; frase[i]; i++)
       {
           for(j = 0; j<26; j++)
           {

               if ( frase[i]==' ')
                   break;
               if (frase[i]==abc[j])
               {
                   frase[i] =  abc[j+ desplazamiento];
                   break;
               }
           }
           for(j = 78; j<104; j++)
           {

               if ( frase[i]==' ')
                   break;
               if (frase[i]==abc[j])
               {
                   frase[i] =  abc[j+ desplazamiento];
                   break;
               }
           }
       }
       printf("Cadena cifrada: %s\n\n", frase);
       for(i = 0; frase[i]; i++)
         {
           for(j = 52;j<78 ; j++)
           {
               if ( frase[i]==' ')
                   break;
               if (frase[i]==abc[j])
               {
                   frase[i] =  abc[j- desplazamiento];
                   break;
               }
           }
           for(j = 130;j<156 ; j++)
           {
               if ( frase[i]==' ')
                   break;
               if (frase[i]==abc[j])
               {
                   frase[i] =  abc[j- desplazamiento];
                   break;
               }
           }
       }
       printf("Cadena descifrada: %s\n", frase);
   }
   return 0;
}


Saluditos!

#633
Ya que no usamos strstr, ¿para qué hacer uso de la librería string?. Ya puestos lo hacemos todo "a pelo":

Código (cpp) [Seleccionar]
#include <stdio.h>
int main(void)
{
   char cadena[60]="hola no es ni aholal hola sino hola ni halo y si holahola",
   cadena1[]="hola";
   int i,j,cont=0,num2=0;
   for (i=0;cadena1[i];i++)
       num2++;
   for (i=0 ; cadena[i];i++)
       if (cadena[i]==cadena1[0] &&  cadena[i-1]==' ' || i==0 )
           {
               for (j=1;j<=num2-1 ;j++)
                   {
                       if (cadena[i+j]!=cadena1[j]) break;
                       if (j == num2-1 && cadena[i+num2]==' ')
                       {
                           cont++;
                           printf ("\nEncontrada la palabra \"%s\" en la posicion %d",cadena1,i+1);
                       }
                   }
           }
   printf ("\nEncontradas %d coincidencias.",cont);
   return 0;
}


    Saluditos!
   

#634
Además de lo comentado por , tienes de sobra el bucle para cuando son igualea, porque te hace entrar en en bucle sin salida.
[quote author=Sobrelouis123 link=topic=392565.msg1861407#msg1861407 date=1371238348]
.........................................................................
   while (numero == nombreMystere)
   {
       printf("Has ganado!");
   }
}



Funcionado, sin apenas modificar tu código original sería:

Código (cpp) [Seleccionar]
#include <stdlib.h>
#include <time.h>

int main()
{
   const int MAX = 100, MIN = 1;
   int numero = 0;
   int nombreMystere = 0;
   srand(time(NULL));
   nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
   puts("Quel est le nombre? ");
   scanf("%d", &numero);

       while (numero > nombreMystere)
       {
           puts("Menos! Intenta otra vez");
           scanf("%d", &numero);
       }
       while (numero < nombreMystere)
       {
           puts("Mas! Intenta otra vez");
           scanf("%d", &numero);
       }
       puts("Has ganado!");
       return 0;
}


Saluditos!.


#635

Un "collage" con las propuestas de cypascal y CCross reunidas pero con función:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <ctype.h>
void cesar (char *cadena , int letra, int des);
int main()
{
    int  des=0, letra=0;
    char cadena[256]={0};
    puts("Ingrese una cadena: ");
    gets (cadena);
    //fgets (cadena,255,stdin);
    do
    {
        puts("\nIndica el desplazamiento: ");
        scanf ("%d",&n);
        while (getchar()!='\n');
    }while (n<0 || n>25);
    cesar (cadena,97,des);
    printf("\nCifrado es: %s \n", cadena);
    cesar (cadena,122,-des);
    printf("\nDecifrado es: %s \n", cadena);
    return 0;
}
void cesar (char cadena[] , int letra, int des)
{
    int i,letra1=0;
    for(i = 0; cadena[i]; i++)
     {
        if ( cadena[i]==' ')
            continue;
        letra1=letra;
        if(isupper(cadena[i])!=0)
            letra1-=32;
        cadena[i] =((cadena[i]-letra1+des)%26)+letra1;
      }
}


Saluditos!
   


P.D:

Cita de: cpu2 en 13 Junio 2013, 01:13 AM
Creo que esto bastará, no programo en windows.

Código (cpp) [Seleccionar]
char *cesar (char *ptr)

{

__asm
..............
}

¿Una función char que no retorna nada?.
#636
Cita de: cpu2 en 12 Junio 2013, 23:23 PM
El cifrado César lo único que hace para cifrar es sumar 3 a cada carácter y para descifrar restar, por lo que he leido.

Pues no, no es añadir estrictamente 3 sino un valor que el usuario indique. Vamos que es variable.

Cita de: cpu2 en 12 Junio 2013, 23:23 PM
Ese código es el cifrado César, solo para el abecedario lo veo una tonteria.


Creo que no has pillado la "intención" de la propuesta. Se trata de ver el "potencial" de los intervinientes en el foro y que en base a este tema hagan propuestas ingeniosasy/o "raritas" con la única finalidad de exprimir el ingenio, plasmar los conocimientos y ayudar/enseñar unos de otros.

Tu propuesta, por ejemplo, sería clasificada como "rarita", ya que se sale del contexto habitual y,como tal propuesta "rarita" yo la aplaudo. Eso sí, echo en falta que expliques a los neófitos en el tema del ensamblador qué herramientas serían necesarias para poder ejecutar el código que planteas. Ya que haces una propuesta fuera del contexto C/C++ una breve explicación no nos vendría mal a algunos.


Saluditos!
   

#637
Cita de: CCross en 12 Junio 2013, 19:23 PM
Aqui va una versión mas eficiente


Lamentablemente se queda "corto ya que no permite introducir frases. Una pequeña mejora, pero reconozco que está ingenioso.


Saluditos!.
     
#638
Cita de: cpu2 en 12 Junio 2013, 18:59 PM
Y que sucede si en mi cadena tengo algun caracter estilo " @#$*{}", la tabla ascii no es solo el abecedario.

Estamos hablando del cifrado César y hay que colocar las cosas en su contexto histórico y de acuerdo a ello proceder,. ¿O es que en la época de Julio César existían los símbolos que mencionas'. Ni existía Internet, y por tanto @ ni los móviles con sus almohadillas # ni el dólar $, etc.

Así que para hacer códigos comparables, siñemosnos al estricto cifrado César.


Saluditos!.
     
#639
Cita de: amchacon en 12 Junio 2013, 21:09 PM
getchar();
getchar();
return 0;


El return es OBLIGADO en el estandar C , toda vez que de acuerdo  dicho estandar la función¡ón main ha de ser declarada con de tipo int y esto conconllleba a un return de un valor int,. Cositas del estandar. Otra cosa es que sin él te funcione ya que algunos compiladores son muy listos y "corrigen" ciertos aspectos del código.

Así que sigue las indicaciones de amchacon.

Saluditos!.
   




#640
Cita de: CCross en 10 Junio 2013, 23:28 PM
Buenas amigos!!

Aquí otra versión del cifrado cesar donde tu puedes indicar el desplazamiento que quieras


No es el cifrado César, te muestro una salida al código que planteas:


CitarIntroduce una cadena: wikipedia la enciclopedia libre
Ingrese desplazamiento:
cifrado es: ┘╦═╦ÊÃã╦├

descifrado es: wikipedia

Como ves, en el cifrado se "va más allá" de la z/Z, cuando debería empezar a contar desde la a.

Una solución  "a pura fuerza bruta", es decir aplicando estrictamente lo que plantea el cifrado César :


Código (cpp) [Seleccionar]

/*En criptografía, el cifrado César, también conocido como cifrado
por desplazamiento, código de César o desplazamiento de César, es
una de las técnicas de codificación más simples y más usadas.
Es un tipo de cifrado por sustitución en el que una letra en el
texto original es reemplazada por otra letra que se encuentra un
número fijo de posiciones más adelante en el alfabeto. Por
ejemplo, con un desplazamiento de 6.*/
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
int main (void)
{
   int i,n=0,aux;
   char frase [256];
   char cadena []="WIKIPEDIA, LA ENCICLOPEDIA LIBRE \n\
   Wikipedia la Enciclopedia Libre f F x X";
   puts("WIKIPEDIA, LA ENCICLOPEDIA LIBRE \n\
   Wikipedia la Enciclopedia Libre f F x X");
   for (i=0;cadena[i]!='\0';i++)
       {
           if ((cadena [i]>='u' && cadena [i]<='z') || (cadena [i]>='U' && cadena [i]<='Z' ))   cadena [i]-=20;
           else if (cadena [i]>='a' && cadena [i]<='t' || (cadena [i]>='A' && cadena [i]<='T' ))   cadena [i]+=6;
       }
   puts("\nY ahora codificada con desplazamiento 6:");
   printf ("%s\n",cadena);
   puts("\nY ahora descodificada: ");
   for (i=0;cadena[i]!='\0';i++)
       {
           if ((cadena [i]<='f' && cadena [i]>='c') || (cadena [i]<='F' && cadena [i]>='C' ))   cadena [i]+=20;
           else if (cadena [i]>'f' && cadena [i]<='z' || (cadena [i]>'F' && cadena [i]<='Z' ))   cadena [i]-=6;
       }
   printf ("%s\n",cadena);

/******* AHORA CON ENTRADA DESDE TECLADO *******/

   while (1)
   {
   n=0;
   puts ("\n\nIntroduce una frase: ");
   fgets (frase,255,stdin);
   do
   {
       printf ("\nIndica el desplazamiento (1-25): ");
       scanf ("%d",&n);
       while (getchar()!='\n');
   }while (n<1 || n>25);
   for (i=0;frase[i]!='\0';i++)
   {
       if ((frase [i]>('z'-n) && frase [i]<='z') || (frase [i]>('Z'-n) && frase [i]<='Z' ))
           frase [i]=frase [i]-26+n;
       else if (frase [i]>='a' && frase [i]<=('z'-n) || (frase [i]>='A' && frase [i]<=('Z'-n) ))
           frase [i]+=n;
   }
   printf("\nCodificada con desplazamiento %d \n",n);
   printf ("%s\n",frase);
   puts("\nY ahora descodificada: ");
   for (i=0;frase[i]!='\0';i++)
       {
           if ((frase [i]<('a'+n) && frase [i]>=('a')) || (frase [i]<('A'+n) && frase [i]>=('A') ))
           frase [i] =frase [i]+26-n;
           else if ((frase [i]>=('a'+n) && frase [i]<=('z') )|| (frase [i]>=('A'+n) && frase [i]<=('Z') ))
               frase [i]-=n;
       }
   printf ("%s\n",frase);
   }

   /***************  :-)   OTRA FORMA  :-)   **********/
   return 0;
}


Con una salida como esta:

Código (cpp) [Seleccionar]

WIKIPEDIA, LA ENCICLOPEDIA LIBRE
   Wikipedia la Enciclopedia Libre f F x X

Y ahora codificada con desplazamiento 6:
COQOVKJOG, RG KTIOIRUVKJOG ROHXK
   Coqovkjog rg Ktioiruvkjog Rohxk l L d D

Y ahora descodificada:
WIKIPEDIA, LA ENCICLOPEDIA LIBRE
   Wikipedia la Enciclopedia Libre f F x X


Introduce una frase:
leosansan Abc Xyz

Indica el desplazamiento (1-25): 6

Codificada con desplazamiento 6
rkuygtygt Ghi Def


Y ahora descodificada:
leosansan Abc Xyz


¡Vamos!, a ver si se animan a plantear códigos diferentes, que sean más ingeniosos y/o eficaces. Ya hay una media propuesta de cypascal usando la operación módulo -ver post anteriores-, aunque está incompleto, ya que le falto el descifrado. ;) ;-) ;)

Saluditos!.