13 abril 2025

Herramientas Libres para Ejecutar Código en Línea: Opciones Recomendadas para Estudiantes y Desarrolladores

 

En el contexto educativo y profesional, disponer de herramientas accesibles para programar desde cualquier dispositivo se ha vuelto fundamental. Las plataformas en línea permiten escribir, compilar y ejecutar código sin necesidad de instalar software adicional, facilitando tanto el aprendizaje como el desarrollo ágil.

En este artículo, exploramos una selección de herramientas libres y accesibles, comparables a OnlineGDB, ideales para estudiantes, docentes, programadores principiantes y profesionales que buscan agilidad y portabilidad.



¿Qué caracteriza a estas herramientas?

Estas plataformas comparten las siguientes ventajas:

  • Gratuitas en su versión básica

  • Disponibles en línea, desde el navegador

  • Soportan múltiples lenguajes de programación

  • Fáciles de usar y, en varios casos, sin necesidad de registro


Tabla Comparativa de Herramientas Libres

N.ºHerramientaSitio web¿Gratuita?RegistroLenguajes soportadosCaracterísticas destacadas
1OnlineGDBonlinegdb.comOpcionalC, C++, Python, Java, másSoporta depuración paso a paso, ideal para enseñanza.
2Replitreplit.comBásicoMás de 50 lenguajesPermite proyectos colaborativos y despliegue web.
3JDoodlejdoodle.comNoMás de 70 lenguajesMuy rápida, sin cuenta, perfecta para ejercicios puntuales.
4Paiza.IOpaiza.ioNoMás de 20 lenguajesEjecución inmediata de código, interfaz simple.
5PythonTutorpythontutor.comNoPython, Java, JS, C, C++Visualiza el flujo del código paso a paso.
6Glitchglitch.comBásicoJS, Node.js, HTML/CSSPrototipos web creativos, ideal para desarrollo frontend.
7Scratchscratch.mit.eduSí (para guardar)Lenguaje visual por bloquesEnseñanza básica de lógica y eventos, para escolares.
8Ideoneideone.comNoMás de 60 lenguajesPlataforma liviana, sin registro, útil para pruebas rápidas.
9Rextesterrextester.comNoMás de 30 lenguajesCompilador básico con resultados inmediatos.
10Tynkertynker.comEscolarPython, JS, visualDirigida a niños y jóvenes en formación escolar.


Recomendaciones según el uso

Para docentes: OnlineGDB y PythonTutor permiten explicar código paso a paso y hacer seguimiento visual del aprendizaje.

Para estudiantes universitarios: JDoodle y Paiza.IO son perfectos para tareas y prácticas cortas.

Para trabajos en equipo: Replit ofrece colaboración en tiempo real.

Para niveles escolares o cursos introductorios: Scratch y Tynker son didácticos y visuales.


Conclusión

La disponibilidad de plataformas libres para codificar en línea ha democratizado el aprendizaje de la programación. Herramientas como OnlineGDB, Replit o JDoodle no solo reducen barreras tecnológicas, sino que fomentan la creatividad, el trabajo colaborativo y el pensamiento computacional desde edades tempranas.

Invitamos a estudiantes, docentes y desarrolladores a explorar estas opciones, adaptarlas a sus necesidades y seguir impulsando la innovación con acceso abierto.

Integración de la Argumentación en la Enseñanza de Ciencias de la Computación en Contextos Interculturales: Aplicación del Modelo Finlandés en Puno, Perú

Aldo Zanabria Gálvez 

Resumen

El presente artículo propone una adaptación contextualizada del modelo finlandés de enseñanza argumentativa —inicialmente aplicado a Matemáticas y Física— a la enseñanza de la Ciencia de la Computación en el nivel secundario, en particular en la región de Puno. Basado en investigaciones recientes, se plantea que la argumentación puede desempeñar un papel clave en el desarrollo del pensamiento computacional, especialmente en entornos culturalmente diversos. Se analizan las tensiones lingüísticas y culturales entre poblaciones quechuas, aimaras y mestizas, y se propone una pedagogía crítica, intercultural y participativa.

1. Introducción

Finlandia ha sido reconocida por implementar uno de los sistemas educativos más eficaces del mundo, destacando la incorporación de la argumentación como eje estructural en las asignaturas de Matemáticas y Física (El Mercurio, 2018). Esta metodología busca que los estudiantes no solo comprendan fórmulas o fenómenos, sino que sean capaces de razonar, justificar y comunicar ideas complejas.

Este enfoque, aunque concebido para disciplinas clásicas, es plenamente aplicable a la Ciencia de la Computación, campo en el que el razonamiento lógico, la resolución de problemas, el diseño de algoritmos y la toma de decisiones fundamentadas son habilidades fundamentales.


2. Ciencia de la Computación y pensamiento crítico

En el contexto actual, donde la programación y el uso de sistemas computacionales están presentes en múltiples ámbitos, se hace indispensable promover no solo el aprendizaje técnico, sino una comprensión crítica del código, los algoritmos y sus implicancias sociales.

Autores como Aguaguiña Tirado (2024) y Brahmia et al. (2016) destacan que el enfoque argumentativo puede ser integrado a tareas de diseño computacional mediante preguntas como:

  • ¿Por qué este algoritmo es más eficiente?
  • ¿Qué consecuencias éticas tendría esta solución digital?
  • ¿Cómo afecta la elección de una estructura de datos en el rendimiento?

Así, enseñar programación no es solo aprender a codificar, sino formar estudiantes capaces de defender sus decisiones técnicas y construir soluciones con conciencia social y cultural.

3. Realidad puneña: diversidad como desafío y oportunidad

La región de Puno presenta una estructura sociolingüística compleja, donde el quechua, el aimara y el castellano conviven —no siempre en equilibrio— en el espacio educativo. Según UNICEF (2022), esta diversidad no ha sido debidamente integrada en los modelos pedagógicos convencionales, lo cual limita la participación activa de los estudiantes en procesos argumentativos, especialmente en temas abstractos como la lógica computacional.

