You are on page 1of 271

PROGRAMACIN

ESTRUCTURADA
Y ALGO MS
Risto Rangel Kuoppa
Doctor en Ciencias de la Computacin
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 1
ltima actualizacin:
Septiembre 2011
ndice
1. Declaracin de derechos de autor
2. Descripcin del curso
1. Descripcin
2. Evaluacin
3. Calendario
4. Recursos
5. Dinmica de clase
6. Comentarios adicionales
7. Bibliografa
3. Contenido del temario
1. Algoritmos y programas
2. Diseo de programas estructurados
3. Ambiente de desarrollo Unix
4. Programacin modular
5. Elementos bsicos de un programa en lenguaje c
6. Estructuras de decisin
7. Estructuras de repeticin
8. Arreglos y estructuras
9. Cadenas de caracteres
10. Archivos
4. Contenido adicional al temario
1. Ejemplos integradores
2. Apuntadores, referencias, y asignacin
dinmica de memoria.
3. Desarrollo de programas en Windows
con Visual Studio
4. Introduccin a la Programacin
Orientada a Objetos y C++
5. Ejemplos integradores en C++
6. Introduccin a la Programacin Visual
Orientada a Eventos
7. Introduccin al Procesamiento Digital de
Imgenes
5. Conclusiones
4. Limitaciones al curso (explicar/justificar lo
que se va a ver en el siguiente curso
como apuntadores, asignacin
dinmica de memoria, y estructuras de
datos, y ordenamientos, y bsquedas)
6. ndice de contenidos
4. ndice de imgenes
5. ndice de videos
6. ndice de prcticas
7. ndice de ???
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 2
ltima actualizacin:
Septiembre 2011
1. DECLARACIN DE
DERECHOS DE AUTOR
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 3
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 1
Todas las marcas, logotipos y nombres registrados
que aparecen en estas diapositivas son propiedad
de sus respectivos dueos y se reproducen aqu
con el nico objetivo de formacin acadmica.
Por ninguna razn se sugiere implcita o
explcitamente que la autora de dichas marcas,
logotipos, o nombres pertenece a alguien ms. Si
usted es dueo de alguna de estas marcas,
logotipos, o nombres y desea que no se
reproduzcan en estos documentos puede
solicitarlo a: rrk@correo.azc.uam.mx y reciba una
disculpa de antemano por haberlas usado.
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 4
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 2
Las imgenes capturadas de los programas
usados se reproducen aqu tambin por
cuestiones de formacin acadmica. La autora y
propiedad de dichos programas se reconoce
como la de sus legtimos dueos y de ninguna
manera se sugiere de otra forma ya sea implcita
explcitamente. Si usted es dueo de alguno de
estos programas y desea que no sean usados en
estos documentos puede solicitarlo a:
rrk@correo.azc.uam.mx y reciba una disculpa de
antemano por haberlas usado.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 5
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 3
Las siguientes son marcas registradas de Microsoft
Corporation: Win32, Windows, Windows Vista,
Direct3D, DirectPlay, DirectInput, DirectDraw,
DirectMusic, DirectShow, DirectSound, DirectX,
Visual Studio, Visual C++, Visual Basic, Visual C#,
Internet Explorer, MSN, .NET. Estas marcas y sus
logotipos son mencionadas en estas diapositivas
con el nico fin de formacin acadmica. Si
usted es dueo de alguna de estas marcas y
desea que no se reproduzcan en estos
documentos puede solicitarlo a:
rrk@correo.azc.uam.mx y reciba una disculpa de
antemano por haberlas usado.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 6
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 4
Las siguientes son marcas registradas de The
Mathworks, Inc.: MATLAB. Estas marcas y sus
logotipos son mencionadas en estas diapositivas
con el nico fin de formacin acadmica. Si
usted es dueo de alguna de estas marcas y
desea que no se reproduzcan en estos
documentos puede solicitarlo a:
rrk@correo.azc.uam.mx y reciba una disculpa de
antemano por haberlas usado.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 7
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 5
Las siguientes son marcas registradas de Sun
Microsystems: Java. Estas marcas y sus logotipos
son mencionadas en estas diapositivas con el
nico fin de formacin acadmica. Si usted es
dueo de alguna de estas marcas y desea que no
se reproduzcan en estos documentos puede
solicitarlo a: rrk@correo.azc.uam.mx y reciba una
disculpa de antemano por haberlas usado.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 8
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 6
Las siguientes son marcas registradas de Foxit
Software Company (FOXIT): Foxit PDF Editor
Software. Estas marcas y sus logotipos son
mencionadas en estas diapositivas con el nico fin
de formacin acadmica. Si usted es dueo de
alguna de estas marcas y desea que no se
reproduzcan en estos documentos puede
solicitarlo a: rrk@correo.azc.uam.mx y reciba una
disculpa de antemano por haberlas usado.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 9
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 7
KDevelop es un IDE distribuido bajo la licencia GNU GPL
por KDevelop-Project.
MonoDevelop es un IDE distribuido bajo la licencia GNU
GPL por Novell y la comunidad Mono.
Dev-C++ es un IDE distribuido bajo la licencia GNU GPL
actualmente distribuido por SourceForge y
originalmente creado por Colin Laplace.
Code::Blocks es distribuido bajo la licencia GPL v3.0 por
la organizacin Code::Blocks
UNIX es una marca registrada por The Open Group
GNU/Linux es un sistema operativo distribuido bajo la
licencia GNU GPL, fue creado inicialmente por Linus
Torvalds y actualmente existen varias distribuciones
disponibles por distintas organizaciones.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 10
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 8
Las siguientes son marcas registradas de Mozilla
Foundation: Mozilla, mozilla.org, Firefox,
Thunderbird, Bugzilla, Camino, Sunbird,
Seamonkey, Foxkeh, XUL. Estas marcas y sus
logotipos son mencionadas en estas diapositivas
con el nico fin de formacin acadmica. Si
usted es dueo de alguna de estas marcas y
desea que no se reproduzcan en estos
documentos puede solicitarlo a:
rrk@correo.azc.uam.mx y reciba una disculpa de
antemano por haberlas usado.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 11
ltima actualizacin:
Septiembre 2011
1. Declaracin de derechos de autor
parte 9
Las siguientes son marcas registradas de Yahoo!:
Yahoo Messenger. Estas marcas y sus logotipos son
mencionadas en estas diapositivas con el nico fin
de formacin acadmica. Si usted es dueo de
alguna de estas marcas y desea que no se
reproduzcan en estos documentos puede
solicitarlo a: rrk@correo.azc.uam.mx y reciba una
disculpa de antemano por haberlas usado.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 12
ltima actualizacin:
Septiembre 2011
2. DESCRIPCIN DEL CURSO
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 13
ltima actualizacin:
Septiembre 2011
Contenido
1. Descripcin
2. Evaluacin
3. Calendario
4. Recursos

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 14
ltima actualizacin:
Septiembre 2011
2.1. DESCRIPCIN
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 15
ltima actualizacin:
Septiembre 2011
2.1. Descripcin
Segn el programa de estudios oficial (Septiembre
2011).
UEA de 7 crditos (2.5 teora y 2.0 prctica)
Objetivos:
Describir los conceptos de algoritmo y de programa.
Explicar el paradigma de programacin estructurada.
Explicar, elaborar y representar algoritmos.
Implementar programas escritos en lenguaje c, usando
el paradigma de programacin estructurada.
Desarrollar los programas usando el ambiente Unix.

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 16
ltima actualizacin:
Septiembre 2011
2.2. EVALUACIN
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 17
ltima actualizacin:
Septiembre 2011
2.2. Evaluacin
Evaluacin (tienen dos oportunidades para
aprobar este curso en este trimestre)
Tres evaluaciones parciales (en el lugar y hora de
clase)
Participaciones 10%
Examen 70%
Programas 30%
Total 110%
Examen global (fecha, lugar, y duracin son los
mismos que los oficiales)
Examen 100%
Total 100%

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 18
ltima actualizacin:
Septiembre 2011
2.2. Evaluacin
Calificacin final:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 19
3
) (
3 2 1
Parcial Parcial Parcial
Final
C C C
C
+ +
=

-
-
=
global del parte la presenta SI alumn@ el/la si
global, examen del parte la de n Calificaci
global del parte la presenta NO alumn@ el/la si
, Parcial del Evaluacin
i
i

i
i
C
i
Parcial

< s
< s
< s
< s
=
0 . 6 0 . 0 si NA
5 . 7 6.0 si S
5 . 8 5 . 7 si B
5 . 8 si MB
C
Acta
Final
Final
Final
Final
C
C
C
C
2.2. Evaluacin
Programas
Buzones electrnicos:
buzon01.rrk@hotmail.com (grupo matutino)
buzon02.rrk@hotmail.com (grupo vespertino)
Entrega: slo se enva el cdigo fuente al buzn electrnico
(no se acepta ninguna otra forma de entrega).
La ayudante les puede confirmar de recibido el correo.
Formato:
Tema del correo: Programa #, ejemplos: Programa 1, Programa 2
Cuerpo del correo: <Apellido paterno> <Apellido materno>,
<Nombre(s)>
Anexo del correo: Un solo archivo que es su programa (si son varios
archivos entonces empaquetarlos en un archivo .zip o .rar).

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 20
Enven un correo al buzn para darlos de alta en
la lista de contactos y darles su usuario y
contrasea de Unix. Formato:
Tema: Alta Programacin Estructurada
Cuerpo: <Matutino|Vespertino> <Apellido
Paterno> <Apellido Materno>, <Nombre(s)>,
<Matrcula>
2.2. Evaluacin
Programas
El programa deber cumplir con una lista de requisitos la
calificacin del programa ser proporcional al nmero de
requisitos cumplidos.
La hora lmite para la entrega de sus programa ser hasta la
media noche de la fecha de entrega.
Los programas que se van a entregar deben cumplir con el
estndar ANSI c.
Las soluciones a los programas se les harn disponibles despus
de la fecha de entrega.
Las soluciones a los programas se analizarn en clase.
Es responsabilidad del(a) alumn@ el comparar sus programas con las
soluciones.
Nota: Hay muchas formas de hacer un programa para que resuelva
un mismo problema. El programa solucin puede diferir del programa
que ustedes hagan.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 21
2.2. Evaluacin
Examen global
Examen escrito para intentar mejorar la calificacin de uno o
ms parciales.
Nota: El examen global es notoriamente ms difcil que el examen escrito de cualquier parcial ya
que tiene que reflejar el trabajo de tareas y programas.
Consta de tres partes (una por parcial) de las cuales el/la
alumn@ escoge 1, 2, o 3 partes a presentar.
Una vez que el/la alumn@ decide qu partes va a presentar
entonces renuncia automticamente a la calificacin que
tena en el parcial correspondiente. Esto aplica an si el/la
alumn@ no se presenta al examen global.
Requisitos para tener derecho a examen global
Presentarse el ltimo da de clases (Lunes 5 de Diciembre 2011) en el lugar y hora de la clase para
especificar qu partes del global van a presentar. Si no lo hacen, no tienen derecho a presentar el
global.


ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 22
2.2. Evaluacin
La siguiente tabla muestra el caso de varios
estudiantes hipotticos y sus calificaciones en el
acta tras presentar o no alguna(s) parte(s) del
examen global.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 23
2.2. Evaluacin
Correcciones a las calificaciones:
Reclamos a calificaciones del
examen slo se atienden durante la
clase en la que se les entrega el
examen.
No se harn correcciones de
calificaciones en ningn otro
momento.
Renuncia de calificaciones:
Si quieren renunciar a su calificacin
(NA en el acta) lo tienen que
especificar POR ESCRITO en el
examen del tercer parcial en el
examen global.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 24
2.2. Evaluacin
Asistencias
La asistencia al curso es a
responsabilidad y criterio de cada
alumn@.
La asistencia es voluntaria pero NO
se repiten clases en asesora.
Participaciones
Una participacin es una contribucin
de parte del(a) alumn@ a la clase y
que enriquece el proceso de
enseanza-aprendizaje a criterio del
profesor; el criterio no es debatible.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 25
2.3. CALENDARIO
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 26
ltima actualizacin:
Septiembre 2011
2.3. Calendario TENTATIVO

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 27
2.4. RECURSOS
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 28
ltima actualizacin:
Septiembre 2011
2.4 Recursos
Asesora
Con el profesor: Lunes, Mircoles, y Viernes de 11:30 a 13:00 hrs.
Lugar: Cubculo H-286-B (edificio H 2 piso)
Con la ayudante (Elizabeth): Lunes, Martes, Mircoles, Jueves, y
Viernes de 10:00 a 14:00 hrs
Lugar: Laboratorio de Base de Datos (H-299, edificio H 2 piso)
Laboratorio de Base de Datos (H-299)
Para acceder al laboratorio, soliciten su clave de ingreso al
Responsable de Laboratorio de Cmputo en el HP-14 (edificio HP
segundo piso)
Computadoras del Edificio T
Cuentas de UNIX
Existen cuentas de UNIX que pueden usar para programar; si
requieren de una, por favor solictenla al profesor.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 29
2.4. Recursos
URL (No es una hoja web)
http://ce.azc.uam.mx/profesores/rrk/11-O/Programacion Estructurada/
Seminotas (stas y otras diapositivas) y cdigos.
Son SEMI-NOTAS, NO son notas completas y NO sustituyen al libro de
texto. Es responsabilidad del(a) alumn@ complementar las semi-notas
con sus propios apuntes.
Es obligacin del(a) alumn@ el mantener sus propios apuntes ya que
algunas preguntas del examen pueden ser de los visto/discutido en
clase y no slo del contenido de las diapositivas.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 30
2.4. Recursos
Bloque de ejercicios
Cada parcial cuenta con un bloque de 30 ejercicios
diseados para repasar los conceptos de
programacin.
Se recomienda que el/la alumn@ realice estos
ejercicios a conciencia ya que algunos ejercicios
similares pueden venir en el examen.
Las soluciones de los bloques de ejercicios estn
disponibles desde el primer da de clases para que
el/la alumn@ pueda comparar sus resultados.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 31
2.5. DINMICA DE CLASE
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 32
2.5 Dinmica de clase
Exposicin de conceptos.
Ejemplos de los conceptos.
Ejercicios relacionados a los conceptos.
Asesora en el desarrollo de sus programas durante
la clase (sesiones prcticas) y en horario de
asesora.
Si tienen que salir/entrar del saln a deshora
pueden hacerlo sin pedir permiso pero sin
interrumpir la clase.
Todo comentario que enriquezca la clase es
bienvenido.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 33
2.6 COMENTARIOS
ADICIONALES
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 34
2.6 Comentarios adicionales
Un solo curso de un trimestre NO es suficiente para aprender a
programar.
Aprender a programar requiere:
Desarrollar habilidades cognitivas y de abstraccin mental que
slo se obtienen por el entrenamiento constante.
Estas habilidades slo se pueden desarrollar por un@ mism@ al intentar
hacer los programas un@ mism@.
Compromiso y trabajo sincero.
Sentarse en un saln y escuchar a alguien hablar de programar no
sirve para aprender a programar.
Copiar programas de otros no sirve para aprender a programar.
Paciencia (hacer las cosas a ltima hora no sirve para nada).
Hay que equivocarse muchas veces al principio para refinar las
habilidades de programacin.
El equivocarse requiere tiempo para corregir los errores.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 35
2.6 Comentarios adicionales
Aprender a programar requiere:
Leer y entender.
La programacin es un mundo descomunal y no hay libro de texto
que lo abarque en su totalidad.
Hay que leer e interpretar correctamente mucha informacin para
poder hacer un programa uno mismo.
Pensar.
Un buen programador entiende el concepto bsico y sabe aplicarlo
al problema en particular.
Uno no aprende a programar copiando y pegando cdigos de otros.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 36
2.6 Comentarios adicionales
En la programacin hay al menos dos conjuntos de
conceptos:
Conceptos bsicos Conceptos muy sencillos (hasta aburridos)
pero que al combinarlos son sumamente poderosos.
Conceptos derivados Conceptos elaborados a partir de los
conceptos bsicos que pueden ser MUY difciles de entender si no
se entienden por completo los conceptos bsicos.
Para aprender a programar uno debe entender sin lugar a
dudas los conceptos bsicos.
Nota: Por muy aburrido u obvio que les parezca algo, de todos modos
pongan atencin ya que el poco tiempo tedioso pero necesario para
entender lo bsico les ahorrar das (si no es que semanas) ms
adelante.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 37
2.7. Bibliografa
Del temario
1. B.W. Kernighan y D.M. Ritchie, El lenguaje
de programacin C, 2da. Edicin,
Mxico: Prentice-Hall Hispanoamericana,
1995.
2. B.W. Kernighan y R. Pike, El entorno de
programacin UNIX, Mxico: Prentice-Hall
Hispanoamericana, 1987.
3. C. Gregorio Rodrguez et al., Ejercicios de
programacin creativos y recreativos en
C++, Espaa: Prentice-Hall, 2002.
4. F.J. Zaragoza Martnez, 64 ejercicios de
proggramacin, Mxico: UAM
Azcapotzalco, 2011.
5. G.J. Bronson, C++ para ingeniera y
ciencias, Mxico: International Thomson
Editores, 2000.
6. Oram y M. Loukides, Programming With
GNU software, EUA: OReilly Media, 1996.


Recomendada adicional.
1. Cualquier libro de la serie de
Cmo programar de Deitel
y Deitel
2. Langsam, Estructuras de
Datos con C y C++, Prentice
Hall
3. Goodrich, Data Structures
and Algorithms in C++, Ed.
Wiley

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 38
3. CONTENIDO DEL TEMARIO
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 39
ltima actualizacin:
Septiembre 2011
3.1. ALGORITMOS Y
PROGRAMAS
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 40
ltima actualizacin:
Septiembre 2011
Diagramas de flujo y pseudo-cdigo
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 41
ltima actualizacin:
Septiembre 2011
3.1. Algoritmos y programas
Qu es programar?
Hacer un programa
Qu es un programa?
Un programa es un conjunto de instrucciones que una computadora
ejecuta
Cmo se especifican las instrucciones?
Segn un lenguaje de programacin
Por lo tanto, programar es hablarle a la computadora y decirle qu
hacer
Es fcil hablarle a una computadora?
NO!
Las computadoras son herramientas increblemente poderosas pero
increblemente estpidas
Las computadoras requieren que un humano les diga qu hacer con lujo
de detalle.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 42
3.1. Algoritmos y programas
Hablar con otra persona es fcil por que muchas cosas se
pueden dejar al aire ya que la otra persona intenta entender
lo que uno le dice.
Una computadora no intenta entender lo que uno le dice.
Si uno le dice mal las cosas, la computadora hace mal las
cosas.
Hablar con una computadora requiere ser exacto, preciso,
claro, puntual, exhaustivo.
Tal vez por esto a algunas personas les resulta muy difcil
aprender a programar.
Una computadora no hace mal las cosas, ms bien, un
programador no le dijo bien cmo hacer las cosas bien.
A veces los programadores le dicen bien a las computadores
cmo hacer las cosas mal.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 43
3.1. Algoritmos y programas
A una persona le pueden decir: Viste
la cosa que pas junto a eso?.
A una computadora no.
A una computadora le tienen que decir: Notaste en
grado W la diferencia de posicin entre el objeto
nmero X del escenario Y cuyo centro de masa se
encuentra a Z unidades lgicas del centro de masa
del objeto Alfa?
Y adems, decirle ANTES: Qu es un objeto? Cmo
calculo el centro de masa? Dnde est el origen? Qu
objetos componen al escenario? Qu es un escenario?

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 44
3.1. Algoritmos y programas
Cosas como:
Computadora, ejecuta una simulacin del
asteroide chocando contra la base espacial Alfa
Computadora, busca una anomala en las
seales de vida de la nave
Computadora, compensa los escudos para que
la radiacin proteja la nueva forma de vida
Weapons at maximum!
Todo lo anterior es pura ciencia ficcin
(actualmente)
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 45
3.1. Algoritmos y programas
Qu necesito para poder crear un programa?
Papel y lpiz.
Editor de texto y Compilador aparte de lo obvio.
Qu necesito saber para usar estas
herramientas?
Un lenguaje, saber hacer programas y manejo
bsico de un sistema operativo.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 46
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 47
Herramientas
Conocimientos
Programa
Editor de Texto
Compilador
Sistema Operativo
Computadora (HW)
Lenguaje de
Programacin
Tcnicas de
Programacin
Uso de Sistema
Operativo
Solucin a
un problema
(por lo que se le
paga a l@s ingenier@s)
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 48
Editor de Texto
Compilador
Sistema Operativo
Computadora (HW)
Algoritmo
Uso
elemental
Creacin /
modificacin
Resolucin
errores
Lo trataremos
en este curso
No se ve en
este curso
3.1. Algoritmos y programas
Qu es lo que hago al programar?
Traduzco un algoritmo a un lenguaje de
programacin
Algoritmo Secuencia de pasos ordenados que
se ejecutan uno tras de otro para llevar a cabo
una tarea en especfico.
Ejemplo de algoritmo:
Objetivo: Ir a clase a las 7:00 a.m.
Algoritmo: Despertar Quitarse la pijama Baarse
Vestirse Desayunar Tomar el camin.
El resultado de este algoritmo sera el mismo si se
ejecutaran los pasos en orden distinto?

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 49
3.1. Algoritmos y programas
Lenguaje de programacin Gramtica que
define las reglas que una computadora entiende
para darle instrucciones. Igual que con los
humanos, es importante saber las reglas de
gramtica para saber darnos a entender bien
Ejemplos de lenguajes de programacin: Fortran,
Pascal, Cobol, Basic, Java, C, C++, C#, etc.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 50
3.1. Algoritmos y programas
Programar es UN ARTE! as como hablar bien es un arte.
Y como todo buen arte, ste se debe practicar para poder ser
hbil en el mismo.
Sean proactivos! es SU futuro! an cuando no vayan para
Ing. en Computacin. Adems, la programacin est presente
de una u otra forma en muchos mbitos de la ingeniera.
Sugerencia: Csense con un lenguaje y sean polgamos!
Por qu? Otras herramientas y plataformas tienen prcticamente
lo mismo, pero no sabrn acceder a esas caractersticas si no las
conocen en al menos una herramienta/plataforma

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 51
3.1. Algoritmos y programas
Hasta el momento hemos visto que un algoritmo es una
secuencia lgica de pasos ordenados para llevar a cabo una
tarea.
Lgica Tiene una razn de ser que responde a una
necesidad para resolver el problema.
Orden El paso del algoritmo depende del estado actual
de la informacin disponible; ejecutar pasos en distintos
momentos generalmente provoca resultados distintos del
algoritmo.

Para poder implementar un algoritmo ste tiene que ser
bosquejado|diseado previamente.
Existen herramientas en la programacin para bosquejar
algoritmos.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 52
3.1. Algoritmos y programas
Las herramientas ms comunes para bosquejar
algoritmos son:
Pseudocdigo Descripcin escrita de los pasos del
algoritmo; la escritura se hace en lenguaje natural con
el objetivo de que cualquier persona pueda entender
los pasos sin requerir de conocimientos avanzados de
programacin.
Diagramas de flujo Representacin grfica de un
algoritmo.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 53
3.1. Algoritmos y programas
En el pseudocdigo y los diagramas de flujo se describen los
pasos en trminos de:
1. Instrucciones de entrada/salida Instrucciones que
denotan el recibir o transferir datos a entidades externas al
algoritmo (p.e., leer del usuario, escribir a base de datos,
leer de hoja web, etc.)
2. Instrucciones aritmtico-lgicas Instrucciones que
ejecutan operaciones aritmticas (+, -, *, /, %, ^, etc.) y
operaciones lgicas (y, o, no, etc.)
3. Instrucciones condicionales Instrucciones que evalan si
una condicin se cumple (si condicin entonces )
4. Instrucciones cclicas Instrucciones que permiten repetir
una o ms instrucciones varias veces (mientras condicin
hacer )
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 54
3.1. Algoritmos y programas
Ejemplo de pseudocdigo para controlar el acceso a un sistema de
informacin:

1. Repetir tres veces
1. Escribir en pantalla: Introduzca su Nombre:
2. Leer del usuario Nombre.
3. Escribir en pantalla: Introduzca su contrasea:
4. Leer del usuario Contrasea.
5. Si Nombre es Administrador y Contrasea es Hola entonces
1. Escribir en pantalla: Bienvenido Administrador
2. Iniciar programa de conexin a base de datos
3. Terminar.
6. De lo contrario
1. Escribir en pantalla: Nombre o contrasea incorrecta, vuelva a intentar.
2. Apagar computadora.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 55
* La identacin refleja
cdigo dependiente
3.1. Algoritmos y programas
Diagramas de flujo
Los diagramas de flujo describen los pasos de
un algoritmo en los mismos trminos que el
pseudocdigo (Instrucciones de
entrada/salida, aritmtico/lgicas,
condicionales, y cclicas), pero con una
representacin grfica de los mismos.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 56
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 57
NO
SI
Terminal: Indica comienzo
, fin, o suspensin de la
ejecucin de un algoritmo.
Entrada/Salida
Proceso
Evaluacin de una condicin;
la flecha indica el flujo de
procesamiento si la condicin
es verdadera (SI) o falsa (NO)
Condicin mltiple
Lnea de flujo; indica la
direccin del flujo de
procesamiento
Lnea conectora; indica
una unin entre smbolos
Conector; indica la conexin
de diagramas en hojas distintas
Llamada a subrutina; es decir,
otro algoritmo que se representa
con este bloque solamente.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 58
Por lo tanto, el algoritmo para controlar
el acceso a un sistema de informacin
se vera de la siguiente manera en un
diagrama de flujo.
Inicio
Pantalla: Introduzca
su Nombre:
Programa de conexin a
Base de Datos
1. Repetir tres veces
1. Escribir en pantalla: Introduzca su Nombre:
2. Leer del usuario Nombre.
3. Escribir en pantalla: Introduzca su contrasea:
4. Leer del usuario Contrasea.
5. Si Nombre es Administrador y Contrasea es
Hola entonces
1. Escribir en pantalla: Bienvenido Administrador
2. Iniciar programa de conexin a base de datos
3. Terminar.
6. De lo contrario
1. Escribir en pantalla: Nombre o contrasea incorrecta,
vuelva a intentar.
2. Apagar computadora.
Teclado: Nombre
Pantalla: Introduzca
su Contrasea:
Teclado: Contrasea
Nombre =
Administrador
Y
Contrasea =
Hola
Fin
Pantalla: Nombre
o contrasea
incorrecta, vuelva
a intentar
Pantalla: Bienvenido
Administrador
Apagar
computador
a
SI
NO
Es la cuarta
ejecucin?
NO
SI
3.1. Algoritmos y programas
En el bosquejo de un algoritmo:
Casi siempre se usan contenedores temporales
que NO son usados directamente para
almacenar los datos de entrada o de salida.
Estos contenedores se conocen en la
programacin como variables.
Hay contenedores de datos (valores) y
contenedores de conjuntos de datos.
Los contenedores de conjuntos de datos se
conocen como estructuras de datos.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 59
3.1. Algoritmos y programas
En el bosquejo de un algoritmo:
Siempre hay que marcar un punto de inicio y al menos un
punto de trmino del algoritmo.
La asignacin en las expresiones es del lado
derecho de la igualdad hacia el lado izquierdo de
la igualdad.
a := b significa que el valor de la variable b se le
asigna a la variable a
i = 0 significa que la variable i toma el valor de cero
Alfa 5 + a significa que la variable Alfa recibe el
valor de 5 sumado al valor que tiene la variable a

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 60
3.1. Algoritmos y programas
A continuacin veremos una serie de ejemplos de algoritmos
tanto en pseudocdigo como en diagramas de flujo y
analizaremos la ejecucin de dichos algoritmos observando:
La evolucin de los datos
La informacin desplegada al usuario
La informacin capturada del usuario
Vale la pena preguntarse:
Qu pasara si los pasos no tuvieran ese orden?
Qu pasara si los valores iniciales no fuesen los
especificados?

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 61
NOTA: Los siguientes ejemplos han sido tomados de la
bibliografa (Programacin en C++ - Algoritmos, estructuras
de datos y objetos. Luis Joyanes Aguilar, Ed. McGrawHill) y
son reproducidos en estas diapositivas con el nico
objetivo de formacin acadmica.

3.1. Algoritmos y programas
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 62

3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 63
Nota: la condicin 4 est lreves
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 64
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 65
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 66
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 67
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 68
Nota: Falla ya que acepta nmeros negativos; esto
contradice el planteamiento del problema
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 69
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 70
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 71
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 72
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 73
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 74
3.1. Algoritmos y programas

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 75
3.2. DISEO DE PROGRAMAS
ESTRUCTURADOS
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 76
ltima actualizacin:
Septiembre 2011
3.2. Diseo de programas
estructurados
Qu es la programacin estructurada?
Es un paradigma de programacin (una forma de hacer programas).
Ejemplos paradigmas de programacin: Programacin Orientada a Objetos,
Programacin Visual Orientada a Eventos, Programacin Funcional, etc.
Sus caractersticas son:
1. Un programa es una estructura compuesta de sub-estructuras similares.
2. Las estructuras se construyen con instrucciones de: entrada/salida,
aritmtico-lgicas, condicionales, y cclicas.
3. Los programas se dividen en sub-programas con un nico punto de entrada
pero con varios puntos de salida.
Una de las ventajas de la programacin estructurada es que facilita la
modularidad.
Separar las sub-estructuras del programa en segmentos cuya funcionalidad
no se intersecte.
En otras palabras, hacer segmentos de cdigo que se dediquen a resolver una
parte del problema global.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 77
3.2. Diseo de programas
estructurados
Cmo disear programas estructurados?
Para disear un programa estructurado se tiene que seguir una
estrategia que definir cmo y cules estructuras y sub-estructuras
deben de crearse para que un programa en particular resuelva un
problema dado.
Existen muchas estrategias; las dos ms comunes son: De arriba-
hacia abajo, y De abajo-hacia arriba.
De arriba-hacia abajo (top-down en ingls) tambin conocido como
proceso de anlisis o descomposicin.
De abajo-hacia arriba (bottom-up en ingls) tambin conocido como
proceso de sntesis.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 78
3.2. Diseo de programas
estructurados
Estrategia de arriba-hacia abajo
Consiste en descomponer un sistema (la posible solucin al
problema) en subsistemas con el objetivo de ir conociendo las
necesidades (entradas, procesos, salidas) de cada subsistema.
En esta estrategia, cada subsistema se modela sin gran detalle
inicialmente para despus detallarlo con un proceso de anlisis.
Cada vez que se define un subsistema ste se vuelve a
descomponer hasta llegar a una definicin de un subsistema en
nicamente elementos bsicos.
Cules son los elementos bsicos en la programacin estructurada?:
Instrucciones de entrada/salida, aritmtico-lgicas, condicionales, y
ciclos.
Nota: En algunas ocasiones nos encontraremos con subsistemas que
resuelven problemas que alguien ya resolvi por lo que se puede
retomar esa solucin sin tener que disear la solucin a detalle otra vez.
Esto se conoce como reutilizacin de cdigo.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 79
3.2. Diseo de programas
estructurados
Estrategia de abajo-hacia arriba
Consiste en ensamblar sistemas existentes para crear un sistema
ms grande. Por lo tanto, los sistemas existentes se convierten en
sub-sistemas del sistema nuevo.
En esta estrategia, cada subsistema est definido a gran detalle
inicialmente y se acopla a otros subsistemas para crear el sistema
que resuelve el problema.
Esta estrategia implica el empezar con subsistemas sencillos que
eventualmente crecen (al integrarse unos con otros),
incrementando su complejidad y completitud (para resolver el
problema).
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 80
3.2. Diseo de programas
estructurados

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 81
Comandos bsicos de la lnea de comandos.
Para ver el ambiente de desarrollo de windows
con Visual Studio y Codeblocks dirigirse a: 4.2.
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 82
ltima actualizacin:
Septiembre 2011
3.3. AMBIENTE DE DESARROLLO
UNIX
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 83
ltima actualizacin:
Septiembre 2011
Herramientas Conocimientos
Programa
Editor de Texto
Compilador
Sistema Operativo
Computadora (HW)
Lenguaje de
Programacin
Tcnicas de
Programacin
Uso de Sistema
Operativo
Solucin a
un problema
(por lo que se le
paga a l@s ingenier@s)
3.3. Ambiente de desarrollo UNIX
Qu es UNIX?
UNIX es un sistema operativo cuya interfaz principal es de tipo lnea
de comandos
Linux (p.e. Ubuntu) es un sistema operativo derivado de Unix pero cuya
interfaz principal es grfica.
Para poder trabajar en UNIX generalmente se requiere de una
cuenta de usuario y contrasea (la que recibieron al darse de alta
en el buzn electrnico) y acceder a la computadora (o servidor)
donde est instalado UNIX.
Acceder a la computadora se puede hacer de dos formas:
Local En la computadora en la que estn sentados.
Remota Necesitan un cliente telnet para acceder remotamente al
servidor como se muestra en la siguiente diapositiva.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 84
3.3. Ambiente de desarrollo UNIX
Ejemplo de conexin remota a UNIX
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 85
3.3. Ambiente de desarrollo UNIX
Los comandos bsicos de UNIX para manejo de archivos son:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 86
Herramientas Conocimientos
Programa
Editor de Texto
Compilador
Sistema Operativo
Computadora (HW)
Lenguaje de
Programacin
Tcnicas de
Programacin
Uso de Sistema
Operativo
Solucin a
un problema
(por lo que se le
paga a l@s ingenier@s)
Comando Funcin
ls Hace una lista de archivos y directorios (carpetas)
ls a Hace una lista de todos los archivos y directorios
mkdir <directorio> Crea un directorio de nombre <directorio>
rmdir <directorio> Borra el directorio de nombre <directorio>
cd <directorio> Cambia la posicin del cursor hacia dentro del <directorio>
cd Cambia la posicin del cursor al directorio home
cd ~ Cambia la posicin del cursor al directorio home
cd .. Cambia la posicin del cursor al directorio anterior en el rbol
pwd Despliega la ruta del directorio actual
3.3. Ambiente de desarrollo UNIX
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 87
Ejemplo de comandos bsicos.
3.3. Ambiente de desarrollo UNIX
Prctica # 1
Use los comandos bsicos de UNIX para crear una estructura de
directorios como la mostrada en la siguiente figura.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 88
3.3. Ambiente de desarrollo UNIX
Solucin a la prctica # 1
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 89
3.3. Ambiente de desarrollo UNIX
Edicin de archivos de texto en UNIX
Existen varios editores de texto en UNIX que varan en sus complejidad y
capacidades.
Ejemplos: vi, vim, emacs, pico, etc.
Por su simplicidad usaremos pico en este curso.
Para ver el contenido de un archivo en UNIX se puede usar el comando
more <nombre del archivo>.
Si el archivo es de modo texto se ve el texto que contiene.
Si el archivo es de modo binario se ven varios caracteres con distintos
significados.
Nota: para borrar un archivo de texto desde la lnea de comandos
(terminal) pueden usar el comando rm <nombre del archivo>

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 90
3.3. Ambiente de desarrollo UNIX
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 91
Ejemplo de edicin de un archivo de texto.
3.3. Ambiente de desarrollo UNIX
Adems estn los comandos man y -? para obtener ayuda
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 92
3.5. ELEMENTOS BSICOS DE
UN PROGRAMA EN LENGUAJE
C
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 93
ltima actualizacin:
Septiembre 2011
3.5. Elementos bsicos de un
programa en lenguaje c
Para empezar a comprender los elementos bsicos de un
programa en lenguaje c crearemos un programa elemental que
despliega en la terminal la cadena: Hola mundo de programas de
lnea de comandos en UNIX :-)
Requisitos
Archivo de texto con cdigo fuente.
Programa compilador (gcc)
El siguiente vdeo muestra la creacin y ejecucin de este primer
programa.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 94
3.5. Elementos bsicos de un
programa en lenguaje c
Creacin y ejecucin del primer programa en c.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 95
3.5. Elementos bsicos de un
programa en lenguaje c
Qu acabamos de hacer?
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 96
Editor de
Texto
Compilador Enlazador
Archivo con
el cdigo
del programa
Archivo con el
cdigo objeto
Otros archivos
con cdigo
objeto



