107
MANUAL DE ASIGNATURA: PROGRAMACI ´ ON Ana Cristina Palacios Garc´ ıa 24 de enero de 2012

MANUAL DE ASIGNATURA: PROGRAMACION´

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MANUAL DE ASIGNATURA: PROGRAMACION´

MANUAL DE ASIGNATURA:

PROGRAMACION

Ana Cristina Palacios Garcıa

24 de enero de 2012

Page 2: MANUAL DE ASIGNATURA: PROGRAMACION´

2

Page 3: MANUAL DE ASIGNATURA: PROGRAMACION´

Indice general

1. Introduccion a la computacion 11.1. Historia y organizacion de las computadoras . . . . . . . . . . 21.2. Definicion de una computadora . . . . . . . . . . . . . . . . . 81.3. Principales componentes de la computadora . . . . . . . . . . 9

1.3.1. Componentes de hardware . . . . . . . . . . . . . . . . 111.3.1.1. Dispositivos de almacenamiento . . . . . . . . 121.3.1.2. Dispositivos de entrada . . . . . . . . . . . . 131.3.1.3. Dispositivos de salida . . . . . . . . . . . . . 14

1.3.2. Elementos de software . . . . . . . . . . . . . . . . . . 141.3.2.1. Sistemas operativos . . . . . . . . . . . . . . . 161.3.2.2. Lenguajes de programacion . . . . . . . . . . 16

2. Programacion Estructurada 192.1. Programacion estructurada . . . . . . . . . . . . . . . . . . . . 192.2. Generalidades del lenguaje de programacion . . . . . . . . . . 21

2.2.1. Que es C# . . . . . . . . . . . . . . . . . . . . . . . . 212.2.2. Realizacion de un programa en C# . . . . . . . . . . . 22

2.3. Sintaxis del lenguaje de programacion . . . . . . . . . . . . . . 232.3.1. Identificadores, constantes y variables . . . . . . . . . . 232.3.2. Tipos de datos . . . . . . . . . . . . . . . . . . . . . . 262.3.3. Expresiones y operadores . . . . . . . . . . . . . . . . . 28

2.4. Procedimientos y funciones . . . . . . . . . . . . . . . . . . . . 332.5. Diagramas de flujo . . . . . . . . . . . . . . . . . . . . . . . . 37

2.5.1. Caracterısticas comunes . . . . . . . . . . . . . . . . . 37

3. Elementos basicos de C# 453.1. Elementos basicos de C# . . . . . . . . . . . . . . . . . . . . . 463.2. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . 46

i

Page 4: MANUAL DE ASIGNATURA: PROGRAMACION´

ii INDICE GENERAL

3.2.1. Estructura if . . . . . . . . . . . . . . . . . . . . . . . 463.2.2. Estructura switch . . . . . . . . . . . . . . . . . . . . 48

3.3. Tipos de ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . 503.3.1. Estructura while . . . . . . . . . . . . . . . . . . . . . 503.3.2. Estructura do/while . . . . . . . . . . . . . . . . . . . 513.3.3. Estructura for . . . . . . . . . . . . . . . . . . . . . . . 523.3.4. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . 533.3.5. Ejercicios estructuras de control . . . . . . . . . . . . . 543.3.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . 58

3.4. Anidaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.5. Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.5.1. Arreglos unidimensionales . . . . . . . . . . . . . . . . 623.5.1.1. Declaracion . . . . . . . . . . . . . . . . . . . 64

3.5.2. Arreglos multidimensionales . . . . . . . . . . . . . . . 663.5.2.1. Declaracion . . . . . . . . . . . . . . . . . . . 673.5.2.2. Consideraciones especiales . . . . . . . . . . . 69

4. Funciones y recursividad 714.1. Funciones o metodos . . . . . . . . . . . . . . . . . . . . . . . 71

4.1.1. La estructura de un metodo . . . . . . . . . . . . . . . 734.1.1.1. Tipo devuelto . . . . . . . . . . . . . . . . . . 734.1.1.2. Nombre del metodo . . . . . . . . . . . . . . 744.1.1.3. Lista de parametros . . . . . . . . . . . . . . 744.1.1.4. Cuerpo del metodo . . . . . . . . . . . . . . . 74

4.1.2. Forma general de un metodo . . . . . . . . . . . . . . . 744.1.2.1. Metodo Main . . . . . . . . . . . . . . . . . . 76

4.1.3. Como llamar a un metodo . . . . . . . . . . . . . . . . 764.1.4. Prototipos de funciones . . . . . . . . . . . . . . . . . . 77

4.1.4.1. Flujos de entrada . . . . . . . . . . . . . . . . 774.1.4.2. Flujos de salida . . . . . . . . . . . . . . . . . 78

4.1.5. Resumen de funciones . . . . . . . . . . . . . . . . . . 794.2. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

5. Aplicaciones 855.1. Introduccion propiedades fısicas . . . . . . . . . . . . . . . . . 875.2. Sistemas expertos en ingenierıa de alimentos . . . . . . . . . . 885.3. Transferencia de momento (ecuacion de flujo) . . . . . . . . . 895.4. Transferencia de calor . . . . . . . . . . . . . . . . . . . . . . 90

Page 5: MANUAL DE ASIGNATURA: PROGRAMACION´

INDICE GENERAL iii

5.5. Transferencia de masa (ecuacion de Ficks) . . . . . . . . . . . 915.6. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Bibliografıa 93

A. Codigo ASCII 95

B. Palabras clave de C# 99

Page 6: MANUAL DE ASIGNATURA: PROGRAMACION´

iv INDICE GENERAL

Page 7: MANUAL DE ASIGNATURA: PROGRAMACION´

Indice de figuras

1.1. Maquina de Pascal. . . . . . . . . . . . . . . . . . . . . . . . 21.2. Esquema basico de la maquina analıtica de Babbage. . . . . . 31.3. John von Neumann (1903-1957). . . . . . . . . . . . . . . . . 51.4. Esquema basico de una computadora. . . . . . . . . . . . . . . 61.5. Entrada y salida de datos en una computadora. . . . . . . . . 81.6. Esquema simplificado de una computadora. . . . . . . . . . . . 101.7. Hardware de un sistema de computo. . . . . . . . . . . . . . . 11

2.1. Resumen de los tipos de datos basicos que pueden emplearseen C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.2. Operadores aritmeticos. . . . . . . . . . . . . . . . . . . . . . 312.3. Operadores de comparacion. . . . . . . . . . . . . . . . . . . . 322.4. Orden de precedencia o prioridad de operadores. . . . . . . . . 332.5. Precedencia de operadores. . . . . . . . . . . . . . . . . . . . . 332.6. Simbologıa de los diagramas de flujo. . . . . . . . . . . . . . . 392.7. Esquema general de un diagrama de flujo. . . . . . . . . . . . 402.8. Diagrama de flujo para sumar dos numeros. . . . . . . . . . . 412.9. Diagrama de flujo para sumar 100 numeros leıdos por teclado 422.10. Diagrama de flujo del ejemplo 3 . . . . . . . . . . . . . . . . . 43

3.1. Ejemplo de un arreglo. . . . . . . . . . . . . . . . . . . . . . . 623.2. Dos ejemplos de vectores. Tomada de Garrido Carrillo (2006) . 633.3. Dos ejemplos graficos de matrices. Tomada de Garrido Carrillo

(2006). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.4. Representacion en una tabla de una matriz de dos dimensiones. 67

4.1. Evaluacion recursiva de 5!. . . . . . . . . . . . . . . . . . . . 82

5.1. Datos de Propiedades Fısicas. . . . . . . . . . . . . . . . . . . 90

v

Page 8: MANUAL DE ASIGNATURA: PROGRAMACION´

vi INDICE DE FIGURAS

2. El codigo ASCII (caracteres de control e imprimibles.) . . . . 973. ASCII extendido. . . . . . . . . . . . . . . . . . . . . . . . . . 98

4. Palabras reservadas de C#. . . . . . . . . . . . . . . . . . . . 99

Page 9: MANUAL DE ASIGNATURA: PROGRAMACION´

Capıtulo 1

Introduccion a la computacion

Objetivo general del curso de programacion:

Crear, desarrollar e implementar programas para facilitar la solucion deproblemas con responsabilidad en los procesos de produccion en la industriaalimentaria.

Competencias previas:

Conocer y aplicar las operaciones basicas de aritmetica.

Comprender los conceptos de software y hardware.

Conocer conceptos y uso de bases de datos.

Manejar software de aplicacion.

Competencias a desarrollar:

Conocer los conceptos de computadora, programa, algoritmo, lengua-je de programacion, hardware, software, partes de una computadora,historia de la computacion, entre otros conceptos.

En el presente capıtulo se abordaran conceptos diversos necesarios parala adecuada comprension del resto del manual. Algunos conceptos se refieren

1

Page 10: MANUAL DE ASIGNATURA: PROGRAMACION´

2 CAPITULO 1. INTRODUCCION A LA COMPUTACION

a las definiciones de computadora, programa, algoritmo, lenguaje de progra-macion, software, hardware, partes de una computadora segun el modelo devon Neumann, entre otros.

1.1. Historia y organizacion de las compu-

tadoras

Podrıa decirse que la computadora aparece cuando tanto los niveles tec-nologicos (fundamentalmente los electronicos), alcanzan el grado de avanceque ya tenıan las ideas y conceptos matematicos, lo cual ocurre a mediadosdel siglo XX (Levine (2001)).

Uno de los problemas que siempre nos ha cautivado es el relacionado conla actividad de contar y con el concepto de numero. De ahı que entre lasprimeras herramientas que se inventaron este un ingenio mecanico capaz deliberarnos de la pesada tarea de calcular a mano.

El abaco es la primera calculadora mecanica, aunque no se le puede llamarcomputadora porque carece de un elemento fundamental: el programa, queno se lograra sino hasta mucho tiempo despues.

Otro aparato para calcular que tampoco es una computadora, fue lamaquina de calcular inventada por el filosofo y matematico frances BlaisePascal (1623-1662). Se trata de una serie de engranajes en una caja, queproporcionan resultados de operaciones de suma y resta en forma directa(mostrando un numero a traves de una ventanita), y que por este simplehecho tiene la ventaja de que evita tener que contar, como en el caso delabaco; ademas, presenta los resultados en forma mas accesible y directa (verFigura 1.1).

Figura 1.1: Maquina de Pascal.

Page 11: MANUAL DE ASIGNATURA: PROGRAMACION´

1.1. HISTORIA Y ORGANIZACION DE LAS COMPUTADORAS 3

Es posible decir que la computadora nacio alrededor de 1830, con la“maquina analıtica” del inventor ingles Charles Babbage. Este diseno, quenunca fue construido por completo, contenıa todos los elementos que confi-guran a una computadora moderna y la diferencian de una calculadora.

La maquina analıtica estaba dividida por dos partes: una que ordenabay otra que ejecutaba las ordenes. La que ejecutaba era una version muyampliada de la maquina de Pascal, mientras que la otra era la parte clave. Lainnovacion consistıa en que el usuario podıa, cambiando las especificacionesde control, lograr que la misma maquina ejecutara operaciones complejas,diferentes de las hechas antes.

Tambien contaba con una seccion en donde se recibıan los datos paratrabajar. La maquina seguıa las instrucciones dadas por la unidad de control,las cuales indicaban que hacer con los datos de entrada, para obtener luego losresultados deseados. La aplicacion fundamental para la que se desarrollo eraelaborar tablas de funciones matematicas usuales (logaritmos, tabulacionestrigonometricas, etc.) que requerıan mucho esfuerzo manual.

Esta primera computadora “leıa” los datos de entrada por medio de tar-jetas perforadas, no obstante, la maquina analıtica nunca pudo entrar enoperacion, debido a la dificultad para lograr cambiar las especificaciones delas distintas funciones que se deseaba realizar, lo cual supuestamente se lo-graba alterando la disposicion de ciertos elementos mecanicos en la seccionde control de la maquina.

A continuacion se describe el esquema elemental de la maquina inven-tada por Charles Babbage (ver Figura 1.2), para explicar algunas de lascaracterısticas mas importantes de toda computadora digital moderna.

Figura 1.2: Esquema basico de la maquina analıtica de Babbage.

La seccion de control se convierte en el concepto fundamental porque diri-ge el procesamiento, de acuerdo con un “programa” previamente introducido

Page 12: MANUAL DE ASIGNATURA: PROGRAMACION´

4 CAPITULO 1. INTRODUCCION A LA COMPUTACION

en el “almacen” (como llamo Babbage a la memoria) de la maquina. Ası, unacomputadora esta formada por una unidad de entrada, que recibe tantola informacion por procesar como las instrucciones (programa); la unidadde memoria, que almacena la informacion; la unidad de procesamiento(aritmetica y logica), que ejecuta los calculos sobre la informacion; la unidadde control, que dirige a todas las demas unidades, determinando cuando sedebe leer la informacion, en que lugares debe almacenarse, cuando debe fun-cionar la unidad aritmetica, etc.; y una unidad de salida, que muestra lainformacion ya procesada, en forma de numeros o graficas.

Casi cien anos despues de Babbage, en 1947, se diseno la primera compu-tadora electronica digital, que tenıa gran parecido funcional con la maquinaanalıtica (lo cual hablaba del genio de su antecesor), aunque antes hubieronalgunos otros esfuerzos.

En 1932, el investigador estadounidense Vannevar Bush construyo enel Instituto Tecnologico de Massachusetts (MIT) una calculadora electro-mecanica conocida como el analizador diferencial, pero era de proposito es-pecıfico y no tenıa capacidades de programacion.

Igualmente, en 1944 se construyo en la Universidad de Harvard la compu-tadora IBM Mark I, disenada por un equipo encabezado por Howard H.Aiken. No obstante, esta maquina no califica para ser considerada como laprimera computadora electronica, porque no era de proposito general y sufuncionamiento estaba basado en dispositivos electromecanicos, llamados re-levadores.

La primera computadora

Un equipo dirigido por los doctores en ingenierıa John Mauchly y JohnEckert, de la Universidad de Pennsylvania, termino en 1947 una gran maqui-na electronica llamada ENIAC (Electronic Numerical Integrator And Compu-ter) que puede ser considerada como la primera computadora digital electroni-ca de la historia.

Esta maquina era enorme: medıa 10×16 metros, ocupaba todo un sotanoen la universidad, pesaba 30 toneladas, tenıa 17, 468 tubos de vacıo y 6, 000relevadores; consumıa 140 KW de energıa electrica y requerıa todo un siste-ma de aire acondicionado industrial. Pero era capaz de efectuar alrededor decinco mil sumas (o 2, 800 multiplicaciones) en un segundo, rebasando parasiempre las limitaciones humanas de velocidad y precision, e inaugurandouna nueva etapa en las capacidades de procesamiento de datos. En 1949 cal-

Page 13: MANUAL DE ASIGNATURA: PROGRAMACION´

1.1. HISTORIA Y ORGANIZACION DE LAS COMPUTADORAS 5

culo el valor de la constante π con 2, 037 decimales, para lo cual requirio de70 horas. Como, entre otras cosas, la maquina iba a reemplazar a un grupo dematematicas que hacıan computos numericos para una oficina especializadadel gobierno estadounidense, tomo el nombre de ellas: “computadoras”.

El proyecto fue auspiciado por el Departamento de Defensa de EstadosUnidos, y culmino dos anos despues, cuando se integro a ese equipo el ingenie-ro y matematico hungaro naturalizado norteamericano John von Neumann(1903-1957).

El padre de las computadoras

Las ideas de von Neumann resultaron tan fundamentales para los desa-rrollos posteriores que a el se le considera el padre de las computadoras (verFigura 1.3).

Figura 1.3: John von Neumann (1903-1957).

La nueva idea fundamental de von Neumann resulta muy sencilla, pero devital importancia: permitir que en la memoria coexistan datos con instruc-ciones, para que entonces la computadora pueda ser programada de manera“suave”, y no por medio de alambres que electricamente interconectabanvarias secciones de control, como en la ENIAC.

Esta idea que obliga a una completa revision de la arquitectura de lascomputadoras, recibe desde entonces el nombre de modelo de von Neu-mann. Alrededor de este concepto gira toda la evolucion posterior de laindustria y la ciencia de la computacion.

Page 14: MANUAL DE ASIGNATURA: PROGRAMACION´

6 CAPITULO 1. INTRODUCCION A LA COMPUTACION

El modelo de von Neumann

La idea central del modelo de computacion propuesto por John von Neu-mann consiste en almacenar las instrucciones del programa de una compu-tadora en su propia memoria, logrando ası que la maquina siga los pasosdefinidos por su programa almacenado.

En el diagrama de la Figura 1.4 se observan las relaciones estructura-les existentes entre las diversas unidades que configuran la maquina. Esteesquema se emplea en practicamente todos los modelos de computadoras ypresenta la configuracion general de una computadora de programa alma-cenado (que es otro nombre para una maquina que funciona con el modelode von Neumann). Es muy parecida al diseno original de Charles Babbage,aunque no esta basada en el.

Figura 1.4: Esquema basico de una computadora. Tomada de Levine (2001).

A continuacion se describe brevemente el funcionamiento de cada uno delos componentes del modelo de von Neumann, que es en el cual se basan lascomputadoras actuales para funcionar.

La unidad central de procesamiento (UCP, de aquı en adelante,aunque tambien es comun referirse a ella como CPU, por sus siglas eningles: Central Processing Unit) contiene a la unidad aritmetica y logica(hace los calculos) y la unidad de control (define su orden y secuencia).

La funcion de la UCP es clara: ejecutar instrucciones. Pero para ellonecesariamente deben cumplirse estas condiciones:

• Que las instrucciones sean entendibles por la UCP.

• Que esten almacenadas en la memoria.

Page 15: MANUAL DE ASIGNATURA: PROGRAMACION´

1.1. HISTORIA Y ORGANIZACION DE LAS COMPUTADORAS 7

Para cumplir con la primera condicion se vuelve imprescindible codi-ficarlas1 de alguna forma, mediante numeros, para entonces construircircuitos electronicos (Babbage fracaso en su intento de hacerlos con en-granes) que se activen cuando reciban cada codigo numerico y efectuenla accion u operacion codificada.

Para la segunda condicion, se abordara el problema del almacenamientode numeros definiendolo precisamente como la funcion de la memoria.

La memoria. Para nuestros propositos, la memoria sera un conjuntode celdas (o casillas electronicas) con las siguientes caracterısticas:

• Cada celda puede contener un (y solo un) valor numerico.

• Cada celda tiene la propiedad de ser “direccionable”, es decir, sepuede distinguir una de otra por medio de un numero univocollamado su direccion.

Lo anterior implica que las celdas deben estar organizadas para facilitarla localizacion de cualquiera de ellas con un esfuerzo mınimo. La formamas sencilla de lograrlo es organizandolas en forma de un conjuntonumerado secuencialmente (tambien llamado arreglo o vector), paraentonces referirse a las celdas por medio de su direccion.

Existen dos operaciones elementales que el procesador puede efectuarsobre la memoria: leer el contenido de una celda, y escribir un valoren una celda. Los pasos necesarios para efectuar las dos operacionesprimitivas se indican a continuacion.

Para leer:

• Decidir cual celda se va a leer y proporcionar su direccion.

• Esperar un tiempo fijo para que los circuitos de la memoria traiganel valor depositado en la celda y lo dejen en otro registro especial(la celda no pierde ese valor; solo se trae una copia del dato y noel dato mismo).

• Recoger el dato y dar por terminada la operacion de lectura.

Para escribir:

1Codificar se refiere a la forma en como se almacenaran las instrucciones en la memoria,de tal manera, que la forma en como se representen sea unica para cada instruccion.

Page 16: MANUAL DE ASIGNATURA: PROGRAMACION´

8 CAPITULO 1. INTRODUCCION A LA COMPUTACION

• Proporcionar a la memoria el dato que se desea depositar en unacelda.

• Proporcionar la direccion de la celda sobre la que se desea hacerla escritura del dato.

• Esperar un tiempo fijo para que los circuitos de la memoria de-positen el dato en la celda designada, para dar por terminada laoperacion de escritura. (Si la celda en cuestion tenıa ya un valor,este se pierde, pues es reemplazado por el nuevo).

La unidad de entrada. Corresponde a todos aquellos elementos odispositivos que permiten a la computadora recibir informacion prove-niente del exterior para ser procesada.

La unidad de salida. Corresponde a todos los elementos o dispositivosque permiten a la computadora emitir o presentar los resultados de susdistintos procesos hacıa el exterior.

1.2. Definicion de una computadora

