Libro de Transparencias - esi2.us.esjaar/Datos/FIQ/LibroTransparencias.pdf · Los circuitos...
Transcript of Libro de Transparencias - esi2.us.esjaar/Datos/FIQ/LibroTransparencias.pdf · Los circuitos...
Fundamentos de Informática
1er Curso. Ingeniería Química
Libro de Transparencias
Manuel López Martínez José Ángel Acosta RodríguezIsmael Alcalá Torrego Ing. Sistemas y Automática © 2006-2007
Índice Tema 1…………………………………………………1 Tema 2…………………………………………………11 Tema 3…………………………………………………18 Tema 4…………………………………………………28 Tema 5…………………………………………………38 Tema 6 y 7 ……………………………………………47 Tema 8………………………………………………… 60 Tema 10………………………………………………..67 Tema 11………………………………………………..77 Tema 12……………………………………………..…84 Tema 13………………………………………………..93 Tema 14………………………………………………..98 Tema 15………………………………………………109
JJ J N I II 1/10JJ J N I II 1/10
Introducción a la InformáticaFundamentos de Informática - [T 1]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/10JJ J N I II 2/10
Índice1.1.Informática y Computadoras 3
1.1.1.Programas e Instrucciones . . . . . . . . . . . . . . . . . . . . 41.1.2.Lógica Cableada y Programada . . . . . . . . . . . . . . . . . . 51.1.3.Computadoras Analógicas y Digitales . . . . . . . . . . . . . . 61.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 . . . . . . . . . . . . . . . . . . . . . . . . . 101.4.2.Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
JJ J N I II 3/10JJ J N I II 3/10
1.1. Informática y ComputadorasInformática:Trata de la adquisición, representación, tratamiento y transmisiónde 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.
JJ J N I II 4/10JJ J N I II 4/10
1.1.1. Programas e Instrucciones
Programa: Conjunto ordenado de instrucciones que se suministran a lacomputadora de forma que se obtengan unos resultados a partir de unosdatos.
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
JJ J N I II 5/10JJ J N I II 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.
JJ J N I II 6/10JJ J N I II 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ólopuede tomar dos valores (1,0)•Asociación de células permite representación de infor-
mación más compleja.•Facilidad de programación.
JJ J N I II 7/10JJ J N I II 7/10
1.1.3. Computadoras Analógicas y Digitales (cont)
ComputadoraAnalógica
•Trabajan con valores de tensión que varían de formacontinua dentro de un rango.
• ∃ relación entre tensión y valores de las variables.
•Rango de valores limitado
•Programación tediosa.
JJ J N I II 8/10JJ J N I II 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ón de 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.
JJ J N I II 9/10JJ J N I II 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).
Unidad
Aritmético
Lógica
Tema 5 del Libro
Unidad
de Control
Tema 6 del Libro
Memoria
Principal
Tema 4 del Libro
U
n
i
d
a
d
d
e
E
n
t
r
a
d
a
/
S
a
l
i
d
a
Periférico 1
señales de control
información
JJ J N I II 10/10JJ J N I II 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 enmarcha 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 problemaconcreto.
JJ J N I II 1/8JJ J N I II 1/8
Álgebra de Boole y circuitoscon puertas lógicas
Fundamentos de Informática - [T 2]
JJ J N I II 2/8JJ J N I II 2/8
2.1. Álgebra de Boole
Antecedentes históricos:
Teoría matemática presentada en 1854 por George Boole:”Investigaciónsobre las leyes del pensamiento”
−→ Las variables toman dos valoresFalso −→ 0Verdadero −→ 1
Aplicación en, áreas. . . . Shannon lo aplica acircuitos eléctricos con in-terruptores.
Variables lógicas(2 valores)1 bit
=⇒
Ej: 0 1interruptor abierto cerradolámpara apagada encendida
Las computadoras digitales utilizan codificación binaria
=⇒* Estudio con el álgebra de Boole* Construccióncon técnicas de Shannon
JJ J N I II 3/8JJ J N I II 3/8
2.1.1. Elementos básicos
Los elementos básicos son lasvariables lógicasy lasoperaciones lógicas(queson las encargadas de relacionar las variables entre sí).
Operacioneslógicas (2.1.2)
*Suma lógica
Operación lógica ”O” (OR)
0 1
0 0 1
1 1 1
0 1
0 0 1
1 1 1
aa
bb
aa
bb
f =a+bf =a+b
*Producto lógico
Operación lógica ”Y” (AND)
0 1
0 0 0
1 0 1
0 1
0 0 0
1 0 1
aa
bb
aa
bb
f =a·bf =a·b
*Negación o complementaciónOperación lógica ”NO” (NOT)
a a
0 1
1 0
a a
0 1
1 0
aa
f =af =a
JJ J N I II 4/8JJ J N I II 4/8
2.1.3. Propiedades
Propiedades de lasoperaciones lógicas
* ∃ de elemento neutroa+0=aa*1=a
* Asociatividad(a+b)+c=a+(b+c)a*(b*c)=(a*b)*c
* Conmutatividada+b=b+aa*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
JJ J N I II 5/8JJ J N I II 5/8
2.1.4. Funciones Boolenas
Composición de operaciones con Variables Booleanas expresadas de 4 formasdistintas: Por ejemplof = c ∗ (a+ b)
* Expresión analítica =⇒ f = c ∗ (a+ b)
* Expresión explícita oTabla de Verdad
a b c f
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 1
a b c f
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 1
Entradas
Salidas
2
3
* Circuito de interruptores
aa
bb
cc
* Puertas lógicas =⇒ (corresponde alapartado 2.2que se va a ver)
Lo máscomplicadoes pasar de la formaexplícita a la analítica.
JJ J N I II 6/8JJ J N I II 6/8
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 cadaentrada que valga 1 y decadaentrada negadaque valga 0.
c) La función que gobierna la salida es lasumade los productos.
3. Escribir la tabla de verdad de todas las salidas que acabamos de obtenerpara comprobar que está bien.
Por Ejemplo . . .
JJ J N I II 7/8JJ J N I II 7/8
2.2. Puertas lógicas
Desventajas de los interruptores* Velocidad↓↓↓* Potencia disipada↑* Dificultad miniaturización↑↑↑
=⇒ Uso de transistores y diodos≡ Puertas lógicas
Tipos depuertas 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+b
0 0 0
0 1 1
1 0 1
1 1 0
a b a+b
0 0 0
0 1 1
1 0 1
1 1 0
*Negación o complementación”NO” (NOT)
a
a
a
a
a
a
Entrada
Salida
JJ J N I II 8/8JJ J N I II 8/8
2.3. Ejemplos de circuitos lógicos
Los circuitos construidos con puertas lógicasconstituyen la lógica cableada
=⇒ Son la base de las computadoras
- Memorias- Unidades arit-mé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úna sea mayor,igual o menor queb.
2.3.3. Mayoría
La salida toma el valor de la mayoría de las tres entradas.
JJ J N I II 1/10JJ J N I II 1/10
Codificación Binaria de laInformación
Fundamentos de Informática - [T 3]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/10JJ J N I II 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
JJ J N I II 3/10JJ J N I II 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
JJ J N I II 4/10JJ J N I II 4/10
Por ejemplo:
Dec Hex Oct Bin0 0 000 000000001 1 001 000000012 2 002 000000103 3 003 000000114 4 004 000001005 5 005 000001016 6 006 000001107 7 007 000001118 8 010 000010009 9 011 00001001
10 A 012 0000101011 B 013 0000101112 C 014 0000110013 D 015 0000110114 E 016 0000111015 F 017 0000111116 10 020 0001000017 11 021 00010001
JJ J N I II 5/10JJ J N I II 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 lopasamos a Decimal y después a Base 2.
JJ J N I II 6/10JJ J N I II 6/10
Conversión de decimal a base 2 por Potencias de 2 conocidas
Número binario de n bits
2
0
2
1
2
2
2
n-1
g
n-1
g
2
g
1
g
0
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 nuevonú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.
JJ J N I II 7/10JJ J N I II 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 de
Signo
Si N>=0, 0
Si , 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]
JJ J N I II 8/10JJ J N I II 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 de
Signo
parte entera
0 0 0
parte fraccionaria
Aquí se supone
que está el punto
1 1 1 1 0
* Punto Flotante: Se construye expresando el número N en dos partes: mantisay 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 cual0,5 ≤ M < 1
bit de
Signo
Mantisa
Mantisa
en base 2
0 1 0
Exponente
en base 2
0 1 0 0 1
bit de
Signo
Exponente
JJ J N I II 9/10JJ J N I II 9/10
3.4. Codificación de caracteres
Se utiliza para codificartexto 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 diversosidiomas.
JJ J N I II 10/10JJ J N I II 10/10
3.5. Formatos Gráficos•Matriz de Puntos (BitMap):
• Imagen Binaria 1 bit1 pixel toma valores 0 ó 1)⇒
• Imagen Escala de grises 8 bits1 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⇒
JJ J N I II 1/10JJ J N I II 1/10
La Unidad de MemoriaFundamentos de Informática - [T 4]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/10JJ J N I II 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
JJ J N I II 3/10JJ J N I II 3/10
4.1. Conceptos y definiciones
Memoria ≡ Dispositivo de almacenamientode información binaria
•Datos•Programa en código máquina
Características
•Tiempo de acceso: El que transcurre entre el instante en que seordena la lectura/escritura de información y se realiza la tarea.
•Modo de acceso:- Secuencial Para llegar a un dato hay que irbuscando 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.
JJ J N I II 4/10JJ J N I II 4/10
S C ́ en bits en Bytes o caracteres Abreviatura
celda elemental 1 - bocteto 8 1 B
registro 8,16,32,64 1,2,4,8 palabra≡Wmemoria de 1 KiloByte 8 ∗ 210 210 1KBmemoria de 1 MegaByte 8 ∗ 220 220 1MBmemoria de 1 GigaByte 8 ∗ 230 230 1GBmemoria de 1 TeraByte 8 ∗ 240 240 1TB
JJ J N I II 5/10JJ J N I II 5/10
Unidad
Aritmético
Lógica
Unidad
de Control
Memoria
Principal
U
n
i
d
a
d
d
e
E
n
t
r
a
d
a
/
S
a
l
i
d
a
Periférico 1
Memoria
Auxiliar
Disco Duro
CD-ROM
Disco Flexible, etc
Órdenes de la UC a lamemoria
•Direccionamiento: Seleccionar la info que está enuna 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).
JJ J N I II 6/10JJ J N I II 6/10
4.2. Clases de Memoria
Clasificación segúnestructura deVon Neumann
•MemoriaPrincipal
Contiene el programaen el momento de laejecución
•Tacceso ↓↓
•Acceso Aleatorio•Volátil
•MemoriaAuxiliar
Memorias que seconectan comoperiféricos
•Tacceso ↑
•No Volátil•Capacidad ↑↑↑
JJ J N I II 7/10JJ J N I II 7/10
Clasificación segúncaracterísticas
•RAMMemorias de acceso aleato-rio. Utilizadas como memo-ria principal
•Tacceso ↓↓
•Acceso aleatorio•Volátil•Admite l/e
•ROM Memorias sólo paralectura
•Sólo admite lectura•No Volátil•Necesita programador
•EPROMMemorias repro-gramables sólo paralectura
•Sólo admite lectura•No Volátil•Necesita progra-
mador•Se borra con UV•Utilizada en las
BIOS
JJ J N I II 8/10JJ J N I II 8/10
4.3. Organización matricial de la memoriaUn registro por fila.(N≡ no de registros o filas)
⇒ las columnas son las célulaselementales del registro.
Hilos de
Selección
N registros
( 2 )Un número del tipo
m
n células
Hilos de
lectura/escritura
JJ J N I II 9/10JJ J N I II 9/10
4.3.1. Direcciones
Cada registro tiene asignado un número llamado dirección que van desde 0hasta 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 = 2
m
n células
0
1
N-1
m
bits
Registro de selección de
direcciones = S
Decodificador de direcciones
JJ J N I II 10/10JJ J N I II 10/10
4.4. La unidad de memoria central
Formadapor:
•Matriz de celdas elementaleso fila de registros.•Decodificador de direcciones.•Pequeña lógica de control.
S
.
.
.
.
LECM
ESCM
T
Bus deDirecciones(tamaño m)
Bus deDatos
(tamaño n)
Lectura:1) Direccionamiento⇒ dirección en el registro S2) Ordenar la lectura activando LECM= 13) 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
JJ J N I II 1/9JJ J N I II 1/9
La unidad aritmético lógicaFundamentos de Informática - [T 5]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/9JJ J N I II 2/9
Índice5.1.Biestables y Registros 3
5.1.1.Registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5.2.Circuitos operadores con enteros 45.2.1.Semisumador . . . . . . . . . . . . . . . . . . . . . . . . . . . 55.2.2.Sumador completo (o con acarreo) . . . . . . . . . . . . . . . . 6
5.5.La unidad artimético lógica 7
JJ J N I II 3/9JJ J N I II 3/9
5.1. Biestables y Registros
Célula de memoriao
Celda de memoria⇒
biestable ≡ Dispositivo electrónico condos estados estables (y = 0 y y = 1).
Tiene memoria
S
y
R
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
Q
n
R
S
R
S
R
Q
1
Q
0
Señal de Sincronismo
JJ J N I II 4/9JJ J N I II 4/9
5.2. Circuitos operadores con enteros
Objetivo⇒ Construir circuitos lógicos para hacer operacionesAritmé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 de1 bit cada uno y un acarreo
Acarreo ≡ ”Lo que me llevo” de una operación anterior.
JJ J N I II 5/9JJ J N I II 5/9
5.2.1. Semisumador
Suma aritmética de dos números de 1 bit cada uno.b
sa
c
SS
Semisumador
a b c s0 0 0 00 1 0 11 0 0 11 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.
JJ J N I II 6/9JJ J N I II 6/9
5.2.2. Sumador completo (o con acarreo)
Suma aritmética de dos números de 1 bit cada uno y elacarreo anterior. b
s
a
c
2
SC
c
1
Sumador completo
a b c1 c2 s0 0 0 0 00 0 1 0 10 1 0 0 10 1 1 1 01 0 0 0 11 0 1 1 01 1 0 1 01 1 1 1 1
⇒
s = a ⊕ b ⊕ cc = c1(a ⊕ b) + a · b
SS
b
s
a
c
2
c
1
SS
SC
JJ J N I II 7/9JJ J N I II 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. A: Primer operando, y almacena el resultado2. Operando: Almacena el segundo operando.
Dispone de un registro de que indica:
• Si el resultado ha sido positivo, negativo o cero.
• Si hubo desbordamiento en la operación anterior.
JJ J N I II 8/9JJ J N I II 8/9
SUMA
MULT
Estado
A = Acumulador
Primer operando
Señales de control
de la UC
Registro del
primer 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, . . .
JJ J N I II 9/9JJ J N I II 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
JJ J N I II 1/13JJ J N I II 1/13
Modelo Simple deComputadora Digital
Fundamentos de Informática - [T 6 7]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/13JJ J N I II 2/13
Índice7.1. Modelo Simple de Computadora Digital 3
7.2.Microórdenes 4
7.3.Descripción de C 5⇒ 7.6 Modos de Direccionamiento . . . . . . . . . . . . . . . . . . . 7
7.4.El programa traductor 11
7.5.Transferencias entre Registros 13
JJ J N I II 3/13JJ J N I II 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
JJ J N I II 4/13JJ J N I II 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.
JJ J N I II 5/13JJ J N I II 5/13
7.3. Descripción de C¿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 Memoria
M(S)= 16 bits
- Unidad de Entrada/Salida⇒ E=16 bits
JJ J N I II 6/13JJ J N I II 6/13
Almacenamientoen 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
2
4
instrucciones. (7.1.1) Juego de instrucciones
2 7.6posibilidades. ( ) Modos de direccionamiento
JJ J N I II 7/13JJ J N I II 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 dememoria donde está guardadala dirección del dato. ⇒ eldato está en M(M(D))
CO
1
16
8
9
15
16
3
8
NOTA: Toda la
información de los
registros está en binario
NOTA: Existe otro modo de direccionamiento (Inmediato).
JJ J N I II 8/13JJ J N I II 8/13
7.1.1 Juego de Instrucciones de C
Parar 0000 termina la ejecución del programaAlmacenar 0001 Guarda una copia de A en la memoriaCargar 0010 Carga un dato de la memoria en AEscribir 0011 Escribe un dato de la memoria en la pantallaLeer 0100 Leer un dato del teclado y guardarlo en la memoriaSumar 0101 Suma a A un dato de la memoriaRestar 0110 Resta a A un dato de la memoriaMultiplicar 0111 Multiplica a A un dato de la memoriaDividir 1000 Divide A entre un dato de la memoria
y se queda con la parte enteraMódulo 1001 Halla el resto de dividir A entre un dato de la memoriaSalto incondicional 1010 Introduce en P un dato de la memoriaSalto si A negativo 1011 Idem si A es negativoSalto si A nulo 1100 Idem si A es ceroSalto si A positivo 1101 Idem si A es positivoEscribir Caracter 1110 Escribe un dato de la memoria como caracter
ASCII en la pantallaLeer Caracter 1111 Leer un caracter ASCII del teclado y guardarlo
en la memoria
JJ J N I II 9/13JJ J N I II 9/13
7.1.2 Ejemplo de programa en código máquina
Escribir la suma de dos números introducidos por elusuario.
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
MEMORIADirección CO MD D
20 0100 0 0000000101021 0100 0 0000000101122 0010 0 0000000101023 0101 0 0000000101124 0001 0 0000000110025 0011 0 0000000110026 0000 0 00000000000
JJ J N I II 10/13JJ J N I II 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
JJ J N I II 11/13JJ J N I II 11/13
7.4. El programa traductorPermite traducir el programa en lenguaje legible a código máquina.
Elementosdel
lenguajesimbólico
*Sentencias
deInstrucción
- Operación=código mnemotécnico de tres letras
- Modo deDireccionamiento
MD≡ 0⇒ NadaMD≡ 1⇒ I
- Operando⇒ Decimal
* Directivas oPseudoinstrucciones
- Organización del programa en memoria- Reserva de memoria- Indicar al traductor el final del programa
* Comentarios. Permiten aclarar el programa (el traductor losignora)⇒ Por Ejemplo: CAR 11 ’cargar el número B
Tipos de lenguajessimbólicos en C
* 7.3 Lenguaje simbólico de 1 paso (LS1)* 7.4 Lenguaje simbólico de 2 pasos (LS2)
JJ J N I II 12/13JJ J N I II 12/13
Sentencias de Instrucción y las transferencias que representan
JJ J N I II 13/13JJ J N I II 13/13
7.5. Transferencias entre Registros
JJ J N I II 1/3JJ J N I II 1/3
Algoritmosy
Diagramas de flujoFundamentos de Informática - [T 8]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/3JJ J N I II 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º enteroletra Li variable carácter
sumando a variable nº enterosumando b variable nº entero
media m variable nº realdos 2 constante nº entero
1. Iniciar índice i a 12. Tomar Li letra i-ésima de la palabra3. Reemplazar por Li+1, siguiente en el alfabeto4.Si Li es la última letra de la palabra, entonces ir a a 65. 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 b3. La media es m = (a+b)/24. 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
JJ J N I II 1/10JJ J N I II 1/10
Introducción al Lenguaje CFundamentos de Informática - [T 10]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/10JJ J N I II 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 . . . . . . . . . . . . . . . . . . . . . 810.4.1. Ejemplo main y printf(cont) . . . . . . . . . . . . . . . . . . 910.4.2. Ejemplo scanf . . . . . . . . . . . . . . . . . . . . . . . . . 10
JJ J N I II 3/10JJ J N I II 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 datoscomplejos• bajo nivel⇒ permite acceso a direcciones de
memoria
JJ J N I II 4/10JJ J N I II 4/10
10.2. Visión General
1.- Escritura
2.- Compilación
3.- Montaje
4.- Ejecución
Tema 0: Introducción al lenguaje C
2
funciones matemáticas, de entrada-salida, de gráficos, etc. En el caso del ejemplo anterior, la función printf() es un elemento de la biblioteca estándar. A diferencia del lenguaje LS-2, el lenguaje C no guarda ninguna relación entre las instrucciones de la máquina y el código fuente. Cada proposición del lenguaje C puede dar lugar a muchas instrucciones una vez compilado. Esta es una característica común a los lenguajes llamados de alto nivel. La ventaja de estos lenguajes es clara: escribiendo poco código se pueden hacer muchas cosas. Por ejemplo, para acceder a un elemento individual de una matriz en memoria es preciso en LS2 realizar varias operaciones, en lenguaje C esta tarea ocupa solo una sentencia simple como a[i][j] que además de cómodo es mucho más legible. 0.2.3 Montaje El montaje permite crear un archivo ejecutable a partir de trozos de código de máquina. Estos trozos son los ficheros objeto creados al compilar y los ficheros que se hayan en la biblioteca de funciones. El montaje es realizado por un programa del sistema de explotación. A menudo el montaje y la compilación se realizan conjuntamente mediante un solo programa. El resultado, como es sabido, es un fichero llamado ejecutable que será guardado en disco o cinta para tenerlo disponible para ser ejecutado. 0.2.4 Ejecución La ejecución del programa es el paso final y se produce simplemente indicando al sistema de explotación que se desea cargar el fichero ejecutable y dar paso al programa que contiene. En UNIX la ejecución se realiza sin más que escribir el nombre del fichero ejecutable. En el caso del ejemplo anterior se obtiene por pantalla los dos mensajes. Después de la ejecución el sistema de explotación queda a la espera de nuevas órdenes. En el diagrama siguiente se muestra el proceso seguido mostrándose los ficheros involucrados y los programas usados. Bajo el sistema de explotación UNIX la secuencia a seguir para generar el ejecutable del programa ejemplo es la siguiente: Se crea el fichero de texto ejemplo.c con un editor, (se utilizará en este ejemplo el editor vi, pero podría utilizarse cualquier otro disponible).
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)
JJ J N I II 5/10JJ J N I II 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)
JJ J N I II 6/10JJ J N I II 6/10
10.3.1. Palabras Reservadas
Tema 0: Introducción al lenguaje C
4
0.3.1 Palabras reservadas en C Son componentes léxicos definidos con un significado para el compilador de C. No podrán utilizarse ninguna de estas palabras para denominar variables o funciones. Indicar algunas, por ejemplo las resaltadas. 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 0.4 Ejemplos En estos ejemplos se proporcionan ideas que se describen con detalle en temas posteriores. 0.4.1 Ejemplo 1
El proceso de compilación, montaje y ejecución se ha descrito de forma gráfica en la figura siguiente. Se ha de tener en cuenta que: � Una sentencia C puede dar lugar a muchas instrucciones de código de máquina � Algunas funciones pertenecen a la biblioteca, por lo ya están compiladas y se incluyen en el montaje � Las variables ocupan lugares en memoria cuyo valor se modifica durante la ejecución � El espacio en memoria para las variables x e y se toma durante la ejecución y se desocupa al finalizar
la función main. En el ejemplo anterior las letras H y M resultan de interpretar los números 72 y 77 como código ASCII.
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 */
}
JJ J N I II 7/10JJ J N I II 7/10
10.4. EjemplosFunción main: Imprescindible para realizar un fichero ejecutable (.exe).
Funciones deEntrada/Salida
•Función printf: Escritura en pantalla
•Función scanf: Lectura de teclado
•Especificadoresde formato
%c: carácter
%d: número entero
%f: número real
JJ J N I II 8/10JJ J N I II 8/10
10.4.1. Ejemplo main y printf
Tema 0: Introducción al lenguaje C
4
0.3.1 Palabras reservadas en C Son componentes léxicos definidos con un significado para el compilador de C. No podrán utilizarse ninguna de estas palabras para denominar variables o funciones. Indicar algunas, por ejemplo las resaltadas. 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 0.4 Ejemplos En estos ejemplos se proporcionan ideas que se describen con detalle en temas posteriores. 0.4.1 Ejemplo 1
El proceso de compilación, montaje y ejecución se ha descrito de forma gráfica en la figura siguiente. Se ha de tener en cuenta que: � Una sentencia C puede dar lugar a muchas instrucciones de código de máquina � Algunas funciones pertenecen a la biblioteca, por lo ya están compiladas y se incluyen en el montaje � Las variables ocupan lugares en memoria cuyo valor se modifica durante la ejecución � El espacio en memoria para las variables x e y se toma durante la ejecución y se desocupa al finalizar
la función main. En el ejemplo anterior las letras H y M resultan de interpretar los números 72 y 77 como código ASCII.
#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 lafunción main
JJ J N I II 9/10JJ J N I II 9/10
10.4.1. Ejemplo main y printf(cont)Tema 0: Introducción al lenguaje C
5
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 */}
0000100001011101101001111010100010
: :: :
00001000011111011
0000100001011101101001111010100010
: :: :
00001000011111011
0000100001011101101001111010100010 01001111010100010 01001111010100010
: :: :
00001000011111011
01 ... ... 10
01 ... ... 10
: :
01 ... ... 10
?
?
01 ... ... 10
01 ... ... 10
: :
01 ... ... 10
72
90xy
01 ... ... 10
01 ... ... 10
: :
01 ... ... 10
?
-50xy
01 ... ... 10
01 ... ... 10
: :
01 ... ... 10
?
?
x es -50, y es Hahora x= 90, e y= M
fuen
te
obje
to
ejec
utab
le
1
2
3
4
1 2
3 4
0.4.2 Ejemplo 2 La función de salida de información por pantalla más utilizada es printf(), que de forma muy resumida, podemos decir que lo que hace es presentar por pantalla la información que se le pasa como argumento. printf(“Cadena de control”, lista de datos separados por comas); La cadena de control puede contener un texto para presentar por pantalla y los especificadores de formato que determinan la forma en que aparecerán los valores, (debe haber tantos especificadores de formato como datos haya). Los especificadores de formato más usuales son: � %c formato de carácter � %d formato decimal � %f formato en coma flotante Ejemplos:
printf(“ El número %d ”, 18); Por pantalla aparece:
printf(“la suma de %d y de %d es %d”, 6, 2, 6+2);
El número 18
la suma de 6 y de 2 es 8
JJ J N I II 10/10JJ J N I II 10/10
10.4.2. Ejemplo scanf
Tema 0: Introducción al lenguaje C
7
0.4.3 Ejemplo 3 El programa siguiente tiene cuatro funciones: main(), scanf(), suma() y printf(). La función main() es la función principal, la que contiene a todo el programa. La función scanf() es de biblioteca y sirve para leer del teclado e introducir valore en la memoria. La función suma() calcula la suma y devuelve el resultado. Esta función ha sido realizada junto con main() en el código fuente que se muestra. La función printf() es de biblioteca y sirve para escribir en la pantalla.
#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 */
}
JJ J N I II 1/7JJ J N I II 1/7
Variables, constantes,operadores y expresionesFundamentos de Informática - [T 11]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/7JJ J N I II 2/7
Índice11.1. Variables y punteros 3
11.1.1. Vigencia y alcance de las variables locales y globales . . . . . 311.1.2. Especificadores de variables: static . . . . . . . . . . . . . . . 311.1.3. Parámetros formales . . . . . . . . . . . . . . . . . . . . . . 3
11.2. Sentencias de asignación 5
11.3. Expresiones 511.3.1. Conversiones de tipo . . . . . . . . . . . . . . . . . . . . . . 511.3.2. Moldes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511.3.3. Abreviaturas . . . . . . . . . . . . . . . . . . . . . . . . . . 5
11.4. Constantes 6
11.5. Operadores 711.5.1. Aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 711.5.2. Relacionales y lógicos . . . . . . . . . . . . . . . . . . . . . 711.5.3. Operadores de bits . . . . . . . . . . . . . . . . . . . . . . . 711.5.4. Prioridad de operadores . . . . . . . . . . . . . . . . . . . . . 7
PROPIEDADESo
CARACTERÍSTICASde una Variable
1 byte2 bytes4 bytes8 bytes
-128:127-32768:32767
-3.4*1038:3.4*1038
-1.7*10308:1.7*10308
Tamaño Rango aprox.char
intfloat
double
Tipo
TIPO
De datos quealmacena
Consideraciones
1º Siempre unaLetra del Alfabeto +
CualquierCombinación deDígitos y Letras
Case Sensitive
NOMBREo
IDENTIFICADORPara distinguirla
de las demás
VIGENCIA Durante toda laejecución del programa
VIGENCIA Durante laejecución de la funcióndonde está declarada
VIGENCIA¿Cuándo se puedehacer uso de una
variable?
ALCANCE¿Dónde se puedeutilizar la variable?
VARIABLE GLOBALAccesible por cualquier
función del programa
VARIABLE LOCALAccesible sólo en la función
donde está declarada
VIGENCIA Sólo durante laejecución de la función
donde se declara
INICIALMENTEestá a 0Dentro de una función
= VARIABLE LOCALAccesible sólo en lafunción donde está
declarada
(3) Sin Especificador.Se llaman Variables Dinámicas
o Automáticas
(4) Con EspecificadorStatic
Accesible por cualquierfunción del programa
PROPIEDADESDE UNA VARIABLESEGÚN DONDESE DECLARA
(1) FUERA de todaslas funciones.
Se llaman Variables Globales
(2) En la declaración de losparámetros de la Función.
Se llaman Parámetros Formales
Al declararlacontiene basura
A continuaciónde las llaves
INICIALMENTEtoma el valor del
parámetro de llamadacorrespondiente
VIGENCIA Durantetoda la ejecución de
del programa
SENTENCIA DEASIGNACIÓN
Sentencia que da unvalor a una Variable
.
.
.
.
Valor de laVariable
&NombreVariable(es la Dirección de
memoria de laVariable)
.
.
.
.
Tamaño dela Variablesegún el
TIPO que sea
Puede existirpérdida de datos
Se evalúa primero laEXPRESIÓN
Variable = EXPRESIÓN
Se convierte alTIPO de Variable
INICIALIZACIÓNCuando la asignación sehace en la declaración
Cualquier combinación de variables, operadores
y constantes
moldes(tipo) expresión
ABREVIATURAScon + - * / % << >> & ^ |
Generan código máseficiente
x=x+10 x+=10y=y-2 y-=2
EJEMPLO
CONSTANTES
No se pueden alteraren el programa
TIPOS de Constantes
Número dedoble
precisión
Enteros
Caracteres
NúmeroReal
ASCII
caracteresespeciales
\n Nueva Linea \r Retorno de Carro \t Tabulador
\' \" \\
OPERADORES
Símbolos que indican unaoperación a realizar
OperadoresAritméticos - resta y cambio de Signo
+ suma* multiplicación/ división% módulo (resto de división entera,
no aplicable a float y double) -- decremento++ incremento
OperadoresRelacionales
yLógicos
Operadoresde Bits
OperadoresEspeciales
& Operación AND | Operación OR ^ Operación XOR ~ Negación bit a bit >> Desplazamiento a la derecha << Desplazamiento a la izquierda
Relacionales: Comparanvalores entre sí y devuelven 1 si
es cierto y 0 si es falso
>, >=, <, <=, == y !=
Lógicos: Permiten realizaroperaciones lógicas.Devuelven
1 si es cierto y 0 si es falso
&&, || y !
Operador Ternario Condicional:Expresion_1 ? Expresion_2 : Expresion_3
Operadores de Puntero: & "Dirección de"
"Contenido apuntado por"*
Precedencia: Indica que operador tiene prioridad en una operación sin paréntesis
( ) [ ] -> . Prioridad máxima! ~ ++ -- - (type) * & sizeof* / %+ -<< >>< <= > >=== !=&^|&&||? := += -= *= /=, Prioridad mínima
JJ J N I II 1/3JJ J N I II 1/3
Sentencias de control en CFundamentos de Informática - [T 12]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/3JJ J N I II 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>
JJ J N I II 1/6JJ J N I II 1/6
Funciones en CFundamentos de Informática - [T 13]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/6JJ J N I II 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
JJ J N I II 1/9JJ J N I II 1/9
Vectores, cadenas, matrices ypunteros
Fundamentos de Informática - [T 14]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/9JJ J N I II 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 del vector
(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 del vector
(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 la cadena
(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 del puntero
(Representa la dirección delelemento apuntado )
Tipo de datoapuntado Identificador
dePuntero
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 ENCUENTRAEN 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 enOCTETOS
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
JJ J N I II 1/8JJ J N I II 1/8
Funciones de lectura y escrituraFundamentos de Informática - [T 15]
1o Ingeniería QuímicaManuel López Martínez
José Ángel Acosta RodríguezIsmael Alcalá Torrego
JJ J N I II 2/8JJ J N I II 2/8
Índice15.1. Lectura y escritura con formato: printf, scanf 3
15.2. Ficheros de texto y binarios 4
15.3. Apertura y cierre de ficheros: fopen, fclose 5
15.4. Lectura y escritura en ficheros de texto: fprintf, fscanf 6
15.5. Lectura y escritura en ficheros binarios: fwrite, fread 7
15.6. Ejemplos 8
Ficheros
fscanf
Tema 5: Funciones deLectura y Escritura
Lectura y escrituraen ficheros binarios
fwrite
fread
Salidaestándar
printf
Entradaestándar
scanf
fopen
fclose
fprintf
Funciones deapertura y cierre de
ficheros
Lectura y escrituraen ficheros de texto
Pantalla
Teclado
Formato general de unparámetro de control
printf (escritura en pantalla con formato)
printf ("mensajes de texto y parámetros de control ", lista de argumentos);
%[Signo][Ajuste][Anchura][.Precisión]tipo
difecs
tipo
Constante numérica que indica elancho mínimo. Si no se alcanza serellena con espacios en blanco
Anchura
En float o double: Indica el númerode decimales a presentar.En cadena de caracteres: Indica elnúmero máximo de caracteres apresentar.
Precisión
Si lleva un signo - :Se ajusta a la izquierdaSi no aparece el signo - :Se ajusta a la derecha
Ajuste
Si lleva un signo + :Se presenta el signo delvalor (positivo o negativo)Si no aparece el signo +:Se presenta el signo delvalor sólo si es negativo
Signo
15.1 LECTURA Y ESCRITURA CON FORMATO (I)
enterosenterosreales con 6 decimalesexponencial 1.2e3carácter ASCI Icadena hasta encontrar elterminador '\0'
Ejemplos con printf
#include<stdio.h>void main(void){ float df=3.14159; printf("\n Hola %f Adios", df); printf("\n Hola %f Adios", -df); printf("\n Hola %7.3f Adios", df); printf("\n Hola %7.3f Adios", -df); printf("\n Hola %-7.3f Adios", df); printf("\n Hola %+7.3f Adios", df); printf("\n Hola %+-7.3f Adios", df);}
Hola 3.141590 AdiosHola -3.141590 AdiosHola 3.142 AdiosHola -3.142 AdiosHola 3.142 AdiosHola +3.142 AdiosHola +3.142 Adios
Ejemplo 1
#include<stdio.h>void main(void){ int de=1492; float df=3.14159; char ca[]="un dos"; printf("\n\n\n %d %f %s fin1", de, df, ca); printf("\n %6d %6.4f %6s fin2", de, df, ca); printf("\n %10d %10.1f %10s fin3", de, df, ca); printf("\n %-10d %-10f %-10s fin4", de, df, ca); printf("\n %+10d fin5", de);}
Ejemplo 2
1492 3.141590 un dos fin1 1492 3.1416 un dos fin2 1492 3.1 un dos fin31492 3.141590 un dos fin4 +1492 fin5
Los parámetros de controlson iguales que en printf
scanf (Lectura con formato desde teclado)
scanf ( " parámetros de control " , lista de argumentos ) ;
Esta función lee caracteres del teclado y los interpreta con el formato especificado.
Deben estar separados por espacios enblanco, tabuladores o cambios de línea
Direcciones de memoriadonde se almacenan los
datos
i
x
Manolo\0
5.43
25
nombre[0]nombre[1]nombre[2]nombre[3]nombre[4]nombre[5]nombre[6]
nombrenombre+1nombre+2nombre+3nombre+4nombre+5nombre+6
&x
&i
se introduce por teclado :w l,+b
Ejemplochar a, b, c, d, e, f;scanf("%c%c%c%c%c%c", &a, &b, &c, &d, &e, &f);
'w'' ''l'',''+''b'
abcdef
&a&b&c&d&e&f
En caso de que se leancaracteres seguidos, elespacio también se lee
int i; float x;char nombre[50];scanf("%d %f %s", &i, &x, nombre);
Ejemplo
se introduce por teclado :25 54.3E-1 Manolo
15.1 LECTURA Y ESCRITURA CON FORMATO (II)
Agrupaciones de datos que se almacenan en dispositivos de grancapacidad (cintas, discos magnéticos, discos ópticos).
Los datos se almacenancodificados en códigoASCII
Caracteres del número = '1' '2' '9'Código ASCII en decimal = 49 50 57
Código ASCII en binario = 00110001 00110010 00111001
Ejemplo: Almacenamiento del número entero 129
Los datos se almacenanigual que en la memoria
Código en binario del entero de 2 bytes= 0000000010000001
Ejemplo: Almacenamiento del número entero 129
15.2 FICHEROS DE TEXTO Y BINARIOS
Ficheros
Ficherosde Texto
FicherosBinarios
Tipos de Ficheros
Operaciones con los Ficheros
Desconexión entre elfichero y el programa
Permite que otrosusuarios/programaspuedan usar el fichero
Binarios
Texto
Obtenerinformaciónalmacenada
Modificar lainformaciónalmacenada
Existendos tiposde ficheros
15.3 APERTURA Y CIERRE DE FICHEROS
Apertura de fichero
Operaciones con losDatos
Lectura
Escritura
Cierre del fichero
Nuevo tipo de dato: puntero a ficheroFILE * (definido en <stdio.h>)
Vía de comunicaciónque permite accederal fichero.
Apertura de un Fichero
Cadena de caracterescon el nombre y
extensión del fichero
Cadena decaracteres con elmodo de apertura
t = textob= binario+
r =w =
a =
LecturaEscritura (borrando elcontenido previo)Escritura (a partir delfinal del fichero)
FILE * fopen ( char * , char * );
Cierre de un FicheroPuntero del
fichero a cerrarint fclose ( FILE * ) ;
1) En caso de apertura correcta Devuelve un puntero al fichero
2) En caso de error de apertura Devuelve un puntero NULL
· En caso de cerrar correctamente el fichero Devuelve un 0· En caso de cerrar incorrectamente el fichero Devuelve un -1
Ejemplo: Apertura y cierrede un fichero de texto
para lectura#include <stdio.h>#include <stdlib.h>void main(void){FILE * pf;pf=fopen("prueba.txt","r t" ) ;if(pf==NULL) { printf("no se puede abrir el archivo\n") ; exit( 0 ) ; }..... /* Operaciones del programa */.....fclose ( pf ) ;}
fprintf: Escritura en un fichero de texto
int fprintf ( FILE *,"texto y parámetros de control ", lista de argumentos);
Puntero al fichero(abierto previamente
con fopen)
Devuelve el número de bytes escritos.(Luego en caso de no poder escribir
ningún caracter devuelve un 0 )
#include <stdio.h>#include <stdlib.h>void main(void){FILE * pf;int nmat;float dni;char nombre[50]; pf=fopen("pru1.txt","wt"); if(pf==NULL) { printf("no se puede abrir el archivo\n"); exit(0); } printf("\nIntroduce tu nombre \n"); scanf("%s", nombre); printf("\n Introduce tu numero de matricula \n"); scanf("%d", &nmat); printf("\n Introduce tu DNI \n"); scanf("%f", &dni); fprintf( pf,"%s %d\nDNI %8.0f\n",nombre,nmat,dni); fclose (pf)}
Escribir en un fichero un mensaje consistente en:nombre del usuario (máximo 50 caracteres),
espacio, nro de matricula, salto de línea, el texto"DNI", espacio, el nro de DNI.
(El fichero tendrá por nombre "pru1.txt".)
Ejemplo:
Después de escribir el último valor en un fichero hay que escribirun caracter en blanco, un tabulador o un caracter de nueva línea
IMPORTANTE:
15.4 LECTURA Y ESCRITURA EN FICHERO DE TEXTO (I)
Devuelve el número de argumentosasignados (luego en caso de no poder
asignar ningún argumento devuelve un 0 )
Direcciones de memoriadonde se almacenan los
datos
Puntero al fichero(abierto previamente
con fopen)
Condición para finalizar la lectura de ficheroswhile(fscanf(FILE * pf,"%d %d", &x,&y)==2)
La función fscanf devuelve un número entero correspondiente al númerode parámetros leídos.Si la proposición es cierta, se permanece dentro del bucle while
Resuelve el problema deleer un fichero quecontiene un númeroindeterminado de datos.
Programa que lee el fichero temp.txt conteniendoen cada línea: el nombre de una ciudad, espacio yla temperatura en grados Celsius.
Ejemplo:
Puntero al fichero(abierto previamente
con fopen)
15.4 LECTURA Y ESCRITURA EN FICHERO DE TEXTO (II)
fscanf: Lectura en un fichero de texto
int fscanf ( FILE * pfnombre,"parámetros de control ", lista de argumentos);
#include<stdio.h>#include<stdlib.h>void main(void){char ciudad[50];float temp, tempmax= -300;FILE * pf; pf=fopen("temp.txt", "rt"); if (pf==NULL) { printf("Error de apertura"); exit(0); } while(fscanf (pf, "%s %f", ciudad, &temp)==2) {
printf("\n %f %s", temp, ciudad);if(temp>tempmax) { tempmax=temp; }
} printf("\n temperatura máxima %f\n", tempmax); fclose (pf);}
Puntero al fichero(abierto previamente
con fopen)
Tamaño de cadaelemento a escribir Número de
elementos aescribir
Puntero a laprimera dirección
de memoria dondese tomarán los
datos paraincluirlos en el
fichero.
fread: Lectura de un fichero binario
Puntero al fichero(abierto previamente
con fopen)
Tamaño de cadaelemento a leer Número de
elementos a leer
Puntero a laprimera dirección
de memoria dondese almacenarán
los datosobtenidos del
fichero.
15.5 LECTURA Y ESCRITURA EN FICHERO BINARIO (II)
fwrite: Escritura en un fichero binario
int fwrite ( void * mem_intermedia , int nro_octetos , int cont, FILE * pf);
int fread ( void * mem_intermedia , int nro_octetos , int cont, FILE * pf);
Devuelve el número de elementos leídos.Si no coincide con cont, la lectura no se ha realizado de forma completa
Ejemplos de lectura y escritura en ficheros binarios
Almacenamiento de un vector de 10números reales en un fichero binario.
Ejemplo 1:
Lectura del fichero binario anterior y salida porpantalla
Ejemplo 2:
#include <stdio.h>#include <stdlib.h>void main(void){ FILE *pf; float vector[10]; int i; for(i=0; i<10; i++) vector [ i ]= i * i ; pf=fopen("vdatos","wb"); if(pf==NULL) { printf("No se puede abrir fichero\n"); exit(0); } fwrite(vector, sizeof(float),10, pf);/* También se puede utilizar: fwrite(vector, sizeof(vector), 1, pf); */ fclose(pf);}
#include <stdio.h>#include <stdlib.h>void main(void){ FILE * pf; float x[10]; int i; pf=fopen("vdatos","rb"); if(pf== NULL) { printf("Error de apertura de fichero\n"); exit(0); } fread(x, sizeof(float), 10 , pf); /* También se puede hacer: fread(x, sizeof(x), 1, pf); */ for(i=0; i<10; i++) printf("%5.0f",x[ i ] ); fclose(pf);}