Upload
juan-balderrama
View
250
Download
0
Embed Size (px)
Citation preview
7/22/2019 USER - C# Guia Total Del Programador
1/403
This book is a full C# learning course. Aimedfor those who want to migrate to this
language, as well as for those who want to
learn programming, even if they do not have
previous knowledge on the subject.
C# 2010
Este libro es un completo curso de programacin en C#, actualizado a la ver-
sin 4.0, incluida en Visual Studio 2010. Es ideal tanto para quienes desean
migrar a este potente lenguaje, como para quienes quieran aprender a pro-
gramar, incluso, sin tener conocimientos previos.
C# es el lenguaje ms utilizado en la actualidad, por ser poderoso, flexible y
robusto. En esta obra cubriremos desde las bases de la programacin estruc-
turada hasta los fundamentos de la orientada a objetos, sin dejar de apren-
der el manejo de estructuras complejas, como los archivos y las clases.
Nicols Cosio aporta su vasta experiencia y la didctica comprobada de sus obras
previas, para facilitar al lector la tarea de comprender cmo se logra desarrollar
cdigo optimizado destinado a obtener aplicaciones poderosas y eficientes.
Una obra imprescindible para fundar bases slidas en el desarrollo y apren-
der a programar de la mejor manera.
Versin completamente mejorada,
actualizada y ampliada de la obra
"Curso de programacin C#"
por Nicols Arrioja Landa Cosio
CONTENIDO
N I V E L D E U S U A R I O
P RI NC I PI A NT E I NT E RM E DI O A VA N ZA D O E X PE R TO
1 | C# Y .NETProgramacin para Windows / Comprender .NET /
Compilador de C# / El ambiente de desarrollo
2 | LOS ELEMENTOS BSICOS DE UN PROGRAMALenguajes / Errores en los programas / Las variables /
Comentarios / Precedencia de operadores / Pedido de datos
3 | EL PROGRAMA TOMA DECISIONESLa toma de decisiones / Expresiones y operadores
relacionales / El uso de if y else / If anidados / Escalera
de if-else / Expresiones lgicas / El uso de switch
4 | CREACIN DE CICLOSEl ciclo for / El valor de inicio / Lmite de conteo / Control
de incremento / El contador y el acumulador / Incrementos
y decrementos / El ciclo while y do while
5 | FUNCIONES Y MTODOSLas funciones / Tipos de funciones / Optimizar con funciones
/ Pasaje de parmetros por copia y paso por referencia
6 | LOS ARREGLOSDeclaracin de arreglos / Asignacin y uso de valores /
Acceso a arreglos / Arreglos de tipo jagged
7 | LAS COLECCIONES
ArrayList / Declaracin / Agregar informacin / El cicloforeach / Stack / Queue / Hashtable
8 | LAS CADENASEl mtodo ToString() / StringBuilder / Justificacin del texto /
Intercambio entre maysculas y minsculas
9 | ESTRUCTURAS Y ENUMERACIONESDefinicin / Crear variables del nuevo tipo / Acceso a la
estructura / Creacin de un constructor
10 | CMO CREAR NUESTRAS PROPIAS CLASESProgramacin orientada a objetos / Clases / Datos / Mtodos
/ Proteccin de datos / Mtodos pblicos y privados
CAPTULO 11: FLUJOS Y ARCHIVOSLos flujos / Streams en memoria / Uso de archivos
CAPTULO 12: DEPURACIN
Cmo depurar un programa / Errores de compilacin /Errores en tiempo de ejecucin / Manejo de errores / Errores
de lgica / Detener la ejecucin
C#
En este sitio encontrar una gran variedad de recursos ysoftw are relacionado, que
le servirn como complemento al contenido del libro. Adems, tendr la posibili-
dad de estar en contacto con los editores, y de participar del foro de lectores, en
donde podr intercambiar opiniones y experiencias.
Si desea ms informacin sobre el libro puede comunicarse connuestro Servicio de Atencin al Lector: [email protected]
GUA TOTALDEL PROGRAMADOR
7/22/2019 USER - C# Guia Total Del Programador
2/403
# / /
7/22/2019 USER - C# Guia Total Del Programador
3/403
C#GUA TOTALDEL PROGRAMADORpor Nicols Arrioja Landa Cosio
00_C#2010.qxd 8/11/10 9:41 AM Page 1
00 C#2010 d 8/11/10 9 41 AM P 2
7/22/2019 USER - C# Guia Total Del Programador
4/403
TTULO: C#
AUTOR: Nicols Arrioja Landa Cosio
COLECCIN: Manuales USERS
FORMATO: 17 x 24 cm
PGINAS: 400
00_C#2010.qxd 8/11/10 9:41 AM Page 2
7/22/2019 USER - C# Guia Total Del Programador
5/403
00 C#2010 qxd 8/6/10 8:14 PM Page 4
7/22/2019 USER - C# Guia Total Del Programador
6/403
PRELIMINARES
Nicols Arrioja Landa Cosio
Catedrtico de IUNIVERTECH y de la Universidad Madero, ele-gido el mejor profesor de los ciclos 2006-2007 y 2007-2008, se de-dica a la investigacin, consulta y capacitacin en reas relacionadascon la realidad virtual, la visualizacin cientfica y los videojuegos.
En 1997, desarroll el primer videojuego de realidad virtual in-mersiva en Latinoamrica, conocido como VRaptor. Tambindesarroll el primer lenguaje de programacin para realidad vir-tual en Latinoamrica CND-VR, que es usado en el medioacadmico para ensear de forma sencilla los conceptos de pro-
gramacin de grficas 3D. Ha sido catedrtico en algunas de las universidades msimportantes de Mxico durante ms de diez aos. En esas instituciones ense des-
de las bases de programacin en lenguaje C hasta Inteligencia Artificial. Ha otor-gado ms de 25 conferencias relacionadas con el desarrollo de la realidad virtual ylos videojuegos en diversas universidades de Mxico. Tiene una patente referida ainterfaces cinemticas para video juegos. Dise el plan y el programa de estudiospara la Maestra en Realidad Virtual y Video Juegos en IUNlVERTECH. Es au-
00_C#2010.qxd 8/6/10 8:14 PM Page 4
00 C#2010 qxd 8/6/10 8:14 PM Page 5
7/22/2019 USER - C# Guia Total Del Programador
7/403
PRLOGOLa facilidad con que hoy en da se tiene acceso a una computadora ha llevado a las per-sonas a emplearlas en gran cantidad de actividades, usando para ello software que rea-liza tareas especficas. Cuando se requiere que la computadora realice otro tipo de ac-ciones y los programas con los que se cuenta no lo hacen, es necesario decirle en su pro-
pio idioma cmo deber actuar, y para esto se recurre a los lenguajes de programacin.Los lenguajes de programacin intentan parecerse a nuestra propia forma de expre-sarnos, para ello cuentan con caractersticas propias de sintaxis y semntica, as co-mo smbolos que permiten decirle a la computadora qu procesos y qu datos de-be manejar, cmo almacenarlos, qu acciones realizar con ellos y cmo presentarlosal usuario. Por esta razn es importante contar con una metodologa que permitaaprender hbitos correctos y efectivos para resolver problemas, los cuales, al ser sub-
divididos para su mejor comprensin, facilitarn su resolucin.Una vez que se ha comprendido el problema, se construye una secuencia de los pa-sos a realizar, mejor conocida como algoritmo, el cual permitir probar si la lgicaes correcta y si los resultados que se obtendrn sern los adecuados. El potencial delos actuales lenguajes de programacin es enorme, ya que permiten automatizar muy
Prlogo
00_C#2010.qxd 8/6/10 8:14 PM Page 5
00 C#2010 qxd 8/6/10 8:14 PM Page 6
7/22/2019 USER - C# Guia Total Del Programador
8/403
PRELIMINARES
EL LIBRO DE UN VISTAZOEl desarrollo de aplicaciones con C# se ha visto modificado en los ltimos tiempos,
y este libro apunta a afianzar los conocimientos indispensables que nos permitirn generar
aplicaciones profesionales de nivel. Cada captulo est dedicado a una tcnica especfica e
ilustrado mediante ejemplos prcticos listos para implementar.
Captulo 1
C# Y .NET
Este capitulo nos introduce a la historia del
desarrollo de los programas para Windows y
cmo el Framework de .NET ayuda a resolver
muchos problemas. Aprenderemos cmocrear y ejecutar nuestro primer programa.
Captulo 2
LOS ELEMENTOS BSICOS DE UN
Captulo 5
FUNCIONES Y MTODOS
Las funciones y los mtodos nos brindan
flexibilidad y la capacidad de poder volver a
utilizar cdigo fcilmente, y tambin nos
ayudan a ordenar nuestros desarrollos, yfacilitan su mantenimiento.
Captulo 6
LOS ARREGLOS
00_C#2010.qxd 8/6/10 8:14 PM Page 6
00 C#2010.qxd 8/6/10 8:14 PM Page 7
7/22/2019 USER - C# Guia Total Del Programador
9/403
El libro de un vistazo
Captulo 9
ESTRUCTURAS Y ENUMERACIONES
En este captulo aprenderemos cmo crear
nuestros propios tipos por medio de las
estructuras y enumeraciones. Las
estructuras tambin nos permiten agrupar la
informacin de una manera ptima, lo cual
nos ayuda a manejarla ms fcilmente.
Captulo 10
CMO CREAR NUESTRAS PROPIAS CLASES
En este captulo empezaremos a conocer los
conceptos de la programacin orientada a
objetos, lo ms utilizado hoy en da. Podremos
crear nuestras propias clases y nuestrospropios objetos, y tambin trabajaremos con
mtodos definidos en las clases.
Captulo 11
FLUJOS Y ARCHIVOS
Es muy frecuente que necesitemos guardar
informacin desde un programa al disco. Por
medio de los flujos y los archivos lo podemos
hacer. Guardaremos y leeremos cadenas, y
veremos que la manipulacin de archivos
tambin es posible.
Captulo 12
DEPURACIN
La depuracin nos permite corregir los
problemas que tiene un programa.
Conoceremos los tipos de errores y cmo
usar el depurador para eliminarlos.Tambin aprenderemos cmo administrar
las excepciones de la mejor manera .
00_C#2010.qxd 8/6/10 8:14 PM Page 7
00 C#2010.qxd 8/6/10 8:14 PM Page 8
7/22/2019 USER - C# Guia Total Del Programador
10/403
PRELIMINARES
Sobre el autor 4
Prlogo 5
El libro de un vistazo 6
Introduccin 12
Captulo 1
C# Y .NET
Breve historia de la programacin
para Windows 14
Descubrir .NET 15
Cmo crear una aplicacin .NET 17
Conseguir un compilador de C# 18El ambiente de desarrollo 18
Crear nuestra primera aplicacin 19
Resumen 29
Actividades 30
Captulo 2
LOS ELEMENTOS BSICOS
DE UN PROGRAMA
Los lenguajes de programacin 32
Los programas de computadora 32Las variables 42
Operaciones aritmticas 49
Cmo pedirle datos al usuario 56
Cmo resolver problemas
en la computadora 60
Resolucin de problemas
en la computadora 64Resumen 69
Actividades 70
CONTENIDO
00_C#2010.qxd 8/6/10 8:14 PM Page 8
00 C#2010.qxd 8/6/10 8:14 PM Page 9
7/22/2019 USER - C# Guia Total Del Programador
11/403
Contenido
Captulo 3
EL PROGRAMA TOMA DECISIONES
La toma de decisiones 72
Expresiones relacionales 72
El uso de if 76
El uso de else 84
Cmo usar if anidados 89
Escalera de if-else 92Expresiones lgicas 96
El uso de switch 105
Resumen 109
Actividades 110
Pedir dividendo
Pedir divisor
Inicio
Captulo 5
FUNCIONES Y MTODOSLas funciones 148
Funciones que ejecutan cdigo 150
Funciones que regresan un valor 156
Funciones que reciben valores 159
Condicin
S
NO
Cdigo
_ # q / / g
00 C#2010.qxd 8/6/10 8:14 PM Page 10
7/22/2019 USER - C# Guia Total Del Programador
12/403
PRELIMINARES
Captulo 6
LOS ARREGLOS
Los arreglos 188
Declaracin de los arreglos
de una dimensin 189
Asignacin y uso de valores 191
Arreglos de dos dimensiones 196
Arreglos de tipo jagged 205Los arreglos como parmetros
a funciones 212
Resumen 215
Actividades 216
Captulo 7
LAS COLECCIONESLas colecciones ms importantes 218
El ArrayList 218
El Stack 232
El Queue 241
Captulo 8
LAS CADENAS
El uso de las cadenas 256
Cmo declarar la cadena 256
El mtodo ToString() 256
Cmo convertir y formatear
fechas a cadenas 257
Para darles formato a valoresnumricos 259
Cmo concatenar cadenas 260
Uso de StringBuilder 261
Comparacin de cadenas 263
Para encontrar una subcadena 264
Para obtener una subcadena 265
Para determinar si una cadenafinaliza en una subcadena 266
Cmo copiar una parte de la cadena 267
Cmo insertar una cadena 268
Para encontrar la posicin de una
_ q g
00_C#2010.qxd 8/6/10 8:14 PM Page 11
7/22/2019 USER - C# Guia Total Del Programador
13/403
Contenido
Captulo 9
ESTRUCTURAS Y ENUMERACIONES
Las estructuras 280
Cmo definir una estructura 280
Cmo crear una variable del nuevo tipo 282
Cmo acceder a los campos
de la estructura 283
Cmo mostrar los camposde la estructura 283
Creacin de un constructor
para la estructura 286
Estructuras enlazadas 299
Las enumeraciones 309
Resumen 315
Actividades 316
Agenda Nombre: String
Direccin: String
Convertir un objeto a cadena 334El constructor en las clases 336
Sobrecarga del constructor 339
Resumen 347
Actividades 348
Captulo 11
FLUJOS Y ARCHIVOS
Los flujos 350
Los stream en la memoria 351
Cubo
+ lado: int
+ rea: int
+ volumen: int
+ CalculaArea() : void
+ CalculaVolumen() : void
_ q g
00_C#2010.qxd 8/6/10 8:14 PM Page 12
7/22/2019 USER - C# Guia Total Del Programador
14/403
PRELIMINARES
INTRODUCCINLa programacin de computadoras es una actividad fascinante, el poder haceruna aplicacin a la medida y de acuerdo a nuestras necesidades es una actividadinteresante y llena de recompensas. Mucha gente llega a pensar que solamentecon aprender la sintaxis de un lenguaje de programacin es suficiente para po-
der hacer programas, pero se equivocan. Aun ms importante que la sintaxis dellenguaje es la tcnica de resolucin del problema y el anlisis adecuado. El tenerbuenos hbitos de anlisis y programacin desde el inicio es fundamental paraconvertirnos en buenos programadores.
Una de los lenguajes que est adquiriendo gran popularidad es C#, un lenguaje sen-cillo, amigable y poderoso. Con C# se pueden crear todo tipo de aplicaciones, des-
de programas de consola para Windows y para pginas web en unin con ASP, has-ta video juegos para Xbox 360 con XNA.
El presente libro introduce a cualquier persona, aun sin conocimientos de progra-macin, al lenguaje C#. Esta obra est actualizada para Visual Studio 2010 y el Fra-
01_C#2010_AJUSTADO.qxd 8/11/10 9:44 AM Page 13
7/22/2019 USER - C# Guia Total Del Programador
15/403
C#.NET
Captulo 1
Este libro est dirigido a todas aquellas
personas que desean aprender
C#
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 14
7/22/2019 USER - C# Guia Total Del Programador
16/403
BREVE HISTORIA DE LA PROGRAMACINPARA WINDOWS
Hace algunos aos la nica forma como se poda programar para Windows erahacer uso de un compilador de C o C++ y de un API de Windows. El API esuna gran coleccin de funciones que se relacionan, las que nos permiten comu-
nicarnos con el sistema operativo. Por medio del API deWin32 se programabanlas ventanas, botones y dems elementos.El problema de este tipo de programacin es que el API de Win32 es realmente com-plejo y enorme. Con miles de funciones en su interior, por lo que pocos programa-dores podan conocerlo en su totalidad. Pero la complejidad no solamente estaba enla cantidad de funciones, tambin en la sintaxis y la forma como se programa.Para facilitar la programacin de aplicaciones para Windows surgen diferentes op-
ciones; la finalidad de estos intentos era poder hacer las aplicaciones sin tener quepasar por la complejidad de Win32. Uno de estos intentos fue conocido comoOWL; sin embargo, obtuvo ms xito MFC, creado por Microsoft.MFC es un conjunto de clases que envuelve a Win32 y facilita su programacin.Con MFC los procesos ms comunes se agrupan en funciones de tal forma que con
1. C#.NET
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 15
7/22/2019 USER - C# Guia Total Del Programador
17/403
delo conocido como COM, ste nos permite crear componentes binarios, esto quieredecir que es posible programar un componente en Visual Basic y un programador deC++ puede tomarlo y hacer uso de l. Esto se debe a que el componente ya es cdigocompilado y no cdigo fuente en el lenguaje de origen; la programacin de COM tam-bin tena sus complejidades y surgeATLpara ayudar en su desarrollo.Con todo esto, llega el momento en el cual es necesario ordenar, facilitar y organi-zar el desarrollo de las aplicaciones para Windows, con esta filosofa surge .NET.
Descubrir .NETEl Frameworkde .NET es una solucin a toda la problemtica en torno al desa-rrollo de aplicaciones, brinda grandes beneficios no solamente al desarrollador, si-no tambin al proceso de desarrollo. En primer lugar .NET permite trabajar concdigo ya existente, podemos hacer uso de los componentes COM, e incluso, si lo
necesitramos usar el API de Windows. Cuando el programa .NET est listo es mu-cho ms fcil de instalar en la computadora de los clientes, que las aplicaciones tra-dicionales ya que se tiene una integracin fuerte entre los lenguajes.Un programador de C# puede entender fcilmente el cdigo de un programador deVisual Basic .NET y ambos pueden programar en el lenguaje con el que se sienten
Breve historia de la programacin para Windows
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 16
7/22/2019 USER - C# Guia Total Del Programador
18/403
El Framework de .NET tiene lo que se conoce como las especificaciones comunes delenguaje o CLS por sus siglas en ingls, estas especificaciones son las guas que cual-quier lenguaje que desee usar .NET debe de cumplir para poder trabajar con el runti-me. Una ventaja de esto es que si nuestro cdigo cumple con las CLS podemos tenerinteroperabilidad con otros lenguajes, por ejemplo, es posible crear una librera en C#y un programador de Visual Basic .NET puede utilizarla sin ningn problema.Uno de los puntos ms importantes de ests guas es el CTS o sistema de tipos
comunes. En los lenguajes de programacin, cuando deseamos guardar informa-cin, sta se coloca en una variable, las variables van a tener un tipo dependiendodel la informacin a guardar, por ejemplo, el tipo puede ser para guardar un n-mero entero, otro para guardar un nmero con decimales y otro para guardar unafrase o palabra. El problema con esto es que cada lenguaje guarda la informacinde manera diferente, algunos lenguajes guardan los enteros con 16 bits de memo-ria y otros con 32 bits; incluso algunos lenguajes como C y C++ no tienen un ti-
po para guardar las cadenas o frases.Para solucionar esto el Framework de .NET define por medio del CTS cmo vana funcionar los tipos en su entorno. Cualquier lenguaje que trabaje con .NET de-be de usar los tipos tal y como se sealan en el CTS. Ahora que ya conocemos losconceptos bsicos, podemos ver cmo es que todo esto se une.
1. C#.NET
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 17
7/22/2019 USER - C# Guia Total Del Programador
19/403
Cuando nosotros deseamos invocar al programa, entonces el runtime entra en ac-cin, lee el assembly y crea para nosotros todo el entorno necesario. El runtimeempieza a leer las instrucciones CIL del assembly y conforme las va leyendo lascompila para el microprocesador de la computadora en la que corre el programa;esto se conoce comoJIT o compilacin justo a tiempo. De esta manera confor-me se avanza en la ejecucin del programa se va compilando; todo esto ocurre demanera transparente para el usuario.
El Framework de .NET provee, para los programas que se estn ejecutando, losservicios de administracin de memoriay recolector de basura. En lenguajesno administrados como C y C++ el programador es responsable de la adminis-tracin de memoria, en programas grandes esto puede ser una labor complicada,que puede llevar a errores durante la ejecucin del programa. Afortunadamentelenguajes administrados como C# tienen un modelo en el cual nosotros comoprogramadores ya no necesitamos ser responsables por el uso de la memoria. El
recolector de basura se encarga de eliminar todos los objetos que ya no son ne-cesarios, cuando un objeto deja de ser til el recolector lo toma y lo elimina. Deesta forma se liberan memoria y recursos.El recolector de basura trabaja de forma automtica para nosotros y ayuda a elimi-nar toda la administracin de recursos y memoria que era necesaria en Win32. En
Breve historia de la programacin para Windows
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 18
7/22/2019 USER - C# Guia Total Del Programador
20/403
Una mejor opcin, en caso de que no podamos conseguir la versin profesional deVisual Studio 2010, es la versin Express. Esta versin es gratuita y se puede des-cargar directamente de Internet, lo nico que se necesita es llevar a cabo un peque-o registro por medio de cualquier cuenta de Hotmail o passport.Para descargar el compilador de C# Express de forma completamente gratuita, po-demos acceder al sitio web que se encuentra en la direccin www.microsoft.com/express, dentro del portal de Microsoft. Para realizar esta descarga slo ser
necesario completar un formulario de registro.Una vez que hemos descargado el compilador, podemos proceder a llevar a cabo lainstalacin; esta tarea es muy similar a la instalacin de cualquier otro programa de
Windows, pero no debemos olvidar registrarlo antes de 30 das.
El ambiente de desarrollo
Una vez finalizada la instalacin podemos iniciar el programa seleccionndolo desdeel men Inicio de Windows, veremos una ventana como la que aparece a continua-cin, que muestra la interfaz de uso de la aplicacin.
1. C#.NET
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 19
7/22/2019 USER - C# Guia Total Del Programador
21/403
podemos recibir comunicados y noticias sobre el desarrollo de software usando C#.En esta misma parte de la interfaz pero como pginas diferentes, tendremos las zo-nas de edicin. Estas zonas de edicin nos permitirn editar el cdigo del progra-ma, editar la interfaz de usuario, iconos y dems recursos.Editar el cdigo del programa es una actividad muy sencilla que no debe preocu-parnos, si sabemos utilizar cualquier tipo de editor de textos como Microsoft Wordo el Bloc de notas de Windows, entonces podemos editar el cdigo del programa.
Los dems editores tambin son bastante amigables para el usuario, pero no los ne-cesitaremos para realizar los ejemplos mostrados en este libro.Del lado derecho tenemos una ventana que se conoce como Explorador de solucio-nes, en esta misma rea aparecern otras ventanas que nos dan informacin sobreel proyecto que estamos desarrollando. Veremos los detalles mostrados por algunasde estas ventanas un poco ms adelante en este libro.En la parte inferior encontramos otra ventana, en esta zona generalmente aparecen
los apartados que utilizar el compilador para comunicarse con nosotros. Por ejem-plo, en esta zona veremos la ventana que nos indica los errores que tiene nuestroprograma, en la parte superior aparecen los mens y las barras de herramientas.
Breve historia de la programacin para Windows
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 20
7/22/2019 USER - C# Guia Total Del Programador
22/403
Figura 2. ste es el cuadro de dialogo que usamos para crear un nuevo
proyecto, gracias a sus opciones podemos generar diferentes tipos de proyectos.
1. C#.NET
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 21
7/22/2019 USER - C# Guia Total Del Programador
23/403
El Explorador de soluciones nos muestra la informacin de la solucin de formalgica, si observamos es como un pequeo rbol. En la raz encontramos a la so-lucin, cada proyecto que tengamos en esa solucin ser una rama, cada proyecto,a su vez, tendr tambin sus divisiones. En nuestro caso vemos tres elementos, dosde esos elementos son carpetas, en una se guardan las propiedades del proyecto yen la otra las referencias (durante este libro no haremos uso de estas carpetas). Eltercer elemento es un documento llamado Program.cs, ste representa al documento
donde guardamos el cdigo fuente de nuestra aplicacin. Vemos que la extensinde los programas de C# es .CS.En el rea de edicin podemos observar que tenemos un esqueleto para que, apartir de ah, podamos crear nuestro propio programa. Para entender lo que te-nemos ah es necesario conocer un concepto: namespace. El namespace es unaagrupacin lgica, por ejemplo, todo el cdigo que podemos tener relacionadocon matemticas puede quedar agrupado dentro del namespace de Math. Otro
uso que tiene el namespace es el de resolver conflictos con los nombres, por ejem-plo, supongamos que tenemos un proyecto muy grande y varios programadorestrabajando en l. Es posible que ambos programadores crearan un mtodo quetuviera el mismo nombre, esto nos genera un conflicto ya que el programa nopodra saber cual versin utilizar. La forma de resolver esto es que cada progra-
Breve historia de la programacin para Windows
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 22
7/22/2019 USER - C# Guia Total Del Programador
24/403
Dentro del bloque de cdigo encontramos la declaracin de una clase, C# es unlenguaje orientado a objetos y por eso necesita que declaremos una clase para nues-tra aplicacin. La clase tiene su propio bloque de cdigo y en nuestra aplicacin sellamar Program. El concepto de clase se ver en el Captulo 10 de este libro.Todos los programas necesitan de un punto de inicio, un lugar que indique dndeempieza la ejecucin del programa, en C#, al igual que en otros lenguajes, el pun-to de inicio es la funcin Main(); esta funcin tambin tiene su propio bloque de
cdigo. Dentro de esta funcin generalmente colocaremos el cdigo principal denuestra aplicacin, aunque es posible tener ms funciones o mtodos y clases. Laspartes y caractersticas de las funciones se ven en el Captulo 5 de este libro.
Ahora es el momento de crear nuestra primera aplicacin. Vamos a modificar el c-digo de la funcin tal y como se muestra a continuacin. Cuando estemos adicio-nando la sentencia dentro de Main(), debemos fijarnos que sucede inmediatamen-te despus de colocar el punto.
using System;
using System.Collections.Generic;
using System.Linq;
using System Text;
1. C#.NET
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 23
7/22/2019 USER - C# Guia Total Del Programador
25/403
Para compilar la aplicacinUna vez que terminemos de escribir nuestro programa, podemos llevar a cabo lacompilacin, como aprendimos anteriormente esto va a generar el assembly que lue-go usar el runtime cuando se ejecute.Para poder compilar la aplicacin debemos seleccionar el men de Depuracin o De-bug y luego Construir Solucin o Build Solution. El compilador empezar a trabajar yen la barra de estado veremos que nuestra solucin se ha compilado exitosamente.
Breve historia de la programacin para Windows
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 24
7/22/2019 USER - C# Guia Total Del Programador
26/403
uso de la ejecucin con depuracin nicamente cuando realmente la necesitemos.Ahora ejecutaremos nuestra aplicacin, para esto oprimimos las teclas CTRL+F5.
Figura 5. Con el menDebug/Start Without
Debbuging nuestro programa se ejecutar.
1. C#.NET
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 25
7/22/2019 USER - C# Guia Total Del Programador
27/403
Escribamos a propsito un error para que veamos cmo se comporta el compilador.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MiProyecto
{class Program
{
static void Main(string[] args)
{
Consola.WriteLine(Hola Mundo!);
}
}}
En el programa hemos cambiado Console por Consola, esto provocar un error; aho-
Breve historia de la programacin para Windows
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 26
7/22/2019 USER - C# Guia Total Del Programador
28/403
Como ya sabemos, la ventana que aparece en la parte inferior de nuestra interfaz deusuario es utilizada por el compilador para comunicarse, vemos que aparece unaventana que nos entrega un listado de errores; en el Captulo 12, dedicado a la depu-racin, aprenderemos a utilizarla, ahora simplemente debemos saber que siempre esnecesario resolver el primer problema de la lista y que podemos ir directamente alerror haciendo doble clic con el mouse sobre l.
La vista de clasesAhora revisaremos lavista de clases. En esta vista podemos obtener informacinsobre la solucin que estamos creando, pero a diferencia del Explorador de solu-ciones, la informacin se encuentra ordenada en forma lgica.Con esta vista podemos encontrar rpidamente los namespace de nuestra solucin ydentro de ellos las clases que contienen; si lo deseamos, podemos ver los mtodos quese encuentran en cada clase. Esta vista no solamente permite observar la informacin
lgica, tambin nos da la posibilidad de navegar rpidamente en nuestro cdigo.En la versin Express no viene la opcin previamente configurada, por lo que es ne-cesario adicionar el comando al men Vista.Para mostrar la vista de clases debemos de ir al men Vista y luego seleccionar Vis-ta de Clases, una ventana aparecer en nuestra interfaz de usuario.
1. C#.NET
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 27
7/22/2019 USER - C# Guia Total Del Programador
29/403
Figura 9.Aqu podemos observar a la vista de clases en el lado
derecho. El rbol est abierto para poder ver los elementos que lo componen.
En la raz del rbol encontramos al proyecto, ste va a contener las referencias ne-cesarias y el namesapace de MiProyecto. Si tuviramos ms namespaces estos apare-
Breve historia de la programacin para Windows
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 28
7/22/2019 USER - C# Guia Total Del Programador
30/403
Figura 10. Es necesario seleccionar la opcin de Customize en el men Tools.
1. C#.NET
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 29
7/22/2019 USER - C# Guia Total Del Programador
31/403
Aparecen listados los comandos actuales del men, damos clic en la zona donde de-seamos que se inserte el nuevo comando y oprimimos el botn Add Command. Conesto aparece un nuevo cuadro de dialogo que muestra todos los posibles comandosque podemos adicionar clasificados en categoras.En las categoras seleccionamos View y en los comandos Class View, este comandoes el que nos permite tener la vista de clases. El comando de Iniciar Sin Depurar seencuentra en la categora Debug.
Breve historia de la programacin para Windows
01_C#2010_AJUSTADO.qxd 8/6/10 8:15 PM Page 30
7/22/2019 USER - C# Guia Total Del Programador
32/403
TEST DE AUTOEVALUACIN
1 Cul es la historia del desarrollo
de las aplicaciones para Windows?
2 Qu problemas ayuda a resolver .NET?
3 Qu es un assembly?
4 Cul es la definicin de CIL y CLR?
5 Describa qu hace el CLR con el
assembly.
6 Cul es el significado de Jitter?
ACTIVIDADES
EJERCICIOS PRCTICOS
1 Cree un proyecto nuevo que imprima su
nombre en la ventana de la consola.
2 Coloque un error a propsito y vea cmo
se comporta el compilador.
3 Explore el proyecto usando la vista de
clases.
4 Experimente con el explorador de
soluciones y vea la informacin que le
provee.
5 Agregue ms mensajes a la aplicacin
02_C#2010.qxd 8/11/10 9:45 AM Page 31
7/22/2019 USER - C# Guia Total Del Programador
33/403
Los elementosbsicos de un
programa
Captulo 2C#
02_C#2010.qxd 8/6/10 8:16 PM Page 32
7/22/2019 USER - C# Guia Total Del Programador
34/403
LOS LENGUAJES DE PROGRAMACIN
Cuando queremos comunicarnos con una persona, hacemos uso de un idioma encomn para entendernos. Nosotros, con este libro, nos comunicamos por mediodel lenguaje espaol, pero si llegara a visitarnos una persona de otro pas donde nose hable espaol, entonces tendramos un problema. La solucin a este problemaes muy sencilla: necesitamos aprender el idioma de esta persona para poder co-municarnos con ella. Lo mismo sucede con la computadora si queremos progra-marla, es necesario comunicarnos con ella, y la forma correcta de hacerlo es ha-blando su idioma. Entonces podemos decir que el idioma de la computadora seconoce como lenguaje de programacin y el lenguaje de programacin que apren-deremos es C#. Este lenguaje es sencillo y poderoso a su vez.Una vez que sepamos el lenguaje de programacin, entonces la computadora en-tender qu es lo que queremos que haga.Los lenguajes de programacin existen desde hace muchos aos y son de diferentestipos. Algunos han evolucionado y han surgido nuevos lenguajes como C#. Otroslenguajes son especializados para determinadas labores y muchos otros se han ex-tinguido o han quedado obsoletos.
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 33
7/22/2019 USER - C# Guia Total Del Programador
35/403
Cualquier persona puede pensar en una actividad y mencionar la lista de pasos
y el orden en el que se deben cumplir. Podemos hacer sin problema la lista depasos para cambiar el neumtico del automvil o para alimentar a los peces delacuario. Con esto vemos que no encontraremos problema alguno para listar lospasos de cualquier actividad que hagamos.Ahora, seguramente nos preguntamos: qu tiene esto que ver con la programacinde computadoras? y la respuesta es simple. Cualquier persona que pueda hacer unalista de pasos puede programar una computadora. El programa de la computadorano es otra cosa que una lista de los pasos que la computadora tiene que seguir parahacer alguna actividad. A esta lista de pasos la llamamos algoritmo. Un algoritmoson los pasos necesarios para llevar a cabo una accin. Una caracterstica importan-te del algoritmo es que tiene un punto de inicio y un punto de fin, lo que indicaque los pasos se llevan a cabo de forma secuencial, uno tras otro. El algoritmo se-ra equivalente a la receta de la torta y los ingredientes necesarios generalmente se-rn los datos o la informacin que usaremos.Hagamos un pequeo programa para ver cmo funcionara esto. Para esto creamosun proyecto, tal y como vimos en el Captulo 1. Nuestro programa mostrar los pa-sos para hacer una torta o un pastel. Colocamos el siguiente cdigo en nuestro pro-grama y veremos cmo se corresponde con lo que hemos aprendido.
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 34
7/22/2019 USER - C# Guia Total Del Programador
36/403
{
Console.WriteLine(1- Precalentar el horno);
Console.WriteLine(2- Batir margarina con azucar);
Console.WriteLine(3- Agregar huevos);
Console.WriteLine(4- Cernir harina);
Console.WriteLine(5- Agregar a la mezcla y leche);
Console.WriteLine(6- Hornear por 40 minutos);
Console.WriteLine(7- Decorar y comer);
}
}
}
C# es un lenguaje orientado a objetos y necesita que definamos una clase para po-der crear un programa. En este momento no veremos las clases, pero regresaremos aellas en un captulo posterior. Lo primero que debemos encontrar es una funcinque se llama Main(), que es muy importante, como vimos en el Captulo 1.Ya sabemos que los algoritmos necesitan un inicio y un fin. En nuestro programael punto donde siempre inicia es la funcin Main(). Esta funcin indica el punto
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 35
7/22/2019 USER - C# Guia Total Del Programador
37/403
olvidaremos cerrarlo. Dentro de Main() encontramos los pasos de nuestro algorit-
mo. En este momento nos pueden parecer extraos, pero aprenderemos qu signi-fican. Tenemos que recordar que debemos aprender el idioma de la computadora ystas son una de sus primeras frases.Lo que encontramos adentro de la funcin Main() es una serie de sentencias. Lassentencias nos permiten colocar instrucciones que nuestro programa pueda eje-cutar, que son utilizadas para mostrar un mensaje en la pantalla. El mensaje quenosotros queremos mostrar en la pantalla se muestra al invocar el mtodoWriteLine(). Los mtodos son similares a las funciones, existen adentro de las cla-ses y nos permiten hacer uso de las funcionalidades internas. Este mtodo perte-nece a la clase Console, y en esa clase encontraremos todo lo necesario para quepodamos trabajar con la consola, ya sea colocando mensajes o leyendo la infor-macin proporcionada por el usuario. Como WriteLine() pertenece a Consolecuando queremos utilizarlo, debemos escribir:
Console.WriteLine(Hola);
WriteLine() necesita cierta informacin para poder trabajar. Esta informacin es el
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 36
7/22/2019 USER - C# Guia Total Del Programador
38/403
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 37
7/22/2019 USER - C# Guia Total Del Programador
39/403
Console.WriteLine(2- Batir margarina con azucar);
Console.WriteLine(6- Hornear por 40 minutos);
Console.WriteLine(5- Agregar a la mezcla y leche);
Console.WriteLine(7- Decorar y comer);
Console.WriteLine(3- Agregar huevos);
Console.WriteLine(4- Cernir harina);
}
}
}
Ejecutmoslo y veamos qu ocurre.
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 38
7/22/2019 USER - C# Guia Total Del Programador
40/403
en el orden en que las colocamos. Si en la vida real primero horneamos y luego
batimos, no podemos esperar obtener un pastel o una torta. Por lo tanto, si enla computadora no ponemos las sentencias del programa en el orden adecuado,no podemos esperar tener un programa funcional.
Errores en los programasUna parte importante de la programacin es reconocer los errores que podemostener con el fin de corregirlos y permitir que el programa trabaje correctamente.
Podemos tener dos tipos de errores: los errores de sintaxis y los errores de lgi-ca. Los errores de sintaxis son fciles de corregir y se deben a que escribimos en elorden incorrecto las sentencias del programa. Estos errores se muestran cuando elprograma se compila, y de esa forma se pueden buscar fcilmente para corregirlos.Los errores de lgica se deben a que hemos creado nuestro algoritmo en forma err-nea y aunque todas las sentencias estn correctas, el programa no lleva a cabo loque deseamos. Estos errores son ms difciles de corregir y la mejor forma de evi-tarlos es por medio de un anlisis previo adecuado del problema a resolver. Msadelante aprenderemos cmo llevar a cabo este anlisis.
Empecemos a reconocer los errores de sintaxis y los mensajes que da el compila-
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 39
7/22/2019 USER - C# Guia Total Del Programador
41/403
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 40
7/22/2019 USER - C# Guia Total Del Programador
42/403
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 41
7/22/2019 USER - C# Guia Total Del Programador
43/403
Corrijamos el error y compilemos de nuevo. Todo debe de estar bien. Pero lo que
haremos ahora es borrar las comillas de cierre de la cadena en la primera sentencia.Este error nos presenta un escenario ms interesante y nos conviene entender ques lo que sucede. Compilemos el programa y veamos nuestra lista de errores. staser mucho ms extensa que las anteriores:Aqu ha sucedido algo interesante, a pesar de que solamente hemos creado unerror: en la lista de errores aparecen tres errores. Esto se debe a que un error pue-de ocasionar errores extras en el cdigo siguiente. Al no cerrar la cadena, el com-
pilador no sabe dnde termina la sentencia y cree que el parntesis de cierre y elpunto y coma forman parte de la cadena. Por eso tambin nos muestra que fal-tan el parntesis y el punto y coma.Debido a que los errores pueden ser en cadena, como en este ejemplo, siempre ne-cesitamos corregir el error que se encuentra en primer lugar. Si nosotros intentra-mos corregir primero el error del punto y coma, no resultara evidente ver cul esel error en esa lnea, ya que veramos que el punto y coma s est escrito.
A veces sucede que nuestro programa muestra muchos errores, pero cuando corre-gimos el primer error, la gran mayora desaparece. Esto se debe a factores similaresa los que acabamos de ver.
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 42
7/22/2019 USER - C# Guia Total Del Programador
44/403
Console.Write(Mensaje 2 );
Console.WriteLine(Mensaje 3 );
Console.WriteLine(Mensaje 4 );
Console.Write(Mensaje 5 );
}
}
}
Al ejecutarlo, vemos cmo en efecto despus de usar Write() lo siguiente que se es-cribe se coloca en el mismo rengln, pero al usar WriteLine() lo siguiente apareceen el rengln siguiente. Esto es un ejemplo claro de lo explicado anteriormente:
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 43
7/22/2019 USER - C# Guia Total Del Programador
45/403
cartn, por ejemplo. Sin embargo, el tamao de la caja depender de lo que de-
seamos almacenar. Unos zapatos pueden caber en una caja pequea, pero enesa caja no podemos colocar un televisor. Si empezamos a almacenar muchas co-sas en cajas, pronto tendremos demasiadas y ser difcil poder encontrar lo quehemos guardado. Entonces, una forma de solucionar esto es por medio de eti-quetas. A cada caja le ponemos una etiqueta con el contenido y de esta forma po-demos encontrar rpidamente lo que buscamos.Lasvariables en la computadora funcionan de manera similar a nuestras cajas de
almacenaje. Las podemos imaginar como pequeas cajas que existen en la memo-ria de la computadora y su tamao depender de la informacin que deben guar-dar. Esto se conoce como tipo de la variable. Para poder acceder a esa caja o varia-ble le ponemos un nombre que sera la etiqueta con la que la identificamos.Para hacer uso de una variable, lo primero que tenemos que hacer es declararla.La declaracin de stas es algo muy sencillo. Como primer paso tenemos que co-locar el tipo y luego el nombre. Las variables en C# deben nombrarse de acuerdo
con unas recomendaciones sencillas:
Los nombres de las variables deben empezar con letra. Es posible colocar nmeros en los nombres de las variables, pero no empezar el
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 44
7/22/2019 USER - C# Guia Total Del Programador
46/403
int costo;
Vemos que al final de la sentencia hemos colocado el punto y coma. Si necesitamosdeclarar ms variables lo podemos hacer de la siguiente forma:
int costo;
int valor;
int impuesto;
Pero tambin es posible declarar las variables en una sola lnea. Para esto simple-mente separamos los nombres de las variables con comas. No hay que olvidar co-locar el punto y coma al final de la sentencia.
int costo, valor, impuesto;
C# nos provee de muchos tipos para poder usar con nuestras variables, que pode-
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 45
7/22/2019 USER - C# Guia Total Del Programador
47/403
TIPO INFORMACIN QUE GUARDA
float Otro tipo muy utilizado para guardar valores numricos con decimales. Para este tipo el rangoes desde 1.5 ? 10?45 hasta 3.4 ? 1038.
int Cuando queremos guardar valores numricos enteros con signo, en el rango de -2,147,483,648
hasta 2,147,483,647.
uint Para valores numricos enteros positivos, su rango de valores es desde 0 hasta 4,294,967,295.
long Guarda valores numricos enteros realmente grandes con un rango
desde 9,223,372,036,854,775,808 hasta 9,223,372,036,854,775,807.
uling Guarda valores numricos enteros positivos. Su rango de valores vara desde 0hasta 18,446,744,073,709,551,615.
short Guarda valores numricos enteros, pero su rango es menor y vara desde -32,768 hasta 32,767.
ushort Puede guardar valores numricos enteros positivos con un rango desde 0 hasta 65,535.
string Este tipo nos permite guardar cadenas.
Tabla 1. sta es la tabla de los tipos ms utilizados en C#.
Es til para seleccionar el tipo adecuado para las variables.
Una vez que hemos declarado la variable, debemos inicializarla. Inicializar una va-riable es asignarle un valor por primera vez. Esto nos permite darle un valor inicialque puede ser til en la ejecucin de nuestro programa (no slo podemos asignarle
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 46
7/22/2019 USER - C# Guia Total Del Programador
48/403
Una asignacin no vlida sera la siguiente:
50 = costo;
En este caso nada queda asignado a la variable costo. Siempre la variable que recibeel valor se coloca a la izquierda del signo igual.Si lo necesitamos, es posible inicializar la variable al momento de declararla. Esto es
muy cmodo y si lo hacemos as evitamos olvidar la inicializacin de la variable. Pa-ra hacerlo colocamos el tipo de la variable seguido del nombre a usar en la variablee inmediatamente con el operador de asignacin colocamos el valor.
int costo = 50;
Comentarios en el programaLos programas de computadora pueden ser muy grandes, por lo que es necesariocolocar comentarios de codigo en el programa. Los comentarios sirven para docu-mentar las partes del programa, explicar lo que hace cierta parte del cdigo o sim-
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 47
7/22/2019 USER - C# Guia Total Del Programador
49/403
/* La siguiente seccin calcula el rea y usa las variables
alto para guardar la altura del rectngulo
ancho para guardar la base del rectngulo
*/
As vemos cmo los comentarios colocados en varios renglones, se toman como unsolo comentario. Esto es algo muy til para recordatorios futuros.
Mostrar los valores de las variables en la consolaYa que podemos guardar valores, tambin nos gustara poder mostrarlos cuando seanecesario. Afortunadamente, por medio del mtodo WriteLine() o el mtodo Write()podemos hacerlo. En este caso no usaremos la cadena como antes, lo que usaremoses una cadena de formato y una lista de variables. La cadena de formato nos per-mite colocar el mensaje a mostrar e indicar qu variable usaremos para mostrar su
contenido y tambin en qu parte de la cadena queremos que se muestre. En la lis-ta de variables simplemente colocamos las variables que queremos mostrar.La cadena de formato se trata como una cadena normal, pero agregamos {} dondedeseamos que se coloque el valor de una variable. Adentro de {} debemos colocar el
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 48
7/22/2019 USER - C# Guia Total Del Programador
50/403
using System.Text;
namespace AplicacionBase
{
class Program
{
// Esta es la funcin principal del programa
// Aqu inicia la aplicacin
static void Main(string[] args)
{
// Declaramos variables
int costo;
int valor, precio;
// Inicializamos las variables
costo = 50;
valor = 75;
precio = 125;
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 49
7/22/2019 USER - C# Guia Total Del Programador
51/403
Los lenguajes de programacin
}
}
}
Una vez que hemos compilado la aplicacin, obtendremos el resultado que mos-tramos en la figura a continuacin.
02_C#2010.qxd 8/6/10 8:16 PM Page 50
7/22/2019 USER - C# Guia Total Del Programador
52/403
OPERADOR DESCRIPCIN
= Asignacin. Este operador ya es conocido por nosotros.+ Suma. Nos permite sumar los valores de las variables o los nmeros
- Resta. Para restar los valores de las variables o los nmeros.
* Multiplicacin. Multiplica los valores de las variables o los nmeros.
/ Divisin. Divide los valores de las variables o los nmeros.
% Mdulo. Nos da el residuo de la divisin.
Tabla 2. sta es la tabla de operadores aritmticos en C#.
Veamos algunos ejemplos de cmo utilizar estos operadores. Imaginemos que ya he-mos declarado e inicializado las variables. Para guardar en la variable resultado la su-ma de dos nmeros, hacemos lo siguiente:
resultado = 5 + 3;
Como hemos visto, la expresin a la derecha se le asigna a la variable, por lo queen este caso la expresin 5 + 3 se evala y su resultado que es 8 es almacenado enla variable resultado. Al finalizar esta sentencia, la variable resultado tiene un va-
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 51
7/22/2019 USER - C# Guia Total Del Programador
53/403
En este caso, se divide el valor de a por el valor de b. El resultado es 0,875. Como el
nmero tiene valores decimales, debemos usar variables de algn tipo que nos per-mita guardarlos como float o double.
Y por ltimo nos queda el mdulo.
resultado = a % b;
En este caso recibimos en resultado el valor del residuo de dividir a por b.
Veamos un pequeo programa donde se muestra lo aprendido en esta seccin.
using System;
using System.Collections.Generic;
using System.Text;
namespace AplicacionBase
{
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 52
7/22/2019 USER - C# Guia Total Del Programador
54/403
resultado = 0;
// Sumas
Console.WriteLine(Sumas);
resultado = 3 + 5;
Console.WriteLine(Resultado = {0},resultado);
resultado = a + 3;
Console.WriteLine(Resultado = {0}, resultado);
resultado = a + b;
Console.WriteLine(Resultado = {0}, resultado);
// Restas
Console.WriteLine(Restas);
resultado = a - b;
Console WriteLine(Resultado = {0} resultado);
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 53
7/22/2019 USER - C# Guia Total Del Programador
55/403
resultado = a / 3;
Console.WriteLine(Resultado = {0}, resultado);
resultado = a / b;
Console.WriteLine(Resultado = {0}, resultado);
resultado = b / 2.5f;
Console.WriteLine(Resultado = {0}, resultado);
// Modulo
Console.WriteLine(Modulo);
resultado = a % b;
Console.WriteLine(Resultado = {0}, resultado);
}
}
}
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 54
7/22/2019 USER - C# Guia Total Del Programador
56/403
Precedencia de operadores
Hasta el momento hemos utilizado expresiones aritmticas sencillas, pero en la vi-da real se pueden necesitar expresiones ms complicadas. Entonces, si estas expre-siones no se colocan adecuadamente, esto nos puede ocasionar problemas.
Por ejemplo, veamos la siguiente expresin.
resultado = 3 * 5 + 2;
Esta expresin presenta un problema para nosotros en este momento. No sabemossi primero hace 3*5 y le suma 2, que da como resultado 17, o si suma 5+2 y luegolo multiplica por 3, lo que da como resultado 21. Cul es la respuesta correcta?La forma de saberlo es por medio de la precedencia de operadores. sta nos in-dica el orden en el que se llevan a cabo las operaciones. Este orden depende del
tipo de operador que se utiliza. Algunos operadores tienen ms precedencia queotros, es decir, se ejecutan primero.La siguiente tabla muestra la precedencia de los operadores que hemos visto hastael momento en C#. Se encuentran listados de mayor a menor precedencia.
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 55
7/22/2019 USER - C# Guia Total Del Programador
57/403
Vemos que por medio de los parntesis se ha agrupado una parte de la expresin,
por lo que se evala y equivale a:
resultado = 15 + 2;
Lo que al final evala en:
resultado = 17;
Veamos otro ejemplo de cmo podemos usar los parntesis para indicar cmo de-seamos que se evale la expresin.
resultado = 3 * (5+2);
Lo primero que sucede es que se evala la expresin contenida en el parntesis.
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 56
7/22/2019 USER - C# Guia Total Del Programador
58/403
Lo que da como resultado:
resultado = 10 * 64;
Y al final obtenemos:
resultado = 640;
Afortunadamente, C# hace todas estas evaluaciones y todos estos clculos por no-sotros, pero ahora sabemos cmo sucede y sabemos que podemos usar los parnte-sis para organizar nuestras expresiones aritmticas.
Cmo pedirle datos al usuarioHemos utilizado variables para guardar valores y con los operadores aritmticoshemos podido realizar clculos matemticos. Sin embargo, todos los valores quehemos usado se encuentran colocados directamente en el cdigo del programa.
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 57
7/22/2019 USER - C# Guia Total Del Programador
59/403
Console.WriteLine(Escribe tu nombre);
entrada=Console.ReadLine();
Console.WriteLine(Hola {0}, como estas?,entrada);
En este fragmento de programa es importante notar cmo el valor obtenido porReadLine() se le asigna a la variable de tipo cadena entrada. Si no colocamos una
variable que recibe el valor de lo escrito por el usuario, ste se perder. Cuandousemos ReadLine() debemos hacerlo como se muestra. Una vez que recibimos laentrada del usuario podemos trabajar con ella sin problemas.
Conversin de variablesEl mtodo de ReadLine() nos presenta una limitacin en este momento ya que s-lo regresa el valor como cadena, pero no podemos utilizar una cadena en operacio-
nes aritmticas o asignarla directamente a una variable numrica.Lo que debemos hacer es convertir ese dato numrico guardado como cadena a unvalor numrico til para nuestros propsitos. C# nos provee de una clase que per-mite hacer conversiones entre los diferentes tipos de variables. Esta clase se cono-
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 58
7/22/2019 USER - C# Guia Total Del Programador
60/403
De forma similar podemos convertir la cadena a una variable de tipo float. En este
caso usaremos el mtodo ToSingle(). ste tambin necesita un parmetro, que es lacadena que contiene el valor a convertir. Como regresa un valor flotante, entoncesdebemos tener una variable de tipo float que lo reciba.
valor = Convert.ToSingle(entrada);
Ya que tenemos los valores convertidos a nmeros, entonces podemos hacer uso deellos. Veamos un ejemplo donde le pedimos informacin al usuario.
using System;
using System.Collections.Generic;
using System.Text;
namespace AplicacionBase
{
class Program
{
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 59
7/22/2019 USER - C# Guia Total Del Programador
61/403
Console.Write(Dame otro numero entero:);
entrada = Console.ReadLine();
// Convertimos la cadena a entero
b = Convert.ToInt32(entrada);
// Sumamos los valores
resultado = a + b;
// Mostramos el resultado
Console.WriteLine(El resultado es {0}, resultado);
}
}
}
Ahora compilemos y ejecutemos la aplicacin. Para introducir los datos, simplemen-te los escribimos con el teclado y al finalizar oprimimos la tecla ENTER o RETURN.
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 60
7/22/2019 USER - C# Guia Total Del Programador
62/403
Cmo resolver problemas en la computadora
Ya que conocemos algunos elementos del lenguaje, ahora es importante apren-der cmo resolver los problemas en la computadora. Existen diferentes metodo-logas para hacerlo, pero como ste es un libro dirigido a gente sin experienciaen programacin aprenderemos un mtodo sencillo. Como ya hemos mencio-nado, C# es un lenguaje orientado a objetos. Sin embargo, primero aprendere-mos una metodologa estructurada, lo que nos permitir tener experiencia en laresolucin de problemas y luego podremos aprender la metodologa orientada a
objetos de manera ms sencilla.La metodologa que aprendemos se basa en el concepto de subdivisin de problemas.Es decir que tomamos el problema general y luego lo dividimos en problemas mspequeos y si es necesario, dividimos estos subproblemas en problemas ms peque-os, hasta que podamos resolver el subproblema directamente.Para resolver cualquier problema, lo primero que tenemos que hacer es entenderlo.Hay que entender de forma precisa qu es lo que se pide. Los problemas tendrn
informacin. En muchos casos, el problema nos da directamente la informacin. Aeste tipo de informacin se lo conoce como informacin explcita. Pero tambina veces sucede que el problema no nos da directamente la informacin, por eso esimportante entenderlo bien. En este caso nosotros debemos inferir la informacin
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
L l j d i
02_C#2010.qxd 8/6/10 8:16 PM Page 61
7/22/2019 USER - C# Guia Total Del Programador
63/403
El ltimo paso consiste en pasar el algoritmo a programa de computadora. Si to-
do se ha realizado correctamente, el programa deber ejecutarse al primer inten-to. Mucha gente se sorprende que para hacer un programa de computadora, el l-timo paso sea colocarlo en la computadora, pero sta es la forma correcta. Algu-nos programadores no profesionales intentan hacer el programa directamente enla computadora, pero esto acarrea muchos errores de lgica y datos, y el tiempoen que resuelve el mismo problema es mayor y es difcil que se ejecute correcta-mente al primer intento. Aunque la metodologa que acabamos de presentar pa-
rece larga, en realidad puede ahorrar hasta un 50% del tiempo de resolucin encomparacin con alguien que programe directamente en la computadora. Ahoraque empezamos, es bueno adquirir hbitos correctos de programacin desde elinicio. En el futuro, en especial cuando los problemas que se resuelvan sean com-plicados, se apreciarn los beneficios.
Elementos de un diagrama de flujo
Es momento de aprender los componentes bsicos de un diagrama de flujo. Conestos diagramas podemos representar el algoritmo y son fciles de hacer y entender.Otra ventaja que tienen es que son independientes del lenguaje, lo que nos da la fle-xibilidad de resolver el problema y usar nuestra solucin en cualquier lenguaje.
Los lenguajes de programacin
2 LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 62
7/22/2019 USER - C# Guia Total Del Programador
64/403
El siguiente elemento se conoce como proceso. ste tiene la forma de un rectn-
gulo y nos sirve para indicar que precisamente un proceso debe llevarse a cabo enese lugar. La descripcin del proceso se indica en su interior.
Figura 11. El proceso se indica por medio
de un rectngulo. En su interior indicamos lo que se tiene que procesar.
Similar al proceso, tenemos el proceso predefinido. Su forma tambin es un rec-
tngulo, pero ste tiene dos franjas a los lados. Se usa para indicar que haremos usode un proceso que ya ha sido definido en otra parte. Un ejemplo de esto sera unmtodo, como los que ya hemos usado. Principalmente lo usaremos para indicarllamadas a funciones o mtodos definidos por nosotros mismos. En un captulo pos-
A = b + c
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 63
7/22/2019 USER - C# Guia Total Del Programador
65/403
decisiones. Bsicamente, sirve para hacer una seleccin entre las posibles rutas de
ejecucin del algoritmo, que depender del valor de la expresin evaluada. Suforma es la de un rombo y a partir de las esquinas de ste surgirn las flechas ha-cia las posibles rutas de ejecucin del algoritmo.
Figura 13. La decisin se representa con un rombo.
Luego nos encontramos con un componente conocido como datos. Su forma es
la de un paralelogramo y podemos usarlo para indicar la salida o la entrada delos datos. Un ejemplo de esto sera cuando llevamos a cabo la peticin de un va-lor al usuario o cuando mostramos un valor en pantalla. Adentro de l indica-mos qu dato se pide o se presenta.
A > B
Los lenguajes de programacin
2 LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 64
7/22/2019 USER - C# Guia Total Del Programador
66/403
Resolucin de problemas en la computadora
Empecemos por un problema sencillo y fcil de entender. Para este problema se-guiremos todos los pasos que hemos mencionado hasta llegar al programa de cm-puto final. En primer lugar, tenemos la descripcin del problema.Hacer un programa de cmputo que calcule el rea y el permetro de un rectngulodados sus lados. Una vez que tenemos el problema y lo hemos entendido, entoncesprocedemos a subdividirlo en problemas ms pequeos que sean fciles de resolver.Esta subdivisin puede ser hecha por medio de un diagrama y para esto hay que re-
cordar que si alguno de los problemas an continua siendo difcil, lo podemos seguirsubdividiendo. A modo de ejemplo exageraremos un poco la subdivisin en este ca-so. El problema quedara subdividido como se muestra en la siguiente figura.
Calcular rea y permetrodel rectngulo
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 65
7/22/2019 USER - C# Guia Total Del Programador
67/403
rea y el permetro. Pero tambin reconocemos inmediatamente dos datos implci-
tos que son necesarios: el alto y el ancho del rectngulo.Nosotros sabemos que necesitamos una cadena para recibir el valor escrito por elusuario, pero como tal, esta cadena no forma parte del problema. Sin embargo, nosayuda a resolverlo, por lo que la cadena ser un dato de trabajo. Los datos que he-mos identificados sern colocados en una tabla de la siguiente forma:
NOMBRE TIPO VALOR INICIAL
rea Float 0.0
permetro Float 0.0
ancho Float 1.0
alto Flota 1.0
valor String
Tabla 4. Tabla de variables para el programa que estamos resolviendo.
Hemos decidido usar el tipo float, ya que podemos tener valores decimales en el cl-culo del permetro. Como un rectngulo con ancho o alto de 0 no tiene sentido,hemos seleccionado como valor inicial para estas variables a 1.Ahora viene el paso ms importante: la creacin del algoritmo. Sin embargo, si ob-
Los lenguajes de programacin
2 LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 66
7/22/2019 USER - C# Guia Total Del Programador
68/403
Pedir ancho
Pedir alto
rea = ancho alto
Permetro =
Inicio
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 67
7/22/2019 USER - C# Guia Total Del Programador
69/403
El cdigo de nuestra aplicacin
Ya tenemos todo lo necesario para poder crear el cdigo del programa. Para esto ha-remos uso de la aplicacin base que ya tenemos. Como creamos una tabla de datos,ya conocemos todas las variables necesarias para la aplicacin. Entonces tomamosesta tabla y colocamos los datos como variables.
// Declaramos las variables que necesitamos
float area = 0.0f;
float perimetro = 0.0f;float ancho = 1.0f;
float alto = 1.0f;
string valor = ;
Con las variables definidas, entonces procedemos a codificar cada uno de los pasos
del algoritmo. Recorremos paso por paso y en el mismo orden en que se encuen-tran, y vemos que lo primero es pedir el ancho del rectngulo.
Console Write(Dame el ancho del rectngulo: );
Los lenguajes de programacin
2. LOS ELEMENTOS BSICOS DE UN PROGRAMA
02_C#2010.qxd 8/6/10 8:16 PM Page 68
7/22/2019 USER - C# Guia Total Del Programador
70/403
Una vez que hemos obtenido todos los datos de entrada, podemos decir que ya te-
nemos un proceso. Este proceso ser el encargado de calcular el rea que ocupa elrectngulo. Veamos el ejemplo a continuacin:
area = ancho * alto;
En el prximo proceso que tenemos se calcula el permetro.
perimetro = (ancho + alto) * 2;
Si vemos con detenimiento el algoritmo y tambin su paso siguiente, encontra-remos que volvemos a trabajar con datos nuevamente, pero en este ltimo casoslo mostramos en pantalla el valor de rea calculado.
Veamos para comprender mejor de qu hablamos.
Console.WriteLine(El rea es : {0} unidades cuadradas, area);
OS OS S COS U OG
Los lenguajes de programacin
02_C#2010.qxd 8/6/10 8:16 PM Page 69
7/22/2019 USER - C# Guia Total Del Programador
71/403
g g
02_C#2010.qxd 8/6/10 8:17 PM Page 70
7/22/2019 USER - C# Guia Total Del Programador
72/403
TEST DE AUTOEVALUACIN
1 Qu es un algoritmo?
2 Qu caractersticas tienen los
algoritmos?
3 Qu es una sentencia?
4 Cmo se finalizan las sentencias?
5 Cul es la diferencia entre Write() y
WriteLine()?
6 Qu es una cadena?
ACTIVIDADES
EJERCICIOS PRCTICOS
1 Hacer un programa que calcule el
permetro de cualquier polgono regular.
2
Generar en este proyecto un errora propsito y ver cmo se comporta
el compilador.
3 Hacer un programa que transforme de
grados a radianes.
4 Hacer un programa que transforme degrados centgrados a grados Fahrenheit.
5 Hacer un programa que transforme entre
03_C#2010_AJUSTADO.qxd 8/11/10 9:46 AM Page 71
7/22/2019 USER - C# Guia Total Del Programador
73/403
El programatoma
decisiones
Captulo 3C#
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:31 PM Page 72
7/22/2019 USER - C# Guia Total Del Programador
74/403
LA TOMA DE DECISIONES
No todos los problemas se resuelven linealmente, a veces es necesario tener quetomar una decisin o ejecutar determinadas acciones cuando una condicin secumple, y otras cuando no lo hace. Supongamos que nuestro problema consisteen mantener la temperatura de un balde con agua tibia. Para hacerlo nosotros po-demos agregar agua caliente o agua fra. En este problema necesitaramos tomaruna decisin sobre qu tipo de agua agregar. De igual forma, hay muchos pro-
blemas en los que para poder resolverlos necesitamos conocer una condicin otomar una decisin. En C# es sencillo poder lograr esto, ya que el lenguaje nosprovee diferentes herramientas para poder lograrlo. Tendremos que utilizar ex-presiones y stas se evaluarn. En este caso usaremos expresiones relacionales yexpresiones lgicas, que se evaluarn, y dependiendo del resultado de esa eva-luacin, se llevarn a cabo ciertos pasos del algoritmo u otros.Empecemos por conocer las expresiones que necesitamos.
Expresiones relacionalesLas expresiones relacionales se usan para expresar la relacin que existe entre dos
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:31 PM Page 73
7/22/2019 USER - C# Guia Total Del Programador
75/403
SIGNO OPERADOR
== Igualdad
!= No igual
> Mayor que
< Menor que
>= Mayor que igual
7/22/2019 USER - C# Guia Total Del Programador
76/403
En este caso 3 + 2 se evala como 5 y luego 5 igual a 5, lo que nos da como valor
final de la expresintrue
. Otro ejemplo es el siguiente:
(b 2) == d
Al evaluar b - 2 obtenemos 5, entonces la expresin es 5 igual a 4, lo que evidente-mente nos da como resultado final false.
sta es la forma como se evalan las expresiones relacionales y ahora veremos msejemplos con otros operadores. Tambin tenemos al operador de desigualdad, quese crea por medio de un signo de admiracin y luego el signo de igual.
a != 7
En este caso tenemos 5 no es igual a 7, lo cual es cierto, y obtenemos el valor truecomo resultado de la evaluacin.
a != c
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:31 PM Page 75
7/22/2019 USER - C# Guia Total Del Programador
77/403
En el operador < evaluamos una relacin del tipo menor que. sta da true comoresultado si el valor del lado izquierdo es menor que el valor que encontramos en ellado derecho. Si esto no se cumple, entonces el valor regresado ser false.
d < a
Tenemos 4 menor que 5, lo que resulta cierto y el resultado es true.
d < (a - 3)
La expresin a evaluar es 4 menor que 2, y se tiene false como resultado de laexpresin.
d < d
Esta expresin tambin da como resultado false, ya que 4 menor que 4 no es ver-
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:31 PM Page 76
7/22/2019 USER - C# Guia Total Del Programador
78/403
b >= b
Aqu comparamos la diferencia de resultado con relacin a usar >= en lugar de >. Pa-ra esta expresin evaluamos 7 mayor que igual a 7. Esto es verdadero y el resultadofinal es true. De igual manera tenemos al operador
7/22/2019 USER - C# Guia Total Del Programador
79/403
Si el resultado de la evaluacin es false, entonces la sentencia a ejecutar nunca se lle-va a cabo, o dicho de otra forma, es ignorada.En el diagrama de flujo ifse representa por medio de un rombo. En el interior delrombo colocamos la expresin a evaluar, de las esquinas sacamos una ruta de ejecu-cin en el caso de que s se cumpla la condicin o en el caso de que no se cumpla.
Figura 1. Este rombo simboliza a ifcon la expresin en su interior.
Veamos un primer ejemplo donde nos puede servir ify las expresiones. Crearemosun programa que le pida al usuario un nmero, y la computadora debe decir si el
Expresin
SI NO
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:31 PM Page 78
7/22/2019 USER - C# Guia Total Del Programador
80/403
using System;
using System.Collections.Generic;using System.Text;
namespace AplicacionBase
{
class Program
{
// Esta es la funcin principal del programa// Aqu inicia la aplicacin
static void Main(string[] args)
{
int numero = 0; // Donde guardamos el nmero
string valor = ; // Para guardar la cadena dada por el usuario
// Pedimos el nmeroConsole.Write(Dame un numero entero:);
Valor = Console.ReadLine();
numero = Convert ToInt32(valor); // Convertimos la cadena a entero
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 79
7/22/2019 USER - C# Guia Total Del Programador
81/403
}
}
La primera parte el programa es de muy fcil comprensin. Luego de sta, nos encon-tramos con la primera sentencia if. Para este ifse tiene la expresin numero >= 0. Si esaexpresin se evala como true, entonces la siguiente sentencia se ejecuta, de lo con-trario ser ignorada y continuar el programa.
Supongamos que el valor guardado ennumero
es3
, entonces la expresin relacio-nal regresa un valor de true. Al obtener true,iflleva a la ejecucin y el mensaje quedice que se ejecuta un nmero positivo.Luego se contina con el siguiente if. Para ste, la expresin es numero < 0, co-mo en este ejemplo numero vale 3, entonces la expresin se evala como false,por lo que, mientras el valor de la expresin sea false, ifno ejecutar en ningnmomento el mensaje que dice que el nmero es negativo. Esto es exactamente lo
que deseamos que realice desde un principio este programa.
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 80
7/22/2019 USER - C# Guia Total Del Programador
82/403
Figura 4. En este caso damos un nmero negativo
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 81
7/22/2019 USER - C# Guia Total Del Programador
83/403
Veamos un ejemplo donde hacemos uso de esto. Sabemos que la divisin entrecero no est definida, entonces debemos hacer un programa que le pregunte alusuario el dividendo y el divisor, pero que cuando el divisor sea cero no lleve acabo la divisin. Como siempre, primero hacemos nuestro anlisis y creamos elalgoritmo en forma de diagrama de flujo.
Pedir dividendo
Pedir divisor
Inicio
Resultado =dividendo/divisor
Divisor!=0
S
NO
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 82
7/22/2019 USER - C# Guia Total Del Programador
84/403
// Aqu inicia la aplicacin
static void Main(string[] args){
// Variables necesarias
float dividendo = 0.0f;
float divisor = 1.0f;
float resultado = 0.0f;
string valor = ;
// Pedimos el dividendo
Console.WriteLine(Dame el dividendo:);
valor = Console.ReadLine();
dividendo = Convert.ToInt32(valor);
// Pedimos el divisor
Console.WriteLine(Dame el divisor:);valor = Console.ReadLine();
divisor = Convert.ToInt32(valor);
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 83
7/22/2019 USER - C# Guia Total Del Programador
85/403
Figura 6. En este caso visto aqu, es ejecutada
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 84
7/22/2019 USER - C# Guia Total Del Programador
86/403
El uso de elseCon los programas anteriores con los que estuvimos trabajando, donde utilizamosla sentencia if, hemos visto que podemos indicar que determinada sentencia seejecute cuando deseamos que una condicin se cumpla. Sin embargo, puede ocu-rrir que a veces necesitamos que una sentencia se ejecute cuando se cumple la con-dicin y que otra sentencia se ejecute cuando esa condicin no se cumpla. Si nosencontramos en este caso, una forma de resolverlo sera colocar un ifcon una con-dicin y luego otro ifcon una condicin que sea complemento de la primera. Es-to ya lo hemos hecho anteriormente en el programa de los nmeros positivos ynegativos. Sin embargo, existe otra forma ms sencilla que la utilizada en este pro-grama para hacerlo. Esta forma puede sernos de mucha utilidad para simplificarla lgica y que no nos veamos obligados de tener que colocar tantos ifdentro deuna sentencia. Para lograr esto haremos uso de else.Siempre utilizaremos else a continuacin de una sentencia if, ya que else no se pue-de usar slo. Tenemos que colocar nuestro cdigo de la siguiente forma:
if(condicin)
Sentencia1;
else
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 85
7/22/2019 USER - C# Guia Total Del Programador
87/403
Figura 8.Aqu vemos claramente la ruta de ify la ruta de else.
El cdigo de nuestro programa quedara compuesto de la siguiente forma:
Pedir nmero
Inicio
Fin
Mostrar"El nmero es
positivo"
Mostrar"El nmero es
negativo"
Nmero>=0SNO
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 86
7/22/2019 USER - C# Guia Total Del Programador
88/403
{
int numero = 0; // Donde guardamos el nmero
string valor = ; // Para guardar la cadena dada por el
usuario
// Pedimos el numero
Console.Write(Dame un nmero entero:);
valor = Console.ReadLine();
numero = Convert.ToInt32(valor); // Convertimos la cadena a
entero// Hacemos uso de if con la expresin para el caso de los
positivos
if (numero >= 0)
Console.WriteLine(El nmero {0} es positivo, numero); // se
ejecuta si se cumple numero>=0
else
Console.WriteLine(El numero {0} es negativo, numero); // seejecuta si NO se cumple numero>=0
}
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 87
7/22/2019 USER - C# Guia Total Del Programador
89/403
Pedir dividendo
Pedir divisor
Mostrar resultado
Inicio
Mostrar"Divisor no vlido"
Resultado =dividendo/divisor
Divisor==0NOS
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 88
7/22/2019 USER - C# Guia Total Del Programador
90/403
float divisor = 1.0f;
float resultado = 0.0f;
string valor = ;
// Pedimos el dividendo
Console.WriteLine(Dame el dividendo:);
valor = Console.ReadLine();
dividendo = Convert.ToInt32(valor);
// Pedimos el divisor
Console.WriteLine(Dame el divisor:);
valor = Console.ReadLine();
divisor = Convert.ToInt32(valor);
if (divisor == 0)
Console.WriteLine(El divisor no es vlido);else
{
// Hacemos la operacion
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 89
7/22/2019 USER - C# Guia Total Del Programador
91/403
Cmo usar if anidadosLa sentencia o el bloque de cdigo que ejecuta ifpuede ser cualquier sentencia vlida
o bloque de cdigo vlido en C#, esto incluye a otro if. Esto significa que nosotrospodemos colocar ifadentro del cdigo a ejecutar de un ifanterior. Cuando hacemosesto hay que ser cuidadosos para evitar errores de lgica. Esto se conoce como ifanidados. Veamos un ejemplo de esto. Tenemos que hacer un programa que pedirel tipo de operacin aritmtica que deseamos ejecutar y luego los dos nmeros con losque llevar a cabo la operacin. El resultado se desplegar en la pantalla.El programa tendr el siguiente cdigo:
using System;
using System.Collections.Generic;
using System.Text;
namespace AplicacionBase
{class Program
{
// Esta es la funcin principal del programa
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 90
7/22/2019 USER - C# Guia Total Del Programador
92/403
valor = Console.ReadLine();
a = Convert.ToSingle(valor);
// Pedimos el segundo nmero
Console.Write(Dame el segundo numero:);
valor = Console.ReadLine();
b = Convert.ToSingle(valor);
// Verificamos para suma
if (opcion == 1)
resultado = a + b;
// Verificamos para resta
if (opcion == 2)
resultado = a - b;
// Verificamos para division
if (opcion == 3)
if (b != 0) // este if esta anidado
resultado = a / b;else // Este else pertenece al segundo if
Console.WriteLine(Divisor no valido);
// Verificamos para la multiplicacion
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 91
7/22/2019 USER - C# Guia Total Del Programador
93/403
Mostrar Men
Resultado = a + b
Pedir opcin
Pedir b
Pedir a
Inicio
Opcin==1
S
S
NO NO
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 92
7/22/2019 USER - C# Guia Total Del Programador
94/403
En el programa anterior observamos cmo se ha usado if anidado para la divisin,slo tenemos que ser cuidadosos con else para poder saber a qu if pertenece. Si en
nuestros programas hacemos uso de la indentacin, es decir colocar espacios antesde la sentencia, podemos facilitar reconocer qu parte del cdigo pertenece a quseccin. Algunos editores de cdigo hacen esto por nosotros de forma automtica yvisualmente es ms fcil reconocer el cdigo.
Escalera de if-elseOtra estructura que se puede utilizar es la escalera de if-else. Una de sus funcionesprincipales es optimizar la ejecucin del cdigo. Algunas veces son necesarias por-que as lo requiere la lgica del programa. Al igual que con los ifanidados, no hayque utilizarlos sin planeacin, ya que al no programarlos correctamente, nos puedellevar a errores de lgica que pueden resultar difciles de solucionar.Ahora aprendamos cmo los podemos usar para que nuestro cdigo se vuelvams eficiente. Si observamos el programa de las operaciones matemticas, tene-mos un ifpara cada operacin. Esto significa que cuando nuestro programa seejecuta, sin importar si se ha seleccionado la suma o la multiplicacin, siemprese tienen que ejecutar al menos cuatro if. Los ifpueden ser operaciones costosas
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 93
7/22/2019 USER - C# Guia Total Del Programador
95/403
Como podemos ver se genera una figura que parece una escalera y por eso su nom-bre. Modifiquemos el programa de las operaciones matemticas. En primer lugar su
diagrama de flujo queda de la forma que se muestra en la figura.
Mostrar Men
Pedir opcin
Pedir b
Pedir a
Inicio
S
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 94
7/22/2019 USER - C# Guia Total Del Programador
96/403
Modifiquemos el cdigo del programa, colocndolo de la siguiente manera:
using System;
using System.Collections.Generic;
using System.Text;
namespace AplicacionBase
{
class Program
{
// Esta es la funcin principal del programa
// Aqu inicia la aplicacin
static void Main(string[] args)
{
// Variables necesarias
float a = 0.0f;
float b = 0.0f;
float resultado = 0.0f;
string valor = ;
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 95
7/22/2019 USER - C# Guia Total Del Programador
97/403
// Verificamos para suma
if (opcion == 1)
resultado = a + b;
// Verificamos para resta
else if (opcion == 2)
resultado = a - b;
// Verificamos para division
else if (opcion == 3)
if (b != 0) // este if esta
anidado
resultado = a / b;
else // Este else pertenece al segundo if
Console.WriteLine(Divisor no
vlido);
// Verificamos para la multiplicacion
else if (opcion == 4)
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 96
7/22/2019 USER - C# Guia Total Del Programador
98/403
Con esto se cumple la condicin del primer ify se ejecuta la operacin de suma. Pe-ro nosotros sabemos que se ejecuta ifo else, nunca ambos. Si observamos, vemos que
todas las dems operaciones estn en la ruta de else, por lo que son ignoradas.Antes tenamos que hacer cuatro ifsiempre, ahora solamente se hizo uno y los dems seevitaron, ah es donde est la optimizacin. En otras palabras, en el programa anteriorsiempre eran cuatro ify en el nuevo, en el mejor de los casos tenemos un solo if, peroen el peor de los casos tenemos cuatro. As es cmo se llevo a cabo la optimizacin.
Expresiones lgicasAl igual que las expresiones aritmticas y relacionales, las expresiones lgicas tienen suspropios operadores. stos son:y, o y no. En ingls los conocemos como: and, or y not.
OPERADOR SIGNIFICADO
&& y
|| o
! no
Tabla 2.Aqu tenemos los operadores lgicos utilizados en C#.
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 97
7/22/2019 USER - C# Guia Total Del Programador
99/403
Supongamos que tenemos que decidir si debemos llenar el tanque de gasolina delvehculo. Esto lo hacemos si el tanque tiene menos del 50% y si la distancia a re-
correr es de ms de 200 km. Como vemos, tenemos que usar la conjuncin ya quetenemos dos condiciones y ambas se deben cumplir para que suceda la carga de lagasolina. Si colocamos esto como expresin quedara:
if(tanque < 50 && distancia > 200)
Cargar gasolina
Supongamos que tanque es 25 y distancia es 350, al evaluar 25 < 50 y 350 > 200 te-nemos lo siguiente.
if(true && true)
Cargar gasolina
En nuestra tabla sabemos que cuando ambas expresiones son verdaderas, entoncesse cumple la conjuncin y la expresin lgica nos evala a true.
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 98
7/22/2019 USER - C# Guia Total Del Programador
100/403
Al ver nuestra tabla, vemos que false y true se evalan como false, por lo que no re-alizaremos la carga de gasolina.
El uso de la disyuncinPara la disyuncin hacemos uso del operador o. ste tambin necesita dos ex-presiones, una en el lado derecho y otra en el lado izquierdo. Esta disyuncin tie-ne la siguiente tabla de verdad:
P Q P||Q
true true truefalse true true
true false true
false false false
Tabla 4. La tabla de verdad de la disyuncin.
Veamos un ejemplo con la disyuncin. Tenemos que tomar la sombrilla si llueve o
si hay mucho sol. La expresin podra quedar de la siguiente manera:
if(lluvia == true || muchosol == true)
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 99
7/22/2019 USER - C# Guia Total Del Programador
101/403
if(false || false)
Tomar sombrilla
En este caso, la expresin se evala como false y no se toma la sombrilla.
El uso de la negacinNos falta conocer un operador ms, el de la negacin. Ese operador es muy sencillo ysolamente necesita hacer uso de un operando del lado derecho. Con estas condiciones
dadas, esta expresin ser negada por el operador.
p Negacin
true false
false true
Tabla 5. La tabla de verdad de la negacin.
Esto quiere decir que si el operando del lado derecho es true, el operador regresafalse. Y si el operando del lado derecho es false, el operador regresa true.
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 100
7/22/2019 USER - C# Guia Total Del Programador
102/403
Mostrar Men
Resultado = a + b
Resultado = a - b
Pedir opcin
Pedir b
Pedir a
Inicio
Opcin==1
Opcin==2
S
NO IS
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 101
7/22/2019 USER - C# Guia Total Del Programador
103/403
namespace AplicacionBase
{
class Program
{
// Esta es la funcin principal del programa
// Aqu inicia la aplicacin
static void Main(string[] args)
{
// Variables necesarias
float a = 0.0f;
float b = 0.0f;
float resultado = 0.0f;
string valor = ;
int opcion = 0;
// Mostramos el men
Console.WriteLine(1- Suma);
Console.WriteLine(2- Resta);
Console WriteLine(3- Divisin);
3. EL PROGRAMA TOMA DECISIONES
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 102
7/22/2019 USER - C# Guia Total Del Programador
104/403
resultado = a - b;
// Verificamos para divisin
else if (opcion == 3 && b!=0) // Aqu usamos una expresin
lgica
resultado = a / b;
// Verificamos para la multiplicacin
else if (opcion == 4)
resultado = a * b;
// Mostramos el resultado
Console.WriteLine(El resultado es: {0}, resultado);
}
}
}
l l i f il d l N i di i l l d i
La toma de decisiones
03_C#2010_AJUSTADO.qxd 8/6/10 8:32 PM Page 103
7/22/2019 USER - C# Guia Total Del Programador
105/403
la lgica sea ms fcil de leer. Nuestra expresin es una disyuncin, en el lado iz-quierdo del or tenemos edad > 18, en el lado derecho tenemos una expresin
(edad > 15 && permiso == true). La segunda expresin es una conjuncin y de-ber evaluarse prime