Compilador/Enlazador
Archivo con el
cdigo ejecutable
Ordenes
a ejecutar
Herramientas Conocimientos
Programa
Editor de Texto
Compilador
Sistema Operativo
Computadora (HW)
Lenguaje de
Programacin
Tcnicas de
Programacin
Uso de Sistema
Operativo
Solucin a
un problema
(por lo que se le
paga a l@s ingenier@s)
3.5. Elementos bsicos de un
programa en lenguaje c
Qu acabamos de hacer?
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 97
Editor de
Texto
Compilador Enlazador
Archivo con
el cdigo
del programa
Archivo con el
cdigo objeto
Otros archivos
con cdigo
objeto



Compilador/Enlazador
Archivo con el
cdigo ejecutable
Ordenes
a ejecutar
Herramientas Conocimientos
Programa
Editor de Texto
Compilador
Sistema Operativo
Computadora (HW)
Lenguaje de
Programacin
Tcnicas de
Programacin
Uso de Sistema
Operativo
Solucin a
un problema
(por lo que se le
paga a l@s ingenier@s)
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 98
Bibliotecas
Cuerpo del programa
Comentarios

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 99
Comentarios
Una forma de definir comentarios
en-cdigo es a travs de ponerlos
entre /* y */.
Todo lo que quede entre estos
dos delimitadores sern tomados
como si fueran comentarios.
Estos es vlido para una ms
lneas.

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 100
El cuerpo del programa es donde est
todo el cdigo que constituye a su
programa.
De momento, con lo que sabemos hasta
ahorita, vamos a decir que el cuerpo del
programa principal son todas las lneas de
cdigo que se encuentra entre:
int main()
{
y
return 0;
}
Ms adelante veremos exactamente qu
significa cada una de estas lneas de
cdigo. De momento, tmenlo como
una regla.

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 101
Dentro del cuerpo del programa
tenemos varias lneas de cdigo
que componen a nuestro
programa.
En general, una lnea de cdigo
es una o ms expresiones que
cumplen las reglas de la
gramtica del lenguaje de
programacin, es decir, la sintaxis.
Una lnea de cdigo de un
programa (en c y C++) termina
con un ;
Tal y como est definida la
sintaxis del lenguaje c

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 102

