Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programacion
Dra. Elisa [email protected]
Facultad de Ingenierıa Mecanica y Electrica (FIME)Universidad Autonoma de Nuevo Leon (UANL)
Verano 2008
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Computadoras y programacion
Variables y tipos de datos
Informacion digital
Operaciones
Estructuras de control
Arreglos y punteros
Librerıas estandares
Entrada y salida
Archivos
Numeros pseudoaleatorios
Mas alla de lo basico
Subrutinas
Tipos propios
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Componentes de una computadora
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Modelos de computacion
Un modelo ideal de computacion es lo de maquinas de accesoaleatorio (ingles: random access machines, Ram).
Un Ram es capaz de manejar numeros enteros de tamanoarbitrario. La estructura de datos de un Ram es un arreglo deregistros R0,R1,R2, . . ., cada uno con capacidad de un enterocualquiera, posiblemente negativo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programa Ram
Un programa Ram es una sucesion finita de instrucciones de tipoassembler, Π = (π1, π2, . . . , πm).
La entrada al programa esta guardada en un arreglo finito deregistros de entrada I1, I2, . . . , In.
El primer registro r0 sirve como una acumuladora.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programa Ram
Un programa Ram es una sucesion finita de instrucciones de tipoassembler, Π = (π1, π2, . . . , πm).
La entrada al programa esta guardada en un arreglo finito deregistros de entrada I1, I2, . . . , In.
El primer registro r0 sirve como una acumuladora.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programa Ram
Un programa Ram es una sucesion finita de instrucciones de tipoassembler, Π = (π1, π2, . . . , πm).
La entrada al programa esta guardada en un arreglo finito deregistros de entrada I1, I2, . . . , In.
El primer registro r0 sirve como una acumuladora.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Notacion
◮ j es un numero entero
◮ rj es el contenido actual del registro Rj
◮ ij es el contenido del registro de entrada Ij
◮ x puede ser reemplazado por cualquier de los tres operadoresj , ↑ j o = j
◮ x ′ es el resultado de tal reemplazo
◮ κ es el contador del programa que determina cual instruccionde Π se esta ejecutando
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Instruccion Operando Semantica
READ j r0 := ijREAD ↑ j r0 := irjSTORE j rj := r0STORE ↑ j rrj := r0LOAD x r0 := x ′
ADD x r0 := r0 + x ′
SUB x r0 := r0 − x ′
HALF r0 := ⌊ r02 ⌋
JUMP j κ := j
JPOS j si r0 > 0, κ := j
JZERO j si r0 = 0, κ := j
JNEG j si r0 < 0, κ := j
HALT κ := 0
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Instruccion Operando Semantica
READ j r0 := ijREAD ↑ j r0 := irjSTORE j rj := r0STORE ↑ j rrj := r0LOAD x r0 := x ′
ADD x r0 := r0 + x ′
SUB x r0 := r0 − x ′
HALF r0 := ⌊ r02 ⌋
JUMP j κ := j
JPOS j si r0 > 0, κ := j
JZERO j si r0 = 0, κ := j
JNEG j si r0 < 0, κ := j
HALT κ := 0
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Instruccion Operando Semantica
READ j r0 := ijREAD ↑ j r0 := irjSTORE j rj := r0STORE ↑ j rrj := r0LOAD x r0 := x ′
ADD x r0 := r0 + x ′
SUB x r0 := r0 − x ′
HALF r0 := ⌊ r02 ⌋
JUMP j κ := j
JPOS j si r0 > 0, κ := j
JZERO j si r0 = 0, κ := j
JNEG j si r0 < 0, κ := j
HALT κ := 0
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Instruccion Operando Semantica
READ j r0 := ijREAD ↑ j r0 := irjSTORE j rj := r0STORE ↑ j rrj := r0LOAD x r0 := x ′
ADD x r0 := r0 + x ′
SUB x r0 := r0 − x ′
HALF r0 := ⌊ r02 ⌋
JUMP j κ := j
JPOS j si r0 > 0, κ := j
JZERO j si r0 = 0, κ := j
JNEG j si r0 < 0, κ := j
HALT κ := 0
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Instruccion Operando Semantica
READ j r0 := ijREAD ↑ j r0 := irjSTORE j rj := r0STORE ↑ j rrj := r0LOAD x r0 := x ′
ADD x r0 := r0 + x ′
SUB x r0 := r0 − x ′
HALF r0 := ⌊ r02 ⌋
JUMP j κ := j
JPOS j si r0 > 0, κ := j
JZERO j si r0 = 0, κ := j
JNEG j si r0 < 0, κ := j
HALT κ := 0
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Instruccion Operando Semantica
READ j r0 := ijREAD ↑ j r0 := irjSTORE j rj := r0STORE ↑ j rrj := r0LOAD x r0 := x ′
ADD x r0 := r0 + x ′
SUB x r0 := r0 − x ′
HALF r0 := ⌊ r02 ⌋
JUMP j κ := j
JPOS j si r0 > 0, κ := j
JZERO j si r0 = 0, κ := j
JNEG j si r0 < 0, κ := j
HALT κ := 0
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Configuracion de una Ram
Una configuracion es un par C = (κ,R)
◮ κ es el contador del programa que determina cual instruccionde Π se esta ejecutando
◮ R = {(j1, rj1), (j2, rj2), . . . , (jk , rjk )} es un conjunto finito depares registro-valor
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Pasos de computacion
La configuracion inicial es (1, ∅). Se define una relacion de un paso
(κ,R) → Π, I (κ′,R′) (1)
entre las configuraciones para un programa Ram Π y una entradaI de n instrucciones.
◮ κ′ es el valor nuevo de κ despues de haber ejecutado la instruccionen posicion κ (ojo: no necesariamente κ′ = κ + 1)
◮ R′ es una version posiblemente modificada de R donde algun par(j , x) puede haber sido removido y algun par (j ′, x ′) anadido segunla instruccion en posicion κ del programa Π.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Computacion
Si D es una sucesion finita de enteros, se dice que una maquina deacceso aleatorio compute una funcion φ : D → Z si y solo si paratoda I ∈ D aplica que
(1, ∅) → Π, I ∗(0,R) (2)
ası que (0, φ(I )) ∈ R.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Una Ram que computa la funcion φ(x , y) = |x − y |
La entrada es I = (6, 10); el resultado es φ(I ) = 4.
Programa ConfiguracionREAD 2 (1, ∅)STORE 2 (2, {(0, 10)})READ 1 (3, {(0, 10), (2, 10)})STORE 1 (4, {(0, 6), (2, 10)})SUB 2 (5, {(0, 6), (2, 10), (1, 6)})JNEG 8 (6, {(0,−4), (2, 10), (1, 6)})HALT (8, {(0,−4), (2, 10), (1, 6)})LOAD 2 (9, {(0, 10), (2, 10), (1, 6)})SUB 1 (10, {(0, 4), (2, 10), (1, 6)})HALT (0, {(0, 4), (2, 10), (1, 6)})
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tiempo de ejecucion
La ejecucion de cada instruccion cuenta como un paso decomputacion.
La abstraccion normalmente considera la sumacion de enterosgrandes como es algo que no se puede hacer rapidamente.
Tambien hay que tomar en cuenta que multiplicacion noesta incluida como instruccion y que se implementa por sumacionrepetida.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tiempo de ejecucion
La ejecucion de cada instruccion cuenta como un paso decomputacion.
La abstraccion normalmente considera la sumacion de enterosgrandes como es algo que no se puede hacer rapidamente.
Tambien hay que tomar en cuenta que multiplicacion noesta incluida como instruccion y que se implementa por sumacionrepetida.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tiempo de ejecucion
La ejecucion de cada instruccion cuenta como un paso decomputacion.
La abstraccion normalmente considera la sumacion de enterosgrandes como es algo que no se puede hacer rapidamente.
Tambien hay que tomar en cuenta que multiplicacion noesta incluida como instruccion y que se implementa por sumacionrepetida.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tamano de entrada
El tamano de la entrada se considera en logaritmos.
Sea bi una representacion binaria del valor absoluto un entero i sinceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para elsigno.
El largo del entero en el contexto Ram es el numero de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de losenteros en estos terminos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tamano de entrada
El tamano de la entrada se considera en logaritmos.
Sea bi una representacion binaria del valor absoluto un entero i sinceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para elsigno.
El largo del entero en el contexto Ram es el numero de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de losenteros en estos terminos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tamano de entrada
El tamano de la entrada se considera en logaritmos.
Sea bi una representacion binaria del valor absoluto un entero i sinceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para elsigno.
El largo del entero en el contexto Ram es el numero de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de losenteros en estos terminos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tamano de entrada
El tamano de la entrada se considera en logaritmos.
Sea bi una representacion binaria del valor absoluto un entero i sinceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para elsigno.
El largo del entero en el contexto Ram es el numero de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de losenteros en estos terminos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tamano de entrada
El tamano de la entrada se considera en logaritmos.
Sea bi una representacion binaria del valor absoluto un entero i sinceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para elsigno.
El largo del entero en el contexto Ram es el numero de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de losenteros en estos terminos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programa eficiente
Se dice que un programa Ram Π computa una funcion φ : D → Z
en tiempo f (n) donde f : N+ → N
+ si y solo si para toda I ∈ D
aplica que(1, ∅) → Π, I k(0,R) (3)
ası que k ≤ f (L(I )).
El programa es eficiente si f (n) es un polinomio.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programa eficiente
Se dice que un programa Ram Π computa una funcion φ : D → Z
en tiempo f (n) donde f : N+ → N
+ si y solo si para toda I ∈ D
aplica que(1, ∅) → Π, I k(0,R) (3)
ası que k ≤ f (L(I )).
El programa es eficiente si f (n) es un polinomio.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programa — terminos generales
Un programa de computadora es una sucesion de operacionalescomputacionales.
El lenguaje de la computadora en el nivel de ejecutar un programase llama lenguaje de maquina y es un conjunto de operaciones muysimples que operan en los contenidos de registros de memoria.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programa — terminos generales
Un programa de computadora es una sucesion de operacionalescomputacionales.
El lenguaje de la computadora en el nivel de ejecutar un programase llama lenguaje de maquina y es un conjunto de operaciones muysimples que operan en los contenidos de registros de memoria.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programa — terminos generales
Un programa de computadora es una sucesion de operacionalescomputacionales.
El lenguaje de la computadora en el nivel de ejecutar un programase llama lenguaje de maquina y es un conjunto de operaciones muysimples que operan en los contenidos de registros de memoria.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programacion
Para facilitar el proceso de construir programas, se ha desarrolladonumerosos lenguajes de programacion de alto nivel para podercomunicar la sucesion deseada de operaciones a la computadora enun nivel mas manejable para los seres humanos.
Un programa escrito en un lenguaje de programacion necesita sercompilado antes de su ejecucion o alternativamente interpretado alejecutar.
El compilador y el interprete son programas (comunmente algocomplejos) que se distribuye como herramientas a losprogramadores.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programacion
Para facilitar el proceso de construir programas, se ha desarrolladonumerosos lenguajes de programacion de alto nivel para podercomunicar la sucesion deseada de operaciones a la computadora enun nivel mas manejable para los seres humanos.
Un programa escrito en un lenguaje de programacion necesita sercompilado antes de su ejecucion o alternativamente interpretado alejecutar.
El compilador y el interprete son programas (comunmente algocomplejos) que se distribuye como herramientas a losprogramadores.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programacion
Para facilitar el proceso de construir programas, se ha desarrolladonumerosos lenguajes de programacion de alto nivel para podercomunicar la sucesion deseada de operaciones a la computadora enun nivel mas manejable para los seres humanos.
Un programa escrito en un lenguaje de programacion necesita sercompilado antes de su ejecucion o alternativamente interpretado alejecutar.
El compilador y el interprete son programas (comunmente algocomplejos) que se distribuye como herramientas a losprogramadores.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Programacion
Para facilitar el proceso de construir programas, se ha desarrolladonumerosos lenguajes de programacion de alto nivel para podercomunicar la sucesion deseada de operaciones a la computadora enun nivel mas manejable para los seres humanos.
Un programa escrito en un lenguaje de programacion necesita sercompilado antes de su ejecucion o alternativamente interpretado alejecutar.
El compilador y el interprete son programas (comunmente algocomplejos) que se distribuye como herramientas a losprogramadores.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Sintaxis y semantica
Los lenguajes de programacion se parecen a idiomas naturales,pero su gramatica, o sea la sintaxis, es muy estricta, el vocabularioes limitado y el significado, o sea la semantica de las expresiones esmuy especıfica.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Sintaxis y semantica
Los lenguajes de programacion se parecen a idiomas naturales,pero su gramatica, o sea la sintaxis, es muy estricta, el vocabularioes limitado y el significado, o sea la semantica de las expresiones esmuy especıfica.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Paradigmas de programacion
◮ Imperativa de procedimientos: Fortran, Cobol, C, ...
◮ Orientada a objetos: Ada, Smalltalk, C++, Java
◮ Funcional: LISP, Scheme, Common LISP, ML
◮ Logica: PROLOG
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Paradigmas de programacion
◮ Imperativa de procedimientos: Fortran, Cobol, C, ...
◮ Orientada a objetos: Ada, Smalltalk, C++, Java
◮ Funcional: LISP, Scheme, Common LISP, ML
◮ Logica: PROLOG
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Paradigmas de programacion
◮ Imperativa de procedimientos: Fortran, Cobol, C, ...
◮ Orientada a objetos: Ada, Smalltalk, C++, Java
◮ Funcional: LISP, Scheme, Common LISP, ML
◮ Logica: PROLOG
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Paradigmas de programacion
◮ Imperativa de procedimientos: Fortran, Cobol, C, ...
◮ Orientada a objetos: Ada, Smalltalk, C++, Java
◮ Funcional: LISP, Scheme, Common LISP, ML
◮ Logica: PROLOG
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Paradigmas de programacion
◮ Imperativa de procedimientos: Fortran, Cobol, C, ...
◮ Orientada a objetos: Ada, Smalltalk, C++, Java
◮ Funcional: LISP, Scheme, Common LISP, ML
◮ Logica: PROLOG
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Paradigmas de programacion
◮ Imperativa de procedimientos: Fortran, Cobol, C, ...
◮ Orientada a objetos: Ada, Smalltalk, C++, Java
◮ Funcional: LISP, Scheme, Common LISP, ML
◮ Logica: PROLOG
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Paradigmas de programacion
◮ Imperativa de procedimientos: Fortran, Cobol, C, ...
◮ Orientada a objetos: Ada, Smalltalk, C++, Java
◮ Funcional: LISP, Scheme, Common LISP, ML
◮ Logica: PROLOG
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Paradigmas de programacion
◮ Imperativa de procedimientos: Fortran, Cobol, C, ...
◮ Orientada a objetos: Ada, Smalltalk, C++, Java
◮ Funcional: LISP, Scheme, Common LISP, ML
◮ Logica: PROLOG
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Vocabulario de ANSI-C
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Las mayusculas y las minusculas son letras distintas en C.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Vocabulario de ANSI-C
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Las mayusculas y las minusculas son letras distintas en C.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Programar?
◮ definir
◮ planificar
◮ disenar
◮ implementar
◮ experimentar
◮ validar
◮ documentar
◮ mantener
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Programar?
◮ definir
◮ planificar
◮ disenar
◮ implementar
◮ experimentar
◮ validar
◮ documentar
◮ mantener
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Programar?
◮ definir
◮ planificar
◮ disenar
◮ implementar
◮ experimentar
◮ validar
◮ documentar
◮ mantener
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Programar?
◮ definir
◮ planificar
◮ disenar
◮ implementar
◮ experimentar
◮ validar
◮ documentar
◮ mantener
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Programar?
◮ definir
◮ planificar
◮ disenar
◮ implementar
◮ experimentar
◮ validar
◮ documentar
◮ mantener
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Programar?
◮ definir
◮ planificar
◮ disenar
◮ implementar
◮ experimentar
◮ validar
◮ documentar
◮ mantener
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Programar?
◮ definir
◮ planificar
◮ disenar
◮ implementar
◮ experimentar
◮ validar
◮ documentar
◮ mantener
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Programar?
◮ definir
◮ planificar
◮ disenar
◮ implementar
◮ experimentar
◮ validar
◮ documentar
◮ mantener
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Algoritmos y estructuras de datos
Algoritmo = un metodo de solucion sistematica que da unresultado para un problema especıfico dada una instancia delproblema.
Estructura de datos = una manera de manejar los datos tal que segarantiza operaciones de acceso o modificacion sistematica de losdatos contenidos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Algoritmos y estructuras de datos
Algoritmo = un metodo de solucion sistematica que da unresultado para un problema especıfico dada una instancia delproblema.
Estructura de datos = una manera de manejar los datos tal que segarantiza operaciones de acceso o modificacion sistematica de losdatos contenidos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Algoritmos y estructuras de datos
Algoritmo = un metodo de solucion sistematica que da unresultado para un problema especıfico dada una instancia delproblema.
Estructura de datos = una manera de manejar los datos tal que segarantiza operaciones de acceso o modificacion sistematica de losdatos contenidos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Buen algoritmo?
◮ rapido
◮ resultado correcto
◮ uso bajo de memoria
◮ la ejecucion xtermina
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Buen algoritmo?
◮ rapido
◮ resultado correcto
◮ uso bajo de memoria
◮ la ejecucion xtermina
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Buen algoritmo?
◮ rapido
◮ resultado correcto
◮ uso bajo de memoria
◮ la ejecucion xtermina
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Buen algoritmo?
◮ rapido
◮ resultado correcto
◮ uso bajo de memoria
◮ la ejecucion xtermina
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
int main(int c, char ∗ ∗ a)
El metodo main es el punto de entrada al programa desde la lıneade instrucciones del sistema operativo.
main toma dos parametros: el numero de parametros de lınea deinstrucciones y un arreglo (en forma de puntero) de cadenas desımbolos que contienen aquellos parametros.
El primer parametro (a[0]) en C siempre es el nombre delejecutable mismo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
int main(int c, char ∗ ∗ a)
El metodo main es el punto de entrada al programa desde la lıneade instrucciones del sistema operativo.
main toma dos parametros: el numero de parametros de lınea deinstrucciones y un arreglo (en forma de puntero) de cadenas desımbolos que contienen aquellos parametros.
El primer parametro (a[0]) en C siempre es el nombre delejecutable mismo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
int main(int c, char ∗ ∗ a)
El metodo main es el punto de entrada al programa desde la lıneade instrucciones del sistema operativo.
main toma dos parametros: el numero de parametros de lınea deinstrucciones y un arreglo (en forma de puntero) de cadenas desımbolos que contienen aquellos parametros.
El primer parametro (a[0]) en C siempre es el nombre delejecutable mismo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
int main(int c, char ∗ ∗ a)
El metodo main es el punto de entrada al programa desde la lıneade instrucciones del sistema operativo.
main toma dos parametros: el numero de parametros de lınea deinstrucciones y un arreglo (en forma de puntero) de cadenas desımbolos que contienen aquellos parametros.
El primer parametro (a[0]) en C siempre es el nombre delejecutable mismo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Herramientas
Para escribir el codigo, en este curso utilizamos todos el editor
Emacs. Se abre en el terminal con la instruccion emacs odirectamente a un archivo con emacs prog.c.
Compilamos en la lınea de instrucciones (no a traves de Emacs,aunque se podrıa) usando el compilador de C de Gnu, gcc.
A gcc pasamos como argumentos los nombres de los archivos decodigo que queremos compilar.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Herramientas
Para escribir el codigo, en este curso utilizamos todos el editor
Emacs. Se abre en el terminal con la instruccion emacs odirectamente a un archivo con emacs prog.c.
Compilamos en la lınea de instrucciones (no a traves de Emacs,aunque se podrıa) usando el compilador de C de Gnu, gcc.
A gcc pasamos como argumentos los nombres de los archivos decodigo que queremos compilar.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Herramientas
Para escribir el codigo, en este curso utilizamos todos el editor
Emacs. Se abre en el terminal con la instruccion emacs odirectamente a un archivo con emacs prog.c.
Compilamos en la lınea de instrucciones (no a traves de Emacs,aunque se podrıa) usando el compilador de C de Gnu, gcc.
A gcc pasamos como argumentos los nombres de los archivos decodigo que queremos compilar.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Variable
Una variable es efectivamente un espacio en la memoria de lacomputadora al cual se puede asignar un valor.
La asignacion puede tomar el valor de un constante o el valor deotra variable.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Variable
Una variable es efectivamente un espacio en la memoria de lacomputadora al cual se puede asignar un valor.
La asignacion puede tomar el valor de un constante o el valor deotra variable.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Asignacion
En pseudocodigo, tıpicamente se denota por :=.
a := 0,34
Las asignaciones se realiza de la derecha hacia la izquierda y laasignacion en sı se evalua al valor asignado.
a := b := c
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Asignacion
En pseudocodigo, tıpicamente se denota por :=.
a := 0,34
Las asignaciones se realiza de la derecha hacia la izquierda y laasignacion en sı se evalua al valor asignado.
a := b := c
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Asignacion
En pseudocodigo, tıpicamente se denota por :=.
a := 0,34
Las asignaciones se realiza de la derecha hacia la izquierda y laasignacion en sı se evalua al valor asignado.
a := b := c
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Tipos de datos
Los contenidos posibles de una variable dependen de la cantidad deespacio que tiene reservado en la memoria.
Este espacio tıpicamente se determina por definir el tipo de datode la variable.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Tipos de datos
Los contenidos posibles de una variable dependen de la cantidad deespacio que tiene reservado en la memoria.
Este espacio tıpicamente se determina por definir el tipo de datode la variable.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Bit
El bit es la unidad basica de informacion digital. Un bit es unavariable binaria: tiene dos valores posibles que se interpreta comolos valores logicos “verdad” (1) y “falso” (0).
En la memoria de una computadora, se expresa los numerosenteros con sumas de potencias de dos, empezando con la potenciamas grande que quepa en el numero e iterando hasta llegar a lasuma correcta.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Potencias de dos
0
20
40
60
80
100
120
140
0 1 2 3 4 5 6 7 1
100
10000
1e+06
1e+08
1e+10
1e+12
1e+14
1e+16
1e+18
1e+20
0 10 20 30 40 50 60
Figura: Graficas de las potencias de dos: a la izquierda, con ejes linealeshasta x = 7, y a la derecha, con ejes de escala logarıtmica hasta x = 64.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Representacion binaria
Representamos la presencia de una cierta potencia con un bit devalor 1 y su ausencia por un bit de valor 0, empezando con lapotencia mas grande presente:
61 = 32 + 29 = 32 + 16 + 13 = 32 + 16 + 8 + 5= 32 + 16 + 8 + 4 + 1= 25 + 24 + 23 + 22 + 20⇒ 111101.
Entonces se necesita seis bits para representar el valor 61.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Representacion binaria
Representamos la presencia de una cierta potencia con un bit devalor 1 y su ausencia por un bit de valor 0, empezando con lapotencia mas grande presente:
61 = 32 + 29 = 32 + 16 + 13 = 32 + 16 + 8 + 5= 32 + 16 + 8 + 4 + 1= 25 + 24 + 23 + 22 + 20⇒ 111101.
Entonces se necesita seis bits para representar el valor 61.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Cantidad de bits necesaria
Por lo general, la cantidad b de bits requeridos para representar unvalor x ∈ Z
+ esta el exponente de la mınima potencia de dosmayor a x ,
b = mınk∈Z
{
k | 2k > x}
. (4)
Para incluir los enteros negativos, se usa un bit auxiliar de signo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Cantidad de bits necesaria
Por lo general, la cantidad b de bits requeridos para representar unvalor x ∈ Z
+ esta el exponente de la mınima potencia de dosmayor a x ,
b = mınk∈Z
{
k | 2k > x}
. (4)
Para incluir los enteros negativos, se usa un bit auxiliar de signo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
21 = 2 220 = 1048 576 240 = 1099 511 627 77622 = 4 221 = 2097 152 241 = 2199 023 255 55223 = 8 222 = 4194 304 242 = 4398 046 511 10424 = 16 223 = 8388 608 243 = 8796 093 022 20825 = 32 224 = 16 777 216 244 = 17 592 186 044 41626 = 64 225 = 33 554 432 245 = 35 184 372 088 83227 = 128 226 = 67 108 864 246 = 70 368 744 177 66428 = 256 227 = 134 217 728 247 = 140 737 488 355 32829 = 512 228 = 268 435 456 248 = 281 474 976 710 656210 = 1024 229 = 536 870 912 249 = 562 949 953 421 312211 = 2048 230 = 1073 741 824 250 = 1125 899 906 842 624212 = 4096 231 = 2147 483 648 251 = 2251 799 813 685 248213 = 8192 232 = 4294 967 296 252 = 4503 599 627 370 496214 = 16 384 233 = 8589 934 592 253 = 9007 199 254 740 992215 = 32 768 234 = 17 179 869 184 254 = 18 014 398 509 481 984216 = 65 536 235 = 34 359 738 368 255 = 36 028 797 018 963 968217 = 131 072 236 = 68 719 476 736 256 = 72 057 594 037 927 936218 = 262 144 237 = 137 438 953 472 257 = 144 115 188 075 855 872219 = 524 288 238 = 274 877 906 944 258 = 288 230 376 151 711 744
239 = 549 755 813 888 259 = 576 460 752 303 423 488
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Byte
El byte es la unidad basica de capacidad de memoria digital. Unbyte (se pronuncia “bait”) es una sucesion de ocho bits. El numeroentero mas grande que se puede guardar en un solo byte es
27 + 26 + 25 + 24 + 23 + 22 + 21 + 20 = 28 − 1 = 255
y entonces, contando cero, son 256 valores posibles por un byte.
Nota que aplica en general la igualdad
2k+1 − 1 =
k∑
i=0
2i . (5)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Byte
El byte es la unidad basica de capacidad de memoria digital. Unbyte (se pronuncia “bait”) es una sucesion de ocho bits. El numeroentero mas grande que se puede guardar en un solo byte es
27 + 26 + 25 + 24 + 23 + 22 + 21 + 20 = 28 − 1 = 255
y entonces, contando cero, son 256 valores posibles por un byte.
Nota que aplica en general la igualdad
2k+1 − 1 =
k∑
i=0
2i . (5)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Kilo, mega, giga, tera, peta...
Un kilobyte es 1,024 bytes, un megabyte es 1,024 kilobytes(1,048,576 bytes) y un gigabyte es 1,024 megabytes(1,073,741,824 bytes).
Normalmente el prefix kilo implica un mil, pero como mil no esningun potencia de dos, eligieron la potencia mas cercana, 210 =1,024, para corresponder a los prefixes.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Kilo, mega, giga, tera, peta...
Un kilobyte es 1,024 bytes, un megabyte es 1,024 kilobytes(1,048,576 bytes) y un gigabyte es 1,024 megabytes(1,073,741,824 bytes).
Normalmente el prefix kilo implica un mil, pero como mil no esningun potencia de dos, eligieron la potencia mas cercana, 210 =1,024, para corresponder a los prefixes.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Enteros: short, int y long
Depende de la maquina que rango tiene cada tipo.
Por definir una variable unsigned, uno ahorra el bit de signo yaumenta el rango maximo al doble de lo que era.
En ANSI-C, el archivo de las definiciones de los rangos de enteroses limits.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Enteros: short, int y long
Depende de la maquina que rango tiene cada tipo.
Por definir una variable unsigned, uno ahorra el bit de signo yaumenta el rango maximo al doble de lo que era.
En ANSI-C, el archivo de las definiciones de los rangos de enteroses limits.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Enteros: short, int y long
Depende de la maquina que rango tiene cada tipo.
Por definir una variable unsigned, uno ahorra el bit de signo yaumenta el rango maximo al doble de lo que era.
En ANSI-C, el archivo de las definiciones de los rangos de enteroses limits.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Rangos de enteros
Tipo Por defecto En el Solaris de PISIS
short [−32,768, 32,767] lo mismounsigned short: ≤ 65,535 lo mismoint [−32,767, 32,767] [−2,147,483,648, ...]unsigned int 65,535 ≤ 4294967295long [−2,147,483,647, ...] lo mismounsigned long ≤ 4,294,967,295 lo mismo
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variablesbinarias (o booleanas). Tıpicamente este tipo se llama boolean obool.
En ANSI-C, cada entero positivo se puede interpretar como“verdad” o “falso”:
no cero = verdad (true en Java)cero = falso (false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variablesbinarias (o booleanas). Tıpicamente este tipo se llama boolean obool.
En ANSI-C, cada entero positivo se puede interpretar como“verdad” o “falso”:
no cero = verdad (true en Java)cero = falso (false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variablesbinarias (o booleanas). Tıpicamente este tipo se llama boolean obool.
En ANSI-C, cada entero positivo se puede interpretar como“verdad” o “falso”:
no cero = verdad (true en Java)cero = falso (false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variablesbinarias (o booleanas). Tıpicamente este tipo se llama boolean obool.
En ANSI-C, cada entero positivo se puede interpretar como“verdad” o “falso”:
no cero = verdad (true en Java)cero = falso (false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variablesbinarias (o booleanas). Tıpicamente este tipo se llama boolean obool.
En ANSI-C, cada entero positivo se puede interpretar como“verdad” o “falso”:
no cero = verdad (true en Java)cero = falso (false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Punto flotante
Para representar numeros reales por computadora, hay que definirhasta que exactitud se guarda los decimales del numero, como elespacio para guardar un numero entero esta limitada a un tamanoconstante que depende unicamente en el tipo de dato elegido.
El metodo comun de lograr tal representacion es lo de punto
flotante (tambien conocido como coma flotante) donde larepresentacion se adapta al orden magnitud del valor x ∈ R.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Punto flotante
Para representar numeros reales por computadora, hay que definirhasta que exactitud se guarda los decimales del numero, como elespacio para guardar un numero entero esta limitada a un tamanoconstante que depende unicamente en el tipo de dato elegido.
El metodo comun de lograr tal representacion es lo de punto
flotante (tambien conocido como coma flotante) donde larepresentacion se adapta al orden magnitud del valor x ∈ R.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Traslado de la coma
La idea es trasladar la coma decimal hacia la posicion de la primeracifra significativa de x mediante un exponente γ:
x = m · bγ ,
m se llama la mantisa y contiene los dıgitos significativos de x .
Es comun normalizar la mantisa tal que su parte entera consta desolamente la primera cifra significativa de x . La mantisatıpicamente tiene un tamano maximo limitado a una ciertacantidad fija de bytes.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Traslado de la coma
La idea es trasladar la coma decimal hacia la posicion de la primeracifra significativa de x mediante un exponente γ:
x = m · bγ ,
m se llama la mantisa y contiene los dıgitos significativos de x .
Es comun normalizar la mantisa tal que su parte entera consta desolamente la primera cifra significativa de x . La mantisatıpicamente tiene un tamano maximo limitado a una ciertacantidad fija de bytes.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Traslado de la coma
La idea es trasladar la coma decimal hacia la posicion de la primeracifra significativa de x mediante un exponente γ:
x = m · bγ ,
m se llama la mantisa y contiene los dıgitos significativos de x .
Es comun normalizar la mantisa tal que su parte entera consta desolamente la primera cifra significativa de x . La mantisatıpicamente tiene un tamano maximo limitado a una ciertacantidad fija de bytes.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Traslado de la coma
La idea es trasladar la coma decimal hacia la posicion de la primeracifra significativa de x mediante un exponente γ:
x = m · bγ ,
m se llama la mantisa y contiene los dıgitos significativos de x .
Es comun normalizar la mantisa tal que su parte entera consta desolamente la primera cifra significativa de x . La mantisatıpicamente tiene un tamano maximo limitado a una ciertacantidad fija de bytes.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Exponente y base
Lo que determina el rango de valores posibles que se puederepresentar en punto flotante es la cantidad de memoria reservadapara el exponente γ ∈ Z.
El parametro b es la base del sistema de representacion. Losnumeros binarios tienen base b = 2 y comunmente en calculoutilizamos b = 10.
Tambien existen sistemas en base b = 8 (el sistema octal) yb = 16 (el sistema hexadecimal).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Exponente y base
Lo que determina el rango de valores posibles que se puederepresentar en punto flotante es la cantidad de memoria reservadapara el exponente γ ∈ Z.
El parametro b es la base del sistema de representacion. Losnumeros binarios tienen base b = 2 y comunmente en calculoutilizamos b = 10.
Tambien existen sistemas en base b = 8 (el sistema octal) yb = 16 (el sistema hexadecimal).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Exponente y base
Lo que determina el rango de valores posibles que se puederepresentar en punto flotante es la cantidad de memoria reservadapara el exponente γ ∈ Z.
El parametro b es la base del sistema de representacion. Losnumeros binarios tienen base b = 2 y comunmente en calculoutilizamos b = 10.
Tambien existen sistemas en base b = 8 (el sistema octal) yb = 16 (el sistema hexadecimal).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Punto fijo
La otra opcion serıa simplemente reservar una cierta cantidad debytespara la representacion y fijar a posicion en la cual se suponeque este la coma decimal.
La representacion de punto fijo es mucho mas restrictiva conrespeto al rango de valores posibles de guardar.
En comparacion, el metodo de punto flotante causa variaciones enla exactitud de la representacion, mientras permite guardar valoresde un rango mucho mas amplio.
En ANSI-C, el archivo con los datos que refinen los rangos estanen el archivo float.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Punto fijo
La otra opcion serıa simplemente reservar una cierta cantidad debytespara la representacion y fijar a posicion en la cual se suponeque este la coma decimal.
La representacion de punto fijo es mucho mas restrictiva conrespeto al rango de valores posibles de guardar.
En comparacion, el metodo de punto flotante causa variaciones enla exactitud de la representacion, mientras permite guardar valoresde un rango mucho mas amplio.
En ANSI-C, el archivo con los datos que refinen los rangos estanen el archivo float.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Punto fijo
La otra opcion serıa simplemente reservar una cierta cantidad debytespara la representacion y fijar a posicion en la cual se suponeque este la coma decimal.
La representacion de punto fijo es mucho mas restrictiva conrespeto al rango de valores posibles de guardar.
En comparacion, el metodo de punto flotante causa variaciones enla exactitud de la representacion, mientras permite guardar valoresde un rango mucho mas amplio.
En ANSI-C, el archivo con los datos que refinen los rangos estanen el archivo float.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Punto fijo
La otra opcion serıa simplemente reservar una cierta cantidad debytespara la representacion y fijar a posicion en la cual se suponeque este la coma decimal.
La representacion de punto fijo es mucho mas restrictiva conrespeto al rango de valores posibles de guardar.
En comparacion, el metodo de punto flotante causa variaciones enla exactitud de la representacion, mientras permite guardar valoresde un rango mucho mas amplio.
En ANSI-C, el archivo con los datos que refinen los rangos estanen el archivo float.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Tipos: float, double, long y double
◮ Tıpicamente se usa la base 2.
◮ La mantisa tiene 24, 53 o 64 dıgitos.
◮ En base 10: [1E-37, 1E+37] en el estandar.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Tipos: float, double, long y double
◮ Tıpicamente se usa la base 2.
◮ La mantisa tiene 24, 53 o 64 dıgitos.
◮ En base 10: [1E-37, 1E+37] en el estandar.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Tipos: float, double, long y double
◮ Tıpicamente se usa la base 2.
◮ La mantisa tiene 24, 53 o 64 dıgitos.
◮ En base 10: [1E-37, 1E+37] en el estandar.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Informacion digital
Tipos: float, double, long y double
◮ Tıpicamente se usa la base 2.
◮ La mantisa tiene 24, 53 o 64 dıgitos.
◮ En base 10: [1E-37, 1E+37] en el estandar.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Aritmetica (ANSI-C etc.)
a = b asignara + b sumara - b restara ∗ b multiplicara / b dividira % b resto de la division
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Aritmetica (ANSI-C etc.)
a = b asignara + b sumara - b restara ∗ b multiplicara / b dividira % b resto de la division
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Aritmetica (ANSI-C etc.)
a = b asignara + b sumara - b restara ∗ b multiplicara / b dividira % b resto de la division
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Aritmetica (ANSI-C etc.)
a = b asignara + b sumara - b restara ∗ b multiplicara / b dividira % b resto de la division
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Aritmetica (ANSI-C etc.)
a = b asignara + b sumara - b restara ∗ b multiplicara / b dividira % b resto de la division
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Aritmetica (ANSI-C etc.)
a = b asignara + b sumara - b restara ∗ b multiplicara / b dividira % b resto de la division
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Parentesis
Se puede (y recomienda) utilizar las parentesis para agruparexpresiones. Cada expresion debe terminar en un punto-coma.
Ejemplo:
a = (b - c) % ((d - 2) ∗ 6);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Parentesis
Se puede (y recomienda) utilizar las parentesis para agruparexpresiones. Cada expresion debe terminar en un punto-coma.
Ejemplo:
a = (b - c) % ((d - 2) ∗ 6);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Parentesis
Se puede (y recomienda) utilizar las parentesis para agruparexpresiones. Cada expresion debe terminar en un punto-coma.
Ejemplo:
a = (b - c) % ((d - 2) ∗ 6);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Comparaciones
== igual!= no igual< menor que> mayor que<= menor o igual que>= mayor o igual que
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Comparaciones
== igual!= no igual< menor que> mayor que<= menor o igual que>= mayor o igual que
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Comparaciones
== igual!= no igual< menor que> mayor que<= menor o igual que>= mayor o igual que
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Comparaciones
== igual!= no igual< menor que> mayor que<= menor o igual que>= mayor o igual que
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Comparaciones
== igual!= no igual< menor que> mayor que<= menor o igual que>= mayor o igual que
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Comparaciones
== igual!= no igual< menor que> mayor que<= menor o igual que>= mayor o igual que
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entero versus punto flotante
Al combinar diferentes tipos de variables o comparar valores devariables de tipos distintos, hay que tener cuidado.
A veces la funcionalidad definida en el lenguaje no corresponde a laintuicion humana...
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tipos de constantes
3.0 es double
3.0f es float
12 es int
12l es long
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tipos de constantes
3.0 es double
3.0f es float
12 es int
12l es long
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tipos de constantes
3.0 es double
3.0f es float
12 es int
12l es long
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tipos de constantes
3.0 es double
3.0f es float
12 es int
12l es long
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tipos de constantes
3.0 es double
3.0f es float
12 es int
12l es long
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Funciones de piso y techo
La funcion piso ⌊x⌋ : R → Z define el numero entero maximo
menor a x ∈ R:⌊x⌋ = max
y∈Z
{y | x ≤ y} . (6)
La funcion techo ⌈x⌉ : R → Z define el numero entero mınimo
mayor a x ∈ R:⌈x⌉ = mın
y∈Z
{y | x ≤ y} . (7)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Funciones de piso y techo
La funcion piso ⌊x⌋ : R → Z define el numero entero maximo
menor a x ∈ R:⌊x⌋ = max
y∈Z
{y | x ≤ y} . (6)
La funcion techo ⌈x⌉ : R → Z define el numero entero mınimo
mayor a x ∈ R:⌈x⌉ = mın
y∈Z
{y | x ≤ y} . (7)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Funcion parte entera
Varios lenguajes de programacion incorporan una manera deconvertir un numero en formato punto flotante a un valor entero.
La funcion que captura esta comportamiento es la funcion parte
entera
[x ] : R → Z. (8)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
En ANSI-C
float a = 3.76;
int b = (int)a;
donde la regla de asignar un valor a la variable b es una mezcla dela funciones piso y techo: denota el valor de la variable a por a. Sia ≥ 0, se asigna a b el valor ⌊a⌋, y cuando a < 0, se asigna a b elvalor ⌈a⌉.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
En ANSI-C
float a = 3.76;
int b = (int)a;
donde la regla de asignar un valor a la variable b es una mezcla dela funciones piso y techo: denota el valor de la variable a por a. Sia ≥ 0, se asigna a b el valor ⌊a⌋, y cuando a < 0, se asigna a b elvalor ⌈a⌉.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Redondeo
El redondeo tıpico de x ∈ R al entero mas proximo es equivalentea [x + 0,5].
Hay que tener mucho cuidado con la operacion de parte entera enprogramacion, como implica perdida de datos.
Acumulando uno despues de otro, los errores de redondeo sepueden amplificar y causar comportamiento no deseado en elprograma.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Redondeo
El redondeo tıpico de x ∈ R al entero mas proximo es equivalentea [x + 0,5].
Hay que tener mucho cuidado con la operacion de parte entera enprogramacion, como implica perdida de datos.
Acumulando uno despues de otro, los errores de redondeo sepueden amplificar y causar comportamiento no deseado en elprograma.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Redondeo
El redondeo tıpico de x ∈ R al entero mas proximo es equivalentea [x + 0,5].
Hay que tener mucho cuidado con la operacion de parte entera enprogramacion, como implica perdida de datos.
Acumulando uno despues de otro, los errores de redondeo sepueden amplificar y causar comportamiento no deseado en elprograma.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Ejemplo
En algunas implementaciones una sucesion instrucciones como
float a = 0.6/0.2;
int b = (int)a;
puede resultar en b asignada al valor 2, porque por larepresentacion binaria de punto flotante de los valores 0,6 y 0,2, sudivision resulta en el valor punto flotante2,999999999999999555910790149937.
Entonces, aplicar la funcion parte entera al valor de la variable a
resulta en el valor 2, aunque la respuesta correcta es 3.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones logicas
Notacion Interpretacion Sımbolo
&& “y” (conjuncion, los dos ambos) ∧|| “o” (disyunccion, uno de los dos) ∨! “no” (negacion) ¬
Tambien con estos es recomendable usar parentesis para agruparlas expresiones bien.
a = (c && (d >= 4)) || (e && !(f != h));
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones logicas
Notacion Interpretacion Sımbolo
&& “y” (conjuncion, los dos ambos) ∧|| “o” (disyunccion, uno de los dos) ∨! “no” (negacion) ¬
Tambien con estos es recomendable usar parentesis para agruparlas expresiones bien.
a = (c && (d >= 4)) || (e && !(f != h));
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones logicas
Notacion Interpretacion Sımbolo
&& “y” (conjuncion, los dos ambos) ∧|| “o” (disyunccion, uno de los dos) ∨! “no” (negacion) ¬
Tambien con estos es recomendable usar parentesis para agruparlas expresiones bien.
a = (c && (d >= 4)) || (e && !(f != h));
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Precedencia
Para los que quieren arriesgarse y no usar parentesis, el orden deprecendencia de los operadores ya mencionados del mas fuerte almas debil:
()
∗ / %
+ -
< <= > >=
== !=
=
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Precedencia
Para los que quieren arriesgarse y no usar parentesis, el orden deprecendencia de los operadores ya mencionados del mas fuerte almas debil:
()
∗ / %
+ -
< <= > >=
== !=
=
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Precedencia
Para los que quieren arriesgarse y no usar parentesis, el orden deprecendencia de los operadores ya mencionados del mas fuerte almas debil:
()
∗ / %
+ -
< <= > >=
== !=
=
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Precedencia
Para los que quieren arriesgarse y no usar parentesis, el orden deprecendencia de los operadores ya mencionados del mas fuerte almas debil:
()
∗ / %
+ -
< <= > >=
== !=
=
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Precedencia
Para los que quieren arriesgarse y no usar parentesis, el orden deprecendencia de los operadores ya mencionados del mas fuerte almas debil:
()
∗ / %
+ -
< <= > >=
== !=
=
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Precedencia
Para los que quieren arriesgarse y no usar parentesis, el orden deprecendencia de los operadores ya mencionados del mas fuerte almas debil:
()
∗ / %
+ -
< <= > >=
== !=
=
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Precedencia
Para los que quieren arriesgarse y no usar parentesis, el orden deprecendencia de los operadores ya mencionados del mas fuerte almas debil:
()
∗ / %
+ -
< <= > >=
== !=
=
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Abreviaciones
Notacion Interpretacion
a += b a = a + b
a -= b a = a - b
a ∗= b a = a ∗ b
a /= b a = a / b
a %= b a = a % b
a++ a = a+1 (al final)a-- a = a-1 (al final)++a a = a+1 (primero)--a a = a-1 (primero)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Letras (char)
Como todo contenido, las letras se guarda como numeros. Elsistema de codificacion basica se llama ASCII y tiene rango [0, 127]— no contiene letras con acentos.(http://www.asciitable.com/)
Tienen su propio tipo de dato char, que es casi un sinonimo deshort.
Muchos lenguajes de programacion inclyuen soporte para otrascodificaciones para poder manerar sımbolos internacionales (comoel Latin-1 o el UTF-8).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Letras (char)
Como todo contenido, las letras se guarda como numeros. Elsistema de codificacion basica se llama ASCII y tiene rango [0, 127]— no contiene letras con acentos.(http://www.asciitable.com/)
Tienen su propio tipo de dato char, que es casi un sinonimo deshort.
Muchos lenguajes de programacion inclyuen soporte para otrascodificaciones para poder manerar sımbolos internacionales (comoel Latin-1 o el UTF-8).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Letras (char)
Como todo contenido, las letras se guarda como numeros. Elsistema de codificacion basica se llama ASCII y tiene rango [0, 127]— no contiene letras con acentos.(http://www.asciitable.com/)
Tienen su propio tipo de dato char, que es casi un sinonimo deshort.
Muchos lenguajes de programacion inclyuen soporte para otrascodificaciones para poder manerar sımbolos internacionales (comoel Latin-1 o el UTF-8).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
ctype.h: rutinas de deteccion
int isalpha(int c) si es una letraint isdigit(int c) si es un dıgitoint islower(int c) si es minusculaint ispunct(int c) si es puntuacionint isspace(int c) si es espacio blandoint isupper(int c) si es mayusculaint tolower(int c) a minusculaint toupper(int c) a mayuscula
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
ctype.h: rutinas de deteccion
int isalpha(int c) si es una letraint isdigit(int c) si es un dıgitoint islower(int c) si es minusculaint ispunct(int c) si es puntuacionint isspace(int c) si es espacio blandoint isupper(int c) si es mayusculaint tolower(int c) a minusculaint toupper(int c) a mayuscula
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
ctype.h: rutinas de deteccion
int isalpha(int c) si es una letraint isdigit(int c) si es un dıgitoint islower(int c) si es minusculaint ispunct(int c) si es puntuacionint isspace(int c) si es espacio blandoint isupper(int c) si es mayusculaint tolower(int c) a minusculaint toupper(int c) a mayuscula
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
ctype.h: rutinas de deteccion
int isalpha(int c) si es una letraint isdigit(int c) si es un dıgitoint islower(int c) si es minusculaint ispunct(int c) si es puntuacionint isspace(int c) si es espacio blandoint isupper(int c) si es mayusculaint tolower(int c) a minusculaint toupper(int c) a mayuscula
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
ctype.h: rutinas de deteccion
int isalpha(int c) si es una letraint isdigit(int c) si es un dıgitoint islower(int c) si es minusculaint ispunct(int c) si es puntuacionint isspace(int c) si es espacio blandoint isupper(int c) si es mayusculaint tolower(int c) a minusculaint toupper(int c) a mayuscula
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
ctype.h: rutinas de deteccion
int isalpha(int c) si es una letraint isdigit(int c) si es un dıgitoint islower(int c) si es minusculaint ispunct(int c) si es puntuacionint isspace(int c) si es espacio blandoint isupper(int c) si es mayusculaint tolower(int c) a minusculaint toupper(int c) a mayuscula
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
ctype.h: rutinas de deteccion
int isalpha(int c) si es una letraint isdigit(int c) si es un dıgitoint islower(int c) si es minusculaint ispunct(int c) si es puntuacionint isspace(int c) si es espacio blandoint isupper(int c) si es mayusculaint tolower(int c) a minusculaint toupper(int c) a mayuscula
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
ctype.h: rutinas de deteccion
int isalpha(int c) si es una letraint isdigit(int c) si es un dıgitoint islower(int c) si es minusculaint ispunct(int c) si es puntuacionint isspace(int c) si es espacio blandoint isupper(int c) si es mayusculaint tolower(int c) a minusculaint toupper(int c) a mayuscula
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones de bits
En ANSI-C, tenemos acceso a los bits de un byte a traves deoperadores especiales:
◮ mover los bits a la izquierda
◮ mover los bits a la derecha
◮ operaciones logicas: y, o, no
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones de bits
En ANSI-C, tenemos acceso a los bits de un byte a traves deoperadores especiales:
◮ mover los bits a la izquierda
◮ mover los bits a la derecha
◮ operaciones logicas: y, o, no
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Multiplicar por dos
Para multiplicar por dos k veces, o sea, multiplicar por 2k , tenemosel operador “empujar a la izquierda k posiciones”:
int i = 5;
i = i << 4;
Salida: 80
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Multiplicar por dos
Para multiplicar por dos k veces, o sea, multiplicar por 2k , tenemosel operador “empujar a la izquierda k posiciones”:
int i = 5;
i = i << 4;
Salida: 80
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Multiplicar por dos
Para multiplicar por dos k veces, o sea, multiplicar por 2k , tenemosel operador “empujar a la izquierda k posiciones”:
int i = 5;
i = i << 4;
Salida: 80
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Dividir” por dos
Para “dividir” por dos k veces, o sea, “dividir” por 2k , tenemos eloperador “empujar a la derecha k posiciones”:
int i = 35;
i = i >> 4;
Salida: 2 — ¡el efecto no es exactamente division por dos!
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Dividir” por dos
Para “dividir” por dos k veces, o sea, “dividir” por 2k , tenemos eloperador “empujar a la derecha k posiciones”:
int i = 35;
i = i >> 4;
Salida: 2 — ¡el efecto no es exactamente division por dos!
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Dividir” por dos
Para “dividir” por dos k veces, o sea, “dividir” por 2k , tenemos eloperador “empujar a la derecha k posiciones”:
int i = 35;
i = i >> 4;
Salida: 2 — ¡el efecto no es exactamente division por dos!
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Mascaras
Creamos una mascara que tiene el bit que nos interesa en uno y losotros bits en cero:
int i = (1 << k);
donde k el ındice del bit que queremos en uno (el “primer” bit esel menos significante).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Mascaras
Creamos una mascara que tiene el bit que nos interesa en uno y losotros bits en cero:
int i = (1 << k);
donde k el ındice del bit que queremos en uno (el “primer” bit esel menos significante).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Mascaras
Creamos una mascara que tiene el bit que nos interesa en uno y losotros bits en cero:
int i = (1 << k);
donde k el ındice del bit que queremos en uno (el “primer” bit esel menos significante).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones logicas binarias
Entrada: dos bits para “y” y “o”, un bit para “no”
Salida: un bit
Espanol Ingles C Efectoy and & (1, 1) 7→ 1, en otro caso 0o or | (0, 0) 7→ 0, en otro caso 1no not ~ 1 7→ 0, 0 7→ 1
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones logicas binarias
Entrada: dos bits para “y” y “o”, un bit para “no”
Salida: un bit
Espanol Ingles C Efectoy and & (1, 1) 7→ 1, en otro caso 0o or | (0, 0) 7→ 0, en otro caso 1no not ~ 1 7→ 0, 0 7→ 1
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones logicas binarias
Entrada: dos bits para “y” y “o”, un bit para “no”
Salida: un bit
Espanol Ingles C Efectoy and & (1, 1) 7→ 1, en otro caso 0o or | (0, 0) 7→ 0, en otro caso 1no not ~ 1 7→ 0, 0 7→ 1
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Operaciones logicas binarias
Entrada: dos bits para “y” y “o”, un bit para “no”
Salida: un bit
Espanol Ingles C Efectoy and & (1, 1) 7→ 1, en otro caso 0o or | (0, 0) 7→ 0, en otro caso 1no not ~ 1 7→ 0, 0 7→ 1
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Forzar” un bit de una variable
Si tenemos una variable y queremos forzar un bit a uno, creamos lamascara para el bit que nos interesa y realizamos una “o”:
mask = (1 << k);
var = (var | mask);
Tambien se puede escribir:
var |= (1 << k);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Forzar” un bit de una variable
Si tenemos una variable y queremos forzar un bit a uno, creamos lamascara para el bit que nos interesa y realizamos una “o”:
mask = (1 << k);
var = (var | mask);
Tambien se puede escribir:
var |= (1 << k);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Forzar” un bit de una variable
Si tenemos una variable y queremos forzar un bit a uno, creamos lamascara para el bit que nos interesa y realizamos una “o”:
mask = (1 << k);
var = (var | mask);
Tambien se puede escribir:
var |= (1 << k);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Aclarar” un bit
Si queremos forzar un bit a cero, necesitamos la operacion “y” yuna mascara complementada donde todos los otros bits son uno yel bit que nos interesa es cero:
int mask = (1 << k);
int compmask = ~mask;
var = var & compmask;
Lo mismo en breve:
var &= ~(1 << k);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Aclarar” un bit
Si queremos forzar un bit a cero, necesitamos la operacion “y” yuna mascara complementada donde todos los otros bits son uno yel bit que nos interesa es cero:
int mask = (1 << k);
int compmask = ~mask;
var = var & compmask;
Lo mismo en breve:
var &= ~(1 << k);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Aclarar” un bit
Si queremos forzar un bit a cero, necesitamos la operacion “y” yuna mascara complementada donde todos los otros bits son uno yel bit que nos interesa es cero:
int mask = (1 << k);
int compmask = ~mask;
var = var & compmask;
Lo mismo en breve:
var &= ~(1 << k);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Condiciones: if else
if (condicion) {codigo para ejecutar si cumple la condicion
} else if (otra condicion) {codigo para ejecutar si cumple esta condicion
} else {codigo para ejecutar si no cumplio ninguna
}
Elegir una de las opciones a ejecutar. La elegida sera la primera lacondicion de cual cumple. La parte “else if” es opcional y puederepertir varias veces. Tambien la parte “else” es opcional, pero nose puede repetir.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Condiciones: if else
if (condicion) {codigo para ejecutar si cumple la condicion
} else if (otra condicion) {codigo para ejecutar si cumple esta condicion
} else {codigo para ejecutar si no cumplio ninguna
}
Elegir una de las opciones a ejecutar. La elegida sera la primera lacondicion de cual cumple. La parte “else if” es opcional y puederepertir varias veces. Tambien la parte “else” es opcional, pero nose puede repetir.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Mini-if”
Para asignar a una variable un valor u otro, dependiendo de unacondicion, se usa el “if chiquito”:
a = (b) ? c : d
Si la condicion b es verdad, se asigna el valor de la expresion c a lavariable a, y si es falso, el valor de la expresion d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Mini-if”
Para asignar a una variable un valor u otro, dependiendo de unacondicion, se usa el “if chiquito”:
a = (b) ? c : d
Si la condicion b es verdad, se asigna el valor de la expresion c a lavariable a, y si es falso, el valor de la expresion d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Mini-if”
Para asignar a una variable un valor u otro, dependiendo de unacondicion, se usa el “if chiquito”:
a = (b) ? c : d
Si la condicion b es verdad, se asigna el valor de la expresion c a lavariable a, y si es falso, el valor de la expresion d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
“Mini-if”
Para asignar a una variable un valor u otro, dependiendo de unacondicion, se usa el “if chiquito”:
a = (b) ? c : d
Si la condicion b es verdad, se asigna el valor de la expresion c a lavariable a, y si es falso, el valor de la expresion d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
continue y break
En las estructuras que permiten repeticion, la instruccioncontinue permite saltar al final de la iteracion actual (omitiendo laejecucion de algun codigo) y continuar ejecutando la iteracionsiguiente (si todavıa quedan iteraciones pendientes).
La instruccion break termina la ejecucion de la repeticioninstantamente sin finalizar la iteracion actual.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
continue y break
En las estructuras que permiten repeticion, la instruccioncontinue permite saltar al final de la iteracion actual (omitiendo laejecucion de algun codigo) y continuar ejecutando la iteracionsiguiente (si todavıa quedan iteraciones pendientes).
La instruccion break termina la ejecucion de la repeticioninstantamente sin finalizar la iteracion actual.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
continue y break
En las estructuras que permiten repeticion, la instruccioncontinue permite saltar al final de la iteracion actual (omitiendo laejecucion de algun codigo) y continuar ejecutando la iteracionsiguiente (si todavıa quedan iteraciones pendientes).
La instruccion break termina la ejecucion de la repeticioninstantamente sin finalizar la iteracion actual.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
continue y break
En las estructuras que permiten repeticion, la instruccioncontinue permite saltar al final de la iteracion actual (omitiendo laejecucion de algun codigo) y continuar ejecutando la iteracionsiguiente (si todavıa quedan iteraciones pendientes).
La instruccion break termina la ejecucion de la repeticioninstantamente sin finalizar la iteracion actual.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
switch case
switch (expresion que evalua a un entero) {case constante:
codigo para ejecutar la expresion evaluo a este constante...case constante:
codigo para ejecutar la expresion evaluo a este constante
default:codigo para ejecutar evaluo a un valor no mencionado
}
En esta instruccion, todos los constantes deben ser enteros.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
switch case
switch (expresion que evalua a un entero) {case constante:
codigo para ejecutar la expresion evaluo a este constante...case constante:
codigo para ejecutar la expresion evaluo a este constante
default:codigo para ejecutar evaluo a un valor no mencionado
}
En esta instruccion, todos los constantes deben ser enteros.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Como funciona?
Efectivamente es un if else para situaciones con muchasalternativas donde la condicion se puede “convertir” a un entero.
El case simplemente indica el punto desde donde ejecutar, nohasta donde.
Es muy importante poner un break antes del case siguiente si noquieren que se ejecute todo lo que queda.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Como funciona?
Efectivamente es un if else para situaciones con muchasalternativas donde la condicion se puede “convertir” a un entero.
El case simplemente indica el punto desde donde ejecutar, nohasta donde.
Es muy importante poner un break antes del case siguiente si noquieren que se ejecute todo lo que queda.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Como funciona?
Efectivamente es un if else para situaciones con muchasalternativas donde la condicion se puede “convertir” a un entero.
El case simplemente indica el punto desde donde ejecutar, nohasta donde.
Es muy importante poner un break antes del case siguiente si noquieren que se ejecute todo lo que queda.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Como funciona?
Efectivamente es un if else para situaciones con muchasalternativas donde la condicion se puede “convertir” a un entero.
El case simplemente indica el punto desde donde ejecutar, nohasta donde.
Es muy importante poner un break antes del case siguiente si noquieren que se ejecute todo lo que queda.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Iteracion por for
for (asignaciones; condicion; operaciones) {codigo para ejecutar
}
Todas las cuatro partes son opcionales - hasta for(;;); compilabien (aunque repite por siempre y el programa no termina).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Iteracion por for
for (asignaciones; condicion; operaciones) {codigo para ejecutar
}
Todas las cuatro partes son opcionales - hasta for(;;); compilabien (aunque repite por siempre y el programa no termina).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Iteracion por while y do while
while (condicion) {codigo para ejecutar
}
do {codigo para ejecutar
} while (condicion);
La segunda version siempre ejecuta una vez antes de evaluar lacondicion, mientras la primera comienza por evaluarla.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Iteracion por while y do while
while (condicion) {codigo para ejecutar
}
do {codigo para ejecutar
} while (condicion);
La segunda version siempre ejecuta una vez antes de evaluar lacondicion, mientras la primera comienza por evaluarla.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Iteracion por while y do while
while (condicion) {codigo para ejecutar
}
do {codigo para ejecutar
} while (condicion);
La segunda version siempre ejecuta una vez antes de evaluar lacondicion, mientras la primera comienza por evaluarla.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Arreglo
Un arreglo es un conjunto de una cantidad fija de variables delmismo tipo que se maneja por el mismo nombre a traves de ındices:
int elementos[5]; /∗ ANSI-C ∗/int i = 3;
int[] elementos = new int[i]; /∗ Java ∗/elementos[i] = 4;
Los ındices comienzan de cero y terminan en n − 1 donde n es elnumero total de elementos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Arreglo
Un arreglo es un conjunto de una cantidad fija de variables delmismo tipo que se maneja por el mismo nombre a traves de ındices:
int elementos[5]; /∗ ANSI-C ∗/int i = 3;
int[] elementos = new int[i]; /∗ Java ∗/elementos[i] = 4;
Los ındices comienzan de cero y terminan en n − 1 donde n es elnumero total de elementos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Arreglo
Un arreglo es un conjunto de una cantidad fija de variables delmismo tipo que se maneja por el mismo nombre a traves de ındices:
int elementos[5]; /∗ ANSI-C ∗/int i = 3;
int[] elementos = new int[i]; /∗ Java ∗/elementos[i] = 4;
Los ındices comienzan de cero y terminan en n − 1 donde n es elnumero total de elementos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Arreglo
Un arreglo es un conjunto de una cantidad fija de variables delmismo tipo que se maneja por el mismo nombre a traves de ındices:
int elementos[5]; /∗ ANSI-C ∗/int i = 3;
int[] elementos = new int[i]; /∗ Java ∗/elementos[i] = 4;
Los ındices comienzan de cero y terminan en n − 1 donde n es elnumero total de elementos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Cayendo afuera: ANSI-C
int data[5];
data[5] = 3;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Reacciones variadas
@ubuntu$ gcc errores.c
@ubuntu$ ./a.out
Done.
Bus error (core dumped)
@ubuntu$
@solaris$ gcc errores.c
@solaris$ ./a.out
Done.
@solaris$
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Reacciones variadas
@ubuntu$ gcc errores.c
@ubuntu$ ./a.out
Done.
Bus error (core dumped)
@ubuntu$
@solaris$ gcc errores.c
@solaris$ ./a.out
Done.
@solaris$
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Arreglos multidimensionales
int multi[3][4];
int a, b;
for (a = 0; a < 3; a++)
for (b = 0; b < 4; b++)
multi[a][b] = rand()% 7;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Arreglos multidimensionales
int multi[3][4];
int a, b;
for (a = 0; a < 3; a++)
for (b = 0; b < 4; b++)
multi[a][b] = rand()% 7;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Puntero
En C, para crear arreglos sacando la capacidad de una variable, senecesita punteros.
Un puntero es una variable que contiene la direccion a otravariable en la memoria.
Los punteros son unas maravillas sin los cuales uno lo logra nadautil en ANSI-C en el largo plazo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Puntero
En C, para crear arreglos sacando la capacidad de una variable, senecesita punteros.
Un puntero es una variable que contiene la direccion a otravariable en la memoria.
Los punteros son unas maravillas sin los cuales uno lo logra nadautil en ANSI-C en el largo plazo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Puntero
En C, para crear arreglos sacando la capacidad de una variable, senecesita punteros.
Un puntero es una variable que contiene la direccion a otravariable en la memoria.
Los punteros son unas maravillas sin los cuales uno lo logra nadautil en ANSI-C en el largo plazo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Definicion de punteros
char∗ puntero a char;
int∗ puntero a int;
char a = ’a’;
int b = 7;
puntero a char = &a;
puntero a int = &b;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Definicion de punteros
char∗ puntero a char;
int∗ puntero a int;
char a = ’a’;
int b = 7;
puntero a char = &a;
puntero a int = &b;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Notacion
t∗ = puntero a una variable de tipo t
&a = direccion de la variable a
∗b = valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notacion.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Notacion
t∗ = puntero a una variable de tipo t
&a = direccion de la variable a
∗b = valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notacion.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Notacion
t∗ = puntero a una variable de tipo t
&a = direccion de la variable a
∗b = valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notacion.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Notacion
t∗ = puntero a una variable de tipo t
&a = direccion de la variable a
∗b = valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notacion.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Notacion
t∗ = puntero a una variable de tipo t
&a = direccion de la variable a
∗b = valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notacion.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tamano de tipo
Al reservar memoria, vamos a recibir un puntero a la regionreservada.
Al reservar, vamos a necesitar saber cuanto espacio reservar. Lafuncion sizeof(tipo) devuelve un entero que indica cuantosbytes necesita una variable del tipo definido.
La salida de sizeof() es de tipo size t que es simplemente unentero constante sin signo. El espacio necesario para k variables secalcula por multiplicar: por ejemplo k∗sizeof(int), donde k
puede ser constante o variable.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tamano de tipo
Al reservar memoria, vamos a recibir un puntero a la regionreservada.
Al reservar, vamos a necesitar saber cuanto espacio reservar. Lafuncion sizeof(tipo) devuelve un entero que indica cuantosbytes necesita una variable del tipo definido.
La salida de sizeof() es de tipo size t que es simplemente unentero constante sin signo. El espacio necesario para k variables secalcula por multiplicar: por ejemplo k∗sizeof(int), donde k
puede ser constante o variable.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Tamano de tipo
Al reservar memoria, vamos a recibir un puntero a la regionreservada.
Al reservar, vamos a necesitar saber cuanto espacio reservar. Lafuncion sizeof(tipo) devuelve un entero que indica cuantosbytes necesita una variable del tipo definido.
La salida de sizeof() es de tipo size t que es simplemente unentero constante sin signo. El espacio necesario para k variables secalcula por multiplicar: por ejemplo k∗sizeof(int), donde k
puede ser constante o variable.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
sizeof()
size t charsize = sizeof(char);
size t intsize = sizeof(int);
size t longsize = sizeof(long);
size t floatsize = sizeof(float);
size t doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
sizeof()
size t charsize = sizeof(char);
size t intsize = sizeof(int);
size t longsize = sizeof(long);
size t floatsize = sizeof(float);
size t doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
sizeof()
size t charsize = sizeof(char);
size t intsize = sizeof(int);
size t longsize = sizeof(long);
size t floatsize = sizeof(float);
size t doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
sizeof()
size t charsize = sizeof(char);
size t intsize = sizeof(int);
size t longsize = sizeof(long);
size t floatsize = sizeof(float);
size t doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
sizeof()
size t charsize = sizeof(char);
size t intsize = sizeof(int);
size t longsize = sizeof(long);
size t floatsize = sizeof(float);
size t doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
sizeof()
size t charsize = sizeof(char);
size t intsize = sizeof(int);
size t longsize = sizeof(long);
size t floatsize = sizeof(float);
size t doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Reservacion de memoria
void∗ malloc(size t n)
= reservar n bytes de memoria
void∗ cealloc(size t n)
= reservar e inicializar a cero
void∗ realloc(void∗ p, size t n)
= aumentar la region
free(void∗ p)
= liberar el espacio apuntado por el puntero
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Conversion de void
Las salidas son tipo void.
Para asignar la salida de malloc() a un int ∗, por ejemplo, hayque hacer conversion explıcita (ingles: type casting):
int∗ d = (int∗)malloc(7∗sizeof(int));
m/c/realloc da la salida NULL si la operacion no es exitosa. Esimportante verificar esto en cada programa. Son de la librerıastdlib.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Conversion de void
Las salidas son tipo void.
Para asignar la salida de malloc() a un int ∗, por ejemplo, hayque hacer conversion explıcita (ingles: type casting):
int∗ d = (int∗)malloc(7∗sizeof(int));
m/c/realloc da la salida NULL si la operacion no es exitosa. Esimportante verificar esto en cada programa. Son de la librerıastdlib.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Conversion de void
Las salidas son tipo void.
Para asignar la salida de malloc() a un int ∗, por ejemplo, hayque hacer conversion explıcita (ingles: type casting):
int∗ d = (int∗)malloc(7∗sizeof(int));
m/c/realloc da la salida NULL si la operacion no es exitosa. Esimportante verificar esto en cada programa. Son de la librerıastdlib.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Conversion de void
Las salidas son tipo void.
Para asignar la salida de malloc() a un int ∗, por ejemplo, hayque hacer conversion explıcita (ingles: type casting):
int∗ d = (int∗)malloc(7∗sizeof(int));
m/c/realloc da la salida NULL si la operacion no es exitosa. Esimportante verificar esto en cada programa. Son de la librerıastdlib.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Punteros a punteros
int i, j, h, k = 4;
int∗∗∗ tresd = (int∗∗∗)malloc(sizeof(int∗∗)∗k);
for (i = 0; i < k; i++) {tresd[i] = (int∗∗)malloc(sizeof(int∗)∗(k-1));for (j = 0; j < k - 1; j++) {tresd[i][j] = (int∗)malloc(sizeof(int)∗(k-2));for (h = 0; h < k - 2; h++)
tresd[i][j][h] = rand()% 10;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Punteros a punteros
int i, j, h, k = 4;
int∗∗∗ tresd = (int∗∗∗)malloc(sizeof(int∗∗)∗k);
for (i = 0; i < k; i++) {tresd[i] = (int∗∗)malloc(sizeof(int∗)∗(k-1));for (j = 0; j < k - 1; j++) {tresd[i][j] = (int∗)malloc(sizeof(int)∗(k-2));for (h = 0; h < k - 2; h++)
tresd[i][j][h] = rand()% 10;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Resultado?
Lo que imprime el programa anterior:
1 2 7 0 9 36 0 6 2 6 18 7 9 2 0 23 7 5 9 2 2
Nota: falta verificar el resultado de malloc()
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
¿Resultado?
Lo que imprime el programa anterior:
1 2 7 0 9 36 0 6 2 6 18 7 9 2 0 23 7 5 9 2 2
Nota: falta verificar el resultado de malloc()
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
string.h
La librerıa string.h per-mite realizar varias ope-raciones con arreglos dechar o punteros a char.
char∗ strcpy(char∗, char∗)copiar el segundo al primerochar∗ strcat(char∗, char∗)juntar dos en unoint strcmp(char∗, char∗)comparar (antes, igual, despues)char∗ strchr(char∗, int)
la primera ocurrencia de un sımbolochar∗ strstr(char∗, char∗)primera ocurrencia de otra cadenasize t strlen(char∗)largo (numero de sımbolos “ocupados”)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
string.h
La librerıa string.h per-mite realizar varias ope-raciones con arreglos dechar o punteros a char.
char∗ strcpy(char∗, char∗)copiar el segundo al primerochar∗ strcat(char∗, char∗)juntar dos en unoint strcmp(char∗, char∗)comparar (antes, igual, despues)char∗ strchr(char∗, int)
la primera ocurrencia de un sımbolochar∗ strstr(char∗, char∗)primera ocurrencia de otra cadenasize t strlen(char∗)largo (numero de sımbolos “ocupados”)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
string.h
La librerıa string.h per-mite realizar varias ope-raciones con arreglos dechar o punteros a char.
char∗ strcpy(char∗, char∗)copiar el segundo al primerochar∗ strcat(char∗, char∗)juntar dos en unoint strcmp(char∗, char∗)comparar (antes, igual, despues)char∗ strchr(char∗, int)
la primera ocurrencia de un sımbolochar∗ strstr(char∗, char∗)primera ocurrencia de otra cadenasize t strlen(char∗)largo (numero de sımbolos “ocupados”)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
string.h
La librerıa string.h per-mite realizar varias ope-raciones con arreglos dechar o punteros a char.
char∗ strcpy(char∗, char∗)copiar el segundo al primerochar∗ strcat(char∗, char∗)juntar dos en unoint strcmp(char∗, char∗)comparar (antes, igual, despues)char∗ strchr(char∗, int)
la primera ocurrencia de un sımbolochar∗ strstr(char∗, char∗)primera ocurrencia de otra cadenasize t strlen(char∗)largo (numero de sımbolos “ocupados”)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
string.h
La librerıa string.h per-mite realizar varias ope-raciones con arreglos dechar o punteros a char.
char∗ strcpy(char∗, char∗)copiar el segundo al primerochar∗ strcat(char∗, char∗)juntar dos en unoint strcmp(char∗, char∗)comparar (antes, igual, despues)char∗ strchr(char∗, int)
la primera ocurrencia de un sımbolochar∗ strstr(char∗, char∗)primera ocurrencia de otra cadenasize t strlen(char∗)largo (numero de sımbolos “ocupados”)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
string.h
La librerıa string.h per-mite realizar varias ope-raciones con arreglos dechar o punteros a char.
char∗ strcpy(char∗, char∗)copiar el segundo al primerochar∗ strcat(char∗, char∗)juntar dos en unoint strcmp(char∗, char∗)comparar (antes, igual, despues)char∗ strchr(char∗, int)
la primera ocurrencia de un sımbolochar∗ strstr(char∗, char∗)primera ocurrencia de otra cadenasize t strlen(char∗)largo (numero de sımbolos “ocupados”)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Puntero a funcion
Funciones que dan el mismo tipo de salida y toman los mismostipos de parametros se puede manejar a traves de un puntero deese “prototipo”:
double multiply(int a, double b) {return b∗a;
}
typedef double (∗funpoint)(int, double);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Puntero a funcion
Funciones que dan el mismo tipo de salida y toman los mismostipos de parametros se puede manejar a traves de un puntero deese “prototipo”:
double multiply(int a, double b) {return b∗a;
}
typedef double (∗funpoint)(int, double);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Puntero a funcion
Funciones que dan el mismo tipo de salida y toman los mismostipos de parametros se puede manejar a traves de un puntero deese “prototipo”:
double multiply(int a, double b) {return b∗a;
}
typedef double (∗funpoint)(int, double);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Uso de punteros a funciones
Tres maneras de llamar la misma funcion:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Uso de punteros a funciones
Tres maneras de llamar la misma funcion:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Uso de punteros a funciones
Tres maneras de llamar la misma funcion:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Uso de punteros a funciones
Tres maneras de llamar la misma funcion:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Uso de punteros a funciones
Tres maneras de llamar la misma funcion:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Uso de punteros a funciones
Tres maneras de llamar la misma funcion:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Funcion como parametro
void task(funpoint f) {int first = rand() % 7;
double second = (rand()∗1.0)/RAND MAX;
f(first, second);
return;
}
int main(int argc, char∗∗ args) {funpoint fp = &multiply;
task(fp);
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Funcion como parametro
void task(funpoint f) {int first = rand() % 7;
double second = (rand()∗1.0)/RAND MAX;
f(first, second);
return;
}
int main(int argc, char∗∗ args) {funpoint fp = &multiply;
task(fp);
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Conversiones
Para interpretar una sucesion de sımbolos como un numero,usamos las subrutinas siguientes:
atoi conversion a int
atol conversion a long
atof conversion a double
Todas toman un solo argumento: la cadena a convertir a traves deun char ∗.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Conversiones
Para interpretar una sucesion de sımbolos como un numero,usamos las subrutinas siguientes:
atoi conversion a int
atol conversion a long
atof conversion a double
Todas toman un solo argumento: la cadena a convertir a traves deun char ∗.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Conversiones
Para interpretar una sucesion de sımbolos como un numero,usamos las subrutinas siguientes:
atoi conversion a int
atol conversion a long
atof conversion a double
Todas toman un solo argumento: la cadena a convertir a traves deun char ∗.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Conversiones
Para interpretar una sucesion de sımbolos como un numero,usamos las subrutinas siguientes:
atoi conversion a int
atol conversion a long
atof conversion a double
Todas toman un solo argumento: la cadena a convertir a traves deun char ∗.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Conversiones
Para interpretar una sucesion de sımbolos como un numero,usamos las subrutinas siguientes:
atoi conversion a int
atol conversion a long
atof conversion a double
Todas toman un solo argumento: la cadena a convertir a traves deun char ∗.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Salida estandar
Para escribir a la salida estandar, utilizamos printf:
printf( ´Hola, mundo. ´);
Este proviene de la librerıa stdio.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Salida estandar
Para escribir a la salida estandar, utilizamos printf:
printf( ´Hola, mundo. ´);
Este proviene de la librerıa stdio.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Incorporacion de variables a printf()
int %dlong %ldfloat %fdouble %lfchar %cchar∗ %s
Para punto flotante, se puede definir el numero de lugaresdecimales de mostrar (habra redondeo): %.4f dara 4 lugaresdespues de la coma. Tambien con enteros se puede decir cuantoespacio dedicarles: %8d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Incorporacion de variables a printf()
int %dlong %ldfloat %fdouble %lfchar %cchar∗ %s
Para punto flotante, se puede definir el numero de lugaresdecimales de mostrar (habra redondeo): %.4f dara 4 lugaresdespues de la coma. Tambien con enteros se puede decir cuantoespacio dedicarles: %8d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Incorporacion de variables a printf()
int %dlong %ldfloat %fdouble %lfchar %cchar∗ %s
Para punto flotante, se puede definir el numero de lugaresdecimales de mostrar (habra redondeo): %.4f dara 4 lugaresdespues de la coma. Tambien con enteros se puede decir cuantoespacio dedicarles: %8d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Incorporacion de variables a printf()
int %dlong %ldfloat %fdouble %lfchar %cchar∗ %s
Para punto flotante, se puede definir el numero de lugaresdecimales de mostrar (habra redondeo): %.4f dara 4 lugaresdespues de la coma. Tambien con enteros se puede decir cuantoespacio dedicarles: %8d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Incorporacion de variables a printf()
int %dlong %ldfloat %fdouble %lfchar %cchar∗ %s
Para punto flotante, se puede definir el numero de lugaresdecimales de mostrar (habra redondeo): %.4f dara 4 lugaresdespues de la coma. Tambien con enteros se puede decir cuantoespacio dedicarles: %8d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Incorporacion de variables a printf()
int %dlong %ldfloat %fdouble %lfchar %cchar∗ %s
Para punto flotante, se puede definir el numero de lugaresdecimales de mostrar (habra redondeo): %.4f dara 4 lugaresdespues de la coma. Tambien con enteros se puede decir cuantoespacio dedicarles: %8d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Incorporacion de variables a printf()
int %dlong %ldfloat %fdouble %lfchar %cchar∗ %s
Para punto flotante, se puede definir el numero de lugaresdecimales de mostrar (habra redondeo): %.4f dara 4 lugaresdespues de la coma. Tambien con enteros se puede decir cuantoespacio dedicarles: %8d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Incorporacion de variables a printf()
int %dlong %ldfloat %fdouble %lfchar %cchar∗ %s
Para punto flotante, se puede definir el numero de lugaresdecimales de mostrar (habra redondeo): %.4f dara 4 lugaresdespues de la coma. Tambien con enteros se puede decir cuantoespacio dedicarles: %8d.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Entrada estandar
scanf toma dos argumentos: un patron de formato y la direccionde la variable a la cual leer un valor (del teclado).
scanf( ´%d ´, &n);
Ver tambien: sscanf, getchar y gets en stdio.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Entrada estandar
scanf toma dos argumentos: un patron de formato y la direccionde la variable a la cual leer un valor (del teclado).
scanf( ´%d ´, &n);
Ver tambien: sscanf, getchar y gets en stdio.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Entrada estandar
scanf toma dos argumentos: un patron de formato y la direccionde la variable a la cual leer un valor (del teclado).
scanf( ´%d ´, &n);
Ver tambien: sscanf, getchar y gets en stdio.h.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Tipo de dato FILE
En ANSI-C, un FILE es un “mango” a un archivo en el sistema dearchivos.
Tıpicamente manejamos un puntero al mango, o sea, un FILE ∗.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Tipo de dato FILE
En ANSI-C, un FILE es un “mango” a un archivo en el sistema dearchivos.
Tıpicamente manejamos un puntero al mango, o sea, un FILE ∗.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Terminal y teclado
stdin teclado para leerstdout terminal para escribirstderr errores para escribir
Entonces,
fprintf(stdout, ...); = printf(...);
fscanf(stdin, ...); = scanf(...);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Terminal y teclado
stdin teclado para leerstdout terminal para escribirstderr errores para escribir
Entonces,
fprintf(stdout, ...); = printf(...);
fscanf(stdin, ...); = scanf(...);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Terminal y teclado
stdin teclado para leerstdout terminal para escribirstderr errores para escribir
Entonces,
fprintf(stdout, ...); = printf(...);
fscanf(stdin, ...); = scanf(...);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Terminal y teclado
stdin teclado para leerstdout terminal para escribirstderr errores para escribir
Entonces,
fprintf(stdout, ...); = printf(...);
fscanf(stdin, ...); = scanf(...);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Terminal y teclado
stdin teclado para leerstdout terminal para escribirstderr errores para escribir
Entonces,
fprintf(stdout, ...); = printf(...);
fscanf(stdin, ...); = scanf(...);
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Abrir: leer/escribir
FILE∗ f = fopen(...);
Dos parametros:
◮ el nombre del archivo
◮ el modo de acceso
La salida es NULL si la operacion no fue exitosa.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Abrir: leer/escribir
FILE∗ f = fopen(...);
Dos parametros:
◮ el nombre del archivo
◮ el modo de acceso
La salida es NULL si la operacion no fue exitosa.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Abrir: leer/escribir
FILE∗ f = fopen(...);
Dos parametros:
◮ el nombre del archivo
◮ el modo de acceso
La salida es NULL si la operacion no fue exitosa.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Modos de acceso
r leerw escribir reemplazandoa escribir anadiendor+ leer o escribirw+ crear para leer y escribira+ crear o abrir para anadir...b lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavıa noexiste. Cuidado con no reemplazar archivos existentes deimportancia.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Leer sımbolo por sımbolo
int c = fgetc(...) toma un mango FILE ∗, lee un sımbolo (enun int) y lo envia a su salida.
El caracter EOF indica el fin de archivo.
fgetc(stdin) = getc()
ungetc(...) dado un sımbolo (char) y un mango (FILE ∗),devuelve el sımbolo “virtualmente” al archivo para que el siguientesımbolo leıdo sea el sımbolo “repuesto”.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Leer sımbolo por sımbolo
int c = fgetc(...) toma un mango FILE ∗, lee un sımbolo (enun int) y lo envia a su salida.
El caracter EOF indica el fin de archivo.
fgetc(stdin) = getc()
ungetc(...) dado un sımbolo (char) y un mango (FILE ∗),devuelve el sımbolo “virtualmente” al archivo para que el siguientesımbolo leıdo sea el sımbolo “repuesto”.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Leer sımbolo por sımbolo
int c = fgetc(...) toma un mango FILE ∗, lee un sımbolo (enun int) y lo envia a su salida.
El caracter EOF indica el fin de archivo.
fgetc(stdin) = getc()
ungetc(...) dado un sımbolo (char) y un mango (FILE ∗),devuelve el sımbolo “virtualmente” al archivo para que el siguientesımbolo leıdo sea el sımbolo “repuesto”.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Leer sımbolo por sımbolo
int c = fgetc(...) toma un mango FILE ∗, lee un sımbolo (enun int) y lo envia a su salida.
El caracter EOF indica el fin de archivo.
fgetc(stdin) = getc()
ungetc(...) dado un sımbolo (char) y un mango (FILE ∗),devuelve el sımbolo “virtualmente” al archivo para que el siguientesımbolo leıdo sea el sımbolo “repuesto”.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Leer lınea por lınea
Con fgets(...) podemos leer una lınea a la vez.
Toma tres parametros: un char ∗ al espacio donde guardar la lınealeıda, el largo maximo de la lınea (int) y el mango FILE ∗ alarchivo.
La salida es NULL si la operacion fallo y un char ∗ valido en otrocaso.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Leer lınea por lınea
Con fgets(...) podemos leer una lınea a la vez.
Toma tres parametros: un char ∗ al espacio donde guardar la lınealeıda, el largo maximo de la lınea (int) y el mango FILE ∗ alarchivo.
La salida es NULL si la operacion fallo y un char ∗ valido en otrocaso.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Leer lınea por lınea
Con fgets(...) podemos leer una lınea a la vez.
Toma tres parametros: un char ∗ al espacio donde guardar la lınealeıda, el largo maximo de la lınea (int) y el mango FILE ∗ alarchivo.
La salida es NULL si la operacion fallo y un char ∗ valido en otrocaso.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Escribir lınea por lınea
Los sımbolos a los cuales apunta un char ∗ pueden ser escritos enun archivo por pasar el puntero a ellos juntos con el mango alarchivo a fputs(...).
La salida es cero si todo fue bien, no cero si hubo errores.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Escribir lınea por lınea
Los sımbolos a los cuales apunta un char ∗ pueden ser escritos enun archivo por pasar el puntero a ellos juntos con el mango alarchivo a fputs(...).
La salida es cero si todo fue bien, no cero si hubo errores.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
¿Todavıa queda algo?
feof(...) toma un mango y devuelve “1” si el archivo yaesta procesado a su final y “0” en otro caso.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Todo a la vez
fread(...) lee los contenidos del archivo entero dado cuatro
parametros:
1. un char ∗ a donde guardar lo leıdo
2. el tamano de la unidad leıda en multiples de sizeof(char)
(o sea, “1”)
3. el numero de unidades para leer
4. el mango al archivo FILE ∗
La salida es no cero si algo fue leıdo exitosamente.
Tambien existe fwrite(...) con los mismos tipos de parametros.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Todo a la vez
fread(...) lee los contenidos del archivo entero dado cuatro
parametros:
1. un char ∗ a donde guardar lo leıdo
2. el tamano de la unidad leıda en multiples de sizeof(char)
(o sea, “1”)
3. el numero de unidades para leer
4. el mango al archivo FILE ∗
La salida es no cero si algo fue leıdo exitosamente.
Tambien existe fwrite(...) con los mismos tipos de parametros.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Asegurar que todo entre
No todo el contenido escrito en un archivo aparece en elloinmediatamente en el disco.
Para asegurar que el contenido sea transferido al disco, hay quellamar fflush(...) con el mango del archivo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Asegurar que todo entre
No todo el contenido escrito en un archivo aparece en elloinmediatamente en el disco.
Para asegurar que el contenido sea transferido al disco, hay quellamar fflush(...) con el mango del archivo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Volver a procesar
Con rewind podemos regresar el mango al inicio del archivo. Elunico parametro es el mango mismo.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Cerrar
Cuando acceso a un archivo ya no es necesario, el mango se eliminapor fclose(...) donde el unico parametro es el mango FILE ∗.
Es importante checar que no sea NULL el mango; al cerrar unNULL, tıpicamente habra errores durante ejecucion.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Cerrar
Cuando acceso a un archivo ya no es necesario, el mango se eliminapor fclose(...) donde el unico parametro es el mango FILE ∗.
Es importante checar que no sea NULL el mango; al cerrar unNULL, tıpicamente habra errores durante ejecucion.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
rand()
ANSI-C cuenta con una subrutina rand() que genera un numeroentero pseudoaleatorio entre cero y RAND MAX. La librerıa necesariaes stdlib.h.
Es muy importante inicializar el generador por definir una semillacon srand(int).
Una buena semilla es el tiempo actual en millisegundos: time(0).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
rand()
ANSI-C cuenta con una subrutina rand() que genera un numeroentero pseudoaleatorio entre cero y RAND MAX. La librerıa necesariaes stdlib.h.
Es muy importante inicializar el generador por definir una semillacon srand(int).
Una buena semilla es el tiempo actual en millisegundos: time(0).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
rand()
ANSI-C cuenta con una subrutina rand() que genera un numeroentero pseudoaleatorio entre cero y RAND MAX. La librerıa necesariaes stdlib.h.
Es muy importante inicializar el generador por definir una semillacon srand(int).
Una buena semilla es el tiempo actual en millisegundos: time(0).
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Transformaciones
◮ [0, 1]
◮ [a, b]
◮ {0, 1}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Transformaciones
◮ [0, 1]
◮ [a, b]
◮ {0, 1}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Transformaciones
◮ [0, 1]
◮ [a, b]
◮ {0, 1}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Validacion
Es muy importante verificar que la distribucion de la salida es ladeseada y que no presenten patrones de regularidad las salidas.
Cuando rand() no resulta suficientemente “aleatorio”, existenotras librerıas libremente disponibles en lınea y varios algoritmos enla literatura.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Validacion
Es muy importante verificar que la distribucion de la salida es ladeseada y que no presenten patrones de regularidad las salidas.
Cuando rand() no resulta suficientemente “aleatorio”, existenotras librerıas libremente disponibles en lınea y varios algoritmos enla literatura.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Otras distribuciones
Los libros de probabilidad ayudan en convertir una variablealeatoria uniforme a una de otra distribucion, aunque a veces esnecesario generar mas que un valor uniforme por cada valor de laotra distribucion.
(Hay tareas relacionadas. Para la distribucion exponencial es facil, por
ejemplo.)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
Entrada y salidaArchivosNumeros pseudoaleatorios
Otras distribuciones
Los libros de probabilidad ayudan en convertir una variablealeatoria uniforme a una de otra distribucion, aunque a veces esnecesario generar mas que un valor uniforme por cada valor de laotra distribucion.
(Hay tareas relacionadas. Para la distribucion exponencial es facil, por
ejemplo.)
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Preprocesador y assert.h
#ifdef DEBUG
fprintf(stderr, ´Verificando el puntero... ´);
assert(p != NULL);
#endif
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Preprocesador y assert.h
#ifdef DEBUG
fprintf(stderr, ´Verificando el puntero... ´);
assert(p != NULL);
#endif
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Preprocesador y assert.h
#ifdef DEBUG
fprintf(stderr, ´Verificando el puntero... ´);
assert(p != NULL);
#endif
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Preprocesador y assert.h
#ifdef DEBUG
fprintf(stderr, ´Verificando el puntero... ´);
assert(p != NULL);
#endif
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Subrutinas
Cuando el codigo es largo o contiene partes repetitivas, es mejordivirlo en subrutinas.
El diseno de buenas subrutinas es un arte.
Es esencial o definir o por lo menos declarar cada subrutina antes
de usarlo en el codigo para que el compilador pueda identificarla.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Subrutinas
Cuando el codigo es largo o contiene partes repetitivas, es mejordivirlo en subrutinas.
El diseno de buenas subrutinas es un arte.
Es esencial o definir o por lo menos declarar cada subrutina antes
de usarlo en el codigo para que el compilador pueda identificarla.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Subrutinas
Cuando el codigo es largo o contiene partes repetitivas, es mejordivirlo en subrutinas.
El diseno de buenas subrutinas es un arte.
Es esencial o definir o por lo menos declarar cada subrutina antes
de usarlo en el codigo para que el compilador pueda identificarla.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Subrutinas
Cuando el codigo es largo o contiene partes repetitivas, es mejordivirlo en subrutinas.
El diseno de buenas subrutinas es un arte.
Es esencial o definir o por lo menos declarar cada subrutina antes
de usarlo en el codigo para que el compilador pueda identificarla.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Parametros a subrutinas
Al entrar a una llamada de subrutina, el sistema operativo queesta ejecutando el programa copia los valores de los parametros auna nueva area de memoria.
Si uno quiere que la subrutina pueda modificar la variable de la(sub-)rutina que hizo la llamada, hay que pasar un puntero a lavariable como parametro.
Cada subrutina puede tener una sola salida al valor de la cualevalua su llamada.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Parametros a subrutinas
Al entrar a una llamada de subrutina, el sistema operativo queesta ejecutando el programa copia los valores de los parametros auna nueva area de memoria.
Si uno quiere que la subrutina pueda modificar la variable de la(sub-)rutina que hizo la llamada, hay que pasar un puntero a lavariable como parametro.
Cada subrutina puede tener una sola salida al valor de la cualevalua su llamada.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Parametros a subrutinas
Al entrar a una llamada de subrutina, el sistema operativo queesta ejecutando el programa copia los valores de los parametros auna nueva area de memoria.
Si uno quiere que la subrutina pueda modificar la variable de la(sub-)rutina que hizo la llamada, hay que pasar un puntero a lavariable como parametro.
Cada subrutina puede tener una sola salida al valor de la cualevalua su llamada.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Recursion
= cuando una computacion se repite por un mecanismo donde unasubrutina llama a si misma (o varias diferentes subrutinas hacenllamadas entre ellos de una manera cıclica).
Utilizado inteligentemente, recursion es un mecanismo muypoderoso que facilita el diseno e implementacion de buenosalgoritmos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Recursion
= cuando una computacion se repite por un mecanismo donde unasubrutina llama a si misma (o varias diferentes subrutinas hacenllamadas entre ellos de una manera cıclica).
Utilizado inteligentemente, recursion es un mecanismo muypoderoso que facilita el diseno e implementacion de buenosalgoritmos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Recursion versus iteracion
Varios problemas se puede resolver en dos maneras distintas: o porrepetir iterativamente (con for, while, ...) o recursivamente ciertasoperaciones hasta llegar a una condicion de terminacion.
A veces una de las dos maneras es muy superior a la otra.
Ejemplos: palındromos, triangulo de Pascal, estructuras de datos...
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Recursion versus iteracion
Varios problemas se puede resolver en dos maneras distintas: o porrepetir iterativamente (con for, while, ...) o recursivamente ciertasoperaciones hasta llegar a una condicion de terminacion.
A veces una de las dos maneras es muy superior a la otra.
Ejemplos: palındromos, triangulo de Pascal, estructuras de datos...
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Recursion versus iteracion
Varios problemas se puede resolver en dos maneras distintas: o porrepetir iterativamente (con for, while, ...) o recursivamente ciertasoperaciones hasta llegar a una condicion de terminacion.
A veces una de las dos maneras es muy superior a la otra.
Ejemplos: palındromos, triangulo de Pascal, estructuras de datos...
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Librerıas propias
Una subrutina bien disenado suele ser util en varios programas, nosolamente en ello para el cual fue originalmente escrito.
Para facilitar el reuso de codigo, es mejor separar tales subrutinasen sus propios archivos, agrupandolas por archivo segun su funcion.
Preparar un archivo .h propio con las declaraciones de losconstantes, subrutinas, etcetera.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Librerıas propias
Una subrutina bien disenado suele ser util en varios programas, nosolamente en ello para el cual fue originalmente escrito.
Para facilitar el reuso de codigo, es mejor separar tales subrutinasen sus propios archivos, agrupandolas por archivo segun su funcion.
Preparar un archivo .h propio con las declaraciones de losconstantes, subrutinas, etcetera.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Librerıas propias
Una subrutina bien disenado suele ser util en varios programas, nosolamente en ello para el cual fue originalmente escrito.
Para facilitar el reuso de codigo, es mejor separar tales subrutinasen sus propios archivos, agrupandolas por archivo segun su funcion.
Preparar un archivo .h propio con las declaraciones de losconstantes, subrutinas, etcetera.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Tipos de datos “al gusto”
Practicamente todo lenguaje de programacion avanzada lespermite definir (de una manera u otra) sus propios tipos de datos.
Los tipos definidos son combinaciones de los tipos basicos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Tipos de datos “al gusto”
Practicamente todo lenguaje de programacion avanzada lespermite definir (de una manera u otra) sus propios tipos de datos.
Los tipos definidos son combinaciones de los tipos basicos.
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Numeros complejos
Por ejemplo, para manejar numeros complejos x + iy ∈ C, sepuede definir un tipo de datos que contiene dos double: uno parax y otro para y .
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Declaracion en ANSI-C
Tıpicamente se incluye las declaraciones de estructuras en losarchivos .h y la sintaxis es la siguiente:
struct complexNumber {double real;
double imaginary;
};
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Declaracion en ANSI-C
Tıpicamente se incluye las declaraciones de estructuras en losarchivos .h y la sintaxis es la siguiente:
struct complexNumber {double real;
double imaginary;
};
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Acceso a las partes
Para acceder a las partes de una estructura, usamos .:
int main(int c, char∗∗ d)
{struct complexNumber a;
a.real = 1.0;
a.imaginary = 2.5;
...
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Acceso a las partes
Para acceder a las partes de una estructura, usamos .:
int main(int c, char∗∗ d)
{struct complexNumber a;
a.real = 1.0;
a.imaginary = 2.5;
...
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Acceso a las partes
Para acceder a las partes de una estructura, usamos .:
int main(int c, char∗∗ d)
{struct complexNumber a;
a.real = 1.0;
a.imaginary = 2.5;
...
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Acceso a las partes
Para acceder a las partes de una estructura, usamos .:
int main(int c, char∗∗ d)
{struct complexNumber a;
a.real = 1.0;
a.imaginary = 2.5;
...
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Acceso a las partes por un puntero
Para acceder a las partes de una estructura a que tenemos unpuntero, usamos ->:
void setValue(struct complexNumber∗ n) {n->real = 1.0;
n->imaginary = 0.0;
return;
}
int main(int c, char∗∗ d)
{struct complexNumber a;
setValue(&a);
...
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Acceso a las partes por un puntero
Para acceder a las partes de una estructura a que tenemos unpuntero, usamos ->:
void setValue(struct complexNumber∗ n) {n->real = 1.0;
n->imaginary = 0.0;
return;
}
int main(int c, char∗∗ d)
{struct complexNumber a;
setValue(&a);
...
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Acceso a las partes por un puntero
Para acceder a las partes de una estructura a que tenemos unpuntero, usamos ->:
void setValue(struct complexNumber∗ n) {n->real = 1.0;
n->imaginary = 0.0;
return;
}
int main(int c, char∗∗ d)
{struct complexNumber a;
setValue(&a);
...
return 1;
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres a tipos: typedef
// en un .h
typedef int entero;
typedef double decimal;
typedef struct complexNumber complejo;
// uso en un .c
entero a = 3;
decimal b = 2.5;
complejo c;
c.real = 1.0;
c.imaginary = -2.4;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres a tipos: typedef
// en un .h
typedef int entero;
typedef double decimal;
typedef struct complexNumber complejo;
// uso en un .c
entero a = 3;
decimal b = 2.5;
complejo c;
c.real = 1.0;
c.imaginary = -2.4;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres a tipos: typedef
// en un .h
typedef int entero;
typedef double decimal;
typedef struct complexNumber complejo;
// uso en un .c
entero a = 3;
decimal b = 2.5;
complejo c;
c.real = 1.0;
c.imaginary = -2.4;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres a tipos: typedef
// en un .h
typedef int entero;
typedef double decimal;
typedef struct complexNumber complejo;
// uso en un .c
entero a = 3;
decimal b = 2.5;
complejo c;
c.real = 1.0;
c.imaginary = -2.4;
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres a constantes: #define
#define MAXLENGTH 80
char buffer[MAXLENGTH];
for (i = 0; i < MAXLENGTH; i++) {...
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres a constantes: #define
#define MAXLENGTH 80
char buffer[MAXLENGTH];
for (i = 0; i < MAXLENGTH; i++) {...
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres a constantes: #define
#define MAXLENGTH 80
char buffer[MAXLENGTH];
for (i = 0; i < MAXLENGTH; i++) {...
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres de “opciones”: enum
enum options {NEXT = 1,
PREVIOUS = 2,
FIRST = 3,
LAST = 4,
EXIT = 5
};
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Sobrenombres de “opciones”: enum
enum options {NEXT = 1,
PREVIOUS = 2,
FIRST = 3,
LAST = 4,
EXIT = 5
};
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Uso de enum
// pref. en .h
typedef enum coloresPosibles {ROJO, AZUL, VERDE, AMARILLO, NEGRO
} color;
// uso en .c
color c;
switch (c) {case ROJO:
...
case AZUL:
...
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Uso de enum
// pref. en .h
typedef enum coloresPosibles {ROJO, AZUL, VERDE, AMARILLO, NEGRO
} color;
// uso en .c
color c;
switch (c) {case ROJO:
...
case AZUL:
...
}
Dra. Elisa Schaeffer FIME, UANL
Computadoras y programacionVariables y tipos de datos
OperacionesEstructuras de control
Arreglos y punterosLibrerıas estandares
Mas alla de lo basico
SubrutinasTipos propios
Uso de enum
// pref. en .h
typedef enum coloresPosibles {ROJO, AZUL, VERDE, AMARILLO, NEGRO
} color;
// uso en .c
color c;
switch (c) {case ROJO:
...
case AZUL:
...
}
Dra. Elisa Schaeffer FIME, UANL