Algunas definiciones de que son y como funcionan las computadoras semencionan a continuacion:

Definicion 1. (Computadora) Una computadora es una maquina di-senada para aceptar un conjunto de datos de entrada, procesarlos2, y obtenercomo resultado un conjunto de datos de salida, Garrido Carrillo (2006) (verFigura 1.5).

Figura 1.5: Entrada y salida (E/S) de datos en una computadora. Tomadade Garrido Carrillo (2006).

2Por procesar datos entendemos la realizacion de operaciones aritmeticas y logicas conellos.

Page 17: MANUAL DE ASIGNATURA: PROGRAMACION´

1.3. PRINCIPALES COMPONENTES DE LA COMPUTADORA 9

Definicion 2. (Computadora) Una computadora es una maquina cuyafuncion no es solo calcular, sino que tambien procesa diversos datos y cuyofin es elaborar una informacion con gran rapidez para la toma de decisiones,por lo que su aplicacion es generica, es decir maneja diversos tipos de soft-ware, Orozco Guzman et al. (2006).

Algunas de las caracterısticas principales que proporcionan las compu-tadoras son (Orozco Guzman et al. (2006)):

Son una herramienta de trabajo.

Entienden instrucciones para ejecutar comandos u ordenes (son pro-gramables).

Procesan datos y emiten informacion especıfica e inteligible en gran-des volumenes y con gran rapidez bajo la direccion de un programaalmacenado.

Almacenan los datos e informacion. Las computadoras no solo permitenel introducir datos para ser procesados, sino tambien, las instruccionesque indican como han de procesarse dichos datos. Generalmente, dichasinstrucciones se encuentran almacenadas previamente en la computado-ra, por lo que los usuarios unicamente necesitaran interactuar con ellaspor medio de la entrada y salida (E/S) de datos.

Envıan o reciben datos o informacion desde grandes distancias (siemprey cuando esten conectadas a Internet).

A traves de la historia de las computadoras se considero como caracterısti-ca distintiva de “computadora” el hecho de que sean maquinas de propositogeneral, es decir, que pueden tener infinidad de aplicaciones. Actualmente,dotar a una computadora de una nueva aplicacion implica solamente agregaro actualizar programas que se almacenan en la memoria de la computadora.

1.3. Principales componentes de la compu-

tadora

Definicion 3. (Hardware) Denominamos Hardware a la parte fısica delsistema, es decir, al conjunto de dispositivos, cables, transistores, etc. que lo

Page 18: MANUAL DE ASIGNATURA: PROGRAMACION´

10 CAPITULO 1. INTRODUCCION A LA COMPUTACION

conforman, Garrido Carrillo (2006).

Definicion 4. (Software) Denominamos Software a la parte logica, esdecir, al conjunto de programas, y por tanto intangibles del sistema3, GarridoCarrillo (2006).

Una computadora o sistema de computo, como se muestra en la figura1.6, se divide en tres componentes principales: el hardware, el software ylos usuarios (Gomez de Silva Garza et Ania Briseno (2008), pp.175).

Figura 1.6: Esquema simplificado de una computadora. Tomada de Gomezde Silva Garza et Ania Briseno (2008).

La parte del hardware a su vez se puede subdividir en tres partes, losdispositivos fısicos, la microprogramacion y el lenguaje maquina (Tanenbaum(1993), pp. 2). La parte de software se puede subdividir en dos partes, losprogramas del sistema y los programas de aplicacion. Dentro de los programas

3El termino software en informatica es, realmente, mas general, ya que incluye no sololos programas sino toda la informacion asociada a su desarrollo y mantenimiento.

Page 19: MANUAL DE ASIGNATURA: PROGRAMACION´

1.3. PRINCIPALES COMPONENTES DE LA COMPUTADORA 11

de sistema se encuentra el sistema operativo (Gomez de Silva Garza et AniaBriseno (2008)).

1.3.1. Componentes de hardware

El termino hardware generalmente se refiere a la computadora misma ya todos los diferentes componentes que las personas pueden conectar o des-conectar de esta. Algunas computadoras requieren que varios componentesde hardware se conecten dentro de ellas. Estos normalmente se llaman dis-positivos internos. Los que se conectan con cables especiales en la parteposterior de algunas computadoras son por lo tanto llamados dispositivosexternos (Calderon (1995)).

El hardware de una computadora lo constituyen todas sus partes electro-mecanicas, como son el procesador central, la memoria central, y los disposi-tivos de entrada y salida como las unidades de disco, la impresora, el monitor,el teclado, la tarjeta de video, la tarjeta de red y la tarjeta de sonido con lasbocinas, entre otros dispositivos (ver Figura 1.7).

Figura 1.7: Hardware de un sistema de computo. Tomada de Gomez de SilvaGarza et Ania Briseno (2008).

Los dispositivos de entrada y salida reciben dicho nombre porque solo atraves de ellos se puede hacer entrar o salir informacion de la computadora.

Cada dispositivo tiene asociado un controlador que se encarga de ma-nejar dicho dispositivo, con el correspondiente movimiento de informacion.Los componentes de hardware reciben las ordenes de lo que deben hacer porparte del sistema operativo. El hardware agrupa los recursos basicos que elsistema operativo debe administrar con medida y justicia.

Page 20: MANUAL DE ASIGNATURA: PROGRAMACION´

12 CAPITULO 1. INTRODUCCION A LA COMPUTACION

El hardware se puede subdividir en tres partes: los dispositivos fısicos, lamicroprogramacion y el lenguaje maquina (Tanenbaum (1993)).

1. Dispositivos fısicos. Corresponden a la capa mas baja, contienen losdispositivos fısicos conformados por chips, cables, fuentes de poder,tubos de rayos catodicos y otros dispositivos fısicos similares.

2. Microprogramacion. Es un software primitivo que controla en formadirecta los dispositivos y proporciona una interfaz mas limpia con lasiguiente capa. Este software se localiza, por lo general, en la memoriaexclusiva para lectura. Es en realidad un interprete, busca las instruc-ciones de lenguaje de maquina tales como ADD, MOVE y JUMP parallevarlas a cabo como una serie de pequenos pasos. En ciertas maquinasel microprograma se implanta en el hardware y no es en realidad unacapa distinta.

3. Lenguaje maquina.

Definicion 5. (Lenguaje maquina) Denominamos lenguaje maqui-na al codigo (conjunto de instrucciones) que entiende, directamente,un procesador.

El conjunto de instrucciones que interpreta el microprograma defineal lenguaje maquina, que no es en sı parte de la maquina, pero to-dos los fabricantes de computadoras lo describen de esa forma, por loque muchas personas piensan en el como si fuera la “maquina” real. Ellenguaje maquina tiene por lo general de 50 a 300 instrucciones, la ma-yorıa de las cuales sirven para desplazar datos a traves de la maquina,hacer operaciones aritmeticas y comparar valores.

Debido a que algunos de los componentes del hardware facilitan el alma-cenamiento, ingreso de informacion, y otros, la salida de esta, se clasificanen dispositivos de almacenamiento, de entrada y de salida (Quesada Ugalde(2004)).

1.3.1.1. Dispositivos de almacenamiento

Disco duro. Es el sistema de almacenamiento permanente de infor-macion mas importante que posee la computadora. En el se guardan

Page 21: MANUAL DE ASIGNATURA: PROGRAMACION´

1.3. PRINCIPALES COMPONENTES DE LA COMPUTADORA 13

los programas y archivos, ası como se pueden mantener los documentosrealizados por nosotros mismos.

La capacidad de almacenamiento de informacion del disco duro varıa ypuede ser ampliada para lograr que la computadora efectue con mayorvelocidad las tareas e instrucciones que se demandan.

Unidad de disquete. Es un componente en forma de ranura queesta ubicada en la caja del CPU. En ella se introduce el disquete detamano 3 1

2. Es un dispositivo de almacenamiento permanente de in-

formacion. Posibilita al usuario para guardar informacion que tiene enla computadora en el disquete y viceversa.

Unidad de disco compacto o unidad de CD. Es un dispositivosimilar al de la unidad de disquete, que posibilita leer o cargar la in-formacion que contiene el CD. Tiene mayor capacidad para almacenardatos y por ello, puede almacenar sonido, vıdeo, y documentos varios.Para esto, se requiere un quemador de CD.

1.3.1.2. Dispositivos de entrada

Teclado. Es el principal dispositivo que utiliza el usuario para comu-nicarse con la computadora. Posee un conjunto de teclas similares a lasde una maquina de escribir, en cuanto a las letras, numeros y signos queincluye y su distribucion. Con ellas, se ingresan datos o instruccionesa la computadora. Es movil, lo que le da al usuario la posibilidad deacomodarlo a su gusto, en la posicion que le agrade mas.

Mouse o raton. Es un dispositivo que se mueve sobre la superficiede la mesa para manipular el cursor y puntero alrededor de la pantaladel monitor. Representa una forma facil de seleccionar funciones o ins-trucciones contenidas en los menus o iconos. Posee dos o tres botones.Generalmente, con el boton izquierdo, se indica al sistema que ejecutela funcion que se senala con el puntero. El boton de la derecha, cuan-do se presiona sobre un objeto o elemento en la pantalla, despliega unpequeno menu que muestra las caracterısticas y funciones de este. Elboton del centro se desplaza hacia delante y hacia atras para moversea lo largo del documento en el que se trabaja.

Page 22: MANUAL DE ASIGNATURA: PROGRAMACION´

14 CAPITULO 1. INTRODUCCION A LA COMPUTACION

Escaner o digitalizador de imagenes. Este artefacto transfiere unaimagen impresa o de un objeto a la computadora, en forma de unaimagen digital que se muestra en el monitor. Esta se guarda como unarchivo que puede incluirse en un documento.

Microfono. Es un accesorio que se puede incorporar a la computado-ra. Permite grabar sonido y voz y guardarlos como un archivo. Estosarchivos pueden incorporarse, por ejemplo, en un documento que seelabora en el programa Word o con Power Point, dando con ello efectosparticulares a su trabajo.

1.3.1.3. Dispositivos de salida

Monitor. Es la pantalla que permite a la computadora mostrar lainformacion que procesa y al usuario mantener un control de las ins-trucciones y tareas que realiza en la computadora.

Impresora. Es una maquina mediante la cual se traslada al papel lainformacion que se desea tener en forma impresa. Este dispositivo deconsigue en variedad de tipos. Hay las que imprimen en blanco y negro,a color, e incluso en Braile.

Bocinas. Las bocinas son similares a los equipos de sonido; se utilizanpara escuchar sonidos y musica. Actualmente se encuentran en variedadde tamanos y calidades. Una variante de estos son los audıfonos.

1.3.2. Elementos de software

Definicion 6. (Programa) Denominamos Programa al conjunto orde-nado de instrucciones que indican a la computadora las operaciones que sedeben llevar a cabo para realizar una determinada tarea, Garrido Carrillo(2006).

El software se puede subdividir en dos partes, los programas del sistemay los programas de aplicacion (Gomez de Silva Garza et Ania Briseno (2008),Tanenbaum (1993)).

1. Programas del sistema. Sirven de apoyo a los programas de aplica-cion, su funcion es dirigir las funciones basicas de la computadora.

Page 23: MANUAL DE ASIGNATURA: PROGRAMACION´

1.3. PRINCIPALES COMPONENTES DE LA COMPUTADORA 15

Los programas de sistema se pueden dividir a su vez en dos partes: elsistema operativo, y el resto del software del sistema. El sistema opera-tivo es una de las partes mas importantes de los programas del sistema,ya que tiene sus caracterısticas propias para cada computadora.

Sistema operativo. Es el programa principal que contiene una compu-tadora. Este es el programa base que determina las caracterısticasdel ambiente de trabajo que presenta la computadora al usuario(Quesada Ugalde (2004)).

Una de las principales funciones del sistema operativo es ocultartoda la complejidad del hardware y proporcionar al programadorun conjunto mas conveniente de instrucciones con el cual trabajar.Por ejemplo, READ BLOCK FROM FILE es conceptualmentemas sencillo que tener que preocuparse de los detalles de movi-miento de las cabezas del disco, esperar que estas se detengan,etc.

El sistema operativo es esa parte del software que se ejecuta enmodo central o modo supervision. Esta protegido contra laalteracion por parte del usuario por el hardware. Este software loproporciona el fabricante del sistema de computacion para usarloexclusivamente en las computadoras disenadas por ellos.

Software de sistema. Son programas que controlan recursos y ser-vicios de la computadora como son la impresora, el escaner y losrecursos multimedia (Quesada Ugalde (2004)). Aquı se encuentranel interprete de comandos (shell), compiladores y editores. Estosprogramas no son parte del sistema operativo, aunque sea usualque el fabricante de la computadora los proporcione junto con el.

Los compiladores y editores se ejecutan en modo usuario. Siun usuario no desea utilizar un compilador particular, el esta enlibertad de escribir el suyo propio, si ası lo desea; no tiene libertadde escribir su propio controlador de interrupciones de disco, que esparte del sistema operativo y que, por lo general, queda protegidopor el hardware contra los intentos de escritura en el por parte delusuario.

2. Programas de aplicacion. Sobre los programas de sistema se encuen-tran los programas de aplicacion. Estos programas son escritos por los

Page 24: MANUAL DE ASIGNATURA: PROGRAMACION´

16 CAPITULO 1. INTRODUCCION A LA COMPUTACION

usuarios para resolver sus problemas particulares (a traves de lenguajesde programacion) o para permitir realizar tareas especıficas, como elprocesamiento de datos comerciales, calculos de ingenierıa, o juegos.

1.3.2.1. Sistemas operativos

Definicion 7. (Sistema Operativo) El sistema operativo es el progra-ma que oculta la verdad del hardware al programador y presenta una agradabley sencilla vision de los archivos con su nombre, los cuales se puedan leer oescribir en ellos, Tanenbaum (1993).

El sistema operativo como componente de una computadora, es unejemplo de interaccion entre software y hardware. Con dicha interaccion sepueden realizar dos de las funciones principales de toda computadora: eje-cutar programas y guardar informacion en archivos. El sistema operativoes un programa desarrollado siguiendo tecnicas de programacion, algoritmosy estructuras de datos.

El sistema operativo se construye por varios programas y subprogramas,reside dentro de una computadora. Ası, desde dentro de la computadora elsistema operativo efectua la funcion de un intermediario entre el usuario yel hardware y software de la computadora. En este papel de intermediario,el sistema operativo primero recibe las peticiones del usuario y segundo in-teractua con la computadora para indicarle a esta las instrucciones que debeseguir para realizar las necesidades computacionales solicitadas por el usua-rio. Para operar, el sistema operativo debe administrar tanto los recursosde hardware como los de software (Gomez de Silva Garza et Ania Briseno(2008)).

1.3.2.2. Lenguajes de programacion

Definicion 8. (Lenguaje de Programacion) Un lenguaje de progra-macion es un sistema notacional para describir computaciones en una formalegible tanto para la maquina como para el ser humano (Louden (2004b)).

Se analizaran los tres conceptos clave de esta definicion.Por computacion entiendase como cualquier proceso que pueda ser efec-

tuado por una computadora. Sin embargo, observe que la computacion noquiere decir simplemente calculos matematicos, como el computo del pro-

Page 25: MANUAL DE ASIGNATURA: PROGRAMACION´

1.3. PRINCIPALES COMPONENTES DE LA COMPUTADORA 17

ducto de dos cifras o el logaritmo de un numero. La computacion incluyetodo tipo de operaciones de computadora, incluyendo la manipulacion dedatos, el procesamiento de texto y el almacenamiento y recuperacion de lainformacion.

Legibilidad por parte de la maquina. Para que un lenguaje resultelegible para la maquina, debe tener una estructura lo suficientemente sim-ple para que permita una traduccion eficiente. Esto se trata de un requisitogeneral que se puede enunciar con precision en terminos de definicion y decomplejidad de traduccion. Primero debera existir un algoritmo para la tra-duccion del lenguaje, es decir, un proceso paso a paso que no es ambiguo yque es finito. Segundo, el algoritmo no debe tener una complejidad demasia-do elevada: la mayorıa de los lenguajes de programacion se pueden traduciren un tiempo que es proporcional al tamano del programa.

Legibilidad por parte del ser humano. A diferencia de la legibili-dad de la maquina, esta es una idea mucho menos precisa y tambien menoscomprendida. Requiere que un lenguaje de programacion proporcione abs-tracciones de las acciones de las computadoras faciles de comprender, inclusopara personas no completamente familiarizadas con los detalles subyacentesde la maquina. Una consecuencia de lo anterior es que los lenguajes de pro-gramacion tienen la tendencia a parecerse a los lenguajes naturales (como elingles o el chino), por lo menos de manera superficial.

Page 26: MANUAL DE ASIGNATURA: PROGRAMACION´

18 CAPITULO 1. INTRODUCCION A LA COMPUTACION

Page 27: MANUAL DE ASIGNATURA: PROGRAMACION´

Capıtulo 2

Introduccion a la programacionestructurada

Competencias especıficas a desarrollar:

Explicar los componentes principales de los lenguajes de programacion,ası como su sintaxis, procedimientos y funciones.

Capacidad de aplicar los conocimientos en la practica.

Capacidad de analisis y sıntesis.

Capacidad de organizar y planificar.

Habilidad para buscar soluciones diversas para un problema.

2.1. Programacion estructurada

Niklaus Wirth (el disenador del lenguaje de programacion Pascal), defi-nio el concepto de programa con la siguiente ecuacion:

Programa = Algoritmo + Estructura de datos

Por tanto, en un programa hay dos bloques semanticos distintos: las estruc-turas de datos, que constituyen la informacion (tanto la de entrada paraprocesar como la de salida procesada) y el algoritmo, que constituye el pro-ceso mecanico que trata la informacion (Martınez-Gil et Martın-Quetglas(2003)).

19

Page 28: MANUAL DE ASIGNATURA: PROGRAMACION´

20 CAPITULO 2. PROGRAMACION ESTRUCTURADA

Es posible decir que una estructura de datos es la forma de como organi-zar un conjunto de datos en memoria, dichos datos pueden ser homogeneoso heterogeneos a los cuales se accedera de una forma determinada depen-diendo del tipo de estructura empleada. Los algoritmos se descomponen enun conjunto de instrucciones mas simples llamadas sentencias del progra-ma que hacen uso de las estructuras de datos para obtener una solucion.La perspectiva de programa propuesta por Niklaus Wirth es propia de unmodelo de programacion llamada programacion estructurada (Martınez-Gilet Martın-Quetglas (2003)).

La programacion estructurada es una tecnica para escribir programas demanera clara. Surgio a finales de los anos 1960, este tipo de programacionno solamente daba lugar a programas fiables y eficientes, sino que ademasestaban escritos de manera que facilitaba su comprension posterior.

El teorema del programa estructurado propuesto por Bohm-Jacopini, de-muestra que todo programa puede escribirse utilizando unicamente las tresinstrucciones de control siguientes:

Secuencia. Una estructura de programa es secuencial si las instruccionesse ejecutan una tras otra, a modo de secuencia lineal, es decir, que unainstruccion no se ejecuta hasta que finaliza la anterior, ni se bifurca elflujo del programa.

Instruccion condicional. La estructura selectiva permite que la ejecuciondel programa se bifurque a una instruccion o conjunto de instruccionesu otras opciones segun un criterio o condicion logica establecida, solouno de los caminos en la bifurcacion sera el tomado para ejecutarse.

Iteracion (bucle de instrucciones) con condicion al principio. Un bucle1

iterativo o iteracion de una secuencia de instrucciones, hace que serepita su ejecucion mientras se cumpla una condicion, el numero deiteraciones normalmente esta determinado por el cambio en la condiciondentro del mismo bucle, aunque puede ser forzado o explıcito por otracondicion.

Segun el esquema de la programacion estructurada se pueden escribirtodos los programas y aplicaciones posibles empleando unicamente estos tres

1Por bucle de instrucciones nos referimos a un ciclo en el que se repetira un ciertonumero de instrucciones dependiendo del estado de una condicion.

Page 29: MANUAL DE ASIGNATURA: PROGRAMACION´

2.2. GENERALIDADES DEL LENGUAJE DE PROGRAMACION 21

tipos de instrucciones. Si bien los lenguajes de programacion tienen un mayorrepertorio de estructuras de control, estas pueden ser construidas mediantelas tres basicas antes mencionadas.

