Autor Tema: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...  (Leído 65190 veces)

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

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
!Hola!

Hay un software desarrollado 100% en castellano, 100% código libre y por un docente Sur Americano de Argentina, el cual permite escribir en Lenguaje pseudo-código (mas cercano al humano) y luego convertirlo a lenguaje C/C++, con la opción también de crear diagrama de flujo (rombos, elipses, cuadrados, etcétera), correrlo paso a paso y mas ...

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 BASIC, etcétera ya que limitan la habilidad de la persona a ser creativo cuando se "caza" con un solo lenguaje

En el foro de discusión de este proyecto se habla de incorporar una opción de exportar el pseudo-code no solo a lenguaje c/c++, sino  a otros posiblemente en futuro JAVA, BASIC ..., y por que no alguna manera para incluir bibliotecas que puedan programar un microcontrolador determinado



Link del proyecto

http://pseint.sourceforge.net/

Veamos unos ejemplos

Ejemplo : Busca el mayor de una entrada de datos

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

Código: C++
  1. Proceso Estricto
  2.  
  3. Definir VAL_MAYOR,ARREGLO,CANT,I Como Enteros;
  4.  
  5. Dimension ARREGLO[100];
  6. Escribir "Ingrese la cantidad de numeros:";
  7. Leer CANT;
  8.  
  9. Para I<-0 Hasta CANT-1 Hacer
  10.      Escribir "Ingrese un numero:";
  11.      Leer ARREGLO[I];
  12. FinPara
  13.  
  14. VAL_MAYOR<-0;
  15. Para I<-0 Hasta CANT-1 Hacer
  16.      Si ARREGLO[I]>VAL_MAYOR Entonces
  17.          VAL_MAYOR<-ARREGLO[i];
  18.      FinSi
  19. FinPara
  20.  
  21. Si VAL_MAYOR % 2 = 0 Entonces
  22.      Escribir "El mayor es ",VAL_MAYOR," y es par";
  23. Sino
  24.      Escribir "El mayor es ",VAL_MAYOR," y es impar";
  25. FinSi
  26.  
  27. FinProceso

El mismo código anterior pero en versión Pseudocode mas cercano al lenguaje humano
Código: C++
  1. Proceso Flexible
  2.  
  3.  
  4. Escribir "Ingrese la cantidad de numeros:"
  5. Leer CANT
  6. Dimension ARREGLO[CANT]
  7.  
  8. Para Cada Elemento de ARREGLO
  9.      Escribir "Ingrese un numero:"
  10.      Leer ELEMENTO
  11. Fin Para
  12.  
  13. VAL_MAYOR<-0
  14. Para Cada ELEMENTO de ARREGLO
  15.      Si ELEMENTO Es Mayor Que VAL_MAYOR
  16.          VAL_MAYOR<-ELEMENTO
  17.      Fin Si
  18. Fin Para
  19.  
  20. Si VAL_MAYOR Es Par
  21.      Escribir "El mayor es " VAL_MAYOR " y es par"
  22. Sino
  23.      Escribir "El mayor es " VAL_MAYOR " y es impar"
  24. Fin Si
  25.  
  26. FinProceso

 
