Excelente curso de JAVA por: https://www.pildorasinformaticas.es/
Contenido: https://www.pildorasinformaticas.es/course/java-desde-0/curriculum/
Excelente curso de JAVA por: https://www.pildorasinformaticas.es/
Contenido: https://www.pildorasinformaticas.es/course/java-desde-0/curriculum/
Los computadores fueron desarrollados como una herramienta para agilizar la realización repetitiva de operaciones aritméticas y lógicas básicas; con el tiempo fueron ganando complejidad, tanto por el número de operaciones como por la complejidad propia de los cálculos.
Hoy en día, se han convertido en un elementos imprescindibles en todos los campos de la ciencia, de la comunicación y del ocio.
A pesar de los grandes cambios que han ido sufriendo las máquinas, el procesamiento de los datos dentro de un computador continúa basado en la realización de operaciones aritméticas y lógicas sencillas sobre datos que se encuentran en la memoria principal.
La información es codificada de manera adecuada para poder ser tratada por un procesador digital.
Las características de la tecnología con la que se construyen los computadores obligan a trabajar con sólo dos símbolos diferentes: el 0 y el 1.
Toda la información que tenga que procesar un computador se tendrá que codificar usando únicamente estos dos símbolos.
Estos son, pues, los puntos de partida:
Una computadora es un dispositivo construido con el propósito de manipular o transformar información para conseguir una información más elaborada, por ejemplo, el resultado de un problema determinado.
Una computadora digital trabaja con datos numéricos, codificados todos ellos en un sistema de numeración en base 2, es decir, basados en señales binarias; señales sobre las que podemos identificar solamente dos valores distintos.
Un computador digital dispone de una estructura organizada en módulos diferenciados, con tareas y funcionalidades bien definidas.
La estructura general de un computador digital es:
Datos de entrada + procesamiento = resultado (datos de salida)

Los dispositivos de entrada y los de salida constituyen elementos de conversión de la información entre el mundo analógico y el mundo digital.
El procesador está constituido por una unidad central de proceso (CPU, Central Process Unit) y una memoria íntimamente relacionada.

La unidad central de proceso es la encargada de procesar los datos de acuerdo con el programa establecido, y se organiza en dos grandes bloques: la unidad de control y la unidad de proceso o camino de datos.