Las aulas rurales suelen seguir metodologías tradicionales, donde los estudiantes repiten sin razonar. En contraposición, la Ciencia de la Computación, si se enseña desde una perspectiva argumentativa, puede empoderar a los jóvenes indígenas, permitiéndoles expresar y justificar sus ideas en su lengua originaria y con ejemplos contextualizados (MINEDU, 2023).

4. Propuesta metodológica para aplicar en aulas puneñas

Se plantea adaptar la enseñanza de la computación a partir de los siguientes ejes:

  1. Uso del enfoque argumentativo: Estudiantes deben explicar por qué eligen cierto enfoque de codificación o cómo resuelven errores lógicos.
  2. Integración de lenguas originarias: Quechua y aimara como medios válidos para estructurar razonamientos lógicos y explicar algoritmos.
  3. Problemas contextualizados: Programar soluciones a situaciones locales (clima, festividades, costumbres, gestión de recursos).
  4. Evaluación formativa: Se valora tanto la lógica del código como la capacidad de justificar las decisiones tomadas en el desarrollo.
  5. Trabajo colaborativo: Equipos multiculturales que discutan y debatan soluciones, integrando saberes técnicos y culturales.

5. Conclusión

La implementación de la argumentación en la enseñanza de la Ciencia de la Computación, inspirada en el modelo finlandés, tiene un enorme potencial para regiones como Puno. Esta estrategia fomenta el pensamiento crítico, refuerza la identidad cultural y fortalece las competencias tecnológicas en una región que necesita cerrar brechas educativas y digitales.

Transformar las aulas puneñas en espacios donde los estudiantes puedan pensar, programar y argumentar en su lengua y cultura, será clave para una educación verdaderamente inclusiva, moderna y pertinente

Referencias:

1. Aguaguiña Tirado, E. F., Palacios Morales, M. P., Pico Cueva, W. T., Llerena Culcay, C. F., & Llerena Culcay, K. del R. (2024). Las estrategias pedagógicas innovadoras y la enseñanza de las matemáticas en la educación secundaria: Un enfoque basado en la diversidad de estilos de aprendizaje. Ciencia Latina Revista Científica Multidisciplinar, 8(5), 9919–9935. https://doi.org/10.37811/cl_rcm.v8i5.14389

2. Brahmia, S., Boudreaux, A., & Kanim, S. E. (2016). Developing mathematical creativity with physics invention tasks. arXiv preprint arXiv:1602.02033. https://arxiv.org/abs/1602.02033

3. Crespo, C. R. (2007). Las argumentaciones matemáticas desde la visión crítica. Educación Matemática, 19(2), 5–24.

4. Camargo, L. (2010). Descripción y análisis de un caso de enseñanza y aprendizaje de la demostración en una comunidad de práctica de futuros profesores de matemáticas de educación secundaria. [Tesis doctoral, Universidad de Valencia].

5. Benítez, M., Ríos-Cuesta, W., & Hermosa, R. (2016). La argumentación en la clase de matemáticas: Un estudio de caso. Revista de Investigación en Educación Matemática, 6(2), 35–50.

6. Goizueta, M. (2019). Dificultades en la justificación matemática en estudiantes de secundaria. Revista Latinoamericana de Investigación en Matemática Educativa, 22(3), 345–370.

7. Stylianides, A. J., Bieda, K. N., & Morselli, F. (2019). Argumentación y prueba en la educación matemática: Perspectivas teóricas y prácticas. Educational Studies in Mathematics, 102(1), 1–10.

8. Fiallo, J. (2010). La enseñanza de la prueba matemática en la educación secundaria: Un estudio de caso. Revista de Educación Matemática, 22(3), 65–80.

9. Molina, M. (2019). Estrategias para el desarrollo de la argumentación matemática en el aula. Revista de Educación Matemática, 31(1), 25–40.

10. Otten, S., Herbel-Eisenmann, B., & Males, L. (2017). La argumentación en la clase de matemáticas: Una revisión de la literatura. Journal for Research in Mathematics Education, 48(3), 300–316.

11. Uribe Pérez, M. (2017). La enseñanza de las ciencias desde el enfoque intercultural. Cadernos CIMEAC, 7(1), 32–55. https://www.researchgate.net/publication/345708740_La_ensenanza_de_las_ciencias_desde_el_enfoque_intercultural_The_teaching_of_science_from_an_intercultural_perspective

12. Ortiz Hernández, R., & Romero, M. (2014). Educación, interculturalidad y tecnologías de la información. ALAIC 2014. https://congreso.pucp.edu.pe/alaic2014/wp-content/uploads/2013/09/GT4-Ortiz-Hernandez-Romero.pdf

13. Sunkel, G., Trucco, D., & Espejo, A. (2012). La integración de las tecnologías digitales en las escuelas de América Latina y el Caribe: Una mirada multidimensional. CEPAL. https://repositorio.cepal.org/bitstreams/1430a3ff-1b88-4a49-a8e1-037f89bd77e6/download

14. Ministerio de Educación del Perú (MINEDU). (2023). Informe de desempeño escolar en regiones altoandinas. https://umc.minedu.gob.pe/resultadosenla2023/

15. UNICEF Perú. (2022). La educación intercultural bilingüe en Perú. https://www.unicef.org/lac/la-educacion-intercultural-bilingue-eib-en-peru


China marca un nuevo hito en la computación cuántica fotónica con Jiuzhang A-76

 Aldo Zanabria

La Universidad de Ciencia y Tecnología de China (USTC), bajo la dirección del físico Jian-Wei Pan, ha logrado un avance trascendental con el desarrollo de Jiuzhang A-76, una computadora cuántica fotónica que reafirma el liderazgo de China en el campo de la computación cuántica.