Codigo exportado a C++ y para compilarlo con el IDE Zinjai del mismo autor
http://zinjai.sourceforge.net/
Código: C++
  1. #include<iostream>
  2. using namespace std;
  3. int main() {
  4. int arreglo[100];
  5. int cant;
  6. int i;
  7. int val_mayor;
  8. cout<<"Ingrese la cantidad de numeros:"<<endl;
  9. cin>>cant;
  10. for (i=0;i<=cant-1;i++) {
  11. cout<<"Ingrese un numero:"<<endl;
  12. cin>>arreglo[i];
  13. }
  14. val_mayor=0;
  15. for (i=0;i<=cant-1;i++) {
  16. if (arreglo[i]>val_mayor) {
  17. val_mayor=arreglo[i];
  18. }
  19. }
  20. if (val_mayor%2==0) {
  21. cout<<"El mayor es "<<val_mayor<<" y es par"<<endl;
  22. } else {
  23. cout<<"El mayor es "<<val_mayor<<" y es impar"<<endl;
  24. }
  25. return 0;

Imagen del diagrama de flujo

« Última modificación: 17 de Octubre de 2012, 22:16:36 por CompSystems »
Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #1 en: 30 de Octubre de 2012, 11:42:28 »
Ya existe un software que por medio de diagrama de flujos programa microcontroladores
Mas info en:
http://www.matrixmultimedia.com/resources/files/datasheets/Flowcode5Booklet-2.pdf



También encontré un proyecto llamado SLE http://www.cnc.una.py/sl/SL-descarga.html

« Última modificación: 30 de Octubre de 2012, 17:49:53 por CompSystems »
Desde Colombia

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #2 en: 30 de Octubre de 2012, 12:43:39 »
Tambien esta NIPLE, desarrollado en Argentina para el mudo !!



Su pagina WEB:

http://www.niplesoft.net/caracteristicas.htm
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #3 en: 18 de Diciembre de 2012, 11:20:11 »
Pablo el autor de PseInt se ha propuesto mejorar su aplicación de pseudo-code, la cual incluirá codificación con ejecución simultanea o en tiempo real :-/

Video Introductorio de la futura versión
http://www.youtube.com/watch?feature=player_embedded&v=lHn3D7WGyeY

No es una dirección de youtube válida
Inspirado en otro vídeo
No es una dirección de vimeo válida
Pensemos si existiera un IDE por ejemplo de programación de microcontroladores con un simulador y que nosotros mientras estemos codificando veamos los resultados en pantalla sin esperar a terminar de codificar o compilar. O ya existe una aplicación que haga esto?

PD:
1: El editor no me interpreta [ youtube]...[youtube] para pre-visualizar los vídeos
2: Quien desee colaborar con PseInt, por ejemplo actualmente solo exporta Pseudo-Code a C/C++ entonces se busca entusiastas para crear el archivo que exporte a BASIC, FORTRAN, JAVA etc

Para para poder exportar a un determinado lenguaje hay que crear un archivo basado en el siguiente

Archivo export_cpp.cpp para exportar Pseudo-Code a C/C++
Fuente
http://sourceforge.net/p/pseint/code/ci/4af8b332122dac46b111220f9c9ed3e0dc28c7ca/tree/psexport/export_cpp.cpp
Código: C++
  1. #include "export_cpp.h"
  2. #include <sstream>
  3. #include <cstdlib>
  4. #include "../pseint/new_evaluar.h"
  5. #include "../pseint/utils.h"
  6. #include "version.h"
  7. #include "new_memoria.h"
  8. #include "exportexp.h"
  9. using namespace std;
  10.  
  11. #define MAIN_LINE_TEXT "int main() {"
  12. #define USING_NAMESPACE_TEXT "using namespace std;"
  13.  
  14. bool include_cmath=false;
  15. bool include_cstdlib=false;
  16.  
  17. string cpp_function(string name, string args) {
  18.         if (name=="sen") {
  19.                 include_cmath=true;
  20.                 return string("sin")+args;
  21.         } else if (name=="tan") {
  22.                 include_cmath=true;
  23.                 return string("tan")+args;
  24.         } else if (name=="asen") {
  25.                 include_cmath=true;
  26.                 return string("asin")+args;
  27.         } else if (name=="acos") {
  28.                 include_cmath=true;
  29.                 return string("acos")+args;
  30.         } else if (name=="cos") {
  31.                 include_cmath=true;
  32.                 return string("cos")+args;
  33.         } else if (name=="raiz") {
  34.                 include_cmath=true;
  35.                 return string("sqrtf")+args;
  36.         } else if (name=="rc") {
  37.                 include_cmath=true;
  38.                 return string("sqrtf")+args;
  39.         } else if (name=="abs") {
  40.                 include_cmath=true;
  41.                 return string("abs")+args;
  42.         } else if (name=="ln") {
  43.                 include_cmath=true;
  44.                 return string("log")+args;
  45.         } else if (name=="exp") {
  46.                 include_cmath=true;
  47.                 return string("exp")+args;
  48.         } else if (name=="azar") {
  49.                 include_cstdlib=true;
  50.                 return string("(rand()%")+colocarParentesis(args.substr(1,args.size()-2))+")";
  51.         } else if (name=="atan") {
  52.                 include_cmath=true;
  53.                 return string("atan")+args;
  54.         } else if (name=="trunc") {
  55.                 include_cmath=true;
  56.                 return string("floor")+args;
  57.         } else if (name=="redon") {
  58.                 include_cmath=true;
  59.                 return string("floor(")+colocarParentesis(args.substr(1,args.size()-2))+".5)";
  60.         } else
  61.                 return name+args; // no deberia pasar esto
  62. }
  63.  
  64. // resolucion de tipos
  65. void declarar_variables(t_programa &prog, bool &use_sin_tipo, bool &use_string) {
  66.        
  67.         // saltear comentarios??
  68.         t_programa::iterator it = prog.begin();
  69.         while (*it!=MAIN_LINE_TEXT) it++; it++; it++;
  70.        
  71.         map<string,tipo_var>::iterator mit=memoria->var_info.begin(), mit2=memoria->var_info.end();
  72.         string tab("\t"),dims, c1="[", c2="]", stipo;
  73.        
  74.         use_sin_tipo=false;
  75.         use_string=false;
  76.        
  77.         while (mit!=mit2) {
  78.                 tipo_var &t=mit->second;
  79.                 stipo="SIN_TIPO ";
  80.                 if (t==vt_caracter) { stipo="string "; use_string=true; }
  81.                 else if (t==vt_numerica) stipo=t.rounded?"int ":"float ";
  82.                 else if (t==vt_logica) stipo="bool ";
  83.                 else use_sin_tipo=true;
  84.                 if (t.dims) {
  85.                         dims="";
  86.                         for (int j=1;j<=t.dims[0];j++)
  87.                                 dims+=c1+IntToStr(t.dims[j])+c2;
  88.                         prog.insert(it,tab+stipo+toLower(mit->first)+dims+";");
  89.                 } else {
  90.                         prog.insert(it,tab+stipo+toLower(mit->first)+";");
  91.                 }
  92.                 mit++;
  93.         }
  94. }
  95.  
  96. void i_esperar(t_programa &prog, string param,string tabs);
  97. void i_borrar(t_programa &prog, string param,string tabs);
  98. void i_escribir(t_programa &prog, string param,string tabs);
  99. void i_leer(t_programa &prog, string param,string tabs);
  100. void i_secuencial(t_programa &prog, string param,string tabs);
  101. void i_asignacion(t_programa &prog, string param1, string param2,string tabs);
  102. void i_si(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q, t_algoritmo_it s,string tabs);
  103. void i_mientras(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q,string tabs);
  104. void i_segun(t_programa &prog, list<t_algoritmo_it> its,string tabs);
  105. void i_repetir(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q,string tabs);
  106. void i_paracada(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q,string tabs);
  107. void i_para(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q,string tabs);
  108. void i_bloque(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q,string tabs);
  109. void i_dimension(t_programa &prog, string params, string tabs);
  110.  
  111. void i_dimension(t_programa &prog, string params, string tabs) {
  112.         params=params+",";
  113.         while (params.size()>1) {
  114.                 unsigned int i=1;
  115.                 while (params[i]!=')') i++;
  116.                 while (params[i]!=',') i++;
  117.                 string arr = params.substr(0,i);
  118.                 params.erase(0,i+1);
  119.                 i=0;
  120.                 while(i<arr.size())
  121.                         if (arr[i]==' ' || arr[i]=='\t')
  122.                                 arr.erase(i,1);
  123.                         else
  124.                                 i++;
  125.                 arr[arr.size()-1]=',';
  126.                 unsigned int p=arr.size(), c=0, pars=0;
  127.                 for (i=0;i<arr.size();i++)
  128.                         if (arr[i]=='(' && pars==0) {
  129.                                 pars++;
  130.                                 if (i<p) p=i;
  131.                         } else if (arr[i]==')') {
  132.                                 pars--;
  133.                         } else if (arr[i]==',' && pars==1) {
  134.                                 c++;
  135.                         } else if (arr[i]>='A' && arr[i]<='Z') {
  136.                                 arr[i]=tolower(arr[i]);
  137.                         }
  138.                 int *dims=new int[c+1];
  139.                 string nom=arr.substr(0,p);
  140.                 dims[0]=c;
  141.                 int f=++p; c=1; pars=0;
  142.                 while (p<arr.size()) {
  143.                         if (arr[p]=='(')
  144.                                 pars++;
  145.                         else if (arr[p]==')')
  146.                                 pars++;
  147.                         else if (arr[p]==',' && pars==0) {
  148.                                 tipo_var ch;
  149.                                 dims[c++]=atoi(Evaluar(arr.substr(f,p-f),ch).c_str());
  150.                                 f=p+1;
  151.                         }
  152.                         p++;
  153.                 }
  154.                 memoria->AgregarArreglo(nom,dims);
  155.         }
  156. }
  157.  
  158. void i_esperar(t_programa &prog, string param, string tabs){
  159.         insertar(prog,tabs+"cin.get();");
  160. }
  161.  
  162. void i_borrar(t_programa &prog, string param, string tabs){
  163.         insertar(prog,tabs+"cout<<endl; // no hay forma directa de borrar la pantalla con C++ estandar");
  164. }
  165.  
  166. void i_escribir(t_programa &prog, string param, string tabs){
  167.         bool comillas=false, saltar=true;
  168.         int parentesis=0;
  169.         string linea="cout",expr;
  170.         int lastcoma=0;
  171.         for (unsigned int i=0;i<param.size();i++) {
  172.                 if (param[i]=='\'') {
  173.                         comillas=!comillas;
  174.                         param[i]='"';
  175.                 } else if (!comillas) {
  176.                         if (param[i]=='(') parentesis++;
  177.                         else if (param[i]==')') parentesis--;
  178.                         else if (parentesis==0 && param[i]==',') {
  179.                                 expr=param.substr(lastcoma,i-lastcoma);
  180.                                 if (expr=="**SINSALTAR**") saltar=false;
  181.                                 else
  182.                                         linea+=string("<<")+expresion(expr);
  183.                                 lastcoma=i+1;
  184.                         }
  185.                 }
  186.         }
  187.         expr=param.substr(lastcoma,param.size()-lastcoma);
  188.         if (expr=="**SINSALTAR**") saltar=false;
  189.         else linea+=string("<<")+expresion(expr);
  190.         if (saltar) linea+="<<endl;"; else linea+=";";
  191.         insertar(prog,tabs+linea);
  192. }
  193.  
  194. void i_leer(t_programa &prog, string param, string tabs){
  195.         param+=",";
  196.         bool comillas=false;
  197.         int parentesis=0;
  198.         string linea="cin";
  199.         int lastcoma=0;
  200.         for (unsigned int i=0;i<param.size();i++) {
  201.                 if (param[i]=='\'') {
  202.                         comillas=!comillas;
  203.                         param[i]='"';
  204.                 } else if (!comillas) {
  205.                         if (param[i]=='(') parentesis++;
  206.                         else if (param[i]==')') parentesis--;
  207.                         else if (parentesis==0 && param[i]==',') {
  208.                                 string varname=expresion(param.substr(lastcoma,i-lastcoma));
  209.                                 linea+=">>";
  210.                                 linea+=varname;
  211.                                 if (varname.find('[')==string::npos) {
  212.                                         tipo_var t;
  213.                                         memoria->DefinirTipo(varname,t);
  214.                                 }
  215.                                 lastcoma=i+1;
  216.                         }
  217.                 }
  218.         }
  219.         insertar(prog,tabs+linea+";");
  220. }
  221.  
  222. void i_definir(t_programa &prog, string param, string tabs){
  223.         int lastcoma=0;
  224.         char tipo='*';
  225.         if (param.size()>12 && param.substr(param.size()-12,12)==" COMO ENTERO") { tipo='i'; param=param.substr(0,param.size()-12); }
  226.         if (param.size()>10 && param.substr(param.size()-10,10)==" COMO REAL") { tipo='f'; param=param.substr(0,param.size()-10); }
  227.         if (param.size()>14 && param.substr(param.size()-14,14)==" COMO CARACTER") { tipo='s'; param=param.substr(0,param.size()-14); }
  228.         if (param.size()>12 && param.substr(param.size()-12,12)==" COMO LOGICO") { tipo='b'; param=param.substr(0,param.size()-12); }
  229.         param+=",";
  230.         for (unsigned int i=0;i<param.size();i++) {
  231.                 if (param[i]==',') {
  232.                         string varname=expresion(param.substr(lastcoma,i-lastcoma));
  233.                         if (tipo=='i') memoria->DefinirTipo(varname,vt_numerica,true);
  234.                         else if (tipo=='f') memoria->DefinirTipo(varname,vt_numerica,false);
  235.                         else if (tipo=='s') memoria->DefinirTipo(varname,vt_caracter,false);
  236.                         else if (tipo=='b') memoria->DefinirTipo(varname,vt_logica,false);
  237.                         lastcoma=i+1;
  238.                 }
  239.         }
  240. }
  241.  
  242. void i_asignacion(t_programa &prog, string param1, string param2, string tabs){
  243.         tipo_var t;
  244.         param1=expresion(param1);
  245.         param2=expresion(param2,t);
  246.         insertar(prog,tabs+param1+"="+param2+";");
  247.         memoria->DefinirTipo(param1,t);
  248. }
  249.  
  250. void i_si(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q, t_algoritmo_it s, string tabs){
  251.         insertar(prog,tabs+"if ("+expresion((*r).par1)+") {");
  252.         i_bloque(prog,++r,q,tabs+"\t");
  253.         if (q!=s) {
  254.                 insertar(prog,tabs+"} else {");
  255.                 i_bloque(prog,++q,s,tabs+"\t");
  256.         }
  257.         insertar(prog,tabs+"}");
  258. }
  259.  
  260. void i_mientras(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q, string tabs){
  261.         insertar(prog,tabs+"while ("+expresion((*r).par1)+") {");
  262.         i_bloque(prog,++r,q,tabs+"\t");
  263.         insertar(prog,tabs+"}");
  264. }
  265.  
  266. void i_segun(t_programa &prog, list<t_algoritmo_it> its, string tabs){
  267.         list<t_algoritmo_it>::iterator p,q,r;
  268.         q=p=its.begin();r=its.end();
  269.         t_algoritmo_it i=*q;
  270.         string opcion=expresion((*i).par1); int p1=0, p2=opcion.size()-1;
  271.         AplicarTipo(opcion,p1,p2,vt_numerica);
  272.         insertar(prog,tabs+"switch (int("+expresion((*i).par1)+")) {");
  273.         q++;p++;
  274.         while (++p!=r) {
  275.                 i=*q;
  276.                 if ((*i).par1=="DE OTRO MODO")
  277.                         insertar(prog,tabs+"default:");
  278.                 else
  279.                         insertar(prog,tabs+"case "+expresion((*i).par1)+":");
  280.                 i_bloque(prog,++i,*p,tabs+"\t");
  281.                 insertar(prog,tabs+"\tbreak;");
  282.                 q++;
  283.         }
  284.         insertar(prog,tabs+"}");
  285. }
  286.  
  287. void i_repetir(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q, string tabs){
  288.         insertar(prog,tabs+"do {");
  289.         i_bloque(prog,++r,q,tabs+"\t");
  290.         insertar(prog,tabs+"} while ("+invert_expresion(expresion((*q).par1))+");");
  291. }
  292.  
  293. void i_para(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q, string tabs){
  294.        
  295.         memoria->DefinirTipo(toLower((*r).par1),vt_numerica);
  296.        
  297.         string var=expresion((*r).par1), ini=expresion((*r).par2), fin=expresion((*r).par3), paso=(*r).par4;
  298.         if ((*r).par4[0]=='-') {
  299. //              if (lang_cpp) {
  300.                         if (paso=="-1")
  301.                                 insertar(prog,tabs+"for ("+var+"="+ini+";"+var+">="+fin+";"+var+"--) {");
  302.                         else
  303.                                 insertar(prog,tabs+"for ("+var+"="+ini+";"+var+">="+fin+";"+var+"-="+expresion(paso.substr(1,paso.size()-1))+") {");
  304. //              } else
  305. //                      insertar(prog,tabs+"for ("+var+"="+ini+";"+var+">="+fin+";"+var+"="+var+"-"+expresion(paso)+") {");
  306.         } else {
  307. //              if (lang_cpp) {
  308.                         if (paso=="1")
  309.                                 insertar(prog,tabs+"for ("+var+"="+ini+";"+var+"<="+fin+";"+var+"++) {");
  310.                         else
  311.                                 insertar(prog,tabs+"for ("+var+"="+ini+";"+var+"<="+fin+";"+var+"+="+expresion(paso)+") {");
  312. //              } else
  313. //                      insertar(prog,tabs+"for ("+var+"="+ini+";"+var+"<="+fin+";"+var+"="+var+"+"+expresion(paso)+") {");
  314.         }
  315.         i_bloque(prog,++r,q,tabs+"\t");
  316.         insertar(prog,tabs+"}");
  317. }
  318.  
  319. void i_paracada(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q, string tabs){
  320.         string var=toLower((*r).par2), aux=toLower((*r).par1);
  321.         string first=var,last=var,inc=var;
  322.         int *dims=memoria->LeerDims(var);
  323.         if (!dims) { insertar(prog,string("Error: ")+var+" no es un arreglo"); return; }
  324.         for (int i=1;i<=dims[0];i++) {
  325.                 first+="[0]";
  326.                 if (i!=dims[0]) inc+="[0]";
  327.                 last+="[";
  328.                 last+=IntToStr(dims[i]-1);
  329.                 last+="]";
  330.         }
  331.         insertar(prog,tabs+"for (typeof(&("+first+")) ptr_aux=&("+first+");ptr_aux<=&("+last+");ptr_aux++) {");
  332.         insertar(prog,tabs+"\ttypeof("+first+") &"+aux+"=*ptr_aux;");
  333.         i_bloque(prog,++r,q,tabs+"\t");
  334.         insertar(prog,tabs+"}");
  335. }
  336.  
  337. //-----------------------++;
  338. void i_bloque(t_programa &prog, t_algoritmo_it r, t_algoritmo_it q,string tabs){
  339.         if (r==q) return;
  340.         int deep;
  341.         string s;
  342.        
  343.         while (r!=q) {
  344.                 s=(*r).nombre;
  345.                 if (s=="ESCRIBIR") i_escribir(prog,(*r).par1,tabs);
  346.                 else if (s=="BORRARPANTALLA") i_borrar(prog,(*r).par1,tabs);
  347.                 else if (s=="ESPERARTECLA") i_esperar(prog,(*r).par1,tabs);
  348.                 else if (s=="DIMENSION") i_dimension(prog,(*r).par1,tabs);
  349.                 else if (s=="DEFINIR") i_definir(prog,(*r).par1,tabs);
  350.                 else if (s=="LEER") i_leer(prog,(*r).par1,tabs);
  351.                 else if (s=="ASIGNACION") i_asignacion(prog,(*r).par1,(*r).par2,tabs);
  352.                 else if (s=="MIENTRAS") {
  353.                         t_algoritmo_it r1=r++;
  354.                         deep=0;
  355.                         while ( ! ((*r).nombre=="FINMIENTRAS"  && deep==0) ) {
  356.                                 if ((*r).nombre=="MIENTRAS") deep++;
  357.                                 else if ((*r).nombre=="FINMIENTRAS") deep--;
  358.                                 r++;
  359.                         }
  360.                         i_mientras(prog,r1,r,tabs);
  361.                 } else if (s=="REPETIR") {
  362.                         t_algoritmo_it r1=r++;
  363.                         deep=0;
  364.                         while ( ! ((*r).nombre=="HASTAQUE"  && deep==0) ) {
  365.                                 if ((*r).nombre=="REPETIR") deep++;
  366.                                 else if ((*r).nombre=="HASTAQUE") deep--;
  367.                                 r++;
  368.                         }
  369.                         i_repetir(prog,r1,r,tabs);
  370.                 } else if (s=="SEGUN") {
  371.                         list<t_algoritmo_it> its;
  372.                         its.insert(its.end(),r);
  373.                         deep=0;
  374.                         r++;
  375.                         while ( ! ((*r).nombre=="FINSEGUN" && deep==0) ) {
  376.                                 if (deep==0 && (*r).nombre=="OPCION")
  377.                                         its.insert(its.end(),r);
  378.                                 else if ((*r).nombre=="SEGUN")
  379.                                         deep++;
  380.                                 else if ((*r).nombre=="FINSEGUN")
  381.                                         deep--;
  382.                                 r++;
  383.                         }
  384.                         its.insert(its.end(),r);
  385.                         i_segun(prog,its,tabs);
  386.                 } else if (s=="PARA") {
  387.                         t_algoritmo_it r1=r++;
  388.                         deep=0;
  389.                         while ( ! ((*r).nombre=="FINPARA" && deep==0) ) {
  390.                                 if ((*r).nombre=="PARA"||(*r).nombre=="PARACADA") deep++;
  391.                                 else if ((*r).nombre=="FINPARA") deep--;
  392.                                 r++;
  393.                         }
  394.                         i_para(prog,r1,r,tabs);
  395.                 } else if (s=="PARACADA") {
  396.                         t_algoritmo_it r1=r++;
  397.                         deep=0;
  398.                         while ( ! ((*r).nombre=="FINPARA" && deep==0) ) {
  399.                                 if ((*r).nombre=="PARA"||(*r).nombre=="PARACADA") deep++;
  400.                                 else if ((*r).nombre=="FINPARA") deep--;
  401.                                 r++;
  402.                         }
  403.                         i_paracada(prog,r1,r,tabs);
  404.                 } else if (s=="SI") {
  405.                         t_algoritmo_it r1=r++,r2;
  406.                         r++;
  407.                         deep=0;
  408.                         while ( ! ( ( (*r).nombre=="FINSI" || (*r).nombre=="SINO") && deep==0) ) {
  409.                                 if ((*r).nombre=="SI") deep++;
  410.                                 else if ((*r).nombre=="FINSI") deep--;
  411.                                 r++;
  412.                         }
  413.                         r2=r;
  414.                         while ( ! ( (*r).nombre=="FINSI" && deep==0) ) {
  415.                                 if ((*r).nombre=="SI") deep++;
  416.                                 else if ((*r).nombre=="FINSI") deep--;
  417.                                 r++;
  418.                         }
  419.                         i_si(prog,r1,r2,r,tabs);
  420.                 }
  421.                 r++;
  422.         }
  423. }
  424.  
  425. void cpp_main(t_programa &prog, t_algoritmo &alg) {
  426.        
  427.        
  428.         t_algoritmo_it r=alg.begin(),q=alg.end();
  429.        
  430.         // cabecera
  431.         stringstream version;
  432.         version<<VERSION<<"-"<<ARCHITECTURE;
  433.         prog.insert(prog.end(),string("// Este codigo ha sido generado por el modulo psexport ")+version.str()+" de PSeInt");
  434.         prog.insert(prog.end(),"// dado que dicho modulo se encuentra aun en desarrollo y en etapa experimental puede que el codigo generado no sea completamente correcto");
  435.         prog.insert(prog.end(),"// si encuentra errores, por favor reportelos a zaskar_84@yahoo.com.ar");
  436.         prog.insert(prog.end(),"");
  437.         prog.insert(prog.end(),"#include<iostream>");
  438.         prog.insert(prog.end(),USING_NAMESPACE_TEXT);
  439.         prog.insert(prog.end(),"");
  440.         prog.insert(prog.end(),MAIN_LINE_TEXT);
  441.         prog.insert(prog.end(),"");
  442.         prog.insert(prog.end(),"");
  443.        
  444.         //cuerpo del proceso
  445.         r++;
  446.         i_bloque(prog,r,q,"\t");
  447.        
  448.         // cola
  449.         prog.insert(prog.end(),"");
  450.         prog.insert(prog.end(),"\treturn 0;");
  451.         prog.insert(prog.end(),"");
  452.         prog.insert(prog.end(),"}");
  453.         prog.insert(prog.end(),"");
  454.        
  455.         bool use_sin_tipo, use_string;
  456.         declarar_variables(prog,use_sin_tipo, use_string);
  457.         if (include_cmath||include_cstdlib) {
  458.                 t_programa::iterator it=prog.begin();
  459.                 while (*it!=USING_NAMESPACE_TEXT) it++;
  460.                 if (include_cmath) it=prog.insert(it,"#include<cmath>");
  461.                 if (include_cstdlib) it=prog.insert(it,"#include<cstdlib>");
  462.         }
  463.         if (use_string||use_sin_tipo) {
  464.                 t_programa::iterator it=prog.begin();
  465.                 while (*it!=MAIN_LINE_TEXT) it++;
  466.                 if (use_sin_tipo) {
  467.                         it=prog.insert(it,"");
  468.                         it=prog.insert(it,"#define SIN_TIPO string");
  469.                         it=prog.insert(it,"// el usuario debe reemplazar sus ocurrencias por el tipo adecuado (usualmente int,float,string o bool)");
  470.                         it=prog.insert(it,"// para las variables que no se pudo determinar el tipo se utiliza la constante SIN_TIPO");
  471.                 }
  472.                 if (use_string) {
  473.                         it=prog.insert(it,"");
  474.                         it=prog.insert(it,"// pero obliga a agregar un cin.ignore() si antes del getline se leyó otra variable con >>.");
  475.                         it=prog.insert(it,"// para leer una linea completa se debe utilzar getline (ej, reemplazar cin>>x por getline(cin,x),");
  476.                         it=prog.insert(it,"// para leer variables de texto se utiliza el operador << del objeto cin, que lee solo una palabra");
  477.                 }
  478.         }
  479.        
  480. }
« Última modificación: 18 de Diciembre de 2012, 11:53:22 por CompSystems »
Desde Colombia

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #4 en: 18 de Diciembre de 2012, 11:59:33 »
Pensemos si existiera un IDE por ejemplo de programación de microcontroladores con un simulador y que nosotros mientras estemos codificando veamos los resultados en pantalla sin esperar a terminar de codificar o compilar. O ya existe una aplicación que haga esto?

No se si para Microchip existe, pero se que para los micros de Freescale existe el CodeWarrior que hace mas o menos lo que vos pedis.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #5 en: 14 de Marzo de 2013, 09:32:13 »
Tutorial Programación en PSeInt

Por Lic. Rommel Castillo Suazo

http://sourceforge.net/p/pseint/discussion/2368332/thread/f0dfb464/0be3/attachment/Manual%20PSeInt.doc



PseInt, es la abreviatura de Pseudocode Interpreter, Intérprete de Pseudocódigo. Este programa fue creado como proyecto final para la materia Programación I de la carrera Ingeniería en Informática de la Facultad de Ingeniería y Ciencias Hídricas de la Universidad Nacional del Litoral, del en aquel momento estudiante Pablo Novara.

El programa utiliza pseudocódigo, un lenguaje de programación 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 profesional.

PSeInt incluye en su editor diversas herramientas para que podamos crear y almacenar programas en este peculiar lenguaje, ejecutarlos directamente desde su interfaz, o incluso corregir posibles defectos que encontremos en su desarrollo.


¿Por qué usar PSeInt y no otro intérprete o compilador de pseudocódigo?

1) Porque es software libre, sin necesidad de andar gastando dinero, haciendo giros, etc., violando los derechos de autor ni andar creando o consiguiendo cracs, que a veces sus link están inactivos y/o los programas no dejan craquearse.
2) Está constantemente atendido por su creador, a diferencia de los otros compiladores e intérpretes de pseudocódigo que están descontinuados.
3) Posee un foro para reportar errores y obtener ayuda, está también está constantemente atendido por su creador, lo que ayuda a mejorar el programa.
4) Posee una extensa ayuda, que valga la redundancia ayuda a aprender a
usarlo, y a aprender el lenguaje.
5) Está disponible su código fuente, y con instrucciones para ejecutarlo, de modo que si sabemos C++ podremos personalizarlo, expandirlo y corregirlo.
Posee exportación a C++ para que podamos ver el mismo código en C++, lo que ayuda a aprender C++ (Se puede exportar a otro lenguaje, modificando el código fuente)
5) Se trata de un intérprete y no un compilador, el archivo no tienen por qué ser guardado en disco para ser ejecutado, haciendo más cómodo su uso.
« Última modificación: 14 de Marzo de 2013, 09:38:28 por CompSystems »
Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Programando en pseudoCodigo - convirtiendolo a C/C++ para microcontrolador
« Respuesta #6 en: 03 de Abril de 2013, 09:54:14 »
Un nuevo lanzamiento de PSeInt marzo 31: http://pseint.sourceforge.net/index.php?page=descargas.php
Estadísticas del programa