Todas las lneas de cdigo estn compuestas de
operadores, operandos, y el fin de la expresin; por
ejemplo la lnea de cdigo:
Operadores
(alguna operacin)
Operandos
(a lo que se
le aplica una
operacin)
Fin de la
expresin
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 103

printf est definida como una funcin
en una biblioteca (<stdio.h>); esta
funcin sirve para imprimir una cadena
de caracteres en el dispositivo estndar
de salida de la computadora (es decir,
el monitor).
Hola Mundo! est definido como
una cadena de caracteres.
() los parntesis se consideran como
un operador
Operadores
(alguna operacin)
Operandos
(a lo que se
le aplica una
operacin)
Fin de la
expresin
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 104

printf est definida como una funcin
en una biblioteca (<stdio.h>); esta
funcin sirve para imprimir una cadena
de caracteres en el dispositivo estndar
de salida de la computadora (es decir,
el monitor).
Hola Mundo! est definido como
una cadena de caracteres.
() los parntesis se consideran como
un operador
Operadores
(alguna operacin)
Operandos
(a lo que se
le aplica una
operacin)
Fin de la
expresin
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 105

Por lo tanto, la siguiente lnea de cdigo:


Le ordena a la computadora:
La cadena Hola Mundo! despligala en el
dispositivo estndar de salida FIN
Y cual es el objeto de salida estndar en una
computadora? El monitor!
Un verdadero programador debe de ser capaz de
leer de esta forma absolutamente cualquier lnea
de cdigo.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 106
Recordemos Un algoritmo se debe de expresar en
trminos de:
1. Instrucciones de entrada/salida
2. Instrucciones aritmtico-lgicas
3. Instrucciones condicionales
4. Instrucciones cclicas
Qu acabamos de aprender para c?
Instrucciones de salida.


3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 107
Cadenas En cdigo, una cadena es un conjunto de caracteres
entre comillas. Sin embargo, los caracteres no siempre son
imprimibles, hay otro tipo de caracteres que se conocen como
caracteres de escape y ms que desplegar un arreglo de
pixeles (un carcter), ejecutan una operacin sobre el cursor (en
modo texto).
Los caracteres de escape se definen con la combinacin de la
diagonal invertida \ seguida de un carcter.
Ejemplo: \n es el caracter de escape que le indica al cursor
que se salte a una nueva lnea (\new line)

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 108
Otros caracteres de escape:
\n nueva lnea (mueve el cursor una lnea hacia abajo)
Linux: Lo mueve en la misma posicin
Windows: Lo mueve hacia abajo y lo enva hasta la izquierda
\r retorno de carro (mueve el cursor hasta la izquierda de la
pantalla)
Windows: No hace nada; en windows \n ya incluye un retorno de carro.
Linux: Generalmente \r va acompaado de un \n
\b Backspace, se mueve un caracter a la izquierda
\a Emite un pitido (beep) en la bocina de la computadora.
Nota: La bocina de la computadora NO es la tarjeta de sonido, los mp3s y
otros archivos de sonido se reproducen de otra forma (escribiendo en la
tarjeta de sonido, NO en la bocina de la computadora).
\t Da un tabulador cierta cantidad de espacios.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 109
Otros caracteres de escape:
\f Formfeed (cargar forma) se usa con impresoras
\v Tabulador vertical se usa con impresoras
\ Imprime comilla sencilla
\ Imprime doble comilla
\? Signo de interrogacin
\\ Imprime diagonal invertida


