user - c# guia total del programador

Upload: juan-balderrama

Post on 10-Feb-2018

252 views

Category:

Documents


0 download

TRANSCRIPT

  • 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