Hoy en dıa las aplicaciones informaticas son mucho mas ambiciosas quelas necesidades de programacion existentes en los anos 1960, principalmentedebido a las aplicaciones graficas, por lo que las tecnicas de programacion es-tructurada no son suficientes. Ello ha llevado al desarrollo de nuevas tecnicas,tales como la programacion orientada a objetos y al desarrollo de entornosde programacion que facilitan la programacion de grandes aplicaciones.

En este capıtulo se estudiaran ciertos detalles para trabajar con el len-guaje de programacion Visual C# (C# Sharp: C bien definido), el cual endefinitiva no es un lenguaje de programacion estructurado, mas bien es unlenguaje de programacion orientado a objetos2. En el presente manual nosenfocaremos en presentar la forma en como utilizar las tres instruccionesde control antes mencionadas empleando C# valiendonos de las distintasherramientas visuales que proporciona Visual C#, esto con la finalidad deenriquecer el curso y simplificarlo al realizar los ejercicios y practicas en unentorno visual y “facil” de utilizar.

2.2. Generalidades del lenguaje de programa-

cion

2.2.1. Que es C#

Antes de entender lo que es C# se requiere decir primero lo que esMicrosoft .NET Framework (.NET ). Se trata de un entorno de desarrollomulti-lenguaje disenado por Microsoft para simplificar la construccion, dis-tribucion y ejecucion de aplicaciones para Internet. Tiene basicamente trescomponentes: una maquina virtual (CLR: Common Language Runtime) queprocesa codigo escrito en un lenguaje intermedio (MSIL: Microsoft Interme-diate Languaje), una biblioteca de clases (biblioteca .NET) y ASP.NET que

2La programacion orientada a objetos es simplemente una forma de programacion dife-rente a la programacion estructurada, no solo utiliza instrucciones secuenciales, condicio-nales o ciclos. Este tipo de programacion se caracteriza en crear “objetos complejos”, esdecir, los objetos que aquı se crean tienen atributos o propiedades, y metodos u operacionesque permiten al objeto modificar el estado de sus atributos.

Page 30: MANUAL DE ASIGNATURA: PROGRAMACION´

22 CAPITULO 2. PROGRAMACION ESTRUCTURADA

proporciona los servicios necesarios para crear aplicaciones Web (Ceballos(2008)).

C# es uno de los lenguajes de programacion de alto nivel que pertenecenal paquete .NET (otros lenguajes son Visual Basic, C/C++, etc.). C# esuna evolucion de C/C++. Con el se pueden escribir tanto programas con-vencionales como para Internet.

¿Donde se consigue el paquete .NET? Puede obtenerlo a traves de Interneten la direccion: http://www.microsoft.com/downloads.

Una de las ventajas significativas de C# sobre otros lenguajes de pro-gramacion es que es independiente de la plataforma. Esto quiere decir queel codigo producido por el compilador C# puede transportarse a cualquierplataforma (Intel, Sparc, Motorola, etc.) que tenga instalada un maquinavirtual .NET y ejecutarse.

2.2.2. Realizacion de un programa en C#

Los pasos a seguir durante la realizacion de un programa son los siguientes(Ceballos (2008)):

1. Editar el programa. Consiste en escribir las instrucciones del progra-ma que se desea realizar preferentemente en el lenguaje de programa-cion a emplear, en nuestro caso sera C#. Durante la edicion se puedeinsertar y eliminar informacion como en cualquier editor de textos con-vencional (Word o Latex). Las instrucciones que pueden codificarse enun programa deberan contar con la sintaxis que el lenguaje de progra-macion acepta, es decir, la codificacion se rige en funcion de reglas quehay que seguir para escribir programas que compilen y que posterior-mente puedan ejecutarse.

2. Compilarlo. La parte de compilacion (realizada por la computadora),consiste en traducir el programa fuente o codigo fuente desarrolladodurante la edicion a codigo intermedio (MSIL) para posteriormentepoder ejecutarse. El resultado de la compilacion sera un archivo con laextension .exe que contiene el codigo que ejecutara la maquina virtualde .NET.

Al compilar un programa se pueden presentar errores de compilacion,debidos a que el programa escrito no se adapta a la sintaxis y reglasdel compilador. Estos errores deberan ser corregidos hasta obtener unacompilacion sin errores.

Page 31: MANUAL DE ASIGNATURA: PROGRAMACION´

2.3. SINTAXIS DEL LENGUAJE DE PROGRAMACION 23

3. Ejecutarlo. Para ejecutar el archivo resultante de la compilacion yobservar los resultados, basta con escribir en la lınea de ordenes elnombre de dicho archivo y despues pulsar Enter, o simplemente dardoble clic sobre el archivo con extension .exe.

4. Depurarlo. Aun cuando un programa haya sido compilado y ejecuta-do, la solucion obtenida puede ser incorrecta. Este caso exige un analisisminucioso de como se comporta el programa a lo largo de su ejecucion,al analisis y correccion de errores potenciales se le conoce como fase dedepuracion del programa.

2.3. Sintaxis del lenguaje de programacion

Existen operaciones que se realizan con mayor frecuencia en todos losprogramas, tales como definir variables, asignar valores, mostrar resultados,realizar operaciones aritmeticas y de comparacion, anadir comentarios y es-cribir metodos. En la presente seccion se presentaran tanto las definiciones delos terminos antes mencionados como algunos ejemplos que ilustren la formaen como deberan definirse y/o utilizarse en Visual C#.

2.3.1. Identificadores, constantes y variables

Definicion 9. (Identificador) El concepto es analogo al de ”nombre”,son elementos textuales (tambien llamados sımbolos) que nombran entidadesdel lenguaje. Algunas de las entidades que un identificador puede denotar sonlas variables, las constantes, los tipos de datos, las etiquetas, las subrutinas(procedimientos y funciones) y los paquetes.

En muchos lenguajes algunas secuencias tienen la forma lexica de un iden-tificador pero son conocidos como palabras clave (o palabras reservadas).Lo habitual es que si un identificador se corresponde con una palabra clave oreservada, este ya no pueda utilizarse para referirse a otro tipo de entidadescomo variables o constantes.

Los lenguajes informaticos normalmente ponen restricciones en que ca-racteres pueden aparecer en un identificador. Por ejemplo, en las primerasversiones de C y C++, los identificadores estan restringidos para que seanuna secuencia de una o mas letras ASCII (ver tabla de codigos ASCII en

Page 32: MANUAL DE ASIGNATURA: PROGRAMACION´

24 CAPITULO 2. PROGRAMACION ESTRUCTURADA

el apendice A), dıgitos numericos que en ningun caso deben aparecer comoprimer caracter y barras bajas. Las versiones posteriores de estos lengua-jes, ası como otros muchos mas lenguajes modernos soportan casi todos loscaracteres Unicode en un identificador. Una restriccion comun es que noesta permitido el uso de espacios en blanco ni operadores del lenguaje.

La forma en como construir o crear un identificador valido se rige porciertas reglas basicas:

1. Un identificador puede tener cualquier nombre y emplear cualquiercaracter tanto en mayuscula como en minuscula del alfabeto, ejemplo:variable, perro, X, x, MiMamA, mimama, miMama (todos los identi-ficadores antes listados son diferentes a pesar de significar en algunoscasos lo mismo, para la computadora el hecho de que dos identifica-dores sean diferentes por al menos una letra mayuscula o minusculaes suficiente para ser considerados como distintos. Los caracteres nodeben acentuarse.

2. Un identificador no puede contener espacios, en lugar de ellos puedeutilizarse el guion bajo, ejemplo: valor numerico.

3. Los identificadores pueden contener numeros, sin embargo, por reglaun identificador no debe comenzar con un caracter numerico. Ejemplosde identificadores validos son: var1, Var 1, total2 prom, entre otros..

Definicion 10. (Variable) Una variable representa un espacio de me-moria para almacenar un valor de un determinado tipo, valor que puede sermodificado a lo largo de la ejecucion del bloque donde la variable es accesible,tantas veces como se necesite (Ceballos (2008)).

Para declarar una variable debe indicarse el nombre de la misma y asociar-le un tipo de datos. Por ejemplo, el siguiente codigo declara cuatro variables:a de tipo double, b de tipo float y c y r de tipo int (mas adelante se espe-cificara en que consiste cada uno de los tipos de datos aquı mencionados):

Class CAritmetica{

pub l i c static void Main ( s t r i n g [ ] a rgs ){

double a ;f loat b ;int c , r ;

Page 33: MANUAL DE ASIGNATURA: PROGRAMACION´

2.3. SINTAXIS DEL LENGUAJE DE PROGRAMACION 25

}}

Por definicion una variable declarada dentro de un bloque, entendiendopor bloque el codigo encerrado entre los caracteres ’{’ y ’}’, es accesible solodentro de ese bloque.

Segun lo anterior, las variables a, b, c y r son accesibles solo desde elmetodo Main de la clase CAritmetica. En este caso se dice que las variablesson locales al bloque donde han sido declaradas. Una variable local se creacuando se ejecuta el bloque donde se declara y se destruye cuando finaliza laejecucion de dicho bloque.

En C# las variables locales no son iniciadas por el compilador, por tanto,deben ser inicializadas, es decir, se les debe asignar un valor; de lo contrarioel compilador visualizara un mensaje de error en todas las sentencias quehagan referencia a esas variables.

Una caracterıstica importante en C# es que trata a las letras mayusculasy minusculas como caracteres diferentes. Por ejemplo las variables dato1 yDato1 son diferentes.

Definicion 11. (Constante) Una constante es una variable cuyo valores fijo, es decir, que no cambia. El valor de una constante puede asignarsecuando se declara la variable o posteriormente.

Las constantes son variables cuyo valor es siempre el mismo. La ventajaque proporcionan las constantes es que, en lugar de repetir un determinadovalor en distintas operaciones, se referencia a una variable. De modo quesi luego deseamos cambiar el valor “constante” solo debemos reescribir ladeclararacion de la constante con el nuevo valor. Lo anterior se puede hacercon una variable cualquiera, pero al ser de tipo constante, nos aseguramosde no poder modificarla por error en alguna seccion del programa.

La forma general en como se declaran constantes en C# consiste en losiguiente:

[public/private] const [TipoVariable][NombreVariable] = [valor];

1. Indicar si la constante va a ser definida como publica o privada. Si espublica (public) se podra tener acceso a ella en todo momento, si esdefinida como privada (private) se tendra acceso a ella unicamente atraves de los metodos u operaciones definidas.

Page 34: MANUAL DE ASIGNATURA: PROGRAMACION´

26 CAPITULO 2. PROGRAMACION ESTRUCTURADA

2. Emplear la palabra reservada const, lo cual indica que se trata de unaconstante.

3. Indica el tipo de datos de la constante.

4. Dar un nombre a la constante siguiendo las mismas reglas basicas quese utilizan para crear identificadores.

5. Emplear el sımbolo de igualdad (“=”) para realizar la asignacion de unvalor a la constante. El valor que se asigne debera ser del mismo tipode datos que se haya indicado para la constante.

6. Finalmente, se termina la declaracion de la constante con punto y coma(“;”).

A continuacion se muestra un ejemplo en el que se declaran 3 tipos deconstantes en C#, una constante publica de tipo doble llamada PI cuyo valorconstante se indica como 3,141516, otra constante privada de tipo enterallamada valor cuyo valor asignado es 10, y finalmente una tercer constantepublica de tipo caracter llamada c cuyo valor asignado es el caracter ′h′.Ademas, dentro del metodo Main se realiza la redefinicion de la constantePI para modificar su valor.

Class CAritmetica{

pub l i c const double PI = 3 .141516 ;p r i v a t e const int va lo r = 10 ;pub l i c const char c = ’h ’ ;pub l i c static void Main ( s t r i n g [ ] a rgs ){

const double PI = 3 . 1 4 1 6 ; \\Rede f i n i c i o n de constante PI}

}

2.3.2. Tipos de datos

El tipo de datos a asignar a una variable esta directamente relacionadocon el tipo de valor que se va a almacenar en dicha variable. Es posibledistinguir varios tipos de valores y estos se pueden clasificar en: tipos enteros(sbyte, short, int, long y char), tipos reales (float, double y decimal) yel tipo bool.

Page 35: MANUAL DE ASIGNATURA: PROGRAMACION´

2.3. SINTAXIS DEL LENGUAJE DE PROGRAMACION 27

Cada tipo de datos antes mencionado tiene un rango diferente de valorespositivos y negativos, excepto el bool que solo tiene valores: true y false.Por lo tanto, el tipo de datos que seleccione para declarar cada variable deun determinado programa dependera del rango y tipo de los valores que sevayan a almacenar: enteros, fraccionarios o booleanos.

A continuacion se presenta una descripcion breve de los tipos de datosmas utilizados durante la realizacion de un programa:

bool: Se utiliza para indicar si el resultado de la evaluacion de unaexpresion booleana es verdadero o falso.

sbyte: Permite declarar datos enteros comprendidos entre −128 y +127(un byte de longitud)3. Ejemplo de declaracion de una variable de tiposbyte: sbyte b = 0;

short: Permite declarar datos enteros comprendidos entre −32768 y+32767 (16 bits de longitud). Ejemplo: short i = 0, j = 0;

int: Declara datos enteros comprendidos entre −2147483648 y +2147483647(32 bits de longitud). Ejemplo: int k = -30;

long: Permite declarar datos enteros comprendidos entre los valores−9223372036854775808 y +9223372036854775807 (64 bits de longi-tud). Ejemplo: long l = 125000;

char: Es utilizado para declarar datos enteros en el rango 0 a 65535.Los valores 0 al 127 se corresponden con los caracteres ASCII del mismocodigo (ver el apendice A). El conjunto de caracteres ASCII conformauna parte pequena del conjunto de caracteres Unicode utilizado porC# para representar los caracteres. Unicode es un codigo de 16 bits(valores de 0 a 65535), esto es, cada caracter ocupa 2 bytes, con elunico proposito de internacionalizar el lenguaje.Ejemplo:char car = ’a’;

char car = (char)97; /* la ’a’ es el decimal 97*/

float: (32 bits de longitud) se utiliza para declarar un dato que puedecontener una parte decimal. Los datos de tipo float almacenan valores

3Un byte se define como un conjunto de 8 bits, independientemente de la plataforma.

Page 36: MANUAL DE ASIGNATURA: PROGRAMACION´

28 CAPITULO 2. PROGRAMACION ESTRUCTURADA

con una precision aproximada de siete dıgitos (precision simple).Ejemplo:float a = 3.14159F;

float b = 2.2e-5F; /* 2.2e-5 = 2.2 por 10 elevado a -5*/

float c = 2/3F; /* 0.6666667 */ Para especificar que una cons-tante es de tipo float, hay que anadir al final de su valor la letra ’f’ o’F’, de lo contrario sera considerada de tipo double.

double: (64 bits de longitud) se utiliza para declarar un dato que pue-de contener una parte decimal. Los datos de tipo double almacenanvalores con una precision aproximada de 15− 16 dıgitos (precision do-ble).Ejemplo:double a = 3.14159; /*una constante es double por omision*/

decimal: La palabra clave decimal denota un tipo de datos de 128 bits.Comparado con los tipos de punto flotante, el tipo decimal tiene unamayor precision y un intervalo mas reducido, lo que lo hace adecuadopara calculos financieros y monetarios. El intervalo aproximado y laprecision para el tipo decimal son de ±1,0 × 10−28 a ±7,9 × 1028 conpresicion de 28−29 dıgitos significativos. Ejemplo: decimal myMoney =

300.5m; Sin el sufijo m, el numero se trata como doble, lo cual generaun error del compilador.

En la figura 2.1 se muestra una tabla con los diferentes tipos de datos basicosde C#.

2.3.3. Expresiones y operadores

En C# un operador es un termino o un sımbolo que acepta como entradauna o mas expresiones, denominadas operandos, y devuelve un valor.

Las expresiones son el elemento basico y fundamental de cualquier lengua-je de programacion. Mediante el uso de operadores, las expresiones permitenque una operacion realice comparaciones simples, asignaciones e incluso ope-raciones muy complejas que necesitarıan millones de anos para completarse.

Las expresiones pueden utilizar operadores que, a su vez, utilizan otrasexpresiones como parametros o llamadas a metodos cuyos parametros son, asu vez, otras llamadas a metodos, de modo que pueden variar de simples amuy complejas.

Page 37: MANUAL DE ASIGNATURA: PROGRAMACION´

2.3. SINTAXIS DEL LENGUAJE DE PROGRAMACION 29

Figura 2.1: Resumen de los tipos de datos basicos que pueden emplearse enC#.

En esta seccion se tratara el uso de los operadores para realizar funcionesmatematicas, asignar valores a variables y realizar comparaciones.

Expresiones

Literales y nombres simplesLos dos tipos de expresiones mas simples son literales y nombres sim-ples. Un literal es un valor constante que no tiene ningun nombre. Porejemplo, en el codigo siguiente, 5 y ”Hello World”son valores literales:

int i = 5 ;s t r i n g s = ” Hel lo World” ;

En el ejemplo anterior, tanto i como s son nombres simples que identi-fican variables locales. Cuando esas variables se utilizan en una expre-sion, el valor de la variable se recupera y se utiliza para la expresion. Porejemplo, en el codigo siguiente, cuando se llama a DoWork, el metodorecibe el valor 5 de forma predeterminada y no es posible tener accesoa la variable var:

int var = 5 ;

Page 38: MANUAL DE ASIGNATURA: PROGRAMACION´

30 CAPITULO 2. PROGRAMACION ESTRUCTURADA

DoWork( var ) ;

Expresiones de invocacionEn el ejemplo de codigo siguiente, la llamada a DoWork es otro tipo deexpresion, denominada expresion de invocacion.

int var = 5 ;DoWork( var ) ;

Especıficamente, llamar a un metodo es una expresion de invocacionde metodo. Una invocacion de metodo requiere el nombre del metodo,ya sea un nombre como en el ejemplo anterior o el resultado de otraexpresion, seguido de parentesis y los parametros del metodo. Paraobtener mas informacion, vea Metodos (Guıa de programacion de C#).Las invocaciones de metodo se evaluan como el valor que devuelve elmetodo, si devuelve alguno. Los metodos que devuelven un valor nulono se pueden utilizar en lugar de un valor en una expresion.

Como usar los operadores

Las expresiones pueden escribirse usando variables: valores codificadosespecıficamente, llamados valores literales (numeros); y sımbolos llamadosoperadores. C# admite varios operadores, cada uno de los cuales realiza unaaccion diferente (ver figuras 2.2 y 2.3). Las variables o los valores literales queaparecen en una expresion se llaman operandos. Los operadores se aplican alos operandos y el resultado de la operacion es otro valor.

Los operadores que requieren un operando, como el operador de incre-mento (++) o new, se denominan operadores unarios. Los operadores querequieren dos operandos, como los operadores aritmeticos (+, -, *, /) se de-nominan operadores binarios. Un operador, el operador condicional (?:),utiliza tres operandos y es el unico operador terciario de C#.

Las siguientes expresiones contienen operadores unarios con un solooperando. El operador de incremento, ++, modifica el valor del operando y,incrementando su valor en uno.

y++; que es l o mismo que y = y + 1 ;A−−; que es l o mismo que A = A − 1 ;A+=B; que es l o mismo que A = A + B;A−=B; que es l o mismo que A = A − B;A/=B; que es l o mismo que A = A / B;A∗=B; que es l o mismo que A = A ∗ B;

Page 39: MANUAL DE ASIGNATURA: PROGRAMACION´

2.3. SINTAXIS DEL LENGUAJE DE PROGRAMACION 31

Figura 2.2: Operadores aritmeticos.

La instruccion de C# siguiente contiene dos operadores binarios, cadauno con dos operandos. El operador de asignacion, =, tiene el entero y yla expresion 2 + 3 como operandos. La propia expresion 2 + 3 contiene eloperador de suma y utiliza los valores enteros 2 y 3 como operandos:

y = 2 + 3 ;

Un operando puede ser una expresion valida de cualquier tamano, com-puesta por una cantidad cualquiera de otras operaciones.

Los operadores de una expresion se evaluan en un orden concreto conocidocomo prioridad de operadores o precedencia de operadores. La figura2.4 divide a los operadores en categorıas basadas en el tipo de operacion querealizan, en dicha figura las categorıas se muestran en orden de prioridad.En la figura 2.5, se presenta el orden de precedencia de los operadores mascomunmente usados.

Cuando dos operadores con la misma prioridad estan presentes en unaexpresion, se evaluan segun su asociatividad. Los operadores que son aso-ciativos por la izquierda se evaluan en orden de izquierda a derecha. Porejemplo, x∗y/z se evalua como (x∗y)/z. Los operadores que son asociativospor la derecha se evaluan en orden de derecha a izquierda. Los operadores deasignacion y el operador terciario (? :) son asociativos por la derecha. Todos

Page 40: MANUAL DE ASIGNATURA: PROGRAMACION´

32 CAPITULO 2. PROGRAMACION ESTRUCTURADA

Figura 2.3: Operadores de comparacion.

los otros operadores binarios son asociativos por la izquierda. Sin embargo,el estandar de C# no especifica cuando se ejecuta la parte “fija” de una ins-truccion de incremento en una expresion. Por ejemplo, el resultado del codigode ejemplo siguiente es 6:

int num1 = 5 ;num1++;System . Console . WriteLine (num1 ) ;

Sin embargo, el resultado del codigo del ejemplo siguiente es indefinido:

int num2 = 5 ;num2 = num2++; // not recommendedSystem . Console . WriteLine (num2 ) ;

Por consiguiente, no se recomienda el ultimo ejemplo. Los parentesis sepueden utilizar para envolver una expresion y hacer que esa expresion seaevaluada antes que cualquier otra. Por ejemplo, 2+3∗2 normalmente darıan8 como resultado. Esto es porque los operadores multiplicativos tienen prio-ridad sobre los operadores aditivos. Escribir la expresion (2 + 3) ∗ 2 da comoresultado 10, ya que esta indica al compilador de C# que el operador deadicion (+) se debe evaluar antes que el operador de multiplicacion (∗).Ademas de la lista de operadores presentados en las figuras 2.2 y 2.3, tenemosque tener en cuenta los siguientes puntos:

Si dos operadores se aplican al mismo operando, el operador con masprioridad se aplica primero.

Todos los operadores del mismo grupo tienen igual prioridad y asocia-tividad (se expresan de izquierda a derecha).

Page 41: MANUAL DE ASIGNATURA: PROGRAMACION´

2.4. PROCEDIMIENTOS Y FUNCIONES 33

Figura 2.4: Orden de precedencia o prioridad de operadores, indica por cate-gorıas basadas en el tipo de operacion a los distintos tipos de operadores quepueden ser utilizados en C#, ademas, las categorıas se muestran en orden deprioridad.

Figura 2.5: Precedencia de operadores.

Los parentesis tienen la maxima prioridad.

Se puede cambiar el comportamiento de los operadores con las estructurasy cargas personalizadas. Este proceso se denomina sobrecarga de opera-dores. Para obtener mas informacion, vea Operadores sobrecargables (Guıade programacion de C#).

2.4. Procedimientos y funciones

Una funcion es un fragmento de codigo que puede ser invocado y quepuede o no devolver un valor al codigo que lo invoco en un principio. Una

Page 42: MANUAL DE ASIGNATURA: PROGRAMACION´

34 CAPITULO 2. PROGRAMACION ESTRUCTURADA

funcion suele asociarse a fragmentos de codigo que devuelven informacion,mientras que un metodo o procedimiento no suele devolver informacion.

Procedimientos

Un procedimiento es un sub-programa o rutina al que se le asigna uncierto nombre y que realiza unas determinadas operaciones. La ventaja quetiene utilizar procedimientos es que su codigo se escribe una sola vez peropueden ser ejecutados desde tantos puntos del programa como se desee.

Un procedimiento puede recibir una serie de parametros que variaran sufuncionamiento. Los parametros a recibir (de que tipo es cada uno y paraque se utiliza) se determinan al escribir el procedimiento.

Dentro del codigo que determina el funcionamiento de un procedimientose pueden a su vez ejecutar otros procedimientos, incluso a sı mismo de formarecursiva.La sintaxis requerida para declarar un procedimiento se presenta a continua-cion:

[ pub l i c / p r i v a t e ] void NombreProcedimiento ( parametros de entrada )

En el siguiente ejemplo se define el procedimiento imprimir resultado,el cual recibe como parametros de entrada dos valores enteros (x y y). Elprocedimiento imprimir resultado suma los valores de las variables x y y,y muestra el resultado de la suma en pantalla.

pub l i c void impr imi r r e su l tado ( int x , int y){

int suma = 0 ;suma = x + y ;Console . WriteLine ( ”El r e s u l t a do es : {0}” , suma ) ;

}

Funciones

Una funcion es un procedimiento que, adicionalmente, devuelve un valorcomo resultado de su ejecucion.

La ventaja de las funciones es que pueden utilizarse en asignaciones, ex-presiones matematicas, entre otras aplicaciones.La sintaxis requerida para declarar una funcion se presenta a continuacion:

[ pub l i c / p r i v a t e ] t ipo da to NombreFuncion ( parametros de entrada )

Page 43: MANUAL DE ASIGNATURA: PROGRAMACION´

2.4. PROCEDIMIENTOS Y FUNCIONES 35

Ejemplo de declaracion de la funcion Maximo que recibe como entrada dosvariables enteras y regresa como resultado un valor entero dependiendo delresultado de sus comparaciones. Regresa el valor −1 en caso de que las dosvariables de entrada sean iguales (es decir, si no existe un valor maximo), oregresa el valor de la variable cuyo valor sea mayor respecto al otro. En elejemplo siguiente se muestra la forma en como se declara la funcion Maximo.

pub l i c int Maximo ( int x , int y){

int mayor ; // de f i n e una nueva v a r i a b l ei f ( x= =y) //comparacion , s i x es i g u a l a y

return −1;// regre sa −1 en caso de que x sea i g u a l a yelse //de l o con t rar io

i f (x>y) // r e v i s a s i x es mayor que yreturn x ; //en caso de cumpl ir se que x>y regre sa x

else //en otro casoreturn y ; // regre sa y , ya que y es mayor que x

}

En la primera parte de la declaracion de la funcion public int Maximo

(int x, int y):

public, es el nivel de acceso, indica que puede ser accedida desde cual-quier scrip, dentro o fuera del archivo donde se declaro.

int, es el valor que retornara la funcion (parametro de salida), en estecaso como es un numero el que tiene que retornar, pero no siempre esası, algunas veces, hay funciones que piden de argumento un string yretornan un bool u otro tipo de datos.

Maximo, es el nombre de la funcion.

(int x, int y) son los argumentos de la funcion (parametros de entra-da), los valores que necesita para operar, en este caso son dos, siemprese separan con una coma y se debe de definir el nombre y el tipo dedatos.

Y dentro de esta funcion se utilizan los argumentos que pide la funciony realiza las comparaciones necesarias para encontrar el valor maximo.

Ojo, que existen tres lıneas donde aparecen return4, pero solo uno se va apoder ejecutar dentro del codigo ya que solo un caso se efectua, si existieran

4La instruccion return es quien regresa un y solo un dato a la parte del programa que

Page 44: MANUAL DE ASIGNATURA: PROGRAMACION´

36 CAPITULO 2. PROGRAMACION ESTRUCTURADA

dos return que se ejecuten en el codigo darıa un error, ası como en el casode tener un solo return y que este nunca se ejecutara.

Las funciones pueden tener cuatro tipos de parametros:

Parametros de entrada: tienen valores que son enviados a la funcion,pero la funcion no puede cambiar esos valores.

Parametros de salida: no tienen valor cuando son enviados a la fun-cion pero la funcion puede darles un valor y enviar el valor de vueltaal invocador.

Parametros de referencia: introduce una referencia en otro valor.Tienen un valor de entrada para la funcion y ese valor puede ser cam-biado dentro de la funcion.

Parametros Params: definen un numero variable de argumentos enuna lista.

A continuacion se presenta un ejemplo en el cual se declara un proce-dimiento llamado EVENTO1 (el cual hace un llamado o invoca a la funcionsumar con los parametros de entrada 10 y 3,1416, almacena el resultado quela funcion sumar regresa en la variable resultado, e imprime el resultado enpantalla). Ademas, tambien se declara la funcion sumar, la cual consiste ensumar los valores de sus parametros de entrada y regresar el resultado alprocedimiento EVENTO1 que fue en este caso quien la invoco.

void EVENTO1 ( Object sender , EventArgs e ){

// l lamado de l a funcion sumar , e l r e s u l t ado se// guardara en l a v a r i a b l e r e s u l t adodouble r e s u l t a do = sumar (10 , 3 . 1 4 1 6 ) ;

RESULTADO. Text=r e su l t a do . ToString ( ) ;}

double sumar ( int a l f a , double beta ){

return a l f a + beta ;}

la este llamando o invocando, sin embargo es de considerar que return puede regresar undato, una variable o una expresion algebraica (no ecuacion o formula) como lo muestranlos siguientes ejemplos: a) return 3.1416; b) return area; c) return x+15/2;

