Autor Tema: Programando en Lenguaje PseudoCodigo y exportandolo a C/++/Matlab/Python y otros

0 Usuarios y 1 Visitante están viendo este tema.

14 Octubre, 2014, 11:28 am
Respuesta #10

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 12,032
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino

Hola. Veo que viene a ser como el Python pero con palabras españolas; está bien. Lo importante es que vayan creando módulos y aplicaciones para él y que lo vaya usando la gente.

 Saludos.

14 Octubre, 2014, 12:55 pm
Respuesta #11

luis

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 303
  • Karma: +1/-0
  • Sexo: Masculino
estimados, desconozco si les será de utilidad lo que voy a comentarles...

pienso que este tipo de ambiente de programación entorpece el aprendizaje de la programación y su uso intensivo. en ese sentido, salvo matices, adhiero completamente a una vieja nota de dijkstra, On the foolishness of "natural language programming"www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html en que afirmaba entre otras cosas

"Instead of regarding the obligation to use formal symbols as a burden, we should regard the convenience of using them as a privilege: thanks to them, school children can learn to do what in earlier days only genius could achieve."

escépticos saludos

luis

14 Octubre, 2014, 02:35 pm
Respuesta #12

compsystems

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 56
  • País: 00
  • Karma: +0/-0
  • Sexo: Masculino
...  pienso que este tipo de ambiente de programación entorpece el aprendizaje de la programación y su uso intensivo

Tu comentario es respetable pero no estoy de acuerdo, no se si los demás participantes de este foro compartan también mi punto de vista, PSEINT es un software éxito en sourceforge.net miles de descargas por semana, numero 1 en varias ocaciones, PSEINT es usado por cientos de docentes de programación informática al rededor de toda centro y suramérica, y sigue creciendo, hace falta expandirlo a otros idiomas pero se requiere colaboración, pues hay que reestructurar el código fuente para soportar lenguajes como ingles, francés, portugués, ya hay colaboradores que están mejorando PSEINT, por ejemplo soporte de REGISTROS, ver el siguiente link

PSEINT REBEL, no tiene la fama del PSEINT original, pero es mucho mas poderoso, los invito a probar este desarrollo paralelo

http://sourceforge.net/u/mncarbone/pseint-rebel/ci/master/tree/


PSEINT ha sido colocado a prueba en varias instituciones de educación secundaria o bachillerato y ha dado resultado. En la universidad por ejemplo se dictaba el curso de introducción a la programación en lenguaje C, y la mayoría no les entusiasmaba el curso o cátedra, cuando se cambio a lenguaje de pseudo-código muchos no solo cumplían con los problemas propuestos sino que seguían programando, se genero un entusiasmo por la programación, en un segundo curso de programación informática se inicio ya con a programación "profesional" es decir en lenguaje C, y como se tenia la base del pseudocodigo todo les resulto mas intuitivo, ademas  he visto muchos libros especializados de matemáticas que en lugar de escribir códigos en un lenguaje x (C/C++/java, ... ) lo muestran en pseudo-código , que bueno seria también estandarizar un lenguaje en pseudocodigo, aunque el nombre de PSEUDO no me agrada pues se denota como inferior

A todos los docentes de programación informática de primeros niveles los invito a utilizar PSEINT

PD: La nota de "dijkstra" dice: considerar la obligación de utilizar los símbolos formales ...  , pero eso es lo que NO usan los lenguajes profesionales, por que no se codifica en unicode sino en ASCII, salvo algunos, por ejemplo para MAYOR O IGUAL SE USAN símbolos pares >=, igual para <=, diferente !, modulo como %, otros como ~, manejo de punteros con &, y * ademas usan símbolos como #, @ realmente GEROGLIFICOS para el principiante


Hola. Veo que viene a ser como el Python pero con palabras españolas; está bien. Lo importante es que vayan creando módulos y aplicaciones para él y que lo vaya usando la gente.

 Saludos.

También se parece mucho a QBASIC pero en castellano http://jm00092.freehostia.com/cqb/, podemos crear un modulo de matemáticas para PSEINT, otro importante seria manejo de gráficos en pixeles como tambien lo hace QBASIC http://jm00092.freehostia.com/cqb/cqb206.htm que un futuro podría expandirse como una aplicación de geometria

14 Octubre, 2014, 04:02 pm
Respuesta #13

luis

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 303
  • Karma: +1/-0
  • Sexo: Masculino