¿Qué hace único a Jiuzhang A-76?

Computación fotónica: A diferencia de IBM o Google, que utilizan cúbits superconductores, Jiuzhang emplea fotones como unidades cuánticas de información, manipulados mediante interferómetros ópticos altamente precisos (Zhong et al., 2020).

Ventaja cuántica demostrada: En 2020, Jiuzhang resolvió un problema complejo conocido como muestreo gaussiano de bosones en 200 segundos, una tarea que, según estimaciones, tomaría más de 600 millones de años a una supercomputadora clásica (Zhong et al., Science, 2020).

Capacidad técnica destacable: Jiuzhang A-76 logró manipular hasta 76 fotones simultáneamente en múltiples modos ópticos, consolidándose como uno de los sistemas más avanzados en recursos físicos utilizados (Xinhua, 2020).

Escalabilidad y visión a futuro: Aunque no es una computadora cuántica universal, Jiuzhang representa un modelo viable y escalable hacia dispositivos más potentes, eficientes y aplicables en tareas específicas como simulación molecular o algoritmos de inteligencia artificial (Pan et al., 2021).

¿Y si la computación cuántica fotónica se encuentra con la inteligencia artificial?

La convergencia de ambas tecnologías promete revolucionar la forma en que procesamos datos, entrenamos modelos y abordamos problemas complejos en segundos.


Referencias:


Zhong, H. S., et al. (2020). Quantum computational advantage using photons. Science, 370(6523), 1460-1463. https://doi.org/10.1126/science.abe8770


Pan, J.-W., et al. (2021). Advances in photonic quantum computing. Nature Reviews Physics, 3, 144–158. https://doi.org/10.1038/s42254-020-00249-0


Xinhua News Agency. (2020, diciembre 4). China logra avance en computación cuántica. http://spanish.xinhuanet.com/2020-12/04/c_139561905.htm


Francis, L. (2020). La supremacía cuántica se vuelve a demostrar, esta vez con fotones. Naukas. https://francis.naukas.com/2020/12/05/la-supremacia-cuantica-se-vuelve-a-demostrar-este-vez-con-fotones-y-el-algoritmo-de-bosonsampling/


12 abril 2025

Incubadoras de Empresas y Ecosistemas de Innovación: Una Estrategia para el Desarrollo Regional de Puno

 

Aldo Hernan Zanabria Gálvez 

Resumen:

Las incubadoras de empresas son herramientas clave en la articulación de ecosistemas de innovación, especialmente en regiones con potencial humano, cultural y académico aún no plenamente aprovechado, como Puno. Este artículo analiza el papel de estas instituciones desde una perspectiva global y su posible adaptación al contexto puneño, considerando experiencias exitosas en América Latina, Europa y Asia. Asimismo, se identifican actores estratégicos —universidad, Estado y empresa— y se proponen líneas de acción para consolidar un modelo de desarrollo basado en conocimiento, emprendimiento e innovación tecnológica.

Introducción

La globalización ha impuesto un nuevo paradigma de desarrollo económico donde la capacidad de generar, adaptar y comercializar conocimiento se convierte en un factor determinante para la competitividad. En este contexto, las incubadoras de empresas se configuran como infraestructuras clave para el nacimiento y sostenibilidad de iniciativas empresariales, al brindar acceso a servicios estratégicos que mitigan el riesgo de fracaso y fomentan la innovación (Rojas & Caro, 2023).

La región de Puno, pese a su riqueza cultural, recursos naturales y red de instituciones educativas, aún enfrenta barreras estructurales para insertarse en la economía del conocimiento. Por ello, la promoción de incubadoras de base tecnológica y socialmente inclusivas podría constituirse en una vía efectiva para impulsar el desarrollo sostenible en el altiplano peruano.

Ecosistemas de Innovación: Modelo de Triple Hélice

La teoría de la Triple Hélice (Etzkowitz & Leydesdorff, 2000) plantea que el desarrollo de territorios innovadores requiere de una sinergia funcional entre tres actores:

  • Universidades: como generadoras de conocimiento y espacios de formación emprendedora.

  • Gobiernos: como garantes de políticas públicas, incentivos y entorno normativo.

  • Empresas: como ejecutoras de procesos de innovación y comercialización de tecnologías.

Este modelo ha sido replicado con éxito en países como Brasil, India y Chile, donde las incubadoras han catalizado la creación de nuevos sectores económicos mediante el impulso a startups tecnológicas y de alto valor agregado (Guo & Yu, 2021; Rivera & Narváez, 2023).

El Caso de Puno: Potencial y Oportunidades

En Puno, la presencia de universidades como la Universidad Nacional del Altiplano y la Universidad Andina Néstor Cáceres Velásquez constituye una base sólida para el desarrollo de incubadoras universitarias. Sin embargo, según Chávez y Lazo (2023), muchas de estas instituciones aún no han consolidado estructuras formales para incubación ni programas de maduración emprendedora.

Por otro lado, sectores como la agroindustria, artesanía, biotecnología aplicada a camélidos sudamericanos y turismo experiencial, presentan un alto potencial de innovación endógena. La creación de incubadoras especializadas en estos rubros podría fomentar la transformación productiva con identidad regional (Martínez, 2022).

Tipos de Incubadoras y Aplicabilidad Regional

En función de su enfoque, las incubadoras pueden clasificarse como:

  • Tecnológicas: orientadas a empresas basadas en ciencia e innovación (e.g. software, biotecnología).

  • Tradicionales: enfocadas en sectores como textiles, turismo, comercio.

  • Mixtas: combinan ambos modelos (Patiño & Castro, 2023).

En el contexto puneño, una incubadora mixta, ligada a la universidad, con alianzas público-privadas y cobertura rural-urbana, podría integrar saberes ancestrales con innovación contemporánea.