Page 45: MANUAL DE ASIGNATURA: PROGRAMACION´

2.5. DIAGRAMAS DE FLUJO 37

Por ahora no entraremos en detalle en cuanto a la forma de como utilizarlos parametros por referencia ni los parametros params en las funciones oprocedimientos, ya que para ser comprendidos en su totalidad, es convenienteestudiar en primer lugar otros conceptos relacionados.

2.5. Diagramas de flujo

Un diagrama de flujo es una representacion grafica de un algoritmo oproceso. Se utiliza en disciplinas como la programacion, la economıa, los pro-cesos industriales y la psicologıa cognitiva. Estos diagramas utilizan sımboloscon significados bien definidos que representan los pasos del algoritmo, y re-presentan el flujo de ejecucion mediante flechas que conectan los puntos deinicio y de fin de proceso.

2.5.1. Caracterısticas comunes

Un diagrama de flujo siempre tiene un unico punto de inicio y un unicopunto de termino. Ademas, todo camino de ejecucion debe permitir llegardesde el inicio hasta el termino.Las siguientes son acciones previas a la realizacion del diagrama de flujo:

Identificar las ideas principales a ser incluidas en el diagrama de flujo.Deben estar presentes el dueno o responsable del proceso, los duenos oresponsables del proceso anterior y posterior y de otros procesos inter-relacionados, otras partes interesadas.

Definir que se espera obtener del diagrama de flujo.

Identificar quien lo empleara y como.

Establecer el nivel de detalle requerido.

Determinar los lımites del proceso a describir.

Los pasos a seguir para construir el diagrama de flujo son:

Establecer el alcance del proceso a describir. De esta manera quedara fi-jado el comienzo y el final del diagrama. Frecuentemente el comienzoes la salida del proceso previo y el final la entrada al proceso siguiente.

Page 46: MANUAL DE ASIGNATURA: PROGRAMACION´

38 CAPITULO 2. PROGRAMACION ESTRUCTURADA

Identificar y listar las principales actividades/subprocesos que estanincluidos en el proceso a describir y su orden cronologico.

Si el nivel de detalle definido incluye actividades menores, listarlas tam-bien.

Identificar y listar los puntos de decision.

Construir el diagrama respetando la secuencia cronologica y asignandolos correspondientes sımbolos.

Asignar un tıtulo al diagrama y verificar que este completo y describacon exactitud el proceso elegido.

Para la construccion de los diagramas de flujo se utilizan los siguientes sımbo-los (ver figura 2.6):

Ovalo o Elipse: Indica el inicio y termino del diagrama de flujo (abrey/o cierra el diagrama).

Rectangulo: Actividad o proceso (representa la ejecucion de una o masactividades o procedimientos).

Rombo: Decision (permite formular una pregunta o cuestion).

Cırculo: Conector (representa el enlace de actividades con otra dentrode un procedimiento).

Flecha: Direccion del flujo del proceso (indica hacia donde fluye el pro-ceso en cada momento).

Las reglas basicas para construir diagramas de flujo son:

1. Todos los sımbolos han de estar conectados.

2. A un sımbolo de proceso pueden llegarle varias lıneas.

3. A un sımbolo de decision pueden llegarle varias lıneas, pero solo saldrandos.

4. A un sımbolo de inicio nunca le llegan lıneas.

5. De un sımbolo de fin no parte ninguna lınea.

Page 47: MANUAL DE ASIGNATURA: PROGRAMACION´

2.5. DIAGRAMAS DE FLUJO 39

Figura 2.6: Simbolos utilizados para construir diagramas de flujo.

En la figura 2.7 se muestra el esquema general de un diagrama de flujo.Ejemplos de diagramas de flujo

1. Hacer el diagrama de flujo para sumar dos numeros leıdos por tecladoy escribir el resultado (ver figura 2.8).

2. Modificar el ejemplo anterior pero para sumar 100 numeros leıdos porteclado (ver figura 2.9).

Vamos a ver paso a paso como func iona . Supongamos que l o sdatos son : 7 , −1, 8 , 5 , . . .( 1 ) I=100 ( numeros a sumar )(2 ) S=0 (suma , i n i c i a lmen t e 0)

Page 48: MANUAL DE ASIGNATURA: PROGRAMACION´

40 CAPITULO 2. PROGRAMACION ESTRUCTURADA

Figura 2.7: Esquema general de un diagrama de flujo. Contiene los elementosbasicos utilizados en la mayorıa de los algoritmos.

(3 ) Leer A. El primero es 7 , luego A=7(4 ) S=S+A=0+7=7(5 ) I=I−1=100−1=99(6 ) Es I=0 ? −> NO(3) Leer A, ahora A=−1(4 ) S=S+A=7−1=6(5 ) I=I−1=99−1=98(6 ) I=0? −> NO

Cuando I=0 habremos sumado l o s 100 numeros y pasare−mos a :

(7 ) E s c r i b i r S que s e r a l a suma

3. Hacer un diagrama de flujo que lea N numeros, calcule y escriba lasuma de los pares y el producto de los impares (ver figura 2.10).

Page 49: MANUAL DE ASIGNATURA: PROGRAMACION´

2.5. DIAGRAMAS DE FLUJO 41

Figura 2.8: Diagrama de flujo para sumar dos numeros leıdos por teclado yescribir el resultado.

Page 50: MANUAL DE ASIGNATURA: PROGRAMACION´

42 CAPITULO 2. PROGRAMACION ESTRUCTURADA

Figura 2.9: Diagrama de flujo para sumar 100 numeros leıdos por teclado.En I contamos los numeros que quedan por sumar; en S calculamos la suma;A se emplea para leer temporalmente cada numero.

Page 51: MANUAL DE ASIGNATURA: PROGRAMACION´

2.5. DIAGRAMAS DE FLUJO 43

Figura 2.10: Diagrama de flujo que permite leer N numeros (valor definidopor el usuario), calcular y escribir la suma de los valores pares (SP) y elproducto de los valores impares (PI).

Page 52: MANUAL DE ASIGNATURA: PROGRAMACION´

44 CAPITULO 2. PROGRAMACION ESTRUCTURADA

Page 53: MANUAL DE ASIGNATURA: PROGRAMACION´

Capıtulo 3

Elementos basicos de unlenguaje de programacion

Competencias a desarrollar:

Aplicar las estructuras de control para el desarrollo de programas queresuelvan problemas del area de ingenierıa en alimentos.

Distinguir las diferentes proposiciones de seleccion segun el lenguaje deprogramacion, tales como: if-then, if-then-else, if anidados, if aritmeti-co, switch-case.

Reconocer y aplicar las proposiciones de ciclos relacionadas con el len-guaje de programacion bajo estudio.

Resolver problemas planteados por el facilitador, donde se aplique elconcepto de estructuras de control.

Disenar algoritmos que empleen estructuras de control.

Definir y declarar tipos de arreglos dependiendo del problema.

Resolver problemas mediante la programacion donde se aplique el con-cepto de arreglos y estructuras de control.

Comprender el concepto de anidacion en programacion.

Emplear la anidacion para resolver problemas diversos.

45

Page 54: MANUAL DE ASIGNATURA: PROGRAMACION´

46 CAPITULO 3. ELEMENTOS BASICOS DE C#

3.1. Elementos basicos de C#

Debido a que la mayorıa de lenguajes de programacion estan basados enla programacion estructurada, los lenguajes de programacion cuentan conciertos tipos de instrucciones basicas que permiten desarrollar programas dediferentes tipos y complejidades. Estos elementos basicos facilitan al pro-gramador la tarea de programar, ya que son herramientas con las que va acontar, tales que podran ser empleadas en diversos tipos de aplicaciones.

En el presente capıtulo se se van a presentar tanto las estructuras decontrol, tipos de ciclos que pueden emplearse, anidaciones y arreglos, todosde forma general, es decir, sin “casarnos” totalmente con un lenguaje deprogramacion en particular. La idea de presentar los conceptos del capıtulode forma general pretende brindar al estudiante un panorama general delfuncionamiento y aplicacion de los conceptos que se presentan a lo largo delcapıtulo.

Esta de mas mencionar la importancia de lo que aquı va a estudiarse, yaque son las bases que todo excelente programador debe dominar. Para mayorinformacion consultar Ferguson et al. (2003).

3.2. Estructuras de control

La mayorıa de los lenguajes de programacion convencionales tienen dosestructuras de control condicionales para la seleccion, la estructura de controlif (seleccion simple y binaria) y la estructura de control switch (seleccionmultiple).

3.2.1. Estructura if

La sentencia if elige entre varias alternativas con base en el valor de unao mas expresiones booleanas1.

i f (< expr e s boo l >){

1) Conjunto de i n s t r u c c i o n e s a e j e cu t a r s i l a expr e s i onbooleana es verdadera .

}else

1Una expresion booleana es aquella que arroja como resultado una de dos posiblescosas, 1 (cuando la expresion es verdadera) o 0 (cuando la expresion es falsa).

Page 55: MANUAL DE ASIGNATURA: PROGRAMACION´

3.2. ESTRUCTURAS DE CONTROL 47

{2) Conjunto de i n s t r u c c i o n e s a e j e cu t a r s i l a expr e s i on

booleana es f a l s a .}

Donde <condicion> es una expresion que utiliza uno o mas operadores decomparacion presentados en la figura 2.3 del capıtulo 2. La instruccion if

utiliza el valor o valores booleanos resultantes de la(s) expresion(es) boolea-na(s) y con ello(s) determina hacia donde continua el flujo de datos, es decir,si la expresion fue verdadera se ejecuta el conjunto de instrucciones 1), si fuefalsa el conjunto de instrucciones 2). El ejemplo anterior se lee de la siguien-te manera “Si la condicion es verdadera, entonces ejecutar el conjunto deinstrucciones 1), de lo contrario, ejecutar el conjunto de instrucciones 2)”.

En algunos casos la instruccion if puede no tener considerado el casonegativo de la condicion (else) y quedar como en el ejemplo siguiente:

i f (< condic ion >){

Conjunto de i n s t r u c c i o n e s a e j e cu t a r s i l a cond i c i on esverdadera .

}

Es importante mencionar que en el caso en el que solo siga una senten-cia o instruccion al if, no es necesario incluir las llaves, esta regla aplicaunicamente cuando lo siguen mas de una instruccion o sentencia.

Los programas a menudo realizan una serie de pruebas de las que solo unasera verdadera o falsa (true o false). Como ejemplo, considerese un programapara escribir en pantalla un mensaje diferente correspondiente a un numeroque representa una calificacion numerica aprobatoria (mayor o igual a 7) oreprobatoria (menor que 7), utilizando una sentencia if, el programa quedacomo:

i f ( c a l i f i c a c i o n >= 7){

Imprimir ”Aprobado”}else

Imprimir ”Reprobado”

Para mandar a imprimir en pantalla empleando C# en modo consolautilizar alguno de los siguientes comandos, para mayor informacion ver laseccion 4.1.4:

System . Console . Write ( ”Texto a imprimir ” ) ; //Imprime t e x t o y de ja// e l puntero en l a misma l i n e a

Page 56: MANUAL DE ASIGNATURA: PROGRAMACION´

48 CAPITULO 3. ELEMENTOS BASICOS DE C#

System . Console . WriteLine ( ”Texto a imprimir ” ) ; //Imprime t e x t o y// deja e l puntero en l a s i g u i e n t e// l i n e a

//Imprime e l conten ido de dos v a r i a b l e s v1 y v2System . Console . WriteLine ( ” var1 = {0} , var = {1}” , v1 , v2 ) ;

3.2.2. Estructura switch

Aunque la sentencia if es muy potente, en ocasiones su escritura puederesultar tediosa, sobre todo en casos en los que el programa presenta variaselecciones despues de revisar una expresion: seleccion multiple o multialterna-tiva. En situaciones donde el valor de una expresion determina que sentenciasseran ejecutadas es mejor utilizar una sentencia switch en lugar de una if.Por ejemplo, la sentencia switch:

switch ( operador ) {case + :

r e s u l t a do = A + B;break ;

case − :r e s u l t a do = A − B;break ;

case ∗ :r e s u l t a do = A ∗ B;break ;

case / :r e s u l t a do = A / B;break ;

default :Imprimir ”Operador i nva l i d o ” ;

}