3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 110
Una cadena se representa como un conjunto de
caracteres (incluyendo los de escape) entre una
apertura y un cierre de doble comillas, por ejemplo:

Un caracter se representa entre comillas simples:

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 111
Comentarios:
Para un programador Hola\n son 6 caracteres
(H, o, l, a, \, n)
Para la computadora son 5 caracteres solamente
(H, o, l, a, \n)
Para la computadora cuando encuentra un \ lo junta
con el siguiente caracter para convertirlos en un solo
caracter (un caracter de escape).
Cmo le hago para imprimir una \ si la
computadora lo va a juntar con el siguiente?
Pongo dos \ \ seguidos, por ejemplo:
Hola \\ mundo imprime en pantalla: Hola \ mundo
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 112
3.5. Elementos bsicos de un
programa en lenguaje c
Prctica # 2
Cree un programa en lenguaje c que imprima cuatro estrofas de una
cancin separadas por una lnea y que inicie cada prrafo con un
tabulador.
Ejemplo de la salida:

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 113
3.5. Elementos bsicos de un
programa en lenguaje c
Solucin a la prctica # 2
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 114
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 115
Este lnea de cdigo tambin es una
expresin. De hecho, este tipo de
expresin se conoce como
invocacin de una funcin.
Una funcin es un conjunto de
cdigo encapsulado e
identificado por un nombre.
Lo que esta lnea de cdigo hace es
invocar una comando de la lnea
de comando del sistema; el
comando que invoca es: Pause
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 116
Recordemos podemos usar cdigo que alguien ms hizo


Qu acabamos de aprender para c?
Llamar a subrutinas (invocar una funcin).

Llamada a subrutina; es decir,
otro algoritmo que se representa
con este bloque solamente.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 117
Desplegar en la pantalla cadenas es bastante til, pero
tambin es necesario ver los valores de resultados y esto no
se puede satisfacer slo con cadenas.

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 118
Este programa si bien resuelven el problema, no es
muy til.
Por qu? Por que slo resuelven un mismo problema y para
resolver el problema ms parecido posible (slo cambiando
datos y con la misma operacin), el programador debe de
volver a hacer el programa y PEOR AN: debe de volver a
resolver el problema l/ella mism@.

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 119
Una mejor solucin a este problema sera un programa
que calcula el cuadrado de la suma de dos nmeros
que el usuario captura y no que el programador pone
en el cdigo.
Para hacer esto necesitamos ver cmo se
implementan en c los repositorios de informacin
(datos).

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 120
Una computadora slo almacena 1s y 0s, esta forma de
representar datos se le conoce como representacin binaria
(nmeros en base 2).
Un nmero binario (compuesto slo de 1s y 0s) tiene un valor
equivalente en otras representaciones, como la: octal (base 8),
decimal (base 10), y hexadecimal (base 16).
Ejemplos:
El nmero en binario 0010 es 2 en decimal, 2 en octal, y 2 en
hexadecimal.
El nmero en binario 1010 es 12 en octal, 10 en decimal, y A
en hexadecimal.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 121
Una computadora slo almacena 1s y 0s, esta forma de
representar datos se le conoce como representacin binaria
(nmeros en base 2).
Un nmero binario (compuesto slo de 1s y 0s) tiene un valor
equivalente en otras representaciones, como la: octal (base 8),
decimal (base 10), y hexadecimal (base 16).
Ejemplos:
El nmero en binario 0010 es 2 en decimal, 2 en octal, y 2 en
hexadecimal.
El nmero en binario 1010 es 12 en octal, 10 en decimal, y A
en hexadecimal.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 122
Una computadora slo almacena 1s y 0s, esta forma de
representar datos se le conoce como representacin binaria
(nmeros en base 2).
Un nmero binario (compuesto slo de 1s y 0s) tiene un valor
equivalente en otras representaciones, como la: octal (base 8),
decimal (base 10), y hexadecimal (base 16).
En c no se acostumbra trabajar con los 1s y los 0s directamente
(aunque se puede), sino con datos en decimal.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 123
Los siguientes son conteos de 0 al valor 15 en:
Binario: 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000,
1001, 1010, 1011, 1100, 1101, 1110, 1111
Octal: 0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007, 0010,
0011, 0012, 0013, 0014, 0015, 0016, 0017
Decimal: 0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007, 0008,
0009, 0010, 0011, 0012, 0013, 0014, 0015
Hexadecimal: 0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,
0008, 0009, 000A, 000B, 000C, 000D, 000E, 000F

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 124
Una computadora slo almacena 1s y 0s, pero stos se les
puede interpretar de distinta forma, por ejemplo:
01000000
2
es el carcter @ en ASCII
01000000
2
es 64 como un nmero entero
01000000
2
es 8.9683E-44 en IEEE 754
01000000
2
es True como booleano
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 125
Es importante especificarle a la computadora cmo
debe de interpretar un conjunto de 1s y 0s
almacenados en la memoria.
Esto se logra a travs de especificar el tipo de datos.
Cmo se especifican el tipo de datos?
A travs de una palabra que indica el tipo.
De hecho, el tipo no solo indica cmo interpretarlo sino cuntos bytes
se utilizan para un dato de ese tipo en particular.

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 126
Palabra Tipo de datos # bytes Rango de valores
char Caracter en cdigo ASCII 1 De 0 a 255
bool Booleano (verdadero o falso) 1 {True, False}
short Entero "corto" 2 De -32,768 a 32,767
int Entero 4 De 2,147,483,648 a 2,147,483,647
long Entero "largo" 4 De 2,147,483,648 a 2,147,483,647
__intn Entero de n bytes n* Depende de n
float Punto flotante (real) 4 De -3.4E38 a 3.4E38 (7 digitos)
double Real largo 8 De -1.7E308 a 1.7E308 (15 dgitos)
__wchar_t Caracter en UNICODE 2* De 0 a 65,535
*Estos son exclusivos de Microsoft, los dems
son especficos de Win32 y pueden cambiar en
otras plataformas
Por qu no de -32,768 a 32,768?
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 127
Qu es el cdigo ASCII?
ASCII (American Standard Code for Information Interchange)
Es una lista donde caracteres (imprimibles, de escape, y otros)
se les asocia un nmero para poder ser representados dentro
de una computadora.
Recordemos que una computadora slo guarda nmeros (1s y 0s),
por lo tanto, necesitamos asociar caracteres a nmeros.
Imagen tomada
de Wikipedia
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 128
Qu es UNICODE?
Es un estndar similar al ASCII pero que abarca
caracteres no estndar del alfabeto latino, por ejemplo,
caracteres chinos, rabes, japoneses, rusos, etc.