Impacto Esperado

Según la literatura (Muñoz, 2018; Arreola & Sánchez, 2022), los impactos de una incubadora bien implementada en una región como Puno serían:

  • Reducción de la informalidad y el desempleo juvenil.

  • Transformación de proyectos de tesis en startups reales.

  • Fortalecimiento de la relación universidad-empresa.

  • Mayor inserción de productos puneños en mercados nacionales e internacionales.

  • Activación de cadenas productivas locales con enfoque sostenible.

Desafíos y Recomendaciones

Los principales desafíos para implementar incubadoras exitosas en Puno incluyen:

  1. Escasa cultura emprendedora formal.

  2. Limitado acceso a capital semilla y fondos concursables.

  3. Débil articulación entre actores institucionales.

Para superar estos obstáculos se recomienda:

  • Impulsar un Plan Regional de Innovación y Emprendimiento que incluya incentivos fiscales, normativas de fomento y fondos concursables.

  • Crear una Red Regional de Incubadoras liderada por universidades, con participación de municipalidades, MYPES y organizaciones indígenas.

  • Fomentar la formación en gestión empresarial e innovación rural a través de programas de extensión universitaria.

Conclusiones

Las incubadoras no son solo espacios físicos, sino estructuras vivas que articulan talento, conocimiento y visión estratégica. En una región como Puno —con profundos saberes ancestrales y un capital humano creciente—, la incubación de empresas representa una oportunidad para construir un desarrollo territorial inclusivo, resiliente e innovador.

La clave está en transformar la visión tradicional de asistencia productiva hacia un modelo de innovación social y tecnológica, donde los actores públicos, privados y comunitarios se articulen bajo una misma misión: promover el bienestar regional desde la raíz.

Referencias

Plantilla de Árbol Binario de Búsqueda en C++

 

1. Estructura General

Clase ArbolABB:
Contiene:

  • Una clase interna Nodo para representar los nodos del árbol.

  • Punteros raiz y actual para gestionar navegación e inserción.

  • Atributos contador y altura como variables auxiliares.

2. Funcionalidades Implementadas

FunciónPropósito
InsertarInserta elementos respetando el orden ABB.
BorrarElimina un nodo (caso hoja, un hijo, dos hijos).
BuscarDevuelve true/false si encuentra un valor.
InOrdenRecorrido simétrico (izq - nodo - der).
PreOrdenRecorrido en preorden (nodo - izq - der).
PostOrdenRecorrido en postorden (izq - der - nodo).
NumeroNodosCuenta todos los nodos del árbol.
AlturaArbolDevuelve la altura máxima (nivel más profundo).
AlturaDevuelve la profundidad de un nodo específico.

3. Comentario Didáctico y de Diseño

  • Uso de clases anidadas: correcta encapsulación del nodo.

  • Constructores y destructores: bien definidos. El destructor aplica poda recursiva.

  • Manejo de memoria dinámica: correcto con new y delete, aunque no se usa smart pointers (esto puede modernizarse con std::unique_ptr).

  • No se reutiliza código entre los recorridos (inorden, preorden, postorden), aunque puede unificarse con una función recursiva con estrategia como parámetro.

  • Evita duplicados en inserción, lo cual es adecuado para ABB (ver línea if (!Vacio(actual)) return;).

  • Inserta múltiples nodos en main, algunos duplicados, pero no se agregan.

Observaciones Técnicas y Mejora

 Fortalezas

  • Correcto manejo de punteros y recursión.

  • Inclusión de funciones para métricas del árbol (número de nodos, altura).

  • Bien estructurado y comentado.

 Posibles mejoras

  1. Modernización de C++:

    • Reemplazar NULL por nullptr.

    • Usar std::function<int&(int&)> en vez de punteros a funciones crudas.

    • Uso de unique_ptr para gestión automática de memoria.

  2. Robustez del recorrido:

    • Validar que nodo no sea NULL en InOrden, PreOrden y PostOrden antes de acceder a sus punteros hijos.

  3. Separar responsabilidades:

    • Las funciones auxContador, auxAltura, etc., podrían estar mejor encapsuladas si fueran estáticas o externas (dependiendo del uso).

  4. Control de excepciones:

    • No hay manejo para errores como acceso a actual->dato sin validar si actual != NULL.

  5. Optimización del borrado:

    • El método Borrar intercambia valores en vez de reorganizar punteros, lo cual es válido pero puede ser menos claro. Puede aplicarse una implementación con sustituto directo.

Ejemplo de Estructura del Árbol Insertado

                10

              /    \

             5      12

            / \       \

           4   7       14

          /   / \     /  \

         3   6   9   13  15

        /         /

       2         8

      /

     1




  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
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
// Plantilla de Arbol Binario de Búsqueda en C++


#include <iostream>
using namespace std;

class ArbolABB {
  private:
   //// Clase local de Lista para Nodo de ArbolBinario:
   class Nodo {
     public:
      // Constructor:
      Nodo(const int dat, Nodo *izq=NULL, Nodo *der=NULL) :
        dato(dat), izquierdo(izq), derecho(der) {}
      // Miembros:
      int dato;
      Nodo *izquierdo;
      Nodo *derecho;
   };

   // Punteros de la lista, para cabeza y nodo actual:
   Nodo *raiz;
   Nodo *actual;
   int contador;
   int altura;

