Sie sind auf Seite 1von 32

Módulo 1.

Nociones generales de Informática

Autor: Luis Colomer Blasco

Objetivos:

1) Entender los elementos básicos de la arquitectura de un ordenador.

2) Conocer y manejar los sistemas binario y hexadecimal.

3) Comprender el concepto de digitalización y el concepto de algoritmo

4) Conocer los elementos básicos de los lenguajes informáticos: asignación,


comparación, condicional, bucles.

5) Comprender pequeños algoritmos informáticos y desarrollar las habilidades


necesarias para iniciarse en la programación de tareas sencillas en el ordenador.

Capítulo 1. Introducción a la arquitectura de ordenadores

Empezaremos examinando en el gráfico de abajo, un poco rudimentario


y muy simple, los elementos básicos de un ordenador.
En este gráfico he distinguido tres bloques: el bloque de los periféricos, el
bloque de la memoria y el bloque de proceso y control.

a) Periféricos

La tarea de los periféricos es múltiple. Algunos captan una parcela de la realidad


exterior (cámara WEB, etc.) o de nuestras acciones (teclado, etc.) y la transforman en
números (más adelante estudiaremos este aspecto de la cuestión). Una vez transformada
la realidad en números los periféricos depositan su información en la zona
correspondiente de la memoria mediante la ayuda de los circuitos de control. Otros
periféricos cumplen la función inversa, es decir, transforman los números almacenados
en la memoria del ordenador en representaciones adecuadas a nuestros sentidos
(impresora, monitor, etc.). En todo este proceso, lo esencial es la posibilidad de
convertir aspectos de la realidad en números y viceversa. Esto es lo que se denomina
digitalizar la realidad. Otros sirven simplemente para almacenar información (números)
de una forma más masiva y permanente (disco duro, CD, DVD, etc.).

b) Memoria

La finalidad de la memoria es simplemente almacenar números, millones y millones de


números, cada uno en su casilla correspondiente, con su propia dirección. Es decir, por
ejemplo, en la casilla 10234488 puede estar el número 220, en la 10234489 el 110, etc.
Quiero con ello decir que hay dos elementos esenciales en la memoria: su dirección (p.
ej. 10234488) y el dato que contiene (en el ejemplo, 220). Cada casilla tiene una
dirección, un número en sucesión que la identifica, y cada casilla tiene un contenido, el
número que está almacenado dentro. Veréis que en el gráfico he destacado dos líneas de
conexión a las que he llamado "BUS DE DATOS" y "BUS DE DIRECCIONES". En el
"BUS DE DATOS" viajan los números que van desde el procesador a la memoria (el
procesador escribe en la memoria), o desde la memoria al procesador (el procesador lee
en la memoria). En el "BUS DE DIRECCIONES" el procesador pone el número (la
dirección) de la casilla de la que quiere leer o en la que quiere escribir.
La pregunta ahora es: ¿qué hay en la memoria de un ordenador? Bien, en la memoria de
un ordenador hay básicamente dos cosas: por un lado, instrucciones para el procesador,
es decir, las órdenes que el procesador deberá ejecutar una tras otra. El conjunto de estas
órdenes es lo que habitualmente se conoce como el programa. Por otro lado en la
memoria del ordenador están los datos: los datos que han sido recogidos por los
periféricos o el resultado de las operaciones realizadas por el procesador, etc.
Resumiendo, en la memoria hay PROGRAMAS y DATOS.

c) Proceso y Control

Comencemos por los circuitos de control. Su tarea es básicamente mantener la conexión


y la sincronía entre todos los componentes del ordenador. Es decir deben encargarse de
que todos los componentes se comuniquen entre sí, etc. En el gráfico estas conexiones
están puestas en color verde y con una línea discontinua.

El procesador es el núcleo del ordenador. Las cosas que puede hacer un procesador son
realmente escasas. Básicamente unas pocas operaciones aritméticas (sumar, restar,
multiplicar y dividir); unas pocas operaciones lógicas (disyunción, conjunción);
comparar dos números entre sí para ver si uno es mayor, menor o igual que otro; leer
números de la memoria y escribir números en la memoria. Si no hay nada en contra el
procesador habitualmente lee la orden de la posición de memoria en la que se encuentra,
ejecuta esa orden y a continuación lee la orden que se encuentra en la dirección de
memoria siguiente. Ahora bien, el procesador puede recibir una orden que le indique
que a continuación debe ejecutar las órdenes que se encuentran no en la dirección de
memoria siguiente, sino en otra cualquiera, en función del resultado de una operación
anterior. Esta posibilidad de "SALTO" en la ejecución es lo que permite la realización
de las tareas iterativas que son la esencia del trabajo de un ordenador. Por ejemplo, en la
posición de memoria 1038 puede haber una orden codificada que diga algo así como:
"si el número que está guardado en la posición 5030 (por decir alguna) es igual a 0,
continúa la ejecución del programa en la casilla 1000". Como veis, esto crearía un bucle
que se repetiría hasta que en un momento determinado se escribiera un número que no
fuera 0 en la casilla 5030.
Programar, como veremos más adelante, consiste básicamente en
descomponer una tarea en tareas numéricas básicas muy elementales que se repetirán
miles o millones de veces. Pero antes tendremos que ver también como podemos
reducir la realidad a números, y en nuestro caso, los aspectos de la realidad que tienen
que ver con la música: el sonido, las notas, etc.