Utiliza ms bytes que el ASCII
ASCII slo usa 1 bytes, por lo tanto slo puede representar 256
smbolos.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 129
Algunos tipos de datos se les puede agregar
modificadores (pinsenlo como un adjetivo) que varan
la interpretacin del tipo de dato. Ejemplos:
unsigned short va de 0 a 65,535
unsigned int va de 0 a 4,294,967,295
long long va de 9,223,372,036,854,775,808 a
9,223,372,036,854,775,807
unsigned long long va de 0 a
18,446,744,073,709,551,615
signed char va de -128 a 127
Hay ms combinaciones, pero varan mucho de
plataforma a plataforma (Linux vs. Mac vs. Microsoft).
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 130
Hasta ahora hemos visto que los datos slo son 1s y 0s en
memoria y que es necesario definir cmo se van a interpretar al
especificar su tipo.
En este punto vamos a ver cmo puedo reservar un pedazo de
memoria y definir su tipo.
A esta accin se le conoce como declarar una
variable.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 131
Lo que sucede al declarar una variable es que el
programa le pide al S.O. tantos bytes como para
almacenar en memoria ese tipo de datos.
El S.O. verifica en sus tablas qu memoria est libre (no
ocupada por otro programa, p.ej. Excel, Word). Y le dice
al programa dnde (direccin de memoria) empieza la
direccin de memoria donde el programa puede
almacenar su variable.
EL NOMBRE DE LA VARIABLE ES LA DIRECCIN DE
MEMORIA DONDE EMPIEZA A ALMACENARSE EL DATO DE
ESA VARIABLE.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 132
Una variable es un espacio en memoria donde podemos
almacenar un dato, qu tipo de dato? El que se le especifique
en la declaracin.
La sintaxis del lenguaje c para declarar variables es:
<TipoDato> <NombreVariable>;
Ejemplos:
int i; // i es una variable de tipo entero
char c; // c es una variable de tipo caracter
float fFlotante; // fFlotante es un nmero real
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 133
Las lneas de cdigo:
int i; // i es una variable de tipo entero
char c; // c es una variable de tipo caracter
float fFlotante; // fFlotante es un nmero real
Son ledas por un verdadera programador como:
A partir de aqu existe un entero llamado i
A partir de aqu existe un caracter llamado c
A partir de aqu existe un real llamado fFlotante

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 134
Adems de declarar variables stas tambin se pueden inicializar
con un valor dado al momento de su creacin. La sintaxis para
esto es:
<TipoDato> <NombreVariable> = <ValorInicial>;
Ejemplos:
int i = 0;
char c = a;
float fFlotante = 0.0f;
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 135
En c la impresin de variables requiere que pongan como un
parmetro de printf la variable
y adems cmo quieren que la imprima.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 136
En c la impresin de variables requiere que pongan como un
parmetro de printf la variable
y adems cmo quieren que la imprima.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 137
En c la impresin de variables requiere que pongan como un
parmetro de printf la variable
y adems cmo quieren que la imprima.
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 138
Qu pasa si en c no ponemos bien el tipo de datos a
imprimir?



Son las mismas variables pero se ven datos distintos! por
que se mandan imprimir con interpretaciones incorrectas.
Esto no sucede en C++ ya que no se pide el formato
Este es un error lgico MUY difcil de encontrar
Los errores lgicos no los detecta el compilador!
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 139
Cmo saber los detalles de cmo imprimir
nmeros en printf?
Comando man <instruccin>
Principales tipos de printf:
d Decimal (nmeros enteros)
f Flotante (nmeros con punto flotante)
s Cadena de caracteres.


3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 140
Ya vimos que printf puede tener problemas para imprimir
datos si stos se les dice que los interprete de manera
equivocada.



Puedo forzar que un dato la computadora lo interprete de
otra forma?
Si
Este proceso se conoce como casting y para lograrlo hay que
poner como prefijo a una variable el nuevo tipo de dato entre
parntesis:
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 141
Ejemplo de casting
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 142
Recordemos
En el bosquejo de un algoritmo:
Casi siempre se usan contenedores temporales
que NO son usados directamente para
almacenar los datos de entrada o de salida.
Hay contenedores de datos (valores) y
contenedores de conjuntos de datos.
Qu acabamos de aprender para c?
Cmo crear contenedores de informacin
(variables para almacenar datos).


3.5. Elementos bsicos de un
programa en lenguaje c
Prctica # 3
Cree un programa en lenguaje c que imprima las letras a, b, c, A, B, y C
en minsculas y maysculas junto con sus valores ASCII como enteros y
como flotantes.
Ejemplo de la salida:

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 143
3.5. Elementos bsicos de un
programa en lenguaje c
Solucin a la prctica # 3
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 144
3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 145
Entrada estndar en c
Hasta el momento hemos visto cmo desplegar
informacin en el dispositivo estndar de salida
(monitor); ahora veremos cmo recibir informacin
del dispositivo estndar de entrada (el teclado).
El dispositivo estndar de entrada de una
computadora es el teclado.
La lectura de informacin del teclado se hace con
otra entidad del conjunto estndar (std)
scanf() para c

3.5. Elementos bsicos de un
programa en lenguaje c
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 146
ejemplo
3.5. Elementos bsicos de un
programa en lenguaje c
Prctica # 4
Cree un programa en c que lea 5 nmeros flotantes y calcule su
promedio.
Ejemplo de ejecucin:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 147
3.5. Elementos bsicos de un
programa en lenguaje c
Solucin a la prctica # 4
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 148
Variables
Entrada y salida estndar
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 149
ltima actualizacin:
Septiembre 2011
3.4. PROGRAMACIN
MODULAR
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 150
ltima actualizacin:
Septiembre 2011
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 151
Comentarios
Bibliotecas
Cuerpo del programa
El siguiente ejemplo nos demuestra otro concepto: se
recomienda siempre empezar cada funcin con la
declaracin de variables que se van a usar.
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 152
Comentarios
Bibliotecas
Inicio funcin principal
Declaracin de variables
Cdigo de la funcin principal
Termina funcin principal
Retorno de un valor
Con lo que sabemos hasta ahorita podemos ya identificar cada componente de un
programa y de una funcin. NOTA: Es altamente recomendado que absolutamente
todo programa y funciones que ustedes creen siga esta estructura.
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 153
Tipo_Retorno
Nombre(parametros)
{
//lneas de cdigo
}
Tipo_Retorno Nombre(parametros)
{
/*********************************
* Seccin de declaracin de *
* variables *
*********************************/

/*********************************
* Seccin cdigo *
*********************************/

// Retorno de un valor
}
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 154
Analicemos ahora la ltima lnea de cdigo

Esta ltima lnea del programa elemental (Hola Mundo!) lo
que hace es regresar a la entidad que invoca la funcin
main el valor de 0 (cero) cuando termina de ejecutarse
esta funcin.
Quin es esta entidad?
El Sistema Operativo.
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 155
NOTA: Este programa es muy sencillo y bien se puede trabajar
con l en su totalidad.
Esto no es as en los programas normales. Un
programa generalmente consta de varios mdulos
y uno NO siempre puede ver el cdigo completo.
Por lo tanto, vayan fijndose y aprendiendo bien los
componentes bsicos de los programas ya que los
programas que veremos ms adelante NO caben
completos en las diapositivas
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 156
Puede un programador definir sus
propias subrutinas/funciones?
Si
Qu se necesita saber definir
subrutinas/funciones?
Las partes que las componen
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 157
Las funciones tienen dos partes bsicas:
Prototipo El prototipo es la declaracin de la funcin
sin ningn cdigo, el formato es:
Tipo_Retorno Nombre(parametros);
Definicin La declaracin es el cdigo que
encapsulado en la funcin, el formato es:
Tipo_Retorno Nombre(parametros)
{
//lneas de cdigo
}
NOTA: Se repite el
prototipo de la funcin
pero sin el punto y
coma al final!
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 158
Las funciones tienen dos partes bsicas:
Prototipo El prototipo le dice al compilador que
una subrutina con esas caractersticas existe
NOTA Los prototipos se deben de definir entre el main y los includes

Definicin La definicin de la funcin le dice al
compilador lo que hace esa subrutina
NOTA Los cuerpos/definiciones de las funciones se pueden poner
despus del main

La capacidad de definir funciones en un lenguaje de
programacin da un soporte directo a la
programacin modular.
3.4. Programacin modular
Prctica # 5
Modifique el programa de la prctica 2 para que las estrofas de la
cancin se impriman al invocarse una funcin por cada una.
Ejemplo de la salida:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 159
3.4. Programacin modular
Solucin a la prctica # 5
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 160
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 161
Recordemos Un algoritmo se debe de expresar en
trminos de:
1. Instrucciones de entrada/salida
2. Instrucciones aritmtico-lgicas
3. Instrucciones condicionales
4. Instrucciones cclicas
Qu acabamos de aprender para c y C++?
Instrucciones de entrada.

