Mostrando entradas con la etiqueta APRENDA A PROGRAMAR COMO SI ESTUVIERA EN PRIMERO - Autores : IKER AGUINAGA. Mostrar todas las entradas
Mostrando entradas con la etiqueta APRENDA A PROGRAMAR COMO SI ESTUVIERA EN PRIMERO - Autores : IKER AGUINAGA. Mostrar todas las entradas

lunes, 6 de octubre de 2014

Los programas informáticos - 2 de 2



1.4.4 Lenguajes que soportan la programación estructurada


Estos lenguajes son lenguajes de alto nivel que ofrecen una serie de construcciones de
control del flujo del programa como son:
  • Las bifurcaciones, donde un bloque de código se ejecutará dependiendo de una condición.
  • Los bucles, donde un bloque de código se ejecutará de forma repetida o bien mientras que se cumpla una condición (WHILE) o bien un número determinado de veces (FOR).
  • Las funciones, que son bloques autónomos e independientes de código que se encargan de realizar una operación concreta, y que pueden recibir datos de otras partes del programa en forma de parámetros y que pueden devolver uno o más valores al terminar de ejecutarse.


Entre los lenguajes que soportan la programación estructurada se encuentra Matlab, C, C++, Fortran, Pascal, Modula, etc.

1.4.5 Lenguajes fuertemente y débilmente “tipados”


Bajo este título tan extraño se encuentra una de las diferencias más determinantes entre los distintos lenguajes de programación.

Un lenguaje débilmente “tipado” no define de forma explícita el tipo de las variables (y por lo tanto las operaciones que son válidas con la variable), sino que el tipo de variable se determina durante la ejecución, en función de los valores que se les asignan. Matlab pertenece a este grupo de lenguajes:

a=3
a=”Hola mundo” 

Como puede observarse, la variable a almacena indistintamente un número entero (3) y una cadena de caracteres ("Hola mundo").

Por el contrario en un lenguaje fuertemente tipado, se determina de forma explícita el tipo de las variables (y de nuevo las operaciones que son válidas), el siguiente código no es válido en un lenguaje fuertemente tipado como C++ (nótese que int indica que la variable es un número entero):

int a=3;
a=”Hola mundo”; // error no se puede asignar una cadena de caracteres a un entero directamente.

1.4.6 Lenguajes que soportan la programación orientada a objetos


La programación orientada a objetos supone un cambio de mentalidad a la hora de programar ya que se pasa de trabajar con instrucciones y datos por separado a unirlos en lo que se denomina un objeto. De hecho el tipo de un objeto queda definido por las operaciones que pueden realizarse sobre él y no por los datos que contiene. Los tipos de los objetos se pueden definir en estos lenguajes mediante clases. La programación orientada a objetos permite el desarrollo de aplicaciones enormemente complejas de una forma más estructurada y robusta que mediante sólo la programación estructurada (que todos los lenguajes orientados a objetos soportan). Existe una gran cantidad de lenguajes que soportan este paradigma: C++, Java, C#, Simula, Smalltalk, Eiffel, Python, Ada, Lisp, OCaml, etc.

1.5 Errores


Antes de continuar, es importante diferenciar los dos tipos de errores que suelen aparecer con más frecuencia cuando se programa en cualquier lenguaje de programación.

1.5.1 Errores de sintaxis


Un error de sintaxis es aquel en el que el programa no sigue las reglas sintácticas definidas por el lenguaje. Por ejemplo la frase “El ratón comer un queso”, no sigue las reglas de la lengua castellana, y por lo tanto es incorrecta. De igual forma, en un lenguaje de programación pueden escribirse programas incorrectos.

1.5.2 Errores lógicos


Estos errores suelen ser los más complejos de localizar, ya que el entorno de desarrollo no suele ser capaz de detectarlos hasta que el programa está en funcionamiento. En este caso el error no se produce a causa de que el programa no siga la sintaxis sino por un fallo en la lógica del programa que hace que su funcionamiento no sea el que desea el programador. Este tipo de fallos son semejantes a la frase “El queso come un ratón” aunque es sintácticamente correcta la lógica del sentido común nos dice que es imposible.

Ningún compilador o intérprete es capaz de localizar los errores lógicos. El error lógico se hace presente durante el tiempo de ejecución del programa. Los errores en tiempo de ejecución se detectan observando el programa, ya que éste no hace lo que el programador desea, y pueden dividirse en dos tipos:

Errores lógicos con aviso: Puede suceder que el error sea tal envergadura que haga saltar el mecanismo de protección del sistema operativo (en caso de programas compilados) o que el intérprete (en caso de programas interpretados) nos avise del error.

Al darse un error de este tipo en el caso de un programa compilado para trabajar bajo Windows, puede salir un aviso diciendo: "This program has performed an illegal operation and will be shut down" o mensajes como este:



Errores lógicos sin aviso: Son errores lógicos que pasan desapercibidos porque la única notoriedad que presentan es que el programa no hace lo que debería hacer.

Tanto para la localización y eliminación los errores lógicos con aviso como sin aviso, se requiere de una herramienta adicional denominada debugger, que se ve a continuación.

1.5.3 Debugger


Un debugger es un programa con las siguientes capacidades:
  • Permite ejecutar las líneas del programa una a una.
  • Permite establecer puntos en el programa en los que el flujo del mismo debe detenerse pasando el control al debugger. Estos puntos son conocidos como puntos de ruptura, o más comúnmente mediante su nombre en inglés “"breakpoint"
  • Permite ver (y en algunos casos modificar) el contenido de las variables

El debugger permite comprobar como se ejecuta en la realidad un programa y supone una ayuda inestimable en el desarrollo de programas.

No hay otra alternativa que acostumbrarse a utilizarlo. El perfil de la persona que utilizar el debugger es el siguiente:
  • Persona de edad variable que no le gusta perder mucho tiempo programando.
  • Antes de programar lee atentamente las especificaciones.
  • Dedica tiempo a pensar cómo hacer el programa y en cómo gestionar la información necesaria.
  • Sabe lo que quiere programar aunque no lo haya conseguido.
  • Sabe lo que tiene que hacer el programa.
  • Tiene un papel, folio u hoja a su lado con el esquema del programa.
  • En cambio, el perfil de la persona que NO utiliza el debugger es este:
  • Persona joven que se inicia a la programación y que dispone de mucho tiempo por delante para hacer un programa.
  • No entiende lo que él mismo ha programado aunque insiste en escribir alguna que otra instrucción por ver si pasa algo.
  • Tiende a mantener aquellas líneas de código que no dan errores y a borrar aquellas líneas de las que se queja el PC.
  • No suele tener un papel o folio a su lado y, cuando lo tiene, éste se encuentra en blanco.

Sabios, espero que esta info les sea de utilidad!








sábado, 4 de octubre de 2014

Los programas informáticos - 1 de 2



1.1 ¿Qué es un programa?

Un programa de ordenador es una secuencia de instrucciones que el ordenador debe seguir para realizar una tarea. Habitualmente, aunque no obligatoriamente, estas instrucciones se aplican sobre un conjunto de datos que sirven como entrada para el programa, y produce como resultado otra serie de datos que se derivan de los primeros al aplicar sobre los datos de entrada las instrucciones.

Debido a las capacidades de los actuales microprocesadores digitales, absolutamente todos los datos se representan de forma numérica y digital. Aunque esto pueda parecer inicialmente una limitación es en realidad la causa de la enorme flexibilidad y poder de las modernas computadoras.

1.2 ¿Qué es un lenguaje de programación?


Como los lenguajes humanos, los lenguajes de programación son herramientas de comunicación, pero al contrario que los lenguajes corrientes como el inglés o el chino, los destinatarios de los lenguajes de programación no son sólo humanos sino también los ordenadores.

El propósito general de un lenguaje de programación es permitir a un ser humano (el programador) traducir la idea de un programa en una secuencia de instrucciones que el ordenador sea capaz de ejecutar.

1.3 Las cuatro patas de la programación


Las cuatro patas de la programación son:

Los datos, Los bucles, Las bifurcaciones, Las funciones




Los datos que almacena un ordenador son siempre números. Incluso las letras almacenadas en un ordenador se almacenan como números; en este caso los números codifican una letra (por ejemplo, la letra "a" es el número 97 en la codificación ASCII).

Los datos se pueden almacenar ordenadamente como:

Datos individuales
Vectores
Matrices
Hipermatrices

Jugando con estos números se consiguen hacer los programas. Las herramientas de las que disponen los lenguajes de programación para jugar con los datos son los bucles y las bifurcaciones, con quienes se controla el flujo del programa.

