FechaVersiónDescripción
10/09/20211.0.0Versión inicial.
17/09/20211.0.1Corrección en la declaración de variables.
20/09/20211.0.2Corrección del índice.

 

Unidad 1 - Introducción a la programación

1 Programa

1.1 Programador y Usuario

1.2 Algoritmo vs Programa vs Aplicación Informática

1.3 Programa vs procesador

Fluxe de dades d'un programa

Las características deben cumplir:

Característiques del programes

1.4 Ciclo de vida del software

El ciclo de vida del software (proceso de creación y explotación de un programa) es como se describe:

Cicle de vida d'un programa

 

Este modelo admite la posibilidad de hacer iteraciones, es decir, durante las modificaciones que se hacen en el mantenimiento se pueden ver, por ejemplo, la necesidad de cambiar algo en el diseño, lo cual significa que se harán los cambios necesarios en la codificación y se tendrán que realizar de nuevo las pruebas, es decir, si se tiene que volver a una de las etapas anteriores al mantenimiento hay que recorrer de nuevo el resto de las etapas.

Después de cada etapa se realiza una revisión para comprobar si se puede pasar a la siguiente.

Trabaja en base a documentos, es decir, la entrada y la salida de cada fase es un tipo de documento específico. Idealmente, cada fase podría hacerla un equipo diferente gracias a la documentación generada entre las fases. Los documentos son:

El programa fuente o código fuente es el resultado de la codificación de un algoritmo en un lenguaje de alto nivel. Esto se hace en texto plano, siguiendo la sintaxis del lenguaje elegido.

Un entorno de programación interpretado traduce el código fuente a código máquina y lo ejecuta, instrucción por instrucción.

1.5 Interprete vs Compilador

Intérprete:

Execució per part d'un intèrpret

Compilador:

Compilació i Execució

1.6 Java: 50% Compilado - 50% Interpretado

El lenguaje Java para poder ejecutarse se hace en dos fases:

Compilació i posterior interpretació a `Java`

Esto permite la total portabilidad de los programas Java y su ejecución en cualesquiera plataforma.

Procés de compilació

1.7 Corrección de programas

Para corregir un programa se debe testear o probar. Un juego de pruebas es un conjunto de situaciones que permite probar el buen funcionamiento del programa. Este conjunto debe abarcar todas las posibilidades reales.

Un depurador (debugger) es un programa que permite:

A la hora de programar tendremos que diferenciar entre errores:

1.8 ¿Qué lenguaje elegir?

Aquí puede encontrar un listado de los lenguajes más utilizados en el mundo ranking de lenguajes de programación.

Enguany estudiarem Java:

C: Lenguaje de bajo y medio nivel. Nos permite acceder a la memoria e interactuar directamente con el sistema operativo de los equipos. Es el lenguaje escogido por todos los desarrolladores de sistemas operativos, desde un disco duro multimedia, un móvil, el ordenador de un coche, etc. Es uno de los lenguajes que genera el código más rápido (de ejecución)

Java: Lenguaje de alto nivel. Es uno de los lenguajes más extendidos, debido a que es multiplataforma y permite ejecutar un mismo código en cualquier equipo, independientemente de la arquitectura del mismo (32 vs 64 bits, Win Lin, Mac) e incluso navegadores (Applets). Precursor de javascript y Node.js.

Python: Lenguaje de alto nivel que permite crear desde aplicaciones de alto nivel, scripts de sistemas operativos. Predispone a la creación de un código legible, lo que lo hace muy útil para enseñar a programar.

 

2 La Información

2.1 ¿Qué es la información?

Un programa es una secuencia de instrucciones que manipulan unos datos para obtener unos resultados. Esas instrucciones son órdenes que le damos en el ordenador. Para ello hay que decirle esto en el lenguaje que entiende, que es el lenguaje máquina, compuesto por secuencias de 0s y 1s, al igual que toda la información que se guarda en un ordenador (números, texto, fotos, música, juegos , películas ...).

Pero como para nosotros (los humanos) nos resulta muy difícil, se lo diremos en otro lenguaje, más cercano al nuestro, que es un lenguaje de programación. A todo esto, hay que saber que los datos son información, y tal y como dice la wikipedia:

"La información es un conjunto organizado de datos procesados, que constituyen un mensaje que cambia el estado de conocimiento del sujeto o sistema que recibe dicho mensaje."

A tener en cuenta:

  1. Los datos deben estar organizados

  2. El mensaje (los datos) deben cambiar el estado del conocimiento. Esto significa que deben aportar algo nuevo o relevante al programa o proceso. De manera inversa: "Si un dato no aporta conocimiento, es que no es necesario, es inútil"

     

2.2 Datos

Un dato es cualquier información con la que trabaja un algoritmo.

Cada dato es de un tipo determinado que, básicamente, será entero, real, carácter o lógico, pero que dependerá del lenguaje de programación en el que estamos trabajando.

Los datos aparecen en un programa en una de las siguientes formas:

2.2.1 Variables

Una variable es un lugar donde podemos guardar un dato.

Una variable. Nom - capacitat - valor

El dibujo anterior representa la variable edad que guarda el valor 17.

Cada variable se caracteriza por tener:

Las variables se almacenan en la memoria RAM, de forma que:

Guardat a la memòria RAM

Hay que tener en cuenta que las variables ocupan memoria, y que se puede saber en qué lugar está cada variable por su dirección de memoria.

2.2.2 Precisión de las variables

A la hora de declarar variables hay que tener en cuenta que datos se van a almacenar en ellas, sobre todo en datos numéricos. Por ejemplo en 1 byte pueden guardarse valores entero 0 y 255 ($ 2 ^ 8 = 256 $ valores posibles). Con 1 byte es más que suficiente para guardar un dato como por ejemplo la edad de una persona. Pero 1 byte no nos serviría para guardar el año de nacimiento, y para la fecha de nacimiento ya ni comentamos.

Otro problema es que con ese byte, ¿como representamos números negativos? La solución que tienen los lenguajes de programación, es de los 256, partir la mitad negativos y la mitad positivos, quedándose [-127..0..128]. A los números reales, también pasa lo mismo, ¿cuán grande es el número que vamos a representar?

La solución que dan los lenguajes de programación es permitir reservar varios tamaños a los números, ya veremos, desde 1 byte hasta 12. Esta flexibilidad tiene la desventaja de que muchas veces estaremos desperdiciando memoria innecesaria.

2.2.3 Constantes

Una constante es como una variable pero que el valor no cambia durante la ejecución del programa.

Las constantes pueden aparecer en forma de literales o bien con nombre (constantes simbólicas):

Constants i els seus valors

Es necesario resaltar que:

2.3 Nombres

Las variables y constantes, para referenciarlas con posterioridad, necesitan un nombre (edad, x, altura, fecha_nacimim, etc.). Dependiendo del lenguaje de programación que estamos, habrá unas normas generales para escoger los nombres, que se deben cumplir:

2.4 Tipos de datos

Como ya hemos comentado, una variable debe tener un tipo, y una primera clasificación sencilla de los tipos simples es la de la figura lateral.

Después, cuando estudiamos ya los lenguajes, veremos que para cada tipo podemos añadir modificadores para la precisión.

Els tipus bàsics

2.4.1 Datos simples y compuestos

Una clasificación muy interesante de los datos (sobre todo de las variables) es saber si estas son simples o compuestas. De todo ello se trabajará más adelante:

Consideración: Los textos, dependiendo del lenguaje de programación pueden considerarse datos simples o compuestas (palabra como agrupación de letras)

Ejemplo de complejidad y de información compuesta: captura con la herramienta imtool de MATLAB, donde podemos observar un plano de nxm píxeles o puntos de luz. Cada píxel está formado por una terna (tripleta), con unos valores RGB (colores primarios).

Descomposició d'una imatge en canals

Ampliació de la imatge

Decomposició dels píxels en colors

Fijar con el detalle bajo de todo Pixel info:

2.4.2 Abstracción de datos

El proceso de abstraer datos, es muy simple: "quedarnos en lo que nos interesa".

Un "ente" tiene muchos datos que lo describen. Por ejemplo una persona tiene: nombre, apellido, edad, fecha nacimiento, color de ojos, grupo sanguíneo, deporte preferido, hobbies, actor preferido, etc.

Ahora cuando hacemos un programa, dependiendo para que sea, nos interesará una información u otra:

3 Instrucciones y Operadores

3.1 Expresiones

Las constantes y variables no aparecen aisladas, sino formando parte de expresiones. Una expresión es un cálculo necesario para obtener un resultado, y es una combinación de operandos unidos mediante operadores.

Los operandos pueden ser de diferentes tipos:

Ejemplos de expresiones:

TiposExpresiones
Numéricasedad
 5
 2*PI*quadrado(radio)
 (-b+raiz(quadradp(b)-4*a*c)/(2*a)
Alfanuméricas"Pedro"
 "Daenerys" + "De la tormenta"
LógicasTrue
 False
 a<b
 (v1<v2) && (v2<v3)

 

3.2 Operadores

Son los símbolos de las operaciones con los que se construyen las expresiones.

Dependiendo del tipo de datos de los operandos o del tipo del resultado, tenemos unos tipos de operadores: aritméticos, lógicos, relacionales y alfanuméricos

3.2.1 Operadores aritméticos

Son las operaciones matemáticos. Las variables o constantes que intervienen deben ser numéricas (enteros o reales) y el resultado también. Los más usuales son:

OperadorSignificado
^ ò **Potencia
*Producto
/ ò //División
%Residuo
+Suma
-Resta

Las expresiones que tienen 2 o más operandos necesitan unas reglas que permiten determinar en qué orden se evalúan. Si escribimos 2 * 5-3, ¿el resultado es7 o 4?

Para ello están las reglas de prioridad, que son estas:

OperadorPrioridad
^mas alta
*, /, % 
+,-mas baja

 

3.2.2 Operadores relacionales

Sirven para comparar 2 expresiones, retornan un valor lógico: verdadero o falso.

OperadorSignificado
>mayor
<menor
==igual
!=distinto
>=mayor o igual
<=menor o igual

Por ejemplo, suponemos las siguientes variables: x = 10, y = 20:

ExpresiónValor
(x+y)<20false
(y-x)<=xtrue
(x+y)>=xtrue
x==yfalse
x!=ytrue

3.2.3 Operadores lógicos

Los operadores lógicos son NO,Y y O. Pero para seguir la nomenclatura estándar de los algoritmos utilizaremos los nombres ingleses: NOT,AND y OR.

Actúan sobre operandos o expresiones lógicas y devuelven un valor lógico.

Los resultados de cada operador vienen dados por las correspondientes tablas de verdad:

xynot xx or yx and yx ox y
FFVFFF
FVVVFV
VFFVFV
VVFVVF

Leyes de De Morgan

Son 3 leyes básicas que cumplen las expresiones relacionales y que nos pueden servir para expresar de diferentes formas lo que queremos:

Negación de los operadores relacionales

Los operadores relacionales pueden negarse también para obtener, a veces, expresiones más sencillas o de acuerdo a nuestras necesidades. La siguiente tabla muestra dichas negaciones:

OPERADORNegación
<>=
><=
==!=
!===
<=>
>=<

Cambios de prioridad

Como los operadores lógicos y relacionales pueden formar expresiones junto con los aritméticos, también necesitamos unas reglas de prioridad para saber qué operadores evalúan primero.

OPERADORPRIORIDAD
NOTAlta
^ 
*, /, % 
+, - 
<, >, <=, >= 
==, != 
AND 
OR 
=Baja

 

3.3 Funciones

Son bloques de código que podemos utilizar en nuestros programas. Hay 2 tipos.

3.3.1 Funciones predefinidas

Los lenguajes de programación tienen funciones predefinidas con las que podemos llevar a cabo las tareas más usuales. Las funciones (al igual que en las de las matemáticas) suelen recibir uno o más argumentos y devuelven un valor que llamamos resultado.

Por ejemplo, para mostrar cosas por pantalla tenemos:

Pensamos en la dificultad que nos sería ahora que empezamos a programar el hecho de pintar algo en pantalla. Escribir Hola, a efectos prácticos es iluminar una serie de píxeles en pantalla, a unas determinadas coordenadas, en un determinado color, etc .. Gracias a cosas comoprint esto es mucho más fácil.

3.3.2 Funciones definidas por el usuario

Los lenguajes de programación también nos permiten definir nuestras funciones para poderlas utilizar en diferentes partes del programa:

En Java:

En Python: