Taller de Programación en C 550380-0 - udec.cldanherrera/Sesion 01.pdf · Taller de Programacion...

16
Taller de Programacion en C 2008-2 2-2008 © Daniel Herrera P. 1 Taller de Programación en C 550380 0 550380-0 Daniel Herrera P. [email protected] 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 clases )Miércoles, 17:10 a 20:00, Lab 2 Sistemas )Jueves, 18:10 a 21:00, Lab 2 Sistemas )Viernes, 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 software )Transparencias )Otros materiales Mario Medina C. )Otros materiales )Notas )Foros 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 laboratorio )Experiencias 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 InfoAlumno )Instalado en los laboratorios de la Facultad de Ingeniería Otros compiladores )A su cuenta y riesgo )Tareas serán revisadas usando Dev-C++

Transcript of Taller de Programación en C 550380-0 - udec.cldanherrera/Sesion 01.pdf · Taller de Programacion...

Taller de Programacion en C 2008-2 2-2008

© Daniel Herrera P. 1

Taller de Programación en C

550380 0550380-0Daniel Herrera P.

[email protected]

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• . . . .