Por último hay que destacar que la programación exige orden. El orden se consigue separando las distintas subrutinas que componen el programa y esto se consigue mediante las funciones. El conjunto de las distintas funciones y subrutinas conforman el programa.



1.4 Lenguajes de programación


Existe una cantidad gigantesca de lenguajes de programación distintos (incluidos muchos dialectos), y muchas formas de clasificarlos. A continuación se verán algunas de las más importantes y se nombrarán algunos de los lenguajes más populares, o importantes, en cada una de las categorías.

1.4.1 Lenguajes de alto y bajo nivel

Esta clasificación divide a los lenguajes según la proximidad de las instrucciones que emplea el programador a las instrucciones que físicamente emplea el procesador de una computadora. Estas últimas son en general muy sencillas y tienen un valor numérico que las define. Aunque es posible crear un programa empleando directamente estos valores numéricos, en cuanto un programa alcanza unas pocas decenas de instrucciones comienza a ser completamente inmanejable.

Para facilitar el trabajo de los programadores todos los fabricantes de CPU crean lenguajes específicos para las instrucciones que soportan sus microprocesadores, sustituyendo los valores numéricos de las instrucciones por un pequeño identificador o mnemónico. Por ejemplo, los procesadores de Intel o AMD que encontramos en los PC comparten las instrucciones y el lenguaje de ensamblador, pero no así el procesador de una SONY Play Station que es distinto a los otros dos mencionados y requiere de otro lenguaje de ensamblador.

Debido a la cercanía con las instrucciones básicas, los lenguajes de ensamblador se consideran lenguajes de bajo nivel. Los lenguajes de alto nivel por el contrario abstraen al programador de las instrucciones, mediante el uso de expresiones más cercanas al lenguaje natural y/o a las matemáticas. Como botón de muestra compare estos ejemplos escritos en lenguaje ensamblador y con Matlab para realizar la misma operación:



1.4.2 Lenguajes imperativos y funcionales


En los lenguajes de programación imperativos los programas se dividen claramente en  datos y código, siendo este último el encargado de manipular los datos de forma explícita. Suelen basarse, por lo tanto, en la manipulación de variables a las que el programa les va asignado valores específicos.

En los lenguajes funcionales, por el contrario, se diluye en cierta medida la diferencia entre código y datos al poder asignar bloques de código a variables.

Compárese una función para calcular el factorial en el lenguaje Scheme (funcional) y en Matlab (imperativo), se puede comprobar que en el caso de Matlab existen variables a las que se le asignan valores directamente (mediante el operador de asignación =) y la inexistencia del mismo en Scheme.



Algunos lenguajes funcionales son Lisp, Scheme, OCaml, Haskell, etc.

Entre los lenguajes imperativos encontramos Matlab, C, C++, Pascal, Java, Basic, Fortran, etc.

1.4.3 Lenguajes interpretados y compilados


El código de un programa suele escribirse en uno o varios ficheros de texto. Este código que es interpretable por un humano (o al menos debiera serlo) no puede ser ejecutado directamente por el computador. 

En los lenguajes interpretados, existe un programa llamado intérprete que lee las líneas de código y las ejecuta inmediatamente. Muchos intérpretes admiten dos modos de empleo: interactivo y de script. En el primer caso, el intérprete muestra un símbolo y se queda esperando a que el usuario introduzca las líneas a ejecutar una a una, ejecutándolas inmediatamente. En el segundo, el usuario proporciona uno o más ficheros al intérprete que ejecutará todas las líneas una tras otra. Matlab es un lenguaje interpretado que admite estas dos formas de ejecución, la primera se realiza escribiendo el código a ejecutar en la ventana de comandos, mientras que la segunda forma es la que se lleva a cabo al emplear ficheros .m. En cambio Visual Basic, que también es un lenguaje interpretado, sólo admite la segunda forma.

Aunque los lenguajes interpretados suelen ser relativamente sencillos de emplear y son muy flexibles, no suelen ser muy eficientes, ya que se mezcla la tarea de interpretación y proceso del código con la ejecución de este código. Para evitar este problema y que los programas puedan aprovechar completamente los recursos de un ordenador, el código de un programa puede ser convertido de forma completa en código binario que el procesador pueda ejecutar directamente. Este proceso se denomina compilación y se emplea en lenguajes que requieran un gran rendimiento como C++.

