Mostrando las entradas con la etiqueta Algoritmos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Algoritmos. Mostrar todas las entradas

Programación: lenguajes más utilizados

¿Cuáles fueron los lenguajes de programación más usados en 2018? Los siguientes datos corresponden a enero de 2019.
  1. JAVA. Desde el 2001, JAVA es el lenguaje programación más usado. Actualmente cuenta con más de 9 millones desarrolladores que lo usan y está presente en más de 7 mil millones de dispositivos en todo el mundo. Su popularidad se debe a su gran legibilidad y simplicidad.
  2. Lenguaje C. Creado entre 1969 y 1972 en los Laboratorios Bell, este lenguaje de programación es uno de los más utilizados en el mundo. Lo utilizan la mayoría de los sistemas operativos lo cual hace que sea un lenguaje muy flexible, además, es muy popular para el desarrollo de aplicaciones de escritorio, como el conocido editor gráfico GIMP.
  3. PYTHON. Es un lenguaje de programación multiplataforma y multiparadigma. Soporta la orientación a objetos, la programación imperativa y funcional. Su simpleza, legibilidad y similitud con el idioma inglés lo convierten en un lenguaje ideal para principiantes.
  4. C++. Es un lenguaje de programación orientado a objetos y una evolución del lenguaje C. Existe una gran cantidad de programas escritos en C++, como por ejemplo los paquetes de Adobe.
  5. VISUAL BASIC .NET. Visual Basic .NET te da la posibilidad de automatizar sus propios procesos y crear sus propias aplicaciones web. Es utilizado por una gran cantidad de personas a lo largo del mundo que no cuentan con conocimientos profundos como desarrolladores, por lo que es considerado uno de los lenguajes más amigables para los principiantes de programación.

Recursos para #programadores...

Comparto un excelente repositorio de documentos y enlaces a páginas Web, con buena información para los que desean profundizar en temas de programación y diseño Web. Algunos documentos están en PDF, listos para ser descargados.

Programación para niños - Tecnología

Recurso para computación I y II (323/324)

El desarrollo de buenos algoritmos es una competencia clave para quienes se dediquen a construir software. Existen múltiples herramientas que apoyan el aprendizaje en esta materia. Una de ellas es PSeint, que asiste al estudiante en sus primeros pasos en programación. 
Mediante un simple e intuitivo pseudolenguaje en español (complementado con un editor de diagramas de flujo), le permite centrar su atención en los conceptos de la algoritmia computacional, minimizando las dificultades propias del aprendizaje de un lenguaje y proporcionando un entorno de trabajo con ayudas y recursos didácticos.
Los algoritmos en pseudolenguaje pueden ser exportados en diversos códigos, como por lenguaje C o Pascal. Es un software libre y gratuito.  Bajen la última versión de http://pseint.sourceforge.net/  [ Ver la lista completa de las funcionalidades ] 

RANDOM.ORG

RANDOM.ORG ofrece números aleatorios para cualquier usuario de Internet. Representa una mejor opción que los algoritmos de números pseudo-aleatorios usados en programas de computadoras. 
RANDOM.ORG es usado para la celebración de sorteos y loterías; para conducir los juegos en línea, para aplicaciones científicas y para el arte y la música. 
El servicio existe desde 1998 y fue creado por el Dr. Mads Haahr de la Facultad de Ciencia y Estadística Informática en el Trinity College de Dublín en Irlanda. 
Permite utilizar algunas funcionaldades de manera gratuita; otras más complejas, tienen un costo de suscripción.  https://www.random.org/ 

¿Qué lenguaje de programación aprender?

Es una pregunta común en todo los interesados en el mundo de la programación de computadoras; y en un primer momento, la respuesta no es sencilla. 
Como se sabe, existe una gran variedad de lenguajes de programación que pueden ser clasificados de diversas maneras. Por ejemplo, existen los denominados lenguajes de bajo nivel, "cercanos" a las máquinas y sus arquitecturas, pasando por diferentes grados de abstracción, hasta los conocidos como lenguajes de alto nivel, "independientes" del hardware o plataforma (es decir, lenguajes que no demandan al programador conocimientos en el hardware en que se ejecutarán los programas que construya) . 

Ejemplo de algoritmo con PSeint

Ejemplo de un algoritmo que suma las filas de una matriz o arreglo de dos dimensiones (3 x 3). 
A la matriz mat se le asignan números aleatorios (función Azar). Luego se recorre por cada columna (contador yy) para ir sumando y totalizar cada fila. Al final, se escribe la matriz completa.

Haga clic en la imagen.

Pensamiento algorítmico y programación

Los estudiantes de ingeniería deben desarrollar destrezas y habilidades para pensar "algorítmicamente" y aprender a abordar problemas de forma metódica. Para el caso de los que quieran dominar la programación de computadoras, antes de aprender a programar, es conveniente leer un libro que enseñe a pensar algorítmicamente. Un material que recomiendo lo puede bajar de este enlace.  Comparto, además, algunos portales con herramientas para aprender a programar:
  • https://developers.google.com/university/?hl=es-419  Ésta es una sección de Google Code en la que se alberga un buen material sobre programación en Linux, AJAX, Python, bases de datos y los lenguajes básicos para el desarrollo web (CSS, HTML, Java Script). Útil contenido, tutoriales fáciles de seguir, herramientas de evaluación... 
  • http://msdn.microsoft.com/es-es/beginner/default.aspx Es un programa creado por Microsoft con lecciones de VisualBasic, C#, ASP.net, y otros lenguajes, organizado todos en guías multimedia de fácil uso. Por supuesto gran parte está enfocada a la creación de aplicaciones estrictamente para Windows, pero no por eso deja de ser un valioso recurso. 
  • http://www.codecademy.com/es#!/exercises/0  Es una aplicación web que según sus creadores nace debido a lo frustrante que es en ocasiones el entrar al mundo de la programación, por lo que ofrecen una manera muy sencilla de aprender interactivamente a través de un entorno completamente guiado. 
Fuente: http://wwwhatsnew.com/

Material sobre Algoritmos y Lógica Computacional

Un documento bastante interesante sobre Algoritmos y Programación en Pascal. No es nuevo, pero expone algunos puntos de manera muy interesante y didáctica. El libro trata sobre métodos de resolución de problemas mediante el desarrollo de algoritmos y estructuras de datos, desde el principio y paso a paso; así como su materialización en programas de computador. 

También les dejo un documento sobre lógica computacional, que incluye temas como lógica proposicional y programación lógica. Para leerlo con detenimiento.
  • Como es algo "pesado" recomiendo bajarlo y luego abrirlo: documento
Es importante además, consultar estos documentos en línea: programación estructurada y Teorema de Dijkstra

Función recursiva (fibonacci)

Función para la serie de Fibonacci. La definición formal de la serie es la siguiente:
Un programa, aplicando la técnica recursiva para esta serie, se muestra a continuación:
La función es tipo entero, con parámetro N según la definición dada.

Recursividad

Palíndromo: es una palabra o frase que se lee igual de izquierda a derecha, que de derecha a izquierda. Ejemplos: anilina; dábale arroz a la zorra el abad.
Aplicando el concepto de "recursividad" podemos escribir una función que determine si una cadena es o no palíndromo. 

Asumiendo que la función fRecP recibe una cadena (en una estructura de datos tipo "arreglo") y dos límites (1 y longitud de cadena) la primera vez que se invoca, un algoritmo recursivo para determinar si es palíndromo puede ser este:
Función fRecP (Cadena C, int limIzq, int limDer): lógica
  Si  (limIzq > limDer)   entonces
      fRecP =  verdadero
  de lo contrario
      Si  C[limIzq] = C[limDer] entonces
           fRecP (C, limIzq+1, limDer-1)
      de lo contrario
          fRecP = falso
      Fin
  Fin
Fin fRecP

Tipos Abstractos de Datos (TAD)

Un TAD es una especificación abstracta de un tipo de datos en la que se describen:
  • Los valores del tipo
  • Su interfaz: las operaciones que pueden realizarse con los valores del tipo
También, un TAD es una generalización de los tipos de datos simples soportados por los lenguajes de programación; y los procedimientos son las generalizaciones de las operaciones primitivas. Ejemplo: TAD Matriz de Enteros
  • Definición del tipo MATRIZ_ENTEROS: es una agrupación de números enteros ordenados por filas y columnas; el número de elementos en cada fila y cada columna es el mismo.
  • La operaciones definidas para el TAD MATRIZ de ENTEROS son: suma,  multiplicación e inversa:
    • Suma Matrices (A, B: MATRIZ) devuelve C: MATRIZ: se suma elemento a elemento, cada numero entero de la matriz A con el correspondiente número entero de la matriz B. Condición: A y B tienen igual número de filas y columnas.
    • Multiplicar Matrices (A, B: MATRIZ) devuelve C: MATRIZ: se multiplican dos matrices que cumplen la condición ...
    • Inversa Matriz (A: MATRIZ) devuelve C: MATRIZ: esta se calcula...
Con esta definición el TAD Matriz_Enteros se podría implementar en lenguaje C como sigue:
      #define NUM_FILAS 10
     #define NUM_COLUMNAS 10
     /* Definimos el TAD */
     typedef int t_matriz[NUM_FILAS][NUM_COLUMNAS];
     /* Definimos una variable */
     t_matriz M;

     /*  Caso Suma_Matrices /*  
     void Suma_Matrices (t_matriz A, t_matriz B, t_matriz C) 
     {
       int i, j;
       for (i=0; i < NUM_FILAS; i++)
           for (j=0; j < NUM_COLUMNAS; j++)
                C [i] [j] = A [i] [j] + B [i] [j] ;
     }

    Método de ordenación por inserción

    El método de Inserción realiza n–1 iteraciones sobre el vector, dejando en la i-ésima etapa (2 ≤ i ≤ n) ordenado el subvector a[1..i]. La forma de hacerlo es colocando en cada iteración el elemento a[i] en su sitio correcto, aprovechando el hecho de que el subvector a[1..i–1] ya ha sido previamente ordenado. Este método puede ser implementado de forma iterativa como sigue:

    PROCEDURE  Insercion (VAR a: VECTOR; N: INTEGER);
    VAR i, j, x: INTEGER;
    BEGIN
         FOR i := 2 TO N DO
         Begin          
              x := a[i]; 
              j := i-1;
             WHILE ( j >= 1 ) AND ( x < a [j] ) DO
              Begin
                   a [j+1] := a [ j ];
                   j := j - 1;
              END;
              a[j+1] := x
         END;
    END;

    Pensamiento Computacional

    Pensamiento Computacional (Computational Thinking)
    Fuente: http://edubit.blogspot.com/2011/08/pensamiento-computacional-computational.html

    En el año 2006 la doctora J. M. Wing, profesora del Departamento de Computación de la Universidad de Carnegie Mellon, utilizó el termino Pensamiento Computacional para describir cómo piensa un científico de computadoras y lo beneficios que esta forma de pensar, podría tener en todos (Wing, 2006, 2010). 
    Definió al pensamiento computacional como:

    “…el proceso de pensamiento envuelto en formular un problema y sus soluciones de manera que las soluciones son representadas de una forma en que pueden ser llevadas a un agente de procesamiento de información.”

    En el artículo Computational Thinking: A Digital Age Skill for Everyone, Barr, Harrison y Conery (2011) explican que el Pensamiento Computacional que definió Wing, envuelve conceptos conocidos como:
    • Descomposición de problemas
    • Representación de datos
    • Modelos
    Y otros no tan conocidos como:
    • Búsquedas binarias
    • Recursión
    • Paralelización
    Según el Pensamiento Computacional, estas destrezas son similares y necesarias para la solución de una ecuación, planificar un proyecto o desarrollar un bosquejo para una tarea escrita. 
    Según la Sociedad Internacional para la Tecnología en la Educación y la Asociación de Maestros de Ciencias de Computadoras (ISTE y CSTA, por sus siglas en inglés, 2011) el Pensamiento Computacional es un proceso para la solución de problemas que incluye, pero no se limita, a:
    1. La formulación de problemas de forma que se pueda usar una computadora y otras herramientas para resolverlos.
    2. Analizar y organizar los datos de forma lógica.
    3. Representar los datos de forma abstracta como modelos y simulaciones.
    4. Automatizar la solución con pensamiento algorítmico (una serie de pasos ordenados)
    5. Identificar, analizar e implementar posibles soluciones con la meta de logar la más eficaz y eficiente combinación de pasos y recursos.
    6. Generalizar y transferir este proceso de solución de problemas a otros problemas.
    Para lograr esto, los estudiantes deben tener una serie de destrezas que incluye:
    1. Confianza al trabajar con la complejidad
    2. Persistencia al trabajar con problemas difíciles
    3. Tolerancia a la ambigüedad
    4. Habilidad para lidiar con problemas abiertos y cerrados
    5. Habilidad para comunicarse y trabajar con otros para lograr una meta en común y soluciones
    Existe debate entre cuáles son las diferencias entre el Pensamiento Crítico y el Pensamiento Matemático en comparación con el Pensamiento Computacional. Según Barr, Harrison y Conery (2011) el Pensamiento Computacional:
    • Es un combinación de destrezas de pensamiento única, que cuando se usan juntas, proveen la base para una nueva y poderosa forma de resolver problemas.
    • Esta más orientada a las herramientas.
    • Utiliza otras formas de solucionar problemas en contextos donde antes era impráctico y ahora es posible por la automatización y las grades velocidades de procesamiento.
    Referencias:
    Lectura: La ciencia de la computación no es solo para universitarios

    Sitios con cursos de programación gratis (MOOC)


    • Codecademy es uno de los sitios más populares... en este se puede tomar un curso de programación, los cuales están dirigidos especialmente a nuevos programadores.
    • Udacity es una plataforma que nació en la Universidad de Stanford. En éste decidieron ofrecer una clase introductoria sobre Inteligencia Artificial, de manera gratuita en Internet. Más de 160.000 estudiantes de todo el mundo se inscribieron, así Udacity se convirtió en uno los promotores de lo que ellos mismos llaman la democratización de la educación.
    • Khan Academy es una organización sin fines de lucro, cuyo objetivo es llevar educación de primera clase y de manera abierta, a todo el mundo . Los recursos están disponibles sin ningún costo.
    • Udemy es una empresa que ofrece cursos sobre diferentes materias para individuos y empresas. En Udemy cualquiera con conocimiento puede crear un curso y ofrecerlo para que sea tomado por los usuarios.
    • Coursera es una organización educativa que se asoció con muchas de las mejores universidades del mundo, para ofrecer de manera gratuita cursos en linea que cualquier persona puede tomar.

    Fuente: bitelia

    Programación recursiva

    La programación recursividad es una técnica muy poderosa para resolver problemas de naturaleza recursivos. Se puede usar la recursividad si la solución de un problema está expresada en términos de la resolución de un problema de la misma naturaleza, aunque de menor tamaño, y si se conoce la solución no-recursiva para un determinado caso (llamado caso base). Ver documento 

    Recursividad

    El programa que se presenta (en Turbo Pascal), determina si un número dado (entero positivo) es par o impar, a través de la técnica de resolución de problemas denominada recursividad.
    El ejemplo aprovecha la propiedad: (-1) elevado a la "n" es positivo si "n" es par; negativo si "n" es impar. La llamada "recursiva" en el código es: par:= -1 * par(m-1). Es decir, la función "par" se invoca a sí misma hasta la condición "m=1", en la que deja de invocarse.
    De manera muy simple, la recursividad se puede definir como la propiedad que poseen determinadas funciones por la cual pueden llamarse a sí mismas. Existen lenguajes de programación que permiten escribir programas que pueden llamarse a sí mismos, para la resolución de un problema "recursivo". El ejemplo típico es el cálculo del número factorial: n! = n . (n-1) . (n-2) . (n-3)......1 . 0! (por definición 0! = 1).  Se puede observar que la solución de (n-3)! es similar a la de n! (la misma definición), aunque (n-3)! es un problema "más pequeño" que n!. 
    El concepto de PILA (stack) está asociado a la implementación de la recursividad en un computador.

    Métodos de Ordenación (algoritmos y programas)

    Asignaturas 323, 324 y 330. Se presenta un conjunto de métodos de ordenación, con el análisis teórico de su complejidad temporal y, en algunos casos, espacial. Se anexa, además, un archivo con la programación de los métodos. Se incluye un manual de pascal bastante completo...

    Manejo de archivos en Turbo PASCAL

    El programa codificado en turbo pascal que les dejo, fue desarrollado hace algún tiempo... Con él se quiso dar respuesta a la necesidad de controlar una pequeña biblioteca (control de usuarios y control de préstamos).
    Ilustra diferentes operaciones (crear, leer, escribir, buscar) sobre tres archivos: Libro.dat, Usuario.dat, Préstamo.dat. Asimismo, maneja ciertos detalles para la captura de errores y alguna validaciones en la entrada de datos.

    No tengo la versión final del programa. Esta versión no presenta una codificación elegante, pero les servirá de apoyo para manipular archivos .DAT.