Tiene el mismo efecto que la siguiente sentencia if:

i f ( operador = = +)r e s u l t a do = A + B;

else i f ( operador = = −)r e s u l t a do = A − B;

else i f ( operador = = ∗)r e s u l t a do = A ∗ B;

else i f ( operador = = /)r e s u l t a do = A / B;

else

Imprimir ”Operador i nva l i d o ” ;

Page 57: MANUAL DE ASIGNATURA: PROGRAMACION´

3.2. ESTRUCTURAS DE CONTROL 49

En este ejemplo se observa que el valor de la expresion operador (eneste caso solo una variable) determina que sentencias se van a ejecutar. Estaexpresion recibe el nombre de selector de la estructura selectiva multiple.Tambien se puede apreciar la mayor simplicidad de la primera sentencia.

La palabra reservada break permite que el flujo de programa se detengajusto despues de la ejecucion de la sentencia anterior a ese break, impidiendoque se ejecuten las sentencias correspondientes a las siguientes alternativasdel switch. Por tanto, debemos obligatoriamente acabar cada bloque de sen-tencias correspondiente a cada alternativa con una sentencia break.

Por otro lado, la alternativa default es opcional y engloba un conjuntode sentencias (que puede ser vacıo, contener una sola sentencia o varias) quese ejecutan en caso de que ninguna de las alternativas del switch tenga unvalor coincidente con el resultado de evaluar la expresion del selector. Lanotacion de la sentencia switch es:

switch(< expres ion >){

case <val1 >: I n s t r u c c i o n e s a e j e cu t a r en caso de que l a<expres ion> tome e l va l o r co r r e spond i entea l caso va l1break ;

case <val2 >: I n t r u c c i o n e s a e j e cu t a r cuando <expres ion> esi g ua l a va l2break ;

. . .case <valN>: I n t r u c c i o n e s a e j e cu t a r cuando <expres ion> es

i g ua l a valNbreak ;

default : I n s t r u c c i o n e s a e j e cu t a r cuando l a <expres ion> noco i n c i d e con ningun caso an t e r i o rbreak ;

}

Una sentencia switch contiene un selector (en el ejemplo, operador), cu-yo tipo debe ser int, char o enumerado. Cuando una sentencia switch seejecuta, el valor del selector se compara con las etiquetas case. Si algunade ellas concuerda con ese valor se ejecutara la correspondiente secuencia desentencias. Si queremos que varias alternativas tengan el mismo conjunto desentencias a ejecutar, podemos hacer como en el siguiente ejemplo:

switch ( s e l e c t o r ){

case 1 :case 2 : Imprimir ” Sa l ida para l o s ca so s 1 y 2” ;

break ;

Page 58: MANUAL DE ASIGNATURA: PROGRAMACION´

50 CAPITULO 3. ELEMENTOS BASICOS DE C#

case 3 : Imprimir ” Sa l ida para e l caso 3” ;break ;

default : Imprimir ” Sa l ida para l o s r e s t an t e s ca so s ” ;}

En este ejemplo, si el selector se evalua y su valor es 1 o 2, se ejecuta, enambos casos, la instruccion Imprimir "Salida para los casos 1 y 2";.En este caso particular puede apreciarse la utilidad de break a la hora dedetener el flujo del programa.

La sentencia switch puede incluir la opcion default para establecer lasecuencia de sentencias a ejecutar en el caso de que ninguna etiqueta con-cuerde con el valor de la expresion case. El tipo de esta expresion case y elde las etiquetas tiene que ser el mismo.

3.3. Tipos de ciclos

C# nos ofrece 3 esquemas de iteracion o ciclos diferentes:

while

do while

for

3.3.1. Estructura while

La sintaxis de la sentencia while viene definida por la siguiente notacion:

while (< expr e s boo l >){

Conjunto de i n s t r u c c i o n e s a e j e cu t a r mientras l a expr e s i onbooleana sea verdadera <s e cu enc i a s en t en c i a s >.

}

Lo mas importante a recordar de la sentencia while es que su condicion determinacion (<expres bool>) se comprueba cada vez antes de que el cuerpodel bucle (<secuencia sentencias>) sea ejecutado. El cuerpo se ejecutamientras se cumpla la condicion de control. Si la condicion es false (0),entonces el cuerpo no se ejecuta. Hay que hacer notar que, si la condiciones true (1) inicialmente, la sentencia while no terminara (bucle infinito) a

Page 59: MANUAL DE ASIGNATURA: PROGRAMACION´

3.3. TIPOS DE CICLOS 51

menos que en el cuerpo de la misma se modifique de alguna forma la condicionde control del bucle. Una sentencia while se ejecutara cero o mas veces.

Por ejemplo, si queremos leer una serie de enteros y encontrar su suma,parando cuando se lea un numero negativo, podemos hacer:

sum = 0 ;Leer i ;while ( i >= 0){

sum = sum + i ;l e e r i ;

}

3.3.2. Estructura do/while

Su sintaxis viene dada por:

do{

<s e cu enc i a s en t en c i a s >

} while(< expres ion boo leana >);

Al igual que en la sentencia while, en esta sentencia el cuerpo del buclese ejecuta mientras que sea verdad la expresion booleana que constituye lacondicion de control. Ademas, esta condicion se comprueba cada vez tras laejecucion del cuerpo, no antes, como en el while. El cuerpo de una sentenciado/while siempre se ejecuta al menos una vez. Cuando esto pueda ocurrires mas conveniente su uso que la sentencia while. Por ejemplo, en lugar deescribir:

Imprimir ” Introduzca un numero ent r e 1 y 10” ;// Equ iva l en t e a Console . WriteLine (” Int roduzca un numero en t re 1 y// 10”) ; //en C#

Leer numero ; // numero = Int32 . Parse ( Console . ReadLine ( ) ) ;

while ( ! ( ( 1 <= numero ) && (numero <= 10 ) ) ){

Imprimir ” Introduzca un numero ent r e 1 y 10” ;Leer numero ;

}

Podemos hacer:

do {

Page 60: MANUAL DE ASIGNATURA: PROGRAMACION´

52 CAPITULO 3. ELEMENTOS BASICOS DE C#

Console . WriteLine ( ” Introduzca un numero ent r e 1 y 10” ) ;numero = Int32 . Parse ( Console . ReadLine ( ) ) ;

}while (!((1<=numero ) && (numero <= 1 0 ) ) ) ;

La primera ejecucion del bucle da a numero un valor, de manera que nonecesitamos inicializarlo antes del bucle.

3.3.3. Estructura for

Su sintaxis:

for (< exp r e s i n i >;<expr e s boo l >;<expr e s inc >){

<s e cu enc i a s en t en c i a s >

}

El bucle for contiene las cuatro partes siguientes:

Parte de inicializacion (<expres ini>), que inicializa las variables decontrol del bucle. Se pueden utilizar variables de control de bucle sim-ples o multiples. Lo mas normal es inicializar en este punto una solavariable cuyo valor varıa luego en la parte de incremento. Si se ini-cializan varias variables de control, cada inicializacion se separa de laanterior con una coma.

Parte de iteracion (<expres bool>), que contiene una expresion logicaque hace que el bucle realice las iteraciones de las sentencias, mientrasque a expresion sea verdadera.

Parte de incremento (<expres inc>), que modifica la variable o varia-bles de control de bucle. Si se modifican varias variables de control,cada operacion se separa de la anterior por una coma.

Sentencias (<secuencia sentencias>), acciones o sentencias que seejecutaran por cada iteracion del bucle.

Puede verse claramente la equivalencia entre una sentencia for y unwhile:

for ( v=va lo r1 ; v<=va lo r2 ; v=v+paso ) v = va lo r1 ;{ while ( v <= va lo r2 )

// s en t en c i a s {} // s en t en c i a s

v = v + paso ;}

Page 61: MANUAL DE ASIGNATURA: PROGRAMACION´

3.3. TIPOS DE CICLOS 53

Ejemplo de un bucle for con varias variables de control:

for ( v1=valor1 , v2=va lo r2 ; v1+v2<=100; v1++, v2++){

// s en t en c i a s}

Conviene tener en cuenta algunas consideraciones:

Debemos asegurarnos que la expresion de inicializacion del bucle y laexpresion de incremento haran que la condicion del bucle se conviertaen falsa en algun momento.

Si el cuerpo de un bucle (secuencia de sentencias) modifica los valores decualquiera de las variables implicadas en ese bucle, entonces el numerode repeticiones se puede modificar. Ejemplo:

int l im i t e = 1 ;int i ;for ( i =0; i<=l im i t e ; i++){

Console . WriteLine ( i ) ;l im i t e++;

}

Producira una secuencia infinita de enteros. No es una buena practicade programacion modificar el valor de la variable de control, por lo queevitaremos hacerlo.

3.3.4. Ejemplo

Para terminar esta seccion veamos un programa ejemplo en el que apare-cen algunas de las estructuras vistas anteriormente. El programa encuentrael primer numero perfecto mayor que 28, que es 496 (un numero perfecto esaquel para el que la suma de todos sus divisores es igual al valor de dichonumero).

/∗−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−∗//∗ Autor : ∗//∗ Fecha : Version : 1 .0 ∗//∗−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−∗//∗ Programa Ejemplo para e l c a l c u l o de l primer numero pe r f e c t o ∗//∗ mayor que 28 ∗//∗−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−∗/#include <iostream>

Page 62: MANUAL DE ASIGNATURA: PROGRAMACION´

54 CAPITULO 3. ELEMENTOS BASICOS DE C#

#include <c s td l i b >

us ing namespace s td ;int main ( ){

bool encontrado ;unsigned int intento , cont , suma ;encontrado = f a l s e ;i n t ento = 29 ;while ( ! encontrado ) // Hasta que encontremos e l numero{

suma = 1 ;for ( cont = 2 ; cont<i n t ento ; cont++){

i f ( ! ( i n t ento %cont ) ) // Si es un d i v i s o r{

suma = suma + cont ;}

}i f ( suma == intento ){

encontrado = true ;}else

{i n t ento = intento + 1 ;

}}Console . WriteLine ( ”Numero pe r f e c t o mayor que 28={0}” , in tento ) ;return 0 ;

}

Aunque existe otra forma mas eficiente de resolver este problema, el pro-grama anterior nos da una vision de como se pueden utilizar conjuntamentelas distintas estructuras de control vistas en esta seccion. Conviene hacerhincapie principalmente en que los anidamientos de estructuras tienen queser correctos, es decir, que una estructura anidada dentro de otra lo debeestar totalmente.

3.3.5. Ejercicios estructuras de control

1. Hacer un programa que lea un numero entero y escriba en pantalla suvalor absoluto.

2. Una empresa maneja codigos numericos con las siguientes caracterısti-

Page 63: MANUAL DE ASIGNATURA: PROGRAMACION´

3.3. TIPOS DE CICLOS 55

cas:

Cada codigo consta de cuatro dıgitos.

El primero representa a una provincia.

El segundo el tipo de operacion.

Los dos ultimos el numero de la operacion.

3. Escriba un programa que lea de teclado un numero de cuatro dıgitos,y posteriormente imprima en pantalla la siguiente informacion.PROVINCIA &TIPO DE OPERACION &NUMERO DE OPERACION &&En caso de que el numero no tenga exactamente cuatro dıgitos, enlugar del mensaje anterior, habra que imprimir en pantalla el siguientemensaje de error:ERROR: CODIGO INVALIDO.

4. Una companıa de gas calcula su factura trimestral tomando la lecturaactual del contador y la del trimestre anterior y cobrando 35 centimosde euro por unidad por las primeras 40 unidades y 25 centimos de europor unidad por el resto. Desarrolle un programa que reciba las doslecturas del contador de un cliente y produzca una factura detallada.

5. El recibo de la electricidad se elabora de la siguiente forma:

90 centimos de euro de gastos fijos.

50 centimos/Kw para los primeros 100 Kw.

35 centimos/Kw para los siguientes 150 Kw.

25 centimos/Kw para el resto.

Elabore un programa que lea de teclado los dos ultimos valores delcontador, y calcule e imprima en pantalla el importe total a pagar.

6. Escriba un programa que lea cuatro numeros enteros y escriba en pan-talla el mayor de ellos. Sugerencia: acumule en una variable temporaluno de ellos y compare con los demas uno a uno.

7. Codifique un programa que se comporte como una calculadora simple.Para ello debera tener las siguientes caracterısticas:

Page 64: MANUAL DE ASIGNATURA: PROGRAMACION´

56 CAPITULO 3. ELEMENTOS BASICOS DE C#

Solo efectuara operaciones con dos operandos.

Operaciones permitidas: (+,-,*,/).

Se trabajara con operandos enteros.

Pedira en primer lugar el operador, y a continuacion los dos ope-randos. Si el operador no se corresponde con alguno de los indica-dos se emitira un mensaje de error.

Ejemplo:Operacion : *

Operando 1 : 24

Operando 2 : 3

Resultado : 72

Operacion : *

8. Escriba un programa que resuelva completamente una ecuacion de se-gundo grado, tanto si tiene raıces reales como imaginarias. Los coefi-cientes se leeran de teclado.

Ejemplo:Primer coeficiente : 1

Segundo coeficiente : 0

Tercer coeficiente : 1

SOLUCIONES : 0+i, 0-i

9. Escriba un programa que lea un numero y escriba el dıa de la semanacorrespondiente o un mensaje de aviso si el numero no correspondea ningun dıa. Hagalo primero usando la sentencia switch y despuesusando sentencias if. e

10. Escriba un programa que lea un numero N de teclado y a continuacionimprima en pantalla:

Su factorial.

La suma de los N primeros terminos de la serie armonica (1+1/2+...+1/N).

Los n primeros terminos de la sucesion de Fibonacci.

Page 65: MANUAL DE ASIGNATURA: PROGRAMACION´

3.3. TIPOS DE CICLOS 57

Utilice una estructura repetitiva distinta para cada caso. ¿Cual es masapropiada?

11. Dado un numero entero que representa una determinada cantidad dedinero, escriba un programa que lea dicho numero del teclado y lodesglose para saber cuantos billetes de 500, 200, 100, 50, 20, 10 y 5euros se necesitan.

12. Escriba un programa que lea un numero N e imprima una piramide denumeros con N filas como en la siguiente figura: 1121123211234321

13. Calcule e imprima en pantalla los N primeros numeros primos, siendoN un numero que se introduce por teclado. Posteriormente, modifiqueel programa para que muestre todos los numeros primos que hay entre1 y N.

14. Calculador repetitivo. Modifique el programa ?? para que se repita unnumero indefinido de veces. El calculador dejara de trabajar cuando seintroduzca como codigo de operacion &. Ejemplo:Operacion : *

Operando 1 : 13

Operando 2 : 10

Resultado : 130

Operacion : u

ERROR!!!!

Operacion : +

Operando 1 : 12

Operando 2 : 3

Resultado : 15

Operacion : &

FIN DEL PROGRAMA.

15. Escriba un programa que lea un numero de teclado y despues le de alusuario la oportunidad de acertarlo en un numero maximo de intentos.Supondremos que el usuario no sabe cual es el numero que se ha escrito.

Page 66: MANUAL DE ASIGNATURA: PROGRAMACION´

58 CAPITULO 3. ELEMENTOS BASICOS DE C#

16. Haga un programa que calcule la potencia de un numero entero elevadoa un numero natural solo en base a sumas. Sugerencia: recuerde que elproducto se puede hacer en base a sumas.

17. Escribir un programa que lea una secuencia de letras y la escriba enpantalla codificada, sustituyendo cada letra por la letra que este tresposiciones despues.

18. Escriba un programa que determine si la cadena abc aparece en unasucesion de caracteres cuyo final viene dado por un punto.

3.3.6. Resumen

La mayorıa de los lenguajes de programacion disponen de varios mediospara controlar la ejecucion del codigo, dandole opciones para ejecutar unbloque de codigo mas de una vez, o ninguna vez, basandose en el resultadode una expresion booleana.

La instruccion if ejecuta el codigo una vez pero solo si la expresion boo-leana que la acompana devuelve true. La instruccion if puede incluir unaclausula else, que ejecuta un bloque de codigo si la expresion booleana de-vuelve false.

La instruccion switch ejecuta uno de los muchos bloques de codigo po-sibles. Cada bloque de codigo viene precedido de una lista de instruccionesde caso. C# evalua la expresion de la instruccion switch y a continuacionbusca una lista de instrucciones de caso cuyo valor coincida con la expresionevaluada en la instruccion switch.

Las instrucciones while, do y for continuan ejecutando el codigo mien-tras la expresion booleana indicada sea true. Cuando la expresion booleanadevuelve false, las instrucciones incrustadas dejan de ejecutarse. Las ins-trucciones while y for se pueden definir para que sus expresiones booleanasdevuelvan inmediatamente false, lo que quiere decir que sus instruccionesincrustadas nunca llegan a ejecutarse realmente. La instruccion do, sin em-bargo, siempre ejecuta sus instrucciones incrustadas al menos una vez.

3.4. Anidaciones

Antes de entrar a detalle en cuanto a lo que es la anidacion en programa-cion, comencemos con algunos de terminos que permitan comprender mejor

Page 67: MANUAL DE ASIGNATURA: PROGRAMACION´

3.4. ANIDACIONES 59

