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

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

10 Octubre, 2014, 09:39 pm
Leído 31734 veces

compsystems

  • Junior
  • Mensajes: 60
  • Karma: +0/-0
  • Sexo: Masculino
!Hola!

Hay un software libre y 100% en castellano llamado PSEINT (pseudo interprete), desarrollado por un docente Sur Americano de Argentina, este software permite escribir en Lenguaje pseudo-código (casi que un lenguaje humano) e interpretarlo en una ventana terminal o de texto. PSEINT se encuentra disponible en varias plataformas como WINDOWS, LINUX, y una versión no actualizada para MAC

También tiene una opción para crear diagrama de flujo del código en otras palabras codigo sobre rombos, elipses, cuadrados, etcétera http://es.wikipedia.org/wiki/Diagrama_de_flujo y también en formato http://es.wikipedia.org/wiki/Diagrama_Nassi-Shneiderman 

Pero lo mas importante es que ejecuta sentencia por sentencia o también llamado ejecución paso a paso mostrando en el código fuente la linea que genero la I/0 (salida entrada)

Otra opción importante es que puede exportar a lenguajes como  C, C++, HTML, Java, JAVA SCRIPT, MATLAB, PYTON, PASCAL y otros, ademas se puede contribuir al autor para que exporte a otros lenguajes http://pseint.sourceforge.net/index.php?page=psexport.html

Video



Este software realmente es increíble, si en mis inicios de programación yo hubiera tenido esta herramienta estuviera mas lejos en programación informática, pues la enseñanza de lenguajes de programación debe comenzar en pseudo-lenguaje y no en un lenguaje especifico o profesional

https://www.youtube.com/watch?v=rUQBqR5Cz3Y

Link del proyecto

http://pseint.sourceforge.net/

Veamos unos ejemplos

Ejemplos : Buscar el mayor de una entrada de datos numerica

Código en versión Pseudocode hibrido (lenguaje comunes de programación con lenguaje humano)

Código: [Seleccionar]
Proceso Estricto
 
Definir VAL_MAYOR,ARREGLO,CANT,I Como Enteros;
 
Dimension ARREGLO[100];
Escribir "Ingrese la cantidad de números:";
Leer CANT;
 
Para I<-0 Hasta CANT-1 Hacer
     Escribir "Ingrese un numero:";
     Leer ARREGLO[I];
FinPara
 
VAL_MAYOR<-0;
Para I<-0 Hasta CANT-1 Hacer
     Si ARREGLO[I]>VAL_MAYOR Entonces
         VAL_MAYOR<-ARREGLO[i];
     FinSi
FinPara
 
Si VAL_MAYOR % 2 = 0 Entonces
     Escribir "El mayor es ",VAL_MAYOR," y es par";
Sino
     Escribir "El mayor es ",VAL_MAYOR," y es impar";
FinSi
 
FinProceso

El mismo código anterior pero en versión Pseudocode mas cercano al lenguaje humano

Código: [Seleccionar]
Proceso Flexible
 
 
Escribir "Ingrese la cantidad de numeros:"
Leer CANT
Dimension ARREGLO[CANT]
 
Para Cada Elemento de ARREGLO
     Escribir "Ingrese un numero:"
     Leer ELEMENTO
Fin Para
 
VAL_MAYOR<-0
Para Cada ELEMENTO de ARREGLO
     Si ELEMENTO Es Mayor Que VAL_MAYOR
         VAL_MAYOR<-ELEMENTO
     Fin Si
Fin Para
 
Si VAL_MAYOR Es Par
     Escribir "El mayor es " VAL_MAYOR " y es par"
Sino
     Escribir "El mayor es " VAL_MAYOR " y es impar"
Fin Si
 
FinProceso

Imagen del diagrama de flujo



Que os parece este software?, les pregunto conocen software similar?

PD: Me gustaría iniciar con apoyo de vosotros un banco de programas referente a matemáticas con este software (PSEINT). Les parece buena idea?

11 Octubre, 2014, 10:26 pm
Respuesta #1

ingmarov

  • Moderador Global
  • Mensajes: 4,628
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Bienvenido compsystems!

Gracias por compartir la información, ¿Ya has probado esta aplicación?

Yo he olvidado mucho de lo que aprendí de programación, pero me gusta la idea que tienes de, según entiendo, crear un banco de aplicaciones matemáticas.

Saludos.
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

13 Octubre, 2014, 12:18 am
Respuesta #2

compsystems

  • Junior
  • Mensajes: 60
  • Karma: +0/-0
  • Sexo: Masculino
Si he programado en PSEINT, y por ser un lenguaje cercano al humano codificar en este software es muy fácil, iniciare con ejemplos sencillos para que miréis como se codifica.

La biblioteca  o banco de aplicaciones de math enriquecerían este software pues, solo tiene funciones básicas matemáticas (+. -. *, /, ^, modulo), le hace falta mucho por agregar, por ejemplo un paquete de álgebra lineal, calculo simbólico, geometría y todo lo que podamos imaginar