  public:
   // Constructor y destructor básicos:
   ArbolABB() : raiz(NULL), actual(NULL) {}
   ~ArbolABB() { Podar(raiz); }
   // Insertar en árbol ordenado:
   void Insertar(const int dat);
   // Borrar un elemento del árbol:
   void Borrar(const int dat);
   // Función de búsqueda:
   bool Buscar(const int dat);
   // Comprobar si el árbol está vacío:
   bool Vacio(Nodo *r) { return r==NULL; }
   // Comprobar si es un nodo hoja:
   bool EsHoja(Nodo *r) { return !r->derecho && !r->izquierdo; }
   // Contar número de nodos:
   const int NumeroNodos();
   const int AlturaArbol();
   // Calcular altura de un int:
   int Altura(const int dat);
   // Devolver referencia al int del nodo actual:
   int &ValorActual() { return actual->dato; }
   // Moverse al nodo raiz:
   void Raiz() { actual = raiz; }
   // Aplicar una función a cada elemento del árbol:
   void InOrden(void (*func)(int&) , Nodo *nodo=NULL, bool r=true);
   void PreOrden(void (*func)(int&) , Nodo *nodo=NULL, bool r=true);
   void PostOrden(void (*func)(int&) , Nodo *nodo=NULL, bool r=true);
  private:
   // Funciones auxiliares
   void Podar(Nodo* &);
   void auxContador(Nodo*);
   void auxAltura(Nodo*, int);
};

// Poda: borrar todos los nodos a partir de uno, incluido
void ArbolABB::Podar(Nodo* &nodo)
{
   // Algoritmo recursivo, recorrido en postorden
   if(nodo) {
      Podar(nodo->izquierdo); // Podar izquierdo
      Podar(nodo->derecho);   // Podar derecho
      delete nodo;            // Eliminar nodo
      nodo = NULL;
   }
}

// Insertar un int en el árbol ABB
void ArbolABB::Insertar(const int dat)
{
   Nodo *padre = NULL;

   actual = raiz;
   // Buscar el int en el árbol, manteniendo un puntero al nodo padre
   while(!Vacio(actual) && dat != actual->dato) {
      padre = actual;
      if(dat > actual->dato) actual = actual->derecho;
      else if(dat < actual->dato) actual = actual->izquierdo;
   }

   // Si se ha encontrado el elemento, regresar sin insertar
   if(!Vacio(actual)) return;
   // Si padre es NULL, entonces el árbol estaba vacío, el nuevo nodo será
   // el nodo raiz
   if(Vacio(padre)) raiz = new Nodo(dat);
   // Si el int es menor que el que contiene el nodo padre, lo insertamos
   // en la rama izquierda
   else if(dat < padre->dato) padre->izquierdo = new Nodo(dat);
   // Si el int es mayor que el que contiene el nodo padre, lo insertamos
   // en la rama derecha
   else if(dat > padre->dato) padre->derecho = new Nodo(dat);
}

// Eliminar un elemento de un árbol ABB
void ArbolABB::Borrar(const int dat)
{
   Nodo *padre = NULL;
   Nodo *nodo;
   int aux;

   actual = raiz;
   // Mientras sea posible que el valor esté en el árbol
   while(!Vacio(actual)) {
      if(dat == actual->dato) { // Si el valor está en el nodo actual
         if(EsHoja(actual)) { // Y si además es un nodo hoja: lo borramos
            if(padre) // Si tiene padre (no es el nodo raiz)
               // Anulamos el puntero que le hace referencia
               if(padre->derecho == actual) padre->derecho = NULL;
               else if(padre->izquierdo == actual) padre->izquierdo = NULL;
            delete actual; // Borrar el nodo
            actual = NULL;
            return;
         }
         else { // Si el valor está en el nodo actual, pero no es hoja
            // Buscar nodo
            padre = actual;
            // Buscar nodo más izquierdo de rama derecha
            if(actual->derecho) {
               nodo = actual->derecho;
               while(nodo->izquierdo) {
                  padre = nodo;
                  nodo = nodo->izquierdo;
               }
            }
            // O buscar nodo más derecho de rama izquierda
            else {
               nodo = actual->izquierdo;
               while(nodo->derecho) {
                  padre = nodo;
                  nodo = nodo->derecho;
               }
            }
            // Intercambiar valores de no a borrar u nodo encontrado
            // y continuar, cerrando el bucle. El nodo encontrado no tiene
            // por qué ser un nodo hoja, cerrando el bucle nos aseguramos
            // de que sólo se eliminan nodos hoja.
            aux = actual->dato;
            actual->dato = nodo->dato;
            nodo->dato = aux;
            actual = nodo;
         }
      }
      else { // Todavía no hemos encontrado el valor, seguir buscándolo
         padre = actual;
         if(dat > actual->dato) actual = actual->derecho;
         else if(dat < actual->dato) actual = actual->izquierdo;
      }
   }
}

// Recorrido de árbol en inorden, aplicamos la función func, que tiene
// el prototipo:
// void func(int&);
void ArbolABB::InOrden(void (*func)(int&) , Nodo *nodo, bool r)
{
   if(r) nodo = raiz;
   if(nodo->izquierdo) InOrden(func, nodo->izquierdo, false);
   func(nodo->dato);
   if(nodo->derecho) InOrden(func, nodo->derecho, false);
}

// Recorrido de árbol en preorden, aplicamos la función func, que tiene
// el prototipo:
// void func(int&);
void ArbolABB::PreOrden(void (*func)(int&), Nodo *nodo, bool r)
{
   if(r) nodo = raiz;
   func(nodo->dato);
   if(nodo->izquierdo) PreOrden(func, nodo->izquierdo, false);
   if(nodo->derecho) PreOrden(func, nodo->derecho, false);
}

// Recorrido de árbol en postorden, aplicamos la función func, que tiene
// el prototipo:
// void func(int&);
void ArbolABB::PostOrden(void (*func)(int&), Nodo *nodo, bool r)
{
   if(r) nodo = raiz;
   if(nodo->izquierdo) PostOrden(func, nodo->izquierdo, false);
   if(nodo->derecho) PostOrden(func, nodo->derecho, false);
   func(nodo->dato);
}