el concepto.La estructura de bloques es una propiedad comun de los lenguajes moder-nos. Un bloque en un lenguaje de programacion es cualquier construccionque pueda contener declaraciones. Por ejemplo, en Pascal los bloques sonel programa principal y las declaraciones de procedimiento/funcion. EN C,los bloques son las unidades de compilacion (es decir, los archivos de codi-go), las declaraciones de procedimiento/funcion y las sentencias compuestas(secuencia de sentencias encerradas entre llaves ...). De manera similar, lasdeclaraciones de clase de los lenguajes de programacion orientados a objetosson bloques (como en C#) (Louden (2004a)).

Por lo anterior hemos determinado la existencia de bloques en la mayorıade los lenguajes de programacion modernos, a continuacion presentamos al-gunos ejemplos de bloques (encerrados entre las llaves { y }, que indican elinicio y el final del bloque, respectivamente).

En el siguiente ejemplo presentamos tres bloques, uno corresponde al blo-que contenedor (que en este caso se refiere al metodo Main), otro correspondea la estructura de control if, la cual se encuentra anidada o contenida enel metodo principal Main, y el ultimo bloque corresponde al ciclo while,contenido (anidado) en el bloque de la estructura de control if.

void Main ( ){

int i =20;i f ( i >=20){

while (1 ){

Console . WriteLine ( ”Dentro de l c i c l o ” ) ;}

}}

Por lo tanto, podemos decir que el termino anidar corresponde a ponerun bloque completo dentro de otro bloque, es decir, incluir un nuevo bloquedesde que inicia hasta donde termina en otro bloque. Generalmente se utilizala anidacion con las instrucciones if, a lo cual se le conoce con el termino de“if ’s anidados”. Es importante mencionar que no existe definido un lımite encuanto a la cantidad de bloques anidados que puede tener un programa. Auncuando pueda ser simple el anidar bloques, pueden ocasionarse complicacio-nes al momento de depurar un programa con estas caracterısticas, es decir,cuando un programa tiene mas de cuatro niveles de anidacion (tanto para

Page 68: MANUAL DE ASIGNATURA: PROGRAMACION´

60 CAPITULO 3. ELEMENTOS BASICOS DE C#

instrucciones if como para ciclos). No es recomendable la sobre-utilizacionde la anidacion, en lugar de esto pueden utilizarse otras estructuras de con-trol que reduzcan lo mas posible la cantidad de niveles de anidacion en unprograma, como por ejemplo las instrucciones switch.

Como ejemplo siguiente se muestra un caso de “if’s anidados”, considereseun programa para escribir en pantalla un mensaje diferente correspondientea un numero que representa una calificacion numerica. En C#, utilizandosentencias if anidadas, quedarıa:

i f (Nota = = 10)Console . WriteLine ( ”Matr icu la de Honor” ) ;

else{i f (Nota >= 9)

Console . WriteLine ( ” Sob r e s a l i e n t e ” ) ;else{

i f (Nota >= 7)Console . WriteLine ( ”Notable ” ) ;

else{i f (Nota >= 5)

Console . WriteLine ( ”Aprobado” ) ;else

Console . WriteLine ( ”Suspenso” ) ;}

}}

Un lenguaje esta estructurado en bloques si permite la anidacion debloques dentro de otros bloques, y si el ambito 2 de declaraciones en un bloqueesta limitado a ese y otros bloques contenidos en el mismo, sujeto a la reglade anidacion mas proxima: dadas varias declaraciones diferentes para elmismo nombre de variable, la declaracion que se aplica a una referencia es launica en el bloque anidado mas proximo a la referencia.

Los ciclos son sentencias igualmente validas para aparecer dentro de otrasestructuras de control, ya sean sentencias condicionales u otros bucles. Cuan-do un bucle esta incluido en otro, se habla de bucles anidados. Note que unbucle, junto con su cuerpo, se puede considerar una unica sentencia. Porejemplo, si queremos escribir todas las posibles parejas de valores (i,j) conlos enteros 1,2,3,4,5, podemos escribir lo siguiente:

int main ( ){

2El trozo de codigo desde la declaracion hasta el final del bloque (la zona donde sepuede usar una variable) se conoce como el ambito de una variable (Cap. 3, GarridoCarrillo (2006)).

Page 69: MANUAL DE ASIGNATURA: PROGRAMACION´

3.5. ARREGLOS 61

int i , j ;for ( i =1; i <=5;++i )

for ( j =1; j<=5;++j )Console . WriteLine ( ”{0} ,{1}” , i , j ) ;

return 0 ;}

Donde aparece un bucle como la unica sentencia de otro bucle (note que noaparecen llaves). En este caso, para cada valor de i se itera 5 veces sobre j.Por lo tanto, en la salida obtendremos las parejas (1,1), (1,2), (1,3), ..., (5,5).

Note ademas que la variable del primer bucle es valida dentro del segundo.Es mas, podemos hacer que las iteraciones del bucle interior dependan delexterior. Por ejemplo, podemos escribir todas las parejas de valores (i, j) perocon la condicion j >= i. Se podrıa hacer:

int main ( ){

int i , j ;for ( i =1; i <=5;++i )

for ( j=i ; j<=5;++j )Console . WriteLine ( ”{0} ,{1}” , i , j ) ;

return 0 ;}

de forma que para i = 5 solo se escribe (5,5).

3.5. Arreglos

En problemas mas complejos, no solo los algoritmos se complican, sinoque los datos y sus relaciones tambien lo hacen. Los tipos de datos simplesque se vieron en los temas anteriores no son suficientes y es necesario recurrira estructuras mas complejas.

Por ejemplo, imagine que tienen que procesar miles de valores reales co-rrespondientes, por ejemplo, a la nota de un grupo de alumnos. Los vectoresy matrices (arrays en general) nos permiten manejar un grupo de datos dealgun tipo (por ejemplo, los tipos simples que hemos visto) como una unicaestructura, facilitando el uso de grandes cantidades de datos, con un accesosimple a cada uno de ellos.

A continuacion hablaremos sobre dos tipos basicos de arreglos, los arre-glos unidimensionales tambien conocidos como vectores y los arreglosmultidimensionales conocidos comunmente como matrices.

Page 70: MANUAL DE ASIGNATURA: PROGRAMACION´

62 CAPITULO 3. ELEMENTOS BASICOS DE C#

3.5.1. Arreglos unidimensionales

Los arreglos son estructuras de datos complejas (en el sentido de queno son atomicas) que agrupan datos de un mismo tipo en particular,llamado el tipo base del arreglo. El tipo base de un arreglo puede ser cual-quiera de los tipos basicos de C#, o incluso algunos tipos complejos comolas clases (Sandoval U. (0000)).

Un arreglo es tambien un ejemplo de un modelo. Un arreglo puede consi-derarse como ejemplo de una variable compuesta capaz de almacenar unoo mas datos al mismo tiempo.

La sintaxis del lenguaje permite referirse a cada uno de los elementos queconstituyen el arreglo empleando ındices. Esto es posible pues los elementosdel arreglo estan numerados en forma jerarquica y consecutiva, empezandoen 0 en cada dimension.

En la figura 3.1 se ilustra un ejemplo de un arreglo llamado numeros, cuyaposicion 0 almacena el valor 10, la posicion 1 el valor de 21, etc. Este arregloen total almacena n+1 elementos. El valor de n, depende de la memoria quepueda tener la computadora y el tipo de elementos que se almacenen en elarreglo.

Figura 3.1: Ejemplo de un arreglo. numeros corresponde al nombre del arre-glo, y posicion corresponde a la posicion de memoria en la que se puedealmacenar un valor del tipo del arreglo, en C# la posicion comienza en 0 ytermina hasta el tamano del arreglo menos 1. Tomada de Sandoval U. (0000).

Los arreglos al igual que el resto de las variables se identifican con unnombre. Al emplear ese nombre, se hace referencia a la estructura de datoscomo un todo, es decir, con todos sus elementos. El lenguaje interpreta dichonombre como un puntero. Cuando se utiliza el nombre del arreglo en formaindexada, es decir, combinado con ındices, se hace referencia a un elementoparticular, del tipo base, dentro de la estructura compleja.

Page 71: MANUAL DE ASIGNATURA: PROGRAMACION´

3.5. ARREGLOS 63

Nota: El lenguaje C# no controla la validez de los ındicesque se emplean para referenciar un arreglo. Esto quiere decirque es posible cometer errores graves y difıciles de detectar eneste sentido.

Los arreglos tambien conocidos como vectores en programacion, son ungrupo de uno o mas elementos de un tipo base que se almacena en posicionesconsecutivas de memoria. Para acceder a cada uno de los elementos se utilizaun unico nombre (nombre del vector) y un ındice que indica la posicion delelemento en el vector. En la figura 3.2 se presentan graficamente dos vectores,con nombres letras y datos, de tamano 7 (cada uno tiene 7 elementos), contipos base char e int.

Figura 3.2: Dos ejemplos de vectores. Tomada de Garrido Carrillo (2006)

Para referenciar cada uno de los elementos del vector se usa el operador [], escribiendo el nombre del vector, seguido del ındice entre corchetes. En C#,los ındices comienzan en cero, es decir, es un valor que va desde el cero hastael tamano menos uno. Por tanto, el formato para referenciar un elementosera:

<nombre de l vector> [< expres ion >]

donde expresion es un valor que va de cero al tamano menos uno. Cuan-do referenciamos un elemento concreto de un vector, realmente tenemos unobjeto del tipo base, y por tanto se pueden realizar las operaciones que yahemos estudiado anteriormente. Por ejemplo, es valido:

Page 72: MANUAL DE ASIGNATURA: PROGRAMACION´

64 CAPITULO 3. ELEMENTOS BASICOS DE C#

l e t r a s [2 ]= Console . ReadLine ( ) ; //Lee caracter , guarda en pos i c . 2l e t r a s [ 0 ] = to lower ( l e t r a s [ 0 ] ) ; //A minuscula e l primer carac t e ri = 5 ;datos [ i ] = datos [ i −1]+datos [ i −2] ; //En pos . 5 guarda suma de 3 ,4i f ( datos [0]>=0 && datos [0]<=6)// Si i n d i c e cor rec t o

datos [ datos [ 0 ] ] = 1 ; //Usa entero datos [ 0 ] como ind i c eelse

Console . WriteLine ( ”No es po s i b l e ” ) ;

3.5.1.1. Declaracion

Los arreglos, al igual que las demas variable deben declararse antes depoder utilizarlas, y cumplen con las mismas reglas de alcance y vida.

Los vectores son tambien conocidos como arreglos de una sola dimension.El formato de la declaracion de un vector en C# es el siguiente:

<t ipo base > [ ] <nombre de l vector >;

que de forma similar a los datos simples, provoca la creacion de un vectordel tamano indicado (una zona de memoria contigua, donde se crean tantoselementos de tipo base como se ha indicado).Observaciones:

El <tipo base> puede ser cualquiera de los tipos basicos del lenguaje,o incluso algunos complejos como estructuras.

El <nombre del vector> es el nombre que distinguira el arreglo.

Los corchetes [ ] son obligatorios y denotan que el nombre del vectordescrito, del tipo base indicado, es un arreglo (lista de elementos deltipo base especificado).

En esta declaracion NO se define el tamano que tendra el arreglo (aun-que se pueden determinar las dimensiones, lo que se vera mas adelante).

El tamano del arreglo se determina en una segunda declaracion, que puedeir en la siguiente lınea, como se muestra a continuacion:

<nombre de l vector> = new <t ipo base> [<NumElementos > ] ;

En esta declaracion, se dimensiona el arreglo con una cantidad determi-nada de elementos, todos correspondientes a tipo base.

Es posible hacer la declaracion del arreglo y su dimensionamiento en unamisma sentencia:

Page 73: MANUAL DE ASIGNATURA: PROGRAMACION´

3.5. ARREGLOS 65

<t i po base > [ ] <nombre de l vector > = new <t i po base> [<NumElementos > ] ;

Adicionalmente es factible declarar, dimensionar, e inicializar un arreglocon todos sus elementos, en una sola declaracion:

<t ipo base > [ ] <nombre de l vector> = { valor1 , va lor2 , . . . , valorN } ;

Esta ultima declaracion implıcitamente dimensiona el arreglo para almacenarlos N elementos descritos, por lo que no se requiere dimensionarlo aparte.

Supongamos que se quiere crear un arreglo de cinco numeros enteros yque el valor de cada elemento sea distinto del que nos ofrecen por defecto.Es posible escribir instrucciones individuales para inicializar los valores delarreglo:

int [ ] Array ;Array = new int [ 5 ] ;Array [ 0 ] = 0 ;Array [ 1 ] = 1 ;Array [ 2 ] = −2;Array [ 3 ] = 3 ;Array [ 4 ] = −4;

Lo anterior es recomendable cuando ya se conocen de antemano los valorescon los que se quiere inicializar el vector, de igual forma es recomendableel especificar los valores en una lista separada por comas y encerrada entrellaves (como en el ejemplo anterior).

Los vectores presentados anteriormente en la figura 3.2 se pueden crearcomo sigue:

char [ ] l e t r a s = new char [ 7 ] ;int [ ] datos = new int [ 7 ] ;

Por ejemplo, supongamos que deseamos leer 100 datos reales desde la en-trada estandar, y que se escriban en orden inverso al introducido. La solucionpodrıa ser:

int Main ( ){

double [ ] v = new double [ 1 0 0 ] ;for ( int i =0; i <100; ++i )

v [ i ] = double . Parse ( Console . ReadLine ( ) ) ;for ( int i =99; i >=0; −− i )

Console . WriteLine (v [ i ] ) ;}

Page 74: MANUAL DE ASIGNATURA: PROGRAMACION´

66 CAPITULO 3. ELEMENTOS BASICOS DE C#

Es interesante que se fije en los bucles, donde nos aseguramos que loselementos leıdos van desde el ındice cero al 99 (en el primer bucle) y alcontrario (en el segundo).

Para aprender mas respecto a vectores consultar el capıtulo 5 del libroGarrido Carrillo (2006).

3.5.2. Arreglos multidimensionales

Un arreglo multidimensional tambien conocido como matriz, es un grupode uno o mas elementos de un tipo base, que se organizan en una estructurabidimensional. Para acceder a cada uno de los elementos, se utiliza un uniconombre (nombre de la matriz), y dos ındices, que indican la posicion delelemento en la matriz. En la figura 3.3 se presentan graficamente dos matrices,con nombres letras y datos, de tamanos 7 × 3 (21 elementos) y 4 × 3 (12elementos), con tipos base char e int.

Figura 3.3: Dos ejemplos graficos de matrices. Tomada de Garrido Carrillo(2006).

Para referenciar cada uno de los elementos de la matriz, se usa el operador[,], escribiendo el nombre de la matriz, seguido del ındice que indica lafila y de un segundo ındice que indica la columna, ambos entre corchetes.Los ındices comienzan en cero, es decir, es un valor que va desde el cerohasta el numero de filas (o columnas) menos uno. Por tanto, el formato parareferenciar un elemento sera:

<nombre de l a matriz> [< expr e s i on f i l a >,<expr e s i on columna>]

Page 75: MANUAL DE ASIGNATURA: PROGRAMACION´

3.5. ARREGLOS 67

donde expresion fila y expresion columna son valores de ındices quecomienzan en cero.

Puede imaginarse una matriz multidimensional con dos dimensiones comoun trozo de papel de grafica. Sus dimensiones no solo se extienden haciafuera, sino tambien hacia abajo. En esta seccion estudiaremos los tipos mascomunes de matriz.

3.5.2.1. Declaracion

El formato de la declaracion de una matriz en C# es el siguiente:

<t i po base > [ , ] <nombre de l a matriz> = new <t i po base> [<ren>,<col > ] ;

donde ren y col corresponden al numero de renglones y columnas que sedesea tenga la matriz. La declaracion anterior define una matriz multidimen-sional de dos dimensiones. Usando el operador new para crear una nuevamatriz de este tipo es tan sencillo como especificar las dimensiones indivi-dualmente, separadas por comas en los corchetes.

A continuacion presentamos la declaracion de una matriz con una di-mension de 10 y otra dimension de 25. Puede imaginar una matriz de dosdimensiones como una hoja de calculo de Microsoft Excel con 10 filas y 25columnas. La tabla de la figura 3.4, ilustra el aspecto que podrıa tener estamatriz si sus datos estuvieran en una tabla.

int main ( ){

int [ , ] c a l i f i c s = new int [ 1 0 , 2 5 ] ;}

Figura 3.4: Representacion en una tabla de una matriz de dos dimensiones.

Ejemplo

Escribir codigo para crear la matriz correspondiente a la tabla presentadaen la figura 3.4 para almacenar las calificaciones de 25 alumnos, obtenidas

Page 76: MANUAL DE ASIGNATURA: PROGRAMACION´

68 CAPITULO 3. ELEMENTOS BASICOS DE C#

en 10 examenes diferentes, serıa algo ası:

int main ( ){

int [ , ] c a l i f i c s = new int [ 1 0 , 2 5 ] ;

for ( int i =0; i <10; i++){

for ( int j =0; i <25; j++){

Console . Write ( ” D i g i t e l a c a l i f i c de l alumno ” ) ;Console . Write ( ”{0} co r r e spond i en t e a l examen {1} : ” , j , i ) ;c a l i f i c s [ i , j ] = Int32 . Parse ( Console . ReadLine ( ) ) ;

}}

}

Si se quisiera leer en la variable valor la calificacion del quinto examendel alumno 16 serıa algo ası:

int va lo r ;va l o r = c a l i f i c s [ 5 , 1 6 ] ;

Otro ejemplo del uso de matrices se muestra a continuacion, correspon-diente a la declaracion y asignacion de valores de las matrices de la figura3.3:

int main ( ){

int i , j ;char [ , ] l e t r a s = new char [ 7 , 3 ] ; //Dec larac ion matr iz l e t r a sint [ , ] datos = new int [ 4 , 3 ] ; //Dec larac ion matr iz datos

//Mostrar l o s datos de l a matr iz l e t r a s empleando dos c i c l o sfor ( i =0; i <7; i++) //El in d i c e i ind ica e l reng lon{

for ( j =0; j <3; j++)//El in d i c e j ind ica l a columnaConsole . Write ( ”{0} ” , l e t r a s [ i , j ] ) ; //Imprime e l

// conten ido de cada uno de l o s e lementos//de l a matr iz l e t r a s

Console . WriteLine ( ”” ) ; //Imprime un en t er}

//Mostrar l o s datos de l a matr iz datosfor ( i =0; i <4; i++){

for ( j =0; j <3; j++)Console . Write ( ”{0} ” , datos [ i , j ] ) ;

Console . WriteLine ( ”” ) ;}

Page 77: MANUAL DE ASIGNATURA: PROGRAMACION´

3.5. ARREGLOS 69

}

3.5.2.2. Consideraciones especiales

En general, se recomienda que cuando trabaje con una matriz de dosdimensiones, considere la matriz como una tabla donde la primera columnacorresponda a la primera dimension, es decir, al numero de fila de la tabla yel segundo numero como el numero de columna.

Si lo que se desea es inicializar los elementos de una matriz multidimensio-nal cuando declare variables de matriz, es necesario colocar cada conjunto devalores para una sola dimension en una lista delimitada por comas rodeadapor llaves.

int [ , ] MiArray = {1 , 2 , 3} , {−1, 3 , −2};

Esta instruccion declara una matriz de dos dimensiones con dos filas y trescolumnas. Los valores enteros 1, 2 y 3 estan en la primera fila, y los valores-1, 3 y -2 estan en la segunda fila.

Las matrices de dos dimensiones con esta estructura se llaman matricesrectangulares. Estas matrices tienen la forma de una tabla, cada fila de latabla tiene el mismo numero de columnas.

C# permite definir matrices con mas de dos dimen-siones. Para ello basta con utilizar mas comas en la de-claracion de la matriz.

Puede definir una matriz de cuatro dimensiones con tipo long, por ejem-plo, con la siguiente definicion:

long [ , , , ] Matriz4D ;

Simplemente debe asegurarse de definir todas las dimensiones cuando useel operador new:

Matriz4D = new long [ 5 , 1 0 , 15 , 2 0 ] ;

El acceso a los elementos de la matriz se realiza de la misma manera. Noolvide especificar todos los elementos de la matriz.

Matriz4D [ 0 , 0 , 0 , 0 ] = 345673 ;

Para mayor informacion respecto a la declaracion, indexacion, almace-namiento y al acceso en matrices, revisar el Capıtulo 3 de Ferguson et al.(2003).

Page 78: MANUAL DE ASIGNATURA: PROGRAMACION´

70 CAPITULO 3. ELEMENTOS BASICOS DE C#

Page 79: MANUAL DE ASIGNATURA: PROGRAMACION´

Capıtulo 4

Funciones y recursividad

Competencias especıficas a desarrollar:

Conocer y comprender el uso de funciones en programacion para des-componer un problema en partes mas sencillas, con la finalidad de darsolucion a cada parte y simplificar el proceso de solucion del problema.

Desarrollar programas con funciones que se generen de la necesidad delestudiante.

Conocer y comprender el concepto de recursividad y la utilidad quepuede tener al resolver diversos tipos de problemas.

Desarrollar programas con los principales tipos de funciones y con re-cursividad.

4.1. Funciones o metodos

Las funciones tambien conocidas como metodos o procedimientos en pro-gramacion, son una coleccion de instrucciones que permiten realizar una tareaespecıfica. En C#, un metodo siempre pertenece a una clase1 y su definicion

1¿Que es una clase en programacion? Pongamos un ejemplo: piense en un molde parahacer flanes; el molde es la clase y los flanes, los objetos de la clase. Esto es, si disponemosde un molde de un litro para hacer flanes de vainilla (ingredientes: leche, vainilla, azucar,etc.), el molde agrupa las propiedades comunes a todos los flanes de vainilla, pero no todoslos flanes tienen por que tener la misma cantidad de cada ingrediente.

71

Page 80: MANUAL DE ASIGNATURA: PROGRAMACION´

72 CAPITULO 4. FUNCIONES Y RECURSIVIDAD

nunca puede contener la definicion de otro metodo; es decir, C# no permitemetodos anidados (Ceballos (2008)).

Definicion 12. (Metodo) Los metodos son bloques de instrucciones quedevuelven algun tipo de valor cuando se ejecutan. Pueden ser llamados me-diante el nombre y llamar a un metodo hace que las instrucciones del metodose ejecuten (Ferguson et al. (2003)).

Aunque C# permite poner todo el codigo en el metodo Main(), proba-blemente quiera disenar sus clases para definir mas de un metodo. El usode metodos mantiene el codigo legible porque las instrucciones se colocan enbloques mas pequenos, en lugar de en un gran bloque de codigo. Los metodostambien permiten tomar instrucciones que pueden ser ejecutadas varias vecesy colocarlas en un bloque de codigo que puede ser llamado todas las vecesque haga falta.

Antes de explicar a detalle lo que son las funciones o metodos, es indispen-sable hacer de su conocimiento los conceptos de clase y objeto, utiles cuandose escriben programas utilizando un lenguaje orientado a objetos como C#.Aquı no se definen objetos verdaderos, se definen clases de objetos, dondeuna clase se ve como una plantilla para multiples objetos con caracterısticassimilares.

Definicion 13. (Clase) Una clase equivale a la generalizacion de untipo especıfico de objetos, pero cada objeto que construyamos de esa clasetendra sus propios datos.

Definicion 14. (Objeto)Un objeto de una determinada clase se crea enel momento en que se invoca al operador new para dicha clase.

Un programa orientado a objetos se compone solamente de objetos.Cada uno de ellos es una entidad que tiene unas propiedades particulares,los atributos, y unas formas de operar sobre ellos, los metodos.