Lo que mas recuerdo de matemáticas es lo visto en la universidad en especial calculo vectorial y álgebra lineal, el resto debo repasarlo. Si se desea por ejemplo programar el polinomio característico de una matriz se tiene que definir primero el determinante de la misma.

Ademas por que programar en PSEINT? porque se puede crear un banco de algoritmos universal en un lenguaje base o pseudocodigo como aparecen en los libros actuales de maths y exportarlo luego ya un lenguaje profesional como MATLAB, MAPLE, C++, Visual BASIC etc


Primer programa

/!\ Todo lo que este después de doble barra inclinada hacia la derecha significa comentario, es decir no hacer parte del código fuente, es solo una explicación

Citar
Proceso ejp00_en_PSEINT //()
   // usar perfil flexibles
   Borrar Pantalla;
   Escribir "Hola Mundo"; // despliega en pantalla: "Hola Mundo" y salta a la siguiente linea
   Escribir ""; // no imprime nada, pero salta de linea
   
   Escribir "Hola";  // despliega en pantalla: "Hola" y salta a la siguiente linea
   Escribir "Mundo"; // despliega en pantalla: "Mundo" y salta a la siguiente linea
   Escribir ""; // no imprime nada, pero salta de linea
   
   
   Escribir Sin Saltar "Hola", "Mundo", ", viva la programación "; // despliega en pantalla continuamente: "HolaMundo, viva la programación" y no salta al final de la impresión
   Escribir "en PSEINT";
   Escribir "";
 FinProceso


Los que deseen probar el anterior código en PSEINT simplemente crear un programa nuevo copian el texto anterior y pegan , luego lo corren si tienen alguna duda no duden en escribir


La salida debe ser la siguiente
Código: [Seleccionar]
Hola Mundo

Hola
Mundo

HolaMundo, viva la programación en PSEINT

HolaMundo, viva la programacion
en PSEINT

13 Octubre, 2014, 12:47 am
Respuesta #3

ingmarov

  • Moderador Global
  • Mensajes: 4,628
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Intentaré instalarlo en Ubuntu, probaré y luego te cuento como me fue.

saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

13 Octubre, 2014, 03:46 am
Respuesta #4

ingmarov

  • Moderador Global
  • Mensajes: 4,628
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Ya lo he probado y me gusta bastante, podré volver a practicar la programación  :aplauso: .

Pongo el programa en el spoiler para que los mensajes no sean muy "grandes". (ahorrar espacio)

Mira mi "primer" programa: Calcula el máximo común divisor y el mínimo común múltiplo usando el algoritmo de Euclides.
Spoiler
Citar
Proceso Calculo_mcd_mcm
   Definir num1,num2,res,mult Como Entero;
   Escribir "INGRESA DOS NUMEROS ENTEROS";
   Leer num1;
   Leer num2;
   mult<-num1*num2;
   res<-1;
   MIENTRAS res<>0 HACER
      SI num1>num2 ENTONCES
         res<-num1%num2;
         num1<-res;
      SINO
         res<-num2%num1;
         num2<-res;
      FINSI
      SI res=0&num1<>0
         ESCRIBIR "mcd:" num1;
         ESCRIBIR "mcm:" mult/num1;
      FinSi
      SI res=0&num2<>0
         ESCRIBIR "mcd:" num2;
         ESCRIBIR "mcm:" mult/num2;
      FinSi
      
   FINMIENTRAS   
      
FinProceso
[cerrar]
Corrí el programa y funciona muy bien. ;D ;D

Seguiré probando

¿Sabes si hay nombres de variables que no se deben usar?
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

13 Octubre, 2014, 06:23 am
Respuesta #5

ingmarov

  • Moderador Global
  • Mensajes: 4,628
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Otra prueba exitosa, luego probaré con matrices

Pongo el programa en el spoiler para que los mensajes no sean muy "grandes". (ahorrar espacio)

Programa para la función factorial
Spoiler
Citar
Proceso Calculo_factorial
   Definir num1,num2,mult Como Entero;
   Escribir "INGRESA NÚMERO ENTERO";
   Leer num1;
   mult<-1;
   num2<-num1;
   Si num1<>0 Entonces
   MIENTRAS num2<>0 HACER
      mult<-mult*num2;
      num2<-num2-1;
   FINMIENTRAS
   Escribir num1,"!= ", mult;
   Sino
   Escribir "0!=1"
   FinSi

FinProceso

[cerrar]
Editado

Aquí tuve un inconveniente en la linea

Escribir "El factorial de " num1;
   Escribir "es:" mult;
Yo quería escribir una sola linea asi: Escribir num1 "!=" mult;
¿Se puede hacer esto?


solo era necesario separar lo que quería escribir con comas ",".
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

14 Octubre, 2014, 02:52 am
Respuesta #6

cristianoceli

  • Experto
  • Mensajes: 687
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
Ya lo he probado y me gusta bastante, podré volver a practicar la programación  :aplauso: .

Pongo el programa en el spoiler para que los mensajes no sean muy "grandes". (ahorrar espacio)