// Buscar un valor en el árbol
bool ArbolABB::Buscar(const int dat)
{
   actual = raiz;

   // Todavía puede aparecer, ya que quedan nodos por mirar
   while(!Vacio(actual)) {
      if(dat == actual->dato) return true; // int encontrado
      else if(dat > actual->dato) actual = actual->derecho; // Seguir
      else if(dat < actual->dato) actual = actual->izquierdo;
   }
   return false; // No está en árbol
}

// Calcular la altura del nodo que contiene el int dat
int ArbolABB::Altura(const int dat)
{
   int altura = 0;
   actual = raiz;

   // Todavía puede aparecer, ya que quedan nodos por mirar
   while(!Vacio(actual)) {
      if(dat == actual->dato) return altura; // int encontrado
      else {
         altura++; // Incrementamos la altura, seguimos buscando
         if(dat > actual->dato) actual = actual->derecho;
         else if(dat < actual->dato) actual = actual->izquierdo;
      }
   }
   return -1; // No está en árbol
}

// Contar el número de nodos
const int ArbolABB::NumeroNodos()
{
   contador = 0;

   auxContador(raiz); // FUnción auxiliar
   return contador;
}

// Función auxiliar para contar nodos. Función recursiva de recorrido en
//   preorden, el proceso es aumentar el contador
void ArbolABB::auxContador(Nodo *nodo)
{
   contador++;  // Otro nodo
   // Continuar recorrido
   if(nodo->izquierdo) auxContador(nodo->izquierdo);
   if(nodo->derecho)   auxContador(nodo->derecho);
}

// Calcular la altura del árbol, que es la altura del nodo de mayor altura.
const int ArbolABB::AlturaArbol()
{
   altura = 0;

   auxAltura(raiz, 0); // Función auxiliar
   return altura;
}

// Función auxiliar para calcular altura. Función recursiva de recorrido en
// postorden, el proceso es actualizar la altura sólo en nodos hojas de mayor
// altura de la máxima actual
void ArbolABB::auxAltura(Nodo *nodo, int a)
{
   // Recorrido postorden
   if(nodo->izquierdo) auxAltura(nodo->izquierdo, a+1);
   if(nodo->derecho)   auxAltura(nodo->derecho, a+1);
   // Proceso, si es un nodo hoja, y su altura es mayor que la actual del
   // árbol, actualizamos la altura actual del árbol
   if(EsHoja(nodo) && a > altura) altura = a;
}

// Función de prueba para recorridos del árbol
void Mostrar(int &d)
{
   cout << d << ",";
}

int main()
{
   // Un árbol de enteros
   ArbolABB ArbolInt;

   // Inserción de nodos en árbol:
   ArbolInt.Insertar(10);
   ArbolInt.Insertar(5);
   ArbolInt.Insertar(12);
   ArbolInt.Insertar(4);
   ArbolInt.Insertar(7);
   ArbolInt.Insertar(3);
   ArbolInt.Insertar(6);
   ArbolInt.Insertar(9);
   ArbolInt.Insertar(8);
   ArbolInt.Insertar(11);
   ArbolInt.Insertar(14);
   ArbolInt.Insertar(13);
   ArbolInt.Insertar(2);
   ArbolInt.Insertar(1);
   ArbolInt.Insertar(15);
   ArbolInt.Insertar(10);
   ArbolInt.Insertar(17);
   ArbolInt.Insertar(18);
   ArbolInt.Insertar(16);

   cout << "Altura de arbol " << ArbolInt.AlturaArbol() << endl;

   // Mostrar el árbol en tres ordenes distintos:
   cout << "InOrden: ";
   ArbolInt.InOrden(Mostrar);
   cout << endl;
   cout << "PreOrden: ";
   ArbolInt.PreOrden(Mostrar);
   cout << endl;
   cout << "PostOrden: ";
   ArbolInt.PostOrden(Mostrar);
   cout << endl;

   // Borraremos algunos elementos:
   cout << "N nodos: " << ArbolInt.NumeroNodos() << endl;
   ArbolInt.Borrar(5);
   cout << "Borrar   5: ";
   ArbolInt.InOrden(Mostrar);
   cout << endl;
   ArbolInt.Borrar(8);
   cout << "Borrar   8: ";
   ArbolInt.InOrden(Mostrar);
   cout << endl;
   ArbolInt.Borrar(15);
   cout << "Borrar  15: ";
   ArbolInt.InOrden(Mostrar);
   cout << endl;
   ArbolInt.Borrar(245);
   cout << "Borrar 245: ";
   ArbolInt.InOrden(Mostrar);
   cout << endl;
   ArbolInt.Borrar(4);
   cout << "Borrar   4: ";
   ArbolInt.InOrden(Mostrar);
   ArbolInt.Borrar(17);
   cout << endl;
   cout << "Borrar  17: ";
   ArbolInt.InOrden(Mostrar);
   cout << endl;

   // Veamos algunos parámetros
   cout << "N nodos: " << ArbolInt.NumeroNodos() << endl;
   cout << "Altura de 1 " << ArbolInt.Altura(1) << endl;
   cout << "Altura de 10 " << ArbolInt.Altura(10) << endl;
   cout << "Altura de arbol " << ArbolInt.AlturaArbol() << endl;

   cin.get();
   return 0;
}



Conocimiento, Biología y Pensamiento Sistémico: Hacia una Epistemología Constructivista, Materialista y Compleja

Mg. Aldo Hernán Zanabria Gálvez  - aldo.zanabria@unap.edu.pe 

UNIVERSIDAD NACIONAL DEL ALTIPLANO PUNO

INSTITUTO DE INVESTIGACIÓN EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN ALTO ANDINA

Introducción.

La teoría del conocimiento ha sido tradicionalmente disputada entre el racionalismo, que defiende el origen innato o a priori del saber, y el empirismo, que lo reduce a la experiencia sensorial. Sin embargo, con el colapso de ambas posturas frente al avance científico, se impone la necesidad de un marco epistemológico más dinámico, relacional y funcional. Este ensayo, a partir del análisis del texto de Rolando García Epistemología y Teoría del Conocimiento (2000), propone una integración entre la epistemología constructivista, el pensamiento sistémico, el materialismo científico y los avances en biología y neurociencia, orientando la comprensión del conocimiento como un proceso emergente, histórico y socialmente situado.