Cuando se ejecuta un programa orientado a objetos (POO), los objetosestan recibiendo, interpretando y respondiendo a mensajes de otros objetos.En la POO un mensaje esta asociado con un metodo, de tal forma que cuandoun objeto recibe un mensaje la respuesta a ese mensaje es ejecutar el metodoasociado.

Un metodo se escribe en una clase de objetos y determina como tiene queactuar el objeto cuando recibe el mensaje vinculado con ese metodo. A suvez, un metodo puede tambien enviar mensajes a otros objetos solicitando

Page 81: MANUAL DE ASIGNATURA: PROGRAMACION´

4.1. FUNCIONES O METODOS 73

una accion o informacion. Adicionalmente, los atributos definidos en la clasepermitiran almacenar informacion para dicho objeto.

Segun lo anterior, podemos decir que la ejecucion de un programa orien-tado a objetos realiza fundamentalmente tres cosas:

1. Crea los objetos necesarios.

2. Los mensajes enviados a unos y a otros objetos dan lugar a que seprocese internamente la informacion.

3. Finalmente, cuando los objetos no son necesarios, son borrados.

En esta seccion, se aprendera a crear funciones que devuelven datos y queno los devuelven. Aprendera a pasar parametros a los metodos y la mejormanera de estructurar un metodo para hacer sus aplicaciones modulares.

4.1.1. La estructura de un metodo

Como mınimo, un metodo esta compuesto de las siguientes partes.

Tipo devuelto.

Nombre del metodo.

Lista de parametros.

Cuerpo del metodo.

NOTA: Todos l o s metodos se en c i e r r an en una c l a s e en C#.Un metodo no puede e x i s t i r fue r a de una c l a s e .

4.1.1.1. Tipo devuelto

Un metodo comienza definiendo el tipo de datos que devolvera cuandose le llame. Por ejemplo, suponga que quiere escribir un metodo que restados numeros enteros y devuelve el resultado. En este caso, escribira el tipodevuelto como int.

Page 82: MANUAL DE ASIGNATURA: PROGRAMACION´

74 CAPITULO 4. FUNCIONES Y RECURSIVIDAD

4.1.1.2. Nombre del metodo

Todos los metodos deben tener un nombre. Un nombre de metodo es unidentificador y los nombres de metodo deben seguir las reglas de nomenclatu-ra de cualquier identificador. Recuerde que los identificadores deben empezarcon una letra mayuscula o minuscula o con un caracter subrayado. Los ca-racteres que siguen al primer caracter pueden ser una letra mayuscula ominuscula, un numero o un subrayado.

4.1.1.3. Lista de parametros

Se puede llamar a metodos con los parametros que se usan para pasarlos datos al metodo. En el ejemplo anterior, en el que un metodo resta dosnumeros enteros, se necesitarıa enviar al metodo los valores de los dos nume-ros enteros que se van a restar. La lista de variables recibe el nombre delista de parametros del metodo. La lista de parametros del metodo apareceentre parentesis y sigue al nombre del metodo. Cada parametro de la listade parametros esta separado por una coma e incluye el tipo del parametroseguido por su nombre.

Es posible definir metodos que no reciben ningun parametro. Si se quiereutilizar uno de estos metodos, basta con dejar vacıos los parentesis. Tambiense puede colocar la palabra clave void entre los parentesis para especificarque el metodo no acepta parametros.

4.1.1.4. Cuerpo del metodo

El cuerpo del metodo es el bloque de instrucciones que compone el codigodel metodo. El cuerpo del metodo esta entre llaves. La llave de apertura seincluye tras la lista de parametros del metodo y la llave de cierre se colocadetras de la ultima instruccion del cuerpo del metodo.

4.1.2. Forma general de un metodo

La definicion de un metodo consta de una cabecera y del cuerpo del meto-do encerrado entre llaves. La sintaxis para escribir un metodo es la siguiente:

<modi f i cador> <t i po r esu l tado> <nombre metodo> (< l i s t a de parametros >){

dec l a r a c i one s de v a r i a b l e s l o c a l e s ;s en t enc i a s ;[ return [ ( ] expr es i on [ ) ] ] ;

Page 83: MANUAL DE ASIGNATURA: PROGRAMACION´

4.1. FUNCIONES O METODOS 75

}

Las variables declaradas en el cuerpo del metodo son locales a dicho meto-do y por definicion son accesibles o utiles unicamente dentro del metodo.

Un modificador es una palabra clave que modifica el nivel de proteccionpredeterminado del metodo2. Para mayor informacion ir al capıtulo 5 deCeballos (2008).

El tipo de resultado especifica que tipo de expresion retorna el metodo.Este puede ser cualquier tipo primitivo o referenciado. Para indicar que nose devuelve nada, se utiliza la palabra reservada void. El resultado de unmetodo es devuelto por medio de la siguiente sentencia:

return [ ( ] expr e s i on [ ) ] ;

La sentencia return puede ser o no la ultima y puede aparecer mas deuna vez en el cuerpo del metodo. En el caso de que el metodo no retorne unvalor (void), se puede omitir o especificar simplemente return. Por ejemplo:

void E s c r i b i r ( ){

// . . .return ;

}

La lista de parametros de un metodo son las variables que reciben losvalores de los argumentos especificados cuando se invoca al mismo. Consisteen una lista de cero, uno o mas identificadores con sus tipos, separados porcomas. A continuacion se muestra un ejemplo:

pub l i c double Sumar (double x , double y ){

// . . .}

2Los tipos de modificadores son: private, public y protected. Cuando un miembrode una clase es declarado como privado (private) puede ser accedido unicamente porlos metodos de su clase. Un miembro de una clase declarado como publico (public) esaccesible desde cualquier metodo definido en su clase o en otra clase. Cuando un metodoes declarado como protegido (protected) se comporta exactamente igual que uno privadopara los metodos de cualquier otra clase, excepto para los metodos de sus subclases conindependencia del espacio de nombres al que pertenezcan, para las que se comporta comoun miembro publico.

Page 84: MANUAL DE ASIGNATURA: PROGRAMACION´

76 CAPITULO 4. FUNCIONES Y RECURSIVIDAD

4.1.2.1. Metodo Main

Todo programa C# tiene un metodo Main, y solo uno. Este metodo esel punto de entrada al programa y tambien el punto de salida. Su definiciones la que se muestra a continuacion:

pub l i c static void Main ( s t r i n g [ ] a rgs ){

//Cuerpo de l metodo}

Como se puede observar el metodo Main es publico (public), estatico(static), no devuelve nada (void) y tiene un argumento de tipo string quealmacenara los argumentos pasados en la lınea de comandos cuando se invocaal programa para su ejecucion.

El metodo Main puede tambien no ser public, devolver un int y puedeescribirse sin parametros, aunque por compatibilidad con otros lenguajes, enel presente manual emplearemos el formato expuesto.

4.1.3. Como llamar a un metodoPara llamar a un metodo, se escribe su nombre en el lugar donde deberıa

ejecutarse el codigo de ese metodo. Despues del nombre del metodo se escri-ben dos parentesis, como se muestra en el ejemplo siguiente. Como en todaslas instrucciones de C#, la instruccion de llamada al metodo debe terminarcon un punto y coma.

c l a s s l i s t i n g 1{

publ i c stat ic void Main( s t r i n g [ ] a rgs ){

l i s t i n g 1 MiObjeto ( ) ;MiObjeto = new l i s t i n g 1 ( ) ;MiObjeto . LlamarMetodo ( ) ;

}void LlamarMetodo ( ){

System . Console . WriteLine ( ”Hola desde LlamarMetodo ( ) ” ) ;}

}

NOTA: Necesita las instrucciones de Main() que crean un nue-vo objeto listing 1 antes de poder llamar a los metodos del objeto.

Si el metodo se define con una lista de parametros, sus valores debenser especificados en el momento de llamar al metodo. Debe especificar losparametros en el mismo orden en que son especificados en la lista de parame-tros del metodo, como se muestra a continuacion:

Page 85: MANUAL DE ASIGNATURA: PROGRAMACION´

4.1. FUNCIONES O METODOS 77

c l a s s l i s t i n g 1{

publ i c stat ic void Main ( s t r i n g [ ] a rgs ){

int MiEntero ;l i s t i n g 1 MiObjeto ( ) ;MiObjeto = new l i s t i n g 1 ( ) ;MiObjeto . LlamarMetodo ( 2 ) ;MiEntero = 3 ;MiObjeto . LlamarMetodo (MiEntero ) ;

}void LlamarMetodo ( int va lorEntero ){

System . Console . WriteLine ( va l orEntero ) ;}

}

4.1.4. Prototipos de funciones

Aunque es muy importante el que se sepa la forma en como crear clases deobjetos dependiendo de nuestras necesidades particulares, existe en C# unabiblioteca de clases predefinidas, la biblioteca .NET. Hay un espacio denombres que destaca por las clases de proposito general que incluye: System.

El espacio de nombres System contiene clases que se aplican al len-guaje mismo. Por ejemplo, estructuras que encapsulan los tipos primitivosde datos, la clase Console que proporciona los metodos para manipular laentrada/salida (E/S) estandar, la clase String para manipular cadenas decaracteres, una clase Math que proporciona los metodos correspondientes alas funciones matematicas de uso mas frecuente, etc.

La entrada/salida queda reforzada por las clases aportadas por el espaciode nombres System.IO para el manejo de archivos.

En esta seccion aprendera como leer y escribir informacion desde susaplicaciones, y a trabajar con las clases utilizadas mas frecuentemente.

4.1.4.1. Flujos de entrada

Dos metodos que tienen un especial interes porque permiten a un progra-ma leer datos de la entrada estandar son:

pub l i c static int Read ( )pub l i c static s t r i n g ReadLine ( )

El metodo Read simplemente lee caracteres individuales del flujo de en-trada estandar; concretamente lee el siguiente caracter disponible. Devuelve

Page 86: MANUAL DE ASIGNATURA: PROGRAMACION´

78 CAPITULO 4. FUNCIONES Y RECURSIVIDAD

un numero entero (int) correspondiente al codigo del caracter leıdo, o bienun valor negativo cuando en un intento de leer se alcanza el final del flujo(esto es, no hay mas datos).

Por ejemplo, el siguiente codigo lee un caracter del origen vinculado conel flujo In (entrada estandar):

char car ;ca r = (char ) System . Console . Read ( ) ;

El metodo ReadLine lee una lınea del flujo vinculado con la entradaestandar; concretamente lee la siguiente lınea disponible. Devuelve una refe-rencia a un objeto string que envuelve la lınea leıda, o bien un valor nullcuando no hay datos disponibles.

Una lınea esta definida como una secuencia de caracteres seguidos por’\r’, ’\n’ o bien por ’\r\n’. La cadena de caracteres devuelta no contiene elcaracter o caracteres de terminacion.

Por ejemplo, el siguiente codigo lee una lınea del origen vinculado con elflujo In (entrada estandar) y la visualiza en la pantalla:

us ing System ;

c l a s s LeerUnaCadena{

pub l i c static void Main ( s t r i n g [ ] a rgs ){

s t r i n g sdato ; // v a r i a b l e para almacenar una l i n e a de t e x t o

Console . Write ( ” Introduzca un texto : ” ) ;sdato = Console . ReadLine ( ) ; // l e e r una l i n e a de t e x t oConsole . WriteLine ( sdato ) ; // e s c r i b i r l a l i n e a de t e x t o

}}

Analicemos el metodo Main del programa anterior. Primeramente defineuna referencia, sdato, a un objeto String; esto permitira leer una cadena decaracteres. Despues lee una lınea de texto introducida a traves del teclado yla visualiza.

4.1.4.2. Flujos de salida

Dos metodos que tienen especial interes, porque permiten a un programaescribir datos en la salida estandar, son:

pub l i c static void Write ( )

Page 87: MANUAL DE ASIGNATURA: PROGRAMACION´

4.1. FUNCIONES O METODOS 79

pub l i c static void WriteLine ( )

Por ejemplo, el siguiente codigo (se presentan dos versiones) escribe unvalor n en el destino vinculado con el flujo Out (salida estandar) y situa elpunto de interseccion en el punto siguiente:

double n = 10 . 5 ;System . Console . WriteLine (n ) ; // e s c r i b e : 10.5System . Console . WriteLine ( ”Valor = ” + n ) ; // e s c r i b e : Valor = 10.5

Los metodos Write y WriteLine son esencialmente los mismos, ambosescriben su argumento en el flujo de salida. La unica diferencia entre elloses que WriteLine anade un caracter ’\n’ (avance al principio de la lıneasiguiente) al final de su salida, y Write no. En otras palabras las siguientessentencias son equivalentes:

System . Console . WriteLine ( ”El va lo r no puede s e r negat ivo \n” ) ;System . Console . WriteLine ( ”El va lo r no puede s e r negat ivo ” ) ;

4.1.5. Resumen de funciones

C# permite escribir metodos en sus clases de C#. Los metodos puedenayudar a dividir el codigo en partes faciles de entender y pueden brindar unlugar unico en el que almacenar codigo que puede ser llamado varias veces,es decir, codigo que puede ser reutilizado.

Las funciones pueden recibir parametros. Los parametros de entrada con-tienen valores que han sido pasados a los metodos, pero sus valores no puedencambiar. Los parametros de salida tienen valores que les son asignados por unmetodo y el valor asignado es visible para el elemento que hace la llamada.Los parametros de referencia contienen valores que pueden ser proporcio-nados dentro de la funcion y ademas, su valor puede ser modificado por elmetodo. Las matrices de parametros permiten escribir metodos que tomanun numero variable de argumentos.

C# tambien permite sobrecargar metodos. Los metodos sobrecargadostienen el mismo nombre pero diferentes listas de parametros. C# usa losparametros proporcionados en una llamada para determinar que metodo debeinvocarse cuando se ejecute el codigo.

Page 88: MANUAL DE ASIGNATURA: PROGRAMACION´

80 CAPITULO 4. FUNCIONES Y RECURSIVIDAD

4.2. Recursividad

Las funciones de C# pueden emplearse recursivamente; esto es, una fun-cion puede llamarse a sı misma ya sea directa o indirectamente. Considere laimpresion de un numero como una cadena de caracteres. Existen dos solu-ciones a este problema. Una es almacenar los dıgitos en un arreglo tal comose generan, y despues imprimirlos en orden inverso.

Definicion 15. (Funcion recursiva) Una funcion recursiva es una fun-cion que se llama a sı misma, ya sea de manera directa, o indirecta (a travesde otra funcion).3

La recursividad es un tema importante que usualmente se aborda encursos avanzados de ciencias de la computacion. En esta seccion se presentaun ejemplo sencillo sobre recursividad.

Primero consideraremos la recursividad de manera conceptual, luego, exa-minaremos dos programas que contienen funciones recursivas. Los metodospara solucionar problemas recursivos tienen un conjunto de elementos encomun, se llama a una funcion recursiva para resolver un problema. En reali-dad, la funcion solo sabe como resolver el(los) caso(s) mas sencillo(s), o loque se conoce como caso(s) base(s). Si a la funcion se le llama con el casobase, la funcion sencillamente devuelve el resultado. Si a la funcion se le lla-ma con un problema mas complicado, la funcion divide el problema en dospartes conceptuales, la parte que la funcion sabe como resolver y la parteque la funcion no sabe como resolver. Para hacer que la recursividad seafactible, la segunda parte debe replantear el problema original, pero debe seruna version ligeramente mas sencilla, o mas pequena, que la version originaldel problema. Este nuevo problema se parece al problema original, de ma-nera que se lanza (se llama) a una copia nueva de sı misma para trabajaren el problema mas pequeno; a esto se le denomina llamada recursiva otambien paso recursivo. A menudo, el paso recursivo incluye la palabrareservada return, debido a que su resultado se combinara con la parte delproblema que la funcion sabe como resolver para formar un resultado que setransmitira hacia la llamada original, posiblemente en el Main.

El paso recursivo se ejecuta mientras la llamada original a la funcion sigueabierta, es decir, que no ha terminado su ejecucion. El paso recursivo puede

3Generalmente la funcion Main no se utiliza como una funcion recursiva.

Page 89: MANUAL DE ASIGNATURA: PROGRAMACION´

4.2. RECURSIVIDAD 81

resultad en muchas mas de estas llamadas recursivas, conforme la funcioncontinua dividiendo cada nuevo subproblema en dos partes conceptuales conlas que se llama a la funcion. Para que la recursividad termine en algunmomento, cada vez que la funcion se llama a sı misma con una version delproblema ligeramente mas sencilla que el problema original, esta secuenciade problemas cada vez mas pequenos deben coincidir con el caso base. Enese punto, la funcion reconoce el caso base y devuelve el resultado a la copiaprevia de la funcion, y una secuencia de retornos consecutivos hacia arribahasta que la llamada original de la funcion devuelve el resultado final almain.

El resolver un problema empleando recursion no es trivial, comparado conel tipo de solucion de problemas comunes, es decir, secuenciales, que hastaahora se han presentado. Para ejemplificar estos conceptos, escribimos unprograma recursivo que realice un popular calculo matematico.

El factorial de un entero positivo n, escrito como n! (y pronunciado comon factorial), es el producto: n × (n − 1)× (n − 2) × . . .× 1, con 1! igual a 1,y 0! definido como 1. Por ejemplo, 5! es el producto 5× 4× 3× 2× 1, que esigual a 120.

El factorial de un entero, numero, mayor o igual que 0, se puede calcularde manera iterativa (no recursiva) mediante el uso de for de la siguientemanera:

Page 90: MANUAL DE ASIGNATURA: PROGRAMACION´

82 CAPITULO 4. FUNCIONES Y RECURSIVIDAD

f a c t o r i a l = 1 ;

for ( int conta = numero ; conta >= 1 ; conta−−)f a c t o r i a l ∗= conta ;

Se puede llegar a una definicion recursiva de la funcion factorial mediantela siguiente relacion: n × (n − 1).

Por ejemplo, 5! claramente es igual a 5 × 4!, como puede ver a continua-cion:5! = 5 × 4 × 3 × 2 × 15! = 5 × (4 × 3 × 2 × 1)5! = 5 × (4!)

La evaluacion de 5! procederıa como muestra la figura 4.1. La figura 4.1(a)muestra como se lleva a cabo la sucesion de llamadas recursivas hasta que seevalua 1! que es igual a 1, lo cual termina la recursividad. La figura 4.1(b)muestra los valores devueltos por cada llamada recursiva a su llamada origi-nal, hasta que se calcula y se devuelve el valor final.

Figura 4.1: Evaluacion recursiva de 5!.

//Funcion f a c t o r i a l r e cu r s i v ac l a s s f a c t o{

pub l i c int f a c t o r i a l ( int numero ){

int r e s u l t a do ;i f (numero = = 1)

return 1 ;else

{

Page 91: MANUAL DE ASIGNATURA: PROGRAMACION´

4.2. RECURSIVIDAD 83

r e s u l t a do = numero ∗ f a c t o r i a l ( numero−1);return r e s u l t a do ;

}}

}

pub l i c void Main ( s t r i n g [ ] a rgs ){

int va lo r ;f a c t o ob j e t oFa c t o r i a l = new fa c t o ( ) ;va l o r = ob j e t oFa c t o r i a l . f a c t o r i a l ( 5 ) ;Console . WriteLine ( ”El f a c t o r i a l de 5 es : ” + va lo r ) ;

}

La funcion factorial fue declarada para recibir un parametro entero detipo int y para devolver un resultado del mismo tipo (int), sin embargo,debe tenerse cuidado con esta funcion, ya que los valores del factorial inclusode numeros pequenos (de dos dıgitos) se eleva exponencialmente, por lo cualse recomienda elegir un tipo de datos mayor dado el inconveniente antesmencionado.

En el metodo factorial del codigo anterior, el criterio base se encuentraen la condicion if(numero == 1), ya que cuando esta condicion se cum-ple el llamado recursivo de numero − 1 llega a su fin, regresando los re-sultados correspondientes, con los cuales las funciones que fueron llamadas(que es solo una funcion llamada varias veces) pueden realizar el productonumero ∗ factorial(numero− 1) y una a una van regresando con la instruc-cion returnresultado el factorial del numero numero que recibieron comoparametro de entrada. Regresan dicho valor a la funcion que la invoco. Enel metodo del Main unicamente se declara un objeto de la clase facto parapoder utilizar su metodo de factorial. Al final se imprime en pantalla elresultado del factorial del numero 5.

Para mayor informacion consultar el Capıtulo 3 del libro Deitel et Deitel(2003).

Page 92: MANUAL DE ASIGNATURA: PROGRAMACION´

84 CAPITULO 4. FUNCIONES Y RECURSIVIDAD

Page 93: MANUAL DE ASIGNATURA: PROGRAMACION´

Capıtulo 5

Aplicaciones

Competencias a desarrollar:

Disenar programas para resolver problemas en la industria alimentaria.

Con las competencias adquiridas en los capıtulos anteriores, el estu-diante podra resolver problemas de transferencia de momento, transfe-rencia de calor, transferencia de masa; resolver problemas de procesode separacion por contacto en equilibrio y problemas de procesos deseparacion mecanico-fısicos. Nota: para adquirir esta competencia elestudiante debera conocer y comprender los temas antes mencionados,para posteriormente ser capaz de dar solucion a los mismos empleandola programacion.

En la industria de alimentos se deben conocer las propiedades fısicas delos alimentos que estan siendo transformados, ya que estas propiedades sonnecesarias para el calculo y evaluacion de los procesos, ası como para el disenode los equipos.

Dichas propiedades fısicas incluyen las propiedades de transferencia decalor y transferencia de momento, entre otras.

El ingeniero en alimentos debe conocer las propiedades termicas de losalimentos (k, Cp y α), para el diseno y simulacion de los equipos de trans-ferencia de calor, ası como, para el calculo y evaluacion de los procesos detransformacion, y las operaciones unitarias donde se manejan dichos alimen-tos.

Las tres propiedades termicas mencionadas son fuertemente dependien-tes del contenido de humedad, por lo que para ciertos propositos, pueden

85

Page 94: MANUAL DE ASIGNATURA: PROGRAMACION´

86 CAPITULO 5. APLICACIONES

ser estimadas a partir del contenido de humedad. Estas tambien tienen unadependencia directa de la temperatura y de la densidad del material. Enla determinacion de propiedades termicas se pueden utilizar metodologıassencillas.

Por otro lado en la industria se trabaja muy frecuentemente con materia-les que se encuentran en fase lıquida en todas o en algunas de las operacionesefectuadas sobre los mismos, tal es el caso de la concentracion, pasteuriza-cion, bombeo, formulacion, secado, calentamiento, enfriamiento; el diseno delos equipos y de los procesos involucra de una u otra forma las caracterısticasreologicas de dichos fluidos.

Para la determinacion de las propiedades reologicas de los lıquidos, quecon frecuencia muestran un comportamiento no newtoniano, se utilizan diver-sos tipos de aparatos, que en su mayorıa corresponden al tipo de viscosımetrorotatorio. Varios investigadores han propuesto el uso del viscosımetro de tu-bo como adecuado para la determinacion de las propiedades reologicas quedeben ser utilizadas con fines de diseno.

En el area de la industria alimentaria se tiene un area de aplicacion mas dela computacion, ya que es posible desarrollar programas computacionales quepermitan conocer una variedad de propiedades fısicas de los alimentos, ası co-mo una serie de ecuaciones empıricas para la evaluacion de algunas propieda-des. Dados los diversos procesos, parametros, variables, datos y propiedadesfısicas de los alimentos que estan siendo transformados, es posible no solo elobtener de forma automatica los valores requeridos, sino tambien, empleandolas herramientas adecuadas, simular procesos completos para que al propor-cionar datos base especıficos, se arrojen todos los datos deseados de formaautomatica sin necesidad de construir o adquirir maquinaria especializadapara realizar algunos de los procesos. Por lo tanto, si se emplean programascomputacionales con las caracterısticas antes mencionadas, un estudiante nodependera para su aprendizaje exclusivamente de las herramientas con lasque cuente en el laboratorio de la institucion, sino que podra simular algunosprocesos que no pueda realizar en laboratorio (o que sean muy laboriosos)con la intension de complementar y por tanto enrriquecer sus conocimientos.

En el artıculo Velez-Ruiz et Soriano-Morales (2003) los autores presen-tan un programa desarrollado en Visual C++ con las caracterısticas an-tes mencionadas. Dicho programa se divide en cuatro secciones: propiedadesde transferencia de momento (momentum transfer properties), propiedadestermicas (heat transfer properties), propiedades de transferencia de materia(mass transfer properties), y otras propiedades fısicas (empirical equations).

Page 95: MANUAL DE ASIGNATURA: PROGRAMACION´

5.1. INTRODUCCION PROPIEDADES FISICAS 87

En cada uno de los grupos antes listados, se pueden encontrar datos de laspropiedades ası como ecuaciones de tipo empırico que permiten su predic-cion. En el programa, dependiendo de la propiedad fısica que haya sido se-leccionada o especificada, se incluyen las propiedades para ciertos grupos dealimentos, tales como: aceites, carnicos, frutas, granos, hortalizas y lacteos,entre otros. Segun los resultados obtenidos en el artıculo, los autores conclu-yen que su programa es muy amigable, de facil operacion, ademas, entregainformacion variada de las propiedades de los alimentos, es facilmente trans-ferible, incluye conversiones de unidades y referencias a la literatura utilizadapara su desarrollo.

En el presente capıtulo abordaremos brevemente algunas de las propie-dades fısicas de los alimentos con ejemplos ilustrativos.

5.1. Introduccion a las propiedades fısicas en

la industria de alimentos

La importancia de las propiedades fısicas en la industria de alimentosha sido reconocida desde hace muchos anos, recientemente se ha visto lanecesidad de conocerlas, por lo que los estudios e investigaciones sobre laspropiedades de los alimentos ha aumentado considerablemente.

Definicion 16. (Propiedades fısicas de un material (1)) Se en-tiende por propiedades fısicas de un material, a aquellas caracterısticas quepueden ser medidas y observadas sin modificar su composicion o identidad.

Definicion 17. (Propiedades fısicas de un material (2)) Tambiense pueden definir como aquellas propiedades que son importantes en el disenode procesos y en la manufactura de alimentos.

En el ano de 1999 se realizo una revision y clasificacion de las propiedadesde los alimentos, y se establecieron cuatro grupos:

1. Fısicas y Fisicoquımicas.

2. Cineticas.

3. Sensoriales.

4. De la Salud.

Page 96: MANUAL DE ASIGNATURA: PROGRAMACION´

88 CAPITULO 5. APLICACIONES

Las propiedades fısicas de los alimentos, ya sea que se consideren comomateria prima, como ingredientes de una formulacion, o como producto ter-minado, son muy importantes para el desarrollo del producto, para el disenode equipo y/o para el calculo de un proceso. Dichas propiedades pueden sernecesarias durante la formulacion, el manejo, la transformacion, en las ope-raciones unitarias y/o el almacenamiento, y deben ser utilizadas para llevara cabo una manufactura adecuada o para un buen diseno (Velez-Ruiz etSoriano-Morales (2003)).

Entre las actividades de diseno y evaluacion de las operaciones unitariasde la ingenierıa de alimentos, se pueden mencionar algunas como: determina-cion del regimen de flujo de fluidos newtonianos y no newtonianos, por mediode la evaluacion del numero de Reynols, diseno de tuberıas para el transportede fluidos alimenticios, calculo de la potencia de bombeo en el transporte,agitacion y mezclado de alimentos con caracterısticas muy diversas, entreotras.

Por razones practicas, resulta conveniente el empleo de sistemas o mediosque ayuden a proporcionar los datos existentes y a facilitar los calculos delos valores de aquellas propiedades fısicas para las cuales existen modelosmatematicos; dichos sistemas son los llamados sistemas expertos, ya que conun programa computacional se emula la experiencia humana en la resolucionde problemas especıficos.

5.2. Sistemas expertos en ingenierıa de ali-

mentos

Un sistema experto es un programa computacional que permite a lacomputadora comportarse como un ente experto en un determinado cam-po de especialidad, el cual usualmente se realiza en dialogo con el usuario.

Un sistema experto esta compuesto por tres partes: una base de conoci-miento (en forma de datos y reglas u otras formas heurısticas), una memoriade trabajo (para almacenar la informacion) y una maquina de deduccion (queutiliza el dominio del conocimiento junto con la informacion adquirida) paradar una solucion experta. La aplicacion de sistemas expertos en la ingenierıade alimentos, esta teniendo mucho exito y popularidad.

Page 97: MANUAL DE ASIGNATURA: PROGRAMACION´

5.3. TRANSFERENCIA DE MOMENTO (ECUACION DE FLUJO) 89

5.3. Transferencia de momento (ecuacion de

flujo)

A continuacion describimos brevemente un ejemplo del uso de las propie-dades de transferencia de momento.

Se desea conocer el regimen de flujo en que se estan transportando dosfluidos alimenticios: una solucion de azucar al 30% y leche concentrada al42%, al pasar por una tuberıa de 3” a una velocidad de 1,5m/s.

Para la solucion de azucar: como se trata de un fluido newtoniano, laecuacion a aplicar es la siguiente:

Re =vDp

n(17)

En la que claramente, las propiedades fısicas que hacen falta son la densi-dad y la viscosidad. Ası que para una solucion 30 % y 25oC, por interpolacionse obtiene un valor n = 4,095 × 10−3Pa.s. Mientras que para la densidad setiene que p = 1118,35kg/m3.

Por lo tanto: Re = (1,5m/s)×(3,068×0,0254)×(1118,35kg/m3)(0,004095Pa.s)

= 31923, lo que indi-ca un regimen de flujo turbulento.

Para leche concentrada al 42 %: como se trata de un fluido con compor-tamiento no newtoniano, la ecuacion a aplicar es diferente y es la siguiente:

GRe =v2−nDnp

8n−1K

(

4n

1 + 3n

)n

(17)

En este caso, las propiedades fısicas que hacen falta son la densidad y laspropiedades reologicas (ındice de flujo y coeficiente de consistencia).

Para la leche concentrada al 42 % y 25oC, por aproximacion se obtieneque n = 0,89 y 0,069Pa.sn; y por otro lado, para la densidad, se obtiene porsemejanza p 1101kg/m3.

Resultando un GRe = 3159,3, obtenido de:

GRe =

(

1,5ms

)1,11

(0,07793m),89

(

1101 kgm3

)

(8)−11

(

0,069Ns0,89

m2

)

(

3,56

3,67

)

(17)

Para definir el regimen de flujo, es necesario conocer el llamado nume-ro de Reynolds generalizado crıtico, mismo que separa el flujo laminar del

Page 98: MANUAL DE ASIGNATURA: PROGRAMACION´

90 CAPITULO 5. APLICACIONES

turbulento. Para un fluido que sigue la Ley de Potencia el valor crıtico seobtiene de:

GRecritico =6464n

(1 + 3n)2

(

12+n

)((2+n)/(1+n))(17)

resultando un GRecritico = 2163,8, por lo que el flujo de la leche se consideracomo regimen turbulento.

5.4. Transferencia de calor

Se desea conocer el tiempo de congelacion de tres alimentos: piezas decarpa, queso Cheddar, y jugo de naranja, por medio de la ecuacion de Plank:

tcong =pλ

Tc − tinfinito

[

Pa′

h+

Ra′

k

]

(17)

Las carpas se consideran placas infinitas de 3cm de espesor y partiendodesde 21oC, van a ser congeladas, y almacenadas en un medio a -27oC (h =85W/m2K). El queso es esferico de 15 cm de diametros, desde 25 a 15oC (h =170W/m2K). Y el jugo (cilındrico en latas de 5 cm de diametro) bajara sutemperatura de 15 a -18oC, con un coeficiente convectivo de 120W/m2K.

En este modelo, P = 0,5 (para placa), 0,25 (para cilindro), y 0,167 (parala esfera). Ası que haciendo uso de los datos de la figura 5.1, y sustituyendoen la ecuacion 17, para el bacalao: tcong = 2695 s = 0,75h. Semejante para elqueso: tcong = (10371,464)(3,167 × 10−3) = 32844 s = 9,12h; y para el jugotcong = (18295,7)(3,862 × 10−4) = 7066 s = 1,963h.

Figura 5.1: Datos de Propiedades Fısicas.

Particularmente para estos ejemplos, teoricamente el pescado se conge-larıa en aproximadamente 45 min, el jugo en 2 h y el queso en 9 h; con baseen el contenido de solidos y de grasa.

Page 99: MANUAL DE ASIGNATURA: PROGRAMACION´

5.5. TRANSFERENCIA DE MASA (ECUACION DE FICKS) 91

5.5. Transferencia de masa (ecuacion de Fi-

cks)

Se desea estimar el tiempo de difusion (en condiciones de estabilidad) deuna cierta cantidad de agua (360 mL), la cual se encuentra dentro de un vaso(7.5 cm de diametro) a temperatura ambiente. Ası que la ecuacion de Fickpuede ser empleada:

J = −DH2OdC

dz(17)

El coeficiente de difusion de agua en aire obtenido de la base de conoci-mientos a 25oC y 1 atmosfera de presion, es de 2,6 × 10−5m2/s. La fuerzaimpulsora es la diferencia de presiones de vapor (Pvap = 0,033atm), conside-rando al vapor como gas ideal, dC = 1,3493 × 10−3kmol/m3.

Sustituyendo en la ecuacion 17: K = 3,5082× 10−8kmol/sm2, para dz =1m; y considerando el area del vaso, A = 4,4/18 × 10−3m2; ası J = 1,55 ×10−10kmol/s. Finalmente, considerando la masa de agua existente, el tiempode difusion = (0,02kmol)/1,55 × 10−10kmol/s = 1,29 × 108s.

5.6. Conclusiones

Las herramientas computacionales cada vez mas empleadas en la industriade alimentos, permiten proporcionar informacion sobre diferentes detallesque se les programen. En el presente capıtulo se hablo sobre las propiedadesfısicas de los alimentos, y los temas se abordaron con ejemplos. Las ecuacionesdesarrolladas en los ejemplos, pueden ser programadas en funciones distintas,las cuales reciban como parametros de entrada los datos requeridos por cadauna.

Page 100: MANUAL DE ASIGNATURA: PROGRAMACION´

92 CAPITULO 5. APLICACIONES

Page 101: MANUAL DE ASIGNATURA: PROGRAMACION´

Bibliografıa

Calderon G. (1995). Book 1 hardware. A bilingual introduction to personalcomputers. Bilingua Tec.

Ceballos F. J. (2008). Microsoft C#TM : lenguaje y aplicaciones. AlfaomegaRa-Ma.

Deitel H. M. et Deitel P. J. (2003). Como programar en C++. PearsonEducation.

Ferguson J., Patterson B., Beres J., Boutquin P., et Gupta M. (2003). Labiblia de C#. ANAYA Multimedia.

Garrido Carrillo A. (2006). Fundamentos de programacion en C++. Delta,Publicaciones Universitarias.

Gomez de Silva Garza A. et Ania Briseno I. J. (2008). Introduccion a lacomputacion. CENGAGE Learning.

Levine G. (2001). Computacion y programacion moderna. Perspectiva inte-gral de la informatica. Pearson Educacion de Mexico, S.A. de C.V.

Louden K. C. (2004a). Construccion de compiladores principios y practica.International Thomson Editores.

Louden K. C. (2004b). Lenguajes de programacion principios y practica.International Thomson Editores.

Martınez-Gil F. A. et Martın-Quetglas G. (2003). Introduccion a la progra-macion estructurada en C. Maite Simon.

Orozco Guzman M. A., Chavez Alatorre M. L., et Chavez Alatorre J. (2006).Informatica Uno. International Thomson Editores.

93

Page 102: MANUAL DE ASIGNATURA: PROGRAMACION´

94 BIBLIOGRAFIA

Quesada Ugalde M. (2004). Nuevas tecnologıas procedimientos basicos e ideasde aplicacion en educacion especial. EUNED Editorial Universidad Estatala Distancia.

Sandoval U. R. (0000). Capıtulo vii arreglos y enumeraciones en c#. EnIntroduccion a la programacion. pendiente buscar.

Tanenbaum A. S. (1993). Sistemas operativos modernos. Prentice-Hall His-panoamericana, S.A.

Velez-Ruiz J. F. et Soriano-Morales A. L. (2003). Evaluacion de propiedadesfısicas de alimentos utilizando un programa computacional. En ValderramaJ. O. editores, Informaion Tecnologica, volume 14, pp. 23–28. 82 edition.

Page 103: MANUAL DE ASIGNATURA: PROGRAMACION´

A. Codigo ASCII

ASCII del acronimo ingles de American Standard Code for InformationInterchange - Codigo Estandar Estadounidense para el Intercambio de Infor-macion, fue creado en 1963 por el Comite Estadounidense de Estandares. Elcodigo ASCII utiliza 7 bits para representar los caracteres, aunque inicial-mente empleaba un bit adicional (bit de paridad) que se usaba para detectarerrores en la transmision.

Casi todos los sistemas informaticos actuales utilizan el codigo ASCII ouna extension compatible para representar textos y para el control de dispo-sitivos que manejan texto como el teclado.

En las figuras 2 y 3, se muestra el codigo ASCII separado en tres partes:i) caracteres de control (del valor en decimal 0 − 31 y 127), ii) caracteresimprimibles (del valor en decimal 32−126), y iii) ASCII extendido (del valoren decimal 128 − 255). Ademas del valor en decimal (DEC), en la tablade codigos ASCII generalmente aparecen tambien el codigo equivalente enhexadecimal (HEX), el codigo en binario (BIN) y el sımbolo ASCII (el cualcorresponde en algunos casos a caracteres especiales y en otros a caracteresimprimibles.

¿Y en sı para que sirve el codigo ASCII? o ¿como es que la computadoralo utiliza?, para aclarar estas preguntas deben observarse detenidamente lastablas de las figuras 2 y 3, y enfocarse en primer lugar en las columnascorrespondientes a los sımbolos. En la tabla correspondiente a los caracteresde control se puede ver que sean lo que sean los codigos ASCII, permiten ala computadora el diferenciar entre un fin de texto (el cual es representadocon un valor en decimal DEC − 03 o con un hexadecimal HEX − 03h), uninicio de texto (DEC − 02 o HEX − 02h), un caracter nulo (DEC − 00o HEX − 00h) y muchas otras cuestiones de control que la computadorautiliza no solo en los lenguajes de programacion, sino tambien en los editoresde texto como Word, OpenOffice Writer, entre otras aplicaciones.

95

Page 104: MANUAL DE ASIGNATURA: PROGRAMACION´

96 A. CODIGO ASCII

En la tabla correspondiente a los caracteres imprimibles se observa en lacolumna de sımbolo a todos los caracteres que podemos escribir empleandoun teclado (de ahı que son caracteres imprimibles). Por ejemplo, del codigoen decimal del valor DEC−48 al valor DEC−57 se representa a los numerosenteros del 0 al 9, y si se quisiera escribir el numero 2354, la computadora lorepresentarıa con un codigo para cada caracter que se desea representar, porlo tanto quedarıa la cadena de la siguiente manera: i) empleando decimales50-51-53-52, y ii) empleando la representacion hexadecimal 32h-33h-35h-34h.

Por lo anterior, podemos dar respuesta a las dos preguntas antes plantea-das, i) ¿para que sirve el codigo ASCII?, para que la computadora representede alguna forma a los distintos caracteres tanto imprimibles como no impri-mibles (de control) que puede utilizar, y ii) ¿como es que la computadoralo utiliza?, la computadora utiliza el codigo ASCII indicando una correspon-dencia directa entre los codigos tanto en decimal, binario y/o hexadecimaly las distintas teclas que tiene un teclado. Por lo tanto, cuando presiona-mos alguna tecla del teclado, la computadora automaticamente “entiende” e“interpreta” la tecla presionada para realizar la accion que el usuario espera.

Page 105: MANUAL DE ASIGNATURA: PROGRAMACION´

97

Figura 2: El codigo ASCII (Codigo Estadounidense Estandar para el Inter-cambio de Informacion, por sus siglas en ingles American Standard Code forInformation Interchange). Caracteres ASCII de control y caracteres ASCIIimprimibles.

Page 106: MANUAL DE ASIGNATURA: PROGRAMACION´

98 A. CODIGO ASCII

Figura 3: ASCII extendido.

Page 107: MANUAL DE ASIGNATURA: PROGRAMACION´

B. Palabras clave de C#

Las palabras clave son palabras que tienen un significado especial en ellenguaje de programacion C#. Estas palabras han sido reservadas en C#y nos referimos a ellas como palabras reservadas. Cada palabra clave poseeen el lenguaje C# un significado especial y no pueden ser utilizadas comonombres de variables y/o constantes (ver figura 4).

Figura 4: Palabras reservadas de C#.

99