Programación - Elisa Schaeffer

Anuncio
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programación
Dra. Elisa Schaeffer
[email protected]
Facultad de Ingenierı́a Mecánica y Eléctrica (FIME)
Universidad Autónoma de Nuevo León (UANL)
Verano 2008
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Computadoras y programación
Variables y tipos de datos
Información digital
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Entrada y salida
Archivos
Números pseudoaleatorios
Más allá de lo básico
Subrutinas
Tipos propios
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Componentes de una computadora
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Modelos de computación
Un modelo ideal de computación es lo de máquinas de acceso
aleatorio (inglés: random access machines, Ram).
Un Ram es capaz de manejar números enteros de tamaño
arbitrario. La estructura de datos de un Ram es un arreglo de
registros R0 , R1 , R2 , . . ., cada uno con capacidad de un entero
cualquiera, posiblemente negativo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programa Ram
Un programa Ram es una sucesión finita de instrucciones de tipo
assembler, Π = (π1 , π2 , . . . , πm ).
La entrada al programa está guardada en un arreglo finito de
registros de entrada I1 , I2 , . . . , In .
El primer registro r0 sirve como una acumuladora.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programa Ram
Un programa Ram es una sucesión finita de instrucciones de tipo
assembler, Π = (π1 , π2 , . . . , πm ).
La entrada al programa está guardada en un arreglo finito de
registros de entrada I1 , I2 , . . . , In .
El primer registro r0 sirve como una acumuladora.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programa Ram
Un programa Ram es una sucesión finita de instrucciones de tipo
assembler, Π = (π1 , π2 , . . . , πm ).
La entrada al programa está guardada en un arreglo finito de
registros de entrada I1 , I2 , . . . , In .
El primer registro r0 sirve como una acumuladora.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Notación
◮
j es un número 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 operadores
j, ↑ j o = j
x ′ es el resultado de tal reemplazo
κ es el contador del programa que determina cual instrucción
de Π se está ejecutando
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Instrucción
READ
READ
STORE
STORE
LOAD
ADD
SUB
HALF
JUMP
JPOS
JZERO
JNEG
HALT
Dra. Elisa Schaeffer
Operando
j
↑j
j
↑j
x
x
x
j
j
j
j
Semántica
r0 := ij
r0 := irj
rj := r0
rrj := r0
r0 := x ′
r0 := r0 + x ′
r0 := r0 − x ′
r0 := ⌊ r20 ⌋
κ := j
si r0 > 0, κ := j
si r0 = 0, κ := j
si r0 < 0, κ := j
κ := 0
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Instrucción
READ
READ
STORE
STORE
LOAD
ADD
SUB
HALF
JUMP
JPOS
JZERO
JNEG
HALT
Dra. Elisa Schaeffer
Operando
j
↑j
j
↑j
x
x
x
j
j
j
j
Semántica
r0 := ij
r0 := irj
rj := r0
rrj := r0
r0 := x ′
r0 := r0 + x ′
r0 := r0 − x ′
r0 := ⌊ r20 ⌋
κ := j
si r0 > 0, κ := j
si r0 = 0, κ := j
si r0 < 0, κ := j
κ := 0
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Instrucción
READ
READ
STORE
STORE
LOAD
ADD
SUB
HALF
JUMP
JPOS
JZERO
JNEG
HALT
Dra. Elisa Schaeffer
Operando
j
↑j
j
↑j
x
x
x
j
j
j
j
Semántica
r0 := ij
r0 := irj
rj := r0
rrj := r0
r0 := x ′
r0 := r0 + x ′
r0 := r0 − x ′
r0 := ⌊ r20 ⌋
κ := j
si r0 > 0, κ := j
si r0 = 0, κ := j
si r0 < 0, κ := j
κ := 0
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Instrucción
READ
READ
STORE
STORE
LOAD
ADD
SUB
HALF
JUMP
JPOS
JZERO
JNEG
HALT
Dra. Elisa Schaeffer
Operando
j
↑j
j
↑j
x
x
x
j
j
j
j
Semántica
r0 := ij
r0 := irj
rj := r0
rrj := r0
r0 := x ′
r0 := r0 + x ′
r0 := r0 − x ′
r0 := ⌊ r20 ⌋
κ := j
si r0 > 0, κ := j
si r0 = 0, κ := j
si r0 < 0, κ := j
κ := 0
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Instrucción
READ
READ
STORE
STORE
LOAD
ADD
SUB
HALF
JUMP
JPOS
JZERO
JNEG
HALT
Dra. Elisa Schaeffer
Operando
j
↑j
j
↑j
x
x
x
j
j
j
j
Semántica
r0 := ij
r0 := irj
rj := r0
rrj := r0
r0 := x ′
r0 := r0 + x ′
r0 := r0 − x ′
r0 := ⌊ r20 ⌋
κ := j
si r0 > 0, κ := j
si r0 = 0, κ := j
si r0 < 0, κ := j
κ := 0
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Instrucción
READ
READ
STORE
STORE
LOAD
ADD
SUB
HALF
JUMP
JPOS
JZERO
JNEG
HALT
Dra. Elisa Schaeffer
Operando
j
↑j
j
↑j
x
x
x
j
j
j
j
Semántica
r0 := ij
r0 := irj
rj := r0
rrj := r0
r0 := x ′
r0 := r0 + x ′
r0 := r0 − x ′
r0 := ⌊ r20 ⌋
κ := j
si r0 > 0, κ := j
si r0 = 0, κ := j
si r0 < 0, κ := j
κ := 0
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Configuración de una Ram
Una configuración es un par C = (κ, R)
◮
κ es el contador del programa que determina cual instrucción
de Π se está ejecutando
◮
R = {(j1 , rj1 ), (j2 , rj2 ), . . . , (jk , rjk )} es un conjunto finito de
pares registro-valor
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Pasos de computación
La configuración inicial es (1, ∅). Se define una relación de un paso
(κ, R) → Π, I (κ′ , R′ )
(1)
entre las configuraciones para un programa Ram Π y una entrada
I de n instrucciones.
◮
κ′ es el valor nuevo de κ después de haber ejecutado la instrucción
en posición κ (ojo: no necesariamente κ′ = κ + 1)
◮
R′ es una versión posiblemente modificada de R donde algún par
(j, x) puede haber sido removido y algún par (j ′ , x ′ ) añadido según
la instrucción en posición κ del programa Π.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Computación
Si D es una sucesión finita de enteros, se dice que una máquina de
acceso aleatorio compute una función φ : D → Z si y sólo si para
toda I ∈ D aplica que
(1, ∅) → Π, I ∗ (0, R)
(2)
ası́ que (0, φ(I )) ∈ R.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Una Ram que computa la función φ(x, y ) = |x − y |
La entrada es I = (6, 10); el resultado es φ(I ) = 4.
Programa
READ
2
STORE 2
READ
1
STORE 1
SUB
2
JNEG
8
HALT
LOAD
2
SUB
1
HALT
Dra. Elisa Schaeffer
Configuración
(1, ∅)
(2, {(0, 10)})
(3, {(0, 10), (2, 10)})
(4, {(0, 6), (2, 10)})
(5, {(0, 6), (2, 10), (1, 6)})
(6, {(0, −4), (2, 10), (1, 6)})
(8, {(0, −4), (2, 10), (1, 6)})
(9, {(0, 10), (2, 10), (1, 6)})
(10, {(0, 4), (2, 10), (1, 6)})
(0, {(0, 4), (2, 10), (1, 6)})
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tiempo de ejecución
La ejecución de cada instrucción cuenta como un paso de
computación.
La abstracción normalmente considera la sumación de enteros
grandes como es algo que no se puede hacer rápidamente.
También hay que tomar en cuenta que multiplicación no
está incluida como instrucción y que se implementa por sumación
repetida.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tiempo de ejecución
La ejecución de cada instrucción cuenta como un paso de
computación.
La abstracción normalmente considera la sumación de enteros
grandes como es algo que no se puede hacer rápidamente.
También hay que tomar en cuenta que multiplicación no
está incluida como instrucción y que se implementa por sumación
repetida.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tiempo de ejecución
La ejecución de cada instrucción cuenta como un paso de
computación.
La abstracción normalmente considera la sumación de enteros
grandes como es algo que no se puede hacer rápidamente.
También hay que tomar en cuenta que multiplicación no
está incluida como instrucción y que se implementa por sumación
repetida.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tamaño de entrada
El tamaño de la entrada se considera en logaritmos.
Sea bi una representación binaria del valor absoluto un entero i sin
ceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para el
signo.
El largo del entero en el contexto Ram es el número de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de los
enteros en estos términos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tamaño de entrada
El tamaño de la entrada se considera en logaritmos.
Sea bi una representación binaria del valor absoluto un entero i sin
ceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para el
signo.
El largo del entero en el contexto Ram es el número de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de los
enteros en estos términos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tamaño de entrada
El tamaño de la entrada se considera en logaritmos.
Sea bi una representación binaria del valor absoluto un entero i sin
ceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para el
signo.
El largo del entero en el contexto Ram es el número de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de los
enteros en estos términos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tamaño de entrada
El tamaño de la entrada se considera en logaritmos.
Sea bi una representación binaria del valor absoluto un entero i sin
ceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para el
signo.
El largo del entero en el contexto Ram es el número de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de los
enteros en estos términos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tamaño de entrada
El tamaño de la entrada se considera en logaritmos.
Sea bi una representación binaria del valor absoluto un entero i sin
ceros no significativos al comienzo.
Para valores negativos, pensamos que hay un bit “gratuito” para el
signo.
El largo del entero en el contexto Ram es el número de bits en bi .
El largo de la entrada entera L(I ) es la suma de los largos de los
enteros en estos términos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programa eficiente
Se dice que un programa Ram Π computa una función φ : D → Z
en tiempo f (n) donde f : N+ → N+ si y sólo 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programa eficiente
Se dice que un programa Ram Π computa una función φ : D → Z
en tiempo f (n) donde f : N+ → N+ si y sólo 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programa — términos generales
Un programa de computadora es una sucesión de operacionales
computacionales.
El lenguaje de la computadora en el nivel de ejecutar un programa
se llama lenguaje de máquina y es un conjunto de operaciones muy
simples que operan en los contenidos de registros de memoria.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programa — términos generales
Un programa de computadora es una sucesión de operacionales
computacionales.
El lenguaje de la computadora en el nivel de ejecutar un programa
se llama lenguaje de máquina y es un conjunto de operaciones muy
simples que operan en los contenidos de registros de memoria.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programa — términos generales
Un programa de computadora es una sucesión de operacionales
computacionales.
El lenguaje de la computadora en el nivel de ejecutar un programa
se llama lenguaje de máquina y es un conjunto de operaciones muy
simples que operan en los contenidos de registros de memoria.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programación
Para facilitar el proceso de construir programas, se ha desarrollado
numerosos lenguajes de programación de alto nivel para poder
comunicar la sucesión deseada de operaciones a la computadora en
un nivel más manejable para los seres humanos.
Un programa escrito en un lenguaje de programación necesita ser
compilado antes de su ejecución o alternativamente interpretado al
ejecutar.
El compilador y el intérprete son programas (comúnmente algo
complejos) que se distribuye como herramientas a los
programadores.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programación
Para facilitar el proceso de construir programas, se ha desarrollado
numerosos lenguajes de programación de alto nivel para poder
comunicar la sucesión deseada de operaciones a la computadora en
un nivel más manejable para los seres humanos.
Un programa escrito en un lenguaje de programación necesita ser
compilado antes de su ejecución o alternativamente interpretado al
ejecutar.
El compilador y el intérprete son programas (comúnmente algo
complejos) que se distribuye como herramientas a los
programadores.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programación
Para facilitar el proceso de construir programas, se ha desarrollado
numerosos lenguajes de programación de alto nivel para poder
comunicar la sucesión deseada de operaciones a la computadora en
un nivel más manejable para los seres humanos.
Un programa escrito en un lenguaje de programación necesita ser
compilado antes de su ejecución o alternativamente interpretado al
ejecutar.
El compilador y el intérprete son programas (comúnmente algo
complejos) que se distribuye como herramientas a los
programadores.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Programación
Para facilitar el proceso de construir programas, se ha desarrollado
numerosos lenguajes de programación de alto nivel para poder
comunicar la sucesión deseada de operaciones a la computadora en
un nivel más manejable para los seres humanos.
Un programa escrito en un lenguaje de programación necesita ser
compilado antes de su ejecución o alternativamente interpretado al
ejecutar.
El compilador y el intérprete son programas (comúnmente algo
complejos) que se distribuye como herramientas a los
programadores.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Sintaxis y semántica
Los lenguajes de programación se parecen a idiomas naturales,
pero su gramática, o sea la sintaxis, es muy estricta, el vocabulario
es limitado y el significado, o sea la semántica de las expresiones es
muy especı́fica.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Sintaxis y semántica
Los lenguajes de programación se parecen a idiomas naturales,
pero su gramática, o sea la sintaxis, es muy estricta, el vocabulario
es limitado y el significado, o sea la semántica de las expresiones es
muy especı́fica.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paradigmas de programación
◮
Imperativa de procedimientos: Fortran, Cobol, C, ...
◮
Orientada a objetos: Ada, Smalltalk, C++, Java
◮
Funcional: LISP, Scheme, Common LISP, ML
◮
Lógica: PROLOG
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paradigmas de programación
◮
Imperativa de procedimientos: Fortran, Cobol, C, ...
◮
Orientada a objetos: Ada, Smalltalk, C++, Java
◮
Funcional: LISP, Scheme, Common LISP, ML
◮
Lógica: PROLOG
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paradigmas de programación
◮
Imperativa de procedimientos: Fortran, Cobol, C, ...
◮
Orientada a objetos: Ada, Smalltalk, C++, Java
◮
Funcional: LISP, Scheme, Common LISP, ML
◮
Lógica: PROLOG
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paradigmas de programación
◮
Imperativa de procedimientos: Fortran, Cobol, C, ...
◮
Orientada a objetos: Ada, Smalltalk, C++, Java
◮
Funcional: LISP, Scheme, Common LISP, ML
◮
Lógica: PROLOG
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paradigmas de programación
◮
Imperativa de procedimientos: Fortran, Cobol, C, ...
◮
Orientada a objetos: Ada, Smalltalk, C++, Java
◮
Funcional: LISP, Scheme, Common LISP, ML
◮
Lógica: PROLOG
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paradigmas de programación
◮
Imperativa de procedimientos: Fortran, Cobol, C, ...
◮
Orientada a objetos: Ada, Smalltalk, C++, Java
◮
Funcional: LISP, Scheme, Common LISP, ML
◮
Lógica: PROLOG
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paradigmas de programación
◮
Imperativa de procedimientos: Fortran, Cobol, C, ...
◮
Orientada a objetos: Ada, Smalltalk, C++, Java
◮
Funcional: LISP, Scheme, Common LISP, ML
◮
Lógica: PROLOG
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paradigmas de programación
◮
Imperativa de procedimientos: Fortran, Cobol, C, ...
◮
Orientada a objetos: Ada, Smalltalk, C++, Java
◮
Funcional: LISP, Scheme, Common LISP, ML
◮
Lógica: PROLOG
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Vocabulario de ANSI-C
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
Las mayúsculas y las minúsculas son letras distintas en C.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Vocabulario de ANSI-C
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
Las mayúsculas y las minúsculas son letras distintas en C.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Programar?
◮
definir
◮
planificar
◮
diseñar
◮
implementar
◮
experimentar
◮
validar
◮
documentar
◮
mantener
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Programar?
◮
definir
◮
planificar
◮
diseñar
◮
implementar
◮
experimentar
◮
validar
◮
documentar
◮
mantener
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Programar?
◮
definir
◮
planificar
◮
diseñar
◮
implementar
◮
experimentar
◮
validar
◮
documentar
◮
mantener
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Programar?
◮
definir
◮
planificar
◮
diseñar
◮
implementar
◮
experimentar
◮
validar
◮
documentar
◮
mantener
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Programar?
◮
definir
◮
planificar
◮
diseñar
◮
implementar
◮
experimentar
◮
validar
◮
documentar
◮
mantener
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Programar?
◮
definir
◮
planificar
◮
diseñar
◮
implementar
◮
experimentar
◮
validar
◮
documentar
◮
mantener
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Programar?
◮
definir
◮
planificar
◮
diseñar
◮
implementar
◮
experimentar
◮
validar
◮
documentar
◮
mantener
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Programar?
◮
definir
◮
planificar
◮
diseñar
◮
implementar
◮
experimentar
◮
validar
◮
documentar
◮
mantener
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Algoritmos y estructuras de datos
Algoritmo = un método de solución sistemática que da un
resultado para un problema especı́fico dada una instancia del
problema.
Estructura de datos = una manera de manejar los datos tal que se
garantiza operaciones de acceso o modificación sistemática de los
datos contenidos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Algoritmos y estructuras de datos
Algoritmo = un método de solución sistemática que da un
resultado para un problema especı́fico dada una instancia del
problema.
Estructura de datos = una manera de manejar los datos tal que se
garantiza operaciones de acceso o modificación sistemática de los
datos contenidos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Algoritmos y estructuras de datos
Algoritmo = un método de solución sistemática que da un
resultado para un problema especı́fico dada una instancia del
problema.
Estructura de datos = una manera de manejar los datos tal que se
garantiza operaciones de acceso o modificación sistemática de los
datos contenidos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Buen algoritmo?
◮
◮
◮
◮
rápido
resultado correcto
uso bajo de memoria
la ejecución xtermina
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Buen algoritmo?
◮
◮
◮
◮
rápido
resultado correcto
uso bajo de memoria
la ejecución xtermina
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Buen algoritmo?
◮
◮
◮
◮
rápido
resultado correcto
uso bajo de memoria
la ejecución xtermina
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Buen algoritmo?
◮
◮
◮
◮
rápido
resultado correcto
uso bajo de memoria
la ejecución xtermina
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
int main(int c, char ∗ ∗ a)
El método main es el punto de entrada al programa desde la lı́nea
de instrucciones del sistema operativo.
main toma dos parámetros: el número de parámetros de lı́nea de
instrucciones y un arreglo (en forma de puntero) de cadenas de
sı́mbolos que contienen aquellos parámetros.
El primer parámetro (a[0]) en C siempre es el nombre del
ejecutable mismo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
int main(int c, char ∗ ∗ a)
El método main es el punto de entrada al programa desde la lı́nea
de instrucciones del sistema operativo.
main toma dos parámetros: el número de parámetros de lı́nea de
instrucciones y un arreglo (en forma de puntero) de cadenas de
sı́mbolos que contienen aquellos parámetros.
El primer parámetro (a[0]) en C siempre es el nombre del
ejecutable mismo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
int main(int c, char ∗ ∗ a)
El método main es el punto de entrada al programa desde la lı́nea
de instrucciones del sistema operativo.
main toma dos parámetros: el número de parámetros de lı́nea de
instrucciones y un arreglo (en forma de puntero) de cadenas de
sı́mbolos que contienen aquellos parámetros.
El primer parámetro (a[0]) en C siempre es el nombre del
ejecutable mismo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
int main(int c, char ∗ ∗ a)
El método main es el punto de entrada al programa desde la lı́nea
de instrucciones del sistema operativo.
main toma dos parámetros: el número de parámetros de lı́nea de
instrucciones y un arreglo (en forma de puntero) de cadenas de
sı́mbolos que contienen aquellos parámetros.
El primer parámetro (a[0]) en C siempre es el nombre del
ejecutable mismo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Herramientas
Para escribir el código, en este curso utilizamos todos el editor
Emacs. Se abre en el terminal con la instrucción emacs o
directamente a un archivo con emacs prog.c.
Compilamos en la lı́nea de instrucciones (no a través de Emacs,
aunque se podrı́a) usando el compilador de C de Gnu, gcc.
A gcc pasamos como argumentos los nombres de los archivos de
código que queremos compilar.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Herramientas
Para escribir el código, en este curso utilizamos todos el editor
Emacs. Se abre en el terminal con la instrucción emacs o
directamente a un archivo con emacs prog.c.
Compilamos en la lı́nea de instrucciones (no a través de Emacs,
aunque se podrı́a) usando el compilador de C de Gnu, gcc.
A gcc pasamos como argumentos los nombres de los archivos de
código que queremos compilar.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Herramientas
Para escribir el código, en este curso utilizamos todos el editor
Emacs. Se abre en el terminal con la instrucción emacs o
directamente a un archivo con emacs prog.c.
Compilamos en la lı́nea de instrucciones (no a través de Emacs,
aunque se podrı́a) usando el compilador de C de Gnu, gcc.
A gcc pasamos como argumentos los nombres de los archivos de
código que queremos compilar.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Variable
Una variable es efectivamente un espacio en la memoria de la
computadora al cual se puede asignar un valor.
La asignación puede tomar el valor de un constante o el valor de
otra variable.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Variable
Una variable es efectivamente un espacio en la memoria de la
computadora al cual se puede asignar un valor.
La asignación puede tomar el valor de un constante o el valor de
otra variable.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Asignación
En pseudocódigo, tı́picamente se denota por :=.
a := 0,34
Las asignaciones se realiza de la derecha hacia la izquierda y la
asignación en sı́ se evalua al valor asignado.
a := b := c
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Asignación
En pseudocódigo, tı́picamente se denota por :=.
a := 0,34
Las asignaciones se realiza de la derecha hacia la izquierda y la
asignación en sı́ se evalua al valor asignado.
a := b := c
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Asignación
En pseudocódigo, tı́picamente se denota por :=.
a := 0,34
Las asignaciones se realiza de la derecha hacia la izquierda y la
asignación en sı́ se evalua al valor asignado.
a := b := c
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Tipos de datos
Los contenidos posibles de una variable dependen de la cantidad de
espacio que tiene reservado en la memoria.
Este espacio tı́picamente se determina por definir el tipo de dato
de la variable.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Tipos de datos
Los contenidos posibles de una variable dependen de la cantidad de
espacio que tiene reservado en la memoria.
Este espacio tı́picamente se determina por definir el tipo de dato
de la variable.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Bit
El bit es la unidad básica de información digital. Un bit es una
variable binaria: tiene dos valores posibles que se interpreta como
los valores lógicos “verdad” (1) y “falso” (0).
En la memoria de una computadora, se expresa los números
enteros con sumas de potencias de dos, empezando con la potencia
más grande que quepa en el número e iterando hasta llegar a la
suma correcta.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Potencias de dos
140
1e+20
1e+18
120
1e+16
100
1e+14
80
1e+12
1e+10
60
1e+08
40
1e+06
10000
20
100
0
1
0
1
2
3
4
5
6
7
0
10
20
30
40
50
60
Figura: Gráficas de las potencias de dos: a la izquierda, con ejes lineales
hasta x = 7, y a la derecha, con ejes de escala logarı́tmica hasta x = 64.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Representación binaria
Representamos la presencia de una cierta potencia con un bit de
valor 1 y su ausencia por un bit de valor 0, empezando con la
potencia más 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Representación binaria
Representamos la presencia de una cierta potencia con un bit de
valor 1 y su ausencia por un bit de valor 0, empezando con la
potencia más 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Cantidad de bits necesaria
Por lo general, la cantidad b de bits requeridos para representar un
valor x ∈ Z+ está el exponente de la mı́nima potencia de dos
mayor a x,
n
o
(4)
b = mı́n k | 2k > x .
k∈Z
Para incluir los enteros negativos, se usa un bit auxiliar de signo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Cantidad de bits necesaria
Por lo general, la cantidad b de bits requeridos para representar un
valor x ∈ Z+ está el exponente de la mı́nima potencia de dos
mayor a x,
n
o
(4)
b = mı́n k | 2k > x .
k∈Z
Para incluir los enteros negativos, se usa un bit auxiliar de signo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
21
22
23
24
25
26
27
28
29
210
211
212
213
214
215
216
217
218
219
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
Dra. Elisa Schaeffer
2
4
8
16
32
64
128
256
512
1 024
2 048
4 096
8 192
16 384
32 768
65 536
131 072
262 144
524 288
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
Información digital
1 048 576
2 097 152
4 194 304
8 388 608
16 777 216
33 554 432
67 108 864
134 217 728
268 435 456
536 870 912
1 073 741 824
2 147 483 648
4 294 967 296
8 589 934 592
17 179 869 184
34 359 738 368
68 719 476 736
137 438 953 472
274 877 906 944
549 755 813 888
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
1 099 511 627 776
2 199 023 255 552
4 398 046 511 104
8 796 093 022 208
17 592 186 044 416
35 184 372 088 832
70 368 744 177 664
140 737 488 355 328
281 474 976 710 656
562 949 953 421 312
1 125 899 906 842 624
2 251 799 813 685 248
4 503 599 627 370 496
9 007 199 254 740 992
18 014 398 509 481 984
36 028 797 018 963 968
72 057 594 037 927 936
144 115 188 075 855 872
288 230 376 151 711 744
576 460 752 303 423 488
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Byte
El byte es la unidad básica de capacidad de memoria digital. Un
byte (se pronuncia “bait”) es una sucesión de ocho bits. El número
entero más 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
k+1
2
−1=
k
X
2i .
(5)
i =0
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Byte
El byte es la unidad básica de capacidad de memoria digital. Un
byte (se pronuncia “bait”) es una sucesión de ocho bits. El número
entero más 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
k+1
2
−1=
k
X
2i .
(5)
i =0
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información 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 es
ningún potencia de dos, eligieron la potencia más cercana, 210 =
1,024, para corresponder a los prefixes.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información 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 es
ningún potencia de dos, eligieron la potencia más cercana, 210 =
1,024, para corresponder a los prefixes.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Enteros: short, int y long
Depende de la máquina que rango tiene cada tipo.
Por definir una variable unsigned, uno ahorra el bit de signo y
aumenta el rango máximo al doble de lo que era.
En ANSI-C, el archivo de las definiciones de los rangos de enteros
es limits.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Enteros: short, int y long
Depende de la máquina que rango tiene cada tipo.
Por definir una variable unsigned, uno ahorra el bit de signo y
aumenta el rango máximo al doble de lo que era.
En ANSI-C, el archivo de las definiciones de los rangos de enteros
es limits.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Enteros: short, int y long
Depende de la máquina que rango tiene cada tipo.
Por definir una variable unsigned, uno ahorra el bit de signo y
aumenta el rango máximo al doble de lo que era.
En ANSI-C, el archivo de las definiciones de los rangos de enteros
es limits.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Rangos de enteros
Tipo
Por defecto
En el Solaris de PISIS
short
unsigned short:
int
unsigned int
long
unsigned long
[−32,768, 32,767]
≤ 65,535
[−32,767, 32,767]
65,535
[−2,147,483,647, ...]
≤ 4,294,967,295
lo mismo
lo mismo
[−2,147,483,648, ...]
≤ 4294967295
lo mismo
lo mismo
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variables
binarias (o booleanas). Tı́picamente este tipo se llama boolean o
bool.
En ANSI-C, cada entero positivo se puede interpretar como
“verdad” o “falso”:
no cero = verdad
cero = falso
(true en Java)
(false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variables
binarias (o booleanas). Tı́picamente este tipo se llama boolean o
bool.
En ANSI-C, cada entero positivo se puede interpretar como
“verdad” o “falso”:
no cero = verdad
cero = falso
(true en Java)
(false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variables
binarias (o booleanas). Tı́picamente este tipo se llama boolean o
bool.
En ANSI-C, cada entero positivo se puede interpretar como
“verdad” o “falso”:
no cero = verdad
cero = falso
(true en Java)
(false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variables
binarias (o booleanas). Tı́picamente este tipo se llama boolean o
bool.
En ANSI-C, cada entero positivo se puede interpretar como
“verdad” o “falso”:
no cero = verdad
cero = falso
(true en Java)
(false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Variables binarias
Algunos lenguajes traen su propio tipo de datos para variables
binarias (o booleanas). Tı́picamente este tipo se llama boolean o
bool.
En ANSI-C, cada entero positivo se puede interpretar como
“verdad” o “falso”:
no cero = verdad
cero = falso
(true en Java)
(false en Java)
Estos dos valores de llaman valores de verdad.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Punto flotante
Para representar números reales por computadora, hay que definir
hasta que exactitud se guarda los decimales del número, como el
espacio para guardar un número entero está limitada a un tamaño
constante que depende únicamente en el tipo de dato elegido.
El método común de lograr tal representación es lo de punto
flotante (también conocido como coma flotante) donde la
representación se adapta al orden magnitud del valor x ∈ R.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Punto flotante
Para representar números reales por computadora, hay que definir
hasta que exactitud se guarda los decimales del número, como el
espacio para guardar un número entero está limitada a un tamaño
constante que depende únicamente en el tipo de dato elegido.
El método común de lograr tal representación es lo de punto
flotante (también conocido como coma flotante) donde la
representación se adapta al orden magnitud del valor x ∈ R.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Traslado de la coma
La idea es trasladar la coma decimal hacia la posición de la primera
cifra significativa de x mediante un exponente γ:
x = m · bγ ,
m se llama la mantisa y contiene los dı́gitos significativos de x.
Es común normalizar la mantisa tal que su parte entera consta de
solamente la primera cifra significativa de x. La mantisa
tı́picamente tiene un tamaño máximo limitado a una cierta
cantidad fija de bytes.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Traslado de la coma
La idea es trasladar la coma decimal hacia la posición de la primera
cifra significativa de x mediante un exponente γ:
x = m · bγ ,
m se llama la mantisa y contiene los dı́gitos significativos de x.
Es común normalizar la mantisa tal que su parte entera consta de
solamente la primera cifra significativa de x. La mantisa
tı́picamente tiene un tamaño máximo limitado a una cierta
cantidad fija de bytes.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Traslado de la coma
La idea es trasladar la coma decimal hacia la posición de la primera
cifra significativa de x mediante un exponente γ:
x = m · bγ ,
m se llama la mantisa y contiene los dı́gitos significativos de x.
Es común normalizar la mantisa tal que su parte entera consta de
solamente la primera cifra significativa de x. La mantisa
tı́picamente tiene un tamaño máximo limitado a una cierta
cantidad fija de bytes.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Traslado de la coma
La idea es trasladar la coma decimal hacia la posición de la primera
cifra significativa de x mediante un exponente γ:
x = m · bγ ,
m se llama la mantisa y contiene los dı́gitos significativos de x.
Es común normalizar la mantisa tal que su parte entera consta de
solamente la primera cifra significativa de x. La mantisa
tı́picamente tiene un tamaño máximo limitado a una cierta
cantidad fija de bytes.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Exponente y base
Lo que determina el rango de valores posibles que se puede
representar en punto flotante es la cantidad de memoria reservada
para el exponente γ ∈ Z.
El parámetro b es la base del sistema de representación. Los
números binarios tienen base b = 2 y comúnmente en cálculo
utilizamos b = 10.
También existen sistemas en base b = 8 (el sistema octal) y
b = 16 (el sistema hexadecimal).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Exponente y base
Lo que determina el rango de valores posibles que se puede
representar en punto flotante es la cantidad de memoria reservada
para el exponente γ ∈ Z.
El parámetro b es la base del sistema de representación. Los
números binarios tienen base b = 2 y comúnmente en cálculo
utilizamos b = 10.
También existen sistemas en base b = 8 (el sistema octal) y
b = 16 (el sistema hexadecimal).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Exponente y base
Lo que determina el rango de valores posibles que se puede
representar en punto flotante es la cantidad de memoria reservada
para el exponente γ ∈ Z.
El parámetro b es la base del sistema de representación. Los
números binarios tienen base b = 2 y comúnmente en cálculo
utilizamos b = 10.
También existen sistemas en base b = 8 (el sistema octal) y
b = 16 (el sistema hexadecimal).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Punto fijo
La otra opción serı́a simplemente reservar una cierta cantidad de
bytespara la representación y fijar a posición en la cual se supone
que esté la coma decimal.
La representación de punto fijo es mucho más restrictiva con
respeto al rango de valores posibles de guardar.
En comparación, el método de punto flotante causa variaciones en
la exactitud de la representación, mientras permite guardar valores
de un rango mucho más amplio.
En ANSI-C, el archivo con los datos que refinen los rangos están
en el archivo float.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Punto fijo
La otra opción serı́a simplemente reservar una cierta cantidad de
bytespara la representación y fijar a posición en la cual se supone
que esté la coma decimal.
La representación de punto fijo es mucho más restrictiva con
respeto al rango de valores posibles de guardar.
En comparación, el método de punto flotante causa variaciones en
la exactitud de la representación, mientras permite guardar valores
de un rango mucho más amplio.
En ANSI-C, el archivo con los datos que refinen los rangos están
en el archivo float.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Punto fijo
La otra opción serı́a simplemente reservar una cierta cantidad de
bytespara la representación y fijar a posición en la cual se supone
que esté la coma decimal.
La representación de punto fijo es mucho más restrictiva con
respeto al rango de valores posibles de guardar.
En comparación, el método de punto flotante causa variaciones en
la exactitud de la representación, mientras permite guardar valores
de un rango mucho más amplio.
En ANSI-C, el archivo con los datos que refinen los rangos están
en el archivo float.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información digital
Punto fijo
La otra opción serı́a simplemente reservar una cierta cantidad de
bytespara la representación y fijar a posición en la cual se supone
que esté la coma decimal.
La representación de punto fijo es mucho más restrictiva con
respeto al rango de valores posibles de guardar.
En comparación, el método de punto flotante causa variaciones en
la exactitud de la representación, mientras permite guardar valores
de un rango mucho más amplio.
En ANSI-C, el archivo con los datos que refinen los rangos están
en el archivo float.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información 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 estándar.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información 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 estándar.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información 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 estándar.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Información 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 estándar.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Aritmética (ANSI-C etc.)
a = b
a + b
a - b
a ∗ b
a / b
a% b
Dra. Elisa Schaeffer
asignar
sumar
restar
multiplicar
dividir
resto de la división
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Aritmética (ANSI-C etc.)
a = b
a + b
a - b
a ∗ b
a / b
a% b
Dra. Elisa Schaeffer
asignar
sumar
restar
multiplicar
dividir
resto de la división
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Aritmética (ANSI-C etc.)
a = b
a + b
a - b
a ∗ b
a / b
a% b
Dra. Elisa Schaeffer
asignar
sumar
restar
multiplicar
dividir
resto de la división
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Aritmética (ANSI-C etc.)
a = b
a + b
a - b
a ∗ b
a / b
a% b
Dra. Elisa Schaeffer
asignar
sumar
restar
multiplicar
dividir
resto de la división
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Aritmética (ANSI-C etc.)
a = b
a + b
a - b
a ∗ b
a / b
a% b
Dra. Elisa Schaeffer
asignar
sumar
restar
multiplicar
dividir
resto de la división
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Aritmética (ANSI-C etc.)
a = b
a + b
a - b
a ∗ b
a / b
a% b
Dra. Elisa Schaeffer
asignar
sumar
restar
multiplicar
dividir
resto de la división
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paréntesis
Se puede (y recomienda) utilizar las paréntesis para agrupar
expresiones. Cada expresión debe terminar en un punto-coma.
Ejemplo:
a = (b - c) % ((d - 2) ∗ 6);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paréntesis
Se puede (y recomienda) utilizar las paréntesis para agrupar
expresiones. Cada expresión debe terminar en un punto-coma.
Ejemplo:
a = (b - c) % ((d - 2) ∗ 6);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Paréntesis
Se puede (y recomienda) utilizar las paréntesis para agrupar
expresiones. Cada expresión debe terminar en un punto-coma.
Ejemplo:
a = (b - c) % ((d - 2) ∗ 6);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Comparaciones
==
!=
<
>
<=
>=
Dra. Elisa Schaeffer
igual
no igual
menor que
mayor que
menor o igual que
mayor o igual que
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Comparaciones
==
!=
<
>
<=
>=
Dra. Elisa Schaeffer
igual
no igual
menor que
mayor que
menor o igual que
mayor o igual que
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Comparaciones
==
!=
<
>
<=
>=
Dra. Elisa Schaeffer
igual
no igual
menor que
mayor que
menor o igual que
mayor o igual que
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Comparaciones
==
!=
<
>
<=
>=
Dra. Elisa Schaeffer
igual
no igual
menor que
mayor que
menor o igual que
mayor o igual que
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Comparaciones
==
!=
<
>
<=
>=
Dra. Elisa Schaeffer
igual
no igual
menor que
mayor que
menor o igual que
mayor o igual que
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Comparaciones
==
!=
<
>
<=
>=
Dra. Elisa Schaeffer
igual
no igual
menor que
mayor que
menor o igual que
mayor o igual que
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entero versus punto flotante
Al combinar diferentes tipos de variables o comparar valores de
variables de tipos distintos, hay que tener cuidado.
A veces la funcionalidad definida en el lenguaje no corresponde a la
intuición humana...
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tipos de constantes
3.0
3.0f
12
12l
Dra. Elisa Schaeffer
es
es
es
es
double
float
int
long
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tipos de constantes
3.0
3.0f
12
12l
Dra. Elisa Schaeffer
es
es
es
es
double
float
int
long
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tipos de constantes
3.0
3.0f
12
12l
Dra. Elisa Schaeffer
es
es
es
es
double
float
int
long
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tipos de constantes
3.0
3.0f
12
12l
Dra. Elisa Schaeffer
es
es
es
es
double
float
int
long
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tipos de constantes
3.0
3.0f
12
12l
Dra. Elisa Schaeffer
es
es
es
es
double
float
int
long
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Funciones de piso y techo
La función piso ⌊x⌋ : R → Z define el número entero máximo
menor a x ∈ R:
⌊x⌋ = máx {y | x ≤ y } .
y ∈Z
(6)
La función techo ⌈x⌉ : R → Z define el número entero mı́nimo
mayor a x ∈ R:
⌈x⌉ = mı́n {y | x ≤ y } .
(7)
y ∈Z
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Funciones de piso y techo
La función piso ⌊x⌋ : R → Z define el número entero máximo
menor a x ∈ R:
⌊x⌋ = máx {y | x ≤ y } .
y ∈Z
(6)
La función techo ⌈x⌉ : R → Z define el número entero mı́nimo
mayor a x ∈ R:
⌈x⌉ = mı́n {y | x ≤ y } .
(7)
y ∈Z
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Función parte entera
Varios lenguajes de programación incorporan una manera de
convertir un número en formato punto flotante a un valor entero.
La función que captura esta comportamiento es la función parte
entera
[x] : R → Z.
(8)
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
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 de
la funciones piso y techo: denota el valor de la variable a por a. Si
a ≥ 0, se asigna a b el valor ⌊a⌋, y cuando a < 0, se asigna a b el
valor ⌈a⌉.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
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 de
la funciones piso y techo: denota el valor de la variable a por a. Si
a ≥ 0, se asigna a b el valor ⌊a⌋, y cuando a < 0, se asigna a b el
valor ⌈a⌉.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Redondeo
El redondeo tı́pico de x ∈ R al entero más próximo es equivalente
a [x + 0,5].
Hay que tener mucho cuidado con la operación de parte entera en
programación, como implica pérdida de datos.
Acumulando uno después de otro, los errores de redondeo se
pueden amplificar y causar comportamiento no deseado en el
programa.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Redondeo
El redondeo tı́pico de x ∈ R al entero más próximo es equivalente
a [x + 0,5].
Hay que tener mucho cuidado con la operación de parte entera en
programación, como implica pérdida de datos.
Acumulando uno después de otro, los errores de redondeo se
pueden amplificar y causar comportamiento no deseado en el
programa.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Redondeo
El redondeo tı́pico de x ∈ R al entero más próximo es equivalente
a [x + 0,5].
Hay que tener mucho cuidado con la operación de parte entera en
programación, como implica pérdida de datos.
Acumulando uno después de otro, los errores de redondeo se
pueden amplificar y causar comportamiento no deseado en el
programa.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Ejemplo
En algunas implementaciones una sucesión instrucciones como
float a = 0.6/0.2;
int b = (int)a;
puede resultar en b asignada al valor 2, porque por la
representación binaria de punto flotante de los valores 0,6 y 0,2, su
división resulta en el valor punto flotante
2,999999999999999555910790149937.
Entonces, aplicar la función 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones lógicas
Notación
&&
||
!
Interpretación
“y” (conjunción, los dos ambos)
“o” (disyuncción, uno de los dos)
“no” (negación)
Sı́mbolo
∧
∨
¬
También con estos es recomendable usar paréntesis para agrupar
las expresiones bien.
a = (c && (d >= 4)) || (e && !(f != h));
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones lógicas
Notación
&&
||
!
Interpretación
“y” (conjunción, los dos ambos)
“o” (disyuncción, uno de los dos)
“no” (negación)
Sı́mbolo
∧
∨
¬
También con estos es recomendable usar paréntesis para agrupar
las expresiones bien.
a = (c && (d >= 4)) || (e && !(f != h));
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones lógicas
Notación
&&
||
!
Interpretación
“y” (conjunción, los dos ambos)
“o” (disyuncción, uno de los dos)
“no” (negación)
Sı́mbolo
∧
∨
¬
También con estos es recomendable usar paréntesis para agrupar
las expresiones bien.
a = (c && (d >= 4)) || (e && !(f != h));
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Precedencia
Para los que quieren arriesgarse y no usar paréntesis, el orden de
precendencia de los operadores ya mencionados del más fuerte al
más débil:
()
∗ / %
+ < <= > >=
== !=
=
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Precedencia
Para los que quieren arriesgarse y no usar paréntesis, el orden de
precendencia de los operadores ya mencionados del más fuerte al
más débil:
()
∗ / %
+ < <= > >=
== !=
=
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Precedencia
Para los que quieren arriesgarse y no usar paréntesis, el orden de
precendencia de los operadores ya mencionados del más fuerte al
más débil:
()
∗ / %
+ < <= > >=
== !=
=
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Precedencia
Para los que quieren arriesgarse y no usar paréntesis, el orden de
precendencia de los operadores ya mencionados del más fuerte al
más débil:
()
∗ / %
+ < <= > >=
== !=
=
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Precedencia
Para los que quieren arriesgarse y no usar paréntesis, el orden de
precendencia de los operadores ya mencionados del más fuerte al
más débil:
()
∗ / %
+ < <= > >=
== !=
=
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Precedencia
Para los que quieren arriesgarse y no usar paréntesis, el orden de
precendencia de los operadores ya mencionados del más fuerte al
más débil:
()
∗ / %
+ < <= > >=
== !=
=
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Precedencia
Para los que quieren arriesgarse y no usar paréntesis, el orden de
precendencia de los operadores ya mencionados del más fuerte al
más débil:
()
∗ / %
+ < <= > >=
== !=
=
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Abreviaciones
Notación
a += b
a -= b
a ∗= b
a /= b
a %= b
a++
a-++a
--a
Dra. Elisa Schaeffer
Interpretación
a = a + b
a = a - b
a = a ∗ b
a = a / b
a = a% b
a = a+1 (al final)
a = a-1 (al final)
a = a+1 (primero)
a = a-1 (primero)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Letras (char)
Como todo contenido, las letras se guarda como números. El
sistema de codificación básica 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 sinónimo de
short.
Muchos lenguajes de programación inclyuen soporte para otras
codificaciones para poder manerar sı́mbolos internacionales (como
el Latin-1 o el UTF-8).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Letras (char)
Como todo contenido, las letras se guarda como números. El
sistema de codificación básica 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 sinónimo de
short.
Muchos lenguajes de programación inclyuen soporte para otras
codificaciones para poder manerar sı́mbolos internacionales (como
el Latin-1 o el UTF-8).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Letras (char)
Como todo contenido, las letras se guarda como números. El
sistema de codificación básica 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 sinónimo de
short.
Muchos lenguajes de programación inclyuen soporte para otras
codificaciones para poder manerar sı́mbolos internacionales (como
el Latin-1 o el UTF-8).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
ctype.h: rutinas de detección
int
int
int
int
int
int
int
int
isalpha(int
isdigit(int
islower(int
ispunct(int
isspace(int
isupper(int
tolower(int
toupper(int
Dra. Elisa Schaeffer
c)
c)
c)
c)
c)
c)
c)
c)
si es una letra
si es un dı́gito
si es minúscula
si es puntuación
si es espacio blando
si es mayúscula
a minúscula
a mayúscula
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
ctype.h: rutinas de detección
int
int
int
int
int
int
int
int
isalpha(int
isdigit(int
islower(int
ispunct(int
isspace(int
isupper(int
tolower(int
toupper(int
Dra. Elisa Schaeffer
c)
c)
c)
c)
c)
c)
c)
c)
si es una letra
si es un dı́gito
si es minúscula
si es puntuación
si es espacio blando
si es mayúscula
a minúscula
a mayúscula
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
ctype.h: rutinas de detección
int
int
int
int
int
int
int
int
isalpha(int
isdigit(int
islower(int
ispunct(int
isspace(int
isupper(int
tolower(int
toupper(int
Dra. Elisa Schaeffer
c)
c)
c)
c)
c)
c)
c)
c)
si es una letra
si es un dı́gito
si es minúscula
si es puntuación
si es espacio blando
si es mayúscula
a minúscula
a mayúscula
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
ctype.h: rutinas de detección
int
int
int
int
int
int
int
int
isalpha(int
isdigit(int
islower(int
ispunct(int
isspace(int
isupper(int
tolower(int
toupper(int
Dra. Elisa Schaeffer
c)
c)
c)
c)
c)
c)
c)
c)
si es una letra
si es un dı́gito
si es minúscula
si es puntuación
si es espacio blando
si es mayúscula
a minúscula
a mayúscula
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
ctype.h: rutinas de detección
int
int
int
int
int
int
int
int
isalpha(int
isdigit(int
islower(int
ispunct(int
isspace(int
isupper(int
tolower(int
toupper(int
Dra. Elisa Schaeffer
c)
c)
c)
c)
c)
c)
c)
c)
si es una letra
si es un dı́gito
si es minúscula
si es puntuación
si es espacio blando
si es mayúscula
a minúscula
a mayúscula
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
ctype.h: rutinas de detección
int
int
int
int
int
int
int
int
isalpha(int
isdigit(int
islower(int
ispunct(int
isspace(int
isupper(int
tolower(int
toupper(int
Dra. Elisa Schaeffer
c)
c)
c)
c)
c)
c)
c)
c)
si es una letra
si es un dı́gito
si es minúscula
si es puntuación
si es espacio blando
si es mayúscula
a minúscula
a mayúscula
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
ctype.h: rutinas de detección
int
int
int
int
int
int
int
int
isalpha(int
isdigit(int
islower(int
ispunct(int
isspace(int
isupper(int
tolower(int
toupper(int
Dra. Elisa Schaeffer
c)
c)
c)
c)
c)
c)
c)
c)
si es una letra
si es un dı́gito
si es minúscula
si es puntuación
si es espacio blando
si es mayúscula
a minúscula
a mayúscula
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
ctype.h: rutinas de detección
int
int
int
int
int
int
int
int
isalpha(int
isdigit(int
islower(int
ispunct(int
isspace(int
isupper(int
tolower(int
toupper(int
Dra. Elisa Schaeffer
c)
c)
c)
c)
c)
c)
c)
c)
si es una letra
si es un dı́gito
si es minúscula
si es puntuación
si es espacio blando
si es mayúscula
a minúscula
a mayúscula
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones de bits
En ANSI-C, tenemos acceso a los bits de un byte a través de
operadores especiales:
◮
mover los bits a la izquierda
◮
mover los bits a la derecha
◮
operaciones lógicas: y, o, no
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones de bits
En ANSI-C, tenemos acceso a los bits de un byte a través de
operadores especiales:
◮
mover los bits a la izquierda
◮
mover los bits a la derecha
◮
operaciones lógicas: y, o, no
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Multiplicar por dos
Para multiplicar por dos k veces, o sea, multiplicar por 2k , tenemos
el operador “empujar a la izquierda k posiciones”:
int i = 5;
i = i << 4;
Salida: 80
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Multiplicar por dos
Para multiplicar por dos k veces, o sea, multiplicar por 2k , tenemos
el operador “empujar a la izquierda k posiciones”:
int i = 5;
i = i << 4;
Salida: 80
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Multiplicar por dos
Para multiplicar por dos k veces, o sea, multiplicar por 2k , tenemos
el operador “empujar a la izquierda k posiciones”:
int i = 5;
i = i << 4;
Salida: 80
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Dividir” por dos
Para “dividir” por dos k veces, o sea, “dividir” por 2k , tenemos el
operador “empujar a la derecha k posiciones”:
int i = 35;
i = i >> 4;
Salida: 2 — ¡el efecto no es exactamente división por dos!
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Dividir” por dos
Para “dividir” por dos k veces, o sea, “dividir” por 2k , tenemos el
operador “empujar a la derecha k posiciones”:
int i = 35;
i = i >> 4;
Salida: 2 — ¡el efecto no es exactamente división por dos!
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Dividir” por dos
Para “dividir” por dos k veces, o sea, “dividir” por 2k , tenemos el
operador “empujar a la derecha k posiciones”:
int i = 35;
i = i >> 4;
Salida: 2 — ¡el efecto no es exactamente división por dos!
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Máscaras
Creamos una máscara que tiene el bit que nos interesa en uno y los
otros bits en cero:
int i = (1 << k);
donde k el ı́ndice del bit que queremos en uno (el “primer” bit es
el menos significante).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Máscaras
Creamos una máscara que tiene el bit que nos interesa en uno y los
otros bits en cero:
int i = (1 << k);
donde k el ı́ndice del bit que queremos en uno (el “primer” bit es
el menos significante).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Máscaras
Creamos una máscara que tiene el bit que nos interesa en uno y los
otros bits en cero:
int i = (1 << k);
donde k el ı́ndice del bit que queremos en uno (el “primer” bit es
el menos significante).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones lógicas binarias
Entrada: dos bits para “y” y “o”, un bit para “no”
Salida: un bit
Español
y
o
no
Dra. Elisa Schaeffer
Inglés
and
or
not
C
&
|
~
Efecto
(1, 1) 7→ 1, en otro caso 0
(0, 0) 7→ 0, en otro caso 1
1 7→ 0, 0 7→ 1
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones lógicas binarias
Entrada: dos bits para “y” y “o”, un bit para “no”
Salida: un bit
Español
y
o
no
Dra. Elisa Schaeffer
Inglés
and
or
not
C
&
|
~
Efecto
(1, 1) 7→ 1, en otro caso 0
(0, 0) 7→ 0, en otro caso 1
1 7→ 0, 0 7→ 1
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones lógicas binarias
Entrada: dos bits para “y” y “o”, un bit para “no”
Salida: un bit
Español
y
o
no
Dra. Elisa Schaeffer
Inglés
and
or
not
C
&
|
~
Efecto
(1, 1) 7→ 1, en otro caso 0
(0, 0) 7→ 0, en otro caso 1
1 7→ 0, 0 7→ 1
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Operaciones lógicas binarias
Entrada: dos bits para “y” y “o”, un bit para “no”
Salida: un bit
Español
y
o
no
Dra. Elisa Schaeffer
Inglés
and
or
not
C
&
|
~
Efecto
(1, 1) 7→ 1, en otro caso 0
(0, 0) 7→ 0, en otro caso 1
1 7→ 0, 0 7→ 1
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Forzar” un bit de una variable
Si tenemos una variable y queremos forzar un bit a uno, creamos la
máscara para el bit que nos interesa y realizamos una “o”:
mask = (1 << k);
var = (var | mask);
También se puede escribir:
var |= (1 << k);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Forzar” un bit de una variable
Si tenemos una variable y queremos forzar un bit a uno, creamos la
máscara para el bit que nos interesa y realizamos una “o”:
mask = (1 << k);
var = (var | mask);
También se puede escribir:
var |= (1 << k);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Forzar” un bit de una variable
Si tenemos una variable y queremos forzar un bit a uno, creamos la
máscara para el bit que nos interesa y realizamos una “o”:
mask = (1 << k);
var = (var | mask);
También se puede escribir:
var |= (1 << k);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Aclarar” un bit
Si queremos forzar un bit a cero, necesitamos la operación “y” y
una máscara complementada donde todos los otros bits son uno y
el 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Aclarar” un bit
Si queremos forzar un bit a cero, necesitamos la operación “y” y
una máscara complementada donde todos los otros bits son uno y
el 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Aclarar” un bit
Si queremos forzar un bit a cero, necesitamos la operación “y” y
una máscara complementada donde todos los otros bits son uno y
el 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Condiciones: if else
if (condición) {
código para ejecutar si cumple la condición
} else if (otra condición) {
código para ejecutar si cumple esta condición
} else {
código para ejecutar si no cumplió ninguna
}
Elegir una de las opciones a ejecutar. La elegida será la primera la
condición de cual cumple. La parte “else if” es opcional y puede
repertir varias veces. También la parte “else” es opcional, pero no
se puede repetir.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Condiciones: if else
if (condición) {
código para ejecutar si cumple la condición
} else if (otra condición) {
código para ejecutar si cumple esta condición
} else {
código para ejecutar si no cumplió ninguna
}
Elegir una de las opciones a ejecutar. La elegida será la primera la
condición de cual cumple. La parte “else if” es opcional y puede
repertir varias veces. También la parte “else” es opcional, pero no
se puede repetir.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Mini-if”
Para asignar a una variable un valor u otro, dependiendo de una
condición, se usa el “if chiquito”:
a = (b) ? c : d
Si la condición b es verdad, se asigna el valor de la expresión c a la
variable a, y si es falso, el valor de la expresión d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Mini-if”
Para asignar a una variable un valor u otro, dependiendo de una
condición, se usa el “if chiquito”:
a = (b) ? c : d
Si la condición b es verdad, se asigna el valor de la expresión c a la
variable a, y si es falso, el valor de la expresión d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Mini-if”
Para asignar a una variable un valor u otro, dependiendo de una
condición, se usa el “if chiquito”:
a = (b) ? c : d
Si la condición b es verdad, se asigna el valor de la expresión c a la
variable a, y si es falso, el valor de la expresión d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
“Mini-if”
Para asignar a una variable un valor u otro, dependiendo de una
condición, se usa el “if chiquito”:
a = (b) ? c : d
Si la condición b es verdad, se asigna el valor de la expresión c a la
variable a, y si es falso, el valor de la expresión d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
continue y break
En las estructuras que permiten repetición, la instrucción
continue permite saltar al final de la iteración actual (omitiendo la
ejecución de algún código) y continuar ejecutando la iteración
siguiente (si todavı́a quedan iteraciones pendientes).
La instrucción break termina la ejecución de la repetición
instantamente sin finalizar la iteración actual.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
continue y break
En las estructuras que permiten repetición, la instrucción
continue permite saltar al final de la iteración actual (omitiendo la
ejecución de algún código) y continuar ejecutando la iteración
siguiente (si todavı́a quedan iteraciones pendientes).
La instrucción break termina la ejecución de la repetición
instantamente sin finalizar la iteración actual.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
continue y break
En las estructuras que permiten repetición, la instrucción
continue permite saltar al final de la iteración actual (omitiendo la
ejecución de algún código) y continuar ejecutando la iteración
siguiente (si todavı́a quedan iteraciones pendientes).
La instrucción break termina la ejecución de la repetición
instantamente sin finalizar la iteración actual.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
continue y break
En las estructuras que permiten repetición, la instrucción
continue permite saltar al final de la iteración actual (omitiendo la
ejecución de algún código) y continuar ejecutando la iteración
siguiente (si todavı́a quedan iteraciones pendientes).
La instrucción break termina la ejecución de la repetición
instantamente sin finalizar la iteración actual.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
switch case
switch (expresión que evalua a un entero) {
case constante:
código para ejecutar la expresión evaluó a este constante
..
.
case constante:
código para ejecutar la expresión evaluó a este constante
default:
código para ejecutar evaluó a un valor no mencionado
}
En esta instrucción, todos los constantes deben ser enteros.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
switch case
switch (expresión que evalua a un entero) {
case constante:
código para ejecutar la expresión evaluó a este constante
..
.
case constante:
código para ejecutar la expresión evaluó a este constante
default:
código para ejecutar evaluó a un valor no mencionado
}
En esta instrucción, todos los constantes deben ser enteros.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Cómo funciona?
Efectivamente es un if else para situaciones con muchas
alternativas donde la condición se puede “convertir” a un entero.
El case simplemente indica el punto desde donde ejecutar, no
hasta donde.
Es muy importante poner un break antes del case siguiente si no
quieren que se ejecute todo lo que queda.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Cómo funciona?
Efectivamente es un if else para situaciones con muchas
alternativas donde la condición se puede “convertir” a un entero.
El case simplemente indica el punto desde donde ejecutar, no
hasta donde.
Es muy importante poner un break antes del case siguiente si no
quieren que se ejecute todo lo que queda.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Cómo funciona?
Efectivamente es un if else para situaciones con muchas
alternativas donde la condición se puede “convertir” a un entero.
El case simplemente indica el punto desde donde ejecutar, no
hasta donde.
Es muy importante poner un break antes del case siguiente si no
quieren que se ejecute todo lo que queda.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Cómo funciona?
Efectivamente es un if else para situaciones con muchas
alternativas donde la condición se puede “convertir” a un entero.
El case simplemente indica el punto desde donde ejecutar, no
hasta donde.
Es muy importante poner un break antes del case siguiente si no
quieren que se ejecute todo lo que queda.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Iteración por for
for (asignaciones; condición; operaciones) {
código para ejecutar
}
Todas las cuatro partes son opcionales - hasta for(;;); compila
bien (aunque repite por siempre y el programa no termina).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Iteración por for
for (asignaciones; condición; operaciones) {
código para ejecutar
}
Todas las cuatro partes son opcionales - hasta for(;;); compila
bien (aunque repite por siempre y el programa no termina).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Iteración por while y do while
while (condición) {
código para ejecutar
}
do {
código para ejecutar
} while (condición);
La segunda versión siempre ejecuta una vez antes de evaluar la
condición, mientras la primera comienza por evaluarla.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Iteración por while y do while
while (condición) {
código para ejecutar
}
do {
código para ejecutar
} while (condición);
La segunda versión siempre ejecuta una vez antes de evaluar la
condición, mientras la primera comienza por evaluarla.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Iteración por while y do while
while (condición) {
código para ejecutar
}
do {
código para ejecutar
} while (condición);
La segunda versión siempre ejecuta una vez antes de evaluar la
condición, mientras la primera comienza por evaluarla.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Arreglo
Un arreglo es un conjunto de una cantidad fija de variables del
mismo tipo que se maneja por el mismo nombre a través 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 el
número total de elementos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Arreglo
Un arreglo es un conjunto de una cantidad fija de variables del
mismo tipo que se maneja por el mismo nombre a través 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 el
número total de elementos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Arreglo
Un arreglo es un conjunto de una cantidad fija de variables del
mismo tipo que se maneja por el mismo nombre a través 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 el
número total de elementos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Arreglo
Un arreglo es un conjunto de una cantidad fija de variables del
mismo tipo que se maneja por el mismo nombre a través 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 el
número total de elementos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Cayendo afuera: ANSI-C
int data[5];
data[5] = 3;
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Puntero
En C, para crear arreglos sacando la capacidad de una variable, se
necesita punteros.
Un puntero es una variable que contiene la dirección a otra
variable en la memoria.
Los punteros son unas maravillas sin los cuales uno lo logra nada
útil en ANSI-C en el largo plazo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Puntero
En C, para crear arreglos sacando la capacidad de una variable, se
necesita punteros.
Un puntero es una variable que contiene la dirección a otra
variable en la memoria.
Los punteros son unas maravillas sin los cuales uno lo logra nada
útil en ANSI-C en el largo plazo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Puntero
En C, para crear arreglos sacando la capacidad de una variable, se
necesita punteros.
Un puntero es una variable que contiene la dirección a otra
variable en la memoria.
Los punteros son unas maravillas sin los cuales uno lo logra nada
útil en ANSI-C en el largo plazo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Definición 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Definición 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Notación
t∗
&a
∗b
=
=
=
puntero a una variable de tipo t
dirección de la variable a
valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notación.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Notación
t∗
&a
∗b
=
=
=
puntero a una variable de tipo t
dirección de la variable a
valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notación.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Notación
t∗
&a
∗b
=
=
=
puntero a una variable de tipo t
dirección de la variable a
valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notación.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Notación
t∗
&a
∗b
=
=
=
puntero a una variable de tipo t
dirección de la variable a
valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notación.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Notación
t∗
&a
∗b
=
=
=
puntero a una variable de tipo t
dirección de la variable a
valor apuntado por el puntero b
El compilador queja cuando uno usa mal esta notación.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tamaño de tipo
Al reservar memoria, vamos a recibir un puntero a la región
reservada.
Al reservar, vamos a necesitar saber cuánto espacio reservar. La
función sizeof(tipo) devuelve un entero que indica cuántos
bytes necesita una variable del tipo definido.
La salida de sizeof() es de tipo size t que es simplemente un
entero constante sin signo. El espacio necesario para k variables se
calcula por multiplicar: por ejemplo k∗sizeof(int), donde k
puede ser constante o variable.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tamaño de tipo
Al reservar memoria, vamos a recibir un puntero a la región
reservada.
Al reservar, vamos a necesitar saber cuánto espacio reservar. La
función sizeof(tipo) devuelve un entero que indica cuántos
bytes necesita una variable del tipo definido.
La salida de sizeof() es de tipo size t que es simplemente un
entero constante sin signo. El espacio necesario para k variables se
calcula por multiplicar: por ejemplo k∗sizeof(int), donde k
puede ser constante o variable.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Tamaño de tipo
Al reservar memoria, vamos a recibir un puntero a la región
reservada.
Al reservar, vamos a necesitar saber cuánto espacio reservar. La
función sizeof(tipo) devuelve un entero que indica cuántos
bytes necesita una variable del tipo definido.
La salida de sizeof() es de tipo size t que es simplemente un
entero constante sin signo. El espacio necesario para k variables se
calcula por multiplicar: por ejemplo k∗sizeof(int), donde k
puede ser constante o variable.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
sizeof()
size
size
size
size
size
t
t
t
t
t
charsize = sizeof(char);
intsize = sizeof(int);
longsize = sizeof(long);
floatsize = sizeof(float);
doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
sizeof()
size
size
size
size
size
t
t
t
t
t
charsize = sizeof(char);
intsize = sizeof(int);
longsize = sizeof(long);
floatsize = sizeof(float);
doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
sizeof()
size
size
size
size
size
t
t
t
t
t
charsize = sizeof(char);
intsize = sizeof(int);
longsize = sizeof(long);
floatsize = sizeof(float);
doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
sizeof()
size
size
size
size
size
t
t
t
t
t
charsize = sizeof(char);
intsize = sizeof(int);
longsize = sizeof(long);
floatsize = sizeof(float);
doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
sizeof()
size
size
size
size
size
t
t
t
t
t
charsize = sizeof(char);
intsize = sizeof(int);
longsize = sizeof(long);
floatsize = sizeof(float);
doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
sizeof()
size
size
size
size
size
t
t
t
t
t
charsize = sizeof(char);
intsize = sizeof(int);
longsize = sizeof(long);
floatsize = sizeof(float);
doublesize = sizeof(double);
char 1, int 4, long 4, float 4, double 8
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Reservación 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 región
free(void∗ p)
= liberar el espacio apuntado por el puntero
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Conversión de void
Las salidas son tipo void.
Para asignar la salida de malloc() a un int ∗, por ejemplo, hay
que hacer conversión explı́cita (inglés: type casting):
int∗ d = (int∗)malloc(7∗sizeof(int));
m/c/realloc da la salida NULL si la operación no es éxitosa. Es
importante verificar esto en cada programa. Son de la librerı́a
stdlib.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Conversión de void
Las salidas son tipo void.
Para asignar la salida de malloc() a un int ∗, por ejemplo, hay
que hacer conversión explı́cita (inglés: type casting):
int∗ d = (int∗)malloc(7∗sizeof(int));
m/c/realloc da la salida NULL si la operación no es éxitosa. Es
importante verificar esto en cada programa. Son de la librerı́a
stdlib.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Conversión de void
Las salidas son tipo void.
Para asignar la salida de malloc() a un int ∗, por ejemplo, hay
que hacer conversión explı́cita (inglés: type casting):
int∗ d = (int∗)malloc(7∗sizeof(int));
m/c/realloc da la salida NULL si la operación no es éxitosa. Es
importante verificar esto en cada programa. Son de la librerı́a
stdlib.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Conversión de void
Las salidas son tipo void.
Para asignar la salida de malloc() a un int ∗, por ejemplo, hay
que hacer conversión explı́cita (inglés: type casting):
int∗ d = (int∗)malloc(7∗sizeof(int));
m/c/realloc da la salida NULL si la operación no es éxitosa. Es
importante verificar esto en cada programa. Son de la librerı́a
stdlib.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Resultado?
Lo que imprime el programa anterior:
1
6
8
3
2
0
7
7
7
6
9
5
0
2
2
9
9
6
0
2
3
1
2
2
Nota: falta verificar el resultado de malloc()
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
¿Resultado?
Lo que imprime el programa anterior:
1
6
8
3
2
0
7
7
7
6
9
5
0
2
2
9
9
6
0
2
3
1
2
2
Nota: falta verificar el resultado de malloc()
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
string.h
La librerı́a string.h permite realizar varias operaciones con arreglos de
char o punteros a char.
Dra. Elisa Schaeffer
char∗ strcpy(char∗, char∗)
copiar el segundo al primero
char∗ strcat(char∗, char∗)
juntar dos en uno
int strcmp(char∗, char∗)
comparar (antes, igual, después)
char∗ strchr(char∗, int)
la primera ocurrencia de un sı́mbolo
char∗ strstr(char∗, char∗)
primera ocurrencia de otra cadena
size t strlen(char∗)
largo (número de sı́mbolos “ocupados”)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
string.h
La librerı́a string.h permite realizar varias operaciones con arreglos de
char o punteros a char.
Dra. Elisa Schaeffer
char∗ strcpy(char∗, char∗)
copiar el segundo al primero
char∗ strcat(char∗, char∗)
juntar dos en uno
int strcmp(char∗, char∗)
comparar (antes, igual, después)
char∗ strchr(char∗, int)
la primera ocurrencia de un sı́mbolo
char∗ strstr(char∗, char∗)
primera ocurrencia de otra cadena
size t strlen(char∗)
largo (número de sı́mbolos “ocupados”)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
string.h
La librerı́a string.h permite realizar varias operaciones con arreglos de
char o punteros a char.
Dra. Elisa Schaeffer
char∗ strcpy(char∗, char∗)
copiar el segundo al primero
char∗ strcat(char∗, char∗)
juntar dos en uno
int strcmp(char∗, char∗)
comparar (antes, igual, después)
char∗ strchr(char∗, int)
la primera ocurrencia de un sı́mbolo
char∗ strstr(char∗, char∗)
primera ocurrencia de otra cadena
size t strlen(char∗)
largo (número de sı́mbolos “ocupados”)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
string.h
La librerı́a string.h permite realizar varias operaciones con arreglos de
char o punteros a char.
Dra. Elisa Schaeffer
char∗ strcpy(char∗, char∗)
copiar el segundo al primero
char∗ strcat(char∗, char∗)
juntar dos en uno
int strcmp(char∗, char∗)
comparar (antes, igual, después)
char∗ strchr(char∗, int)
la primera ocurrencia de un sı́mbolo
char∗ strstr(char∗, char∗)
primera ocurrencia de otra cadena
size t strlen(char∗)
largo (número de sı́mbolos “ocupados”)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
string.h
La librerı́a string.h permite realizar varias operaciones con arreglos de
char o punteros a char.
Dra. Elisa Schaeffer
char∗ strcpy(char∗, char∗)
copiar el segundo al primero
char∗ strcat(char∗, char∗)
juntar dos en uno
int strcmp(char∗, char∗)
comparar (antes, igual, después)
char∗ strchr(char∗, int)
la primera ocurrencia de un sı́mbolo
char∗ strstr(char∗, char∗)
primera ocurrencia de otra cadena
size t strlen(char∗)
largo (número de sı́mbolos “ocupados”)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
string.h
La librerı́a string.h permite realizar varias operaciones con arreglos de
char o punteros a char.
Dra. Elisa Schaeffer
char∗ strcpy(char∗, char∗)
copiar el segundo al primero
char∗ strcat(char∗, char∗)
juntar dos en uno
int strcmp(char∗, char∗)
comparar (antes, igual, después)
char∗ strchr(char∗, int)
la primera ocurrencia de un sı́mbolo
char∗ strstr(char∗, char∗)
primera ocurrencia de otra cadena
size t strlen(char∗)
largo (número de sı́mbolos “ocupados”)
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Puntero a función
Funciones que dan el mismo tipo de salida y toman los mismos
tipos de parámetros se puede manejar a través de un puntero de
ese “prototipo”:
double multiply(int a, double b) {
return b∗a;
}
typedef double (∗funpoint)(int, double);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Puntero a función
Funciones que dan el mismo tipo de salida y toman los mismos
tipos de parámetros se puede manejar a través de un puntero de
ese “prototipo”:
double multiply(int a, double b) {
return b∗a;
}
typedef double (∗funpoint)(int, double);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Puntero a función
Funciones que dan el mismo tipo de salida y toman los mismos
tipos de parámetros se puede manejar a través de un puntero de
ese “prototipo”:
double multiply(int a, double b) {
return b∗a;
}
typedef double (∗funpoint)(int, double);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Uso de punteros a funciones
Tres maneras de llamar la misma función:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Uso de punteros a funciones
Tres maneras de llamar la misma función:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Uso de punteros a funciones
Tres maneras de llamar la misma función:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Uso de punteros a funciones
Tres maneras de llamar la misma función:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Uso de punteros a funciones
Tres maneras de llamar la misma función:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Uso de punteros a funciones
Tres maneras de llamar la misma función:
funpoint fp = &multiply;
multiply(3, 1.2);
(∗fp)(3, 1.2);
fp(3, 1.2);
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Función como parámetro
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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Función como parámetro
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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Conversiones
Para interpretar una sucesión de sı́mbolos como un número,
usamos las subrutinas siguientes:
atoi
atol
atof
conversión a int
conversión a long
conversión a double
Todas toman un solo argumento: la cadena a convertir a través de
un char ∗.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Conversiones
Para interpretar una sucesión de sı́mbolos como un número,
usamos las subrutinas siguientes:
atoi
atol
atof
conversión a int
conversión a long
conversión a double
Todas toman un solo argumento: la cadena a convertir a través de
un char ∗.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Conversiones
Para interpretar una sucesión de sı́mbolos como un número,
usamos las subrutinas siguientes:
atoi
atol
atof
conversión a int
conversión a long
conversión a double
Todas toman un solo argumento: la cadena a convertir a través de
un char ∗.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Conversiones
Para interpretar una sucesión de sı́mbolos como un número,
usamos las subrutinas siguientes:
atoi
atol
atof
conversión a int
conversión a long
conversión a double
Todas toman un solo argumento: la cadena a convertir a través de
un char ∗.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Conversiones
Para interpretar una sucesión de sı́mbolos como un número,
usamos las subrutinas siguientes:
atoi
atol
atof
conversión a int
conversión a long
conversión a double
Todas toman un solo argumento: la cadena a convertir a través de
un char ∗.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Salida estándar
Para escribir a la salida estándar, utilizamos printf:
´´
´´
printf( Hola, mundo. );
Este proviene de la librerı́a stdio.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Salida estándar
Para escribir a la salida estándar, utilizamos printf:
´´
´´
printf( Hola, mundo. );
Este proviene de la librerı́a stdio.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Incorporación de variables a printf()
int
long
float
double
char
char∗
%d
%ld
%f
%lf
%c
%s
Para punto flotante, se puede definir el número de lugares
decimales de mostrar (habrá redondeo): %.4f dará 4 lugares
después de la coma. También con enteros se puede decir cuánto
espacio dedicarles: %8d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Incorporación de variables a printf()
int
long
float
double
char
char∗
%d
%ld
%f
%lf
%c
%s
Para punto flotante, se puede definir el número de lugares
decimales de mostrar (habrá redondeo): %.4f dará 4 lugares
después de la coma. También con enteros se puede decir cuánto
espacio dedicarles: %8d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Incorporación de variables a printf()
int
long
float
double
char
char∗
%d
%ld
%f
%lf
%c
%s
Para punto flotante, se puede definir el número de lugares
decimales de mostrar (habrá redondeo): %.4f dará 4 lugares
después de la coma. También con enteros se puede decir cuánto
espacio dedicarles: %8d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Incorporación de variables a printf()
int
long
float
double
char
char∗
%d
%ld
%f
%lf
%c
%s
Para punto flotante, se puede definir el número de lugares
decimales de mostrar (habrá redondeo): %.4f dará 4 lugares
después de la coma. También con enteros se puede decir cuánto
espacio dedicarles: %8d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Incorporación de variables a printf()
int
long
float
double
char
char∗
%d
%ld
%f
%lf
%c
%s
Para punto flotante, se puede definir el número de lugares
decimales de mostrar (habrá redondeo): %.4f dará 4 lugares
después de la coma. También con enteros se puede decir cuánto
espacio dedicarles: %8d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Incorporación de variables a printf()
int
long
float
double
char
char∗
%d
%ld
%f
%lf
%c
%s
Para punto flotante, se puede definir el número de lugares
decimales de mostrar (habrá redondeo): %.4f dará 4 lugares
después de la coma. También con enteros se puede decir cuánto
espacio dedicarles: %8d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Incorporación de variables a printf()
int
long
float
double
char
char∗
%d
%ld
%f
%lf
%c
%s
Para punto flotante, se puede definir el número de lugares
decimales de mostrar (habrá redondeo): %.4f dará 4 lugares
después de la coma. También con enteros se puede decir cuánto
espacio dedicarles: %8d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Incorporación de variables a printf()
int
long
float
double
char
char∗
%d
%ld
%f
%lf
%c
%s
Para punto flotante, se puede definir el número de lugares
decimales de mostrar (habrá redondeo): %.4f dará 4 lugares
después de la coma. También con enteros se puede decir cuánto
espacio dedicarles: %8d.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Entrada estándar
scanf toma dos argumentos: un patrón de formato y la dirección
de la variable a la cual leer un valor (del teclado).
´´
´´
scanf( %d , &n);
Ver también: sscanf, getchar y gets en stdio.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Entrada estándar
scanf toma dos argumentos: un patrón de formato y la dirección
de la variable a la cual leer un valor (del teclado).
´´
´´
scanf( %d , &n);
Ver también: sscanf, getchar y gets en stdio.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Entrada estándar
scanf toma dos argumentos: un patrón de formato y la dirección
de la variable a la cual leer un valor (del teclado).
´´
´´
scanf( %d , &n);
Ver también: sscanf, getchar y gets en stdio.h.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Tipo de dato FILE
En ANSI-C, un FILE es un “mango” a un archivo en el sistema de
archivos.
Tı́picamente manejamos un puntero al mango, o sea, un FILE ∗.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Tipo de dato FILE
En ANSI-C, un FILE es un “mango” a un archivo en el sistema de
archivos.
Tı́picamente manejamos un puntero al mango, o sea, un FILE ∗.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Terminal y teclado
stdin
stdout
stderr
teclado
terminal
errores
para leer
para escribir
para escribir
Entonces,
fprintf(stdout, ...);
fscanf(stdin, ...);
Dra. Elisa Schaeffer
=
=
printf(...);
scanf(...);
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Terminal y teclado
stdin
stdout
stderr
teclado
terminal
errores
para leer
para escribir
para escribir
Entonces,
fprintf(stdout, ...);
fscanf(stdin, ...);
Dra. Elisa Schaeffer
=
=
printf(...);
scanf(...);
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Terminal y teclado
stdin
stdout
stderr
teclado
terminal
errores
para leer
para escribir
para escribir
Entonces,
fprintf(stdout, ...);
fscanf(stdin, ...);
Dra. Elisa Schaeffer
=
=
printf(...);
scanf(...);
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Terminal y teclado
stdin
stdout
stderr
teclado
terminal
errores
para leer
para escribir
para escribir
Entonces,
fprintf(stdout, ...);
fscanf(stdin, ...);
Dra. Elisa Schaeffer
=
=
printf(...);
scanf(...);
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Terminal y teclado
stdin
stdout
stderr
teclado
terminal
errores
para leer
para escribir
para escribir
Entonces,
fprintf(stdout, ...);
fscanf(stdin, ...);
Dra. Elisa Schaeffer
=
=
printf(...);
scanf(...);
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Abrir: leer/escribir
FILE∗ f = fopen(...);
Dos parámetros:
◮
el nombre del archivo
◮
el modo de acceso
La salida es NULL si la operación no fue éxitosa.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Abrir: leer/escribir
FILE∗ f = fopen(...);
Dos parámetros:
◮
el nombre del archivo
◮
el modo de acceso
La salida es NULL si la operación no fue éxitosa.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Abrir: leer/escribir
FILE∗ f = fopen(...);
Dos parámetros:
◮
el nombre del archivo
◮
el modo de acceso
La salida es NULL si la operación no fue éxitosa.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si todavı́a no
existe. Cuidado con no reemplazar archivos existentes de
importancia.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Leer sı́mbolo por sı́mbolo
int c = fgetc(...) toma un mango FILE ∗, lee un sı́mbolo (en
un int) y lo envia a su salida.
El caractér 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 siguiente
sı́mbolo leı́do sea el sı́mbolo “repuesto”.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Leer sı́mbolo por sı́mbolo
int c = fgetc(...) toma un mango FILE ∗, lee un sı́mbolo (en
un int) y lo envia a su salida.
El caractér 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 siguiente
sı́mbolo leı́do sea el sı́mbolo “repuesto”.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Leer sı́mbolo por sı́mbolo
int c = fgetc(...) toma un mango FILE ∗, lee un sı́mbolo (en
un int) y lo envia a su salida.
El caractér 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 siguiente
sı́mbolo leı́do sea el sı́mbolo “repuesto”.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Leer sı́mbolo por sı́mbolo
int c = fgetc(...) toma un mango FILE ∗, lee un sı́mbolo (en
un int) y lo envia a su salida.
El caractér 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 siguiente
sı́mbolo leı́do sea el sı́mbolo “repuesto”.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Leer lı́nea por lı́nea
Con fgets(...) podemos leer una lı́nea a la vez.
Toma tres parámetros: un char ∗ al espacio donde guardar la lı́nea
leı́da, el largo máximo de la lı́nea (int) y el mango FILE ∗ al
archivo.
La salida es NULL si la operación falló y un char ∗ válido en otro
caso.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Leer lı́nea por lı́nea
Con fgets(...) podemos leer una lı́nea a la vez.
Toma tres parámetros: un char ∗ al espacio donde guardar la lı́nea
leı́da, el largo máximo de la lı́nea (int) y el mango FILE ∗ al
archivo.
La salida es NULL si la operación falló y un char ∗ válido en otro
caso.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Leer lı́nea por lı́nea
Con fgets(...) podemos leer una lı́nea a la vez.
Toma tres parámetros: un char ∗ al espacio donde guardar la lı́nea
leı́da, el largo máximo de la lı́nea (int) y el mango FILE ∗ al
archivo.
La salida es NULL si la operación falló y un char ∗ válido en otro
caso.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Escribir lı́nea por lı́nea
Los sı́mbolos a los cuales apunta un char ∗ pueden ser escritos en
un archivo por pasar el puntero a ellos juntos con el mango al
archivo a fputs(...).
La salida es cero si todo fue bien, no cero si hubo errores.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Escribir lı́nea por lı́nea
Los sı́mbolos a los cuales apunta un char ∗ pueden ser escritos en
un archivo por pasar el puntero a ellos juntos con el mango al
archivo a fputs(...).
La salida es cero si todo fue bien, no cero si hubo errores.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
¿Todavı́a queda algo?
feof(...) toma un mango y devuelve “1” si el archivo ya
está procesado a su final y “0” en otro caso.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Todo a la vez
fread(...) lee los contenidos del archivo entero dado cuatro
parámetros:
1. un char ∗ a dónde guardar lo leı́do
2. el tamaño de la unidad leı́da en múltiples de sizeof(char)
(o sea, “1”)
3. el número de unidades para leer
4. el mango al archivo FILE ∗
La salida es no cero si algo fue leı́do éxitosamente.
También existe fwrite(...) con los mismos tipos de parámetros.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Todo a la vez
fread(...) lee los contenidos del archivo entero dado cuatro
parámetros:
1. un char ∗ a dónde guardar lo leı́do
2. el tamaño de la unidad leı́da en múltiples de sizeof(char)
(o sea, “1”)
3. el número de unidades para leer
4. el mango al archivo FILE ∗
La salida es no cero si algo fue leı́do éxitosamente.
También existe fwrite(...) con los mismos tipos de parámetros.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Asegurar que todo entre
No todo el contenido escrito en un archivo aparece en ello
inmediatamente en el disco.
Para asegurar que el contenido sea transferido al disco, hay que
llamar fflush(...) con el mango del archivo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Asegurar que todo entre
No todo el contenido escrito en un archivo aparece en ello
inmediatamente en el disco.
Para asegurar que el contenido sea transferido al disco, hay que
llamar fflush(...) con el mango del archivo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Volver a procesar
Con rewind podemos regresar el mango al inicio del archivo. El
único parámetro es el mango mismo.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Cerrar
Cuando acceso a un archivo ya no es necesario, el mango se elimina
por fclose(...) donde el único parámetro es el mango FILE ∗.
Es importante checar que no sea NULL el mango; al cerrar un
NULL, tı́picamente habrá errores durante ejecución.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Cerrar
Cuando acceso a un archivo ya no es necesario, el mango se elimina
por fclose(...) donde el único parámetro es el mango FILE ∗.
Es importante checar que no sea NULL el mango; al cerrar un
NULL, tı́picamente habrá errores durante ejecución.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
rand()
ANSI-C cuenta con una subrutina rand() que genera un número
entero pseudoaleatorio entre cero y RAND MAX. La librerı́a necesaria
es stdlib.h.
Es muy importante inicializar el generador por definir una semilla
con srand(int).
Una buena semilla es el tiempo actual en millisegundos: time(0).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
rand()
ANSI-C cuenta con una subrutina rand() que genera un número
entero pseudoaleatorio entre cero y RAND MAX. La librerı́a necesaria
es stdlib.h.
Es muy importante inicializar el generador por definir una semilla
con srand(int).
Una buena semilla es el tiempo actual en millisegundos: time(0).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
rand()
ANSI-C cuenta con una subrutina rand() que genera un número
entero pseudoaleatorio entre cero y RAND MAX. La librerı́a necesaria
es stdlib.h.
Es muy importante inicializar el generador por definir una semilla
con srand(int).
Una buena semilla es el tiempo actual en millisegundos: time(0).
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Transformaciones
◮
[0, 1]
◮
[a, b]
◮
{0, 1}
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Transformaciones
◮
[0, 1]
◮
[a, b]
◮
{0, 1}
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Transformaciones
◮
[0, 1]
◮
[a, b]
◮
{0, 1}
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Validación
Es muy importante verificar que la distribución de la salida es la
deseada y que no presenten patrones de regularidad las salidas.
Cuando rand() no resulta suficientemente “aleatorio”, existen
otras librerı́as libremente disponibles en lı́nea y varios algoritmos en
la literatura.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Validación
Es muy importante verificar que la distribución de la salida es la
deseada y que no presenten patrones de regularidad las salidas.
Cuando rand() no resulta suficientemente “aleatorio”, existen
otras librerı́as libremente disponibles en lı́nea y varios algoritmos en
la literatura.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Otras distribuciones
Los libros de probabilidad ayudan en convertir una variable
aleatoria uniforme a una de otra distribución, aunque a veces es
necesario generar más que un valor uniforme por cada valor de la
otra distribución.
(Hay tareas relacionadas. Para la distribución exponencial es fácil, por
ejemplo.)
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Entrada y salida
Archivos
Números pseudoaleatorios
Otras distribuciones
Los libros de probabilidad ayudan en convertir una variable
aleatoria uniforme a una de otra distribución, aunque a veces es
necesario generar más que un valor uniforme por cada valor de la
otra distribución.
(Hay tareas relacionadas. Para la distribución exponencial es fácil, por
ejemplo.)
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Preprocesador y assert.h
#ifdef DEBUG
Dra. Elisa Schaeffer
´´
´´
fprintf(stderr, Verificando el puntero... );
assert(p != NULL);
#endif
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Preprocesador y assert.h
#ifdef DEBUG
Dra. Elisa Schaeffer
´´
´´
fprintf(stderr, Verificando el puntero... );
assert(p != NULL);
#endif
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Preprocesador y assert.h
#ifdef DEBUG
Dra. Elisa Schaeffer
´´
´´
fprintf(stderr, Verificando el puntero... );
assert(p != NULL);
#endif
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Preprocesador y assert.h
#ifdef DEBUG
Dra. Elisa Schaeffer
´´
´´
fprintf(stderr, Verificando el puntero... );
assert(p != NULL);
#endif
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Subrutinas
Cuando el código es largo o contiene partes repetitivas, es mejor
divirlo en subrutinas.
El diseño de buenas subrutinas es un arte.
Es esencial o definir o por lo menos declarar cada subrutina antes
de usarlo en el código para que el compilador pueda identificarla.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Subrutinas
Cuando el código es largo o contiene partes repetitivas, es mejor
divirlo en subrutinas.
El diseño de buenas subrutinas es un arte.
Es esencial o definir o por lo menos declarar cada subrutina antes
de usarlo en el código para que el compilador pueda identificarla.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Subrutinas
Cuando el código es largo o contiene partes repetitivas, es mejor
divirlo en subrutinas.
El diseño de buenas subrutinas es un arte.
Es esencial o definir o por lo menos declarar cada subrutina antes
de usarlo en el código para que el compilador pueda identificarla.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Subrutinas
Cuando el código es largo o contiene partes repetitivas, es mejor
divirlo en subrutinas.
El diseño de buenas subrutinas es un arte.
Es esencial o definir o por lo menos declarar cada subrutina antes
de usarlo en el código para que el compilador pueda identificarla.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Parámetros a subrutinas
Al entrar a una llamada de subrutina, el sistema operativo que
está ejecutando el programa copia los valores de los parámetros a
una nueva área 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 la
variable como parámetro.
Cada subrutina puede tener una sola salida al valor de la cual
evalua su llamada.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Parámetros a subrutinas
Al entrar a una llamada de subrutina, el sistema operativo que
está ejecutando el programa copia los valores de los parámetros a
una nueva área 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 la
variable como parámetro.
Cada subrutina puede tener una sola salida al valor de la cual
evalua su llamada.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Parámetros a subrutinas
Al entrar a una llamada de subrutina, el sistema operativo que
está ejecutando el programa copia los valores de los parámetros a
una nueva área 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 la
variable como parámetro.
Cada subrutina puede tener una sola salida al valor de la cual
evalua su llamada.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Recursión
= cuando una computación se repite por un mecanismo donde una
subrutina llama a si misma (o varias diferentes subrutinas hacen
llamadas entre ellos de una manera cı́clica).
Utilizado inteligentemente, recursión es un mecanismo muy
poderoso que facilita el diseño e implementación de buenos
algoritmos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Recursión
= cuando una computación se repite por un mecanismo donde una
subrutina llama a si misma (o varias diferentes subrutinas hacen
llamadas entre ellos de una manera cı́clica).
Utilizado inteligentemente, recursión es un mecanismo muy
poderoso que facilita el diseño e implementación de buenos
algoritmos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Recursión versus iteración
Varios problemas se puede resolver en dos maneras distintas: o por
repetir iterativamente (con for, while, ...) o recursivamente ciertas
operaciones hasta llegar a una condición de terminación.
A veces una de las dos maneras es muy superior a la otra.
Ejemplos: palı́ndromos, triángulo de Pascal, estructuras de datos...
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Recursión versus iteración
Varios problemas se puede resolver en dos maneras distintas: o por
repetir iterativamente (con for, while, ...) o recursivamente ciertas
operaciones hasta llegar a una condición de terminación.
A veces una de las dos maneras es muy superior a la otra.
Ejemplos: palı́ndromos, triángulo de Pascal, estructuras de datos...
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Recursión versus iteración
Varios problemas se puede resolver en dos maneras distintas: o por
repetir iterativamente (con for, while, ...) o recursivamente ciertas
operaciones hasta llegar a una condición de terminación.
A veces una de las dos maneras es muy superior a la otra.
Ejemplos: palı́ndromos, triángulo de Pascal, estructuras de datos...
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Librerı́as propias
Una subrutina bien diseñado suele ser útil en varios programas, no
solamente en ello para el cual fue originalmente escrito.
Para facilitar el reuso de código, es mejor separar tales subrutinas
en sus propios archivos, agrupándolas por archivo según su función.
Preparar un archivo .h propio con las declaraciones de los
constantes, subrutinas, etcétera.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Librerı́as propias
Una subrutina bien diseñado suele ser útil en varios programas, no
solamente en ello para el cual fue originalmente escrito.
Para facilitar el reuso de código, es mejor separar tales subrutinas
en sus propios archivos, agrupándolas por archivo según su función.
Preparar un archivo .h propio con las declaraciones de los
constantes, subrutinas, etcétera.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Librerı́as propias
Una subrutina bien diseñado suele ser útil en varios programas, no
solamente en ello para el cual fue originalmente escrito.
Para facilitar el reuso de código, es mejor separar tales subrutinas
en sus propios archivos, agrupándolas por archivo según su función.
Preparar un archivo .h propio con las declaraciones de los
constantes, subrutinas, etcétera.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Tipos de datos “al gusto”
Practicamente todo lenguaje de programación avanzada les
permite definir (de una manera u otra) sus propios tipos de datos.
Los tipos definidos son combinaciones de los tipos básicos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Tipos de datos “al gusto”
Practicamente todo lenguaje de programación avanzada les
permite definir (de una manera u otra) sus propios tipos de datos.
Los tipos definidos son combinaciones de los tipos básicos.
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Numeros complejos
Por ejemplo, para manejar números complejos x + iy ∈ C, se
puede definir un tipo de datos que contiene dos double: uno para
x y otro para y .
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Declaración en ANSI-C
Tı́picamente se incluye las declaraciones de estructuras en los
archivos .h y la sintaxis es la siguiente:
struct complexNumber {
double real;
double imaginary;
};
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Declaración en ANSI-C
Tı́picamente se incluye las declaraciones de estructuras en los
archivos .h y la sintaxis es la siguiente:
struct complexNumber {
double real;
double imaginary;
};
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Acceso a las partes por un puntero
Para acceder a las partes de una estructura a que tenemos un
puntero, 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Acceso a las partes por un puntero
Para acceder a las partes de una estructura a que tenemos un
puntero, 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Acceso a las partes por un puntero
Para acceder a las partes de una estructura a que tenemos un
puntero, 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Sobrenombres a constantes: #define
#define MAXLENGTH 80
char buffer[MAXLENGTH];
for (i = 0; i < MAXLENGTH; i++) {
...
}
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Sobrenombres a constantes: #define
#define MAXLENGTH 80
char buffer[MAXLENGTH];
for (i = 0; i < MAXLENGTH; i++) {
...
}
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Sobrenombres a constantes: #define
#define MAXLENGTH 80
char buffer[MAXLENGTH];
for (i = 0; i < MAXLENGTH; i++) {
...
}
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Sobrenombres de “opciones”: enum
enum options {
NEXT = 1,
PREVIOUS = 2,
FIRST = 3,
LAST = 4,
EXIT = 5
};
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos propios
Sobrenombres de “opciones”: enum
enum options {
NEXT = 1,
PREVIOUS = 2,
FIRST = 3,
LAST = 4,
EXIT = 5
};
Dra. Elisa Schaeffer
FIME, UANL
Computadoras y programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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 programación
Variables y tipos de datos
Operaciones
Estructuras de control
Arreglos y punteros
Librerı́as estándares
Más allá de lo básico
Subrutinas
Tipos 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
Descargar