La electrónica digital o discreta es la electrónica basada en señales sobre las que sólo se identifica un conjunto finito de valores diferentes.
En contraposición, en la electrónica analógica las señales pueden variar de forma continua, es decir, no están reducidas a un conjunto de valores.
En una señal digital sólo se diferencia entre el valor alto de tensión y el valor bajo de tensión, por ejemplo 0 V y 5 V. En cambio, en una señal analógica se pueden registrar cualquier valor de tensión dentro de los márgenes de funcionamiento.
Las tecnologías actuales con las que se construyen los sistemas digitales trabajan especialmente bien cuando las señales se identifican con dos valores de tensión diferente.
Estos valores reciben denominaciones diferentes según el ámbito de trabajo, como verdadero y falso o bien 0 y 1 lógicos.
Trabajar directamente con información analógica resulta poco práctico si queremos procesar información digital en una computadora. Por lo tanto, hay que disponer de mecanismos para digitalizar la información, es decir, para codificarla utilizando sólo ceros y unos.
Las computadoras son sistemas digitales complejos. Entender y conocer las herramientas metodológicas para su diseño y síntesis nos abre el camino al desarrollo de sistemas digitales específicos. Los conceptos básicos del funcionamiento de las computadoras son conocimientos necesarios para aquel que quiera trabajar en el diseño de sistemas electrónicos, en la programación de los mismos o en el desarrollo de aplicaciones específicas que requieran cierto grado de optimización.
En todo algoritmo aparecerán las siguientes partes:
La palabra clave algoritmo se pondrá siempre al principio de un algoritmo; y junto con el nombre del algoritmo conforma el encabezamiento. La palabra clave falgoritmo se pone una vez ya hemos descrito todas las acciones de nuestro algoritmo.
Las constantes siempre tienen que aparecer en medio de las palabras claves const y fconst. De forma que siempre que veamos estas palabras sabremos que todo lo que se encuentra en medio son definiciones de constantes.
Lo mismo sucede con las definiciones de tipos y las palabras clave tipo y ftipo; así como las declaraciones de variables y las palabras clave var y fvar.
El primer paso en la construcción de algoritmos consiste en saber claramente qué es lo que queremos resolver, es decir, cuál es el problema que tenemos que solucionar.
Especificar: consiste en dar la información necesaria y suficiente para definir el problema que hay que resolver de la manera más clara, concisa y no ambigua posible.
Por lo tanto:
En la especificación haremos una descripción de:
Siguiendo el ejemplo de la lavadora, podríamos tener la siguiente pre-condición:
{Pre: la ropa está dentro de la lavadora y la lavadora está conectada al suministro de luz y de agua. Además el cajón destinado al jabón, está lleno de jabón}
Y podríamos tener una post-condición así:
{Post: la ropa que estaba dentro de la lavadora, continúa adentro, pero ahora está limpia}
Elementos de la especificación:
Ejemplo de especificación:
Queremos especificar un algoritmo que intercambie los valores de dos variables. Nuestro entorno, por lo tanto, está construido por dos variables. La especificación resulta así:
x, y : entero
{Pre: x = X e y = Y} *
intercambiar
{Post: x = Y e y = X}
*En la especificación utilizamos la X y la Y mayúscula para designar el valor de las variables: x ,y debido a que el valor de las variables puede cambiar cuando se ejecuta el algoritmo. Por convención, siempre utilizaremos como nombre del valor inicial de una variable el nombre de la misma variable en mayúscula.
La especificación es un paso previo y necesario para diseñar algoritmos. La especificación también nos puede servir para recordar claramente qué hace nuestro algoritmo sin la necesidad de leer todo el código. Además de la especificación es recomendable añadir comentarios dentro del algoritmo. Los comentarios y la pre y post-condición se ponen entre llaves. Los comentarios aunque no formen parte del algoritmo propiamente dicho son importantes para hacer más comprensibles los algoritmos.
Arduino es una plataforma electrónica de código abierto basada en hardware y software de fácil aprendizaje y utilización.
Las placas Arduino pueden leer entradas (por ejemplo: un dedo en un botón o un mensaje de Twitter) y convertirlo en salidas: activar un motor, encender un LED, etc.
Podemos, por lo tanto, decirle a nuestra placa qué hacer enviando un conjunto de instrucciones al micro-controlador. Para enviar estos mensajes se utiliza un lenguaje de programación y el software Arduino (IDE: Integrated Development Environment , es decir, Entorno de Desarrollo Integrado).
(Descargar IDE: https://www.arduino.cc/en/Main/Software)


Por lo tanto, al contrario de otras tecnologías como pueda ser un ratón o un teclado, Arduino no es un hardware que se conecte y listo. Requiere de un proceso de configuración y aprendizaje previo y una programación para el micro-controlador.
¿Qué es un IDE o entorno de desarrollo?
Existen muchos entornos de desarrollo para muchos lenguajes de programación. Son herramientas que nos permite programar y de alguna manera son como procesador de textos. Para escribir un mensaje podemos trabajar con Word o con el Bloc de notas (que es más básico); la finalidad es la misma: escribir mensajes. El IDE de Arduino es algo parecido, la única diferencia es que tiene ciertas herramientas que nos permitirán cargar el programa al micro-controlador.


Con los años, Arduino ha sido el cerebro de miles de proyectos, desde objetos cotidianos hasta instrumentos científicos más complejos. Una comunidad mundial de creadores (estudiantes, aficionados, artistas, programadores y profesionales) se ha reunido en torno a esta plataforma de código abierto; sus contribuciones se han sumado a una increíble cantidad de conocimientos accesibles que puede ser de gran ayuda para principiantes y expertos.
El objetivo del algoritmo es resolver un problema. La forma como un algoritmo resuelve un problema forma parte del algoritmo mismo. La resolución del problema se consigue actuando sobre el entorno donde está inmerso el algoritmo.
Por ejemplo, una lavadora dispone de un método para lavar la ropa. Por tanto, podemos decir que las lavadoras disponen de un algoritmo para lavar la ropa.
¿Cuál es el entorno sobre el que actúa la lavadora? De una manera simplificada, podemos decir que es la ropa que se encuentra dentro del tambor de la lavadora.
Si le pedimos a la lavadora que lave la ropa, la lavadora seguirá el siguiente proceso:
Inicialmente la ropa está sucia y después de que la lavadora aplique el algoritmo de lavar, la ropa está limpia. Es decir, se ha generado un cambio de estado en el entorno sobre el que actúa la lavadora.
Estado inicial: ropa sucia y estado final: ropa limpia. Por tanto, hemos solucionado el problema: lavar la ropa. La lavadora, para lavar ropa, ejecuta un conjunto de acciones. Cada una de las acciones modifica el estado anterior. Es decir, entre el estado inicial y el estado final pueden darse muchos estados intermedios.

Las acciones que ejecuta la lavadora genera cambios de estado en el entorno; cambios que nos acercarán hacia el estado final deseado.
Por lo tanto, el entorno de un algoritmo es el conjunto de objetos que intervienen en éste. Por otro lado, los únicos objetos que la ejecución de un algoritmo podrá modificar son las variables. Así pues, un proceso -la ejecución de un algoritmo- sólo se puede modificar el entorno cambiando el valor de las variables que contiene.
Cuando escribimos algoritmos, operamos entre los diferentes objetos que hayamos declarado por nuestro entorno de trabajo para obtener valores concretos.
Una expresión es cualquier combinación de operadores y operandos:
La definición anterior de expresión no es suficiente. Para que una expresión nos sea útil, es necesario que ésta siga unas reglas sintácticas y que se respete el significado de los símbolos utilizados. En otras palabras, hace falta que una expresión sea correcta en sintaxis y semántica.
Sintaxis
Una expresión correcta y, por tanto, evaluable debe seguir las siguientes normas de combinación:
Semántica
Aunque una expresión tenga una sintaxis correcta, ésta puede carecer de sentido, ya que hay que respetar la tipificación de variables, constantes, operadores y funciones.
Por ejemplo, si encontramos un operador suma aplicado a variables boolea-nas, la expresión puede ser correcta sintácticamente, pero será incorrecta semánticamente, ya que la suma no está definida para los booleanos.
Otro ejemplo es 4.0 + 7, la cual no es correcta semánticamente porque mezcla dos tipos de datos diferentes. Notad que la última expresión puede tener sentido fuera del contexto algorítmico, pero no lo tiene dentro de la algorítmica.
Evaluación
La evaluación de una expresión se hace de izquierda a derecha comenzando por las funciones y los elementos comprendidos entre los paréntesis internos. Dentro de los paréntesis se evaluarán primero las operaciones prioritarias y después, las de menos prioridad.
Una constante se evaluará según el valor descrito en su definición, así como según el valor que guarda en el momento en que se evalúa.
Las prioridades de los operadores son:
En igualdad de prioridades, se evalúa de izquierda a derecha.
Antes de que un algoritmo utilice un objeto, es preciso que éste se haya declarado previamente.
En el caso de un objeto constante, tenemos que escribir su nombre, su tipo y el valor constante:

En el caso de un objeto variable, la declaración toma la forma:

En el caso de variables del mismo tipo, se pueden declarar de la siguiente forma:

Existen una serie de palabras que delimitan las partes del algoritmo. Estas palabras se denominan palabras clave, y nos ayudan a identificar fácilmente a qué se corresponde cada elemento. Estas palabras claves son exclusivas del lenguaje algorítmico, por lo tanto, no las podemos usar como nombre de los objetos (constantes o variables). Por ejemplo, no podemos usar var como nombre de constante o variable.