Capítulo 2. Representación binaria y hexadecimal de los números

Hemos dicho que un ordenador todo lo que hay son números. Debemos,
pues, saber cómo se representan los números en un ordenador. Básicamente en el
interior de un ordenador circulan solamente dos niveles de tensión, +5 V y 0 V (en las
conexiones externas se tiende a utilizar valores opuestos, p. ej. +12 V y -12 V). Lo que
interesa comprender ahora es que hay sólo dos posibilidades. Por ello todo debe ser
representado utilizando solamente dos dígitos: 1 y 0. Es decir, los números se guardan y
se procesan en el interior del ordenador en el sistema binario.
Para entenderlo repasemos someramente en qué consiste el sistema
decimal. Tomemos el número decimal 3846. En él tenemos dígitos (que pueden ir del 0
al 9) y posiciones (el 6 está en la primera posición empezando en la derecha, el 4 en la
segunda, el 8 en la tercera y el 3 en la cuarta). La primera posición es la de las unidades
(10^0), la segunda es la de las decenas (10^1), la tercera la de las centenas (10^2), la
cuarta la de los millares (10^3) y así sucesivamente (siguiendo la notación de Matlab
utilizaremos el signo "^" para indicar "elevado a"). Es decir, la primera posición
multiplica por 1 el valor del dígito, la segunda por 10, la tercera por 100, la cuarta por
1000, etc. Este mismo esquema se repite para los números en representación binaria,
con la única diferencia de que la primera posición vale por 1 (2^0), la segunda por 2
(2^1), la tercera por 4 (2^2), la cuarta por 8 (2^3), la quinta por 16 (2^4), la quinta por
32 (2^5), la sexta por 64 (2^6) y así sucesivamente. Es decir, en el sistema decimal los
valores de las posiciones son las sucesivas potencias de 10, en el sistema binario, las
sucesivas potencias de 2.
Por ejemplo, el número binario 10001110 sería el número decimal 142. Veamos cómo:
La posición primera, la de más a la derecha, vale por 1 y es 0
La posición segunda vale por 2 y es 1
La posición tercera vale por 4 y es también 1
La posición cuarta vale por 8 y es también 1
La posición quinta vale por 16 y es 0.
La posición sexta vale por 32 y es 0.
La posición séptima vale por 64 y es 0.
La posición octava vale por 128 y es 1.
Si sumamos los valores de todas las posiciones que no son 0 (que llevan el dígito "1")
obtenemos el número 142.

Para más claridad y para extender esta noción al sistema hexadecimal


adjunto unas fotocopias sacadas del libro de G. Perotti, Técnicas de Interface Midi.
Música y Ordenadores Personales, Madrid 1991, págs. 11-17
Ejercicio 1
Como práctica os propongo que paséis pequeños números decimales
(inferiores a 256) a representación binaria y a representación hexadecimal. Para
comprobar los resultados, los que tengáis ya el Matlab podéis teclear en la ventana de
comandos lo siguiente. Si queréis obtener la representación binaria literal (en forma de
texto) del número decimal 200 escribid:

dec2bin(200)
Si queréis la representación hexadecimal:

dec2hex(200)

También es posible pasar de cadenas de letras ("strings") que representan


números binarios o hexadecimales a números decimales, mediante las funciones
"bin2dec" y "hex2dec". Por ejemplo, teclead en la ventana de comandos de Matlab lo
siguiente:

bin2dec('1011')

hex2dec('F3')

En Matlab las cadenas de letras van siempre entre comillas simples.


Conviene recordar también que en inglés es muy habitual utilizar el número "2" para
abreviar la palabra "to".

------------------------------

El objetivo de ocuparnos aquí de los números binarios evidentemente no