De la crisis epistemológica a una propuesta sistémica.

García (2000), influenciado por Jean Piaget, sostiene que la filosofía especulativa no pudo fundamentar los conceptos científicos ante la revolución científica del siglo XX. Tampoco el empirismo lógico, liderado por figuras como Carnap, Russell y Quine, logró reducir las teorías científicas a datos de los sentidos. Esto llevó a un doble “derrumbe epistemológico”: la caída del apriorismo y del empirismo como fundamentos del conocimiento.

En este contexto, García propone una concepción constructivista del conocimiento como proceso continuo que comienza en la biología del sujeto y se desarrolla mediante su interacción con el entorno físico y social. Esta perspectiva coincide con el pensamiento sistémico propuesto por Ludwig von Bertalanffy (1968), quien definió a los organismos como sistemas abiertos, autorregulados, en interacción constante con su ambiente, rompiendo con el reduccionismo mecanicista de la ciencia clásica.


El conocimiento como función biológica y constructiva.

Desde el enfoque constructivista de Piaget y la visión sistémica de Bertalanffy, García propone una epistemología en la que no hay saltos entre la cognición infantil, la vida cotidiana y el saber científico, sino una continuidad estructural y funcional. El conocimiento es una forma de organización activa de la experiencia, estructurada a través de mecanismos como la asimilación, la acomodación y la autorregulación (Piaget, 1975).

A este marco se suma el aporte de las neurociencias contemporáneas y el materialismo científico, que explican cómo la conciencia, la percepción y el pensamiento surgen de la actividad neuronal (Damasio, 2018; Churchland, 2002). Desde esta perspectiva materialista, el conocimiento es un producto emergente del sistema nervioso, condicionado tanto por la biología como por la historia social del sujeto.

Pensamiento sistémico y sistemas blandos.

Peter Checkland (1999), en su metodología de sistemas blandos, propone que en los sistemas sociales, la complejidad no reside en la cantidad de variables, sino en la diversidad de interpretaciones y significados. Así, el conocimiento no se limita a representaciones objetivas, sino que es el resultado de interacciones, diálogo y aprendizaje adaptativo. Su propuesta epistemológica es coherente con una ciencia que no busca verdades absolutas, sino soluciones viables en contextos cambiantes.

Checkland se distancia de una visión mecanicista o determinista del conocimiento, y propone un enfoque interpretativo y participativo, donde los sujetos construyen modelos del mundo para comprender y transformar sus realidades. Esta dimensión coincide con la epistemología genética de Piaget y con el estructuralismo dinámico que plantea García.

El materialismo contemporáneo y la ciencia cognitiva.

Frente al idealismo o al dualismo mente-cuerpo, el materialismo científico contemporáneo defiende que todo fenómeno cognitivo tiene una base físico-biológica. Autores como Patricia Churchland (2002) sostienen que “la mente es el cerebro en acción”, y que las teorías filosóficas deben nutrirse del conocimiento neurobiológico.

Este enfoque no niega la dimensión constructiva ni cultural del conocimiento, pero sostiene que no hay pensamiento sin cuerpo, ni significado sin sistema nervioso. Esta visión está estrechamente vinculada con la epistemología naturalizada propuesta por Quine (1951) y desarrollada por autores como Goldman (1999) y Dretske (1995), que proponen integrar la psicología cognitiva y la neurociencia en la reflexión epistemológica.

Hacia una epistemología compleja e integrada.

Las propuestas de García, Bertalanffy, Checkland y Piaget, junto con los aportes de la neurociencia y el materialismo, permiten construir una epistemología constructivista, sistémica y materialista. Esta epistemología reconoce:

  1. La continuidad del conocimiento: desde los reflejos biológicos hasta las teorías científicas, sin rupturas ontológicas.
  2. La estructura del conocimiento como sistema: emergente, dinámico, autoorganizado.
  3. La función social del conocimiento: situado históricamente y moldeado por prácticas culturales.
  4. La base biológica del conocer: el pensamiento como función del cerebro y del cuerpo.
  5. La necesidad de integración: entre ciencias formales, naturales y sociales.

Este enfoque converge también con el pensamiento de Edgar Morin (2000), quien propone una

“epistemología de la complejidad”, donde conocer es organizar, relacionar y contextualizar. Morin defiende una visión transdisciplinaria, integradora de biología, sociología, lógica, ética y ecología del saber.

Conclusiones y recomendaciones.

La epistemología del siglo XXI ya no puede limitarse a debatir entre empirismo y racionalismo, ni entre objetivismo y subjetivismo. La ciencia actual exige una teoría del conocimiento constructivista, materialista y sistémica, capaz de articular los niveles biológico, cognitivo, social y cultural del acto de conocer.

Recomiendo impulsar investigaciones transdisciplinarias que:

  1. Incorporen los avances de la neurobiología al análisis educativo y epistemológico.
  2. Fortalezcan el diálogo entre pensamiento sistémico, filosofía y ciencias cognitivas.
  3. Fomenten prácticas pedagógicas basadas en el aprendizaje activo, reflexivo y situado.

Así, construir conocimiento ya no será un acto de acumulación, sino un proceso vital de estructuración e integración, fiel a la complejidad de lo humano y al dinamismo del mundo real.

