Вы находитесь на странице: 1из 62

Fundamentos de informática

1º de Grado en Ingenierías

Julio Garralón Ruiz

Departamento de Lenguajes y Ciencias de la Computación Escuela Politécnica Superior Universidad de Málaga

jgarralon@uma.es

3 de octubre de 2011

Esta obra está bajo una licencia Reconocimiento-NoComercial-CompartirIgual 3.0 Un- ported de Creative Commons: No se

Esta obra está bajo una licencia Reconocimiento-NoComercial-CompartirIgual 3.0 Un- ported de Creative Commons: No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una li- cencia igual a la que regula la obra original. Para ver una copia de esta licencia, visi-

a

te

Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. ía. inclu- ye

http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es_ES

o

envie una carta

Usted es libre de:o envie una carta • Copiar, distribuir y comunicar públicamente la obra.

Copiar, distribuir y comunicar públicamente la obra.

Hacer obras derivadas.

Bajo las siguientes condiciones:comunicar públicamente la obra. • Hacer obras derivadas. • Reconocimiento (Attribution) – Debe reconocer los

Reconocimiento (Attribution) – Debe reconocer los créditos de la obra de la manera especificada por el autor o el licenciador (pero no de una manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra).

No comercial (Non commercial) – No puede utilizar esta obra para fines comerciales.

Compartir bajo la misma licencia (Share alike) – Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta.

Entendiendo que:la obra generada bajo una licencia idéntica a ésta. • Renuncia – Alguna de estas condiciones

Renuncia – Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor

Dominio Público – Cuando la obra o alguno de sus elementos se halle en el dominio público según la ley vigente aplicable, esta situación no quedará afectada por la licencia.

Otros derechos – Los derechos siguientes no quedan afectados por la licencia de ninguna manera:

Los derechos derivados de usos legítimos u otras limitaciones reconocidas por ley no se ven afectados por lo anterior.

Los derechos morales del autor

Derechos que pueden ostentar otras personas sobre la propia obra o su uso, como por ejemplo derechos de imagen o de privacidad.

Aviso – Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra.

Índice general

1. El ordenador y la información

 

5

1.1. El ordenador como sistema de información

 

5

1.2. Sistemas de numeración posicionales

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

1.2.1. Concepto de sistema de numeración posicional

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

1.2.2. Sistemas de numeración habituales en informática

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

1.2.3. Conversiones entre distintas bases

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

1.2.4. Operaciones lógicas

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9

1.3. Codificación

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

10

1.3.1. Codificaciones de texto

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

1.3.2. Codificaciones numéricas

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

1.4. La componente física .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

1.4.1. La arquitectura von Neumann

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

1.4.2. La unidad central de procesamiento

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

16

1.4.3. Los Buses

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

1.4.4. La memoria

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

1.4.5. El subsistema de entrada/salida

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

1.4.6. El ciclo máquina

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

1.4.7. Clasificación de ordenadores .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

20

1.5. La componente lógica

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

21

1.5.1. El sistema operativo

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

22

1.5.2. Lenguajes de programación y traductores

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

23

1.5.3. Las bases de datos

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

24

2. Algoritmos

29

2.1. Concepto de algoritmo

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

2.2. Notaciones algorítmicas

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

2.2.1. Notaciones gráficas

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

2.2.2. Notaciones textuales

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

2.2.3. Notaciones ejecutables en máquina

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

34

2.3. Lenguajes de programación

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

34

2.3.1. Lenguajes vs. traductores

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

34

2.3.2. Categorías de los lenguajes de programación

 

35

2.3.3. Algunos hitos históricos de los lenguajes de programación

 

36

2.4. El ciclo de vida software

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

37

2.4.1. Fase de definición

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

38

2.4.2. Fase de desarollo

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

39

2.4.3. Fase de mantenimiento .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

39

3. Introducción a C/C++

 

41

3.1. El preprocesador de C/C++

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

41

3.2. Palabras reservadas

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

41

3.3. Literales .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

3.4. Identificadores

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

43

 

3

4

Índice general

3.5. Expresiones

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

43

3.6. Tipos predefinidos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

44

3.7. Definición de datos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

45

3.8. La asignación

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

45

3.9. Bloque

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

46

3.10. Sentencias de selección .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

47

3.11. Sentencias de repetición

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

48

3.12. Subprogramas

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

49

3.12.1. Procedimientos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

49

3.12.2. Funciones

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

49

3.12.3. Parámetros

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

50

3.13. Tipos definidos por el programador

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

50

3.13.1. Registros

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

51

3.13.2. Arrays .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

52

3.13.3. Anidamientos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

57

A. Bibliotecas estándares de C/C++

A.1. Bibliotecas de C++

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

59

59

A.1.1.

. Entrada/salida: <iostream>

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

59

A.1.2.

Manejo de ficheros: <fstream>

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

59

A.1.3.

Manejo de cadenas de caracteres: <string>

. E/S básica: <cstdio>

A.2. Bibliotecas de C

A.2.1.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

60

61

61

A.2.2.

. Manejo de caracteres: <cctype>

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

61

A.2.3.

Manejo de cadenas de caracteres: <cstring>

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

61

A.2.4.

Utilería estándar: <cstdlib>

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

62

A.2.5.

Matemática: <cmath>

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

62

Capítulo 1

El ordenador y la información

1.1. El ordenador como sistema de información

Según la Real Academia Española de la Lengua, los conceptos de informática y ordenador se definen como:

Informática. Conjunto de conocimientos científicos y técnicos que posibilitan el tratamiento au- tomático de la información.

Ordenador. Máquina capaz de tratar información de forma automática bajo el control de un programa.

De hecho, el término informática deriva de la contracción de la parte inicial de la palabra inform-ación y la parte final de la palabra autom-ática. Desde el punto de vista de un ingeniero, un ordenador puede verse como un sistema abierto de información automático. Es decir, es un conjunto de elementos interrelacionados (por eso es un sistema) que interactúa con el exterior a través de una entrada y una salida (por eso es abierto) cuyo elemento principal es la información, y dentro del cual no interviene el ser humano (por eso es automático). La entrada a este sistema va a ser información en crudo, sin procesar, y la salida información elaborada, ya procesada. Por otro lado, la información dentro de la máquina necesita almacenarse de alguna manera en una memoria para poder operar con ella. Los primeros ordenadores, que surgieron en la primera mitad del siglo XX, eran de natura- leza continua o analógicos, ya que almacenaban y procesaban la información mediante circuitos electrónicos analógicos. Estos circuitos tenían sus limitaciones y no eran muy precisos. Durante la segunda mitad del siglo XX empezaron a desarrollarse los ordenadores digitales, los cuales almacenaban y procesaban la información mediante circuitos electrónicos discretos. Pronto se constató que eran más versátiles y podían alcanzar mayor precisión. No obstante, para que un ordenador digital sea capaz de tratar la información de forma automática es fundamental representarla internamente de forma discreta. Para ello se necesita un proceso de codificación que convierta la información con la que habitualmente trabaja el ser humano en información discreta que pueda ser procesada por la máquina. En los ordenadores actuales, este proceso de codificación se basa en el sistema binario, que es el sistema de numeración que vamos a estudiar.

1.2. Sistemas de numeración posicionales

1.2.1. Concepto de sistema de numeración posicional

Sean las siguienes definiciones:

Sistema de numeración. Sistema de símbolos o cifras que representan cantidades y permite rea- lizar fácilmente operaciones aritméticas con ellas.

5

6

Sistemas de numeración posicionales

Número. Concatenación de cifras o dígitos que representan de forma única una cantidad.

Sistema de numeración posicional. Sistema de numeración en el que el valor representado por un número depende de

a) el conjunto de cifras utilizado, y

b) las posiciones de las cifras dentro del número.

Hay sistemas de numeración posicionales como el arábico, en el que las diez cifras que utiliza, que son los dígitos del 0 al 9, cambian de valor según la posición donde se encuentren dentro de un número; y sistemas de numeración no posicionales como el romano, donde sus cifras I, V, X, L, C, D y M no cambian de valor, independientemente de la posición que ocupen dentro del número. Cada sistema de numeración posicional se caracteriza por un vector de pesos,

.

.

.

p 3

p 2

p 1

p 0

p 1

p 2

p 3

el cual asocia un factor multiplicativo a cada cifra según su posición, siendo la posición 0 la de

las unidades, las posiciones positivas las de las cifras enteras, y las posiciones negativas las de las cifras fraccionarias, que están a la derecha del punto decimal. Así, si representamos un número

donde cada d i es una cifra o dígito del

número, el valor total del número es la suma:

como la cadena de símbolos

d

3

d 2 d 1 d 0 .d 1 d 2 d 3

,

p 3 d 3 + p 2 d 2