Estadísticas de descarga de PSeInt
El primer anio 2005 solo lo descargaron 371 veces
El máximo numero de descargas fue de 26110 en octubre de 2010
El total de descargas ha sido de 615246  ((:-))
Pensemos si cada descarga le aportara al desarrollador US$1 dolar
=)

Primer intento de crear un conversor de pseudo code a C/C++ para microcontroladores usanso PSeInt ( no se por que codificando en este programa me fluyen las ideas, mientras que en C, me distraigo mucho, la respuesta es obvia el pseudo-code es mas cercano a nuestro lenguaje

Codigo fuente original en http://sourceforge.net/p/pseint/code/ci/302b3dd55782df9400af44104bd5ffe0db1fc27a/tree/psexport/

// 1er archivo

//  export_chooser.h file

Código: C++
  1. #ifndef EXPORT_CHOOSER_H
  2. #define EXPORT_CHOOSER_H
  3. #include <string>
  4. #include "defines.h"
  5. using namespace std;
  6.  
  7. enum PSE_LANG { PSE_CPP, PSE_C_microcontroller };
  8.  
  9.  
  10. string translate_function(const string &name, const string &args);
  11. void translate_main(t_programa &prog, t_algoritmo &alg);
  12.  
  13. extern PSE_LANG language;
  14.  
  15. #endif


// 2do archivo
/// export_chooser.cpp file



Código: C++
  1. #include "export_chooser.h"
  2. #include "export_cpp.h"
  3. #include "export_C_microcontroller.h"
  4.  
  5.  
  6. // PSE_LANG language=PSE_CPP; // C++ language (default )
  7.  
  8. PSE_LANG language=C_microcontroller; // C microcontroller language
  9.  
  10.  
  11. string translate_function(const string &name, const string &args) {
  12.         switch (PSE_LANG) {
  13.           PSE_CPP:
  14.                 return cpp_function(name,args);
  15.                 break;
  16.  
  17.  
  18.  
  19.           PSE_C_microcontroller:
  20.  
  21.                 return C_microcontroller_function(name,args);
  22.  
  23.                 break;
  24.  
  25.      
  26.         }
  27. }
  28.  
  29. void translate_main(t_programa & prog, t_algoritmo & alg) {
  30.        
  31.  
  32.         switch (PSE_LANG) {
  33.         PSE_CPP:
  34.                 cpp_main(prog,alg);
  35.  
  36.                 return;
  37.                 break;
  38.  
  39.  
  40.  
  41.          PSE_C_microcontroller:
  42.  
  43.  
  44.                 C_microcontroller_H_main(prog,alg);
  45.  
  46.                 return;
  47.  
  48.                 break;
  49.  
  50.         }
  51. }




// 3cer archivo

// export_C_microcontroller_H


Código: C++
  1. #ifndef EXPORT_HP_Basic_H
  2. #define EXPORT_C_microcontroller_H
  3.  
  4. #include "defines.h"
  5.  
  6. /**
  7. * @brief traduce la llamada a una función predefinida a C_microcontroller_H
  8. *
  9. * @param name    nombre de la función en pseudocódigo
  10. * @param args    string con la lista de argumentos (incluye los paréntesis)
  11. **/
  12. string C_microcontroller_function(string name, string args);
  13.  
  14.  
  15.  
  16. /**
  17. * @brief traduce el algoritmo a C_microcontroller
  18. *
  19. * @param prog    argumento de salida, donde colocar las instrucciones traducidas
  20. * @param alg     argumento de entrada, con el algoritmo ya parseado
  21. **/
  22. void C_microcontroller_main(t_programa &prog, t_algoritmo &alg);
  23.  
  24. #endif


Quien de vosotros me ayuda a crear este conversor, los códigos anteriores son apenas el inicio, el principal archivo de conversion es

export_C_microcontroller.cpp
« Última modificación: 03 de Abril de 2013, 10:33:59 por CompSystems »
Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #7 en: 02 de Mayo de 2013, 21:50:52 »
Si te gusta PSeInt es uno de los 9 candidatos,vota por el galardón de "Project Of The Month" en sourceforge.  :-/

http://twtpoll.com/ublez9
Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Programando en Lenguaje pseudo-codigo y convirtiéndolo a otros Lenguajes C,VB
« Respuesta #8 en: 02 de Enero de 2014, 18:58:32 »
 :-/ Ahora con soporte para exportar a otros lenguajes como Java, PHP, VisualBasic .Net,  C, C++

Algun voluntario que desee incluir otro lenguaje les dejo el link del archivo base de ejemplo para pasar de pseudo-code a Visual Basic, próximamente en Visual Fox Pro

http://sourceforge.net/p/pseint/code/ci/master/tree/psexport/export_vb.cpp

Otra forma de colaborar es convirtiendo unos ejemplos que el autor propone a un determinado lenguaje para que el pueda crear el archivo de conversión

mas info en: http://pseint.sourceforge.net/index.php?page=psexport.html
« Última modificación: 02 de Enero de 2014, 20:00:19 por CompSystems »
Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #9 en: 16 de Enero de 2014, 21:16:06 »
 :-/ nuevos lenguajes

Pascal, Python 2, Python 3 y JavaScript  :-/
Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #10 en: 09 de Octubre de 2014, 11:47:02 »
Ahora soporta paso a paso mostrando en el código la linea que genero la I/0

Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #11 en: 12 de Marzo de 2015, 16:12:05 »
Primera versión del 2015: incluye un gran número de correcciones, pequeñas mejoras a nivel de interfaz, perfiles actualizados (y la posibilidad de configurarlos con más detalle que antes en algunos aspectos), y una nueva funcionalidad denominada "ejercicios autocontenidos"

http://pseint.sourceforge.net/index.php?page=descargas.php

Video mostrando la funcionalidad "ejercicios autocontenidos"

Que os parece esta nueva característica, practica?, novedosa? didáctica? útil?
Desde Colombia

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re:Programando en Lenguaje pseudo-codigo y convirtiendolo a Lenguaje C/C++ ...
« Respuesta #12 en: 24 de Diciembre de 2016, 01:32:40 »
Ahora en version Android

https://play.google.com/store/apps/details?id=pe.diegoveloper.pseudocode

Me cuentan que os parece este port de win a tablet


Desde Colombia