Referencias :

  • Bertalanffy, L. von. (1968). General System Theory: Foundations, Development, Applications. George Braziller.
  • Checkland, P. (1999). Systems Thinking, Systems Practice. Wiley.
  • Churchland, P. S. (2002). Brain-Wise: Studies in Neurophilosophy. MIT Press.
  • Damasio, A. (2018). El extraño orden de las cosas: La vida, los sentimientos y la creación de la cultura. Destino.
  • Dretske, F. (1995). Naturalizing the Mind. MIT Press.
  • García, R. (2000). El conocimiento en construcción. De las formulaciones de Jean Piaget a la teoría de sistemas complejos. Gedisa.
  • Goldman, A. I. (1999). Knowledge in a Social World. Oxford University Press.
  • Morin, E. (2000). El método 1: La naturaleza de la naturaleza. Cátedra.
  • Piaget, J. (1975). La equilibración de las estructuras cognitivas. Ariel.
  • Piaget, J., & García, R. (1998). Hacia una lógica de significaciones. Centro Editor de América Latina.
  • Quine, W. V. O. (1951). Two Dogmas of Empiricism. The Philosophical Review, 60(1), 20–43.


02 abril 2025

Prevalencia de anemia infantil en Puno: un desafío persistente para la salud pública peruana

 

Aldo Hernán Zanabria Gálvez 

Resumen:
La anemia infantil continúa siendo una problemática crítica en el Perú, especialmente en regiones altoandinas como Puno. A pesar de los esfuerzos estatales y regionales para reducir su incidencia, los niveles de prevalencia siguen siendo alarmantes. Este artículo revisa los factores estructurales, sociales y de salud que contribuyen a la persistencia de este problema, apoyándose en evidencia reciente y literatura científica relevante.



Introducción

La anemia es una de las condiciones de salud pública más prevalentes entre niños menores de tres años en el Perú. Se trata de una deficiencia de hemoglobina que afecta el desarrollo físico, cognitivo y social de la infancia. Según los últimos informes del INEI y del Ministerio de Salud del Perú (MINSA), la región Puno encabeza nuevamente las estadísticas con una prevalencia de anemia del 76% en niños de 6 a 35 meses (RPP, 2025; INEI, 2024).

Situación actual en Puno

Diversos estudios destacan que, desde el 2019 hasta el 2024, la región de Puno ha mantenido niveles de anemia infantil por encima del 70%, con cifras como 69.9% (INEI, 2023) y 76% reportados en el presente año (RPP, 2025). Esta situación persiste pese a intervenciones nutricionales y campañas de suplementación con hierro dirigidas por el MINSA.

El estudio de Guzmán et al. (2019) señala que más del 75% de los niños en zonas rurales de Puno presentan disminución de hemoglobina. Asimismo, investigaciones como las de Mougenot y Herrera-Añazco (2023) revelan que la tendencia de reducción en esta región ha sido significativamente menor comparada con otras regiones del país.

Factores determinantes

Los determinantes sociales y estructurales de la anemia infantil en Puno incluyen:

  • Altitud y factores fisiológicos: La hipoxia crónica puede interferir en la absorción de hierro, lo cual afecta directamente los niveles de hemoglobina.
  • Pobreza y acceso limitado a alimentos ricos en hierro: La inseguridad alimentaria es una constante en muchas comunidades puneñas.
  • Factores culturales: Existen prácticas alimenticias tradicionales que, aunque ricas en nutrientes en otros aspectos, no priorizan alimentos fuentes de hierro hemínico.
  • Deficiente acceso a servicios de salud y diagnóstico oportuno (UNAP, 2023).

Intervenciones y políticas públicas

El Ministerio de Salud ha implementado diversos programas, como el Plan Multisectorial para la Reducción de la Anemia 2021–2025. Sin embargo, como señalan Zavaleta et al. (2021), la eficacia de estas estrategias es limitada en zonas rurales debido a barreras geográficas, logísticas y de comunicación.

El informe del Seminario Nacional sobre Anemia Infantil (CMP, 2023) subraya la necesidad de un enfoque territorial e intercultural, así como la participación activa de gobiernos regionales y locales.


Recomendaciones

  1. Fortalecer los sistemas de atención primaria en zonas rurales.
  2. Promover programas alimentarios adaptados a la cultura local, incorporando alimentos ricos en hierro de origen animal y vegetal.
  3. Articular la educación nutricional con la intervención comunitaria, considerando la sabiduría ancestral y los actores sociales clave.
  4. Monitorear y evaluar con indicadores claros y mecanismos participativos, priorizando a regiones con alta prevalencia como Puno.

Conclusión

La anemia infantil en Puno representa un problema estructural que requiere soluciones multisectoriales, sostenidas y culturalmente adecuadas. La alta prevalencia —que bordea el 76%— evidencia no solo un fracaso en las políticas de salud, sino también la urgencia de una respuesta transformadora, centrada en la equidad territorial y el desarrollo humano.


Referencias

  • Guzmán, V., et al. (2019). Anemia y desnutrición infantil en zonas rurales. Revista Peruana de Medicina Experimental y Salud Pública, 36(3).
  • Instituto Nacional de Estadística e Informática – INEI (2023, 2024). Boletines estadísticos.
  • Mougenot, B., & Herrera-Añazco, P. (2023). Tendencia de la prevalencia de anemia en niños de 6 a 35 meses. Revista Cuerpo Médico HNAAA.
  • Ministerio de Salud del Perú (2022). Reporte de resultados de anemia en regiones.
  • Zavaleta, N., et al. (2021). Anemia infantil en el Perú: un problema aún no resuelto. Revista Cubana de Pediatría, 93(1).
  • CMP (2023). Informe del Seminario: La Anemia Infantil en el Perú.
  • RPP Noticias (2025). Anemia infantil en Puno alcanzó 76%.
  • Universidad Nacional del Altiplano (2023). Factores socioeconómicos en la anemia infantil en Puno.
  • Mendoza, W., et al. (2023). Análisis espacial de la anemia infantil en Perú. Salud Pública de México, 65(3).
  • ENDES (2023). Encuesta Demográfica y de Salud Familiar.