PD: La nota de "dijkstra" dice: considerar la obligación de utilizar los símbolos formales ...  , pero eso es lo que NO usan los lenguajes profesionales, por que no se codifica en unicode sino en ASCII, salvo algunos, por ejemplo para MAYOR O IGUAL SE USAN símbolos pares >=, igual para <=, diferente !, modulo como %, otros como ~, manejo de punteros con &, y * ademas usan símbolos como #, @ realmente GEROGLIFICOS para el principiante

Me temo que no has leído la nota, solamente el pequeño extracto que les dejé. Te sugiero su lectura; no es una nota larga.

La noción de símbolo formal que usa lo asocia con la escritura del algoritmo, no con el juego de caracteres a usar. en la herramienta que propones te encuentras ante un lenguaje formal que parece natural; de ahí el fragmento que te parece útil, que dice...

"Si a es mayor que b y a es mayor que c entonces ..."

y que apostaría  a que crees más adecuado que

"if (a > b) and (a > c) then ..."

El problema empieza cuando la persona aspira legítimamente a escribir

"Si a es mayor que b y c entonces ..."

Supongo que ese lenguaje no lo admite, aunque es más natural. Desde el punto de vista del lenguaje, ¿esa sería una extensión deseable o no? Cualquier respuesta me resulta insatisfactoria; si no es deseable, es porque hemos acotado la naturalidad de nuestro lenguaje; si es deseable, entonces podríamos ir agregando otras construcciones igualmente naturales, extendiendo el lenguaje hasta un terrible galimatías. Por ejemplo, la siguiente declaración de variable suena muy natural

"Llamemos d al mayor de b y c; luego ..."

Al aceptar que el lenguaje de programación tiene una descripción formal y artificial,  podemos argumentar con él en términos de su semántica obtenida de forma clara a partir de su sintaxis, sin complicarnos en la falsa naturalidad de la sintaxis empleada. Y, antes que nada, aprender que el uso del manual es la forma de enfrentar las complicaciones de los lenguajes, y que el aprendizaje de las construcciones formales del mismo, intuitivas o no, son accesorias.

Por supuesto que hay gente que aboga por la estrategia que sugieres, pero no me han convencido. Mencionas que "PSEINT ha sido colocado a prueba en varias instituciones de educación secundaria o bachillerato y ha dado resultado". ¿puedes aportarme referencias para leer al respecto?

saludos

luis

14 Octubre, 2014, 08:14 pm
Respuesta #14

compsystems

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 56
  • País: 00
  • Karma: +0/-0
  • Sexo: Masculino
La idea del pSeudocodigo no es que una computadora por medio de un software pueda interpretar un lenguaje natural, si no una aproximación al natural (un lenguaje semi técnico) y no un lenguaje técnico como son los actuales.

Aun nuestras computadoras no están diseñadas para tener inteligencia artificial, por que trabajan con una lógica binaria, que electronicamente son estados Alto o Bajo de una señal, informaticamente es el sistema binario 1s y 0s, verdadero o falso, gracias al álgebra de boole podemos hacer matemáticas con solo dos ¨números¨ y que electronicamente se emulan con dispositivos semiconductores pero hay una buena noticia ya están desarrollando la computación cuántica que no trabaja en el sistema primitivo binario sino analogicamente ¨varios estados¨como lo hace nuestro cerebro, cuando lleguemos a ese punto sera LA VERDADERA INTELIGENCIA ARTIFICIAL http://es.wikipedia.org/wiki/Computaci%C3%B3n_cu%C3%A1ntica que emulara nuestro cerebro, se habla de singularidad y no podemos diferenciar entre un ser humano y una maquina en el aspecto ¨intelectual¨, claro esta aun en teoría, pero si creo que lleguemos a tal punto

Interesante el articulo, me gustaría alguien que domine el ingles lo pueda traducir, por que los traductores informáticos como no son inteligentes entonces lo que dicen esta ciertamente alejado de la realidad
http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html

Sobre los casos de exito, no están documentados como artículos, pero les propondré a varios profesores a nivel de latinoamerica que reporten sus experiencias formalmente,

Pseint puede interpretar dentro de un ciclo iterativo expresiones como ¨para cada x de b hacer¨ que tecnicamente seria ¨para i desde 1 hasta 10 hacer¨

Código: [Seleccionar]
Proceso ejp05_para_en_PSEINT

Dimension a[10];

