WoWTales - Forja tu propia leyenda

Off - Topics => Diseño Gráfico e Informática => Mensaje iniciado por: September en Septiembre 01, 2015, 01:08:56 am



Título: ODIO EL PSEUDOCODIGO
Publicado por: September en Septiembre 01, 2015, 01:08:56 am
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  >:( 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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 01:19:05 am
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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: September en Septiembre 01, 2015, 01:23:04 am
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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 01:27:17 am
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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 02:21:39 am
// 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.
}


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 02:27:55 am
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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 02:36:28 am
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];   


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Ukobach en Septiembre 01, 2015, 03:28:08 am
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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 03:35:25 am
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];   


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: September en Septiembre 01, 2015, 03:40:34 am

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


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 03:46:28 am
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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Ukobach en Septiembre 01, 2015, 03:47:17 am
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í...


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: September en Septiembre 01, 2015, 03:49:23 am
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 ;)

Y tanto que compila y ejecuta jaja
(http://i.imgur.com/Qw89wkG.png)


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Ukobach en Septiembre 01, 2015, 03:54:25 am
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?


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 04:00:27 am
Vaya mierda de profesores, enseñándote un montón de pendejadas que por si sola no sirve para nada, deberían banearlos :)

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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: September en Septiembre 01, 2015, 04:03:44 am

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.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Ukobach en Septiembre 01, 2015, 04:05:06 am
Vaya mierda de profesores, enseñándote un montón de pendejadas que por si sola no sirve para nada, deberían banearlos :)

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?



Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Vudash en Septiembre 01, 2015, 04:07:54 am
¿Qué provecho se le puede sacar?
Ser profesor, creo que hay gente que le gusta eso.


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Drab14 en Septiembre 01, 2015, 11:39:16 am
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


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: September en Septiembre 02, 2015, 05:51:05 pm
Pues el cifrado sigue sin funcionar  ::)
He estado monitorizando paso a paso las variables y aquí esta el fallo:
(http://i.imgur.com/QjIRUxw.png)

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...


Título: Re: ODIO EL PSEUDOCODIGO
Publicado por: Ukobach en Septiembre 02, 2015, 06:59:45 pm
Postea el código para ver qué está pasando, ya he trabajado con esto antes y te puedo ayudar.

Ah, y me olvidaba... si usas psint ¿con qué reglas de lenguaje? ¿o usan las que vienen por defecto?

Saludos!