Páginas 1 2 Ir Abajo
 
80
ignore
Tengo una asignatura noob que me pide programar en pseudocodigo y me tiene harto. A ver si alguien puede ayudarme...
Tengo que implementar un cifrado Cesar, algo tan sencillo como cada letra sustituirla por otra del abecedario a X posiciones de esta.
Osea, que si defino 3 posiciones: HORDA pasa a ser KRUGD sencillo no? Pues no con pseudocodigo...

Esto es lo que he sacado en claro:

       Definir cadtexto como cadena; Definir subcad1 como cadena; Definir subcad2 como cadena; Definir subcad3 como cadena;
   Dimension cadtexto[10];
   Definir alfabeto como cadena; Definir i,j,k como entero;
   alfabeto<-"abcdefghijklmnopqrstuvwxyxz";      
   Para i=0 Hasta 9 Con Paso 1 Hacer
      Escribir "Introduce una palabra";
      Leer cadtexto[i ];
      cadtexto[i ]<-Minusculas(cadtexto[i ]);
   FinPara
   Para i=0 hasta 9 con paso 1 Hacer
      Para j=0 hasta Longitud(cadtexto(i))-1 con paso 1 hacer
         Para k=0 hasta 25 con paso 1 Hacer
            Si SubCadena(cadtexto[i ],j,1)=SubCadena(alfabeto,k,1) Entonces
               subcad1<-Subcadena(cadtexto[i ],j-1,j);
               subcad2<-Subcadena(alfabeto,k+3,1);
               subcad3<-Concatenar(subcad1,subcad2);
               cadtexto[i ]<-Concatenar(subcad3,Subcadena(cadtexto[i ],j+1,(Longitud(cadtexto[i ])-j)));
            FinSi
         FinPara
      FinPara
   FinPara
   Para i=0 hasta 9 con paso 1 Hacer
      Escribir cadtexto[i ];
   FinPara

Pero no funciona... y mira que parece sencillo. Creo un array de 10 palabras introducidas por usuario, creo un array del abecedario(al principio hice un array de 26 elementos con cada letra separada, luego me di cuenta de la inutilidad de esto xD), recorro las palabras en el primer for, con el segundo recorro las letras de cada palabra y con el ultimo comparo cada letra con mi abecedario.
Hasta ahí todo bien. Pero ahora tengo que reemplazar las letras(k+3). He usado substrings y los he concatenado pero  Enojado no va

Conforme escribo esto me doy cuenta de que si pongo una x,y o z mi programa se va al garete...pero bueno ya arreglaré eso, de momento que funcione sin esas. ¿Alguna idea? Gracias de antebrazo

EDIT: Acabo de ver que este código se me come los [i ] obviamente. Sé que hay una forma de que no reconozca estas cosas pero bueh, les meto un espacio a todas y así ya se ve.




[Editado por September Septiembre 01, 2015, 01:13:44 am]
En línea

ignore
Personal de WoWTales
Me parece una tontería programar en eso sí al final no sirve de nada, mejor aprender en un lenguaje sencillo y general como Java.

Si quieres te puedo pasar la lógica de cómo lo haría yo en Java sin usar nada avanzado para que puedas pasarlo a lo que quieras.
En línea

Vudash
Administrador
WoW Tales
80
ignore
Si y si. Pasamelo por favor, y si es una tontería. Pero es lo que hay... El problema es que este pseudocodigo(PSEINT) esta hecho para dummies de la programación(como yo! pero quiero decir, empezando de 0 total) y no tiene implementadas casi funciones, así que lo que me pases en Java puede que me sirva...o puede que no. Pero de todas formas enseñamelo gracias, tal vez me ilumines.
En línea

ignore
Personal de WoWTales
En la U te enseñan a programar desde cero y usan Java por lo general.

Ahora mismo no tengo herramienta de desarrollo, lo haré en notepad y puede que quede con errores.
En línea

Vudash
Administrador
WoW Tales
ignore
Personal de WoWTales
// Alfabeto.
// Posiciones:      0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26
char[] alfabeto = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z'};

// Ejemplo.
String cadenaEntrada = "abcdwxyz";

// Longitud de la cadena de entrada.
int longitudCadena = cadenaEntrada.length();
// Longitud del alfabeto.
int longitudAlfabeto = alfabeto.length;

// Creamos un arreglo para guardar la posición de cada letra de la cadena de entrada.
int[] posiciones = new int[longitudCadena];

// For para recorrer la cadena de entrada.
for(int i = 0; i < longitudCadena; i++){
   // Obtenemos la letra "i" de la cadena de entrada.
   char letraCadena = cadenaEntrada.charAt(i);
   
   // For para recorrer el alfabeto.
   for(int j = 0; j < longitudAlfabeto; j++){
      // Obtenemos la letra "j" del alfabeto.
      char letraAlfabeto = alfabeto[j];
      
      // Si las letras son iguales, guardamos la posición.
      if(letraCadena == letraAlfabeto){
         posiciones = j;
         // Terminamos for interno.
         break;
      }
   }
}

// Al terminar el for externo, tendremos el arreglo de posiciones con: {0,1,2,3,23,24,25,26}

// Cadena de salida.
String cadenaSalida = "";

// Ahora tendremos que sumar sencillamente.
for(int i = 0; i < longitudCadena; i++){
   // Obtenemos la posición inicial de la letra en la palabra de entrada.
   int posicion = posiciones;
   
   // Sumamos 3.
   posicion += 3;
   
   // Agregamos la nueva letra a la palabra de salida.
   cadenaSalida += alfabeto[posicion%26];   
   // El % 26 es para asegurar que no se salga del limite del arreglo y vuelva a empezar en cero.
   // Para más información, lee el operador módulo.
}
En línea

Vudash
Administrador
WoW Tales
ignore
Personal de WoWTales
Ahí lo tienes, intenté usar las cosas más básicas que tendrías en cualquier otro lenguaje.

Eso si, me aprovecho de la Clase String de Java porque no declaro la capacidad del String ya que en Java no es necesario.
También uso el método charAt(i) que me devuelve la letra que está en la posición i de la cadena.

No controlo errores, así que si en la entrada colocas números o cosas raras, te dará problemas.

[Editado por Vudash Septiembre 01, 2015, 02:29:54 am]
En línea

Vudash
Administrador
WoW Tales
ignore
Personal de WoWTales
Si no quieres usar módulo, entonces:

// Sumamos 3.
posicion += 3;

if(posicion == 24)
   posicion = 0;

if(posicion == 25)
   posicion = 1;

if(posicion == 26)
   posicion = 2;

// Agregamos la nueva letra a la palabra de salida.
cadenaSalida += alfabeto[posicion];   
En línea

Vudash
Administrador
WoW Tales
ignore
Personal de WoWTales
if(posicion == 24)
   posicion = 0;

if(posicion == 25)
   posicion = 1;

if(posicion == 26)
   posicion = 2;

Puedo simplificar esta parte:

Si(posicion>=longitudAlfabeto) entonces
 posicion = posicion-longitudAlfabeto
FinSi

Me parece una tontería programar en eso sí al final no sirve de nada, mejor aprender en un lenguaje sencillo y general como Java.

Totalmente de acuerdo.
En línea

Ukobach
Asistencia primer nivel / Soporte técnico
WoWTales
ignore
Personal de WoWTales
Versión corta, menos rendimiento (no solo por quitar el break), pero aquí no afecta:

// Alfabeto.
// Posiciones:      0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26
char[] alfabeto = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z'};

// Ejemplo.
String cadenaEntrada = "abcdwxyz";

// Cadena de salida.
String cadenaSalida = "";

// For para recorrer la cadena de entrada.
for(int i = 0; i < cadenaEntrada.length(); i++)   
   // For para recorrer el alfabeto.
   for(int j = 0; j < alfabeto.length; j++)      
      // Si las letras son iguales, agregamos la nueva letra.
      if(cadenaEntrada.charAt(i) == alfabeto[j])
         cadenaSalida += alfabeto[(j+3)%26];   

[Editado por Vudash Septiembre 01, 2015, 03:39:36 am]
En línea

Vudash
Administrador
WoW Tales
80
ignore

Me parece una tontería programar en eso sí al final no sirve de nada, mejor aprender en un lenguaje sencillo y general como Java.
Totalmente de acuerdo.

Bueno, yo no defino los contenidos ^^ En mi caso empecé con C++ y luego hice Java en la U como tu dices. Ahora estoy en una mierda de pseudocodigo que no me deja ni poner condiciones en el for. Es decir aquí el for es: Para i=0 hasta 9 con Paso 1 Hacer .. No puedes poner "Para i=0 hasta i<j" por ejemplo jaja bazofiaaaaaaaa

Bueno gracias Vudash me ha servido tu idea aunque obviamente tendré que retocarla para que le entre al pseudocodigo :S
En línea

ignore
Personal de WoWTales
Totalmente de acuerdo.


Bueno, yo no defino los contenidos ^^ En mi caso empecé con C++ y luego hice Java en la U como tu dices. Ahora estoy en una mierda de pseudocodigo que no me deja ni poner condiciones en el for. Es decir aquí el for es: Para i=0 hasta 9 con Paso 1 Hacer .. No puedes poner "Para i=0 hasta i<j" por ejemplo jaja bazofiaaaaaaaa

Bueno gracias Vudash me ha servido tu idea aunque obviamente tendré que retocarla para que le entre al pseudocodigo :S
Es mi idea o el pseudocodigo que estás usando lo puedes compilar y ejecutar?

Que extraño, porque va en contra del nombre.

Ya que entendiste la primera parte, usa la versión corta, creo que será más sencillo.
En línea

Vudash
Administrador
WoW Tales
ignore
Personal de WoWTales
tendré que retocarla para que le entre al pseudocodigo :S

Obviamente tienes que transformarla de lenguaje, pero es bastante simple si entiendes lo que quiere decir cada línea que ha posteado Vudash, refiriéndome a la lógica que usó... igual y si tienes alguna duda, te contestaremos con mucho gusto.

Es mi idea o el pseudocodigo que estás usando lo puedes compilar y ejecutar?

Que extraño, porque va en contra del nombre.

Ya que entendiste la primera parte, usa la versión corta, creo que será más sencillo.

Si, hay un programa que hace eso. A un familiar mío lo tenían haciendo programas así...
En línea

Ukobach
Asistencia primer nivel / Soporte técnico
WoWTales
80
ignore
Gracias Uko, el problema que lo de %26 es muy buena idea pero aqui no sirve. Esto no tiene getchar() ni parecido, no transforma a ASCII, sino hubiese acabado hace días, así que pondré ese if que me has sugerido Gi&ntilde;ar

Y tanto que compila y ejecuta jaja

[Editado por September Septiembre 01, 2015, 03:52:29 am]
En línea

ignore
Personal de WoWTales
Debe tenerlo pero de otra forma, para ayudar a mi familiar que comenté antes, tuve que pensar como si programara en visual basic

Por ejemplo, en ese lenguaje un for no lleva nunca una condición, va así


For i as integer = 1 to 10 step 1
  'algún código
Next i

¿Te suena?
En línea

Ukobach
Asistencia primer nivel / Soporte técnico
WoWTales
ignore
Personal de WoWTales
Vaya mierda de profesores, enseñándote un montón de pendejadas que por si sola no sirve para nada, deberían banearlos Sonrisa

Con cualquier otro lenguaje aprenderías algo que por si solo te serviría para un buen trabajo.
Ejemplo:
September aprendió Pseudocodigo y es el experto en el tema, salió a buscar trabajo y tuvo que aprender otro lenguaje que sirviera para algo.
Septembre aprendió C# y no es el experto en el tema, salió a buscar trabajo y lo consiguió, no tuvo que aprender nada más.

Y no vayan a decir que el Pseudocodigo te enseña la lógica, porque cualquier lenguaje te la enseña, ya es tu decisión si quieres un lenguaje de bajo nivel como assembler o alto nivel como C#. Cualquiera que escojas te dará una buena lógica, aunque te enseñe a programar muy diferente según la decisión.

Esa herramienta que colocas en la imagen se ve más complicada que la interfaz de Eclipse en Mandarín.
En línea

Vudash
Administrador
WoW Tales
80
ignore

Esa herramienta que colocas en la imagen se ve más complicada que la interfaz de Eclipse en Mandarín.


JAJAJA deberían arder en el infierno! Casi que prefiero Pascal.
En línea

ignore
Personal de WoWTales
Vaya mierda de profesores, enseñándote un montón de pendejadas que por si sola no sirve para nada, deberían banearlos Sonrisa

Con cualquier otro lenguaje aprenderías algo que por si solo te serviría para un buen trabajo.
Ejemplo:
September aprendió Pseudocodigo y es el experto en el tema, salió a buscar trabajo y tuvo que aprender otro lenguaje que sirviera para algo.
Septembre aprendió C# y no es el experto en el tema, salió a buscar trabajo y lo consiguió, no tuvo que aprender nada más.

Y no vayan a decir que el Pseudocodigo te enseña la lógica, porque cualquier lenguaje te la enseña, ya es tu decisión si quieres un lenguaje de bajo nivel como assembler o alto nivel como C#. Cualquiera que escojas te dará una buena lógica, aunque te enseñe a programar muy diferente según la decisión.

Esa herramienta que colocas en la imagen se ve más complicada que la interfaz de Eclipse en Mandarín.

Jajaja en Mandarín...

No podría estar más de acuerdo, yo pienso que la lógica no se aprende, se aplica. Aprendes a aplicarla a un lenguaje, sea cual sea... en tanto sea útil, siempre te da mejores oportunidades, lo demás que aprendes son herramientas y carpintería para sacarle más provecho (por ejemplo, si conoces java aprender un lenguaje web como JSF o JSP será relativamente simple)... pero a esta "cosa" (no quiero decir groserías) ¿Qué provecho se le puede sacar?

En línea

Ukobach
Asistencia primer nivel / Soporte técnico
WoWTales
ignore
Personal de WoWTales
¿Qué provecho se le puede sacar?
Ser profesor, creo que hay gente que le gusta eso.
En línea

Vudash
Administrador
WoW Tales
Me parece una tontería programar en eso sí al final no sirve de nada, mejor aprender en un lenguaje sencillo y general como Java.

Bienvenido a la enseñanza española donde los chavales de ahora estudiamos el mismo programa que nuestros padres
En línea

Make it easy!
80
ignore
Pues el cifrado sigue sin funcionar  Girar ojos
He estado monitorizando paso a paso las variables y aquí esta el fallo:


Pero no tiene sentido! Porque se convierte tanto la subcadena en "k+3" como en "l" en void?

Por cierto que he añadido la variable "L" porque veía que no funcionaba poniendo simplemente "k+3" en la subcadena y he pensado que tal vez a este mierdicodigo no le gustaba tener una suma ahí. Pero ni por esas...
En línea

Páginas 1 2 Ir Arriba   

Powered by SMF | SMF © 2013, Simple Machines

Theme creado por Shaddar para WoWTales | Todas las imagenes y logotipos son de sus respectivos dueños.
who's online