es aprender a sumar, ni multiplicar, o dividir en binario. Para eso están las calculadoras.
Lo único que hace falta es que entendáis que cualquier número se puede representar
mediante solamente dos dígitos: unos y ceros.
En general, hoy en día se utilizan muy poco los números binarios. Para
un humano la sucesión de 1 y 0 se hace muy difícil de seguir. Por otro, la propia
máquina se encarga de realizar la transformación de binario a decimal y viceversa. No
obstante, sí que es necesario entender en qué consiste esta forma de representación.
La representación en hexadecimal se utiliza un poco más. La razón es
que cada dígito hexadecimal se corresponde con un grupo de cuatro dígitos binarios.
De esta forma la conversión es muy rápida. Basta con agrupar de cuatro en cuatro los
dígitos binarios. Veamos un ejemplo:

Binario 1001 1111


Hexadecimal 9 F

Hay que tener presente que con cuatros dígitos binarios el número más
grande posible es el decimal 15, o sea en hexadecimal, "F".
Por último, una cuestión de terminología. Cada dígito binario, cada 1 o
cada 0, se denomina "bit". Cada grupo de 8 dígitos binarios (que es la agrupación
habitual en cada casilla de memoria) se denomina "byte". Como veréis, en un "byte"
sólo se pueden representar números decimales hasta 255 (B1111 1111). Como
habitualmente se manejan números muchos mayores hay que coger 2, 4 u 8 posiciones
de memoria para representar cada número.

Ejercicio 2

El número binario B1001, ¿qué número decimal representa?

Respuesta:

- La primera posición vale por 1 y es un 1, por lo tanto la primera posición valdrá por 1

- La segunda posición vale por 2, pero es un 0, por lo tanto no vale nada

- La tercera posición valdría por 4, pero también es un 0, y tampoco vale nada

- La cuarta posición vale por 8, y es un 1, por la tanto valdrá 8.

A continuación sumamos el valor de todas las posiciones y nos sale 9. Es decir, el


número binario B1001 es la representación binaria del número decimal "9".
Ejercicio 3

Imaginemos ahora que lo que queremos es lo contrario: obtener la representación


binaria del número decimal 19.

Razonaríamos así:

a) Las sucesivas posiciones valen: 1, 2, 4, 8, 16. 32, ...

b) Por lo tanto la posición de más valor tiene que ser la quinta (la que vale 16), porque
la siguiente ya vale 32 y el número es inferior a 32. Por lo tanto la quinta posición, la
que vale 16 tiene que ser 1. El número sería 1???? (las interrogaciones significan que
todavía no sabemos si habrá unos o ceros en esa posición).

c) La siguiente posición hacia la derecha vale por 8, pero tiene que ser 0, porque si no el
número sería 16+8 (24) como mínimo.

d) La siguiente posición hacia la derecha vale por 4, pero tiene que ser 0 también,
porque si no el número sería 16+4 (20) como mínimo.

e) La siguiente posición hacia la derecha vale por 2, y tiene que ser 1, porque entonces
el número valdrá 16+2 (18) y este número es menor que 19.

f) La siguiente posición hacia la derecha vale por 1 y tiene que ser 1. De esta manera el
número vale 16+2+1, es decir, 19.

Capítulo 3. Algoritmos y programación

En este capítulo vamos a comenzar entendiendo en qué consiste la


digitalización, luego explicaremos qué es un algoritmo y aprenderemos a hacer alguno
sencillo. Así mismo, conoceremos las instrucciones básicas de un lenguaje de
programación standard.
Hemos visto que en un ordenador no hay más que números y
operaciones básicas con números. Por lo tanto, es evidente que aquellos aspectos de la
realidad que nos interese tratar con un ordenador tendrán que ser convertidos a números,
a dígitos. En esto consiste, pues, la digitalización: en la codificación numérica de los
diferentes aspectos de la realidad. Como veis, la cuestión tiene también un cierto
carácter filosófico: se trata de la posibilidad de reducir, o al menos representar, la
realidad a números, algo que nos recuerda la concepción pitagórica del ser como
número (y, aunque ahora no es el caso, como música). Estas ideas pueden ayudarnos a
dejar claro que digitalizar es simplemente transformar en números un aspecto de la
realidad. Esto significa dos cosas: primero, tenemos que ver cómo convertir realidades
a números, y segundo, discurrir cómo traducir los procesos de la realidad a procesos
hechos con números. Como veréis enseguida, entender esto es mucho más fácil de lo
que parece.
Para conseguirlo voy a proponer una serie de ejemplos.

Ejemplo 1. ¿Cómo podemos digitalizar un texto escrito? Una de las tareas más básicas
de un ordenador es precisamente almacenar información textual escrita. ¿Cómo se
realiza esto? Tratad de pensar en ello y mirad a ver si llegáis a la misma conclusión.
Una forma muy sencilla es simplemente asignar un número a cada letra del alfabeto y
de esa manera un texto cualquiera se puede transformar en una sucesión de números.
Por ejemplo, la letra "A" puede ser el número 65, la "B" el 66, la "C" el 67, y así
sucesivamente. A continuación vendrían las letras minúsculas y cualesquiera otros
caracteres. He elegido estos números porque son los que de hecho coinciden con el
código standard ASCII, que es uno de los habitualmente utilizados por los ordenadores.
De esta forma, la palabra "CASA", queda digitalizada en la siguiente lista de números
"67 65 83 65".