// asignar a cada elemento en forma iterativa
Escribir "almacena los 10 elementos del areglo a, desde 1 hasta 100 en pasos de 10";
para i desde 1 hasta 10 hacer
a[i] <- i*10;
FinPara
// Salida 10, 20, 30 , 40, 50, 60, 70, 80, 90, 100

Escribir "";
Escribir "imprime los 10 elementos de a";
Para cada elemento de a Hacer
Escribir elemento;
FinPara // puede escribirse separado "fin para"


Escribir "";
Dimension b[3,6]; // 18 elementos

Escribir "asigna a cada elemento directamnete"
c<-0;
para cada x de b hacer
c<-c+1;
x<-c;
FinPara

// [ 1,  2, 3, 4, 5, 6
//   7,  8, 9,10,11,12
//   13,14,15,16,17,18 ]]

Escribir "imprime los 18 elementos de b";
para i desde 1 hasta 3 con paso 1 Hacer
para j desde 1 hasta 6 con paso 1 hacer
Escribir b[i,j];
FinPara
FinPara
// salida 1 ...18

Escribir "imprime las columnas 1, 3, 5 y las filas 3, 2, 1";
para fila desde 3 hasta 1 con paso -1 Hacer
para columna desde 1 hasta 5 con paso 2 hacer
Escribir b[fila,columna];
FinPara
FinPara
// salida 13, 15 17 7 9 11 1 3 5
FinProceso

PD: Un manual de programación en PESINThttp://www.lawebdelprogramador.com/cursos/Pseudocodigo_Diagramas_de_Flujo/7309-Manual_de_programacion_en_PSINT.html


PSEINT no solo es un  interprete de pseudocodigo si no también un interprete de diagramas de flujo  :o

Por ejemplo si  creo un nuevo archivo

Proceso sin_titulo

FinProceso

y genero el diagrama de flujo, PSEINT es capaz de ejecutarlo también e incluso mostrar el bloque gráfico respectivo, realmente impresionante! PSEINT esta escrito en C++ y su interface gráfica creo que no depende de VISUAL C++

Info en WIKI
http://es.wikipedia.org/wiki/PSeInt

15 Octubre, 2014, 02:16 am
Respuesta #15

ingmarov

  • Moderador Global
  • Mensajes: 5,428
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
He leído el artículo del prof.dr.Edsger W.Dijkstra.

Estoy de acuerdo, no se debe programar en pseudo-códico y menos en un lenguaje similar al que usamos a diario ya que puede prestarse a las malas interpretaciones. Pero yo creo que todos comenzamos el aprendizaje de la programación usando Pseudo-código y creo que funciona muy bien como introducción a ese mundo.

Y Pseint sí reconoce los signos <, >, etc.

Comparto un párrafo del manual compartido por comsystems.

Citar
El programa utiliza pseudocódigo, un lenguaje de programación ficticio cuya principal
misión es que el programador pueda centrarse en los aspectos lógicos de la
programación, dejando el apartado técnico para cuando se vea la sintaxis de un lenguaje
de programación verdadero.


Bueno he intentado hacer un programa para calcular las raices de un polinomio usando el algoritmo de Newton-Raphson. Tengo un error que no logro corregir.

El error es que el último ciclo Mientras (while) no hace los pasos necesarios.

Código: [Seleccionar]
Funcion VALOR<-Evaluadora(Poli,Orden,x)
Definir k,acum Como Entero;
acum<-0
Para k<-0 Hasta Orden Con Paso 1 Hacer
acum<-acum+Poli[k+1]*((x)^(Orden-k));
FinPara
VALOR<-acum;
FinFuncion

Proceso Newton_Raphson
Dimension P[10],DP[9];
Definir n,i, cont Como Entero;
Definir dx,t1,t2 Como Real;
Escribir "Bienvenido!, esta aplicación le ayudará a localizar la raices de un polinomio usando el algoritmo de Newton-Raphson";
Escribir Sin Saltar "Escriba el grado del polinomio";
Leer n;
Escribir "Escriba los coeficientes del polinomio ordenado de forma canónica";
Para i<-1 Hasta n+1 Hacer
Escribir Sin Saltar "ingrese coeficiente: ", i;
Leer P[i];
Si i<n+1 Entonces
DP[i]<-P[i]*(n-i+1);
FinSi
FinPara
Para i<-1 Hasta n+1 Hacer
Si i<n Entonces
Escribir Sinsaltar P[i],"x^", n-(i-1), "+";
Sino
Si i=n Entonces
Escribir Sinsaltar P[i],"x +";
Sino
Escribir P[i];
FinSi
FinSi
FinPara
Escribir "Derivada";
Para i<-1 Hasta n Hacer
Si i<n-1 Entonces
Escribir Sinsaltar DP[i],"x^", n-i, "+";
Sino
Si i=n-1 Entonces
Escribir Sinsaltar DP[i],"x +";
Sino
Escribir DP[i];
FinSi
FinSi
FinPara