Entrada/Salida
3.4. Programacin modular
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 162
3.4. Programacin modular
Recordemos: Una funcin es una subrutina, es decir, un
conjunto de lneas de cdigo que se ejecutan en el momento
en que se invoca la funcin.
Una funcin tiene la sintaxis:
<Tipo de Retorno> <Nombre Funcin>(<Lista de parmetros>);
Los parmetros son duplas <Tipo> <Nombre> separado por comas.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 163
3.4. Programacin modular
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 164
Prototipo de la funcin.
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 165
Invocaciones (3) de la funcin.
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 166
Implementacin, definicin, o
cuerpo de la funcin.
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 167
Prototipo de la funcin: Le indica al
compilador (y cualquier otro programador)
que existe una funcin con estas
caractersticas en el programa.
Qu caractersticas?
Tipo de retorno: void. Es decir, nada, no
tiene tipo de retorno
Nombre: MiFuncin1
Parmetros: Ninguno
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 168
Invocaciones (3) de la funcin: Son
llamadas a subrutinas. En cada invocacin
se ejecuta todo el cdigo que define a la
funcin.
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 169
Implementacin, definicin, o cuerpo de la
funcin: Son todas las lneas de cdigo
que se ejecutan cada vez que se invoca la
funcin.
Ms sobre funciones
Recordemos: Las funciones son segmentos de
cdigo que se ejecutan cuando se invoca la
funcin, por lo tanto, el programa anterior es
equivalente a:
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 170
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 171
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 172
Si modificamos el contenido de una funcin, modificamos
el comportamiento de la funcin para cada vez que se
invoca, por ejemplo:
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 173
Lo cual es equivalente a:
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 174
Lo cual es equivalente a:
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 175
Ms sobre funciones
Por lo tanto: Sugerencia, utilicen las funciones cada vez que tienen
segmentos de cdigo que se repiten.
Es ms fcil hacer un solo cambio en el cdigo a que tener que
hacer varios cambios idnticos.
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 176
Ms sobre funciones otro ejemplo,
ahora con parmetros
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 177
Ms sobre funciones
Los variables que definen los parmetros de una funcin,
toman los valores que se les asign a la hora de invocar la
funcin.
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 178
Ms sobre funciones otro ejemplo,
ahora con parmetros
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 179
Ms sobre funciones
Los valores que se le pasan como parmetro a una
funcin pueden ser de cualquier tipo: escritos en el
cdigo, valores de otras variables, etc.
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 180
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 181
Las funciones no solo reciben parmetros, sino que
tambin pueden regresar valores. Los valores tienen que
ser del tipo de retorno de la funcin.
Una funcin regresa un valor con la palabra
reservada return.
Nota: Cualquier cdigo que est despus de
la instruccin return NO ser ejecutado.
El valor que regresa una funcin es el valor
que se pone en el lugar donde se invoc la
funcin.
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 182
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 183
1 2
1 2
1 2
1 2
1
2
1 2
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 184
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 185
2 1
2 1
2 1
2 1
2
1
2 1
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 186
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 187
Este cdigo es equivalente al
de la siguiente diapositiva
Ms sobre funciones
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 188
Ms sobre funciones
Resumiendo, una funcin:
Es un segmento de cdigo / una subrutina /
varias lneas de cdigo agrupadas.
Tiene lneas de cdigo en su cuerpo y stas se
ejecutan cada vez que se invoca la funcin.
Tiene parmetros que toman los valores con los
que se invoca la funcin.
Puede regresar un valor que se sustituye / pone
/ aparece en el lugar donde se invoc la
funcin.
Puede requerir un prototipo para que el
compilador la utilice.
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 189
Ms sobre funciones
Cmo diferenciar entre
prototipo, invocacin, y
definicin de una funcin?
Por la sintaxis!
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 190
Ms sobre funciones
Sintaxis de un prototipo de una funcin.
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 191
<Tipo Dato> <Nombre>
(
<Parmetro> <Parmetro> <Parmetro>
)
, , , ;
<TipoDato> <NombreParametro>
<TipoDato> <NombreParametro>
<TipoDato> <NombreParametro>
Ms sobre funciones
Sintaxis de la invocacin de una funcin.
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 192
<Nombre>
(
<Parmetro> <Parmetro> <Parmetro>
)
, , , ;
<AlgunValor>
<AlgunValor>
<AlgunValor>
Ms sobre funciones
Sintaxis de la definicin de una funcin.
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 193
<Tipo Dato> <Nombre>
(
<Parmetro> <Parmetro> <Parmetro>
)
, , ,
{
//una o varias
//lnea de cdigo
return ???;
}
<TipoDato> <NombreParametro>
<TipoDato> <NombreParametro>
<TipoDato> <NombreParametro>
Ms sobre funciones
Sintaxis de la definicin de una funcin.
Copyright Risto Rangel Kuoppa 2008. Todos los derechos reservados. 194
<Tipo Dato> <Nombre>
(
<Parmetro> <Parmetro> <Parmetro>
)
, , ,
{
//una o varias
//lnea de cdigo
return ???;
}
<TipoDato> <NombreParametro>
<TipoDato> <NombreParametro>
<TipoDato> <NombreParametro>
Se repite el prototipo de la funcin, pero NO termina
en punto y coma y adems, le sigue un segmento
de cdigo (apertura y cierre de llaves)
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 195
3.4. Programacin modular
Soporte del lenguaje (c) para la programacin
modular.
Hasta ahorita hemos visto que:
La capacidad de definir funciones en un lenguaje de
programacin da soporte directo a la programacin
modular.
Una de las ventajas de la programacin estructurada es que
facilita la modularidad.
Separar las sub-estructuras del programa en segmentos
cuya funcionalidad no se intersecte.
En otras palabras, hacer segmentos de cdigo que se
dediquen a resolver una parte del problema global.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 196
3.4. Programacin modular
Uno de los soportes a la modularidad en el lenguaje c es
el poder integrar varios archivos con cdigo para poder
crear un solo programa ejecutable.
Se tienen dos tipos de archivos:
Con extensin .c para cdigo fuente de la funcin
main y la definicin de varias funciones.
Con extensin .h para la declaracin de varias funciones
(prototipos).
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 197
3.4. Programacin modular
El siguiente ejemplo muestra cmo crear un programa y
un mdulo con funciones adicionales.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 198
3.4. Programacin modular
El siguiente ejemplo muestra cmo agregar mdulos a
un programa ya existente.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 199
3.4. Programacin modular
El siguiente ejemplo muestra cmo agregar mdulos a
un programa ya existente.
3.4. Programacin modular
Qu acabamos de hacer?
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 200
Editor de
Texto
Compilador Enlazador
Archivo con
el cdigo
del programa
Archivo con el
cdigo objeto
Otros archivos
con cdigo
objeto



Compilador/Enlazador
Archivo con el
cdigo ejecutable
Ordenes
a ejecutar
Herramientas Conocimientos
Programa
Editor de Texto
Compilador
Sistema Operativo
Computadora (HW)
Lenguaje de
Programacin
Tcnicas de
Programacin
Uso de Sistema
Operativo
Solucin a
un problema
(por lo que se le
paga a l@s ingenier@s)
3.4. Programacin modular
Puntos clave
Las bibliotecas (.h) creadas por el programador se incluyen con
doble comilla () SI es que se encuentran en el directorio de
trabajo.
Las bibliotecas (.h) SOLO llevan prototipos de funciones (y
declaraciones de variables globales).
Los archivos fuente (.c) SOLO llevan definiciones de funciones.
Slo puede existir un archivo con la funcin principal (main) y
sta es nica dentro del mismo archivo.
Sugerencia: Separar los mdulos en base a los subproblemas
que resuelven del problema principal.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 201
3.4. Programacin modular
Prctica # 6
Cree un programa con tres mdulos que se ejecutan secuencialmente.
El primer mdulo imprime las frases
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz. - B.Jurez
Si la raza humana desea tener un perodo prolongado e indefinido de prosperidad material, lo nico
que tienen que hacer es ayudarse y comportarse pacficamente entre ellos. W.Churchill
El Ojo por ojo slo hara que todo el mundo quedara ciego M.Gandhi
El segundo mdulo resuelve una ecuacin cuadrtica de la forma
dados los coeficientes a, b, y c.
Sugerencia 1: use la funcin sqrtf() de la biblioteca math.h para el clculo de la raz cuadrada
Sugerencia 2: para compilar un programa con math.h indique al compilador que enlace la librera
de matemtica con la opcin -lm por ejemplo:

El tercer mdulo debe de imprimir un rbol de navidad con caracteres ASCII parecido al de
la siguiente figura:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 202

2
+ + = 0
3.4. Programacin modular
Prctica # 6
Ejemplo de salida:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 203
3.4. Programacin modular
Solucin a la prctica # 6
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 204
Funciones
Archivo .h y .cpp
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 205
ltima actualizacin:
Septiembre 2011
3.6. ESTRUCTURAS DE DECISIN
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 206
ltima actualizacin:
Septiembre 2011
3.6. Estructuras de Decisin
Los programas, en su gran mayora, no son ejecuciones lineales de
cdigo. La gran mayora de los programas toman decisiones
sobre el cdigo a ejecutar.
Estas decisiones en general responden a:
Interaccin con el usuario
Resultados de algn algoritmo
A continuacin veremos cmo se pueden tomar decisiones en c al
ejecutarse el cdigo.
La primera estructura de control nos permite decidir entre dos
segmentos (mbitos) de cdigo a ejecutar.
La estructura es el: if/else
Su sintaxis es:

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 207
if (<expresin>)
{
/*1 o + lneas cdigo*/
}
else
{
/* 1 o + lneas cdigo*/
}
if (<expresin>)
{
/* 1 o + lneas cdigo*/
}
3.6. Estructuras de Decisin
Funcionamiento Si la expresin dentro de los parntesis del if se
evala a Verdadero (1) se ejecuta el cdigo que sigue al if. Si la
expresin se evala a Falso (0) se ejecuta el cdigo que sigue al
else.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 208
if (<expresin>)
{
/* 1 o + lneas cdigo*/
}
else
{
/* 1 o + lneas cdigo*/
}
Se ejecuta si
<expresin> es
Verdadero
Se ejecuta si
<expresin> es
Falso
3.6. Estructuras de Decisin

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 209
Ejemplo
3.6. Estructuras de Decisin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 210
Recordemos Un algoritmo se debe de expresar en trminos de:
1. Instrucciones de entrada/salida
2. Instrucciones aritmtico-lgicas
3. Instrucciones condicionales
4. Instrucciones cclicas
Qu acabamos de aprender para c y C++?
Instrucciones condicionales.

NO
SI
Evaluacin de una condicin;
la flecha indica el flujo de
procesamiento si la condicin
es verdadera (SI) o falsa (NO)
3.6. Estructuras de Decisin
Conclusin La estructura if/else nos permite tomar decisiones en
base a los valores que resultan de un algoritmo de los valores
ingresados por el usuario. La decisin se basa en la evaluacin de
la expresin dentro del parntesis del if.

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 211
3.6. Estructuras de Decisin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 212
NOTA: Un error muy
comn es no entender
(o fijarse) que toda
asignacin (=) es una
expresin que SIEMPRE
se evala
correctamente
Ejemplo:

3.4. Programacin modular
Prctica # 7
Cree un programa que le pida al usuario una calificacin y le diga al
usuario su calificacin en el acta.
Ejemplos de salida:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 213
3.4. Programacin modular
Solucin a la prctica # 7
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 214
3.6. Estructuras de Decisin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 215
Otra estructura de control
para la seleccin de
cdigo a ejecutar es:
switch/case. Esta nos
permite definir varios
segmentos de cdigo
para escoger a ejecutar.
Su sintaxis es:
switch(<Variable>)
{
case <Valor1>:
/*Cdigo*/
break;
case <Valor2>:
/*Cdigo*/
break;
case <Valor3>:
/*Cdigo*/
break;
.
.
.
default:
/*Cdigo*/
break;
}
//Es opcional
3.6. Estructuras de Decisin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 216
Ejemplo
3.6. Estructuras de Decisin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 217
Recordemos Un algoritmo se debe de expresar en trminos de:
1. Instrucciones de entrada/salida
2. Instrucciones aritmtico-lgicas
3. Instrucciones condicionales
4. Instrucciones cclicas
Qu acabamos de aprender para c?
Instrucciones condicionales.

Condicin mltiple
3.6. Estructuras de Decisin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 218
Un error comn al usar la estructura switch/break es no
poner la instruccin break al final de cada segmento de
cdigo a ejecutar.
Esto provoca que el programa siga su ejecucin con la
siguiente lnea de cdigo del siguiente caso (case).
3.6. Estructuras de Decisin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 219
Este comportamiento no es un error del lenguaje sino que
es una facilidad para poder ejecutar un mismo segmento
de cdigo para distintos casos (case).
3.4. Estructuras de Decisin
Prctica # 8
Cree un programa que le pida al usuario un nmero de mes (1 al 12) y
le indique qu mes es ese; adems, si el usuario no ingres un nmero
del 1 al 12, el programa le debe de indicar que tiene que ingresar un
nmero del 1 al 12.
Ejemplos de salida:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 220
3.6. Estructuras de Decisin
Solucin a la prctica # 8
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 221
3.6. Estructuras de Decisin
Prctica # 9
Modifique el cdigo de la prctica # 6 para que el usuario pueda
escoger cul de los tres mdulos ejecutar.
Sugerencia: copie los archivos de la prctica #6 a un nuevo directorio de
trabajo para la prctica #9
Use el comando cp de unix.
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 222
3.6. Estructuras de Decisin
Prctica # 9
Ejemplos de salida:
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 223
3.6. Estructuras de Decisin
Solucin a la prctica # 9
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 224
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 225
Hasta el momento hemos visto que las lneas de cdigo
son expresiones conformadas por operadores y
operandos.
A continuacin veremos una serie operadores, stos sern
clasificados por su uso:
Aritmtico
Equivalencia y relacionales
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 226
Operadores aritmticos
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 227
Operadores lgicos
&& - AND (Y) lgico
|| - OR (O) lgico
! - NOT (No) lgico
Nota: Los operadores lgicos son distintos a los operadores
de bits (operaciones a nivel de los 1s y 0s de los datos..
& - And a nivel de bits
| - Or a nivel de bits
! Not a nivel de bits

3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 228
Operadores de equivalencia y relacionales





Nota: El resultado de las expresiones que evalan
equivalencia o relaciones es un valor booleano (falso -0-
| verdadero -1-)
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 229
Ejemplo:
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 230
Dado que C++ requiere que las expresiones se
introduzcan linealmente (en una lnea de cdigo), es
importante saber las reglas de asociatividad y
precedencia de los operadores.
Asociatividad Cuando se repiten los
operadores, Cul se evala primero?
Precedencia Cuando no se repiten los
operadores, Cul se evala primero?
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 231
Asociatividad La asociatividad puede ser de Izquierda a
Derecha viceversa
Ejemplo; el operador + tiene asociatividad de
izquierda a derecha, es decir:
x+y+z se evala primero x+y y luego ese resultado ms z
Ejemplo; el operador = tiene asociatividad de
derecha a izquierda, es decir:
i = j = 0 se asigna 0 a j y ese valor (0) se asigna despus a i
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 232
Precedencia La precedencia indica el rden en que se
evaluarn los operadores de una expresin hasta que
solamente quede un operando, es decir, el resultado.
Ejemplo; la multiplicacin (*) tiene mayor
precedencia que la suma (+) por lo tanto:
a+b*c se evala b*c primero y luego ese resultado se le suma el
valor de a.
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 233
La siguiente tabla resume la asociatividad y la
precedencia de los operadores.
3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 234
Recordemos Un algoritmo se debe de expresar en trminos de:
1. Instrucciones de entrada/salida
2. Instrucciones aritmtico-lgicas
3. Instrucciones condicionales
4. Instrucciones cclicas
Qu acabamos de aprender para c y C++?
Instrucciones aritmtico-lgicas.

3.?. Expresiones, operadores y
precedencia
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 235
Al comparar una variable contra varios valores hay que poner
explcitamente cada comparacin.
If (i == 0 || i == 1 || i==2) //es correcto
If (i==0 || 1 || 2) //es incorrecto
If (cadena[0] == . || cadena[0]== + || cadena[0] == -)
//es correcto
If (cadena[0] == . || + || -) //es incorrecto
Tambin expresiones operadores y precedencia
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 236
ltima actualizacin:
Septiembre 2011
3.7. ESTRUCTURAS DE
REPETICIN
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 237
ltima actualizacin:
Septiembre 2011
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 238
Hasta el momento hemos visto programas que inician,
toman decisiones (if/else), y siempre terminan. Ahora
veremos cmo mantener cdigo ejecutndose a
travs de ciclos.
La primera estructura de control cclica que veremos es:
while.
La sintaxis de while es:
while (<Expresin>)
{
/*1 o + lneas de cdigo*/
}
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 239
Ejemplo
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 240
Otro ejemplo
3.7. Estructuras de Repeticin
Prctica # 10
Haga un programa que imprima el abecedario en minsculas y en
maysculas.
Ejemplo de la salida:

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 241
3.7. Estructuras de Repeticin
Solucin a la prctica # 10
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 242
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 243
Una estructura similar al while es la estructura do/while,
esta estructura garantiza que el cdigo del ciclo se
ejecuta al menos una vez y despus se evala la
condicin para continuar el ciclo.
Su sintaxis es:
do
{
/*1 o + lneas de cdigo*/
}
while (<Expresin>);
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 244
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 245
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 246
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 247
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 248
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 249
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 250
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 251
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 252
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 253
3.7. Estructuras de Repeticin
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 254

Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 255
ltima actualizacin:
Septiembre 2011
3.8. ARREGLOS Y ESTRUCTURAS
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 256
ltima actualizacin:
Septiembre 2011
3.9. CADENAS DE CARACTERES
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 257
ltima actualizacin:
Septiembre 2011
3.10. ARCHIVOS
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 258
ltima actualizacin:
Septiembre 2011
4. CONTENIDO ADICIONAL AL
TEMARIO
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 259
ltima actualizacin:
Septiembre 2011
4.1. EJEMPLOS INTEGRADORES
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 260
ltima actualizacin:
Septiembre 2011
4.2. APUNTADORES,
REFERENCIAS Y ASIGNACIN
DINMICA DE MEMORIA EN C
Y C++
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 261
4.2. DESARROLLO DE
PROGRAMA EN WINDOWS
CON VISUAL STUDIO
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 262
ltima actualizacin:
Septiembre 2011
Los programas que se van a entregar DEBEN COMPILAR SIN ERROR EN VISUAL C++ 2008
Express Edition (VC++2K8EE). Todo el cdigo que se les dar corre a la perfeccin en
VC++2K8EE, que es la herramienta con la que se les calificar sus programas. Si sus
programas no compilan en VC++2K8EE, tienen cero.
Pueden usar otras herramientas de desarrollo (K-developer, MonoDevelop, Code-blocks,
Dev C++, etc.) pero a la hora de entregar su programa deben de asegurarse que
compilar en VC++2K8EE.
Algunos otros IDEs NO siguen la misma sintaxis que VC++2K8EE y el cdigo que corre
en esas herramientas NO va a compilar en VC++2K8EE.
Por qu Visual C++?
Calibre industrial, facilidades de depuracin (errores lgicos) y tiempo de respuesta.
La herramienta de desarrollo es Visual C++ Express Edition 2008 with Service Pack 1
Se puede obtener gratis de: http://www.microsoft.com/express/
NOTA: Si hacen la instalacin en lnea, a los 30 das les pedir una clave de registro
(sin costo, pero tienen que enviar un correo electrnico). Para evitar esto busquen la
opcin de offline installation (fuera de lnea) para bajar un instalador del Visual Studio
que nunca les pedir una activacin (todo es legal y gratuito para cuestiones
acadmicas sin fines de lucro).
El ayudante les puede quemar en un DVD grabable el instalador fuera de lnea de Visual
Studio 2008 Express Edition with Service Pack 1, para que no tengan que bajarlo de la red.
Cmo programar en Windows + Visual Studio y pasarlo a Unix?

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 263
4.3. INTRODUCCIN A LA
PROGRAMACIN ORIENTADA
A OBJETOS Y C++
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 264
ltima actualizacin:
Septiembre 2011
Entrada y salida estndar en C++
Archivos (flujos de bytes) en C++
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 265
ltima actualizacin:
Septiembre 2011
4.4. INTRODUCCIN A LA
PROGRAMACIN VISUAL
ORIENTADA A EVENTOS
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 266
ltima actualizacin:
Septiembre 2011
Tipos de programas
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 267
4.5. INTRODUCCIN AL
PROCESAMIENTO DIGITAL DE
IMGENES
Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 268
ltima actualizacin:
Septiembre 2011
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 269
3.5. Elementos bsicos de un
programa en lenguaje c
Prctica # ?
Cree un programa en lenguaje c

ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 270
3.5. Elementos bsicos de un
programa en lenguaje c
Solucin a la prctica # ?
ltima actualizacin:
Septiembre 2011 Copyright Risto Rangel Kuoppa 2011. Todos los derechos reservados. 271

You might also like