Ejemplo 2. ¿Cómo podemos digitalizar una fotografía en blanco y negro? Esta es


también una de las tareas habituales de un ordenador. ¿Cómo transformamos en
números una imagen que está en blanco y negro, es decir, en niveles de grises? La
respuesta es dividiendo la imagen en puntos lo más pequeños posibles y asignando un
valor numérico a cada punto en función de su mayor o menor luminosidad, de su
proximidad al blanco o al negro. Por ejemplo, podemos utilizar un solo byte por punto y
guardar en el un número que represente su valor de luminosidad. Con un solo byte el
número más pequeño será 0 (por ejemplo, lo asignamos para representar el negro total,
la ausencia de luminosidad) y el número mayor será 255 (en este caso, representará el
blanco total, la máxima luz).

Ejemplo 3. ¿Cómo representar ahora una imagen en color? En este caso hay muchas
opciones. La más inmediata es considerar el color como el resultado de la síntesis de
tres colores básicos, por ejemplo, el rojo, el verde y el azul. De esta manera, al igual que
en el ejemplo anterior, dividiremos la imagen en puntos y asignaremos a cada punto un
nivel de rojo, otro nivel de verde y otro de azul. Así, cada punto estará definido por una
triada de números. Por ejemplo, "0 0 0" representará un punto negro; "255 255 255"
representará un punto blanco; "255 0 0" representará un punto rojo puro; etc.

Ejemplo 4. ¿Cómo podemos digitalizar una película? Nos basta simplemente con pensar
que una película es una sucesión de imágenes. Por lo tanto, lo único que necesitaremos
será digitalizar, esto es, transformar en números cada una de las imágenes de las que
consta la película.

Con estos ejemplos pienso que ha tenido que quedar claro en qué
consiste la digitalización. He dejado deliberadamente al margen de estos ejemplos la
música, pues a ella nos vamos a dedicar de lleno en los módulos siguientes. Ahora
interesa más dejar claras las nociones y principios generales.

Ahora vamos a pasar a la cuestión siguiente: ¿qué es un algoritmo? Un


algoritmo es simplemente esto: la descripción de un procedimiento para realizar una
tarea compleja mediante la combinación de una serie de tareas básicas o primitivas. El
ejemplo típico que se pone habitualmente es la receta para hacer una tortilla: p. ej.
repetir tres veces romper huevo, batir resultado, freír resultado, etc.
Veamos otro ejemplo un poco más detallado. Supongamos que tenemos
20 exámenes y queremos ordenarlos por orden alfabético. Las únicas acciones que se
nos permite (las acciones primitivas) son: comparar apellidos del examen con el
resultado de "anterior", "posterior" o "igual"; intercambiar posición de dos exámenes
seguidos.
Con estos requisitos el núcleo de nuestro algoritmo consistiría en lo
siguiente: iríamos comparando los apellidos de un examen con los del siguiente examen
y si el resultado era que el apellido primero es posterior, realizaríamos la segunda
acción permitida: intercambiar la posición de los dos exámenes.
Lo repito de otra manera. Tenemos una acción compleja a realizar: la
ordenación alfabética por apellidos de 20 exámenes. Dos acciones básicas, primitivas.
Una, comparar entre sí los apellidos de dos exámenes, que nos devuelve como
resultado que el apellido del primer examen comparado es anterior, posterior o igual que
el segundo término de la comparación. La otra, una acción que no devuelve ningún
resultado, simplemente intercambia la posición de los exámenes. El algoritmo, el
proceso, consiste simplemente en la combinación de estas dos acciones (o
procedimientos, o funciones): comparar entre sí dos exámenes sucesivos y si el
resultado es "posterior" intercambiar exámenes. Queda ahora por detallar cuántas veces
habrá que realizar este proceso. Pero esto prefiero dejarlo para el ejercicio que viene un
poco más adelante.

Por último, quedaría por explicar brevemente qué es un lenguaje de


programación y cuáles son las instrucciones básicas que tienen prácticamente todos los
lenguajes de programación. De entrada, un lenguaje de programación es simplemente
un programa más. Ahora bien, la función de este programa es ayudar a crear más
programas. Un lenguaje de programación cumple la tarea de hacer más cómoda la
programación de un ordenador. Hace mucho tiempo, para programar un ordenador
había que introducir numéricamente en su memoria uno a uno los códigos de las
instrucciones del microprocesador. Es decir, p. ej., sabías que el código de "cargar un
dato en memoria" era 64; así pues, la instrucción "64, 23050, 128" significaba "carga en
la dirección de memoria 23050 el número 128". Como podéis imaginar la programación
de esta manera era bastante incómoda. Un lenguaje de programación permite, pues,
pensar en términos más próximos a la razón humana y luego realizar automáticamente
la traducción al lenguaje numérico de la máquina.
¿Cuáles son las instrucciones básicas de un lenguaje de programación?
Pues, muy pocas, como veréis ahora, y prácticamente en todos los lenguajes las mismas.
Sin embargo, lo que más cambia entre un lenguaje y otro es la sintaxis, es decir, la
forma en la que se expresan. Aquí os las proporcionaré con la sintaxis de Matlab, que es
muy parecida a la de "C". Insisto, de todas las maneras, en que sabiendo un lenguaje se
saben todos. Lo único que hace falta cuando se desconoce la sintaxis de un lenguaje es
utilizar constantemente el manual hasta que nos familiaricemos con él. Siempre lo más
importante es, así pues, desarrollar la capacidad para crear algoritmos; hacerlo en uno u
otro lenguaje es totalmente secundario.

a) ASIGNACIÓN. La asignación permite introducir un dato dentro de la memoria y


darle un nombre para poder identificarlo. Probad tecleando en la ventana de comandos
de Matlab:

a = 24

b = 555

c = 999

Ahora escribid simplemente

Aparece en la pantalla 24. Los "a", "b", "c" creados se denominan variables, pues su
contenido puede cambiar a lo largo del programa; basta con volver a asignarles otros
valores. Así pues, la asignación nos permite meter en una o varias posiciones de
memoria (según la longitud del dato de que se trate) un contenido, y además nos
permite identificar ese contenido con un nombre. Otro ejemplo,

sueldopepe = 23599

La utilización de este tipo de nombres descriptivos para las variables nos facilita la tarea
de recordar qué es lo que se guarda en cada sitio.
En los ejemplos que hemos visto hasta ahora hemos guardado sólo números, pero
también podemos guardar letras, texto. Para ello tenemos que encerrar en comillas
simples el texto que queremos guardar. Por ejemplo,

nombre = 'Juan Sierra'

A veces también queremos guardar más de un dato, p. ej., una serie de números. Para
ello basta con escribir, p. ej.

misnotas = [9; 8; 3; 2; 5; 7]

Si luego tecleamos

misnotas

veremos aparecer en columna la sucesión de valores que hemos introducido (si los
separamos por espacios o comas, en lugar de puntos y coma nos aparecerán en fila).

También podemos teclear

misnotas(3)

y aparecerá sólo el tercer valor.

Esto que acabamos de ver es lo que se denomina un vector, o un "array",


es decir, un lugar donde se almacenan datos a los que se puede acceder por el nombre
del vector y por un índice.

b) COMPARACION. La comparación es una operación lógica y devuelve siempre un


resultado. El resultado puede ser verdadero (1) o falso (0). Escribid, por ejemplo,

20 > 24
Puesto que es falso que 20 sea mayor que 24, el resultado será 0, es decir, falso. En
informática "0" es el valor que representa la falsedad lógica y "1" el que representa la
verdad lógica. Si, por el contrario, escribimos,

20<24

aparecerá 1, verdadero. Igualmente, podéis comparar el contenido de variables. P. ej., si


habéis introducido los valores anteriores en las variables a y b (con lo que se borrarán
los anteriores valores de a y b)
a = 20
b = 24
a < b

deberá dar verdadero, 1.

Las comparaciones más básicas son: mayor que (>), menor que (<), igual que (==).
ATENCION: "igual que" se representa en Matlab y en "C" con dos signos seguidos de
igualdad. La razón es la siguiente: el signo igual se utiliza para la asignación y, para
evitar confundir asignación con comparación, esta última se escribe con dos signos
sucesivos de igualdad, "==". Repito, la asignación no es una igualdad matemática,
simplemente introduce en memoria un dato. Por ejemplo,

a = 333

a = a + 1

El resultado será en primer lugar 333 y luego 334. La orden "a = a + 1" lo único que
hace es poner en la variable "a" (en la dirección de memoria que llamamos "a") el valor
de lo que había antes en "a" y añadirle 1. El signo = no representa una igualdad
matemática, sino simplemente da una orden de asignación.

c) CONDICIONAL. El condicional nos permite ejecutar una orden, o todo un conjunto


de ellas, en función de que sea verdad la condición que hemos puesto. Os pongo la
sintaxis con un ejemplo:
a=24
b=40
if a>b,
c = a
else
c = b
end