Además se han desarrollado algunos lenguajes, en particular Java y C#, que en lugar de compilar el código a la forma binaria que emplea el procesador concreto de una determinada arquitectura, se compila en un código intermedio no ejecutable directamente. Posteriormente, este código intermedio se traduce a instrucciones que el procesador puede ejecutar directamente antes de ser ejecutado. Este sistema permite ejecutar programas en cualquier procesador aunque tenga distintas instrucciones siempre que exista el programa que sea capaz de traducir las instrucciones intermedias.

En cualquier caso esta flexibilidad tiene un precio, ya que el rendimiento de un programa escrito en uno de estos lenguajes siempre es menor que el de un programa compilado. No obstante, lenguajes con la versatilidad de interpretación como la que presenta Java, resultan particularmente interesantes para aplicaciones en Internet, donde van a interactuar distintos procesadores a través de la red.



Sabios, espero que esta info les sea de utilidad!








Aprenda a programar como si estuviera en primero - Autores : Iker Aguinaga, Gonzalo Martínez, Javier Díaz


  • Capítulo 1 :  Los programas
    • Los programas informáticos - 1 de 2
      • ¿Qué es un programa? 
      • ¿Qué es un lenguaje de programación? 
      • Las cuatro patas de la programación
      • Lenguajes de programación
        • Lenguajes de alto y bajo nivel
        • Lenguajes imperativos y funcionales
        • Lenguajes interpretados y compilados
    • Los programas informáticos - 2 de 2
        • Lenguajes que soportan la programación estructurada
        • Lenguajes fuertemente y débilmente “tipados
        • Lenguajes que soportan la programación orientada a objetos
      •  Errores
        • Errores de sintaxis
        • Errores lógicos
        • Debugger
  • Capítulo 2 :  Estructuras fundamentales de los datos
  • Capítulo 3 : El flujo de un programa
    • El flujo de un programa - 1 de 2
      • El origen de los diagramas de flujo
      • Elementos de un diagrama de flujo
      • Desarrollo de un diagrama de flujo para un proceso cotidiano
      • Instrucciones
      • Operaciones aritmético lógicas
        • El operador de asignación
        • Operadores aritméticos o matemáticos
        • Operadores relacionales
        • Operadores lógicos
    • El flujo de un programa - 2 de 2
      • Bifurcaciones
        • Sentencia if
        • Sentencia if ... else
        • Sentencia if elseif... else múltiple
      • Bucles
        • Bucle While
        • Bucle For
        • Anidamiento de bucles
    • Funciones o procedimientos
      • Introducción
      • Funciones o procedimientos
        • Ejemplo 1. Función matemática
        • Ejemplo 2. Derivada numérica de la anterior función matemática
        • Ejemplo 3. Función que obtiene las raíces de un polinomio de 2º grado
    • Algoritmos - 1 de 5
      • Introducción
      • Algoritmos directos
        • Ejemplo 4. Algoritmo para saber si el número 5 es primo
        • Ejemplo 5. Determinar el tipo de raíces de un polinomio de segundo grado
    • Algoritmos - 2 de 5
      • Algoritmos iterativos
        • Ejemplo 6. Determinar iterativamente si un número N es o no primo
        • Ejemplo 7. Mejora del algoritmo para calcular si un número N es primo
        • Ejemplo 8. Obtención del factorial de un número N iterativamente
        • Ejemplo 9. Descomposición factorial de un número N
    • Algoritmos - 3 de 5
      • Ejemplo 10. Obtención del factorial de un número N recursivamente
      • Ejemplo 11. Determinar recursivamente si un número N es o no primo
      • Ejemplo 12. El triángulo de Sierpinski
    • Algoritmos - 4 de 5
      • Algoritmos de prueba y error
        • Algoritmos iterativos de prueba y error
          • Ejemplo 13. Método de Newton Rapshon de manera iterativa
          • Ejemplo 14. Cálculo de las dimensiones óptimas de un cilindro
    • Algoritmos - 5 de 5
        • Algoritmos recursivos de prueba y error
          • Ejemplo 15. Método de Newton-Rapshon de manera recursiva
          • Ejemplo 16. El viaje del caballo
          • Ejemplo 17. El problema de los emparejamientos estables

FIN






       
free counters

Páginas vistas en total según Google