Mira mi "primer" programa: Calcula el máximo común divisor y el mínimo común múltiplo usando el algoritmo de Euclides.
Spoiler
Citar
Proceso Calculo_mcd_mcm
   Definir num1,num2,res,mult Como Entero;
   Escribir "INGRESA DOS NUMEROS ENTEROS";
   Leer num1;
   Leer num2;
   mult<-num1*num2;
   res<-1;
   MIENTRAS res<>0 HACER
      SI num1>num2 ENTONCES
         res<-num1%num2;
         num1<-res;
      SINO
         res<-num2%num1;
         num2<-res;
      FINSI
      SI res=0&num1<>0
         ESCRIBIR "mcd:" num1;
         ESCRIBIR "mcm:" mult/num1;
      FinSi
      SI res=0&num2<>0
         ESCRIBIR "mcd:" num2;
         ESCRIBIR "mcm:" mult/num2;
      FinSi
      
   FINMIENTRAS   
      
FinProceso
[cerrar]
Corrí el programa y funciona muy bien. ;D ;D

Seguiré probando

¿Sabes si hay nombres de variables que no se deben usar?


Gracias por compartir, mis conocimientos en estos temas son prácticamente nulos. Intentaré aprender con mi estudio autodidacta

14 Octubre, 2014, 03:00 am
Respuesta #7

ingmarov

  • Moderador Global
  • Mensajes: 4,628
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino

Gracias por compartir, mis conocimientos en estos temas son prácticamente nulos. Intentaré aprender con mi estudio autodidacta

Revisa el programa y si tienes alguna duda, solo escríbela, te responderé tan pronto pueda.

Te recomiendo bajar e instalar Pseint, es liviano (15MB) y al menos en linux es portable. Puedes copiar el código del programa
y ejecutarlo.
Publicaré otros programas pronto.

Hasta luego.
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

14 Octubre, 2014, 05:13 am
Respuesta #8

compsystems

  • Junior
  • Mensajes: 60
  • Karma: +0/-0
  • Sexo: Masculino
PSEINT es sorprendente, observen el código siguiente es capaz de interpretar expresiones coloquiales y no simbolos >=, <=  sino palabras Si a es mayor que b y a es mayor que c entonces y puede escribirse todo en minúsculas

... respondo a tu pregunta ingmarov, me di cuenta que no se puede usar la letra "y" pues es un conector lógico, pero si acepto "que", , "sin" hay que probar con otros, pero no debería aceptar las palabras reservadas de programación, para evitar ambigüedades, en seguida le pregunto Pablo Novara, Alias (zaskar) autor de PSEINT

Código: [Seleccionar]
Proceso sin_titulo

Definir a, b Como Entero

        Definir que, sin Como Entero  // acepta que como "variable"

Imprimir "Ingrese 3 numeros (los dos primeros deben ser enteros):"
Leer a b c

        Si a es mayor que b y a es mayor que c entonces
Escribir a " es el mayor"
sino
Si b Es Mayor Que c Entonces
Escribir b " es el mayor"
Sino
Escribir c " es el mayor"
FinSi
FinSi


Mostrar "Pulse una tecla para continuar"
Esperar Tecla
Limpiar Pantalla

Si a Es Par
Escribir a " es par"
Sino
Escribir a " es impar"
FinSi

Escribir Sin Bajar "Los divisores de " b " son: "
Para i Desde 1 Hasta b-1
Si b Es Multiplo De i
Escribir sin bajar i " "
Fin Si
Fin Para
Escribir b

Si c Es Entero
Mostrar C " es entero"
Sino
Mostrar C " es real"
FinSi

FinProceso

PD: Como soy nuevo en el foro, no se como darle formato a un código, por ejemplo que aparezca con una fuente de texto mas grande, resaltado de sintaxis etc

Gracias

Jaime

14 Octubre, 2014, 05:51 am
Respuesta #9

ingmarov

  • Moderador Global
  • Mensajes: 4,628
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola compsystems

Lo he estado revisando, me gusta que tiene un manual bastante completo. No es tan necesario buscar en internet información.

Esperaré conocer el nombre de variables reservadas.

PD. Yo tampoco sé como cambiar el tamaño dentro de las etiquetas [code]   [/code], pero no le veo problema basta hacer zoom a la ventana del navegador.

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

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

feriva

  • Matemático
  • Mensajes: 8,923
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • ¡EUKERA!... ¡UEREKA!... ¡EUREKA! (corregido)

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

  • Aprendiz
  • Mensajes: 304
  • 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

  • Junior
  • Mensajes: 60
  • 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

  • Aprendiz
  • Mensajes: 304
  • 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

  • Junior
  • Mensajes: 60
  • 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: 4,628
  • 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

  • Junior
  • Mensajes: 60
  • Karma: +0/-0
  • Sexo: Masculino

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

compsystems

  • Junior
  • Mensajes: 60
  • 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

  • Aprendiz
  • Mensajes: 304
  • 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: 4,628
  • 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...