Lo leemos despacio y traducido línea a línea:

Mete en la dirección de memoria que llamamos "a" el número 24.


Mete en dirección de memoria que llamamos "b" el número 40.
Si lo que hay en "a" es mayor que lo que hay en "b".
Mete en la dirección de memoria que llamamos "c" el número que hay en la de "a".
En caso contrario.
Mete en la de "c" el número que hay en la de "b".
Termina la orden condicional.

Como veis al final quedará en la dirección "c" el número que sea mayor de los dos, en
este caso, el que está en "b", el 40.

d) BUCLES. Por último, para terminar este breve panorama de las órdenes básicas,
vamos a ver un par de órdenes que sirven para realizar iteraciones, es decir, para repetir
el número de veces que queramos un conjunto de órdenes cualesquiera. Veámoslas
también con un ejemplo. El signo "%" indica al programa simplemente que esta línea
contiene un comentario y que debe ser ignorada al realizar el proceso de convertir a
códigos máquina. Para simplificar a partir de ahora diremos "mete en n" en lugar de
decir la expresión más correcta, "mete en la dirección o direcciones de memoria que
llamamos n".

Primero la orden "while"

n = 1
while n<10
n = n + 1
%las órdenes que quisiéramos repetir vendrían aquí
end

Lo traducimos:

Mete en n el valor 1.
Mientras n sea menor que 10, haz todo lo que viene a continuación hasta llegar a "end",
y luego vuelve a la línea while a comprobar de nuevo el valor de la variable n.
Mete en n lo que había antes en n y añade 1, es decir, incremente la variable n en 1.
Al llegar a "end" vuelve a la línea while y examina de nuevo si n (que ahora vale 2) es
menor que 10. Como la respuesta es verdadera continúa otra vez con las líneas de abajo.

Como veis, este proceso seguirá hasta que, como consecuencia de la


repetición de la orden n = n + 1, n haya llegado a tomar el valor de 10, en cuyo caso
saldríamos del bucle while y se continuaría la ejecución del programa con lo que
hubiera escrito debajo de la línea "end".

En segundo lugar, veamos la orden "for". La orden "for" es una forma abreviada de la
orden "while". Veamos un ejemplo:

for n = 1:3:20,
n
end

Esta orden dice así:

Comenzando con el valor n=1, incrementándolo cada vez con 3, y mientras n sea menor
o igual que 20, repite todas las órdenes que van antes de la palabra "end".
En este caso la única orden que va en medio es "n", con la finalidad de que aparezca en
la pantalla el valor de la variable en cada vuelta del bucle para que podáis ver lo que
pasa.

Estas son las órdenes básicas de cualquier lenguaje de programación.


Estas órdenes pueden estar anidadas. P. ej. dentro de una orden "for" puede haber otra
orden "for", o entre un "if" y su correspondiente "end" puede haber otro "if ... end", o
un "while ... end", etc. Hay también, claro está, órdenes para recibir datos del teclado,
para presentar en pantalla, para trazar gráficas, para manejar ventanas, etc. Pero todas
estas cuestiones dependen ya del ordenador concreto y son más propias de ver en cada
manual. Nuestro objetivo aquí es simplemente entender los principios y adquirir unos
buenos fundamentos para que cada uno pueda desarrollarlos por su cuenta. A
continuación os propongo un ejercicio para que podáis entender mejor todas estas ideas.

Ejercicio 4.
Tomando como punto de partida un vector con 10 números correspondientes a las notas
de 10 alumnos, escribid en Matlab un algoritmo que los ordene dentro del mismo
vector en orden creciente.

Para ello debéis abrir el editor y crear un archivo con las órdenes
sucesivas que vayáis a utilizar. Luego darle un nombre cualquiera al archivo. Por
ejemplo, os sugiero, "ordenar.m". La extensión ".m" corresponde a los archivos de
comandos y funciones de Matlab, y lo pone el programa automáticamente. Para
ejecutar el archivo basta con que tecleéis en la ventana de comandos su nombre. En
este caso, "ordenar", claro está, sin comillas. Aseguraos de que guardáis el archivo en
el "directorio actual" ("current directory") de Matlab. Matlab por defecto lo hará así,
pero si no verificarlo mediante la herramienta "Path Browser".

Para crear el vector con los 10 números utilizad la orden siguiente:

nota = [5; 8; 3; 7; 4; 2; 10; 3; 1; 6]


Basta con que copiéis la orden y la peguéis en la ventana de comandos. Esta orden, al
estar separados sus valores por puntos y comas, os creará un vector columna, una serie
de números en sucesión vertical. Recordad que nota(1) se referirá al contenido de la
posición primera, en este caso, 5; nota(2) a la segunda, 8; y así sucesivamente. En lugar
de índices numéricos concretos también podéis poner variables. Así, si "n" vale 4,
notas(n) se referirá a la posición cuarta, es decir, su contenido será 7.

Este ejercicio para los que no hayáis programado nunca puede resultar difícil. No os
preocupéis por ello. Una pequeña ayuda: vais a tener que utilizar una posición de
memoria auxiliar para poder realizar el intercambio sin perder uno de los datos.
Recordad también la posibilidad de utilizar bucles anidados: un bucle dentro de otro
bucle. Si no queréis que se muestre en pantalla el resultado de cada comando,
terminadlo con un punto y coma, p. ej., "a = a + 1;". Para ver el resultado, poner al
final de vuestro pequeño programa

nota

y deberá aparecer el vector ordenado. Para ejecutarlo basta con que tecleéis el nombre
que hayáis dado al archivo en la ventana de comandos. Insisto en que esto es un
ejercicio. En realidad, para ordenar un vector en Matlab basta con la simple orden
"sort".

SOLUCIÓN AL EJERCICIO 4

A continuación voy a mostrar una solución poco eficaz, pero espero que didáctica a
este ejercicio. En realidad hay libros enteros dedicados a tratar eficazmente el problema
de la ordenación, pero aquí buscamos únicamente familiarizarnos un poco con el "abc"
de la informática: asignaciones, condicionales, bucles, etc.

Voy a tratar de reproducir paso a paso un posible razonamiento a seguir.

1) El punto de partida es la idea general del algoritmo. ¿Cómo haría yo esta tarea con
mis propias manos? La idea es sencilla, iría comparando una nota con la siguiente y si la
primera fuera mayor que la segunda intercambiaría sus posiciones. Esto lo tendría que
repetir muchas veces.

2) Veamos cómo traducir estas acciones a lenguaje informático. Denominamos al


casillero o vector donde se guardan las notas con el nombre de "nota". Así, nota(1) será
la primera nota, nota (2) la segunda, nota(3) la tercera, etc. Tendremos, pues, que
comparar nota(1) con nota(2) y si el resultado es que nota(1) es mayor que nota(2)
intercambiaremos sus posiciones, luego nota(2) con nota(3) , y así sucesivamente.
Ahora bien, una forma de expresar esta idea es mediante una variable. La orden puede
expresarse así:

Si nota(n) > nota(n+1), intercambia valores nota(n) y nota(n+1).

Ahora bien, para intercambiar necesitaremos un lugar de almacenamiento provisional,


pues si no perderíamos uno de los valores. Para intercambiar haremos algo así como:

guarda en variable provisional el valor de nota(n),


mete en nota (n) lo que está en nota(n+1),
y mete en nota(n+1) lo que hemos guardado en provisional.

En lenguaje concreto de Matlab escribiremos (aunque no podemos ejecutarlo todavía,


pues no hemos asignado valores a n)

if nota(n)>nota(n+1),
provisional = nota(n);
nota(n) = nota(n+1);
nota(n+1) = provisional;
end

Tenemos ya el núcleo de la operación ordenar. Ahora bien, tenemos que indicar para
qué valores de "n" hay que realizar este proceso (o lo que es lo mismo, cuántas veces
hay que repetir esta comparación-intercambio).
En principio tenemos que hacerlo desde el primer elemento hasta uno menos que el
último (como es obvio, el último no se puede comparar con el siguiente del último).
Así tendremos que hacerlo desde n = 1 hasta n = 9 (pues son 10 los elementos del
vector).

for n = 1 : 1 : 9,
if nota(n)>nota(n+1),
provisional = nota(n);
nota(n) = nota(n+1);
nota(n+1) = provisional;
end % este end corresponde al if end %
end % este end corresponde al for n ...
nota

En lenguaje cotidiano el programa anterior dice:

1. Desde n = 1, en cada vuelta se incrementa n en 1, se repite hasta que llega n a 9,


luego cuando n excede de este valor se continúa después de la línea end del for
correspondiente.
2. Si el valor contenido en nota(n) es mayor que el contenido en nota(n+1) continúa con
las líneas que siguen. En caso contrario salta a la línea que sigue al "end"
correspondiente al "if". Hay que tener en cuenta que el valor de "n" va cambiando a lo
largo del bucle.
3. Mete en la variable "provisional" lo que está en esos momentos contenido en
"nota(n)".
4. Mete en "nota(n)" lo que está en "nota(n+1)".
5. Mente en "nota(n+1)" lo que está en "provisional".
6. Fin del "if".
7. Fin del "for".

Una vez hecho esto y vistos los resultados tomamos conciencia de que no hemos
repetido suficientes veces el procedimiento. Todavía no hemos ordenado todas las
notas. Sí que podemos comprobar que nuestra ordenación ha avanzado algo. Sin
embargo no ha sido suficiente. Pero esto nos pasaría igual si lo hiciéramos a mano. Una
forma drástica de resolver esta cuestión es repetir 10 veces todo el bucle interior. Así
estaremos totalmente seguros de que todo ha quedado ordenado.

Para ello necesitaremos otra variable distinta que cuente las veces que se repite este
bucle externo:

for c = 1 : 1 : 10,
for n = 1 : 1 : 9
if nota(n)>nota(n+1),
provisional = nota(n);
nota(n) = nota(n+1);
nota(n+1) = provisional;
end % este end corresponde al if
end % este end corresponde al for n ...
end % este end de for c
nota

Y ahora sí que hemos conseguido nuestro objetivo.


-------------------------------------------------

Ejercicio 5
Os propongo a continuación una forma sencilla de practicar con las órdenes básicas en
Matlab. Os recuerdo, que todo lo que hacemos ahora son pequeños ejercicios con la
finalidad de que vayáis interiorizando las ideas. En seguida veréis que Matlab (lo
mismo que C++ u otros lenguajes) proporcionan herramientas automáticas para trabajar
con vectores, etc. Pero siempre es necesario tener claros los fundamentos. Para
practicar un poco las órdenes básicas en Matlab os sugiero lo siguiente.

Escribid directamente en la ventana de comandos órdenes como las siguientes

a=29

b=48
a>b

if a>b, c=1111, else c=9999, end

for n=1:2:10, n, end

Modificadlas y veréis lo que va ocurriendo.

Ejercicio 6
Os sugiero que hagáis lo siguiente para entender bien la orden "for".

1) Abrid el editor de Matlab con el comando del menú "New" y luego "M-File".

2) Pegad en el documento vacío abierto el código siguiente;

for n = 1 : 3 : 20,
disp(n)
end
disp('he terminado')

3) Guardad este archivo en el directorio actual de Matlab, en el que estéis trabajando,


con el nombre "probarfor.m", u otro nombre cualquiera. (Si no estáis seguros mirad
cuál es el directorio actual "current directory" mediante el comando del menú "Set
path".)

4) Poner un punto de ruptura para depuración (break point) en la primera línea de este
código. Para ello situar el cursor en la primera línea e ir al menú "Debug" y luego a
"Set/Clear breakpoint". Deberá apareceros un punto gordo rojo a la izquierda de la
primera línea.

5) A continuación teclead en la ventana de comandos


probadfor

El programa comenzará su ejecución y se detendrá en la línea marcada con un punto


rojo gordo.

6) En el menú "Debug" dad la opción "Single Step" (o igualmente apretad la tecla


"F10"). Se ejecutará sólo una línea.

7) Continuad así hasta que se ejecute todo el programa.

Nota: la orden "dsp" ("display") sirve simplemente para presentar el contenido de las
variables.

Resumen

Al finalizar el presente tema es necesario que haya quedado claro en qué


consiste un ordenador: un lugar en el que no hay otra cosa sino millones y millones de
números moviéndose a toda velocidad (miles de millones de operaciones y movimientos
de números por segundo). Todo lo que tenemos dentro de un ordenador son números y
operaciones aritméticas y lógicas con números. Para conocer verdaderamente el
funcionamiento de un ordenador es conveniente aprender a operar como realmente lo
hace la máquina, así también saber cómo pasar números decimales a binarios y
hexadecimales, y viceversa
Ha tenido que quedar clara la idea de que numerosos aspectos de la
realidad (hasta ahora no hemos encontrado límites teóricos a este proceso) son
susceptibles de ser expresados mediante números (digitalizados). Así mismo, hemos
visto cómo los procesos y modificaciones de la realidad pueden ser realizados mediante
las correspondientes operaciones numéricas. Dicho de otra manera, podemos pensar
que la estructura de la realidad y la estructura de los números son isomórficas.

Por otro lado, debemos recordar que un algoritmo no es más que la


descripción de un procedimiento para realizar una tarea compleja mediante la
reiteración de tareas simples o básicas. Dado que aquí trabajamos sólo con números (la
realidad la hemos expresado mediante números), encontrar un algoritmo que realice
una tarea consistirá en encontrar la serie de operaciones y manipulaciones numéricas
que realiza esa tarea.
Por último, y entrando ya en la parte práctica, para que un ordenador
realice las tareas que nos interesan debemos saber cómo traducir un algoritmo al
lenguaje de la máquina. Para ello necesitaremos ayudarnos de un lenguaje de
programación o herramienta similar. En el caso de esta asignatura y por razones
didácticas utilizaremos el Matlab.

Das könnte Ihnen auch gefallen