Upload
vannga
View
215
Download
0
Embed Size (px)
Citation preview
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 1
Taller de Programación en C
550380 0550380-0Daniel Herrera P.
Introducción y horario
• Código: 550380-0• Carrera: Ing. Civil Biomédica• Clases: 13 de Agosto al 8 de Septiembre
Mario Medina C.
• Horario clasesMiércoles, 17:10 a 20:00, Lab 2 SistemasJueves, 18:10 a 21:00, Lab 2 SistemasViernes, 17:10 a 20:00, Lab 2 Sistemas
Administrativa
• Profesor: Daniel Herrera P.• Laboratorio de Visualización y TI• Teléfono: 2203520
Mario Medina C.
• Correo electrónico: [email protected]
Materiales del curso
• Blog (http://tallerc2008.blogspot.com)Enlaces a softwareTransparenciasOtros materiales
Mario Medina C.
Otros materialesNotasForos
Horario y lugar de las clases
• Horario de prácticas En la misma sesión de clases
• Ayudante
Mario Medina C.
No tendrá (por ahora)
• Prácticas en el laboratorioExperiencias pasadas indican que prácticas se aprovechan mejor si se hacen frente al PC
Software
• Compilador C Dev-C++ (http://www.bloodshed.net/dev/)
Bueno, bonito y barato (gratis!)Disponible a través de enlaces en InfoAlumno
Mario Medina C.
Disponible a través de enlaces en InfoAlumnoInstalado en los laboratorios de la Facultad de Ingeniería
• Otros compiladoresA su cuenta y riesgoTareas serán revisadas usando Dev-C++
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 2
Contenidos
• Modulo 1Introducción, Conceptos básicosTipos de Datos, Algebra binariaSentencias de Entrada/Salida
Mario Medina C.
/
• Modulo 2Definiciones, Control de flujoEstructuras de datos, FuncionesManejo de vectores y matrices, Punteros
Contenidos
• Modulo 3Argumentos por valor, Argumentos por referenciaManejo de memoria, DepuraciónArgumentos de línea de comandos, Funciones de tiempog pListas enlazadas, Manejo archivos, Macros
Evaluaciones
• 3 Exámenes de Programación (Acumulativos)Modulo 1 - 25%Modulo 2 - 35%Modulo 3 - 40%
Mario Medina C.
• No se contempla examen de recuperaciónEn caso de existir, reemplazará peor calificación
Política de copias
• Copia en un examen1 para todos los involucrados
“Se me perdió el pendrive”“Se me olvidó la tarea en un PC del laboratorio”
Mario Medina C.
Se me olvidó la tarea en un PC del laboratorio“No sé cómo pasó”
• Copia en el segundo examen1 en la asignatura
Bibliografía a usar
Escójala Ud.!
Mario Medina C.
Pero qué texto escojo?
Ot t t t i l
• Curso no tiene texto guíaLibro clásico: B. Kernighan y D. Ritchie, “El lenguaje de programación C”, 2da. Edición
“El nuevo testamento”
Mario Medina C.
• Otros apuntes y tutoriales“Aprenda lenguaje ANSI C comosi estuviera en primero”http://c.conclase.netApuntes C, Ricardo Sanchez.Google!
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 3
Objetivos del curso
• Aprender a programar• Aprender sobre estructuras de datos• Aprender sobre algoritmos
Mario Medina C.
• Aprender a escribir programas• Aprender lenguaje C
Lenguajes de programación
• Objetivo: indicarle al computador lo que deseamos que haga
• “Calcula el promedio de las tareas”L j t l
Mario Medina C.
Lenguaje naturalComputador no lo entiende!
• Computador sólo entiende código binarioSecuencia de 1s y 0s00110110111011011 . . . .
Programación de computadores
• Computadores sólo hacen lo que se les pide• Operaciones sumamente básicas
Sumar 2 númerosV ifi i d i l 0
Mario Medina C.
Verificar si un dato es igual a 0Saltar de una instrucción a otraProgramar un computador implica expresar la solución a un problema en términos que éste entienda
Programas y algoritmos
• Programa: colección de instrucciones de computador necesarias para resolver un problema determinado
• Algoritmo: método utilizado para resolver el
Mario Medina C.
problemaUn algoritmo dado puede expresarse de miles de maneras, dependiendo del
Lenguaje de programaciónSistema computacionalProgramador
Ejemplo: Es n par ó impar?
• Algoritmo:1. Dividir n por 22. Verificar el resto3 Si es 1 n es impar
Programa en C:if n%2 == 1
printf “Impar\n” ;
else
Mario Medina C.
3. Si es 1, n es impar4. Si es 0, n es par
printf “Par\n” ;
• Cómo pasar del algoritmo al programa?• Brecha linguística
Brecha linguística
traducción
Mario Medina C.
• Lenguajes de programación ayudan a cerrar la brecha linguística entre lo que queremos decir y lo que el computador entiende
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 4
Lenguaje natural y lenguaje formal
• Lenguaje naturalUsado para comunicación oral y escritaProducto de evolución, no invención
L g j f l
Mario Medina C.
• Lenguaje formalDiseñado para un propósito específico
Matemáticas: usa lenguaje formal para hablar de relaciones entre símbolos y númerosQuímica: lenguaje formal para átomos y moléculasComputación: lenguaje formal para expresar procedimientos (algoritmos)
Niveles de lenguajes
• Lenguajes de programaciónLenguajes formales para expresar computaciones
• Lenguajes de alto y bajo nivelR l ió l l j d ió l
Mario Medina C.
Relación entre el lenguaje de programación y el lenguaje binario de la máquina
Bajo nivel: correspondencia 1-a-1 entre instrucciones de programa y código binarioAlto nivel: correspondencia 1-a-muchos
Lenguajes de bajo nivel
Lenguaje ensamblador o assemblyEl más cercano al código binarioCorrespondencia 1-a-1
Mario Medina C.
• LOAD R1, Dato
• ADD R1, R2
• MULT R2, R4
• STORE R4, Result
• 0101000100011001• 0101001100010010• 0101110100100100• 0101001001001010
Lenguajes de alto nivel
• Distintos niveles de abstracciónMás lejos de la máquinaMás cerca de las personas
Má fá il d g
Mario Medina C.
• Más fáciles de programar• Portables entre sistemas
Deben ser traducidos a código binarioLenguajes interpretados y compiladosLenguajes mixtos
Lenguajes compilados
CódigoFuente Compilador
CódigoObjeto Enlazador
FuncionesBibliotecas
ProgramaEjecutable
Mario Medina C.
• Compilador traduce código fuente a códigoobjeto
• Ejecutor carga el programa y lo ejecuta
Fuente p Objeto Ejecutable
Ventajas de la compilación
• Ejecución de código es más rápidaTraducción a lenguaje de máquina ya fue hecha
• Código generado es más eficienteC il d i d l ódi l
Mario Medina C.
Compilador tiene acceso a todo el código, lo que facilita la optimización del código
• Principal desventaja es el ciclo de trabajo Editar-Compilar-Depurar
Lento y tedioso
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 5
Algunos lenguajes de alto nivel
• CompiladosCC++FORTRAN
• InterpretadosJavascriptBASICScheme
• MixtosPythonPerlPHP
Mario Medina C.
COBOLPascalC#BASICRuby
MATLABMathematicaSmalltalkMaple
Java
Qué es un programa?
• Secuencia de instrucciones que realizan una computación, que puede ser:
Matemática: maneja númerosSimbólica: maneja texto
Mario Medina C.
Simbólica: maneja texto
• Programar consiste en expresar una tarea grande y compleja en subtareas cada vez más pequeñas, hasta finalmente expresar la tarea usando las instrucciones del computador
Instrucciones de un lenguajecomputacional
• Todo lenguaje computacional posee instrucciones de
Entrada de datosSalida de datos
Mario Medina C.
Salida de datosOperaciones matemáticasVerificación de condicionesRepetición
Qué es la depuración?
• Programación es un proceso complejoErrar es humano!
• Proceso de eliminar errores de un programase llama dep ración (debugging)
Mario Medina C.
se llama depuración (debugging)Consume el 80% del tiempo!
Errores detectados por el compiladorErrores detectados por el ejecutorErrores no detectados!
Sintaxis de un lenguaje
• Todo lenguaje tiene una sintaxisSintaxis: reglas sobre la estructuras válidas en el lenguaje
• Castellano:
Mario Medina C.
Tilde en palabras agudas terminadas en n, s o vocalSustantivos propios llevan mayúsculas
• Lenguaje C:Estudiaremos su sintaxis en este curso
El compilador revisa la sintaxis
• Lenguajes de programación tienen más reglassintácticas que lenguajes hablados
• Compilador interpreta literalmente todo lo escrito
Mario Medina C.
escritoNo perdona errores
Ej: C = A//B;
Entrega mensajes indicando posible causaSaber interpretar estos mensajes
• Errores de tiempo de compilación
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 6
Errores pueden ser detectadosal ejecutar
• Errores de tiempo de ejecución• Error no aparece hasta ejecutar el programa• Ejemplo:
Mario Medina C.
C = A/B;
Código es válidoQué pasa si B = 0?
Programa “se cae” al ejecutarse(A veces) indica que hubo una división por cero
Errores de lógica del programa
• Programa compila y se ejecuta sin problemas• Programa no hace lo que queremos
Pero, programa sólo hace lo que le decimos quehaga!
Mario Medina C.
haga!Error en la lógica del programa
• Depurador ayuda a encontrar errores logicosRequiere bastante intervención humana!
Cómo se ejecuta un programa
Daniel Herrera [email protected]
Primer programa en C
• Primer programa clásicoAlmacenado en archivo hello.c
#include <stdio.h>
int main
printf “hello, world\n” ;
Lenguajes compilados
FuncionesBibliotecas
hello c hello obj
printfdesdestdio.h
hello.exe
Mario Medina C.
CódigoFuente Compilador Código
Objeto EnlazadorProgramaEjecutable
hello.c hello.obj
Programa fuente
• Compuesto por cadenas de caracteres• Almacenado en la memoria del computador
como una secuencia de bytesM i t li l d b tMemoria es vector lineal de bytes1 byte = 8 bits (bit = dígito binario)
• Codificado en ASCII extendido Cada byte tiene un valor numérico
Tabla ASCIIExpresado en bases 10, 16 y 8
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 7
Código ASCII
• Texto es almacenado en ASCIIASCII: American Standard Code for Information InterchangeRepresenta mayúsculas minúsculas números yRepresenta mayúsculas, minúsculas, números y caracteres de control usando 7 bits
128 caracteres
• Extendido a 8 bits por IBM, Apple, etc.Representación de lenguajes europeos
• Representación en 16 bits (Unicode)
Tabla ASCII
• 7 bits: b7b6b5b4b3b2b1
• Byte: 8 bits Normalmente, bit 8 es 0
• EjemplosM: 10011012, 7710, 4D16, 1158
j: 11010102, 10610, 6A16, 1528
DEL: 11111112, 12710, 7F16, 1778
• ASCII 0010 a 3110 son caracteres especiales
Programa fuente en memoria
# i n c l u d e SP < s t d i o .
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46
h > \n \n i n t SP m a i n \n
104 62 10 10 105 110 116 32 109 97 105 110 40 41 10 123
\n SP SP SP SP p r i n t f " h e l
10 32 32 32 32 112 114 105 110 116 102 40 34 104 101 108
l o , SP w o r l d \ n " ; \n
108 111 44 32 119 111 114 108 100 92 110 34 41 59 10 125
Programa fuente
• Detalles:Valores ASCII dados en decimalSP indica espacioSP indica espacio\n indica caracter de control de avance de línea (newline)No confundir con \ n, que son dos caracteres diferentes
Cómo ve la memoria la CPU
• CPU ve la memoria como un vector lineal de bytes
Cada byte tiene una dirección asociada
Dirección 0Dirección 1Dirección 2
Un byte
dirección asociadaEs la unidad mínima direccionable
No es posible direccionar un bit
Memoria
(2n bytes)
Dir. 2n-1
Información = bits + contexto
• La secuencia de bits 00110101 11011001 11011110 11000010 puede representar:
Un número enteroUn número decimalUna secuencia de 4 caracteresUna instrucción de código de máquinaUna imagen en blanco y negro
• Toda información se almacena como bitsSignificado depende del contexto
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 8
El Computador
MemoriaRAM
PuenteI/O
Interfaz de Bus
ALU
Registros
CPU
Bus de sistema Bus de Memoria
PC
ControladorDisco
AdaptadorGráfico
ControladorUSB
Mouse Teclado PantallaDisco
Bus de E/S
Ranuras de Expansión
Programa ejecutable
Elementos de un Computador
• CPUUnidad Aritmética/Lógica (ALU)Registros
• Entrada/SalidaControlador USB
MouseTeclado
T j t G áfiContador de Programa (PC)
• Memoria RAMTransferencia de datos sólo entre CPU y RAM
• Buses
Tarjeta GráficaPantalla
Controlador de discoDiscos magnéticosDiscos ópticos
Interfaz Redes
Leyendo el Teclado
MemoriaRAM
PuenteI/O
Interfaz de Bus
ALU
Registros
CPU
Bus de sistema Bus de Memoria
PC
“hello”
ControladorDisco
AdaptadorGráfico
ControladorUSB
Mouse Teclado Pantalla
Disco
Bus de E/S
Ranuras de Expansión
Programa Ejecutable
“hello”Usuario escribe “hello”
Leyendo el teclado
• Usuario escribe “hello”• Intérprete de comandos recibe los caracteres
y los carga en registros de CPU• Luego, los caracteres son almacenados en
memoria RAM• La tecla “enter” indica al intérprete que se
terminó de escribir un comando
Carga del programa
MemoriaRAM
PuenteI/O
Interfaz de Bus
ALU
Registros
CPU
Bus de sistema Bus de Memoria
PC
“hello”
ControladorDisco
AdaptadorGráfico
ControladorUSB
Mouse Teclado Pantalla
Disco
Bus de E/S
Ranuras de Expansión
Programa Ejecutable
“hello”
Carga del programa
• El intérprete de comandos solicita al sistema operativo la ejecución del programa “hello”
• El sistema operativo localiza el programa en disco y lo carga en memoria RAMdisco y lo carga en memoria RAM
No hay intervención de la CPU Transferencia de datos via DMA
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 9
Escribiendo a pantalla
MemoriaRAM
PuenteI/O
Interfaz de Bus
ALU
Registros
CPU
Bus de sistema Bus de Memoria
PC
“hello”
ControladorDisco
AdaptadorGráfico
ControladorUSB
Mouse Teclado Pantalla
Disco
Bus de E/S
Ranuras de Expansión
Programa Ejecutable
“hello”“hello, world\n”
Escribiendo a pantalla
• La CPU lee secuencialmente el programa “hello” en memoria RAM, y ejecuta las instrucciones leídas
• La ejecución del programa consiste en• La ejecución del programa consiste en desplegar el mensaje “hello, world\n” en la pantalla, por lo que la CPU envía los caracteres correspondientes al adaptador gráfico
En resumen
• Archivos se almacenan en disco
Discos magnéticosDiscos ópticos
• Sistema operativoWindows, Linux, Mac OS XInterpreta comandos del usuario
Memorias flash
• Programas se ejecutan en memoria
Transferencias disco ⇔memoriaCargador (loader)
Invoca aplicacionesCompiladorEditorCargador
Interactúa con el hardware
Álgebra binaria
Daniel Herrera [email protected]
Números en base 10
• Base usada día a día• 10 dígitos• Notación posicional
Valor del dígito dado por la posición123410 = 1000 + 200 + 30 + 4123410 = 1 • 103 + 2 • 102 + 3 • 101 + 4 • 100
3.45810 = 3•100 + 4•10-1 + 5•10-2 + 8•10-3
Porqué usar base 2?
• Computadores digitales usan base 2Toda información se traduce a código binarioFácil detección de estadosFácil de implementarFácil de implementar
Sólo requiere 2 dígitos: 0 y 1Compuerta está abierta / cerradaCorriente circula / no circulaTransistor conduce / no conduce
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 10
Números en base 2
• Sólo 2 dígitos, 0 y 1• Valor del dígito dado por la posición
110012 = 100002 + 10002 + 12
11001 1 24 1 23 1 20110012 = 1 • 24 + 1 • 23 + 1 • 20
110012 = 16 + 8 + 1 = 25
• Operaciones aritméticas: +, -, *• Operaciones lógicas: AND, OR, XOR
Números en base 16
• Equivalente a base 2Representación más fácil y compactaUsa dígitos 0-9, A-F36F0 3 • 163 + 6 • 162 + 15 • 161 1406436F016 = 3 • 163 + 6 • 162 + 15 • 161 = 1406410
• Fácil conversión entre base 2 y base 160011 1101 1010 01102 = 3DA616
Agrupar bits de derecha a izquierda de 4 en 4
Representación binaria y hexadecimalDecimal Hexa Binario Decimal Hexa Binario
0 0 0000 8 8 10001 1 0001 9 9 10012 2 0010 10 A 10102 2 0010 10 A 10103 3 0011 11 B 10114 4 0100 12 C 11005 5 0101 13 D 11016 6 0110 14 E 11107 7 0111 15 F 1111
Números en base 8
• Equivalente a base 2Representación más fácil y compactaUsa dígitos 0-73670 3 • 83 + 6 • 82 + 7 • 81 197636708 = 3 • 83 + 6 • 82 + 7 • 81 = 197610
• Fácil conversión entre base 2 y base 8001 101 010 1102 = 15268
Agrupar bits de derecha a izquierda de 3 en 3
Representación binaria y octal
Decimal Octal Binario Decimal Octal Binario
0 0 000 8 10 001 0001 1 001 9 11 001 0012 2 010 10 12 001 0102 2 010 10 12 001 0103 3 011 11 13 001 0114 4 100 12 14 001 1005 5 101 13 15 001 1016 6 110 14 16 001 1107 7 111 15 17 001 111
Potencias de 2• 20 = 1• 21 = 2• 22 = 4• 23 = 8• 24 = 16
• 29 = 512• 210 = 1024 (1 Kilo)• 220 = 1024K (1 Mega)• 230 = 1024M (1 Giga)• 240 = 1024G (1 Tera)• 24 = 16
• 25 = 32• 26 = 64• 27 = 128• 28 = 256
• 240 = 1024G (1 Tera)• 250 = 1024T (1 Peta)• 260 = 1024P (1 Eta)• 270 = 1024E (1 Zetta)• 280 = 1024Z (1 Yotta)
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 11
Conversión de base 10 a base 2
• Divisiones sucesivasProceso termina cuandoresultado es 0Retener los restos de las divisiones
• Convertir 28910 a base 2289:2 = 144 + 1/2144:2 = 72 + 0/2
72:2 = 36 + 0/236 2 18 0/2las divisiones
El primer restocalculado es el bit menos significativo b0
• Cómo convertir de base 10 a otras bases?
36:2 = 18 + 0/218:2 = 9 + 0/29:2 = 4 + 1/24:2 = 2 + 0/22:2 = 1 + 0/21:2 = 0 + 1/2
• Resultado: 1001000012
• Proceso de multiplicaciones sucesivas Proceso termina cuando la precisión del resultado es equivalente
• Ejemplo: convertir 0 788 a base 2
Conversión de fracciones
• Ejemplo: convertir 0.78810 a base 2Precisión original: 10-3
Precisión deseada: 2-x
Se busca el entero superior: x = 10
96.92log
10log3 ==x
Conversión de fracciones
• Multiplicaciones sucesivas
Procesa termina cuando se alcanza la precisión buscada
• Convertir 0.78810 a base 20.788*2 = 1.576 = 1 + 0.5760.576*2 = 1.152 = 1 + 0.1520.152*2 = 0.304 = 0 + 0.3040 304*2 0 608 0 0 608precisión buscada
El primer rebalse calculado es el bit más significativo b-1
• Resultado es 11001001002
0.304*2 = 0.608 = 0 + 0.6080.608*2 = 1.216 = 1 + 0.2160.216*2 = 0.432 = 0 + 0.4320.432*2 = 0.864 = 0 + 0.8640.864*2 = 1.728 = 1 + 0.7280.728*2 = 1.456 = 0 + 1.4560.456*2 = 0.912 = 0 + 0.912
Prefijos estándar IEC
• No confundir 1 Kilo (1000) con 1 Kilo (1024)1 Kilo de papas = 1000 gramos = 103 gramos1 Kilo de bytes = 1024 bytes = 210 bytesEn computación Kilo se usa para 1024En computación, Kilo se usa para 1024
• Prefijos estándares IEC210: Kibi (Ki) 220: Mebi (Mi) 230: Gibi (Gi) 240: Tebi (Ti)
Operaciones aritméticas suma y multiplicación
• Suma de dígitos binarios
0 + 0 = 00 + 1 = 11 + 0 1
• Multiplicación de dígitos binarios
0 • 0 = 00 • 1 = 01 0 01 + 0 = 1
1 + 1 = 10Esta última suma genera un “acarreo”
1 • 0 = 01 • 1 = 1
Operaciones lógicas AND y OR
• AND (^)Es 1 si ambos bits son 10 ^ 0 = 00 ^ 1 = 01 ^ 0 0
• OR (v)Es 1 si al menos 1 bit es 10 v 0 = 00 v 1 = 11 0 11 ^ 0 = 0
1 ^ 1 = 11 v 0 = 11 v 1 = 1OR “inclusivo”
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 12
Operaciones lógicas XOR y NEXOR
• XOR (OR Exclusivo)Es 1 si sólo 1 bit es 1O bien, es 1 si ambos bits son distintos0 XOR 0 = 0
• NEXOREs 1 si ambos bits son iguales0 NEXOR 0 = 10 NEXOR 1 = 00 XOR 0 = 0
0 XOR 1 = 11 XOR 0 = 11 XOR 1 = 0
0 NEXOR 1 = 01 NEXOR 0 = 01 NEXOR 1 = 1
Uso de máscaras de bits para saber el valor de un bit
• Cómo saber si el 3er. bit de A es 1?Bits se numeran de derecha a izquierda, comenzandocon 0
Solución: AND de A con una máscaraA a7a6a5a4a3a2a1a0
AND 0 0 0 0 1 0 0 00 0 0 0 a3 0 0 0
Ahora, comparar resultado con 0
Uso de máscaras de bits para fijar valores
• Cómo hacer 1 el 3er. bit de A?Solución: OR de A con una máscaraA a7a6a5a4a3a2a1a0
OR 0 0 0 0 1 0 0 0a7a6a5a41 a2a1a0a7a6a5a41 a2a1a0
• Cómo hacerlo 0?Solución: AND de A con una máscaraA a7a6a5a4a3a2a1a0
AND 1 1 1 1 0 1 1 1a7a6a5a40 a2a1a0
Rango de representación de n bits
• Número binario de n bits puede representar 2n números enteros, de 0 a 2n –1
4 bits: 0 – 158 bits: 0 2558 bits: 0 – 255
16 bits: 0 – 6553524 bits: 0 – 16777215Qué pasa con los números negativos?
Notación complemento a 2
Notación complemento a 2: [n]2
• Codificación usada para representar números con signo
• Número de n bits representa 2n-1 números positivos y 2n-1 números negativospositivos y 2 números negativos
Rango: -2n-1 a (2n-1 – 1)4 bits: -8 a 78 bits: -128 a 127
16 bits: -32768 a 32767
Representación de números con signo
• 4 bits pueden representar 16 valores
01112 = 710
00002 = 010
1111 1
• 8 bits pueden representar 256 valores
011111112 = 12710
000000002 = 010
11111111 111112 = -110
10002 = -810
111111112 = -110
100000002 = -12810
• En notación con signo usando complemento a 2, 01….11 es siempre 2n-1-1, 11……11 es siempre –1 y 10….00 es siempre –2n-1
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 13
Representación de números negativos complemento a 2Decimal Binario Decimal Binario
-8 1000 0 0000-7 1001 1 00016 1010 2 0010-6 1010 2 0010
-5 1011 3 0011-4 1100 4 0100-3 1101 5 0101-2 1110 6 0110-1 1111 7 0111
Rango de números en notación con signo
• Bit más significativo indica el signo0: positivo1: negativo
E t bit d t• Entonces, n bits pueden representar2n enteros positivos, (notación sin signo)2n-1 enteros positivos y 2n-1 enteros negativos (notación con signo)
0 es un entero positivoBit más significativo indica el signo
Conversión a complemento a 2
• Cómo convertir un número a su complemento a 2?
1. Copiar el número de derecha a izquierda hasta1. Copiar el número de derecha a izquierda hasta encontrar el primer 1.
2. Luego, invertir el resto de los bits410 = 01002 → 11002 = -410
011011011002 → 100100101002
Negación de bits
• También llamado Complemento a 1: (n)2
• Consiste en invertir todos los bits de una secuencia
0 10 → 11 → 0~0010101102 = 1101010012
Relación entre complemento a 1 y complemento a 2
• Complemento a 2 de n es equivalente a obtener complemento a 1 y sumar 1
[n]2 = (n)2 + 1[1001011] = (1001011) + 1[1001011]2 = (1001011)2 + 1
= 0110100 + 1= 0110101
Porqúe usar complemento a 2?
• Complemento a 2 simplifica la resta de números binarios
• Convierte la resta de dos números en una sumasuma
• X2 – Y2 = X2 + [Y]2Pero, hay dos casos dependiendo de la presencia de rebalses
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 14
Cómo se resta usando complemento a 2?
• 1110112 – 1001102 es equivalente a sumar 1110112 + [100110]2
1110112 + [100110]2 es 1110112 + 0110102 lo que es igual a 10101012que es igual a 10101012
Hubo un rebalse, por lo que 0101012 es el resultado correcto y el rebalse se ignoraComprobación: 1110112 – 1001102 , lo que es 5910 – 3810 = 2110 que en base 2 es 101012
Qué pasa si no hay rebalse?
• 1001102 – 1110112 es equivalente a sumar 1001102 + [111011]2
Esto es 1001102 + 0001012 lo que da 1010112
No hubo rebalse: el resultado correcto es elNo hubo rebalse: el resultado correcto es el complemento del resultado con signo negativo, es decir,- [101011]2 = -0101012
Comprobación: 1001102 – 1110112, lo que es 3810 – 5910 = -2110 que en base 2 es -101012
Desplazamiento de bits
• Desplazamiento a la izquierdaEquivalente a multiplicar por 2
01102 → 11002 (610 → 1210)01012 → 10102 (510 → 1010)01012 → 10102 (510 → 1010)
• Desplazamiento a la derechaEquivalente a dividir por 2
01102 → 00112 (610 → 310)01012 → 00102 (510 → 210)
División aproxima resultados a entero inferior
División mediante desplazamiento
• Desplazamiento lógico enteros positivos
11102 → 01112 (1410 → 710)10012 → 01002 (910 → 410)10012 → 01002 (910 → 410)
enteros con signo11102 → 01112 (-210 → 710)10012 → 01002 (-710 → 410)
Se pierde el signo!
División mediante desplazamiento
• Desplazamiento aritméticoenteros positivos
01102 → 00112 (610 → 310)01012 → 00102 (510 → 210)01012 → 00102 (510 → 210)
enteros con signo11102 → 11112 (-210 → -110)10012 → 11002 (-710 → -410)
Se conserva el signo!
El lenguaje de programación C
Daniel Herrera [email protected]
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 15
Introducción al lenguaje C
• Uno de los lenguajes de programación más usados
Alto nivel“Cercano a la máquina”Cercano a la máquinaProgramador tiene control sobre el computadorUsado para tanto para sistemas operativos como para aplicaciones
Eficiencia Portabilidad
Historia
• C fue creado porDennis M. Ritchie
Bell LabsEntre 1969 y 1973Entre 1969 y 1973
Brian Kernighan y Dennis Ritchie, “El lenguaje de programación C”, Prentice-Hall, 1978
Describe informalmente la primera versión del lenguajeEl “antiguo testamento”
Historia
• C desciende deBCPL B (BCPL en 8KB)
U d ibi l i t ti UNIX• Usado para escribir el sistema operativo UNIX• Desarrollado en computadores
DEC PDP-7DEC PDP-11
Historia
Dennis Ritchie y Ken
Thompson desarrollando
UNIX en un PDP-11
Historia
• American National Standards Institute genera comité X3J11 para estandarizar lenguaje C
ANSI C estándar X3.159-1989 (C89)
Adoptado por la International Standards• Adoptado por la International Standards Organization como ISO/IEC 9899:1990 (C90)
Básicamente igual a C89Versión más usada
Historia
• El lenguaje de programación C”, 2da. Ed. Publicado en 1988Describe ANSI CEl “nuevo testamento”El “nuevo testamento”
• Revisión del estándar ISO ISO 9899:1999
Conocido como C99Agrega tipos de datos como long long, _BoolAgrega nuevas bibliotecas y funciones
Taller de Programacion en C 2008-2 2-2008
© Daniel Herrera P. 16
Lenguaje de programación C
• Lenguaje proceduralOrientado a las funciones
• Conjunto básico de funcionesF i l j i bibliFunciones complejas vienen en bibliotecas
• Es fácil escribir un compilador CGeneralmente es el primer compilador escritopara un computador nuevo
• Compiladores muy buenos disponibles
Escritura de programas en C
• Formato libreInterpretación del código no depende del formato del texto
• Distingue entre mayúsculas y minúsculas• Distingue entre mayúsculas y minúsculas• Permite comentarios entre /* y */• C99: comentarios comienzan con //
/* Este es un comentario */
// Este tambien
Tópicos a tratar en el curso
• Tipos de datos de C• Declaraciones• Proposiciones• Operadores
• Funciones• Manejo de memoria• Preprocesador• Funciones de E/S• Operadores
• Punteros• Vectores• Ristras de caracteres
• Funciones de E/S• Estructuras de datos• . . . .