Escribir "  ";
Escribir Sin Saltar "Ingrese el valor inicial";
Leer t1;
t2<-1000;
i<-0;
cont<-0;
Mientras i=0 Hacer
t2<-t1-Evaluadora(P,n,t1)/Evaluadora(DP,n-1,t1);
Si t2<>t1 Entonces
t1<-t2;
t2<-1000;
Sino
i<-1;
FinSi
cont<-cont+1;
FinMientras
Escribir t1, t2," iteraciones= ", cont;
FinProceso


¿Será un error de Pseint? Ya había tenido problemas con un ciclo para, sin definir los pasos me daba por defecto pasos de 2, me obligó a escribir pasos de 1.
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

15 Octubre, 2014, 02:04 pm
Respuesta #16

compsystems

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 56
  • País: 00
  • Karma: +0/-0
  • Sexo: Masculino
Hola si la entrada es 1*x^3-6*x^2+11*x-6, las raíces son [ 1, 2, 3 ]


15 Octubre, 2014, 06:03 pm
Respuesta #17

compsystems

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 56
  • País: 00
  • Karma: +0/-0
  • Sexo: Masculino
estoy portando el "Calculo de las raices de una Ecuación de segundo grado a*X^2+b*X+c=0"
   
Código extraído de http://es.wikipedia.org/wiki/QBASIC
   

   
Código: [Seleccionar]
Proceso usoOperadoresRelacionalesYmas
// versión 0.01 ultima edicion 15/Oct/2014

Limpiar Pantalla
Definir coeficiente1a, coeficiente2b, coeficiente3c Como Reales; // Definición de identificadores (coeficientes)
    Definir raiz1, raiz1ParteReal, raiz1ParteImag, raiz2, raizMayor, discriminante Como Reales; // Para organizar las raices
Definir banderaDisc, a, b Como enteros;



Imprimir "Calculo de las raices de una Ecuación de segundo grado = a*X^2+b*X^1+c*X^0=0 == a*X^2+b*X+c=0";
// Mas info: http://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_segundo_grado

Imprimir "";
Imprimir "a es un coeficiente cuadrático";
Imprimir "b es el coeficiente lineal";
Imprimir "c es el coeficiente o término independiente";
Imprimir "";
Imprimir "Entre el valor del coeficiente a: ",sin bajar;
Leer coeficiente1a;
Imprimir "Entre el valor del coeficiente b: ",sin bajar;
Leer coeficiente2b;
Imprimir "Entre el valor del coeficiente c: ",sin bajar;
Leer coeficiente3c; // Leer ">", coeficiente3c;

Imprimir "";
Imprimir "Los coeficientes son a = ",coeficiente1a,", b = ",coeficiente2b,", c = ",coeficiente3c;

// Chequeo de argumentos de entrada
Si coeficiente1a = 0 Entonces
Si coeficiente2b = 0 Entonces
Si coeficiente3c = 0 Entonces
Escribir "No hay ecuación, la expresion entrada es el numero cero";
Sino // el coeficiente3 no es cero
Escribir "No hay ecuación, la expresion entrada es un numero";
FinSi
Sino // el coeficiente2 no es cero
Escribir "Se reduce a una ecuación lineal";
Escribir "Solucion: x = ", -c/b;
FinSi
Sino

Imprimir "";
Imprimir "El polinomio es: P(x) = ",coeficiente1a,"*X^2 ",sin bajar;
Si coeficiente2b >= 0 Entonces
Imprimir "+",coeficiente2b,"*X ",sin bajar;
Sino
Imprimir coeficiente2b,"*X ",sin bajar;
FinSi
Si coeficiente3c >= 0 Entonces
Imprimir "+",coeficiente3c;
Sino
Imprimir coeficiente3c;
FinSi

discriminante = coeficiente2b^2 - 4.0*coeficiente1a*coeficiente3c;
Imprimir "";
Escribir "Es valor del discriminante es: b^2 -4*a*c = ",discriminante;

