Documentos de Académico
Documentos de Profesional
Documentos de Cultura
.NET
Carlos Zepeda Chehaibar
Programación
.NET
ISBN 978-607-7270-11-9
Primera Edición
Coordinación Editorial:
Alejandro Flores Ledesma
Diseño Editorial:
César Carranza Contreras
Corrección de Estilo:
Jennifer P. Castillo Ascencio DERECHOS RESERVADOS © 2014 MMXIII por Grupo Educare, S. A. de C. V.
Esta es una obra protegida por las leyes internacionales de derechos de autor. Prohibida la
Ilustración de Portada: reproducción total o parcial de esta obra y/o los recursos que la acompañan, por cualquier
medio, sin autorización escrita de Grupo Educare, S. A. de C. V.
Marco Antonio Solís
Grupo Educare, el logotipo de Grupo Educare, el logotipo del Programa de Informática y
Ilustración de Interiores: Tecnología, son propiedad de Grupo Educare, S. A. de C. V.
Judith Lourdes Sierra Pérez El diseño editorial y contenidos gráficos son propiedad exclusiva de Grupo Educare, S.A.
de C.V.
Miriam Tatiana Zamora Gutiérrez
César Carranza Contreras Todos los nombres de empresas, productos, direcciones y nombres propios contenidos en esta obra, forman parte de
ejemplos ficticios, a menos que se indique lo contrario. Las citas, imágenes y videogramas utilizados en esta obra se
utilizan únicamente con fines didácticos y para la crítica e investigación científica o artística, por lo que el autor y Grupo
Editado por Grupo Educare, S.A. de C.V. Educare, S. A. de C. V. no asumen ninguna responsabilidad por el uso que se dé a esta información, ni infringen derecho
de marca alguno, en conformidad al Artículo 148 de la Ley Federal del Derecho de Autor.
Cerro de Mesontepec #83
Microsoft Office, MS DOS, MS Windows, Word, PowerPoint, Excel, FrontPage y Access y sus logotipos son marcas
Colonia Colinas del Cimatario comerciales de Microsoft Corporation. Microsoft y el logo de Microsoft Office son marcas registradas de Microsoft
Corporation en los Estados Unidos y/o en otros países. Microsoft no patrocina, endosa o aprueba esta obra. Flash,
Querétaro, Querétaro C.P. 76090 Illustrator, Fireworks, Freehand, Dreamweaver, Photoshop y sus logotipos son marcas registradas de Adobe Inc. Adobe
no patrocina o endosa esta obra.
Contenido
Programación
.NET
Propuesta Pedagógica I
Unidad 1 Lógica computacional 9
tema A Lógica computacional 10
Actividad 1-01 Secuencias lógicas 10
tema B Algoritmos 11
Actividad 1-02 Algoritmos 12
Prueba de escritorio 13
Actividad 1-03 Algoritmos 14
tema C Clasificación de algoritmos 16
Transcripción 16
Compilación y errores 16
Actividad 1-04 Identificando errores 17
tema D Variables 18
Actividad 1-05 Acerca de variables 18
Asignación de valores 19
Actividad 1-06 Asignación de variables 20
tema E Operadores 21
Actividad 1-07 Operadores 22
tema F Estructuras básicas 23
Primera estructura: Secuencia de acciones 23
Segunda estructura: Decisión de acción 23
Actividad 1-08 Escribiendo algoritmos 24
Tercera estructura: Ciclos de acciones 27
Actividad 1-09 Escribe algoritmos computacionales 28
tema G Diagramas de flujo 31
Actividad 1-10 Diagramas de flujo 33
Evaluación 01 36
Unidad 2 Pseudocódigo 37
tema A Pseudocódigo 38
tema B Diagramas de Nassi – Schneiderman (N-S) 39
Diagrama N-S de estructuras de decisión 40
Actividad 2-01 Diagramas N-S 41
tema C Pseudocódigos de la estructura Si-Entonces- Si no 44
Actividad 2-02 Decisiones simples 45
Contenido
Unidad 3 .NET 71
tema A Introducción 72
Entorno de desarrollo (IDE) 72
Lámina 3-01 Microsoft .NET 72
Video 3-01 Instalando Visual C# Express 2010 72
tema B Entorno de programación 73
Hola mundo 75
Lámina 3-02 Consola y Buffer de entrada 75
Video 3-02 Mi primera aplicación 75
Proyecto 3-01 Mi primera aplicación 75
tema C Introducción a la programación en C# 78
Lámina 3-03 Otros elementos del programa 78
Palabras reservadas 79
Literales 80
Variables 82
Contenido
Tipos de datos 83
Lámina 3-04 Otros tipos de variables 83
Video 3-03 Declaración de variables 85
tema D Operadores, constantes y enumeraciones 86
Operadores 86
Video 3-04 Operadores Unarios 86
Constantes 87
Lámina 3-05 Operadores 87
Video 3-05 Operadores Binarios 87
Lámina 3-06 Variales de sólo lectura 88
Enumeración 88
Lámina 3-07 Enumeraciones 89
Proyecto 3-02 Cálculo de sueldo 91
tema E Sentencias de control 93
Condicionales 93
Video 3-06 Condicional IF 93
Video 3-07 Instrucción Switch 94
Ciclos 94
Video 3-08 Ciclo While 95
Video 3-09 Ciclo For 95
Lámina 3-08 Sentencias de control 96
Uso De Break Y Continue 96
Proyecto 3-03 Sentencias de control 97
tema F Métodos, Arreglos y Colecciones 99
Métodos 99
Lámina 3-09 Métodos externos 100
Parámetros 101
Namespace 102
Lámina 3-10 Otros parámetros 102
Lámina 3-11 Importación de Namespace 103
Proyecto 3-04 Errores 104
Arreglos 105
Video 3-10 Arreglos 105
Declaración de arreglos 106
Funciones mas comunes con arreglos 107
Contenido
Material Impreso
Recursos Digitales
Los recursos digitales que acompañan al material impreso, contienen videos que
te ayudarán a comprender los conceptos y a poner en práctica las habilidades
adquiridas. Adicionalmente encontrarás los archivos que se requieren para realizar
las actividades, algunos documentos y aplicaciones útiles. No olvides que los
recursos digitales son parte integral del programa, por lo que es muy importante
que los conozcas y utilices en el curso.
Explicación Iconográfica
Actividad
Este icono nos indica un ejercicio que refuerza la parte teórica de
este material.
Proyecto
Este icono nos indica un ejercicio que refuerza de manera práctica.
Video
Es el material digital de los recursos del programa. La representación
en video de la parte teórica.
Lámina de apoyo
La lámina es un recurso del profesor, que sirve como refuerzo
dinámico e interactivo a un tema denso, que complementa la teoría
del material impreso.
Evaluación
Este icono indica un elemento fundamental del proceso educativo
que sirve para valorar el proceso de aprendizaje.
NOTA Nota
Las notas que verás dentro de tu texto, puntualizan la teoría o los
aspectos más importantes de un tema.
T IP Tip
Es una sugerencia que complementa un tema del material impreso,
dando un panorama más amplio al alumno sobre cómo ejecutar
una actividad de manera más sencilla y práctica.
Las propuestas didácticas son flexibles, adaptables a la forma personal de
trabajo del maestro y necesidades específicas de cada clase maximizando así
el empleo de los recursos disponibles.
Unidad 01 Algoritmos
Unidad 02 Pseudocódigo
Unidad 03 .NET
Unidad 04 Programación orientada a objetos
Programación .NET
Autor:
Carlos Zepeda Chehaibar
Programación
.NET
Primera estructura:
Secuencia de acciones
Segunda estructura: Manejar las estructuras
Estructuras básicas
Decisión de acción básicas de los algoritmos
Tercera Estructura: Ciclos
de acciones
Técnicas para representar Conocer las técnicas para
Diagramas de flujo
algoritmos representar algoritmos
II
Propuesta Didáctica
Menciona ejemplos de
Actividad 1-04 Identificando
errores de sintaxis y errores
errores
lógicos
Prepara un formato conb
información completa sobre Actividad 1-05 Variables
las variables y su asignación, Actividad 1-06 Asignación de
resolviendo una prueba de valores
escritorio.
Escribe una operación
algebráica, cambiando
Actividad 1-07 Operadores
valores a las variables que se
indican.
III
Programación
.NET
Resolver problemas
Matrices matemáticos utilizando
algoritmos
IV
Propuesta Didáctica
V
Programación
.NET
.NET Framwork
Entorno de ejecución Identificar la plataforma
Biblioteca de Clase Base .NET, también su kit
(BCL) de desarrollo .Net
Introducción Sistema de tipo común Framework, que le
(CTS) permitirán desarrollar
Especificación del aplicaciones simples o
lenguaje común (CLS) complejas.
Entorno de Desarrollo
(IDE)
Descarga e Instalación
Conocer el entorno de C#
Entorno de Programación Interface de usuario
y su instalación.
Condicionales
Operar las sentencias de
Sentencias de Control Ciclos
control.
Uso de Break y Continue
VI
Propuesta Didáctica
VII
Programación
.NET
Métodos
Parámetros
Namespace
Arreglos
Declaración
Conocer las definiciones
Funciones más comunes
Continúa Métodos, Arreglos y de método, arreglo y
con arreglos
Unidad 03 - .NET Colecciones colecciones, su uso e
Colecciones
importancia
Listas
Pilas
Colas
Realizar interfaces
graficas usando los
Interfaces de Usuario
Unidad 04 - Programación diferentes controles que
orientada a objetos proporciona C#
Conocer y manejar
Excepciones
excepciones en C#
Nombrar los
Streams
Archivos requerimientos para el
manejo de archivos en C#
VIII
Propuesta Didáctica
Desarrolla ampliamente la
Proyecto 3-05 Errores Video 3-09 Arreglos
aplicación de las matrices,
Proyecto 3-06 Arreglos Video 3-10 Pilas
arreglos y colecciones de
Proyecto 3-07 Colecciones Video 3-11 Colas
objetos.
Controla resultados
inesperados en sus
Proyecto 3-10 Excepciones
aplicaciones mediante
excepciones.
IX
Diseño Vectorial
Inkscape
Inventario de habilidades
Este inventario se emplea para medir las habilidades de los alumnos que inician
el curso. Esto no es una prueba, es un indicador que va del 1 al 5, dónde uno
establece poco o nulo conocimiento del tema por parte del alumno y cinco que
está completamente familiarizado con el mismo.
Habilidad 1 2 3 4 5
Desarrollo de algoritmos.
Realizar pruebas de escritorio a algoritmos.
Identificar variables.
Asignar variables.
Identificar constantes.
X
Utiliza los fundamentos de las
matemáticas para realizar, con
detalle, algoritmos y operaciones
aplicándolas por completo en
determinar funciones o para diseñar
programas computacionales.
Programación .NET
Autor:
Carlos Zepeda Chehaibar
Programación
.NET
La lógica es muy importante, ya que determina la manera en que se puede resolver un problema.
Es un nivel de abstracción sin el cual no es posible estructurar los pasos que generen lo que
esperamos obtener.
La computadora trabaja con una lógica especial, exacta y matemática. Aunque tal vez no te
hayas dado cuenta, todas las acciones que realizas en la computadora están haciendo uso de
esta lógica en la forma de procedimientos o secuencias de pasos que hay que realizar para
lograr lo que se quiere.
ACTIVIDAD
3. ¿Qué ocurre si con cualquiera de las formas, no sigues los pasos o los realizas en desorden?
12
Lógica computacional
tema B Algoritmos
¿Has pensado quién hizo los programas que conoces? y más aún ¿tienes idea de cómo los
hicieron? La computadora permite solucionar una gran cantidad de problemas. El primer paso
que debes dar para la solución de un problema es tener muy claro cuál es el problema a resolver,
en otras palabras, cuál es el objetivo. Parece una cosa muy obvia, pero la mayoría de las
personas que no pueden resolver un problema es porque no lo han identificado y comprendido.
Tener claro el objetivo te va a permitir saber hacia dónde vas y a dónde quieres llegar. Cuando
el objetivo es lo suficientemente claro podemos vislumbrar un camino lógico para llegar hasta
él. A ese camino lógico se le llama Algoritmo.
Una vez identificado el problema es necesario diseñar una solución. Una forma sencilla de
aproximarse a una solución, que después pueda implementarse en la computadora, es por
medio de un algoritmo. Un algoritmo es un conjunto de pasos que permiten alcanzar un objetivo.
Los pasos deben ser secuenciales y ordenados, es decir, deben ser ejecutados uno después de
otro, en un orden definido, teniendo un inicio y un fin. Ejemplo:
Objetivo. Tenemos como objetivo adquirir el paquete de Microsoft® Office® 2010. Queremos
solamente adquirirlo: no instalarlo, no usarlo. El objetivo solamente es adquirirlo.
Algoritmo. Salimos del lugar donde nos encontremos y nos dirigimos hacia una tienda
de software. Al llegar al lugar hay que solicitar el programa. Si lo tienen disponible, lo
compramos y si no lo tienen, nos dirigimos hacia otra tienda repitiendo el proceso.
13
Programación
.NET
ACTIVIDAD
1-02 Algoritmos
A continuación escribirás algunos algoritmos. No olvides ponerles un título e indicar claramente
el principio y el fin.
14
Lógica computacional
Existen problemas que pueden resultar tan complejos que podríamos requerir de cientos o
hasta miles de líneas para resolverlos. Además, sabemos que un problema se puede resolver
de varias maneras diferentes. El análisis de algoritmos busca que las soluciones sean lo más
sencillas posibles, aún para problemas muy complejos. La manera en que buscamos esta
solución óptima está fundamentada en la lógica. Es más, sin la lógica no podríamos decidir
entre cuál de dos soluciones es más sencilla, simplemente porque esta decisión requiere
también del pensamiento lógico.
De forma similar la computadora realiza internamente secuencias de pasos para realizar las
tareas que nos son útiles.
Prueba de escritorio
Todo algoritmo debe ser probado antes de ser ejecutado, para tener la certeza de que lograremos
el objetivo. La forma de probarlo es siguiendo cada uno de los pasos que indica el algoritmo. A
esto es a lo que llamaremos prueba de escritorio. En la prueba de escritorio, un algoritmo bien
hecho siempre debe funcionar.
¤¤ Ser preciso. Las actividades o pasos del algoritmo deben desarrollarse en orden
estricto, ya que el desarrollo de cada paso debe seguir un orden lógico.
¤¤ Ser definido. Esto quiere decir que siempre que se ejecute con los mismos datos,
el resultado será el mismo. No puede improvisar, inventar o adivinar la información
que necesita para poder realizar un proceso.
15
Programación
.NET
¤¤ Ser finito. Esto indica que el número de pasos de un algoritmo debe ser limitado,
es decir, los pasos a seguir deben de tener un fin.
NOTA
Al poner en marcha los pasos del algoritmo para
determinar si logrará o no el objetivo, tal vez tengas que
hacer algunas modificaciones hasta lograr el objetivo
esperado. El algoritmo debe ser lo suficientemente
detallado para que no exista duda alguna al ejecutarse.
ACTIVIDAD
1-03 Algoritmos
1. Desarrolla un algoritmo que te permita determinar si un número es par o impar.
Inicio
1. Ingresar número a evaluar
2. Si el residuo del número/2 = 0
es par
Si no
es impar
Fin
2. Pide a un compañero que realice a tu algoritmo tres pruebas de escritorio utilizando tres
diferentes números enteros. Utiliza este espacio para las pruebas.
a. número
60
número/2 = 30
residuo = 0
Es par
16
Lógica computacional
b. número
15
número/2 = 7
residuo = 1
Es impar
c. número
2
número/2 = 1
residuo = 0
Es par
Inicio
1. Ingresar número a evaluar
2. Si número < 0
Terminar algoritmo
3. Dividir el número por todos los números entre 1 y número/2
4. Si el número sólo es divisible por sí mismo y la unidad
Es primo
Si no
No es primo
Fin
4. Pide a un compañero que realice a tu algoritmo cinco pruebas de escritorio utilizando los
números 0, 4, 7, y 11. Utiliza este espacio para las pruebas.
Número = 0
el número es menor o igual a 0 no es primo
Número = 4
4/1 = 4 4/2 = 2 no es primo
Número = 7
7/1 = 7 7/2 = 3.5 7/3 = 2.33 es primo
Número = 11
11/1 = 11 11/4 = 2.75
11/2 = 5.5 11/5 = 2.2
11/3 = 3.66 es primo
17
Programación
.NET
¤¤ A lgoritmos informales
¤¤ Algoritmos computacionales
Los algoritmos informales son aquellos que no se realizan para una computadora, sino se
diseñan para ser ejecutados por el ser humano. Todos los días ejecutas algoritmos informales
en todas tus actividades: al prepararte para tus clases, al vestirte, al cocinar, al regresar a casa,
entre otros.
Los algoritmos computacionales son los que se crean para que una computadora sea quien
ejecute los pasos y obtener el resultado esperado. Se aprovecha la velocidad de procesamiento
del ordenador para darnos un resultado mucho más confiable.
Transcripción
Los algoritmos computacionales no pueden ser ejecutados directamente. La transcripción es el
proceso a través del cual convertimos un algoritmo en un listado de instrucciones entendibles
para la computadora. Estas instrucciones deben ajustarse a las reglas sintácticas de un lenguaje
de programación. Las reglas sintácticas de un lenguaje de programación son las restricciones
técnicas sobre las cuales está construido el lenguaje.
Compilación y errores
Una vez que has identificado el objetivo a cumplir, has realizado un algoritmo que te permita
obtener el resultado deseado y lo has transcrito en un lenguaje de programación, necesitas
hacer una compilación.
La compilación es el proceso mediante el cual la computadora revisa que el programa que has
escrito cumpla con las reglas sintácticas del lenguaje de programación que estés utilizando. El
compilador es el encargado de hacer esta revisión y te ayuda a detectar los errores de sintaxis
y de precaución.
18
Lógica computacional
Errores lógicos. Este tipo de errores no pueden ser detectados por el compilador. Ocurren
cuando el programa se compila perfectamente, no tiene errores de sintaxis, sin embargo no
hace lo que se supone que debería hacer. Por ejemplo, si escribo un programa para calcular
el área de un triángulo y utilizo la fórmula Área=(base*altura)/3, cometería un error lógico. El
compilador no detecta ningún error en la fórmula, el programa funciona, pero el resultado está
mal. Estos errores son los más difíciles de corregir y se pueden evitar si se diseña y analiza
correctamente el problema antes de comenzar a programar en la computadora. Unos minutos
de trabajo previo en papel, te pueden ahorrar muchas horas de trabajo en la computadora.
Estos errores los tenemos que detectar nosotros mismos al hacer las pruebas de escritorio, ya
que ahí es donde determinamos si el algoritmo logrará o no el objetivo esperado.
ACTIVIDAD
Escribir una instrucción “Si no” sin haber escrito antes la instrucción “Sí”
promedio = A+B/2
19
Programación
.NET
tema D Variables
En programación, una variable es un campo de memoria que almacena información, la cual
puede cambiar en cualquier momento.
ACTIVIDAD
Que puede cambiar (un valor, una propiedad, un atributo, entre otros).
Una literal de la cual se desconoce su valor o una literal que puede
cambiar su valor.
2. En la fórmula para calcular el área de un rectángulo (Área=base x altura) ¿cuáles son las
variables? ¿Cómo las puedes identificar?
Sí, las fórmulas son para casos generales. Así se pueden obtener los
valores correctos para cualquier caso específico que exista.
Para poder utilizar variables en un programa deberás especificar primero qué tipo de información
va a almacenar. A esto se le conoce como declaración de variables.
Existen diferentes tipos de datos que una variable puede almacenar, a continuación se describen:
Tipo entero. Una variable de tipo entero solamente puede almacenar valores numéricos sin
punto decimal, por lo tanto sus operaciones jamás van a generar valores decimales, ya que
operan con un juego de reglas llamado Aritmética Entera.
Tipo real. Ésta puede almacenar números que tienen punto decimal y en sus operaciones
puede generar decimales, ya que opera con un juego de reglas llamado Aritmética Real.
20
Lógica computacional
Tipo caracter. Una variable de tipo caracter puede almacenar valores equivalentes del código
ASCII (American Standar Code for Infomation Interchange). ASCII es un código internacional de
equivalencias internas en el sistema binario, por lo que una variable caracter puede almacenar
cualquier cadena de caracteres que hayan sido tecleados.
Asignación de valores
Para asignar un valor a una variable (cargar una variable), en la mayoría de los lenguajes de
programación se utiliza el signo = (igual a), que indica a la computadora que va a almacenar
el valor que se encuentre a la derecha del símbolo, dentro de la variable que se encuentre a la
izquierda. Por ejemplo:
Una variable sólo puede guardar un valor a la vez: si volviéramos a asignarle otro valor a la
variable A, ésta cambiaría el valor 8 por el nuevo valor asignado. Entonces concluimos que:
¤¤ Sólo puede haber una variable del lado izquierdo del signo igual.
¤¤ Del lado derecho del signo puede haber una constante, una expresión u otra variable.
¤¤ Cada vez que se asigna un nuevo valor a una variable, se pierde el valor anterior.
Ejemplos de asignación de variables. Observa cómo las variables van adquiriendo nuevos
valores conforme se ejecutan las operaciones:
En este ejercicio se ejemplifica claramente lo que es una prueba de escritorio. Es muy útil ya
que puedes verificar qué valores adquieren las variables durante la ejecución de un algoritmo
o programa.
21
Programación
.NET
ACTIVIDAD
1. a b c 2. a b c
a=3 3 ? ? a=10 10 - -
b=8 3 8 ? b=1 10 1 -
c=1 3 8 1 c =4 10 1 4
a=5 5 8 1 a=a+c 14 1 4
b=9 5 9 1 b=a+c 14 18 4
c=7 5 9 7 c =a+c 14 18 18
a=a+1 6 9 7 a=c +5 23 18 18
b = b -2 6 7 7 b=c +b 23 36 18
c = c+ 3 6 7 10 c =a+b+c 23 36 77
3. a b c 4. a b c
a=1 1 - - a=5 5 - -
b=2 1 2 - b=5 5 5 -
c=3 1 2 3 c =5 5 5 5
a = a+ b 3 2 3 a=a+a 10 5 5
b = a-b 3 1 3 b=b+b 10 10 5
c = a* b 3 1 3 c =c +c 10 10 10
a = a/b 3 1 3 a=a+b+c 30 10 10
b = a+ b 3 4 3 b=a+b+c 30 50 10
c = a* b 3 4 12 c =a+b+c 30 50 90
5. a b c
a=10 10 - -
b=10 10 10 -
c= 1 0 10 10 10
a = a+5 15 10 10
b = a+3 15 18 10
c= a+2 15 18 17
a = b+4 22 18 17
b = b+5 22 23 17
c= c+8 22 23 25
22
Lógica computacional
tema E Operadores
Los operadores son signos que expresan relaciones entre variables y/o constantes de las cuales
se obtiene un resultado. La acción que realice un operador depende mucho del lenguaje de
programación que estemos utilizando. Los operadores más conocidos son:
Si más de un operador se usa en una expresión, las acciones se ejecutan de acuerdo a una
jerarquía:
Ejemplo 1: x = a + b / c + d
Primero se ejecutaría la división (b/c), posteriormente la suma del resultado de la división con a
y el resultado se sumaría con d.
x = 2 + 8/4 + 3
Ejemplo 2: x = (a + b) / (c + d)
x = (2 + 8)/(4 - 1)
23
Programación
.NET
ACTIVIDAD
1-07 Operadores
Evalúa las siguientes expresiones. Escribe en una sola línea la expresión algebraica, tal y como
se debe escribir en la computadora, usando paréntesis y los operadores adecuados. Después
evalúa cada expresión obteniendo el valor final de x, suponiendo en todos los casos que:
a=3
b=4
c=2
d=1
2. a+ b Expresión: x=(a+b/(a+b+b/c))/(a+b/(c+a))
a + b + bc
x= b
a+ c+ x= (3+4/(3+4+4/2))/(3+4/(2+3))= 155/171
a
3. a + b + d *c a Expresión: x=(a+b+c/d*a)/(a+b*c/d)
x=
a + b * dc
x= (3+4+2/1*3)/(3+4*2/1)= 23/33
5. +b
a + ac + Expresión: x=a+(a+(a+b)/(c+d))/(a+a/b)
x = a+ d
a+ b a
x= 3+(3+(3+4)/(2+1))/(3+3/4)= 199/45
24
Lógica computacional
Para escribir una secuencia de acciones lo único que tienes que hacer es escribir una instrucción
después de otra, de manera que se entienda la secuencia y el orden de ejecución. Por ejemplo,
si deseáramos hacer una secuencia que nos permita observar a través de una ventana abierta,
el algoritmo sería:
Inicio
1. Ubicar la ventana por la que deseamos observar.
2. Dirigirnos hacia la ventana que escogimos.
3. Acercarnos lo suficiente para observar a través de ella.
4. Observar a través de la ventana abierta.
Fin
Notarás que para utilizar una estructura de secuencia sólo tenemos que indicar en qué orden
se ejecutará cada paso y lo que se tiene que hacer.
Siempre que se debe tomar una decisión, ésta depende de una condición. La condición es una
expresión lógica que nos permite decidir cuál es el camino a tomar. Vamos a complementar el
ejemplo de la estructura anterior:
25
Programación
.NET
Inicio
1. Ubicar la ventana por la que deseamos observar
2. Si nos encontramos sentados
Levantarnos del lugar donde nos encontremos
Si no estamos sentados
Nos orientamos hacia la ventana
3. Dirigirnos hacia la ventana que escogimos
3. Acercarnos lo suficiente para observar a través de ella.
4. Si está cerrada
Abrir la ventana
5. Observar a través de la ventana abierta.
Fin
Conforme utilizas las estructuras de secuencias junto con las estructuras de decisiones, el
algoritmo se aproxima más a la realidad. Observa que en las estructuras de decisión siempre se
debe indicar el camino que se debe tomar cuando se cumpla la condición, pero no forzosamente
tienes que indicar qué acción tomar en caso de no cumplir la condición.
ACTIVIDAD
1. Algoritmo para elegir la ropa adecuada para salir a cualquier tipo de restaurante.
Inicio
1. Decidir qué tipo de restaurante es
2. Si el restaurante es elegante
3. Si es para hombre
Elegir traje
Si no
Elegir vestido
4. Si el restaurante es casual
5. Si es para hombre
Elegir pantalón de vestir
Elegir camisa
Si no
Elegir blusa
26
Lógica computacional
Prueba de escritorio:
restaurante = casual
¿El restaurante es elegante? = no
¿El restaurante es casual? = sí
¿Es para hombre? = sí
Elegir pantalón de vestir
Elegir camisa
¿El restaurante es informal? =no
Fin
2. Algoritmo que requiere hacer una empresa que se dedica a pintar casas, antes de presentarse
con el cliente a realizar el trabajo.
Inicio
1. Reunirse con el cliente
2. Mostrar un color al cliente
3. Si al cliente no le gusta regresar al paso 2
4.Calcular la pintura necesaria
5. Cotizar el trabajo
6. Si al cliente no le agrada la cotización regresar al paso 2
7. Asignar a los trabajadores para el trabajo
8. Llevar a los trabajadores y la pintura al lugar de trabajo
Fin
Prueba de escritorio:
Color azul
¿Es de su agrado? = no
Color blanco
¿Es de su agrado? = sí
costo = $1000
¿Es de su agrado? = sí
Fin
27
Programación
.NET
3. Una tienda hace un descuento de $10 si el total de la compra es mayor a $500. El algoritmo
debe calcular el precio a pagar, basado en el valor de la compra.
Inicio
1. Variable total = 0
2. Sumar el precio del artículo al total
3. Si es el último artículo
Si total > 500
total = total - 10
Si no
regresar al paso 2
Fin
Prueba de escritorio:
4. Una tienda hace un descuento de $10 si el total de la compra está entre $100 y $200 y
hace un descuento de $20 si el total de la compra es mayor de $200. Si la compra es
menor de $100, no hay descuento. El algoritmo debe calcular el precio a pagar, basado
en el valor de la compra.
Inicio
1. variable total = 0
2. total = total + precio del artículo
3. si hay más artículos
regresar al paso 2
4. si total > 100 y total < 200
total = total -10
5. si total > 200
total = total -20
6. Imprimir “El total es $” total
Fin
28
Lógica computacional
Vamos a suponer que eres un supervisor y cada hora, durante tu jornada de trabajo, tienes que
vigilar a través de una ventana. El resto del tiempo debes permanecer en tu lugar de trabajo y
sólo cada hora levantarte y observar a través de la ventana.
Inicio
Llegar puntual a la jornada laboral
Ubicarse en el lugar de trabajo
Mientras no termine la jornada de trabajo
Ubicar la ventana por la que nos queremos asomar
Si estamos sentados
Levantarnos del lugar en donde estemos sentados
Orientarnos hacia la ventana
Si no
Orientarnos hacia la ventana
Fin Si
Dirigirnos hacia la ventana
Si está cerrada
Abrirla
Fin Si
Observar por la ventana
Regresar al lugar de trabajo
Mientras no haya pasado una hora
Permanecer en el lugar de trabajo
Fin Mientras
Fin Mientras
Fin
Cada bloque de instrucciones dentro de una condición o un ciclo debe indicar el inicio y fin.
29
Programación
.NET
ACTIVIDAD
1. Un vendedor de arena tiene que despachar 2 kg. de producto a un cliente. Para pesar el
producto el vendedor tiene una báscula. Escribe el algoritmo más adecuado que puedas
pensar para despachar la cantidad exacta de arena.
Inicio
1. Mientras la báscula no pase de 2 kg.
Agregar un puño de arena
Fin mientras
2.Si la báscula pasa de 2 kg.
Mientras la báscula no baje de 2 kg.
Quitar un poco de arena
Fin mientras
Fin si
Fin
báscula puño
0 200 g
200 g 300 g
500 g 250 g
750 g 400 g
1150 g 350 g
1500 g 300 g
1800 g 300 g
2100 g -50 g
2050 g -50 g
2000 g
30
Lógica computacional
2. El guardia de un estadio tiene que verificar los boletos de los espectadores. Sólo podrán
entrar quienes tengan boleto azul. No se sabe cuántos espectadores asistirán al evento.
Escribe el algoritmo que debe seguir el guardia para cumplir con las reglas.
Inicio
1. Mientras la fila no se acabe
2. Revisar boleto del primer espectador
3. Si es azul
Aceptar
4. Si no
Rechazar
5. Recorrer fila
Fin Mientras
Fin
X = 10
Mientras X>0, Repetir:
Mostrar el valor actual de X
X = X-1
Fin Mientras
10
31
Programación
.NET
32
Lógica computacional
El uso del rectángulo representa un proceso o acción a realizarse, como por ejemplo la
asignación de un valor a una variable.
Este símbolo representa una entrada de datos utilizando el teclado y describe la asignación
de un valor a una variable. En su interior se debe escribir el nombre de la variable en la que
queremos que se almacene el dato tecleado.
Estos símbolos se conocen como conectores. Representan la continuación de un diagrama
cuando éste no cabe en una sola hoja. El círculo hace referencia a la continuación de un
diagrama dentro de la misma hoja, mientras que el pentágono hace referencia hacia la
continuación de un diagrama en otra página.
Este símbolo representa una salida de datos en un dispositivo electrónico, por ejemplo en una
impresora.
Las flechas representan la forma de conexión entre los demás símbolos. La dirección de la
flecha determina el flujo de ejecución.
¿Recuerdas el algoritmo para vigilar a través de una ventana? Observa cómo se ve mucho más
claro en un diagrama de flujo.
33
Programación
.NET
Inicio
Llegar puntual a
la jornada laboral
Ubicarnos en
nuestro lugar
de trabajo
1
¿Estamos Falso
sentados?
Verdadero
Levantarnos del
lugar donde Orientarnos hacia
estamos sentados la ventana
Orientarnos hacia
la ventana
Dirigirnos hacia
la ventana
¿Está
cerrada?
Verdadero
Falso
Abrirla
Observar por
la ventana
Regresar a
nuestro lugar
de trabajo
Falso
¿Ha pasado
una hora?
Verdadero
¿Ha terminado
la jornada Falso 1
laboral?
Verdadero
Fin
Recuerda que para cada problema puede haber una gran variedad de algoritmos, ya que todos
utilizamos nuestra propia lógica. Probablemente tú tengas en mente otro proceso para lograr el
objetivo de vigilar por una ventana. Lo importante es que se logre el objetivo de la mejor manera
posible.
34
Lógica computacional
ACTIVIDAD
Inicio
Entrar al vehículo
Es vehículo Falso
estándar
Pisar el clutch
Insertar la llave en la
ranura
Girar la llave
Fin
35
Programación
.NET
2. Utiliza el algoritmo para determinar si un número entero X es par o impar y dibuja el diagrama
de flujo.
Inicio
Determinar el
problema
Realizar una
prueba del
algoritmo
La prueba
encontró errores Falso
Verdadero
Corregir los
errores
Falso
La solución fue
satisfactoria
Verdadero
Fin
36
Lógica computacional
3. Dibuja un diagrama de flujo del algoritmo que te permita saber si un número entero X es
primo.
Inicio A
Bandera = 0 Falso
Bandera = 0
Verdadero
número
El número El número
es primo no es primo
Falso
i=2
Bandera = o e Falso
i < numero/2 A
Verdadero
Verdadero
Bandera = 1
i=i+1
37
Programación
.NET
¿Qué aprendiste?
TEMA A: Describe detalladamente las secuencias lógicas dentro de la computación.
TEMA D: A diferenciar las características entre los términos variable, incognita y constante.
TEMA E: A expresar relaciones entre variables y/o constantes por medio de operadores para
obtiener un resultado.
EVALUACIÓN
01
1. ¿Qué es una variable?
38
El pseudocódigo, también llamado programación falsa, es una guía que sirve para
que el programador sepa los pasos a seguir para lograr un resultado y así adecuarlo al
lenguaje de programación de su preferencia.
Un id ad 02 Pseudocód igo
A Reconocer pseudocódigos.
Programación .NET
Autor:
Carlos Zepeda Chehaibar
Programación
.NET
tema A Pseudocódigo
El pseudocódigo es un lenguaje de especificación de algoritmos, de uso fácil y sintaxis similar
al lenguaje de programación. Es un paso más cercano a los lenguajes de computadora, pero
te permite concentrarte en las estructuras y acciones, en vez de preocuparte por la sintaxis
del lenguaje en el que se va a programar. Cuando un algoritmo se escribe en pseudocódigo,
en vez de en palabras comunes, su traducción a cualquier lenguaje de programación será
muy sencilla. Para escribir pseudocódigos hay que cumplir algunos requisitos que facilitarán la
posterior transcripción del algoritmo a un lenguaje de computadora:
Declarar una variable consiste en escribir el tipo de dato que puede guardar, seguido del
nombre de la variable. Para separar el tipo de dato del nombre de la variable se utilizan dos
puntos (:). Puedes declarar dos o más variables del mismo tipo, separando sus nombres con
comas, por ejemplo:
Entero: edad
Real: estatura, peso, sueldo
Cadena: nombre, dirección
Para asignar un valor a una variable primero se escribe el nombre de la variable, luego el signo
de igualdad (=) y después el valor que se va a asignar a la variable. Por ejemplo:
edad = 14
estatura = 1.76
sueldo = 750.80
nombre = “Alejandra”
Antes de analizar a detalle la forma correcta de escribir las estructuras en forma de pseudocódigo,
veamos un ejemplo simple que sólo utiliza una secuencia de instrucciones. ¿Puedes comprender
su funcionamiento? Realiza una prueba de escritorio.
40
Pseudocódigo
Inicio, Fin, Leer, Escribir, Mientras, Repetir, Hasta, Para, Incrementar, Decrementar, Hacer Función,
Entero Real, Carácter, Cadena, Lógico, Retornar.
Veamos como ejemplo un algoritmo que sirve para calcular el área y perímetro de cualquier
rectángulo. El usuario debe proporcionar los valores de la base y la altura.
Inicio
1. Pedir al usuario el valor de la base (b)
2. Pedir al usuario el valor de la altura (h)
3. Calcular el área con la fórmula A=b*h
4. Calcular el perímetro con la fórmula P= 2*(b+h)
5. Mostrar al usuario los valores de A y P
Fin
Este simple algoritmo se puede representar con un diagrama de flujo, como se muestra a
continuación:
Inicio
b ,h
A= b * h
P= 2* (b+h)
A, P
Fin
41
Programación
.NET
También sabemos que, para que la traducción posterior a un lenguaje de programación sea
más sencilla, es conveniente escribirlo en forma de pseudocódigo, por ejemplo así:
Inicio
Entero: b, h, A, P
Pedir b
Pedir h
A = b*h
P=2*(b+h)
Mostrar A
Mostrar P
Fin
42
Pseudocódigo
ACTIVIDAD
Inicio
Abrir la puerta del vehículo
Entrar al vehículo
Es estándar
Si No
Verificar que esté
Pisar el clutch
en parking
Insertar la llave en la ranura
Girar la llave
Fin del algoritmo
43
Programación
.NET
Inicio
Comprar los ingredientes
Mezclar los ingredientes
Vaciar la mezcla en un molde para pastel
Prender el horno
Esperar unos minutos
Abrir el horno
El horno está caliente
Meter el pastel al horno
Esperar unos minutos
Abrir el horno
El pastel está listo
Sacar el pastel del horno
Fin del algoritmo
Inicio
Entero: n
Entrar al vehículo
Si n MOD2 = 0 No
Mostrar: Mostrar:
“Es par” “Es impar”
Fin del algoritmo
44
Pseudocódigo
Inicio
Determinar el problema
Elegir una posible solución
Indicar los pasos a seguir
¿Hay posibles errores?
Corregir fallas
Realizar prueba del algoritmo
¿La solución fue satisfactoria?
Fin del algoritmo
Inicio Bandera = 0
Si No
Entero: bandera, número, i = 0
Mostrar: Mostrar:
Leer número
“El número “El número
número > 1 es primo” no es primo”
número = 2 o número = 1
Fin del algoritmo
Si No
i=2
bandera = 0
e i < número/2
número MODi= 0
Si No
bandera = 1
i=i+1
45
Programación
.NET
En la toma de decisiones que dependen de una condición, la o las instrucciones que formen
parte de la estructura sólo se ejecutan si se cumple una condición. Adicionalmente se pueden
incluir una o varias instrucciones que se ejecuten sólo en caso de que no se cumpla la condición.
Un ejemplo en nuestro propio lenguaje sería algo así:
Si (Condición) entonces
Instrucciones a ejecutar en caso de que la condición sea Verdadera
Si no
Instrucciones a ejecutar en caso de que la condición sea Falsa
Fin_Si
Inicio
Entero: num
Escribir “Digite un número entero”
Leer num
Si num < 0
Escribir “El número digitado es negativo”
Si no
Escribir “El número digitado es positivo”
Fin _ Si
Fin
46
Pseudocódigo
ACTIVIDAD
Inicio
Entero: total = 0, i = 0, calificacion = 0
Mientras i < 5
Leer calificacion
total = total + calificacion
i = i + 1
Fin mientras
Si total /5 > 5
Mostrar “Aprobado”
Si no
Mostrar “Reprobado”
Fin si
Fin
Inicio
Entero: Edad = 0
Leer Edad
Si Edad > 18
Mostrar “Mayor de edad”
Si no
Mostrar “Menor de edad”
Fin si
Fin
Inicio
Entero: bandera = numero = i = 0
Repetir Leer numero
Hasta que numero > 1
Si numero <> 2
i = 2
47
Programación
.NET
Inicio
Entero: numero
Leer numero
Si numero MOD 2 = 0
Mostrar “El número es par”
Fin si
Fin
Inicio
Entero numero
Leer numero
Si numero MOD 2 <>
Mostrar “Es impar”
Fin si
Fin
48
Pseudocódigo
Inicio
Entero: numero
Escribir “Digite un número”
Leer numero
Si numero =0
Llamar a recepción
Si numero =1
Llamar a vigilancia
Si numero =2
Llamar a mantenimiento
Si numero >2
Mensaje “Error, número invalido”
Fin
ACTIVIDAD
Inicio
Entero: numero
Mostrar “Elija una opción”
Leer numero
Si numero = 0
Escuchar mensajes nuevos
49
Programación
.NET
Si numero = 1
Escuchar mensajes antiguos
Si numero = 2
Borrar mensaje
Si numero = 3
Mandar un mensaje a otro usuario
Si numero > 3
Mostrar “Opción no válida”
Fin
2. Leer una calificación numérica y determinar si es Deficiente, Regular, Bien, Muy bien o
Excelente. Escríbelo como pseudocódigo.
Inicio
Entero: calificacion
Si calificacion < 5
Mostrar “Deficiente”
Si calificacion = 6 o calificacion = 7
Mostrar “Regular”
Si calificacion = 8
Mostrar “Bien”
Si calificacion = 9
Mostrar “Muy bien”
Si calificacion = 10
Mostrar “Excelente”
Fin
3. Realizar un algoritmo que indique, según el número, el nombre del mes. Escríbelo como
pseudocódigo.
Inicio
Entero: mes
Leer mes
Si mes < 0 o mes > 12
Mostrar “Número no válido”
Si mes = 1
Mostrar “Enero”
Si mes = 2
Mostrar “Febrero”
50
Pseudocódigo
Si mes = 3
Mostrar “Marzo”
Si mes = 4
Mostrar “Abril”
Si mes = 5
Mostrar “Mayo”
Si mes = 6
Mostrar “Junio”
Si mes = 7
Mostrar “Julio”
Si mes = 8
Mostrar “Agosto”
Si mes = 9
Mostrar “Septiembre”
Si mes = 10
Mostrar “Octubre”
Si mes = 11
Mostrar “Noviembre”
Si mes = 12
Mostrar “Diciembre”
Fin
Inicio
Entero: a1, a2, a3
Leer a1, a2, a3
Mientras a1+a2+a3 <> 180
Leer a1, a2, a3
Si a1=a2 y a1=a3 y a2=a3
Mostrar “Triángulo equilátero”
Si (a1=a2 y a3<> a1) o (a1=a3 y a2<> a1) o (a2=a3 y a1<> a2)
Mostrar “Triángulo isóceles”
Si a1=90 o a2=90 o a3=90
Mostrar “Triángulo rectángulo”
Si a1>90 o a2>90 o a3>90
Mostrar “Triángulo obtusángulo”
Si a1<90 o a2<90 o a3<90
Mostrar “Triángulo acutángulo”
Fin
51
Programación
.NET
Si llueve entonces
no salir de casa
Si no
Si hace frío
usar abrigo
ir al cine
Si no
usar ropa fresca
ir a la playa
Fin_Si
Fin_Si
Observa que el grupo de instrucciones en letra cursiva (el condicional interno) sólo se ejecuta
en el caso de que la primera condición sea falsa. Si la primera condición es verdadera (si
llueve), todo el segundo condicional es ignorado. El esquema general es el siguiente.
Si condición1 entonces
Instrucciones a ejecutar en caso de que la condición1 sea Verdadera
Si no
Si condición2 entonces
Instrucciones a ejecutar en caso de que la condición2 sea Verdadera
Si no
Instrucciones a ejecutar en caso de que la condición2 sea Falsa
Fin _ si
Fin _ si
De acuerdo a las necesidades de cada algoritmo, se pueden anidar dos, tres o más decisiones.
Realiza una prueba de escritorio de este ejemplo: se debe leer un número entero y determinar
si es de uno, dos, tres, cuatro o más dígitos. Además hay que verificar que el número no sea
negativo.
52
Pseudocódigo
ACTIVIDAD
1. Leer un número entero de dos dígitos y determinar si un dígito es múltiplo del otro.
Inicio
Entero: num, aux1, aux2
Leer num
Mientras num<10 o num >99
Leer num
aux1= num/10
aux2= num MOD 10
Si aux1< aux2
Si aux2 MOD aux1 = 0
53
Programación
.NET
2. Leer dos números enteros. Si la diferencia entre los dos es menor o igual a 10, entonces
mostrar en pantalla todos los enteros comprendidos entre el menor y el mayor de los números
leídos.
Inicio
Entero: num1, num2, cont, aux
Leer num1, num2
Si num1< num2
aux=num1
num1=num2
num2=aux
Fin si
cont=num1-num2
Si cont < 10
Mientras cont > 0
Mostrar num1 - cont
cont = cont - 1
Fin mientras
Fin si
Fin
3. Leer dos números enteros de 2 dígitos. Si la diferencia entre los dos números es par mostrar
en pantalla la suma de los dos números; si dicha diferencia es un número menor que 10
entonces mostrar en pantalla el producto de los dos números; y si la diferencia entre los
números leídos termina en 4 mostrar en pantalla la diferencia.
54
Pseudocódigo
Inicio
Entero: num1, num2, aux
Leer num1
Mientras num1<10 y num1 >99
Leer num1
Leer num2
Mientras num2<10 y num2 >99
Leer num2
Si num2 > num1
aux=num1
num1=num2
num2=aux
Fin si
aux=num1-num2
Si aux MOD 2 = 0
Mostrar num1+num2
Si aux < 10
Mostrar num1*num2
Si aux MOD 10 = 4
Mostrar aux
Fin
Inicio
Entero: num
Leer num
Mientras num<10 y num>99
Leer num
Fin mientras
Si num MOD 10 = 1
Mostrar num/10
Si num MOD 10 = 2
Mostrar num MOD 10 + num/10
Si num MOD 10 = 3
Mostrar num MOD 10 * num/10
Fin
55
Programación
.NET
tema F Ciclos
Un ciclo es una estructura que permite repetir o iterar un conjunto de acciones la cantidad de
veces que determine una condición. El ciclo siempre debe tener un inicio y un final.
Para facilitar la escritura de algoritmos se utilizan tres formas de ciclos. Aunque siempre que
necesites repetir instrucciones puedes usar cualquiera de los tres ciclos, siempre hay alguno
que resulta más conveniente o que permite escribir menos instrucciones.
2-01
LÁMINA Ciclos
ACTIVIDAD
1. Leer un número entero y mostrar todos los pares comprendidos entre 1 y el número leído.
Escríbe el pseudocódigo.
Inicio
Entero num, cont = 2
Leer num
Mientras num < 1
Leer num
Fin mientras
Mientras cont < num
Mostrar cont
cont =cont + 2
Fin mientras
Fin
56
Pseudocódigo
Inicio
Entero cont = 21
Mientras cont < 150
Mostrar cont
cont =cont + 2
Fin mientras
Fin
Inicio
Entero: bandera = i = 0, numero
Leer numero
Mientras numero < 0
Leer numero
Si numero <> 0 y numero <> 1
i = 2
Mientras bandera = 0 e i < numero/2
Si numero MOD i = 0
Bandera = 1
i = i + 1
Fin si
Fin mientras
Fin si
Si bandera = 0
Mostrar “Es primo”
Fin si
Fin
Inicio Inicio
Entero num, i = 1 Entero: num, i = 1
Leer num
Leer num
Mientras i < 12
Mostrar num “*” i i < 12
i + + Mostrar num “*” i
Fin mientras
Fin i++
Fin
57
Programación
.NET
ACTIVIDAD
Inicio
Entero: i
Para i = 1 hasta 15
Mostrar i
Fin para
Fin
2. Generar en orden los números del 1 al 10, utilizando un ciclo que vaya de 10 a 1
Inicio
Entero: i
Para i = 10 hasta 1
Mostrar 11 - i
Fin para
Fin
Inicio
Entero: num
Para num = 1 hasta 20
Mostrar 4* num
Fin para
Fin
Inicio
Entero: total = 0, num
Para num = 1 hasta 22
Si num es primo
total = total + num
58
Pseudocódigo
Fin si
Fin para
Mostrar total
Fin
Inicio
Entero: i
Para i = 20 hasta 30
Mostrar i
i = i + 1
Fin para
Fin
ACTIVIDAD
Inicio
Entero: num, prod = 1, fact = 1
Leer num
Mientras num < 1
Leer num
Hacer
fact* = prod
prod + = 1
Mientras prod < num
Mostrar fact
Fin
Inicio
Entero: num = 1
59
Programación
.NET
Hacer
Mostrar num
num + = 2
Mientras num < 99
Fin
3. Leer dos números enteros y mostrar todos los múltiplos de 4 comprendidos entre el menor
y el mayor.
Inicio
Entero: a, b, i = 1, aux
Leer a, b
Si b > a
aux = a
a = b
b = aux
Fin si
Mientras a MOD 4 <> 0 y a < b
a + = 1
Fin mientras
Hacer
Mostrar a
a = a + 4
Mientras a < b
Fin
4. Leer dos números enteros y sumar todos los valores enteros que haya entre el menor y el
mayor.
Inicio
Entero: a, b, suma, aux
Leer a, b
Si b < a
aux = a
a = b
Fin si
Hacer
suma + = a
a + = 1
Mientras a < b
Fin
60
Pseudocódigo
5. Sumar números leídos uno a uno, hasta que el usuario ingrese un 9. Al final debe mostrarse
la suma. Escribe el pseudocódigo y dibuja el diagrama de flujo.
Inicio Inicio
Entero: suma, num
Hacer Entero = suma, num
Leer num
suma + = num num
Mientras num <> 9
Mostrar suma
Fin suma + = num
Falso
suma
Fin
ACTIVIDAD
1. Leer un número entero y mostrar todos los pares comprendidos entre 1 y el número leído.
Inicio
Entero: num, i = 2
Leer num
Si num > i
Hacer
Mostrar i
i + = 2
Hasta i < num
Fin si
Fin
61
Programación
.NET
Inicio
Entero: num = 20
Hacer
Mostrar num
num + = 2
Hasta num > 100
Fin
3. Leer dos números enteros y mostrar todos los múltiplos de 4 comprendidos entre el menor
y el mayor.
Inicio
Entero: a, b, aux
Leer a,b
Si b > a
aux = a
a = b
b = aux
Fin si
Mientras a MOD 4 <> 0 y a < b
a + = 1
Fin mientras
Hacer
Si a < b
Mostrar a
a + = 4
Hasta a > b
Fin
4. Leer dos números enteros y sumar los valores enteros que estén entre el menor y el mayor.
Inicio
Entero: a, b, aux, suma
Leer a, b
Si b > a
aux = a
a = b
b = aux
Fin si
Hacer
62
Pseudocódigo
suma + = a
a++
Hasta a > b
Fin
5. Sumar números leídos uno a uno, hasta que el usuario ingrese un 9. Al final debe mostrarse
la suma. Escribe el pseudocódigo y dibuja el diagrama de flujo.
Inicio
Entero: num, suma
Hacer
Leer num
suma + = num
Hasta num = 9
Mostrar suma
Fin
ACTIVIDAD
Inicio
x y Entero x, y
Para x = 2 hasta 5
2 0 Para y = 0 hasta 1
2 1 Si x = 5 y y = 1
Terminar algoritmo
3 0 Si no
3 1 Mostrar x
Mostrar y
4 0 Fin si
4 1 Fin para
Fin para
5 0
Fin
63
Programación
.NET
2. Utilizando ciclos anidados generar las siguientes parejas de números. Puedes usar una
variable auxiliar para llevar la cuenta de las repeticiones en el ciclo interno.
Inicio
x y Entero x, aux, y = 1
4 1 Para x = 4 hasta 6
Para aux = 1 hasta 3
4 2 Mostrar x
4 3 Mostrar y
y + = 1
5 4
Fin para
5 5 Fin para
5 6
Fin
6 7
6 8
6 9
Inicio
x y z Entero: x, y, z
1 1 1 Para x = 1 hasta 2
Para y = 1 hasta 2
1 1 2 Para z = 1 hasta 3
1 1 3 Mostrar x, y, z
Fin para
1 2 1 Fin para
1 2 2 Fin para
Fin
1 2 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
64
Pseudocódigo
ACTIVIDAD
7X1=7
7 X 2 = 14
7 X 3 = 21... etcétera
Inicio
Entero: num, i
Leer num
Para i = 1 hasta 12
Mostrar num “*” i “=” num * i
Fin para
Fin
2. Cuatro números dados por el usuario representan dos fracciones, donde el N1 es el numerador
de la primera fracción, D1 es el denominador de la primera fracción, N2 es el numerador
de la segunda fracción y D2 es el denominador de la segunda fracción. Dados estos cuatro
números, escribe el pseudocódigo para obtener el numerador (N3) y el denominador (D3)
de la fracción que resultaría de multiplicar las dos primeras fracciones.
Inicio
Entero: N1, N2, D1, D2
Leer N1, N2
Hacer
Leer D1
Hasta que D1 <> 0
Hacer
Leer D2
Hasta que D2 <> 0
Mostrar “El producto de las fracciones es”
N1* N2 “sobre” D1* D2
Fin
65
Programación
.NET
2-02
LÁMINA Arreglos y matrices
ACTIVIDAD
2-11 Arreglos
Para cada uno de los ejercicios, escribe con pseudocódigo un programa que dé solución a lo que
se pide.
Inicio
Entero: edad [7], i
Para i = 1 hasta 7
Leer edad [i]
Fin para
Para i = 1 hasta 7
Mostrar “Persona número” edad[i] “es”
Si edad [i] < 18
Mostrar “Menor de edad”
Si no
Mostrar “Mayor de edad”
Fin si
Fin para
Fin
66
Pseudocódigo
Edad 1 2 3 4 5 6 7
8 10 14 18 21 25 17
i: 1,2,3,4,5,6,7,1,2,3,4,5,6,7
Persona número 1 es menor de edad
Persona número 2 es menor de edad
Persona número 3 es menor de edad
Persona número 4 es mayor de edad
Persona número 5 es mayor de edad
Persona número 6 es mayor de edad
Persona número 7 es menor de edad
2. Leer 8 enteros, almacenarlos en un arreglo y determinar en qué posición del arreglo está el
mayor número leído. Además escribir cuál es el número mayor del arreglo.
Inicio
Entero: mayor [8], aux, M, i
Para i = 1 hasta 8
Leer mayor [i]
Fin para
aux = 1
M = mayor[i] > M
Para i = 2 hasta 8
Si mayor[i] > M
aux = i
M = mayor [i]
Fin_si
Fin para
Mostrar “El número mayor es”
Mostrar M
Mostrar “Que se encuentra en la posición”
Mostrar aux
Fin
67
Programación
.NET
Inicio
Entero: primos[10], i, cont
cont = , i = 150
Mientras cont < 10 e i < 320
Si i es numero primo
primos [cont] = i
i ++
cont ++
Fin si
Fin mientras
Para i = 1 hasta contador -1
Mostrar primos [i]
Fin para
Fin
Inicio
Entero: R[15], i, j, n = 0
Para i = 1 hasta 15
Leer R [i]
Fin para
Para i = 1 hasta 14
Para j = i + 1 hasta 15
Si R [i] = R[j]
n = 1
Fin si
Fin para
Fin para
Si n = 1
Mostrar “Existen repeticiones”
Fin si
Fin
68
Pseudocódigo
ACTIVIDAD
2-12 Matrices
Escribe un programa, en formato de pseudocódigo, para cada uno de los siguientes problemas:
1. Se debe crear la siguiente matriz y asignar en cada posición los valores que se muestran.
Utiliza ciclos.
1 0 0 0 Inicio
Entero A[4,4], i, j
Para i = 1 hasta 4
0 1 0 0 Para j = 1 hasta 4
Si i = j
0 0 1 0 A[i, j]=1
Si no
0 0 0 1 A [i, j]= 0
Fin si
Fin para
Fin para
Fin
2. Se debe crear la siguiente matriz y asignar en cada posición los valores que se muestran.
Utiliza ciclos.
1 2 3 4 Inicio
Entero A[4,4], i, j, N
Para i = 1 hasta 4
2 4 6 8 Para j = 1 hasta 4
A[i, j]= i * j
3 6 9 12 Fin para
Fin para
4 8 12 16 Fin
69
Programación
.NET
3. Se debe crear la siguiente matriz y asignar en cada posición los valores que se muestran.
Utiliza ciclos.
2 3 4 5 Inicio
Entero A[4,4], i, j, N
Para i = 1 hasta 4
3 4 5 6 N = i + 1
Para j = 1 hasta 4
4 5 6 7 A[i, j]= N
Fin para
5 6 7 8 Fin para
Fin
4. Se tiene una matriz de 4 filas por 4 columnas, en la que se han almacenado 16 datos de
tipo entero. Debes determinar en qué fila y en qué columna se encuentra el número mayor.
Inicio
Entero: A[4,4], i, j, m, n
m = 1, n = 1
Para i = 1 hasta 4
Para j = 1 hasta 4
Si A [i, j] > A [m, n]
m = i
n = j
Fin si
Fin para
Fin para
Mostrar “El número mayor se encuentra en”
Mostrar i “,” j
Mostrar “Y tiene un valor de”
Mostrar A [i, j]
Fin
70
Pseudocódigo
5. Se debe crear la siguiente matriz y asignar en cada posición los valores que se muestran.
Utiliza ciclos.
1 2 3 4 Inicio
Entero A[4,4], i, j, N
N = 1
5 6 7 8 Para i = 1 hasta 4
Para j = 1 hasta 4
9 10 11 12 A[i, j]= N
N++
13 14 15 16 Fin para
Fin para
Fin
6. Se tiene una matriz de 4 filas por 3 columnas, en la que se han almacenado 12 datos de
tipo entero. Debes leer cada dato y calcular la suma de los elementos de cada fila. Utiliza
algún ciclo.
Inicio
Entero: A[4,3], i, j, s1 = s2 = s3 = s4 = 0
Para i = 1 hasta 4
Para j = 1 hasta 3
Fin para
Fin para
Leer A [i, j]
Para i = 1 hasta 3
s1 + = A [1, i]
Fin para
Para i = 1 hasta 3
s2 + = A [2, i]
Fin para
Para i = 1 hasta 3
s3 + = A [3, i]
Fin para
Para i = 1 hasta 3
s4 + = A [4, i]
Fin para
Fin
2-03
LÁMINA Glosario de conceptos algoritmos
71
Programación
.NET
¿Qué aprendiste?
TEMA A: A crea un mapa conceptual con las estructuras de los pseudocódigos realizando
una prueba de escritorio.
TEMA E: Diferencía las decisiones en cascada y las decisiones anidadas en una programación.
EVALUACIÓN
02
1. ¿Qué es una variable?
72
.NET soporta más de 20 lenguajes de programación,
entre los cuales se encuentran: C#, Visual Basic .NET,
Delphi (Object Pascal), C++, F#, J#, Perl, Python, Fortran,
Prolog, Cobol y PowerBuilder.
Un id ad 03 .N ET
Programación .NET
Autor:
Carlos Zepeda Chehaibar
Programación
.NET
tema A Introducción
Microsoft.NET es el conjunto de nuevas tecnologías en las que Microsoft ha estado trabajando
durante los últimos años con el objetivo de obtener una plataforma sencilla y potente para
distribuir el software en forma de servicios que puedan ser suministrados remotamente y que
puedan comunicarse y combinarse unos con otros de manera totalmente independiente de
la plataforma, lenguaje de programación y modelo de componentes con los que hayan sido
desarrollados. Ésta es la llamada plataforma .NET, y a los servicios antes comentados se les
denomina servicios Web.
Para crear aplicaciones para la plataforma .NET, tanto servicios Web como aplicaciones
tradicionales (aplicaciones de consola, aplicaciones de ventanas, servicios de Windows NT,
etc.), Microsoft ha publicado el denominado kit de desarrollo de software conocido como .NET
Framework SDK que incluye las herramientas necesarias tanto para su desarrollo, distribución
y ejecución, por otra parte Visual Studio.NET permite realizar las mismas tareas a través de un
entorno gráfico basado en ventanas.
3-01
LÁMINA Microsoft .NET
Visual C# (pronunciado como c Sharp) esta diseñado para la construcción de una gran variedad
de aplicaciones que se ejecutan en .NET Framework, C# es simple, poderoso, con seguridad de
tipos y Orientado a Objetos.
3-01
VIDEO Instalando Visual C# Express 2010
74
.NET
La mayoría de los proyetos que desarrollaras a lo largo de este curso, serán programados bajo
la opción Aplicación de consola. Para generar un proyecto nuevo de consola selecciona Nuevo
proyecto/Plantillas instaladas/Visual C#/Aplicación de consola, luego haz clic en Aceptar.
75
Programación
.NET
Esto hace que el programa prepare nuestra área de trabajo que queda como lo muestra a
continuación, el área de trabajo contiene el Editor de código, cuadro de herramientas, Explorador
de soluciones y propiedades. A demás cuenta con las barras de menú comunes.
5
1
2 3
1. Barra de menús: Integrada por un conjunto de menús desplegables que aloja comandos,
herramientas u opciones, que se le pueden aplicar o configurar al documento o programa.
2. Cuadro de Herramientas: Muestra iconos para los controles y otros elementos que se
pueden agregar a los proyectos. Para abrir el Cuadro de herramientas, haz clic en menú
Vista/Cuadro de herramientas.
4. Propiedades: Muestra las opciones que se pueden configurar del objeto activo.
76
.NET
Hola mundo
Básicamente una aplicación en C# puede verse como un conjunto de uno o más ficheros de
código fuente con las instrucciones necesarias para que la aplicación funcione como se desea
y que son pasados al compilador para que genere un ejecutable. Cada uno de estos ficheros no
es más que un fichero de texto plano escrito usando caracteres Unicode y siguiendo la sintaxis
propia de C#.
3-02
LÁMINA Consola y Buffer de entrada
3-02
VIDEO Mi primera aplicación
PROYECTO
77
Programación
.NET
class Class1
{
static void Main(string[] args)
{
//
// TO DO: Add code to start application here
//
}
}
}
Siempre que crees una aplicación de Consola en C#, se agregará este código. Seguro que, con
lo que hemos visto hasta ahora, te suena mucho. La librería using System nos permitirá usar
miembros de este espacio de nombres sin poner la palabra System delante. Luego hay definido
un espacio de nombres para la aplicación, que se llama igual que la misma (HolaMundo).
Luego está el espacio de comentarios, que sirve para que puedas poner ahí lo que quieras (un
resumen de lo que hace el programa).
Por último, una clase llamada Class1 con un método Main que es static, que es el método
por el que empezará la ejecución del programa. Esas tres líneas que hay dentro del método
contienen un comentario. Te lo traduzco: “Para hacer: Añade aquí el código para que empiece
la aplicación”. O sea, que ya sabes dónde hay que escribir el código de nuestra aplicación
“Hola Mundo”: en el método Main. Escribe esto:
Console.WriteLine(“Hola Mundo”);
Vamos a probarla, a ver qué tal funciona. Haz clic en el menú “Depurar_Iniciar”, o bien haz clic
en el botón que tiene un triángulo verde apuntando hacia la derecha, o bien pulsa la tecla F5.
string a = Console.ReadLine();
Ahora vuelve a ejecutar como hicimos la primera vez. Como ves, ahora la ventana de línea
de comandos se queda abierta hasta que pulses Enter. ¿Y por qué es mejor hacerlo así que
ejecutar sin depuración?.
78
.NET
podremos comprobar que todas estas herramientas son verdaderamente útiles. Por lo tanto,
todo el código de nuestro programa terminado es este:
using System;
namespace HolaMundo
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
Console.WriteLine(“Hola Mundo”);
string a = Console.ReadLine();
}
}
}
Ya hemos terminado. No te olvides de guardarlo antes de salir. Con Archivo/Guardar Todo, o
bien el botón con varios discos dibujados, o bien la combinación de teclas <Ctrl+Mayús+S>.
Ahora realiza un programa que muestre el mensaje “Estoy realizando mi segundo programa”,
también que imprima tu nombre completo, dirección y teléfono, todo en líneas separadas.
Escribe el código del programa:
79
Programación
.NET
Todo programa en C# por más sencillo que éste sea, está constituido por más de una clase,
las cuales trabajan para permitir que el programa se ejecute. Esto se da sin importar que el
programador tan solo deba escribir una de ellas.
3-03
LÁMINA Otros elementos del programa
Una estructura básica de un sencillo programa que se ejecutará en una consola de comandos,
o al menos la parte que debe construir el programador, pero permite visualizar con detalle los
elementos esenciales que soportan a cualquier aplicación de software, sin importar el entorno
donde vaya a ejecutarse.
public class PrimerPrograma
{
static void Main()
{
// Instrucciones
}
}
La clase es algo así como la estructura o molde de un componente de software, y se define con
la palabra clave class. El término public le informa al sistema que dicha clase y sus componentes
están disponibles para ser vistos desde afuera del componente de software que la contiene, en
este caso el propio programa.
El programa en sí, observe, es una clase, pero no se puede perder de vista que en la práctica el
programa necesita otros componentes de software para poder ejecutarse, y lo más seguro es
que estos últimos de alguna manera dependan de una o más clases.
“Los nombres de los elementos deben iniciar con una letra o por un guión bajo”
Todo programa desarrollado en C# debe incluir un método Main(), el cual le informa al compilador
80
.NET
por donde debe iniciar y también terminar un programa. Este método o función siempre se
define antecedida de la palabra clave static, la cual permite utilizar la clase directamente, sin
necesidad de instanciar un objeto de ella. Esto debe ser así por que en el momentos de iniciar
la ejecución de un programa, aún no se ha montado en el sistema todos los componentes
necesarias para manejar objetos y por lo tanto el procesador no sabe que hacer con ellos.
La palabra clave void, que antecede a Main, le dice al sistema que la función que viene en
seguida no retornará ningún valor y que por lo tanto no espere nada. En C#, esta función
también se puede definir como int.
La función Main() puede ir como se mostró en el primer programa, o también incluir argumentos
de tipo cadena de texto. Dichos argumentos se identifican por un arreglo o vector del tipo string
(cadena de texto), como en la siguiente forma:
static void Main(string[] argumentos)
{
// Instrucciones
}
En apariencia, los argumentos de inicio de ejecución solo son válidos para programas de consola,
y no para programas que manejan un sistema gráfico de ventanas, como las aplicaciones tipo
Windows.
Palabras reservadas
Aunque antes se han dado una serie de restricciones sobre cuáles son los nombres válidos que
se pueden dar en C# a los identificadores, falta todavía por dar una, los siguientes nombres no
son válidos como identificadores ya que tienen un significado especial en el lenguaje:
81
Programación
.NET
Literales
Un literal es la representación explícita de los valores que pueden tomar los tipos básicos del
lenguaje. A continuación se explica cuál es la sintaxis con que se escriben los literales en C#
desglosándolos según el tipo de valores que representan:
En realidad, la sintaxis completa para la escritura de literales enteros también puede incluir un
sufijo que indique el tipo de dato entero al que ha de pertenecer el literal.
¤¤ Literales reales: Los números reales se escriben de forma similar a los enteros, aunque
sólo se pueden escribir en forma decimal y para separar la parte entera de la real usan el
tradicional punto decimal (carácter .) También es posible representar los reales en formato
científico, usándose para indicar el exponente los caracteres e ó E. Ejemplos de literales
reales son 0.0, 5.1, -5.1, +15.21, 3.02e10, 2.02e-2, 98.8E+1, etc.
Al igual que ocurría con los literales enteros, los literales reales también pueden incluir sufijos
que indiquen el tipo de dato real al que pertenecen.
¤¤ Literales lógicos: Los únicos literales lógicos válidos son true y false, que respectivamente
representan los valores lógicos cierto y falso.
82
.NET
Código de Código de
Carácter
escape Unicode escape especial
Comilla simple \u0027 \'
Comilla doble \u0022 \"
Carácter nulo \u0000 \0
Alarma \u0007 \a
Retroceso \u0008 \b
Salto de página \u000C \f
Nueva línea \u000A \n
Retorno de carro \u000D \r
Tabulación horizontal \u0009 \t
Tabulación vertical \u000B \v
Barra invertida \u005C \\
En realidad, de la tabla anterior hay que matizar que el carácter de comilla doble también puede
aparecer dentro de un literal de cadena directamente, sin necesidad de usar secuencias de
escape. Por tanto, otros ejemplos de literales de carácter válidos serán ‘\?’, ‘?’, ‘\f’, ‘\u0000’, ‘\\’,
‘\’’, etc.
Aparte de representar los caracteres de la tabla anterior, también es posible usar los códigos
de escape Unicode para representar cualquier código Unicode, lo que suele usarse para
representar literales de caracteres no incluidos en los teclados estándares.
¤¤ Literales de cadena: Una cadena no es más que una secuencia de caracteres encerrados
entre comillas dobles. Por ejemplo ?Hola, mundo?, ?camión?, etc. El texto contenido
dentro estos literales puede estar formado por cualquier número de literales de carácter
concatenados y sin las comillas simples, aunque si incluye comillas dobles éstas han de
escribirse usando secuencias de escape porque si no el compilador las interpretaría como
el final de la cadena.
83
Programación
.NET
Variables
Una variable puede verse simplemente como un hueco en el que se puede almacenar un objeto
de un determinado tipo al que se le da un cierto nombre. Para poderla utilizar sólo hay que
definirla indicando cual será su nombre y cual será el tipo de datos que podrá almacenar, lo
que se hace siguiendo la siguiente sintaxis:
<tipoVariable> <nombreVariable>;
Una variable puede ser definida dentro de una definición de clase, en cuyo caso se correspondería
con el tipo de miembro que hasta ahora hemos denominado campo. También puede definirse
como un variable local a un método, que es una variable definida dentro del código del método
a la que sólo puede accederse desde dentro de dicho código.
Otra posibilidad es definirla como parámetro de un método, que son variables que almacenan
los valores de llamada al método y que, al igual que las variables locales, sólo puede ser
accedidas desde código ubicado dentro del método. El siguiente ejemplo muestra como definir
variables de todos estos casos:
class A
{
int x, z;
int y;
void F(string a, string b)
{
Persona p;
}
}
En este ejemplo las variables x, z e y son campos de tipo int, mientras que p es una variable
local de tipo Persona y a y b son parámetros de tipo string. Como se muestra en el ejemplo,
si un método toma varios parámetros las definiciones de éstos se separan mediante comas
(carácter ,), y si queremos definir varios campos o variables locales (no válido para parámetros)
de un mismo tipo podemos incluirlos en una misma definición incluyendo en sus nombres
separados por comas.
Ya hemos visto que para crear objetos se utiliza el operador new. Por tanto, una forma de
asignar un valor a la variable p del ejemplo anterior sería así:
84
.NET
Persona p;
p = new Persona(“José”, 22, “76543876-A”);
Sin embargo, C# también proporciona una sintaxis más sencilla con la que podremos asignar
un objeto a una variable en el mismo momento se define. Para ello se la ha de definir usando
esta otra notación:
Así por ejemplo, la anterior asignación de valor a la variable p podría rescribirse de esta otra
forma más compacta:
3-04
LÁMINA Otros tipos de variables
Tipos de datos
Son ciertos tipos de datos tan comúnmente utilizados en la escritura de aplicaciones que en
C# se ha incluido una sintaxis especial para tratarlos. Por ejemplo, para representar números
enteros de 32 bits con signo se utiliza el tipo de dato System.Int32 definido en la BCL, aunque a
la hora de crear un objeto “a” de este tipo que represente el valor 2 se usa la siguiente sintaxis:
System.Int32 a = 2;
Como se ve, no se utiliza el operador new para crear objeto System.Int32, sino que directamente
se indica el literal que representa el valor a crear, con lo que la sintaxis necesaria para crear
entero de este tipo se reduce considerablemente. Es más, dado lo frecuente que es el uso de
85
Programación
.NET
este tipo también se ha predefinido en C# el alias int para el mismo, por lo que la definición de
variable anterior queda así de compacta:
int a = 2;
86
.NET
Pese a su sintaxis especial, en C# los tipos básicos son tipos del mismo nivel que cualquier otro
tipo del lenguaje. Es decir, heredan de System.Object y pueden ser tratados como objetos de
dicha clase por cualquier método que espere un System.Object, lo que es muy útil para el diseño
de rutinas genéricas que admitan parámetros de cualquier tipo y es una ventaja importante de
C# frente a lenguajes similares como Java donde los tipos básicos no son considerados objetos.
El valor que por defecto se da a los campos de tipos básicos consiste en poner a cero toda el
área de memoria que ocupen. Esto se traduce en que los campos de tipos básicos numéricos
se inicializan por defecto con el valor 0, los de tipo bool lo hacen con false, los de tipo char con
‘\u0000’, y los de tipo string y object con null.
Ahora que sabemos cuáles son los tipos básicos, es el momento de comentar cuáles son los
sufijos que admiten los literales numéricos para indicar al compilador cuál es el tipo que se ha
de considerar que tiene. Por ejemplo, si tenemos en una clase los métodos:
Ante una llamada como F(100), ¿a cuál de los métodos se llamara? Pues bien, en principio se
considera que el tipo de un literal entero es el correspondiente al primero de estos tipos básicos
que permitan almacenarlo: int, uint, long, ulong, por lo que en el caso anterior se llamaría al
primer F() Para llamar al otro podría añadirse el sufijo L al literal y hacer la llamada con F(100L).
3-03
VIDEO Declaración de variables
87
Programación
.NET
3-04
VIDEO Operadores Unarios
checked(<expresiónAritmética>)
unchecked(<expresiónAritmética>)
Por defecto, en ausencia de los operadores checked y unchecked lo que se hace es evaluar
las operaciones aritméticas entre datos constantes como si se les aplicase checked y las
operaciones entre datos no constantes como si se les hubiese aplicado unchecked.
¤¤ Operaciones lógicas: Se incluyen operadores que permiten realizar las operaciones lógicas
típicas: “and” (&& y &), “or” (|| y |), “not” (!) y “xor” (^).
88
.NET
Los operadores && y || se diferencia de & y | en que los primeros realizan evaluación perezosa
y los segundos no. La evaluación perezosa consiste en que si el resultado de evaluar el primer
operando permite deducir el resultado de la operación, entonces no se evalúa el segundo y se
devuelve dicho resultado directamente, mientras que la evaluación no perezosa consiste en
evaluar siempre ambos operandos.
Es decir, si el primer operando de una operación && es falso se devuelve false directamente, sin
evaluar el segundo; y si el primer operando de una || es cierto se devuelve true directamente,
sin evaluar el otro.
3-05
LÁMINA Operadores
3-05
VIDEO Operadores Binarios
Constantes
Una constante es una variable cuyo valor puede determinar el compilador durante la
compilación y puede aplicar optimizaciones derivadas de ello. Para que esto sea posible se ha
de cumplir que el valor de una constante no pueda cambiar durante la ejecución, por lo que el
compilador informará con un error de todo intento de modificar el valor inicial de una constante.
Las constantes se definen como variables normales pero precediendo el nombre de su tipo del
modificador const y dándoles siempre un valor inicial al declararlas. O sea, con esta sintaxis:
Dadas estas definiciones de constantes, lo que hará el compilador será sustituir en el código
generado todas las referencias a las constantes a y b por los valores 123 y 248 respectivamente,
89
Programación
.NET
por lo que el código generado será más eficiente ya que no incluirá el acceso y cálculo de los
valores de a y b. Nótese que puede hacer esto porque en el código se indica explícitamente cual
es el valor que siempre tendrá a y, al ser este un valor fijo, puede deducir cuál será el valor que
siempre tendrá b.
Para que el compilador pueda hacer estos cálculos se ha de cumplir que el valor que se asigne
a las constantes en su declaración sea una expresión constante. Por ejemplo, el siguiente
código no es válido en tanto que el valor de x no es constante:
Debido a la necesidad de que el valor dado a una constante sea precisamente constante,
no tiene mucho sentido crear constantes de tipos de datos no básicos, pues a no ser que
valgan null sus valores no se pueden determinar durante la compilación sino únicamente tras
la ejecución de su constructor. La única excepción a esta regla son los tipos enumerados, cuyos
valores se pueden determinar al compilar.
Todas las constantes son implícitamente estáticas, por lo se considera erróneo incluir el
modificador static en su definición al no tener sentido hacerlo. De hecho, para leer su valor
desde códigos externos a la definición de la clase donde esté definida la constante, habrá que
usar la sintaxis <nombreClase>.<nombreConstante> típica de los campos static.
Por último, hay que tener en cuenta que una variable sólo puede ser definida como constante
si es una variable local o un campo, pero no si es un parámetro.
3-06
LÁMINA Variales de sólo lectura
Enumeración
Una enumeración o tipo enumerado es un tipo especial de estructura en la que los literales de
los valores que pueden tomar sus objetos se indican explícitamente al definirla. Por ejemplo, una
enumeración de nombre Tamaño cuyos objetos pudiesen tomar los valores literales Pequeño,
Mediano o Grande se definiría así:
enum Tamaño
{
Pequeño,
Mediano,
Grande
}
90
.NET
Para entender bien la principal utilidad de las enumeraciones vamos a ver antes un problema
muy típico en programación: si queremos definir un método que pueda imprimir por pantalla un
cierto texto con diferentes tamaños, una primera posibilidad sería dotarlo de un parámetro de
algún tipo entero que indique el tamaño con el que se desea mostrar el texto.
A estos números que los métodos interpretan con significados específicos se les suele denominar
números mágicos, y su utilización tiene los inconvenientes de que dificulta la legibilidad del
código (hay que recordar qué significa para el método cada valor del número) y su escritura
(hay que recordar qué número ha de pasársele al método para que funcione de una cierta
forma). Una alternativa mejor para el método anterior consiste en definirlo de modo que tome
un parámetro de tipo Tamaño para que así el programador usuario no tenga que recordar la
correspondencia entre tamaños y números. Véase así como la llamada (2) del ejemplo que
sigue es mucho más legible que la (1):
obj.MuestraTexto(2); // (1)
obj.MuestraTexto(Tamaño.Mediano); // (2)
Además, estos literales no sólo facilitan la escritura y lectura del código sino que también
pueden ser usados por herramientas de documentación, depuradores u otras aplicaciones para
sustituir números mágicos y mostrar textos muchos más legibles.
Por otro lado, usar enumeraciones también facilita el mantenimiento del código. Por ejemplo, si el
método (1) anterior se hubiese definido de forma que 1 significase tamaño pequeño, 2 mediano
y 3 grande, cuando se quisiese incluir un nuevo tamaño intermedio entre pequeño y mediano
habría que darle un valor superior a 3 o inferior a 1 ya que los demás estarían cogidos, lo que
rompería el orden de menor a mayor entre números y tamaños asociados. Sin embargo, usando
una enumeración no importaría mantener el orden relativo y bastaría añadirle un nuevo literal.
Otra ventaja de usar enumeraciones frente a números mágicos es que éstas participan en
el mecanismo de comprobación de tipos de C# y el CLR. Así, si un método espera un objeto
Tamaño y se le pasa uno de otro tipo enumerado, se producirá, según cuando se detecte
la incoherencia, un error en compilación o una excepción en ejecución. Sin embargo, si se
hubiesen usado números mágicos del mismo tipo en vez de enumeraciones no se habría
detectado nada, pues en ambos casos para el compilador y el CLR serían simples números sin
ningún significado especial asociado.
3-07
LÁMINA Enumeraciones
91
Programación
.NET
Definición de enumeración: Ya hemos visto un ejemplo de cómo definir una enumeración. Sin
embargo, la sintaxis completa que se puede usar para definirlas es:
El tipo por defecto de las constantes que forman una enumeración es int, aunque puede dárseles
cualquier otro tipo básico entero (byte, sbyte, short, ushort, uint, int, long o ulong) indicándolo
en <tipoBase>. Cuando se haga esto hay que tener muy presente que el compilador de C#
sólo admite que se indiquen así los alias de estos tipos básicos, pero no sus nombres reales
(System.Byte, System.SByte, etc.)
Si no se especifica valor inicial para cada constante, el compilador les dará por defecto valores
que empiecen desde 0 y se incrementen en una unidad para cada constante según su orden
de aparición en la definición de la enumeración. Así, el ejemplo del principio del tema es
equivalente a:
enum Tamaño:int
{
Pequeño = 0,
Mediano = 1,
Grande = 2
}
Es posible alterar los valores iniciales de cada constante indicándolos explícitamente como
en el código recién mostrado. Otra posibilidad es alterar el valor base a partir del cual se va
calculando el valor de las siguientes constantes como en este otro ejemplo:
enum Tamaño
{
Pequeño,
Mediano = 5,
Grande
}
En este último ejemplo el valor asociado a Pequeño será 0, el asociado a Mediano será 5, y el
asociado a Grande será 6 ya que como no se le indica explícitamente ningún otro se considera
que este valor es el de la constante anterior más 1.
92
.NET
constante tenga que ser diferente al de las demás, y de hecho puede especificarse el valor de
una constante en función del valor de otra como muestra este ejemplo:
enum Tamaño
{
Pequeño,
Mediano = Pequeño,
Grande = Pequeño + Mediano
}
En realidad, lo único que importa es que el valor que se dé a cada literal, si es que se le da
alguno explícitamente, sea una expresión constante cuyo resultado se encuentre en el rango
admitido por el tipo base de la enumeración y no provoque definiciones circulares.
Por ejemplo, la siguiente definición de enumeración es incorrecta ya que en ella los literales
Pequeño y Mediano se han definido circularmente:
enum TamañoMal
{
Pequeño = Mediano,
Mediano = Pequeño,
Grande
}
Nótese que también la siguiente definición de enumeración también sería incorrecta ya que en
ella el valor de B depende del de A implícitamente (sería el de A más 1):
enum EnumMal
{
A = B,
B
}
PROYECTO
93
Programación
.NET
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CalculoSueldo
{
class Program
{
static void Main(string[] args)
{
int horasTrabajadas;
float costoHora;
float sueldo;
string linea;
Console.Write(“Ingrese Horas trabajadas:”);
linea = Console.ReadLine();
horasTrabajadas = int.Parse(linea);
Console.Write(“Ingrese el pago por hora:”);
linea = Console.ReadLine();
costoHora = float.Parse(linea);
sueldo = horasTrabajadas * costoHora;
Console.Write(“El sueldo total del operario es:”);
Console.Write(sueldo);
Console.ReadLine();
}
}
}
94
.NET
3-06
VIDEO Condicional IF
¤¤ Instrucción Switch: Permite ejecutar unos u otros bloques de instrucciones según el valor de
una cierta expresión. Su estructura es:
switch (<expresión>)
{
case <valor1>: <bloque1>
<siguienteAcción>
case <valor2>: <bloque2>
<siguienteAcción>
...
default: <bloqueDefault>
<siguienteAcción>
}
95
Programación
.NET
En realidad, aunque todas las ramas de un switch son opcionales siempre se ha de incluir al
menos una. Además, la rama default no tiene porqué aparecer la última si se usa, aunque es
recomendable que lo haga para facilitar la legibilidad del código.
Ejemplo:
comprobemos (opcion)
{
en caso de 1:
te descuento un 10%;
Nada más;
en caso de 2:
te descuento un 5%;
Nada más;
en caso de 3:
te descuento un 2%;
Nada más;
en otro caso:
no te descuento nada;
Nada más;
}
3-07
VIDEO Instrucción Switch
Ciclos
Son instrucciones que permiten ejecutar repetidas veces una instrucción o un bloque de
instrucciones mientras se cumpla una condición. Es decir, permiten definir bucles donde ciertas
instrucciones se ejecuten varias veces. A continuación se describen cuáles son las instrucciones
de este tipo incluidas en C#.
96
.NET
3-08
VIDEO Ciclo While
¤¤ Ciclo For: Es una variante de while que permite reducir el código necesario para escribir los
tipos de bucles más comúnmente usados en programación. Su sintaxis es:
for (<inicialización>; <condición>; <modificación>){
<instrucciones>
}
Con <modificación> pasa algo similar, ya que puede incluirse código que nada tenga que
ver con modificaciones pero en este caso no se pueden incluir definiciones de variables.
Como en el resto de instrucciones hasta ahora vistas, en <instrucciones> puede ser tanto
una única instrucción como un bloque de instrucciones. Además, las variables que se definan
en <inicialización> serán visibles sólo dentro de esas <instrucciones>.
3-09
VIDEO Ciclo For
97
Programación
.NET
Este programa muestra en pantalla los números del 0 al 10, cuando alcanza el valor 10 se
cumple la condición de la sentencia if, se ejecuta la sentencia break y sale del ciclo.
La sentencia continue funciona de manera similar a la sentencia break. Sin embargo, en vez de
forzar la salida, continue fuerza la siguiente iteración, por lo que salta el código que falta para
llegar a probar la condición. Por ejemplo, el siguiente programa visualizará sólo los números
pares:
main()
{
int x;
for( x=0; x<100; x++)
{
if (x%2)
continue;
printf(“%d “,x);
}
}
3-08
LÁMINA Sentencias de control
98
.NET
PROYECTO
4. Ejecuta la consola de Windows®, escribe el comando cd (change directory), haz clic con
el botón derecho del ratón, selecciona pegar del menú contextual y presiona <Enter>.
¿Qué función realliza este programa?
NOTAS:
99
Programación
.NET
using System;
class HolaMundoSwitch
{
public static void Main(String[] args)
{
if (args.Length > 0)
switch(args[0])
{
case “José”:
Console.WriteLine(“Hola José. Buenos días”);
break;
case “Paco”:
Console.WriteLine(“Hola Paco. Me alegro de verte”);
break;
default:
Console.WriteLine(“Hola {0}”, args[0]);
break;
}
else
Console.WriteLine(“Hola Mundo”);
}
}
8. De manera similar a la anterior busca la ruta del programa y ejecútalo desde la Consola de
Windows®. ¿Qué función realliza este programa?
100
.NET
La ejecución de las instrucciones de un método puede depender del valor de unas variables
especiales denominadas parámetros del método, de manera que en función del valor que se
dé a estas variables en cada llamada la ejecución del método se pueda realizar de una u otra
forma y podrá producir uno u otro valor de retorno.
¤¤ Definición De Método: Para definir un método hay que indicar tanto cuáles son las
instrucciones que forman su cuerpo como cuál es el nombre que se le dará, cuál es el tipo
de objeto que puede devolver y cuáles son los parámetros que puede tomar. Esto se indica
definiéndolo así:
<tipoRetorno> <nombreMétodo>(<parámetros>)
{
<cuerpo>
}
En <tipoRetorno> se indica cuál es el tipo de dato del objeto que el método devuelve, y si
no devuelve ninguno se ha de escribir void en su lugar.
Como nombre del método se puede poner en <nombreMétodo> cualquier identificador válido.
Como se verá más adelante en Interfaces, también es posible incluir en <nombreMétodo>
información de explicitación de implementación de interfaz, pero por ahora podemos considerar
que siempre será un identificador.
Aunque es posible escribir métodos que no tomen parámetros, si un método los toma se ha de
indicar en <parámetros> cuál es el nombre y tipo de cada uno, separándolos con comas si
son más de uno y siguiendo la sintaxis que más adelante se explica.
El <cuerpo> del método también es opcional, pero si el método retorna algún tipo de objeto
entonces ha de incluir al menos una instrucción return que indique cuál objeto.
101
Programación
.NET
La sintaxis anteriormente vista no es la que se usa para definir métodos abstractos. Como ya
se vio en el Tema Clases, en esos casos lo que se hace es sustituir el cuerpo del método y las
llaves que lo encierran por un simple punto y coma (;) Más adelante en este tema veremos que
eso es también lo que se hace para definir métodos externos.
3-09
LÁMINA Métodos externos
¤¤ Llamada A Métodos: La forma en que se puede llamar a un método depende del tipo de
método del que se trate. Si es un método de objeto (método no estático) se ha de usar la
notación:
<objeto>.<nombreMétodo> (<valoresParámetros>)
El <objeto> indicado puede ser directamente una variable del tipo de datos al que pertenezca
el método o puede ser una expresión que produzca como resultado una variable de ese tipo
(recordemos que, debido a la herencia, el tipo del <objeto> puede ser un subtipo del tipo
donde realmente se haya definido el método); pero si desde código de algún método de un
objeto se desea llamar a otro método de ese mismo objeto, entonces se ha de dar el valor this
a <objeto>.
<tipo>.<nombreMétodo> (<valoresParámetros>)
Ahora en <tipo> ha de indicarse el tipo donde se haya definido el método o algún subtipo
suyo. Sin embargo, si el método pertenece al mismo tipo que el código que lo llama entonces
se puede usar la notación abreviada:
<nombreMétodo> (<valoresParámetros>)
102
.NET
Parámetros
La forma en que se define cada parámetro de un método depende del tipo de parámetro del
que se trate. En C# se admiten cuatro tipos de parámetros: parámetros de entrada, parámetros
de salida, parámetros por referencia y parámetros de número indefinido.
¤¤ Parámetros De Entrada: Un parámetro de entrada recibe una copia del valor que almacenaría
una variable del tipo del objeto que se le pase. Por tanto, si el objeto es de un tipo valor se
le pasará una copia del objeto y cualquier modificación que se haga al parámetro dentro
del cuerpo del método no afectará al objeto original sino a su copia; mientras que si el
objeto es de un tipo referencia entonces se le pasará una copia de la referencia al mismo
y cualquier modificación que se haga al parámetro dentro del método también afectará al
objeto original ya que en realidad el parámetro referencia a ese mismo objeto original.
Para definir un parámetro de entrada basta indicar cuál el nombre que se le desea dar y el
cuál es tipo de dato que podrá almacenar. Para ello se sigue la siguiente sintaxis:
<tipoParámetro> <nombreParámetro>
Por ejemplo, el siguiente código define un método llamado Suma que toma dos parámetros
de entrada de tipo int llamados par1 y par2 y devuelve un int con su suma:
int Suma(int par1, int par2)
{
return par1+par2;
}
Como se ve, se usa la instrucción return para indicar cuál es el valor que ha de devolver el
método. Este valor es el resultado de ejecutar la expresión par1+par2; es decir, es la suma
de los valores pasados a sus parámetros par1 y par2 al llamarlo.
En las llamadas a métodos se expresan los valores que se deseen dar a este tipo de
parámetros indicando simplemente el valor deseado. Por ejemplo, para llamar al método
anterior con los valores 2 y 5 se haría <objeto>.Suma(2,5), lo que devolvería el valor 7.
103
Programación
.NET
a un método se considera que las variables que se le pasaron como parámetros de salida ya
estarán inicializadas, pues dentro del método seguro que se las inicializa.
Nótese que este tipo de parámetros permiten diseñar métodos que devuelvan múltiples
objetos: un objeto se devolvería como valor de retorno y los demás se devolverían
escribiéndolos en los parámetros de salida.
Los parámetros de salida se definen de forma parecida a los parámetros de entrada pero se
les ha de añadir la palabra reservada out. O sea, se definen así:
Al llamar a un método que tome parámetros de este tipo también se ha preceder el valor
especificado para estos parámetros del modificador out. Una utilidad de esto es facilitar la
legibilidad de las llamadas a métodos. Por ejemplo, dada una llamada de la forma:
a.f(x, out z)
Es fácil determinar que lo que se hace es llamar al método f() del objeto a pasándole x como
parámetro de entrada y z como parámetro de salida. Además, también se puede deducir que
el valor de z cambiará tras la llamada.
Sin embargo, la verdadera utilidad de forzar a explicitar en las llamadas el tipo de paso de
cada parámetro es que permite evitar errores derivados de que un programador pase una
variable a un método y no sepa que el método la puede modificar.
3-10
LÁMINA Otros parámetros
Namespace
Del mismo modo que los ficheros se organizan en directorios, los tipos de datos se organizan en
namespace, por un lado, esto permite tenerlos más organizados facilitando su localización. De
hecho, así es como se halla organizada la BCL, de modo que todas las clases más comúnmente
usadas en cualquier aplicación se hallan en el namespace llamado System, las de acceso
a bases de datos en System.Data, las de realización de operaciones de entrada/salida en
System.IO, etc.
Por otro lado, los namespace también permiten poder usar en un mismo programa varias clases
con igual nombre si pertenecen a espacios diferentes. La idea es que cada fabricante defina
sus tipos dentro de un namespace propio para que así no haya conflictos si varios fabricantes
definen clases con el mismo nombre y se quieren usar a la vez en un mismo programa.
104
.NET
Obviamente para que esto funcione no han de coincidir los namespace de cada fabricante, y
una forma de conseguirlo es dándoles el nombre de la empresa fabricante, o su nombre de
dominio en Internet, etc.
3-11
LÁMINA Importación de Namespace
Los así definidos pasarán a considerase miembros del namespace llamado. Aparte de clases,
estos tipos pueden ser también interfaces, estructuras, tipos enumerados y delegados. A
continuación se muestra un ejemplo en el que definimos una clase de nombre ClaseEjemplo
perteneciente a un namespace llamado EspacioEjemplo:
namespace EspacioEjemplo
{
class ClaseEjemplo
{}
}
Si no definimos una clase dentro de una definición de namespace -como se ha hecho en los
ejemplos de temas previos- se considera que ésta pertenece al llamado namespace global
y su nombre completamente calificado coincidirá con el identificador que tras la palabra
reservada class le demos en su definición (nombre simple).Aparte de definiciones de tipo,
también es posible incluir como miembros de un namespace a otros namespace. Es decir,
como se muestra el siguiente ejemplo es posible anidar namespace:
namespace EspacioEjemplo
{
namespace EspacioEjemplo2
{
class ClaseEjemplo
{}
}
}
105
Programación
.NET
namespace EspacioEjemplo.EspacioEjemplo2
{
class ClaseEjemplo
{}
}
PROYECTO
3-04 Errores
1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente código:
using System;
class ParámetrosEntrada
{
public int a = 1;
public static void F(ParametrosEntrada p)
{
p.a++;
}
public static void G(int p)
{
p++;
}
public static void Main()
{
int obj1 = 0;
ParámetrosEntrada obj2 = new ParámetrosEntrada();
G(obj1);
F(obj2);
Console.WriteLine(“{0}, {1}”, obj1, obj2.a);;
}
}
106
.NET
Arreglos
Los arreglos son estructuras de datos complejos (en el sentido de que no son atómicas) que
agrupan datos de un mismo tipo en particular, llamado el tipo base del arreglo. El tipo base de
un arreglo puede ser cualquiera de los tipos básicos de C#, o incluso algunos tipos complejos
como las clases.
Los arreglos, al igual que el resto de las variables se identifican con un nombre. Al emplear
ese nombre, se hace referencia a la estructura de datos como un todo, es decir, con todos
sus elementos. El lenguaje interpreta dicho nombre como un puntero. Cuando se utiliza el
nombre del arreglo en forma indexada, es decir, combinado con índices, se hace referencia a
un elemento particular, del tipo base, dentro de la estructura compleja.
3-10
VIDEO Arreglos
107
Programación
.NET
Declaración de arreglos
Los arreglos, al igual que las demás variables deben declararse antes de poder utilizarlas, y
cumplen con las mismas reglas de alcance y vida. Los arreglos de una sola dimensión reciben
también el nombre de vectores. La sintaxis de la declaración de un arreglo unidimensional es
la siguiente:
<tipo-base>[] <identificador>;
Observaciones:
¤¤ El <tipo-base> puede ser cualquiera de los tipos básicos del lenguaje, o incluso
algunos complejos como estructuras.
¤¤ El <identificador> es el nombre que distinguirá el arreglo.
¤¤ Los corchetes [] son obligatorios y denotan que el identificador descrito, del tipo-
base indicado, es un arreglo (lista de elementos del tipo base).
¤¤ En esta declaración NO se define el tamaño que tendrá el arreglo (aunque se puede
determinar las dimensiones, lo que se verá más adelante).
El tamaño del arreglo se determina en una segunda declaración, que puede ir en la siguiente
línea, como se muestra a continuación.
<identificador> = new <tipo-base> [<NumElementos>]
En esta declaración, se dimensiona el arreglo con una cantidad determinada de elementos, todos
correspondientes a tipo-base. Es posible hacer la declaración del arreglo y su dimensionamiento
en una misma sentencia:
<tipo-base>[] <identificador> = new <tipo-base>[<NumElementos>]
Adicionalmente es factible declarar, dimensionar, e inicializar un arreglo con todos sus
elementos, en una sola declaración:
<tipo-base>[] <identificador> = {valor1, valor2, ..., valorN};
Esta última declaración implícitamente dimensiona el arreglo para almacenar los N elementos
descritos, por lo que no se requiere dimensionarlo aparte. Es decir:
¤¤ Con los valores indicados entre llaves {} se inicializarán los elementos del arreglo.
¤¤ Los valores deben ser del <tipo-base> del arreglo.
También es factible declarar, dimensionar, e inicializar un arreglo con todos sus elementos, en
una sola declaración, pero sólo indicando un subconjunto de los valores que el arreglo puede
guardar:
108
.NET
Donde M<N, y N debe ser una expresión constante, como por ejemplo 10. Es factible hacer una
declaración donde M>N, en cuyo caso, el real dimensionamiento del arreglo se regirá por M.
3-12
LÁMINA Arreglos Multidimensionales
En C#, los arreglos se representan con un tipo específico, y por ello cuentan con sus propios
atributos y métodos específicos. Por ejemplo, para obtener el largo (la cantidad de elementos
dimensionados) de un arreglo, o para ordenarlo.
¤¤ Ordenar y revertir el orden de un arreglo: En el caso de los arreglos que sean de uno
de los tipos predefinidos (int, float, char, etc.), es factible ordenarlos en forma creciente,
aprovechando el método básico Sort() de la clase Array:
int [] numeros = { 4,5,2,3,1,6 }
Array.Sort(numeros); // 1,2,3,4,5,6
Búsqueda en arreglos
Para realizar las búsquedas en arreglos se usa la instrucción Foreach. Esta sentencia de control
de flujo, especialmente diseñada para este tipo de estructuras, donde se manejan listas de
elementos, todos del mismo tipo. Foreach depende de la definición previa de un arreglo de
elementos del mismo tipo, los cuales puede recorrer individualmente sin conocer el tamaño
explícitamente (como se requiere en otras instrucciones, por ejemplo en el for). La sintaxis de
uso es:
foreach ( <tipo> <variable> in <arreglo> ) {
<instrucciones>
}
109
Programación
.NET
Donde:
¤¤ < tipo> es el tipo básico de los elementos contenidos en el arreglo.
¤¤ <arreglo> es el arreglo de elementos a revisar.
¤¤ <variable> es un identificador de una variable local del foreach() que se usará
para ver un elemento del arreglo en cada iteración.
PROYECTO
3-05 Arreglos
1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UsoArreglo
{
class Program
{
int[] numeros;
public Program(int[] arreglo)
{
numeros = new int[arreglo.Length];
for (int i = 0; i < numeros.Length; i++)
numeros[i] = arreglo[i];
}
public void Ordenar() { Array.Sort(numeros); }
public void Reordenar() { Array.Reverse(numeros); }
public void Imprimir()
{
foreach (int i in numeros)
Console.Write(“{0} “, i);
Console.WriteLine();
}
}
class MainApp
{
static void Main()
{
int[] numeros = { 2, 5, 6, 1, 3, 4 };
Program a = new Program(numeros);
Console.WriteLine(“Arreglo original”);
a.Imprimir();
Console.WriteLine(“Arreglo ordenado”);
a.Ordenar();
a.Imprimir();
Console.WriteLine(“Arreglo invertido”);
110
.NET
a.Reordenar();
a.Imprimir();
Console.ReadLine();
}
}
}
2. ¿Qué función realliza este programa?
Listas
Una lista es un conjunto de nodos, cada uno de los cuales tiene dos campos: uno de información
y un apuntador al siguiente nodo de la lista. Además un apuntador externo señala el primer
nodo de la lista. Representación gráfica de un nodo:
La información puede ser cualquier tipo de dato simple, estructura de datos o inclusive uno o
más objetos. La dirección al siguiente nodo es un puntero. Representación gráfica de una lista:
Como decíamos, una lista es una secuencia de nodos (en este caso cuatro nodos). La
información de los nodos en este caso es un entero y siempre contiene un puntero que guarda
la dirección del siguiente nodo.raiz es otro puntero externo a la lista que contiene la dirección
del primer nodo.
De esta forma representamos gráficamente una lista vacía. Si insertamos un nodo en la lista
quedaría luego:
Igualmente podemos borrar nodos de cualquier parte de la lista. Esto nos trae a la mente el
primer problema planteado: el desarrollo del procesador de texto. Podríamos utilizar una lista
que inicialmente estuviera vacía e introdujéramos un nuevo nodo con cada línea que escribe el
operador. Con esta estructura haremos un uso muy eficiente de la memoria.
111
Programación
.NET
Tipos de listas
Según el mecanismo de inserción y extracción de nodos en la lista tenemos los siguientes tipos:
Una lista se comporta como una pila si las inserciones y extracciones las hacemos por un
mismo lado de la lista. También se las llama listas LIFO (Last In First Out - último en entrar
primero en salir)
Una lista se comporta como una cola si las inserciones las hacemos al final y las extracciones
las hacemos por el frente de la lista. También se las llama listas FIFO (First In First Out - primero
en entrar primero en salir). Una lista se comporta como genérica cuando las inserciones y
extracciones se realizan en cualquier parte de la lista. Podemos en algún momento insertar un
nodo en medio de la lista, en otro momento al final, borrar uno del frente, borrar uno del fondo
o uno interior, etc.
Pilas
Una lista se comporta como una pila si las inserciones y extracciones las hacemos por un
mismo lado de la lista. También se las llama listas LIFO (Last In First Out - último en entrar
primero en salir).
Una pila al ser una lista puede almacenar en el campo de información cualquier tipo de
valor (int, char, float, vector de caracteres, un objeto, etc).
Luego de realizar la inserción la lista tipo pila queda de esta manera: un nodo con el valor 10 y
raiz apunta a dicho nodo. El puntero del nodo apunta a null ya que no hay otro nodo después
de este.
Ahora el primer nodo de la pila es el que almacena el valor cuatro. raiz apunta a dicho nodo.
Recordemos que raiz es el puntero externo a la lista que almacena la dirección del primer
nodo. El nodo que acabamos de insertar en el campo puntero guarda la dirección del nodo
que almacena el valor 10. Ahora qué sucede si extraemos un nodo de la pila. ¿Cuál se extrae?
112
.NET
La pila ha quedado con un nodo. Hay que tener cuidado que si se extrae un nuevo nodo la pila
quedará vacía y no se podrá extraer otros valores (avisar que la pila está vacía).
3-11
VIDEO Pilas
Colas
Una lista se comporta como una cola si las inserciones las hacemos al final y las extracciones
las hacemos por el frente de la lista. También se las llama listas FIFO (First In First Out - primero
en entrar primero en salir).
3-12
VIDEO Colas
3-13
LÁMINA Pilas y Colas
PROYECTO
3-06 Pilas
1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PilasArray
{
113
Programación
.NET
class Program
{
static void Main(string[] args)
{
//Tamaño de pila
int Max = 5;
//Creando arreglo de pila
string[] pilaArreglo = new string[Max];
string Elemento = string.Empty;
string x = string.Empty;
//Menú de inicio usando un switch case
do
{
Console.Write(“\n\nMenú \n 1)Meter elemento a la
pila \n 2)Muestra pila \n 3)Obtiene elemento de la cima \n 4)
Suprime elemento de la cima \n 0)Salir \n\n”);
x = Console.ReadLine();
switch (x)
{
case “1”:
Console.Write(“INGRESAR VALORES A LA PILA
\n”);
Console.Write(“Escriba el dato a ingresar
a la pila:”);
Elemento = Console.ReadLine(); // Espera
entrada de teclado
while (string.IsNullOrEmpty(Elemento))
{
Console.Write(“Ingrese un valor válido
a la pila:”);
Elemento = Console.ReadLine();
}
if (estaLlena(pilaArreglo))
{
Console.Write(“La pila está llena,
imposible agregar nuevo valor \n”);
}
else
{
Meter(pilaArreglo, Elemento);//Usar
método de agregar elemento
}
break;
case “2”:
Console.Write(“MOSTRAR PILA \n”);
if (esVacia(pilaArreglo))
{
Console.Write(“La pila está vacia \n”);
}
else
{
Mostrar(pilaArreglo);//Usa método para
imprimir el contenido de la pila
}
break;
case “3”:
114
.NET
Console.Write(“OBTIENE ELEMENTO DE LA
CIMA \n”);
if (esVacia(pilaArreglo))
{
Console.Write(“La pila está vacia \n”);
}
else
{
Elemento = Cima(pilaArreglo);//Usa
método para obtener el ultimo valor que se agrego
Console.Write(“El elemento de la cima
es: {0} \n”, Elemento);
}
break;
case “4”:
Console.Write(“SUPRIME ELEMENTO DE LA
PILA \n”);
if (esVacia(pilaArreglo))
{
Console.Write(“La pila está vacia \n”);
}
else
{
Suprime(pilaArreglo);//Usa método para
eliminar el ultimo valor que se agrego
Console.Write(“El elemento de la cima
suprimido”);
}
break;
default:
Console.Write(“Opción no válida”);
break;
}
} while (!x.Equals(“0”));
}
//Método que valida si la pila esta vacia
static public bool esVacia(string[] _ pilaArreglo)
{
bool fl = true;
115
Programación
.NET
{
if ( _ pilaArreglo[i] != null)
{
count += 1; ;
}
}
if (count == _ pilaArreglo.Length) { fl = true; }
return fl;
}
//Método que verifica cual es el elemento que esta arriba
de la pila
static public string Cima(string[] _ pilaArreglo)
{
string elemento = string.Empty;
for (int i = _ pilaArreglo.Length - 1; i >= 0; i--)
{
if ( _ pilaArreglo[i] != null)
{
elemento = _ pilaArreglo[i];
break;
}
}
return elemento;
}
//Método que elimina un elemento de la pila
static public bool Suprime(string[] _ pilaArreglo)
{
bool fl = false;
for (int i = _ pilaArreglo.Length - 1; i >= 0; i--)
{
if ( _ pilaArreglo[i] != null)
{
_ pilaArreglo[i] = null;
fl = true;
break;
}
}
return fl;
}
//Método que agrega un elemento a la pila
static public bool Meter(string[] _ pilaArreglo, string
_ elemento)
{
bool fl = false;
for (int i = _ pilaArreglo.Length - 1; i >= 0; i--)
{
if ( _ pilaArreglo[i] != null)
{
_ pilaArreglo[i + 1] = _ elemento;
fl = true;
break;
}
else if ( _ pilaArreglo[i] == null && i == 0)
{
_ pilaArreglo[i] = _ elemento;
fl = true;
116
.NET
break;
}
}
return fl;
}
//Método que muestra el contenido de la pila
static public void Mostrar(string[] _ pilaArreglo)
{
for (int i = _ pilaArreglo.Length - 1; i >= 0; i--)
{
if ( _ pilaArreglo[i] != null)
{
Console.Write( _ pilaArreglo[i] + “\n”);
}
}
}
}
}
4. Responde correctamente:
Una lista es un conjunto de nodos, cada uno de los cuales tiene dos campos:
uno de información y un apuntador al siguiente nodo de la lista.
Es una lista que se comporta como una pila. Si las inserciones y extraccio-
nes las hacemos por un mismo lado de la lista recibe el nombre delistas
LIFO (Last In First Out - último en entrar primero en salir).
Cuando una lista se comporta como una cola, las inserciones las hace-
mos al final y las extracciones las hacemos por el frente de la lista, las
denominamos listas FIFO (First In First Out - primero en entrar primero en
salir).
117
Programación
.NET
¿Qué aprendiste?
TEMA A: A reconocer los principales elementos que componen el entorno de desarrollo en
.NET
TEMA D: A escribir una operación algebráica, cambiando valores a las variables que se
indican.
EVALUACIÓN
03
1. Define enumeración.
4. ¿Qué es un método?
118
Los objetos son entidades con valores bien diferenciados en sus
atributos, que son: estado, comportamiento e identidad.
Un id ad 04 P rogra mación
or ientad a a objeto s
B Realizar interfaces graficas usando los diferentes controles que proporciona C#.
Programación .NET
Autor:
Carlos Zepeda Chehaibar
Programación
.NET
4-01
VIDEO Clases
Definición de clases
La sintaxis básica para definir una clase es la que a continuación se muestra:
class <nombreClase>
{
<miembros>
}
De este modo se definiría una clase de nombre <nombreClase> cuyos miembros son los
definidos en <miembros> Los miembros de una clase son los datos y métodos de los que
van a disponer todos los objetos de la misma. Un ejemplo de cómo declarar una clase de
nombre A que no tenga ningún miembro es la siguiente:
class A
{}
Una clase así declarada no dispondrá de ningún miembro a excepción de los implícitamente
definidos de manera común para todos los objetos que creemos en C#. Aunque en C# hay
muchos tipos de miembros distintos, por ahora vamos a considerar que estos únicamente
pueden ser campos o métodos y vamos a hablar un poco acerca de ellos y de cómo se definen:
¤¤ Campos: Un campo es un dato común a todos los objetos de una determinada clase. Para
definir cuáles son los campos de los que una clase dispone se usa la siguiente sintaxis
dentro de la zona señalada como <miembros> en la definición de la misma:
<tipoCampo> <nombreCampo>;
El nombre que demos al campo puede ser cualquier identificador que queramos siempre y
cuando siga las reglas descritas en Aspectos Léxicos para la escritura de identificadores y
no coincida con el nombre de ningún otro miembro previamente definido en la definición
de clase.
120
Programación orientada a objetos
Según esta definición, todos los objetos de clase Persona incorporarán campos que
almacenarán cuál es el nombre de la persona que cada objeto representa, cuál es su edad
y cuál es su NIF. El tipo int incluido en la definición del campo Edad es un tipo predefinido en
la BCL cuyos objetos son capaces de almacenar números enteros con signo comprendidos
entre -2.147.483.648 y 2.147.483.647 (32 bits), mientras que string es un tipo predefinido
que permite almacenar cadenas de texto que sigan el formato de los literales de cadena.
121
Programación
.NET
4-01
LÁMINA Operador New
Accesibilidad
La accesibilidad es la característica que podemos aplicar a cualquiera de los elementos que
definamos en nuestro código. Dependiendo de la accesibilidad declarada tendremos distintos
tipos de accesos a esos elementos.
Los modificadores de accesibilidad que podemos aplicar a los tipos y elementos definidos en
nuestro código pueden ser cualquiera de los mostrados en la siguiente lista:
Estos modificadores de accesibilidad los podemos usar tanto en clases, estructuras, interfaces,
enumeraciones, delegados, eventos, métodos, propiedades y campos. Aunque no serán
aplicables en espacios de nombres (Namespace) ni en los miembros de las interfaces y
enumeraciones.
4-02
LÁMINA Anidación de tipos
Accesibilidad de Variables
Las variables declaradas dentro de un procedimiento solo son accesibles dentro de ese
procedimiento, en este caso solo se puede aplicar el ámbito privado, aunque no podremos usar
122
Programación orientada a objetos
Por ejemplo, las clases y estructuras definidas a nivel de un espacio de nombres solo pueden ser
declaradas como public o internal, y si no llevan un modificador de accesibilidad, por defecto
serán internal, es decir serán visibles en todo el proyecto actual. Por otro lado, las interfaces y
enumeraciones por defecto serán públicas.
Cuando la clase, estructura, interfaz o enumeración está definida dentro de otro tipo, la
accesibilidad predeterminada será private, pero admitirán cualquiera de los modificadores,
salvo las interfaces y enumeraciones que no pueden ser protected.
Por otro lado, los miembros de esos tipos también permiten diferentes niveles de accesibilidad,
en el caso de las interfaces y enumeraciones, siempre serán públicos, aunque no se permite
el uso de esa instrucción. Los miembros de las clases y estructuras serán privados de forma
predeterminada, en el caso de las clases, en esos miembros podemos indicar cualquiera de los
cinco niveles de accesibilidad, mientras que en las estructuras no podremos declarar ningún
miembro como protected o protected internal, ya que una estructura no puede usarse como
base de otro tipo de datos.
PROYECTO
4-01 Colas
1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ColasCirculares
{
class Program
{
static void Main(string[] args)
{
int T = 5; //Tamaño del arreglo
string[] ColaArreglo = new string[T]; //cola
string Elemento = string.Empty; //Dato
int Frente = -1; //Frente
int NE = 0;//Número de elementos en la cola
string x = string.Empty;
//Menú
do
{
Console.Write(“\n\nMenú \n 1)Meter elemento a la cola \n 2)Sacar
elemento de la cola \n 3)Muestra cola \n 0)Salir \n\n”);
123
Programación
.NET
x = Console.ReadLine();
//Switch que espera la opción
switch (x)
{
case “1”:
Console.Write(“INGRESAR VALORES A LA COLA \n”);
Console.Write(“Escriba el dato a ingresar a la cola:”);
Elemento = Console.ReadLine();
while (string.IsNullOrEmpty(Elemento))
{
Console.Write(“Ingrese un valor válido a la cola:”);
Elemento = Console.ReadLine();
}
if (!estaLlena(NE, T))
{
Meter(ref Frente, ref NE, T, ColaArreglo, Elemento);//
Llama al método de agregar elemento a la cola
}
else
{
Console.Write(“La cola está llena”);
}
break;
case “2”:
Console.Write(“SACAR ELEMENTO DE LA COLA \n”);
if (!estaVacia(NE))
{
Elemento = Sacar(ref Frente, ref NE, T, ColaArreglo);//
Llama al método que elimina un elmento de la cola
Console.Write(“El elemento que se saco de la cola
es {0}”, Elemento);
}
else
{
Console.Write(“La cola está vacia \n”);
}
break;
case “3”:
Console.Write(“MOSTRAR COLA \n”);
if (!estaVacia(NE))
{
MuestraCola(Frente, ColaArreglo);//Llama al método
para mostrar el contenido de la cola
}
else
{
Console.Write(“La cola está vacia \n”);
}
break;
default:
Console.Write(“Opción no válida”);
break;
}
} while (!x.Equals(“0”));
}
//Método que agrega elementos a la cola
public static void Meter(ref int _ frente, ref int _ numeroElementosCola,
int _ tamañoCola, string[] _ arregloCola, string _ elemento)
124
Programación orientada a objetos
{
int i;
if ( _ frente != -1)
{
i = ( _ frente + _ numeroElementosCola);
}
else
{
i = 0;
_ frente = i;
}
_ arregloCola[i] = _ elemento;
_ numeroElementosCola += 1;
}
//Método que elimina un elemento de la cola
public static string Sacar(ref int _ frente, ref int _ numeroElementosCola,
int _ tamañoCola, string[] _ arregloCola)
{
string _ elemento;
_ elemento = _ arregloCola[ _ frente];
_ arregloCola[ _ frente] = null;
//Mueve los índices para evitar desperdiciar un registro
for (int i = 0; i < _ arregloCola.Length; i++)
{
if (i < _ arregloCola.Length - 1)
{
_ arregloCola[i] = _ arregloCola[i + 1];
_ arregloCola[i + 1] = null;
}
}
_ frente = 0;
_ numeroElementosCola -= 1;
return _ elemento;
}
//Método que verifica que la cola no este llena
public static bool estaLlena(int _ numeroElementosCola, int _ tamañoCola)
{
bool fl = false;
//Si ambos son iguales la cola está llena
if ( _ numeroElementosCola == _ tamañoCola)
{
fl = true;
}
return fl;
}
//Método que verifica que la cola no este vacia
public static bool estaVacia(int _ numeroElementosCola)
{
bool fl = false;
//Si es igual a cero la cola está vacia
if ( _ numeroElementosCola == 0)
{
fl = true;
}
return fl;
}
//Método que muestra el contenido de la cola
private static void MuestraCola(int _ frente, string[] _ arregloCola)
125
Programación
.NET
{
for (int i = 0; i < _ arregloCola.Length; i++)
{
if ( _ frente == i)
{
Console.Write(“[Frente] “ + _ arregloCola[i]);
}
else
{
Console.Write(“[“ + i + “ ] “ + _ arregloCola[i]);
}
Console.Write(“\n”);
}
}
}
}
5. ¿Qué es accesibilidad?
126
Programación orientada a objetos
tema B Interfaz
Hasta ahora hemos resuelto todos los algoritmos haciendo las salidas a través de una consola
en modo texto. La realidad es que es muy común la necesidad de hacer la entrada y salida de
datos mediante una interfaz más amigable con el usuario.
En C# existen varias librerías de clase para implementar interfaces visuales. Utilizaremos las
Windows Forms. Para crear una aplicación que utilice esta librería debemos crear un proyecto.
Los pasos son los siguientes:
a. Desde el menú de opciones del Visual Studio .Net seleccionamos la opción: Archivo/
Nuevo proyecto...
127
Programación
.NET
e. Ahora podemos analizar la ventana Propiedades que nos muestra las propiedades del
objeto seleccionado del formulario. Podemos por ejemplo, si tenemos seleccionado el
botón cambiar la propiedad text (la misma cambia la etiqueta que muestra el botón):
4-02
VIDEO Interfaz gráfica
Ventana Propiedades
Esta ventana permite inicializar los valores de las propiedades del objeto que se encuentra
seleccionado en el formulario (Button, MonthCalendar, TextBox etc.). Por ejemplo si disponemos
dos objetos de la clase Button y seleccionamos uno de ellos podremos editar las propiedades
del mismo en ell.
Ventana Eventos
La ventana de eventos coincide con la ventana de propiedades. Para activar la lista de eventos
disponibles para un objeto debemos presionar el botón .
Podemos observar la lista de eventos que puede reaccionar el objeto seleccionado en ese
momento. Por ejemplo, si tenemos seleccionado un objeto de la clase Button el evento más
128
Programación orientada a objetos
común que deberemos implementar es el Click (este evento se dispara cuando en tiempo de
ejecución del programa se presiona el botón).
Para disponer el código para dicho evento debemos hacer doble clic sobre dicho evento (esto
hace que se active la ventana del editor y genere automáticamente el método asociado a dicho
evento):
private void button1 _ Click(object sender, EventArgs e)
{
4-03
LÁMINA Controles comunes
PROYECTO
4-02 Botones
1. Abre Visual C# 2010 Express. En un proyecto nuevo con la plantilla Aplicación de Windows
Forms, elabora un formulario debe contener:
¤¤ Siete botones.
¤¤ Un control Label
¤¤ A cada botón asignale un día de la semana.
¤¤ Cada botón debe responder al evento Click.
¤¤ Utiliza la instrucción label1.Text = “”; para que al presionar un boton el control label
muestre el día seleccionado.
2. Cuida el aspecto de tu formulario, conservando el orden de los días y utiliza las opciones
del la ventana propiedades para que el texto del control Label, sea atractivo visualemente.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
129
Programación
.NET
using System.Windows.Forms;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
label1.Text = “Lunes”;
}
private void button2_Click(object sender, EventArgs e)
{
label1.Text = “Martes”;
}
private void button3_Click(object sender, EventArgs e)
{
label1.Text = “Miercoles”;
}
private void button4_Click(object sender, EventArgs e)
{
label1.Text = “Jueves”;
}
private void button5_Click(object sender, EventArgs e)
{
label1.Text = “Viernes”;
}
private void button6_Click(object sender, EventArgs e)
{
label1.Text = “Sábado”;
}
private void button7_Click(object sender, EventArgs e)
{
label1.Text = “Domingo”;
}
}
}
130
Programación orientada a objetos
Como se ve, en este mensaje se indica que no se ha tratado una excepción de división por cero
(tipo DivideByZeroException) dentro del código del método Main() del tipo PruebaExcepciones.
Si al compilar el fuente hubiésemos utilizado la opción /debug, el compilador habría creado
un fichero .pdb con información extra sobre las instrucciones del ejecutable generado que
permitiría que al ejecutarlo se mostrase un mensaje mucho más detallado con información
sobre la instrucción exacta que provocó la excepción, la cadena de llamadas a métodos que
llevaron a su ejecución y el número de línea que cada una ocupa en el fuente:
131
Programación
.NET
Si se desea tratar la excepción hay que encerrar la división dentro de una instrucción try con
la siguiente sintaxis:
try
<instrucciones>
catch (<excepción1>)
<tratamiento1>
catch (<excepción2>)
<tratamiento2>
...
finally
<instruccionesFinally>
4-04
LÁMINA Uso de Catch
Si así se termina llegando al método que inició el hilo donde se produjo la excepción y tampoco
allí se encuentra un tratamiento apropiado se aborta dicho hilo; y si ese hilo es el principal (el
que contiene el punto de entrada) se aborta el programa y se muestra el mensaje de error con
información sobre la excepción lanzada ya visto.
Así, para tratar la excepción del ejemplo anterior de modo que una división por cero provoque
que a d se le asigne el valor 0, se podría reescribir G() de esta otra forma:
static public void G()
{
try
{
int c = 0;
int d = 2/c;
}
catch (DivideByZeroException)
{ d=0; }
}
Para simplificar tanto el compilador como el código generado y favorecer la legibilidad del fuente,
en los catchs se busca siempre orden de aparación textual, por lo que para evitar catchs absurdos
no se permite definir catchs que puedan capturar e xcepciones capturables por catchs posteriores
a ellos en su misma instrucción try.
132
Programación orientada a objetos
También hay que señalar que cuando en <instrucciones> se lance una excepción que
sea tratada por un catch de algún try -ya sea de la que contiene las <instrucciones>, de
algún try padre suyo o de alguno de los métodos que provocaron la llamada al que produjo la
excepción- se seguirá ejecutando a partir de las instrucciones siguientes a ese try.
El bloque finally es opcional, y si se incluye ha de hacerlo tras todas los bloques catch. Las
<instruccionesFinally> de este bloque se ejecutarán tanto si se producen excepciones
en <instrucciones> como si no. En el segundo caso sus instrucciones se ejecutarán tras
las <instrucciones>, mientras que en el primero lo harán después de tratar la excepción
pero antes de seguirse ejecutando por la instrucción siguiente al try que la trató. Si en un try
no se encuentra un catch compatible, antes de pasar a buscar en su try padre o en su método
llamante padre se ejecutarán las <instruccionesFinally>.
Sólo si dentro de un bloque finally se lanzase una excepción se aborta la ejecución del mismo.
Dicha excepción sería propagada al try padre o al método llamante padre del try que contuviese
el finally.
Aunque los bloques catch y finally son opcionales, toda instrucción try ha de incluir al menos
un bloque catch o un bloque finally.
PROYECTO
4-03 Excepciones
1. Abre Visual C# 2010 Express. En un proyecto nuevo de consola escribe el siguiente código:
using System;
class MiException:Exception {}
class Excepciones
{
public static void Main()
{
try
{
Console.WriteLine(“En el try de Main()”);
Método();
Console.WriteLine(“Al final del try de Main()”);
}
catch (MiException)
{
Console.WriteLine(“En el catch de Main()”);
}
finally
{
Console.WriteLine(“finally de Main()”);
}
133
Programación
.NET
}
public static void Método()
{
try
{
Console.WriteLine(“En el try de Método()”);
Método2();
Console.WriteLine(“Al final del try de Método()”);
}
catch (OverflowException)
{
Console.WriteLine(“En el catch de Método()”);
}
finally
{
Console.WriteLine(“finally de Método()”);
}
}
public static void Método2()
{
try
{
Console.WriteLine(“En el try de Método2()”);
throw new MiException();
Console.WriteLine(“Al final del try de Método2()”);
}
catch (DivideByZeroException)
{ Console.WriteLine(“En el catch de Método2()”); }
finally
{ Console.WriteLine(“finally de Método2()”); }
}
}
134
Programación orientada a objetos
tema D Archivos
La manera de almacenar y recuperar información que perdure en el tiempo se basa en el uso de
“memoria secundaria”, compuesta esencialmente por discos (diskettes, discos duros, CD, DVD,
etc.) y ocasionalmente cintas. En cualquiera de estos medios, la unidad de almacenamiento de
información se denomina archivo.
4-05
LÁMINA Archivos Complemento
Streams
La lectura y escritura a un archivo son hechas usando un concepto genérico llamado stream.
La idea detrás del stream existe hace tiempo, cuando los datos son pensados como una
transferencia de un punto a otro, es decir, como un flujo de datos. En el ambiente .NET se
puede encontrar muchas clases que representan este concepto que trabaja con archivos o con
datos de memoria.
System. Object
File Stream
Un stream es como se denomina a un objeto utilizado para transferir datos. Estos datos pueden
ser transferidos en dos posibles direcciones:
¤¤ Si los datos son transferidos desde una fuente externa al programa, entonces se
habla de “leer desde el stream”.
¤¤ Si los datos son transferidos desde el programa a alguna fuente externa, entonces
se habla de “escribir al stream”.
135
Programación
.NET
Frecuentemente, la fuente externa será un archivo, pero eso no necesariamente es el caso, por
lo que el concepto es utilizado ampliamente con fuentes de información externas de diversos
tipos. Algunas otras posibilidades fuera de los archivos incluyen:
¤¤ L eer o escribir datos a una red utilizando algún protocolo de red, donde la intención
es que estos datos sean recibidos o enviados por otro computador.
¤¤ Lectura o escritura a un área de memoria.
¤¤ La Consola
¤¤ La Impresora
¤¤ Otros ...
Algunas clases que C# provee para resolver este acceso a fuentes diversas incluyen las clases
de tipo: Reader y Writer.
Bufferedstream
Esta clase se utiliza para leer y para escribir a otro stream.El uso de streams para la lectura y
escritura de archivo es directa pero lenta. Por esta razón la clase BufferedStream existe y es
más eficiente. Puede ser utilizado por cualquier clase de stream. Para operaciones de archivo
es posible utilizar FileStream, donde el buffering está ya incluido.
Las clases más relacionadas con la escritura y lectura de archivos (File Input/Output o File I/O)
son:
Sin embargo, entendiendo que no es el mismo sentido el que se le quiere dar en la interpretación
de rutas de archivos (por ej: “C:\Mis documentos\Programas\ejemplo.cs”), se utiliza una sintaxis
particular, anteponiendo el símbolo ‘@’ antes del string con la ruta del archivo. Es decir:
Esta declaración evita la interpretación de los dos caracteres ‘\’ como símbolos especiales y el
string queda correctamente inicializado.
136
Programación orientada a objetos
PROYECTO
137
Programación
.NET
¿Qué aprendiste?
TEMA A: A reconocer que un objeto contiene toda la información que permite definirlo e
identificarlo frente a otros objetos.
EVALUACIÓN
04
1. 1. ¿Qué es una clase?
5. ¿Qué es un stream?
138