Post on 15-Sep-2018
Libro de transparencias
Fundamentos de
Informática 1º Ingeniería Industrial
Autores: M. López Martínez José Ángel Acosta Rodríguez Ismael Alcalá Torrego © 2006
�� � � � �� 1/10�� � � � �� 1/10
Introducción a la Informática
Fundamentos de Informática - [Tema 1]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/10�� � � � �� 2/10
Índice1.1.Informática y Computadoras 3
1.1.1.Programas e Instrucciones . . . . . . . . . . . . . . . . . . . . 4
1.1.2.Lógica Cableada y Programada . . . . . . . . . . . . . . . . . . 5
1.1.3.Computadoras Analógicas y Digitales . . . . . . . . . . . . . . 6
1.1.3.Computadoras Analógicas y Digitales (cont) . . . . . . . . . . . 7
1.2.Representación de la Información 81.2.1.Soportes de la Información . . . . . . . . . . . . . . . . . . . . 8
1.3.Estructura de Von Neumann 9
1.4.Manejo de la Computadora Digital 101.4.1.Sistema Operativo . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.2.Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
�� � � � �� 3/10�� � � � �� 3/10
1.1. Informática y ComputadorasInformática:Trata de la adquisición, representación, tratamiento y transmisión
de la información.
Informática = Información + Automática
• Información: números, texto, sonido, imágenes, ...
• Automática: procedimiento realizado con poca intervención humana.
Computadoras-Ordenadores:Máquinas que permiten realizar automáticamente todas estas operaciones.
La información ha de ser suministrada de forma adecuada.
�� � � � �� 4/10�� � � � �� 4/10
1.1.1. Programas e Instrucciones
Programa: Conjunto ordenado de instrucciones que se suministran a la
computadora de forma que se obtengan unos resultados a partir de unos
datos.
Instrucción: Conjunto de símbolos que representan una orden de op-
eración o de tratamiento de datos.
Acciones con una computadora
•Programarla (Para usarla muchas veces)
•Hacer uso del programa
�� � � � �� 5/10�� � � � �� 5/10
1.1.2. Lógica Cableada y Programada
Lógica Cableada:
• Los algoritmos están predefinidos y no se pueden cambiar.
• Incorporados a la circuitería.
Lógica Programada:
• Se permite el cambio de operaciones elementales.
• Redefinición de algoritmos.
�� � � � �� 6/10�� � � � �� 6/10
1.1.3. Computadoras Analógicas y Digitales
Magnitudes•Digital: Toman valores discretos y varían a saltos.
•Analógica: Toman valores que pueden variar de forma
continua en un intervalo
ComputadoraDigital
•Trabajan con 2 valores de tensión· nivel alto (1)
· nivel bajo (0)
•Representan la información usando células que sólo ad-
miten dos estados· 1· 0
•bit(binary digit): Unidad de información que sólo
puede tomar dos valores (1,0)
•Asociación de células permite representación de infor-
mación más compleja.
•Facilidad de programación.
�� � � � �� 7/10�� � � � �� 7/10
1.1.3. Computadoras Analógicas y Digitales (cont)
ComputadoraAnalógica
•Trabajan con valores de tensión que varían de forma
continua dentro de un rango.
• ∃ relación entre tensión y valores de las variables.
•Rango de valores limitado
•Programación tediosa.
�� � � � �� 8/10�� � � � �� 8/10
1.2. Representación de la InformaciónInformación: texto, gráficos, música.
Código derepresentación
•Números enteros⇒ Complemento a 2
•Texto⇒ ASCII
•Gráficos⇒ Bitmap, vectorial, metafile
1.2.1. Soportes de la Información
Es el medio que permite· almacenamiento
· transmisiónde la información.
Soportes
•Niveles de tensión⇒ dispositivos s/c
•Campo Magnético⇒ Disco duro, disquete
•Óptica⇒ CD, DVD
•Frecuencia⇒ Transmisión de información en canales.
�� � � � �� 9/10�� � � � �� 9/10
1.3. Estructura de Von NeumannEstructura funcional de la computadora digital.
•Memoria Principal: Conjunto de células asociadas para almacenar información.
•Unidad Aritmético Lógica: Conjunto de circuitos capaz de realizar operaciones Aritméti-
cas y Lógicas
•Unidad de Control: Envía señales de control a la UAL, la memoria y los periféricos, para
realizar operaciones con datos (memoria) según instrucciones de programa (memoria).
UnidadAritmético
Lógica
Tema 5 del Libro
Unidadde Control
Tema 6 del Libro
MemoriaPrincipal
Tema 4 del Libro
Unid
ad
de
En
tr ad
a/S
al id
aPeriférico 1
señales de control
información
�� � � � �� 10/10�� � � � �� 10/10
1.4. Manejo de la Computadora DigitalEjecutar un programa: Hacer uso de un programa.
Los programas se pueden almacenar en la memoria principal o en periféricos.
Para ejecutar un programa hay que cargarlo previamente en memoria.
El sistema Operativo se encarga de cargar los programas.
1.4.1. Sistema Operativo
Programa básico que se introduce en memoria automáticamente al poner en
marcha el ordenador.
Funciones•Gestiona y pone a disposición del usuario los recursos
de la máquina
•Permite al usuario ejecutar otros programas.
1.4.2. Aplicaciones
Programa que resuelve un problema
concreto.
�� � � � �� 1/9�� � � � �� 1/9
Álgebra de Boole y circuitos
con puertas lógicas
Fundamentos de Informática - [Tema 2]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/9�� � � � �� 2/9
Índice2.1.Álgebra de Boole 3
2.1.1.Elementos básicos . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.3.Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.4.Funciones Booleanas . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.5.Obtención de las funciones boolenas a partir de tablas de verdad 7
2.2.Puertas lógicas 8
2.3.Ejemplos de circuitos lógicos 92.3.1.Paridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.2.Comparador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.3.Mayoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
�� � � � �� 3/9�� � � � �� 3/9
2.1. Álgebra de BooleAntecedentes históricos:
Teoría matemática presentada en 1854 por George Boole: ”Investigaciónsobre las leyes del pensamiento”
→ Las variables toman dos valoresFalso→ 0
Verdadero→ 1
Aplicación en � áreas. . . . Shannon lo aplica a circuitos eléctricos con in-terruptores.
Variables lógicas
(2 valores)
1 bit
⇒Ej: 0 1
interruptor abierto cerrado
lámpara apagada encendida
Las computadoras digitales utilizan codificación binaria
⇒ * Estudio con el álgebra de Boole
* Construcción con técnicas de Shannon
�� � � � �� 4/9�� � � � �� 4/9
2.1.1. Elementos básicos
Los elementos básicos son las variables lógicas y las operaciones lógicas (que
son las encargadas de relacionar las variables entre sí).
Operaciones
lógicas (2.1.2)
*Suma lógica
Operación lógica ”O” (OR)
0 10 0 11 1 1
0 10 0 11 1 1
ab a
b f =a+bf =a+b
*Producto lógico
Operación lógica ”Y” (AND)
0 10 0 01 0 1
0 10 0 01 0 1
ab
a bf =a·bf =a·b
*Negación o complementación
Operación lógica ”NO” (NOT)
a a0 11 0
a a0 11 0
a f =af =a
�� � � � �� 5/9�� � � � �� 5/9
2.1.3. Propiedades
Propiedades de las
operaciones lógicas
*∃ de elemento neutroa+0=a
a*1=a
* Asociatividad(a+b)+c=a+(b+c)
a*(b*c)=(a*b)*c
* Conmutatividada+b=b+a
a*b=b*a
* Distributividad(a+b)*c=a*c+b*c
(a+b)*(a+c)=a+b*c
* Leyes de Morgan(a ∗ b) = a + b(a + b) = a ∗ b
�� � � � �� 6/9�� � � � �� 6/9
2.1.4. Funciones Booleanas
Composición de operaciones con Variables Booleanas expresadas de 4 formas
distintas: Por ejemplo f = c ∗ (a + b)
* Expresión analítica⇒ f = c ∗ (a + b)
*Expresión explícita o
Tabla de Verdad
a b c f0 0 0 00 0 1 00 1 0 00 1 1 11 0 0 01 0 1 11 1 0 01 1 1 1
a b c f0 0 0 00 0 1 00 1 0 00 1 1 11 0 0 01 0 1 11 1 0 01 1 1 1
Entradas Salidas
23
* Circuito de interruptores
a
bc
* Puertas lógicas⇒ (corresponde al apartado 2.2 que se va a ver)
Lo más complicado es pasar de la forma explícita a la analítica.
�� � � � �� 7/9�� � � � �� 7/9
2.1.5. Obtención de las funciones boolenas a partir de tablas de ver-dad
1. Identificar las entradas y las salidas del problema.
2. Para cada salida:
a) Señalar las filas cuyo valor es 1
b) Para cada fila, escribir el producto de cada entrada que valga 1 y de
cada entrada negada que valga 0.
c) La función que gobierna la salida es la suma de los productos.
3. Escribir la tabla de verdad de todas las salidas que acabamos de obtener
para comprobar que está bien.
Por Ejemplo . . .
�� � � � �� 8/9�� � � � �� 8/9
2.2. Puertas lógicas
Desventajas de los interruptores
* Velocidad ↓↓↓* Potencia disipada ↑* Dificultad miniaturización ↑↑↑
⇒ Uso de transistores y diodos ≡ Puertas lógicas
Tipos de
puertas lógicas
* Suma lógica ”O” (OR)a
b
c
f = a+b+c
* Producto lógico ”Y” (AND)a
b
c
f = a*b*c
*Suma exclusiva ”O exclusi-
vo” (XOR)
a
b
c
f = a+b+c
a b a+b0 0 00 1 11 0 11 1 0
a b a+b0 0 00 1 11 0 11 1 0
*Negación o complementación
”NO” (NOT)a a
a a
a a
Entrada
Salida
�� � � � �� 9/9�� � � � �� 9/9
2.3. Ejemplos de circuitos lógicosLos circuitos construidos con puertas lógicas constituyen la lógica cableada
⇒ Son la base de las computadoras
- Memorias
- Unidades aritmético lógicas
- etc . . .
2.3.1. Paridad
Activa la salida en caso de que los dos bits sean iguales.
2.3.2. Comparador
Circuito que compara dos bits (a y b) activando una señal según a sea mayor,
igual o menor que b.
2.3.3. Mayoría
La salida toma el valor de la mayoría de las tres entradas.
�� � � � �� 1/10�� � � � �� 1/10
Codificación Binaria de la
Información
Fundamentos de Informática - [Tema 3]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/10�� � � � �� 2/10
Índice3.1.Sistemas de numeración 3
3.1.1.Conversiones . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2.Codificación de Números Enteros 7
3.3.Números fraccionarios 8
3.4.Codificación de caracteres 9
3.5.Formatos Gráficos 10
�� � � � �� 3/10�� � � � �� 3/10
3.1. Sistemas de numeraciónNosotros utilizamos el sistema decimal que utiliza 10 dígitos (0,1,2,. . . ,9)
Octal ⇒ 8 dígitos (0,1,2,. . . ,7)
Hexadecimal ⇒ 16 dígitos (0,1,2,. . . ,9,A,B,C,D,E,F)
BINARIO ⇒ 2 dígitos (0 y 1)
Un número en una base cualquiera estará dado por una sucesión de dígitos:
N |base = gpgp−1 . . . g2g1g0.g−1g−2 . . . g−m|base
⇒ Para pasar un número de cualquier base a decimal se utiliza el Teoremafundamental de la numeración:
N |10 =∑p
i=−m gi(base)i
�� � � � �� 4/10�� � � � �� 4/10
Por ejemplo:
Dec Hex Oct Bin
0 0 000 00000000
1 1 001 00000001
2 2 002 00000010
3 3 003 00000011
4 4 004 00000100
5 5 005 00000101
6 6 006 00000110
7 7 007 00000111
8 8 010 00001000
9 9 011 00001001
10 A 012 00001010
11 B 013 00001011
12 C 014 00001100
13 D 015 00001101
14 E 016 00001110
15 F 017 00001111
16 10 020 00010000
17 11 021 00010001
�� � � � �� 5/10�� � � � �� 5/10
3.1.1. Conversiones
¿En qué consiste?⇒ Pasar un número de una base a otra. Por ejemplo
15|10 = 1111|2 = 17|8 = F|16
La conversión que nos va a interesar es la de Decimal a Base 2 y viceversa.
* Binario⇒ Decimal⇒ Teorema fundamental de la numeración
* Decimal⇒ Base 2 (N |2)⇒ Potencias de 2 conocidas
Si queremos pasar de otra base que no sea Decimal a Base 2 ⇒ primero lo
pasamos a Decimal y después a Base 2.
�� � � � �� 6/10�� � � � �� 6/10
Conversión de decimal a base 2 por Potencias de 2 conocidas
Número binario de n bits
20
21
22
2n-1
gn-1 g2 g1 g0 2=N
1. Empezar por el bit i = n − 1:
2. Para el bit i,
Si el número decimal es mayor o igual que 2i⇒ poner gi a 1. El nuevo
número decimal a codificar es el número decimal anterior menos 2i
Si el número decimal es menor que 2i⇒ poner gi a 0.
3. Decrementar i
4. Si i no es negativo volver a la línea 2.
�� � � � �� 7/10�� � � � �� 7/10
3.2. Codificación de Números EnterosSi el número entero sólo puede ser positivo: ⇒ Base 2 directamente.
Si también se consideran números negativos ⇒ Complemento a 2
n-1
bit deSigno
Si N>=0, 0Si , 1N<0
Si N>=0, N
Si , (||N|| )+1N<0
2
2
Complemento a 2:
Número binario de n bits
¿Cómo se representa el cero? Sólo como 000. . . 0
¿Qué representa el 100. . . 0? el 100. . . 0 corresponde a −2n−1
¿Cuál es el rango de números enteros que caben en n bits? [−2n−1, 2n−1 − 1]
�� � � � �� 8/10�� � � � �� 8/10
3.3. Números fraccionariosEjemplo 101,11|2 = 1 ∗ 22 + 1 ∗ 20 + 1 ∗ 2−1 + 1 ∗ 2−2 = 5,75|10
* Punto Fijo: se supone que hay un punto en una posición fijada.bit deSigno
parte entera
0 0 0
parte fraccionaria
Aquí se suponeque está el punto
1 1 1 1 0
* Punto Flotante: Se construye expresando el número N en dos partes: mantisa
y exponente.
N|2 = M|22E|2
Existen∞ descomposiciones . . . Ejemplo: 5,75 = 0,575∗101 = 0,0575∗102
Pero se toma por convenio justo el valor del exponente a partir del cual
0,5 ≤ M < 1bit deSignoMantisa
Mantisaen base 2
0 1 0
Exponenteen base 2
0 1 0 0 1
bit deSignoExponente
�� � � � �� 9/10�� � � � �� 9/10
3.4. Codificación de caracteres
Se utiliza para codificar
texto del tipo:
* Letras mayúsculas y minúsculas del alfabeto
* Dígitos. ”1”,”2”,. . .
* Signos. ¿ ? [ ] ( ) . . .
* Códigos sin representación gráfica que realizan fun-
ciones de control. retorno de carro, . . . .
Código ASCII extendido American Standard Code for Information Inter-
change. A cada signo le corresponde un número de 8 bits ⇒ 256 signos.
Por ejemplo (A-Z) del alfabeto inglés (sin ñ)⇒ 65 al 90, y (a-z)⇒ 97 al 123.
UNICODE 65000 caracteres. Permite gran cantidad de caracteres en diversos
idiomas.
�� � � � �� 10/10�� � � � �� 10/10
3.5. Formatos Gráficos•Matriz de Puntos (BitMap):
• Imagen Binaria 1 bit
1 pixel toma valores 0 ó 1)⇒
• Imagen Escala de grises 8 bits
1 pixel toma valores (0, 28 − 1)⇒
• Imagen Color 24 bits
(3 mapas de 8 bits)
1 pixel toma para cada mapa valores (0, 28 − 1)⇒
• Gráficos Vectoriales:
Imagen Vectorial PostScript⇒
�� � � � �� 1/10�� � � � �� 1/10
La Unidad de Memoria
Fundamentos de Informática - [Tema 4]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/10�� � � � �� 2/10
Índice4.1.Conceptos y definiciones 3
4.2.Clases de Memoria 6
4.3.Organización matricial de la memoria 84.3.1.Direcciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.4.La unidad de memoria central 10
�� � � � �� 3/10�� � � � �� 3/10
4.1. Conceptos y definiciones
Memoria ≡ Dispositivo de almacenamiento
de información binaria
•Datos
•Programa en código máquina
Características
•Tiempo de acceso: El que transcurre entre el instante en que se
ordena la lectura/escritura de información y se realiza la tarea.
•Modo de acceso:- Secuencial Para llegar a un dato hay que ir
buscando desde el principio
- Directo o Aleatorio Directamente al dato
•Volatilidad: Si se pierde la info al quitar la energía.
•Capacidad: Cantidad de información que puede almacenar.
�� � � � �� 4/10�� � � � �� 4/10
Soporte Capacidadde la informacion en bits en Bytes o caracteres Abreviatura
celda elemental 1 - b
octeto 8 1 B
registro 8,16,32,64 1,2,4,8 palabra≡W
memoria de 1 KiloByte 8 ∗ 210 210 1KB
memoria de 1 MegaByte 8 ∗ 220 220 1MB
memoria de 1 GigaByte 8 ∗ 230 230 1GB
memoria de 1 TeraByte 8 ∗ 240 240 1TB
�� � � � �� 5/10�� � � � �� 5/10
UnidadAritmético
Lógica
Unidadde Control
MemoriaPrincipal
Uni d
ad
de
En
tr ad
a/S
al id
a
Periférico 1
MemoriaAuxiliar
Disco DuroCD-ROMDisco Flexible, etc
Órdenes de la UC a la
memoria
•Direccionamiento: Seleccionar la info que está en
una determinada posición de la memoria.
•Leer: Obtener una copia de la info seleccionada
•Escribir: Introducir info en la posición selecciona-
da (machaca los datos antiguos en esa posición).
�� � � � �� 6/10�� � � � �� 6/10
4.2. Clases de Memoria
Clasificación según
estructura de
Von Neumann
•MemoriaPrincipal
Contiene el programa
en el momento de la
ejecución
•Tacceso ↓↓•Acceso Aleatorio
•Volátil
•MemoriaAuxiliar
Memorias que se
conectan como
periféricos
•Tacceso ↑•No Volátil
•Capacidad ↑↑↑
�� � � � �� 7/10�� � � � �� 7/10
Clasificación según
características
•RAMMemorias de acceso aleato-
rio. Utilizadas como memo-
ria principal
•Tacceso ↓↓•Acceso aleatorio
•Volátil
•Admite l/e
•ROM Memorias sólo para
lectura
•Sólo admite lectura•No Volátil
•Necesita programador
•EPROMMemorias repro-
gramables sólo para
lectura
•Sólo admite lectura•No Volátil
•Necesita progra-
mador
•Se borra con UV
•Utilizada en las
BIOS
�� � � � �� 8/10�� � � � �� 8/10
4.3. Organización matricial de la memoriaUn registro por fila.
(N≡ no de registros o filas)
⇒ las columnas son las células
elementales del registro.
Hilos deSelección
N registros( 2 )Un número del tipo
m
n células
Hilos delectura/escritura
�� � � � �� 9/10�� � � � �� 9/10
4.3.1. Direcciones
Cada registro tiene asignado un número llamado dirección que van desde 0
hasta N − 1.
⇒ para referirnos a un registro hay que escribir la dirección del registro enbase 2 y se activa el registro correspondiente.
A esta operación se le llama direccionamiento y ya sólo faltaría leer o escribir.
N = 2m
n células0
1
N-1
mbits
Registro de selección de
direcciones = S
Decodificador de direcciones
�� � � � �� 10/10�� � � � �� 10/10
4.4. La unidad de memoria central
Formadapor:
•Matriz de celdas elementales
o fila de registros.
•Decodificador de direcciones.
•Pequeña lógica de control.
S
.
.
.
.
LECM
ESCM
T
Bus de
Direcciones
(tamaño m)
Bus de
Datos
(tamaño n)
Lectura:1) Direccionamiento⇒ dirección en el registro S2) Ordenar la lectura activando LECM= 1
3) Copiar la información en el registro T
Escritura:1) Direccionamiento⇒ dirección en el registro S2) Disponer de información en el registro T3) Ordenar la escritura activando ESCM= 1
�� � � � �� 1/9�� � � � �� 1/9
La unidad aritmético lógica
Fundamentos de Informática - [Tema 5]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/9�� � � � �� 2/9
Índice5.1.Biestables y Registros 3
5.1.1.Registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5.2.Circuitos operadores con enteros 45.2.1.Semisumador . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.2.2.Sumador completo (o con acarreo) . . . . . . . . . . . . . . . . 6
5.5.La unidad artimético lógica 7
�� � � � �� 3/9�� � � � �� 3/9
5.1. Biestables y Registros
Célula de memoria
o
Celda de memoria
⇒biestable ≡ Dispositivo electrónico con
dos estados estables (y = 0 y y = 1).
Tiene memoria
S
yR
Biestable
Funcionamiento
•Nunca puede activarse a la vez R y S•Si S=1⇒ el estado y vale 1
•Si R=1⇒ el estado y vale 0
•Si S=0 y R=0⇒ el estado y ”recuerda”
su valor
5.1.1. Registro
Conjunto de células de memoria que almacenan información binaria.
S
Qn
R
S
R
S
R
Q1 Q0
Señal de Sincronismo
�� � � � �� 4/9�� � � � �� 4/9
5.2. Circuitos operadores con enteros
Objetivo⇒ Construir circuitos lógicos para hacer operaciones
Aritméticas con números enteros en binario.
Vamos a ver dos ejemplos:
5.2.1) Semisumador: Suma aritmética de dos números de 1 bit cada uno.
5.2.2) Sumador Completo o con acarreo: Suma aritmética de dos números de
1 bit cada uno y un acarreo
Acarreo ≡ ”Lo que me llevo” de una operación anterior.
�� � � � �� 5/9�� � � � �� 5/9
5.2.1. Semisumador
Suma aritmética de dos números de 1 bit cada uno. b
sa
cSS
Semisumador
a b c s
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
b
s=a+b
a
c=a×b
SS
s=a+b
c=a×b
c ≡ Acarreo⇒ ”Lo que me llevo” de la operación anterior.
�� � � � �� 6/9�� � � � �� 6/9
5.2.2. Sumador completo (o con acarreo)
Suma aritmética de dos números de 1 bit cada uno y el
acarreo anterior. b
sa
c2
SCc1
Sumador completo
a b c1 c2 s
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
⇒⎧⎪⎪⎨⎪⎪⎩
s = a ⊕ b ⊕ cc = c1(a ⊕ b) + a · b
SSb
s
ac2
c1
SS
SC
�� � � � �� 7/9�� � � � �� 7/9
5.5. La unidad artimético lógica (UAL o ALU)Unidad que realiza las operaciones aritméticas y lógicas requeridas por la UC
(sumar, multiplicar, restar, . . . )
Está construida con semisumadores, sumadores completos, etc.
La UC activa una señal de control para indicarle la operación a realizar.
Necesita dos operandos que almacena en dos registros de n bits.
1. Acumulador: Primer operando, y almacena el resultado2. Operando: Almacena el segundo operando.
Dispone de un registro de estado que indica:
• Si el resultado ha sido positivo, negativo o cero.
• Si hubo desbordamiento en la operación anterior.
�� � � � �� 8/9�� � � � �� 8/9
SUMA
MULT
Estado
A = Acumulador
Primer operando
Señales de controlde la UC
Registro delprimer operando
Operaciones que realiza la ALU:
Cargar un dato de la memoria al A
Almacenar en memoria el A
Operaciones Artiméticas.
Operaciones Lógicas.
Incrementos/Decrementos, desplazamientos, rotaciones, . . .
�� � � � �� 9/9�� � � � �� 9/9
Ejemplo: Suma de 2 + 3 + 1
Estado inicial de la ALU
? ? ? ? ? ? (?)
(2)
Carga el primer dato en A
0 0 0 0 1 1 (2)
(2)
CARGAR
Suma del número 3
0 0 0 1 0 1 (5)
(3)
SUMAR
Suma del número 1
0 0 0 1 1 0 (6)
(1)
SUMAR
�� � � � �� 1/13�� � � � �� 1/13
Modelo Simple de
Computadora Digital
Fundamentos de Informática - [Temas 6 y 7]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/13�� � � � �� 2/13
Índice7.1. Modelo Simple de Computadora Digital 3
7.2.Microórdenes 4
7.3.Descripción de Cesius 5⇒ 7.6 Modos de Direccionamiento . . . . . . . . . . . . . . . . . . . 7
7.4.El programa traductor 11
7.5.Transferencias entre Registros 13
�� � � � �� 3/13�� � � � �� 3/13
7.1. Modelo Simple de Computadora Digital
P
I
S
CO MD D
SUMA
MULT
.
.
EA
A
EOSA
EPSP
SD ES
S
M
.
.
.
.
LECM
ESCM
ETSTEI
T
EESE
Teclado Pantalla
E
ESCPLEET
�� � � � �� 4/13�� � � � �� 4/13
7.2. MicroórdenesMicroórdenes ≡ Órdenes dadas por la UC para ejecutar una instrucción
⇒
* Órdenes a la UAL (SUMA,RESTA,. . . ).
* Órdenes a la Memoria (LECM y ESCM).
* Órdenes a la unidad de entrada/salida (LEET y ESCP)
* Señales de gobierno a los enlaces (SP, ET, ST, EA,. . . ).
* Incremento del contador del programa INCP.
�� � � � �� 5/13�� � � � �� 5/13
7.3. Descripción de Cesius¿Qué es?⇒Máquina ficticia con estructura de Von Neumann.
Tiene un enlace o Bus de datos (M) de 16 bits, y un enlace o Bus de direcciones
(S) de 11 bits.
⇒ 211 direcciones de memoria⇒ [0, 2047]
Características
- Unidad Aritmético Lógica⇒ A=16 bits
- Unidad de Control⇒ I=16 bits y P=11 bits
- Unidad de memoria principal.
* S= 11 bits
* T= 16 bits
* Registros de MemoriaM(S)= 16 bits
- Unidad de Entrada/Salida⇒ E=16 bits
�� � � � �� 6/13�� � � � �� 6/13
Almacenamiento
en memoria
* Datos
- Nos enteros⇒ Complemento a 2- Nos flotantes⇒ NO SE MANEJAN- Caracteres⇒ Código ASCII
* Instrucciones en código máquina
4 bits 1 bit 11 bits
CO MD D
24instrucciones. (7.1.1) Juego de instrucciones
2 7.6posibilidades. ( ) Modos de direccionamiento
�� � � � �� 7/13�� � � � �� 7/13
7.6 Modos de DireccionamientoModos de localizar una posición en memoria.
Modo Directo (absoluto o normal). CO 0 D
D indica directamente la posición de memoria⇒ el dato está en M(D)
Modo Indirecto
D indica la posición de
memoria donde está guardada
la dirección del dato. ⇒ el
dato está en M(M(D))CO 1 16
8
9
15
16
3
8
NOTA: Toda lainformación de losregistros está en binario
NOTA: Existe otro modo de direccionamiento (Inmediato).
�� � � � �� 8/13�� � � � �� 8/13
7.1.1 Juego de Instrucciones de Cesius
Parar 0000 termina la ejecución del programa
Almacenar 0001 Guarda una copia de A en la memoria
Cargar 0010 Carga un dato de la memoria en AEscribir 0011 Escribe un dato de la memoria en la pantalla
Leer 0100 Leer un dato del teclado y guardarlo en la memoria
Sumar 0101 Suma a A un dato de la memoria
Restar 0110 Resta a A un dato de la memoria
Multiplicar 0111 Multiplica a A un dato de la memoria
Dividir 1000 Divide A entre un dato de la memoria
y se queda con la parte entera
Módulo 1001 Halla el resto de dividir A entre un dato de la memoria
Salto incondicional 1010 Introduce en P un dato de la memoria
Salto si A negativo 1011 Idem si A es negativo
Salto si A nulo 1100 Idem si A es cero
Salto si A positivo 1101 Idem si A es positivo
Escribir Caracter 1110 Escribe un dato de la memoria como caracter
ASCII en la pantalla
Leer Caracter 1111 Leer un caracter ASCII del teclado y guardarlo
en la memoria
�� � � � �� 9/13�� � � � �� 9/13
7.1.2 Ejemplo de programa en código máquina
Escribir la suma de dos números introducidos por el
usuario.
Número A ≡ Dirección 10⇒M(10)
Número B ≡ Dirección 11⇒M(11)
Número C ≡ Dirección 12⇒M(12)
inicio programa
final programa
Leer A y B
Escribir C
C A+B
MEMORIA
Dirección CO MD D
20 0100 0 00000001010
21 0100 0 00000001011
22 0010 0 00000001010
23 0101 0 00000001011
24 0001 0 00000001100
25 0011 0 00000001100
26 0000 0 00000000000
�� � � � �� 10/13�� � � � �� 10/13
Inconvenientes
* Hay que saberse de memoria los CO
* Hay que codificar los datos en binario
* Hay que reservar manualmente el espacio para Variables y
constantes.
⇒ Solución: Escribir el programa en un lenguaje legible utilizando una apli-
cación para traducirlo a código máquina.
⇒ el programa traductor
�� � � � �� 11/13�� � � � �� 11/13
7.4. El programa traductorPermite traducir el programa en lenguaje legible a código máquina.
Elementos
del
lenguaje
simbólico
*Sentencias
deInstrucción
- Operación=código mnemotécnico de tres letras
-Modo de
Direccionamiento
MD≡ 0⇒ NadaMD≡ 1⇒ I
- Operando⇒ Decimal
*Directivas o
Pseudoinstrucciones
- Organización del programa en memoria
- Reserva de memoria
- Indicar al traductor el final del programa
* Comentarios. Permiten aclarar el programa (el traductor los
ignora)⇒ Por Ejemplo: CAR 11 ’cargar el número B
Tipos de lenguajes
simbólicos en Cesius
* 7.3 Lenguaje simbólico de 1 paso (LS1)
* 7.4 Lenguaje simbólico de 2 pasos (LS2)
�� � � � �� 12/13�� � � � �� 12/13
Sentencias de Instrucción y las transferencias que representan
�� � � � �� 13/13�� � � � �� 13/13
7.5. Transferencias entre Registros
�� � � � �� 1/3�� � � � �� 1/3
Algoritmos
y
Diagramas de flujo
Fundamentos de Informática - [Temas 8]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/3�� � � � �� 2/3
Índice8.1. Algoritmos y pseudocódigo 3
8.2. Objetos y operaciones 3
8.3. Fases del proceso de resolución de problemas 3
8.4. Diagramas de flujo 3
8 Algoritmos y diagramas de flujo
8.1) Algoritmos y pseudocódigo
Información deun problema
Para procesar Algoritmo
Conjunto ordenado yfinito de operaciones
para resolver unproblema concreto
De cómoprocesar
Programa
programación
Lista deTareas
Expresiónen un
lenguajenatural
Expresióngráfica
Pseudocódigo
1. Hallar el cociente c de a/b2.Tomar la parte entera del conciente d=[c]3. Obtener el resto como a - bd4. Fin
1. Si x es positivo, el resultado es x2. Si no, el resultado es -x3. Fin
1. Iniciar suma parcial sp a cero2. Iniciar índice i a uno3. Hacer:
3.1 Dar a sp el valor sp + vi2
3.2 Incrementar i3.3 Si i < 10 ir al punto 3
4. El resultado es la raíz de sp5. Fin
E j e
m p
l o s
AlgoritmoSecuencial
Algoritmocon
bifurcación
Algoritmocon bucle
Diagrama deflujo
8.2) Objetos y operaciones
Objeto nombre valor tipoíndice i variable nº entero
letra Li variable carácter
sumando a variable nº entero
sumando b variable nº entero
media m variable nº realdos 2 constante nº entero
1. Iniciar índice i a 12. Tomar L
iletra i-ésima de la palabra
3. Reemplazar por Li+1, siguiente en el alfabeto
4.Si Lies la última letra de la palabra, entonces ir a a 6
5. Sumar uno a i e ir a 26. Fin
Objetos Elementos del lenguaje algorítmico que contienen datos
Tienen atributos
nombre
clase de valor
tipoEjemplos de objetos en dos algoritmos
1. Preguntar el valor de a2. Preguntar el valor de b
3. La media es m = (a+b)/2
4. Fin
En principio todas las que se pueden realizar conuna calculadora muy simple: suma, resta, ..
La operación "=" indica una asignación dela parte de la izquierda al objeto de la
derecha
Operaciones
Análisis del problema: Conocer los datos de entrada y los resultados quedeseamos obtener.
Intentar identificar las partes que se sospecha se pueden resolver. Espreciso asegurarse de que al resolver los trozos, se resuelve el problema.
Resolución de los subproblemas y prueba de validez de los mismos.
Construcción del algoritmo: Se puede expresar mediante gráficos (diagramasde flujo) o mediante lenguaje común (pseudocódigo).
1)
2)
3)
4)
8.3) Fases del proceso de resolución de problemas
8.4) Diagrama de flujo u organigrama
Es un tipo de descripción gráfica de un algoritmo que utiliza el siguiente conjuntode símbolos
Inicio de bloque Proceso Bifurcación Entrada o Salida
Fin de bloque Subprograma Módulo Actualización
8.6 Ejemplos de diagramas de flujo
Diagrama de Flujo
1.
2.
3.
4.
Leer primer sumando a
Leer segundo sumando b
Hallar la suma de lossumandos c=a+b
Escribir c
Pseudocódigo
Leer dos números del teclado yescribir la media aritmética
EJ 1.1) Media de dos valores
Leer un número del teclado yescribir su valor absoluto
EJ 1.2) Valor absoluto
Diagrama de flujo
R
8.6.1 Programa Lineal
8.6.2 Programa con bifurcación
Diagrama de Flujo
1.
2.
3.
4.
Dadas las componentes de un vector de R2, escribir el número del cuadrante en elque se haya
EJ 1.3) Cuadrante
8.6.2 Programa con bifurcación
�� � � � �� 1/10�� � � � �� 1/10
Introducción al Lenguaje C
Fundamentos de Informática - [Tema 10]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/10�� � � � �� 2/10
Índice10.1. Introducción 3
10.2. Visión General 4
10.3. Componentes del Lenguaje C 510.3.1. Palabras Reservadas . . . . . . . . . . . . . . . . . . . . . . 6
10.4. Ejemplos 710.4.1. Ejemplo main y printf . . . . . . . . . . . . . . . . . . . . . 8
10.4.1. Ejemplo main y printf(cont) . . . . . . . . . . . . . . . . . . 9
10.4.2. Ejemplo scanf . . . . . . . . . . . . . . . . . . . . . . . . . 10
�� � � � �� 3/10�� � � � �� 3/10
10.1. Introducción
CaracterísticasLenguaje C
⇓ANSI C
•Lenguaje de propósito general⇒ Lenguaje alto nivel
•Conciso, sencillo, operadores potentes
•Portable⇒ Otros ordenadores
•Modular⇒ funciones⇒ bibliotecas
•Flexible
• alto nivel ⇒ permite definir tipos de datos
complejos
• bajo nivel⇒ permite acceso a direcciones de
memoria
�� � � � �� 4/10�� � � � �� 4/10
10.2. Visión General
1.- Escritura
2.- Compilación
3.- Montaje
4.- Ejecución
COMPILADOR
fichero fuente con
código en C, (.c)
MONTADOR
DE ENLACES
fichero de código
objeto (.o)
Funciones de
biblioteca (.lib,.dll)
EDITOR DE TEXTO
fichero ejecutable,
(.exe)
�� � � � �� 5/10�� � � � �� 5/10
10.3. Componentes del Lenguaje CSentencias terminadas en ;
/* inicio comentarios y fin de comentarios */
Variables, constantes, operadores, expresiones, funciones.
Bloques (bifurcaciones, bucles y funciones) entre llaves {}.
NombresVariables
•Distinción Mayúsculas/minúsculas.
•No usar tildes ni la letra ñ.
• Declaración de variables al principio de la función
(Reserva de Memoria)
�� � � � �� 6/10�� � � � �� 6/10
10.3.1. Palabras Reservadas
auto default float register struct volatile
break do for return switch while
char double goto short typedef
case else int signed union
const enum if sizeof unsigned
continue extern long static void
�� � � � �� 7/10�� � � � �� 7/10
10.4. EjemplosFunción main: Imprescindible para realizar un fichero ejecutable (.exe).
Funciones de
Entrada/Salida
•Función printf: Escritura en pantalla
•Función scanf: Lectura de teclado
•Especificadores
de formato
%c: carácter
%d: número entero
%f: número real
�� � � � �� 8/10�� � � � �� 8/10
10.4.1. Ejemplo main y printf
#include <stdio.h>
void main(void)
{
int x; /* declaración variable x de tipo entero */
char y; /* declaración variable y de tipo carácter */
x = -50; /* asignación de valores a variables */
y=72;
printf(“ x es %d, y es %c \n”, x,y); /* salida por pantalla */
x=90;
y=77;
printf(“ ahora x = %d, e y= %c”, x,y);/* salida por pantalla */
}
Al declarar una variable se reserva espacio en memoria para ella.
El espacio en memoria para las variables declaradas se libera al finalizar la
función main
�� � � � �� 9/10�� � � � �� 9/10
10.4.1. Ejemplo main y printf(cont)
main()
{
int x; /* declaración variable x de tipo entero */
char y; /* declaración variable y de tipo carácter */
x = -50; /* asignación de valores a variables */
y=72;
printf(“x es %d, y es %c \n”, x,y); /* salida por pantalla */
x=90;
y=77;
printf(“ahora x = %d, e y= %c”, x,y);/* salida por pantalla */
}
00001000010111011
01001111010100010
: :
: :
00001000011111011
00001000010111011
01001111010100010
: :
: :
00001000011111011
00001000010111011
01001111010100010
01001111010100010
01001111010100010
: :
: :
00001000011111011
01 ... ... 10
01 ... ... 10
: :
01 ... ... 10
?
?
01 ... ... 10
01 ... ... 10
: :
01 ... ... 10
72
90x
y
01 ... ... 10
01 ... ... 10
: :
01 ... ... 10
?
-50x
y
01 ... ... 10
01 ... ... 10
: :
01 ... ... 10
?
?
x es -50, y es H
ahora x= 90, e y= M
fuen
te
ob
jeto
ejec
uta
ble
1
2
3
4
1 2
3 4
�� � � � �� 10/10�� � � � �� 10/10
10.4.2. Ejemplo scanf
#include <stdio.h>
void main(void)
{
int x; /* declaración variable x de tipo entero, primer sumando */
int y; /* declaración variable y de tipo entero, segundo sumando */
int z; /* declaración variable z de tipo entero, para el resultado */
scanf(“ %d ”, &x); /* Para leer del teclado un entero */
scanf(“ %d ”, &y); /* ídem */
z = x+y; /* suma */
printf(“ La suma vale %d”, z); /* salida por pantalla */
}
�� � � � �� 1/3�� � � � �� 1/3
Sentencias de control en C
Fundamentos de Informática - [Tema 12]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/3�� � � � �� 2/3
Índice12.1. Operaciones en secuencia 3
12.2. Operaciones condicionales 3
12.3. Procesos iterativos 3
12.4. Ejemplos 3
B
A
{ sentencia_1 ; sentencia_2 ; . . }
sentencia_1 ;
El lenguaje C dispone de sentencias de control adaptadasa los diagramas de flujo estructurados
Estructuras básicasde un diagrama de flujo
OPERACIONESEN SECUENCIA
OPERACIONESCONDICIONALES
OPERACIONESITERATIVAS
TEMA 12: SENTENCIAS DE CONTROL DE LOS PROGRAMAS
12.2. Operaciones en Secuencia
Consiste en realizar una operación trasotra sin bifurcaciones ni saltos.
I F
if (condición) /* No lleva ";" */{.........; /* Bloque de
sentencias A */}
Cond ?
A
SI
NO
1º) Se evalúa una condición.
2º) Dependiendo del resultado, el flujo de ejecución seguirá una de las dos bifurcaciones.
I F - ELSE
if (condición) /* No lleva ";" */{.........; /* Bloque de
sentencias A */}
else{.........; /* Bloque de
sentencias B */}
B
Cond ?
A
NO
SI
12.3. OPERACIONES CONDICIONALES
EJEMPLOS:Operaciones
Condicionales"ANIDADAS"
NO
NO
SI
B
Cond2 ?
A
SI
Cond1 ?
NO
NO
SI
Cond2 ?
A
SI
Cond1 ?
B
EJEMPLOOperaciones
Condicionalesen
"ESCALERA"
NO
NOSI Cond2 ?
SI
B
Cond3 ?
CA
Cond1 ?
SI
NO
12.3. OPERACIONES CONDICIONALES (CONT)
• Caso de decisión con bifurcación múltiple (Ej. Menús)• FUNCIONAMIENTO: Se compara una variable con una lista deconstantes enteras o carácter, y cuando sea igual a alguno de los elementosde la lista, se ejecuta una sentencia (o bloque) y todas las siguientes.
BREAKLa sentencia break indica que termina la ejecución del bloque switch. Si noapareciera se ejecutaríatodo lo que viene después, hasta la llave final del switch.
SWITCHSWITCH
switch (variable) {case const_1: sentencia_1;case const_2: sentencia_2;:case const_n: sentencia_n;default: sentencia; /* se ejecuta si no se encuentran igualdades */}
switch (variable) {case 1:case 2:case 3: sentencia1; break;case 4: sentencia2;}
PROCESOSITERATIVOS
Para realizar un conjuntode sentencias repetidas
veces.
¿Se conoce a priori el nº de iteraciones ?
SI
NO
SENTENCIA for
SENTENCIAS:- while- do..while
FOR
for( Valores iniciales; Condición; Actualización ){ Bloque de sentencias; }
SINTAXIS
VALORES INICIALES: Es la parte quese usa normalmente para dar un valorinicial a la variable decontrol del bucle. Admite cualquiersentencia, y sólo se ejecuta una vez.
CONDICIÓN : Expresión relacional quedetermina cuando se sale del bucle. Seejecuta el bucle siempre que la condiciónse cumpla.
ACTUALIZACIÓN: Define cómo cambiala variable de control cada vez.
ValoresIniciales
Actualización
Bloque desentencias
Condición
SI
NO
12.4. PROCESOS ITERATIVOS: FOR, WHILE, DO WHILE
WHILE
while ( condición ) { bloque de sentencias; }
SINTAXIS
La condición ha de ser cierta para pasar aejecutar el cuerpo del bucle.
...¿Y SI SE DESCONOCE EL NUMERO DE ITERACIONES?
LA REPETICIÓN TERMINA CUANDO SE CUMPLE CIERTA CONDICIÓN
DO ...WHILE
do { bloque de sentencias; }while ( condición );
SINTAXIS
Es un bucle con comprobación de lacondición a la salida, por tanto, el bloquede sentencias se ejecuta al menos una vez.
Bloque desentencias
Condición
SI
NO
Bloque desentencias
CondiciónSI
NO
12.4. PROCESOS ITERATIVOS (CONT)
{int numero, divisor;printf("Introduzca el número \n");scanf("%d", &numero);divisor = 2;while (numero%divisor != 0) divisor++;if (divisor == numero) printf("%d es primo\n", numero);
else printf("%d no es primo\n", numero);}
EJEMPLOS
WHILE
void main(void){int x, y, z, var;printf(“Deme datos x e y \n”);scanf(“ %d %d”, &x, &y);printf(“Elija opcion: \n 1-sumar x + y \n 2 –restar x – y \n ");printf("3–multiplicar x * y \n”);scanf("%d", &var);switch(var) {
case 1: z = x + y ;break;case 2: z = x – y ;break;case 3: z = x * y ;break;default: printf( "No eligió bien la opción\n" );
}}
{int x, y;for( x = 0, y = 5; x + y < 7; ++x){ z = x - y; printf(“%d \t”, z);}for( x = 0, y = 10; x < y ; x++, y--) printf("\n %d \t %d \n", x, y);}
FOR
SWITCH
void main(void)
void main(void)
#include <stdio.h>
#include <stdio.h>
#include <stdio.h>
�� � � � �� 1/6�� � � � �� 1/6
Funciones en C
Fundamentos de Informática - [Tema 13]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/6�� � � � �� 2/6
Índice13.1. Formato de una función: Prototipo, definición y llamada 3
13.2. Argumentos de las funciones:Paso de parámetros por valor y referencia 4
13.3. Recursividad 5
13.4. Ejemplos 6
Tema 13: Funciones en C
FUNCIÓN
Proporciona unaforma conveniente de
encapsular tareas
Definición
Desde el punto de vista del código quellama a una función:
1.- No hace falta saber cómo hace la tarea.2.- Sólo hay que saber qué hace
Utilización
sum(x,y)=4;
No se puede asignar unvalor a una función:
El valor devuelto por una funciónpuede ignorarse en el código dellamada
Indica: - El tipo de datos que devuelve. - Los parámetros que utiliza. - Declaraciones y sentencias para la tarea que realiza.
La llamada a la función se realizainvocando su nombre e incluyendo entreparéntesis los argumentos concretos deesa llamada.
El prototipo de la función sirve para indicar alcompilador el tipo de dato devuelto y el tipo delos parámetros.No es necesario escribir el nombre de losparámetros en el prototipo o declaración.
Se realiza donde se vayaa utilizar la función
Para comprobar la consistenciadel código del programa
Declaracióno
Prototipo
13.1 Formato de una función: Prototipo, definición y llamada
Recordatorio:Las variables que reciben lacopia del valor son: - Locales. - Vigencia hasta que termina
la función.
int potencia ( int base , int *exponente ){ int i, p; p=1; for ( i=1; i <= *exponente; i++ ) p=p*base ; return p; /* Devuelve el entero p */}
Ejemplo de definición de una función
cuando se encuentre un return:1.- se pasa el resultado al tipo de dato que devuelve lafunción.2.- se devuelve el resultadodonde se llamó a la función3.- se termina la ejecución dela función
Declaración de parámetros otambién llamados argumentos
Nombre dela funciónTipo de dato
devuelto(Si no devuelve nada
se declaracomo tipo void)
Existen dos formas de pasarcada argumento de una función
Si una función tiene quemodificar el contenido de
la memoria
Se pasa porreferencia
Se pasa la dirección.Luego se utilizan
punteros
Si la función sólo necesitauna copia del valor
Se utilizan variablesdel tipo correspondiente
Se pasa porvalor
13.2 Argumentos de las funciones: Paso de parámetros por valor y por referencia
Definición de una Función
#define
13.3 Recursividad
En C las funciones pueden llamarse a si mismas Una función es recursiva si ensu definición tiene llamadas
a la propia función
En cada llamada se crea un nuevoconjunto de variables locales
No ahorramemoriapueden
resultarmás claras
Normalmenteson más lentas
Recursividad comparadacon operaciones iterativas
int fact (int n){ int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo);}
Ejemplo 1
void main (void){ int n; printf ("Introduzca un número:"); printf (" se para con 0 \n"); scanf ("%d",&n); if (n!=0)
main ();}
Ejemplo 2
#include
Permite incluir un fichero en el programa.
Normalmente es un fichero de cabecera(header) con extensión .h =
Fichero con declaracionesde funciones
Si el fichero estáen el mismodirectorio del
programa fuente
#include "fichero"
Si el fichero estáen una ruta
predefinida en elcompilador
#include <fichero>
#define ITERMAX 10
void main (void) { int i; for (i=0; i < ITERMAX ; i++)
printf ("Ejemplo\n"); }
Ejemplo
#define NOMBRE_CTE valor
Se sustituye el NOMBRE_CTE por el valor
�� � � � �� 1/9�� � � � �� 1/9
Vectores, cadenas, matrices y
punteros
Fundamentos de Informática - [Tema 14]
1o Ingeniería Química
Manuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
1º INDUSTRIALES
�� � � � �� 2/9�� � � � �� 2/9
Índice14.1. Vectores 3
14.2. Cadenas de caracteres 4
14.3. Punteros 5
14.4. Reserva dinámica de memoria 6
14.5. Matrices 7
14.6. Paso de tablas como argumento a funciones 8
14.7. Ejemplos 9
14.1 VECTORES
Permiten almacenar tablas
Ejemplos de declaración con inicialización
14.0
15.0
16.0
Almacenamiento de vectores en memoria
char Letras[4]={'s','s','w','a'} ;
float vector[3]={14.0,15.0,16.0} ;
Declaración de vector
Numero de elementosdel vector
int nombre_vector[ 10 ] ;
vector[ 0 ] vector[ 1 ] vector[ 2 ] vector[0]
vector[1]
vector[2]
Nombre delvector
(Se puede utilizar como unaconstante con la dirección delprimer elemento del vector)
Tipo de datoalmacenadoen el vector
14.1 MATRICES ALMACENADAS EN VECTORES
Una matriz puede almacenarse en forma de vector
Ejemplos de declaración con inicialización
Matriz 2x2
float vector[4]={14.0,15.0,16.0,17.0} ;
Declaración de vector
Numero de elementosde la matriz
int nombre_vector[ 10 ] ;
vector[ 0 ] vector[ 1 ]
Nombre delvector
(Se puede utilizar como unaconstante con la dirección delprimer elemento del vector)
Tipo de datoalmacenadoen el vector
vector[ 2 ] vector[ 3 ]
fila i=0
fila i=1
Columna j=0 Columna j=1
int i=0; /* índice para el número de fila */int j=0; /* índice para el número de columna */int nc=2; /* Número de columnas */ float vector[4]={14.0,15.0,16.0,17.0} ;
printf("%f",vector[i*nc+j]); /* elemento ij de la matriz */
14.2 CADENA DE CARACTERES
Se almacenan en un vector de caracteres.
Ejemplos de declaración con inicialización
Almacenamiento en memoria igual que un vector
char cadena[5]={'c','a','s','a',0} ;
char cadena[5]="casa" ;
Declaración como vector de caracteres
Número de elementosde la cadena + el
carácter fin de cadena,cuyo código ASCII es el
0
char nombre_cadena[ 10 ] ;
Nombre de lacadena
(Se puede utilizar como unaconstante con la dirección delprimer elemento del vector)
Tipo de dato essiempre
char
14.3 PUNTEROS
Variables que van a almacenar direcciones de memoria
Ejemplo de declaración con inicialización
Asignación de dirección de memoria
char * pcar=NULL ;
Declaración del puntero
int * pnombre_puntero;
Nombre delpuntero
(Representa la dirección delelemento apuntado )
Tipo de datoapuntado
Identificadorde
Puntero
char car;char * pcar=NULL ;
pcar=&car;
Modificación del contenido de la variable apuntada
*pcar='a';
printf("%c", car);
Operaciones aritméticas permitidas con punteros
� Restar dos punteros� Comparar dos punteros.� Sumar o Restar un número entero a un puntero.
#include <stdio.h>float ProdEsc(float *v1,float *v2,int dim);void leevector(float *v,int dim);void main(void){float vector1[100]; /* primer vector */float vector2[100]; /* segundo vector */float result; /* resultado */int dim; /* longitud del vector */do{printf("\nLongitud del vector:\t");
scanf("%d",&dim);} while (dim < 1 || dim > 100);/* Lectura de vectores */printf("\nLectura del 1º vector\n");leevector(vector1,dim);printf("\nLectura del 2º vector\n");leevector(vector2,dim);/* Calculo del producto escalar */result=ProdEsc(vector1,vector2,dim);/* Escritura de resultado */printf("\nProducto escalar: %f\n",result);}
ASIGNACIÓN DE MEMORIA DINÁMICA
Hasta el momento todos losvectores y cadenas ocupaban un tamaño fijo en memoria
Se desea trabajar contablas de longitud variable
(O desconocida)
OPCION 1 . Declarar tablas“suficientemente grandes” parautilizar sólo una parte de ellas OPCION 2
.Reserva dinámica de memoria
void leevector(float *v,int dim){int i; /* indice */printf("\n");for (i=0;i<dim;i++){
printf("Componente %d:\t",i);scanf("%f",&v[i]);
}}
float ProdEsc(float *v1,float *v2,int dim){int i; /* indices */float sp=0.0;for (i=0;i<dim;i++){
sp=sp+ v1[i]*v2[i];}return sp;}
14.4 RESERVA DINÁMICA DE MEMORIA (I)
ASIGNACIÓN DE MEMORIA DINÁMICA (II)
DECLARACIÓNvoid * malloc( int )
LA SOLUCIÓN SE ENCUENTRA
EN EL USO DE LA FUNCIÓN
MALLOC
Elprototipo se encuentra en alloc.h, por lo que se añade#include <alloc.h>
ARGUMENTO DE ENTRADAtamaño (en octetos)
que se necesita
ARGUMENTO DE SALIDAdirección del primer elemento o NULL en caso de error
EL TAMAÑO EN MEMORIA DE UN ELEMENTO DEL VECTOR SE DETERMINA CON
sizeof ( tipo )
El valor devuelto es unPuntero a void
(void * ) que se conviertecon un molde
El tamaño se especifica en
OCTETOS
La memoria reservada ha de liberarse cuando yano se necesite
Free (direccion delbloque)
14.4 RESERVA DINÁMICA DE MEMORIA (II)
#include <stdio.h>#include <stdlib.h>#include <alloc.h>
float ProdEsc(float *v1,float *v2,int dim);void leevector(float *v,int dim);float *pvect1; /* puntero al primer vector */float *pvect2; /* puntero al segundo vector */float result; /* resultado */int dim; /* longitud del vector */
printf("\nLongitud del vector: \t");scanf("%d",&dim);pvect1= (float*)malloc(dim*sizeof(float));
if (pvect1==NULL) exit();pvect2= (float*)malloc(dim*sizeof(float));if (pvect2==NULL) { free(pvect1) ; exit(); }
/* Lectura de vectores */printf("\nLectura del primer vector\n");leevector(pvect1,dim);printf("\nLectura del segundo vector\n");leevector(pvect2,dim);
/* Calculo del producto escalar */result=ProdEsc(pvect1, pvect2,dim);
/* En caso de que los vectores no vayan a ser utilizados más */
free(pvect1);free(pvect2);
/* Escritura de resultado */printf("\nEl producto escalar es %f\n",result);
}
ASIGNACIÓN DE MEMORIA DINÁMICA (III)
EJEMPLO: Producto escalar modificado (funciónmain)
...(añadir definiciones defunciones)
/* o vaya a terminar la ejecución del programa */
void main(void){
...(añadir definiciones defunciones)
14.4 RESERVA DINÁMICA DE MEMORIA (III)
14.5 MATRICES
Permiten almacenar tablas bidimensionales.
Ejemplos de declaración con inicialización
Matriz [ 0 ] [ 0 ] Matriz [ 0 ] [ 1 ] Matriz [ 0 ] [ 2 ]
Matriz [ 1 ] [ 0 ] Matriz [ 1 ] [ 1 ] Matriz [ 1 ] [ 2 ]
11.0
12.0
13.0
14.0
15.0
16.0
Matriz[0][0]
Matriz[0][1]
Matriz[0][2]
Matriz[1][0]
Matriz[1][1]
Matriz[1][2]
Almacenamiento de matrices en memoria
char SopaLetras [4][6]={{'s','s','w','a','e','d'}, {'a','e','f','i','d','a'},
{'n','d','o','f','o','d'}, {'a','d','l','f','d','o'}} ;
float Matriz[2][3]={ {11.0,12.0,13.0} , {14.0,15.0,16.0} } ;
Nombre dela matriz
(Se puede utilizar como unaconstante con la dirección delprimer elemento de la matriz)
Tipo de datoalmacenadoen la matriz
Numero de filasde la matriz
Numero de columnasde la matriz
int nombre_matriz [ 10 ] [ 4 ] ;
Declaración de matrices
Recordatorio:Las variables que reciben lacopia del valor son: - Locales. - Vigencia hasta que termina
la función.
Ejemplo de definición de una función
Tipo de datodevuelto
(Si no devuelve nadase declara
como tipo void)
Existen dos formas de pasarcada argumento de una función
Si una función tiene quemodificar el contenido de
la memoria
Se pasa porreferencia
Se pasa la dirección.Luego se utilizan
punteros
Si la función sólo necesitauna copia del valor
Se utilizan variablesdel tipo correspondiente
Se pasa porvalor
Paso de un vector como argumento
#include <stdio.h>
void suma ( int elemento, int * pvector, int vector[ ] );
void main (void){ int vector[3]={0,1,2}; suma(vector[0], &vector[0], vector);}
void suma ( int elemento, int * pvector, int vector[ ] ){ printf("%d, %d, %d", elemento, *pvector, vector[0]);}
14.6 PASO DE TABLAS COMO ARGUMENTO A FUNCIONES