Si discriminante == 0 Entonces
Escribir "";
Escribir "Como el discriminante es 0 entonces hay 1 solucion de numero reales con multiplicidad 2 (la parábola sólo toca en un punto al eje de las abscisas X)";
banderaDisc := 0;
Sino
Si discriminante <= 0 Entonces
Escribir "";
Escribir "Como el discriminante es negativo entonces hay 2 soluciones de numeros complejos, (un complejo y su conjugado) (la parábola no corta al eje de las abscisas X)";
banderaDisc := 2;
Sino
Escribir "";
Escribir "Como el discriminante es positivo entonces hay 2 soluciones de numeros reales y diferentes (la parábola cruza dos veces el eje de las abscisas X)";
banderaDisc := 1;
FinSi
FinSi

Segun banderaDisc Hacer
2:
Escribir ""
raiz1ParteReal := -coeficiente2b / ( 2*coeficiente1a );
raiz1ParteImag := raiz(-discriminante) / ( 2*coeficiente1a );

Escribir "Primera raiz: ",raiz1ParteReal,"+",raiz1ParteImag,"*i";
Escribir "Segunda raiz: ",raiz1ParteReal,"-",raiz1ParteImag,"*i";
Escribir "Factorizar(P(X),X): ( X - (", raiz1ParteReal,"+",raiz1ParteImag,"*i) ) * ( X - (",raiz1ParteReal,"+",raiz1ParteImag,"*i) )";
0:
Escribir ""
raiz1 := -coeficiente2b / ( 2*coeficiente1a );
raiz2 := raiz1; // Raiz 1 == Raiz 2 (multiplicidad)
Escribir "raiz 1: ",raiz1;
Escribir "raiz 2: ",raiz2;
Escribir "Factorizar(P(X),X): ( X",(-raiz1)," )*( X",(-raiz2)," )";
1:
Escribir ""
raiz1 := ( -coeficiente2b + raiz(discriminante) ) / ( 2*coeficiente1a );
raiz2 := ( -coeficiente2b - raiz(discriminante) ) / ( 2*coeficiente1a );
    // Ordenando raices de menor a mayor
    Si raiz1 >= raiz2 Entonces
raizMayor := raiz1;
raiz1 = raiz2;
raiz2 = raizMayor;
FinSi
Escribir "Primera raiz: ",raiz1;
Escribir "Segunda raiz: ",raiz2;
 
Escribir ""
Escribir "Factorizar(P(X),X): ( X",(-raiz1)," )*( X",(-raiz2)," )";
//De Otro Modo:

FinSegun

FinSi
   
// Ejemplos para probar los tres casos
// ejp1: 1*X^2 +2*X +3 raices { -1 +1.4142*i, -1 -1.4142*i }
// ejp2: 1*X^2 -11.6*X +33.64 raices { 5.8, 5.8 }
// ejp3: 1*X^2 -5*X +6 raices { 2, 3 }
// ejp4: -5*X^2 +6*X +9 raices { -.86969384567, 2.06969384567 }


 
FinProceso

      
      
      redactando ...

15 Octubre, 2014, 06:41 pm
Respuesta #18

luis

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 303
  • Karma: +1/-0
  • Sexo: Masculino
Hola si la entrada es 1*x^3+6*x^2+1*x+6, las raices son [ 1, 2, 3 ]. esta la salida arrojada

nops

Código: [Seleccionar]
Ingrese el valor inicial> 0.1
-6.0141171487-6.0141171487 iteraciones= 12
*** Ejecución Finalizada. ***

¿no debería ser -6?

luis

15 Octubre, 2014, 06:51 pm
Respuesta #19

ingmarov

  • Moderador Global
  • Mensajes: 5,428
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola si la entrada es 1*x^3+6*x^2+1*x+6, las raices son [ 1, 2, 3 ]. esta la salida arrojada

nops

Código: [Seleccionar]
Ingrese el valor inicial> 0.1
-6.0141171487-6.0141171487 iteraciones= 12
*** Ejecución Finalizada. ***

¿no debería ser -6?

luis


\( x^3+6x^2+x+6=0 \)

\( =x^2(x+6)+(x+6)=(x+6)(x^2+1)=0 \)

Sí la raiz debe ser -6.

Algo importante, es que en el algoritmo de newton se debe poner una condición para parar el ultimo ciclo mientras en caso de que el polinomio no tenga raices reales
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...