Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
.NET
Carlos Zepeda Chehaibar
Programacin
.NET
Coordinacin Editorial:
Ilustracin de Interiores:
Contenido
Programacin
.NET
Propuesta Pedaggica
Unidad1Lgica computacional
I
9
ALgica computacional
10
Actividad1-01Secuencias lgicas
10
tema
tema
BAlgoritmos 11
Actividad1-02Algoritmos 12
Prueba de escritorio
13
Actividad1-03Algoritmos 14
CClasificacin de algoritmos
16
Transcripcin 16
Compilacin y errores
16
tema
Actividad1-04Identificando errores
tema
17
DVariables 18
Actividad1-05Acerca de variables
18
Asignacin de valores
19
Actividad1-06Asignacin de variables
20
tema
EOperadores 21
Actividad1-07Operadores 22
FEstructuras bsicas
Primera estructura: Secuencia de acciones
Segunda estructura: Decisin de accin
tema
23
23
23
Actividad1-08Escribiendo algoritmos
24
27
28
tema
GDiagramas de flujo
Actividad1-10Diagramas de flujo
Evaluacin01
31
33
36
Unidad2Pseudocdigo 37
APseudocdigo 38
BDiagramas de Nassi Schneiderman (N-S) 39
Diagrama N-S de estructuras de decisin
40
tema
tema
Actividad2-01Diagramas N-S
tema
Actividad2-02Decisiones simples
41
44
45
Contenido
tema
DDecisiones en secuencia
Actividad2-03Decisiones en secuencia
tema
Actividad2-04Decisiones anidadas
tema
47
47
50
51
FCiclos 54
Lmina2-01Ciclos 54
Actividad2-05Ciclo Mientras
54
Actividad2-06Ciclo Para
56
Actividad2-07Ciclo Hacer Mientras
57
Actividad2-08Ciclo Hacer - Hasta
59
Actividad2-09Ciclos anidados
61
Actividad2-10Escribiendo pseudocdigos matemticos
63
tema
GArreglos y matrices
64
Lmina2-02Arreglos y matrices
64
Actividad2-11Arreglos 64
Actividad2-12Matrices 67
Lmina2-03Glosario de conceptos algoritmos
69
Evaluacin02
70
Unidad3.NET 71
AIntroduccin 72
Entorno de desarrollo (IDE) 72
tema
Lmina3-01Microsoft .NET
Video3-01Instalando Visual C# Express 2010
72
72
BEntorno de programacin
Hola mundo
73
75
75
75
75
tema
tema
CIntroduccin a la programacin en C#
78
78
Palabras reservadas
79
Literales 80
Variables 82
Contenido
Tipos de datos
83
83
85
tema
Video3-04Operadores Unarios
86
Constantes 87
Lmina3-05Operadores 87
Video3-05Operadores Binarios
87
Lmina3-06Variales de slo lectura
88
Enumeracin 88
Lmina3-07Enumeraciones 89
Proyecto3-02Clculo de sueldo
91
ESentencias de control
93
Condicionales 93
tema
Video3-06Condicional IF
Video3-07Instruccin Switch
93
94
Ciclos 94
Video3-08Ciclo While
Video3-09Ciclo For
Lmina3-08Sentencias de control
95
95
96
96
Proyecto3-03Sentencias de control
97
tema
Lmina3-09Mtodos externos
100
Parmetros 101
Namespace
102
Lmina3-10Otros parmetros
102
Lmina3-11Importacin de Namespace
103
Proyecto3-04Errores 104
Arreglos
105
Video3-10Arreglos 105
Declaracin de arreglos
Funciones mas comunes con arreglos
106
107
Contenido
Bsqueda en arreglos
107
Lmina3-12Arreglos Multidimensionales
107
Proyecto3-05Arreglos 108
Listas 109
Pilas 110
Colas 111
Video3-11Pilas 111
Video3-12Colas 111
Video3-13Pilas y Colas
111
Proyecto3-06Pilas 111
Evaluacin03
116
tema
117
118
118
Video4-01Clases 118
Accesibilidad
120
Lmina4-01Operador New
120
Lmina4-02Anidacin de tipos
120
Proyecto4-01Colas 121
BInterfaz 125
Ventana Propiedades
126
Ventana Eventos
126
tema
Video4-02Interfaz grfica
126
Lmina4-03Controles comunes
127
Proyecto4-02Botones 127
tema
Lmina4-04Uso de Catch
130
Proyecto4-03Excepciones 131
DArchivos 133
Streams 133
tema
Lmina4-05Archivos Complemento
133
Bufferedstream 134
Proyecto4-04Archivos externos
Evaluacin04
135
136
Recursos
Material Impreso
Este material forma parte de un conjunto de recursos, que conforman el
Programa de Informtica Educativa (PIE). Est organizado en bloques integrales
que incluyen todo lo necesario para aprender, practicar y evaluar habilidades
o competencias. Las explicaciones, imgenes, tablas, actividades, notas y
tips, apoyados con las lminas y tutoriales, permiten integrar la experiencia de
aprendizaje desde mltiples perspectivas. As, podemos afirmar que el PIE de
Grupo Educare es la mejor manera de aprender haciendo.
Recursos Digitales
Los recursos digitales que acompaan al material impreso, contienen videos que
te ayudarn a comprender los conceptos y a poner en prctica las habilidades
adquiridas. Adicionalmente encontrars 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.
Explicacin Iconogrfica
Actividad
Este icono nos indica un ejercicio que refuerza la parte terica de
este material.
Proyecto
Este icono nos indica un ejercicio que refuerza de manera prctica.
Video
Es el material digital de los recursos del programa. La representacin
en video de la parte terica.
Lmina de apoyo
La lmina es un recurso del profesor, que sirve como refuerzo
dinmico e interactivo a un tema denso, que complementa la teora
del material impreso.
Evaluacin
Este icono indica un elemento fundamental del proceso educativo
que sirve para valorar el proceso de aprendizaje.
NOTA
Nota
Las notas que vers dentro de tu texto, puntualizan la teora o los
aspectos ms importantes de un tema.
T IP
Tip
Es una sugerencia que complementa un tema del material impreso,
dando un panorama ms amplio al alumno sobre cmo ejecutar
una actividad de manera ms sencilla y prctica.
Unidad01Algoritmos
Unidad02Pseudocdigo
Unidad03.NET
Unidad04Programacin orientada a objetos
Programacin .NET
Autor:
Carlos Zepeda Chehaibar
Programacin
.NET
Unidad
Tema
Subtema
Lgica computacional
Algoritomos
Clasificacin de
algoritmos
Unidad 01 - Algoritmos
Variables
Prueba de escritorio
Caractersticas del
algoritmo
Transcripcin
Compilacin y errores
Asignacin de valores
Identificar el proceso
para la construccin de
algoritmos
Clasificar a los algoritmos
partiendo de los errores
en las secuencias
Operadores
II
Objetivos
Estructuras bsicas
Primera estructura:
Secuencia de acciones
Segunda estructura:
Decisin de accin
Tercera Estructura: Ciclos
de acciones
Diagramas de flujo
PropuestaDidctica
Competencias
Menciona ejemplos de
errores de sintaxis y errores
lgicos
Disea algoritmos
empleando la secuencia,
decisin y ciclos de
acciones.
Representa en un diagrama
de flujo algunos algoritmos
Tutorial Sugerido
Recursos
III
Programacin
.NET
Unidad
Tema
Subtema
Introduccin
Reconocer pseudocdigos
Diagramas de Nassi
Scheiderman (N-S)
Diagrama N-S de
estructuras de decisin
Identificar el Diagrama
(N-S) y su aplicacin en
los algoritmos
Decisiones
Pseudocdogos de las
estructura Si-Entonces- Si
no
Decisiones en secuencia
Decisiones en cascada o
anidadas
Ciclos
Unidad 02 - Pseudocdigo
IV
Objetivos
Arreglos
Matrices
Resolver problemas
matemticos utilizando
algoritmos
PropuestaDidctica
Competencias
Contruiye diferentes
algoritmos utilizando las
cundiones de los ciclos
Escribe con un
Pseudocdigo un programa
que de solucin a diferentes
ejercicios
Planea un programa, en
formato de Pseudocdigo,
para ca ejercicio matemtico
Tutorial Sugerido
Recursos
Programacin
.NET
Unidad
Tema
Introduccin
Entorno de Programacin
Unidad 03 - .NET
Introduccin a la
programacin en C#
Sentencias de Control
VI
Subtema
.NET Framwork
Entorno de ejecucin
Biblioteca de Clase Base
(BCL)
Sistema de tipo comn
(CTS)
Especificacin del
lenguaje comn (CLS)
Entorno de Desarrollo
(IDE)
Descarga e Instalacin
Interface de usuario
Estructura de un
programa
Palabras reservadas
Literales
Variables
Tipos de Datos
Operadores
Constantes y
enumeraciones
Condicionales
Ciclos
Uso de Break y Continue
Objetivos
Identificar la plataforma
.NET, tambin su kit
de desarrollo .Net
Framework, que le
permitirn desarrollar
aplicaciones simples o
complejas.
Conocer el entorno de C#
y su instalacin.
PropuestaDidctica
Competencias
Tutorial Sugerido
Actividad 3-01
Caractersticas de .NET
Proyecto 3-03 IF
Proyecto 3-04 Switch
Desarrolla aplicaciones
sencillas en modo consola
Recursos
VII
Programacin
.NET
Unidad
Contina
Unidad 03 - .NET
Tema
Mtodos, Arreglos y
Colecciones
Clases y Objetos
Unidad 04 - Programacin
orientada a objetos
Mtodos
Parmetros
Namespace
Arreglos
Declaracin
Funciones ms comunes
con arreglos
Colecciones
Listas
Pilas
Colas
Definicin de clases
Accesibilidad
Objetivos
Reconocer el concepto
de clase y el modo de
acceso a estas en la
programacin con C#.
Interfaces de Usuario
Realizar interfaces
graficas usando los
diferentes controles que
proporciona C#
Excepciones
Conocer y manejar
excepciones en C#
Archivos
VIII
Subtema
Streams
Nombrar los
requerimientos para el
manejo de archivos en C#
PropuestaDidctica
Competencias
Desarrolla ampliamente la
aplicacin de las matrices,
arreglos y colecciones de
objetos.
Controla resultados
inesperados en sus
aplicaciones mediante
excepciones.
Tutorial Sugerido
Recursos
IX
Diseo 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, dnde uno
establece poco o nulo conocimiento del tema por parte del alumno y cinco que
est completamente familiarizado con el mismo.
Habilidad
Desarrollo de algoritmos.
Realizar pruebas de escritorio a algoritmos.
Reconocer la clasificacin de los algoritmos.
Identificar variables.
Asignar variables.
Identificar constantes.
Representar grficamente algoritmos.
Definir el concepto de pseudocdigo.
RIdentificar la estructura de ciclos.
Estimar decisiones simples y anidadas.
Identificar arreglos y matrices.
Reconocer el entorno grfico de Visual C# 2010 Express.
Identificar lenguajes de programacin.
Aplicar sentencias de control a un programa.
Utilizar la linea de comandos de Windows.
Aplicacin de condicionales en programas.
Definir los conceptos pilas y colas.
Crear aplicaciones con interfaz grfica.
Aplicar Excepciones en aplicaciones.
Definir el concepto de entorno de desarrollo.
Un id ad
01
NIVEL: Intermedio
Lg ica co mputaciona l
Programacin .NET
Autor:
Carlos Zepeda Chehaibar
Programacin
.NET
tema
ALgica computacional
La lgica es la capacidad de pensar en soluciones alternativas. Se remonta a la poca de
Aristteles en la que desarroll reglas para establecer un razonamiento encadenado. La lgica
es una rama del conocimiento que nos permite determinar que algo est aprobado por la razn
como bien deducido o bien pensado. En pocas palabras en la forma ms obvia y ms fcil de
hacer algo.
La lgica es muy importante, ya que determina la manera en que se puede resolver un problema.
Es un nivel de abstraccin sin el cual no es posible estructurar los pasos que generen lo que
esperamos obtener.
La computadora trabaja con una lgica especial, exacta y matemtica. Aunque tal vez no te
hayas dado cuenta, todas las acciones que realizas en la computadora estn haciendo uso de
esta lgica en la forma de procedimientos o secuencias de pasos que hay que realizar para
lograr lo que se quiere.
ACTIVIDAD
1-01
Secuencias lgicas
12
Lgicacomputacional
tema
BAlgoritmos
Has pensado quin hizo los programas que conoces? y ms an tienes idea de cmo los
hicieron? La computadora permite solucionar una gran cantidad de problemas. El primer paso
que debes dar para la solucin de un problema es tener muy claro cul es el problema a resolver,
en otras palabras, cul es el objetivo. Parece una cosa muy obvia, pero la mayora 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 dnde vas y a dnde quieres llegar. Cuando
el objetivo es lo suficientemente claro podemos vislumbrar un camino lgico para llegar hasta
l. A ese camino lgico se le llama Algoritmo.
Una vez identificado el problema es necesario disear una solucin. Una forma sencilla de
aproximarse a una solucin, que despus 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 despus 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.
Si explicamos el algoritmo as, simplemente es un texto. Ahora podemos organizar el algoritmo
para que sea ms esttico y entendible. Asignndole un nombre al algoritmo lo generalizamos
para cualquier adquisicin de software.
13
Programacin
.NET
ACTIVIDAD
1-02
Algoritmos
14
Lgicacomputacional
Existen problemas que pueden resultar tan complejos que podramos requerir de cientos o
hasta miles de lneas para resolverlos. Adems, sabemos que un problema se puede resolver
de varias maneras diferentes. El anlisis de algoritmos busca que las soluciones sean lo ms
sencillas posibles, an para problemas muy complejos. La manera en que buscamos esta
solucin ptima est fundamentada en la lgica. Es ms, sin la lgica no podramos decidir
entre cul de dos soluciones es ms sencilla, simplemente porque esta decisin requiere
tambin del pensamiento lgico.
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.
Caractersticas del algoritmo
Un algoritmo debe tener al menos las siguientes caractersticas:
Ser preciso. Las actividades o pasos del algoritmo deben desarrollarse en orden
estricto, ya que el desarrollo de cada paso debe seguir un orden lgico.
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 informacin
que necesita para poder realizar un proceso.
15
Programacin
.NET
Ser finito. Esto indica que el nmero de pasos de un algoritmo debe ser limitado,
es decir, los pasos a seguir deben de tener un fin.
Presentacin. El algoritmo debe ser entendible para cualquier persona, no slo
para la persona que lo dise. Ms adelante veremos otras formas de presentar
un algoritmo, como por ejemplo en pseudocdigo, en un diagrama de flujo o en
diagramas de Nassi/Schneiderman, entre otras.
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
16
nmero
60
nmero/2 = 30
residuo = 0
Es par
Lgicacomputacional
b.
nmero
15
nmero/2 = 7
residuo = 1
Es impar
c.
nmero
2
nmero/2 = 1
residuo = 0
Es par
4. Pide a un compaero que realice a tu algoritmo cinco pruebas de escritorio utilizando los
nmeros 0, 4, 7, y 11. Utiliza este espacio para las pruebas.
Nmero = 0
el nmero es menor o igual a 0
no es primo
Nmero = 4
4/1 = 4 4/2 = 2
no es primo
Nmero = 7
7/1 = 7 7/2 = 3.5 7/3 = 2.33
es primo
Nmero = 11
11/1 = 11
11/4 = 2.75
11/2 = 5.5 11/5 = 2.2
11/3 = 3.66
es primo
17
Programacin
.NET
tema
CClasificacin de algoritmos
Hay dos clasificaciones para los algoritmos:
A lgoritmos informales
Algoritmos computacionales
Los algoritmos informales son aquellos que no se realizan para una computadora, sino se
disean para ser ejecutados por el ser humano. Todos los das 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 ms confiable.
Transcripcin
Los algoritmos computacionales no pueden ser ejecutados directamente. La transcripcin es el
proceso a travs del cual convertimos un algoritmo en un listado de instrucciones entendibles
para la computadora. Estas instrucciones deben ajustarse a las reglas sintcticas de un lenguaje
de programacin. Las reglas sintcticas de un lenguaje de programacin son las restricciones
tcnicas sobre las cuales est construido el lenguaje.
As, un programa computacional es un algoritmo escrito con las instrucciones, restricciones y
reglas de un lenguaje de programacin.
Compilacin 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 programacin, necesitas
hacer una compilacin.
La compilacin es el proceso mediante el cual la computadora revisa que el programa que has
escrito cumpla con las reglas sintcticas del lenguaje de programacin que ests utilizando. El
compilador es el encargado de hacer esta revisin y te ayuda a detectar los errores de sintaxis
y de precaucin.
Errores de sintaxis. Son errores representados en la omisin de alguna o algunas reglas
sintcticas del lenguaje de programacin. Es como un error ortogrfico en el lenguaje que ests
programando. Por ejemplo, si en algn lenguaje hay una instruccin print y por error t escribes
prant, el programa no funcionar, pues hay un error de sintaxis y la computadora no puede
adivinar que en realidad queras escribir print. Algunas veces se requiere utilizar parntesis,
comas, puntos o corchetes. Si no se cumple con esas reglas de lenguaje, el programa no puede
funcionar. Los errores de compilacin son los ms fciles de detectar y corregir.
18
Lgicacomputacional
ACTIVIDAD
1-04
Identificando errores
19
Programacin
.NET
tema
DVariables
En programacin, una variable es un campo de memoria que almacena informacin, la cual
puede cambiar en cualquier momento.
ACTIVIDAD
1-05
Acerca de variables
Reflexin previa:
1. Qu significa la palabra variable? y en lgebra qu es una incgnita o variable?
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 frmula para calcular el rea de un rectngulo (rea=base x altura) cules son las
variables? Cmo las puedes identificar?
Las tres, si yo cambio los valores de la base o la altura, el rea cambiar
tambin su valor.
3. Todas las frmulas matemticas tienen variables? Por qu?
S, las frmulas son para casos generales. As se pueden obtener los
valores correctos para cualquier caso especfico que exista.
4. Qu es lo opuesto de una variable?
Una constante que no puede cambiar su valor.
Para poder utilizar variables en un programa debers especificar primero qu tipo de informacin
va a almacenar. A esto se le conoce como declaracin de variables.
Existen diferentes tipos de datos que una variable puede almacenar, a continuacin se describen:
Tipo entero. Una variable de tipo entero solamente puede almacenar valores numricos sin
punto decimal, por lo tanto sus operaciones jams van a generar valores decimales, ya que
operan con un juego de reglas llamado Aritmtica Entera.
Tipo real. sta puede almacenar nmeros que tienen punto decimal y en sus operaciones
puede generar decimales, ya que opera con un juego de reglas llamado Aritmtica Real.
20
Lgicacomputacional
Tipo caracter. Una variable de tipo caracter puede almacenar valores equivalentes del cdigo
ASCII (American Standar Code for Infomation Interchange). ASCII es un cdigo internacional de
equivalencias internas en el sistema binario, por lo que una variable caracter puede almacenar
cualquier cadena de caracteres que hayan sido tecleados.
Asignacin de valores
Para asignar un valor a una variable (cargar una variable), en la mayora de los lenguajes de
programacin se utiliza el signo = (igual a), que indica a la computadora que va a almacenar
el valor que se encuentre a la derecha del smbolo, dentro de la variable que se encuentre a la
izquierda. Por ejemplo:
A=8
B=A
C=A+B
Una variable slo puede guardar un valor a la vez: si volviramos a asignarle otro valor a la
variable A, sta cambiara el valor 8 por el nuevo valor asignado. Entonces concluimos que:
Slo puede haber una variable del lado izquierdo del signo igual.
Del lado derecho del signo puede haber una constante, una expresin u otra variable.
Cada vez que se asigna un nuevo valor a una variable, se pierde el valor anterior.
Ejemplos de asignacin de variables. Observa cmo las variables van adquiriendo nuevos
valores conforme se ejecutan las operaciones:
Valor despus de cada instruccin
A= 10
10
B= 15
10
15
C=20
10
15
20
A=A+B
25
15
20
B=B-10
25
20
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 ejecucin de un algoritmo
o programa.
21
Programacin
.NET
ACTIVIDAD
1-06
Asignacin de variables
Realiza una prueba de escritorio para cada uno de los siguientes programas. Anota el valor de las
tres variables despus de ejecutar cada lnea o instruccin.
1.
3.
a=3
b=8
c=1
a=5
b=9
c=7
a=a+1
b = b -2
c = c+ 3
a
3
3
3
5
5
5
6
6
6
b
?
8
8
8
9
9
9
7
7
c
?
?
1
1
1
7
7
7
10
2.
a=1
b=2
c=3
a = a+ b
b = a-b
c = a* b
a = a/b
b = a+ b
c = a* b
a
1
1
1
3
3
3
3
3
3
b
2
2
2
1
1
1
4
4
c
3
3
3
3
3
3
12
4.
5.
22
a=10
b=10
c= 1 0
a = a+5
b = a+3
c= a+2
a = b+4
b = b+5
c= c+8
a
10
10
10
15
15
15
22
22
22
a=10
b=1
c =4
a=a+c
b=a+c
c =a+c
a=c +5
b=c +b
c =a+b+c
a
10
10
10
14
14
14
23
23
23
b
1
1
1
18
18
18
36
36
c
4
4
4
18
18
18
77
a=5
b=5
c =5
a=a+a
b=b+b
c =c +c
a=a+b+c
b=a+b+c
c =a+b+c
a
5
5
5
10
10
10
30
30
30
b
5
5
5
10
10
10
50
50
c
5
5
5
10
10
10
90
b
10
10
10
18
18
18
23
23
c
10
10
10
17
17
17
25
Lgicacomputacional
tema
EOperadores
Los operadores son signos que expresan relaciones entre variables y/o constantes de las cuales
se obtiene un resultado. La accin que realice un operador depende mucho del lenguaje de
programacin que estemos utilizando. Los operadores ms conocidos son:
x = 2 + 8/4 + 3
El valor que tomar x es 7.
x = (2 + 8)/(4 - 1)
El valor que tomar x es 10/3 3.333333.
23
Programacin
.NET
ACTIVIDAD
1-07
Operadores
Evala las siguientes expresiones. Escribe en una sola lnea la expresin algebraica, tal y como
se debe escribir en la computadora, usando parntesis y los operadores adecuados. Despus
evala cada expresin obteniendo el valor final de x, suponiendo en todos los casos que:
a=3
b=4
c=2
d=1
a + bc
x= a
b+c
1.
2.
x=
3.
4.
5.
24
b
a + b + bc
b
a+ c+
a
a+
a + b + d *c a
x=
a + b * dc
a+b
x = ab bc
b- c
+b
a + ac +
d
x = a+
a
a+ b
Expresin: x=(a+b/(a+b+b/c))/(a+b/(c+a))
x=
(3+4/(3+4+4/2))/(3+4/(2+3))= 155/171
Expresin: x=(a+b+c/d*a)/(a+b*c/d)
x= (3+4+2/1*3)/(3+4*2/1)= 23/33
Expresin: x=(a/b+b/c)/(a/b - b/c)
x= (3/4+4/2)/(3/4 - 4/2)= -11/5
Expresin: x=a+(a+(a+b)/(c+d))/(a+a/b)
x=
3+(3+(3+4)/(2+1))/(3+3/4)= 199/45
Lgicacomputacional
tema
FEstructuras bsicas
Una estructura se define como un esquema que nos permite representar una idea de manera
ms simplificada, adems de restringir un poco la lgica algortmica. Por ejemplo, cada persona
puede tener su propia manera de hacer un pastel, por esta razn es que una estructura puede
restringir a que slo se realice de ciertas formas convenientes. Existen tres estructuras bsicas
del razonamiento en las que nos basamos para realizar una accin o varias acciones:
Notars que para utilizar una estructura de secuencia slo tenemos que indicar en qu orden
se ejecutar cada paso y lo que se tiene que hacer.
25
Programacin
.NET
Conforme utilizas las estructuras de secuencias junto con las estructuras de decisiones, el
algoritmo se aproxima ms a la realidad. Observa que en las estructuras de decisin siempre se
debe indicar el camino que se debe tomar cuando se cumpla la condicin, pero no forzosamente
tienes que indicar qu accin tomar en caso de no cumplir la condicin.
ACTIVIDAD
1-08
Escribiendo algoritmos
Para cada uno de los siguientes problemas, escribe un algoritmo que lo solucione. Despus pide
a un compaero que ejecute una prueba de escritorio a tu algoritmo para asegurarse de que, sin
importar los datos que se usen, el algoritmo no falla.
1. Algoritmo para elegir la ropa adecuada para salir a cualquier tipo de restaurante.
Inicio
26
Lgicacomputacional
Fin
Prueba de escritorio:
restaurante = casual
El restaurante es elegante? = no
El restaurante es casual? = s
Es para hombre? = s
Elegir pantaln 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
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
Programacin
.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
Fin
1. Variable total = 0
2. Sumar el precio del artculo al total
3. Si es el ltimo artculo
Si total > 500
total = total - 10
Si no
regresar al paso 2
Prueba de escritorio:
total
0
150
200
450
510
artculo
150
50
250
60
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
Fin
28
1. variable total = 0
2. total = total + precio del artculo
3. si hay ms artculos
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
Lgicacomputacional
Estructuras
Algortmicas
Secuenciales
- Asignacin
- Entrada
- Salida
Condicionales
- Simples
- Dobles
- Mltiples
Cclicas
- Para
- Mientras Que
- Repita Hasta
Cada bloque de instrucciones dentro de una condicin o un ciclo debe indicar el inicio y fin.
29
Programacin
.NET
ACTIVIDAD
1-09
Para cada uno de los siguientes problemas, escribe un algoritmo que lo solucione. Despus pide
a un compaero que ejecute una prueba de escritorio a tu algoritmo para asegurarse de que, sin
importar los datos que se usen, el algoritmo no falla. Debes cuidar que haya siempre un inicio y
un fin, tanto para todo el algoritmo como para cada bloque de instrucciones en condiciones o
ciclos.
1. Un vendedor de arena tiene que despachar 2 kg. de producto a un cliente. Para pesar el
producto el vendedor tiene una bscula. Escribe el algoritmo ms adecuado que puedas
pensar para despachar la cantidad exacta de arena.
Inicio
Fin
30
puo
200 g
300 g
250 g
400 g
350 g
300 g
300 g
-50 g
-50 g
Lgicacomputacional
2. El guardia de un estadio tiene que verificar los boletos de los espectadores. Slo podrn
entrar quienes tengan boleto azul. No se sabe cuntos espectadores asistirn al evento.
Escribe el algoritmo que debe seguir el guardia para cumplir con las reglas.
Inicio
Fin
Boleto
Aceptar?
Azul
Rojo
Azul
Azul
Rojo
S
No
S
S
No
31
Programacin
.NET
Salida de pantalla
32
Y
10
11
12
13
14
15
16
Salida de pantalla
16
Lgicacomputacional
tema
GDiagramas de flujo
Un diagrama de flujo es la forma de representar algoritmos de forma grfica. El diagrama
permite que la secuencia a seguir sea ms entendible, especialmente cuando hay condiciones
y ciclos. Se basa en la utilizacin de diversos smbolos universales que representan operaciones
especficas. Se les llaman diagramas de flujo por que los smbolos se conectan por medio
de flechas para indicar la secuencia de una operacin. A continuacin se describen algunos
smbolos utilizados para hacer diagramas de flujo.
El uso del rectngulo representa un proceso o accin a realizarse, como por ejemplo la
asignacin de un valor a una variable.
El rombo se utiliza para representar una condicin o decisin. Normalmente el flujo de
informacin entra por arriba y sale por un lado si la condicin se cumple o por el lado opuesto
si la condicin no se cumple. En el interior del rombo se escribe la condicin que hay que
evaluar.
El paralelogramo indica un proceso de entrada o salida, en otras palabras, indica un proceso
donde se recibe o donde se entrega informacin.
El valo representa el inicio o el fin de un algoritmo. Todas las acciones a realizarse en el
algoritmo se encuentran entre el inicio y fin del diagrama de flujo.
Este smbolo representa una entrada de datos utilizando el teclado y describe la asignacin
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 smbolos se conocen como conectores. Representan la continuacin de un diagrama
cuando ste no cabe en una sola hoja. El crculo hace referencia a la continuacin de un
diagrama dentro de la misma hoja, mientras que el pentgono hace referencia hacia la
continuacin de un diagrama en otra pgina.
Este smbolo representa una salida de datos en un dispositivo electrnico, por ejemplo en una
impresora.
Este smbolo representa una salida de datos pero slo en el monitor.
Las flechas representan la forma de conexin entre los dems smbolos. La direccin de la
flecha determina el flujo de ejecucin.
Recuerdas el algoritmo para vigilar a travs de una ventana? Observa cmo se ve mucho ms
claro en un diagrama de flujo.
33
Programacin
.NET
Inicio
Llegar puntual a
la jornada laboral
Ubicarnos en
nuestro lugar
de trabajo
1
Estamos
sentados?
Falso
Verdadero
Levantarnos del
lugar donde
estamos sentados
Orientarnos hacia
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
laboral?
Falso
Verdadero
Fin
Recuerda que para cada problema puede haber una gran variedad de algoritmos, ya que todos
utilizamos nuestra propia lgica. 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
Lgicacomputacional
ACTIVIDAD
1-10
Diagramas de flujo
Entrar al vehculo
Es vehculo
estndar
Verdadero
Falso
Pisar el clutch
Insertar la llave en la
ranura
Girar la llave
Fin
35
Programacin
.NET
2. Utiliza el algoritmo para determinar si un nmero entero X es par o impar y dibuja el diagrama
de flujo.
Inicio
Determinar el
problema
Elegir una posible
solucin
Indicar los pasos
a seguir
Realizar una
prueba del
algoritmo
La prueba
encontr errores
Falso
Verdadero
Corregir los
errores
La solucin fue
satisfactoria
Verdadero
Fin
36
Falso
Lgicacomputacional
3. Dibuja un diagrama de flujo del algoritmo que te permita saber si un nmero entero X es
primo.
A
Inicio
Bandera = 0
Bandera = 0
Falso
Verdadero
El nmero
El nmero
es primo
no es primo
nmero
nmero < 1
Fin
Verdadero
Falso
nmero = 2
Verdadero
A
Falso
i=2
Bandera = o e
i < numero/2
Falso
Verdadero
nmero MOD i = 0
Falso
Verdadero
Bandera = 1
i=i+1
37
Programacin
.NET
Qu aprendiste?
TEMA A: Describe detalladamente las secuencias lgicas dentro de la computacin.
TEMA B: A definir un algoritmo como un conjunto de pasos que permiten alcanzar un
objetivo.
TEMA C: Mencionar ejemplos de errores de sintaxis y errores lgicospara tener la certeza de
que logra su objetivo.
TEMA D: A diferenciar las caractersticas entre los trminos variable, incognita y constante.
TEMA E: A expresar relaciones entre variables y/o constantes por medio de operadores para
obtiener un resultado.
TEMA F: A disea algoritmos empleando la secuencia, decisin y ciclos de acciones.
TEMA G: A representar en un diagrama de flujo algunos algoritmos.
EVALUACIN
01
1. Qu es una variable?
Es un campo de memoria que almacena informacin, la cual puede
cambiar en cualquier momento.
2. Qu es una incgnita?
Una literal de la cual se desconoce su valor.
3. Describe qu es compilacin:
Es el proceso mediante el cual la computadora revisa que el programa que
has escrito cumpla con las reglas sintcticas del lenguaje de programacin
que ests utilizando
38
El pseudocdigo, tambin llamado programacin falsa, es una gua que sirve para
que el programador sepa los pasos a seguir para lograr un resultado y as adecuarlo al
lenguaje de programacin de su preferencia.
Un id ad
02
NIVEL: Intermedio
Pseudocd igo
Programacin .NET
Autor:
Carlos Zepeda Chehaibar
Programacin
.NET
tema
APseudocdigo
El pseudocdigo es un lenguaje de especificacin de algoritmos, de uso fcil y sintaxis similar
al lenguaje de programacin. Es un paso ms 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 pseudocdigo,
en vez de en palabras comunes, su traduccin a cualquier lenguaje de programacin ser
muy sencilla. Para escribir pseudocdigos hay que cumplir algunos requisitos que facilitarn la
posterior transcripcin del algoritmo a un lenguaje de computadora:
Asignar un nombre. Se debe poner un ttulo al algoritmo que haga referencia a su
contenido o funcin.
Declarar variables. Es necesario especificar los nombres de las variables y el tipo
de dato que van a almacenar.
Delimitar estructuras. Todas las estructuras deben delimitarse entre un Inicio y un Fin.
Identificar mensajes. Los mensajes que deseas que se muestren al usuario debern
escribirse entre comillas.
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 ms variables del mismo tipo, separando sus nombres con
comas, por ejemplo:
Entero: edad
Real: estatura, peso, sueldo
Cadena: nombre, direccin
Para asignar un valor a una variable primero se escribe el nombre de la variable, luego el signo
de igualdad (=) y despus 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 pseudocdigo,
veamos un ejemplo simple que slo utiliza una secuencia de instrucciones. Puedes comprender
su funcionamiento? Realiza una prueba de escritorio.
Programa Identificar usuario
Inicio
Cadena: nom
Escribir Bienvenido. Teclea tu nombre
Leer nom
Escribir Hola, nom
Fin
40
Pseudocdigo
tema
Este simple algoritmo se puede representar con un diagrama de flujo, como se muestra a
continuacin:
Inicio
b ,h
A= b * h
P= 2* (b+h)
A, P
Fin
41
Programacin
.NET
Tambin sabemos que, para que la traduccin posterior a un lenguaje de programacin sea
ms sencilla, es conveniente escribirlo en forma de pseudocdigo, por ejemplo as:
Pseudocdigo para calcular el rea y permetro de un rectngulo.
Inicio
Entero: b, h, A, P
Pedir b
Pedir h
A = b*h
P=2*(b+h)
Mostrar A
Mostrar P
Fin
Inicio
Entero: b, h, A, P
Leer b, h
A=b*h
P = 2 * (b + h)
Escribir El rea es:, A
Escribir El permetro es:, P
Fin
42
Inicio
Entero:num, absnum
Leer num
num<0
Si
No
absnum=num*(-1) absnum=num
Escribir valor absoluto, absnum
Fin del algoritmo
Pseudocdigo
Inicio
Entero: n1, n2
Leer n1, n2
n1 = n2
Si
Si
Escribir
Nmeros iguales
No
n1 > n2
Escribir
n1,Mayor
Escribir
n2,Menor
No
Escribir
n2,Mayor
Escribir
n1,Menor
ACTIVIDAD
2-01
Diagramas N-S
Representa en diagrama N-S (diagrama de Chapin) los siguientes algoritmos. Recuerda que la
claridad es importante, por lo que debes utilizar regla para tener una mxima limpieza.
1. Algoritmo que te permita encender un vehculo.
Inicio
Abrir la puerta del vehculo
Entrar al vehculo
Es estndar
Si
No
Verificar que est
Pisar el clutch
en parking
Insertar la llave en la ranura
Girar la llave
Fin del algoritmo
43
Programacin
.NET
44
No
Mostrar:
Es impar
Pseudocdigo
Si
No
Mostrar:
Mostrar:
El nmero El nmero
es primo no es primo
Leer nmero
nmero > 1
nmero = 2 o nmero = 1
Si
i=2
bandera = 0
e i < nmero/2
Bandera = 0
No
nmero MODi= 0
Si
bandera = 1
No
i=i+1
45
Programacin
.NET
tema
Si no
Fin_Si
46
Pseudocdigo
ACTIVIDAD
2-02
Decisiones simples
Realiza un algoritmo para cada uno de los ejercicios, utilizando decisiones simples.
1. Determinar si un alumno aprueba o reprueba una materia, basado en el promedio de 5
calificaciones. Escrbelo en pseudocdigo.
Inicio
Fin
Fin
Entero: Edad = 0
Leer Edad
Si Edad > 18
Mostrar Mayor de edad
Si no
Mostrar Menor de edad
Fin si
47
Programacin
.NET
Fin
Fin si
Si bandera = 0
Mostrar Es primo
Si no
Mostrar No es primo
Fin si
Fin
Entero: numero
Leer numero
Si numero MOD 2 = 0
Mostrar El nmero es par
Fin si
Fin
48
Entero numero
Leer numero
Si numero MOD 2 <>
Mostrar Es impar
Fin si
Pseudocdigo
tema
DDecisiones en secuencia
Este tipo de estructura se utiliza cuando se deben realizar varias preguntas (condiciones) en las
que no es importante el Si no de cada decisin.
Su esquema general es el siguiente:
Si condicin1 Instrucciones a ejecutar en caso de que la condicin1 sea Verdadera
Si condicin2 Instrucciones a ejecutar en caso de que la condicin2 sea Verdadera
Si condicin3 Instrucciones a ejecutar en caso de que la condicin3 sea Verdadera
Si condicin4 Instrucciones a ejecutar en caso de que la condicin4 sea Verdadera
Realiza una prueba de escritorio del siguiente ejemplo.
Inicio
Entero:
numero
Escribir Digite un nmero
Leer numero
Si numero =0
Llamar a recepcin
Si numero =1
Llamar a vigilancia
Si numero =2
Llamar a mantenimiento
Si numero >2
Mensaje Error, nmero invalido
Fin
ACTIVIDAD
2-03
Decisiones en secuencia
Realiza un algoritmo para cada uno de los ejercicios, utilizando decisiones en secuencia.
1. Realiza un algoritmo para un buzn de voz de al menos 4 opciones. Escrbelo como
pseudocdigo.
Inicio
Entero: numero
Mostrar Elija una opcin
Leer numero
Si numero = 0
Escuchar mensajes nuevos
49
Programacin
.NET
Fin
Si numero = 1
Escuchar mensajes antiguos
Si numero = 2
Borrar mensaje
Si numero = 3
Mandar un mensaje a otro usuario
Si numero > 3
Mostrar Opcin no vlida
2. Leer una calificacin numrica y determinar si es Deficiente, Regular, Bien, Muy bien o
Excelente. Escrbelo como pseudocdigo.
Inicio
Fin
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
3. Realizar un algoritmo que indique, segn el nmero, el nombre del mes. Escrbelo como
pseudocdigo.
Inicio
50
Entero: mes
Leer mes
Si mes < 0 o mes > 12
Mostrar Nmero no vlido
Si mes = 1
Mostrar Enero
Si mes = 2
Mostrar Febrero
Pseudocdigo
Fin
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
51
Programacin
.NET
tema
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) slo se ejecuta
en el caso de que la primera condicin sea falsa. Si la primera condicin es verdadera (si
llueve), todo el segundo condicional es ignorado. El esquema general es el siguiente.
Si condicin1 entonces
Instrucciones a ejecutar en caso de que la condicin1 sea Verdadera
Si no
Si condicin2 entonces
Instrucciones a ejecutar en caso de que la condicin2 sea Verdadera
Si no
Instrucciones a ejecutar en caso de que la condicin2 sea Falsa
Fin _ si
Fin _ si
Instrucciones a ejecutar en caso de que la condicin2 sea Verdadera
Si no
Instrucciones a ejecutar en caso de que la condicin2 sea Falsa
Fin_si
Si no
Fin_si
De acuerdo a las necesidades de cada algoritmo, se pueden anidar dos, tres o ms decisiones.
Realiza una prueba de escritorio de este ejemplo: se debe leer un nmero entero y determinar
si es de uno, dos, tres, cuatro o ms dgitos. Adems hay que verificar que el nmero no sea
negativo.
52
Pseudocdigo
ACTIVIDAD
2-04
Decisiones anidadas
Realiza un algoritmo para cada uno de los siguientes ejercicios, utilizando decisiones anidadas
o en cascada.
1. Leer un nmero entero de dos dgitos y determinar si un dgito es mltiplo del otro.
Inicio
53
Programacin
.NET
Si no
Fin
Fin si
2. Leer dos nmeros 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 nmeros
ledos.
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 nmeros enteros de 2 dgitos. Si la diferencia entre los dos nmeros es par mostrar
en pantalla la suma de los dos nmeros; si dicha diferencia es un nmero menor que 10
entonces mostrar en pantalla el producto de los dos nmeros; y si la diferencia entre los
nmeros ledos termina en 4 mostrar en pantalla la diferencia.
54
Pseudocdigo
Inicio
Fin
Fin
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
55
Programacin
.NET
tema
FCiclos
Un ciclo es una estructura que permite repetir o iterar un conjunto de acciones la cantidad de
veces que determine una condicin. 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 ms conveniente o que permite escribir menos instrucciones.
2-01
LMINA
Ciclos
ACTIVIDAD
2-05
Ciclo Mientras
Realiza un algoritmo para cada uno de los siguientes problemas, utilizando la estructura del ciclo
Mientras.
1. Leer un nmero entero y mostrar todos los pares comprendidos entre 1 y el nmero ledo.
Escrbe el pseudocdigo.
Inicio
Fin
56
Pseudocdigo
Inicio
Fin
Entero cont = 21
Mientras cont < 150
Mostrar cont
cont =cont + 2
Fin mientras
Fin
Fin
Entero num, i = 1
Leer num
Mientras i < 12
Mostrar num * i
i + +
Fin mientras
Inicio
Entero: num, i = 1
Leer num
i < 12
Mostrar num * i
i++
Fin
57
Programacin
.NET
ACTIVIDAD
2-06
Ciclo Para
Realiza un algoritmo para cada uno de los ejercicios, utilizando la estructura del ciclo Para.
1. Mostrar en pantalla todos los enteros comprendidos entre 1 y 15
Inicio
Fin
Entero: i
Para i = 1 hasta 15
Mostrar i
Fin para
2. Generar en orden los nmeros del 1 al 10, utilizando un ciclo que vaya de 10 a 1
Inicio
Fin
Entero: i
Para i = 10 hasta 1
Mostrar 11 - i
Fin para
Fin
Entero: num
Para num = 1 hasta 20
Mostrar 4* num
Fin para
58
Pseudocdigo
Fin
Fin para
Mostrar total
Fin si
Entero: i
Para i = 20 hasta 30
Mostrar i
i = i + 1
Fin para
Fin
ACTIVIDAD
2-07
Realiza un algoritmo para cada uno de los ejercicios, utilizando la estructura del ciclo HacerMientras.
1. 1. Leer un nmero y calcular su factorial.
Inicio
Fin
Entero: num = 1
59
Programacin
.NET
Hacer
Fin
Mostrar num
num + = 2
Mientras num < 99
3. Leer dos nmeros enteros y mostrar todos los mltiplos de 4 comprendidos entre el menor
y el mayor.
Inicio
Fin
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
4. Leer dos nmeros enteros y sumar todos los valores enteros que haya entre el menor y el
mayor.
Inicio
Fin
60
Pseudocdigo
5. Sumar nmeros ledos uno a uno, hasta que el usuario ingrese un 9. Al final debe mostrarse
la suma. Escribe el pseudocdigo y dibuja el diagrama de flujo.
Inicio
Fin
Inicio
Entero = suma, num
num
suma + = num
num <>a
Verdadero
Falso
suma
Fin
ACTIVIDAD
2-08
Realiza un algoritmo para cada uno de los ejercicios, utilizando la estructura del ciclo HacerHasta.
1. Leer un nmero entero y mostrar todos los pares comprendidos entre 1 y el nmero ledo.
Inicio
Fin
Entero: num, i = 2
Leer num
Si num > i
Hacer
Fin si
Mostrar i
i + = 2
Hasta i < num
61
Programacin
.NET
Fin
Entero: num = 20
Hacer
Mostrar num
num + = 2
Hasta num > 100
3. Leer dos nmeros enteros y mostrar todos los mltiplos de 4 comprendidos entre el menor
y el mayor.
Inicio
Fin
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
4. Leer dos nmeros enteros y sumar los valores enteros que estn entre el menor y el mayor.
Inicio
62
Pseudocdigo
suma + = a
a++
Hasta a > b
Fin
5. Sumar nmeros ledos uno a uno, hasta que el usuario ingrese un 9. Al final debe mostrarse
la suma. Escribe el pseudocdigo y dibuja el diagrama de flujo.
Inicio
Fin
ACTIVIDAD
2-09
Ciclos anidados
1. Utilizando ciclos anidados, escribe el algoritmo para generar las siguientes parejas de
enteros.
Inicio
x
Fin
Entero x, y
Para x = 2 hasta 5
Para y = 0 hasta 1
Si x = 5 y y = 1
Terminar algoritmo
Si no
Mostrar x
Mostrar y
Fin si
Fin para
Fin para
63
Programacin
.NET
2. Utilizando ciclos anidados generar las siguientes parejas de nmeros. Puedes usar una
variable auxiliar para llevar la cuenta de las repeticiones en el ciclo interno.
x
Inicio
Fin
Entero x, aux, y = 1
Para x = 4 hasta 6
Para aux = 1 hasta 3
Mostrar x
Mostrar y
y + = 1
Fin para
Fin para
64
Inicio
Fin
Entero: x, y, z
Para x = 1 hasta 2
Para y = 1 hasta 2
Para z = 1 hasta 3
Mostrar x, y, z
Fin para
Fin para
Fin para
Pseudocdigo
ACTIVIDAD
2-10
7X1=7
7 X 2 = 14
7 X 3 = 21... etctera
Inicio
Entero: num, i
Leer num
Para i = 1 hasta 12
Mostrar num * i = num * i
Fin para
Fin
2. Cuatro nmeros dados por el usuario representan dos fracciones, donde el N1 es el numerador
de la primera fraccin, D1 es el denominador de la primera fraccin, N2 es el numerador
de la segunda fraccin y D2 es el denominador de la segunda fraccin. Dados estos cuatro
nmeros, escribe el pseudocdigo para obtener el numerador (N3) y el denominador (D3)
de la fraccin que resultara de multiplicar las dos primeras fracciones.
Inicio
Fin
65
Programacin
.NET
tema
GArreglos y matrices
2-02
LMINA
Arreglos y matrices
ACTIVIDAD
2-11
Arreglos
Para cada uno de los ejercicios, escribe con pseudocdigo un programa que d solucin a lo que
se pide.
1. Leer las edades de 7 personas (nmeros enteros), almacenarlas en un arreglo y determinar
cuntas de esas personas son mayores de edad. Adems del pseudocdigo realiza la prueba
de escritorio.
Inicio
Fin si
Fin
66
Pseudocdigo
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 nmero 1 es menor de edad
Persona nmero 2 es menor de edad
Persona nmero 3 es menor de edad
Persona nmero 4 es mayor de edad
Persona nmero 5 es mayor de edad
Persona nmero 6 es mayor de edad
Persona nmero 7 es menor de edad
Fin
67
Programacin
.NET
Fin
Fin
68
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
Pseudocdigo
ACTIVIDAD
2-12
Matrices
Escribe un programa, en formato de pseudocdigo, para cada uno de los siguientes problemas:
1. Se debe crear la siguiente matriz y asignar en cada posicin los valores que se muestran.
Utiliza ciclos.
1
Inicio
Fin
Entero A[4,4], i, j
Para i = 1 hasta 4
Para j = 1 hasta 4
Si i = j
A[i, j]=1
Si no
A [i, j]= 0
Fin si
Fin para
Fin para
2. Se debe crear la siguiente matriz y asignar en cada posicin los valores que se muestran.
Utiliza ciclos.
1
12
12
16
Inicio
Fin
Entero A[4,4], i, j, N
Para i = 1 hasta 4
Para j = 1 hasta 4
A[i, j]= i * j
Fin para
Fin para
69
Programacin
.NET
3. Se debe crear la siguiente matriz y asignar en cada posicin los valores que se muestran.
Utiliza ciclos.
2
Inicio
Fin
Entero A[4,4], i, j, N
Para i = 1 hasta 4
N = i + 1
Para j = 1 hasta 4
A[i, j]= N
Fin para
Fin para
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 nmero mayor.
Inicio
Fin
70
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 nmero mayor se encuentra en
Mostrar i , j
Mostrar Y tiene un valor de
Mostrar A [i, j]
Pseudocdigo
5. Se debe crear la siguiente matriz y asignar en cada posicin los valores que se muestran.
Utiliza ciclos.
1
10
11
12
13
14
15
16
Inicio
Fin
Entero A[4,4], i, j, N
N = 1
Para i = 1 hasta 4
Para j = 1 hasta 4
A[i, j]= N
N++
Fin para
Fin para
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
algn ciclo.
Inicio
Fin
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
2-03
LMINA
71
Programacin
.NET
Qu aprendiste?
TEMA A: A crea un mapa conceptual con las estructuras de los pseudocdigos realizando
una prueba de escritorio.
TEMA B: A emplear algunos algoritmos en el diagrama N-S.
TEMA C: A estimar las decisiones simples al trabajar con algoritmos en el pseudocdigo de
la estructura.
TEMA D: A utilizar dentro de la ejecucin de algoritmos, las decisiones en secuencia
correspondientes.
TEMA E: Diferenca las decisiones en cascada y las decisiones anidadas en una programacin.
TEMA F: A elegir el tipo de ciclo adecuado en la creacin de algoritmos.
TEMA G: A desarrollar un programa, en formato de pseudocdigo, para cada ejercicio
matemtico.
EVALUACIN
02
1. Qu es una variable?
Es un campo de memoria que almacena informacin, la cual puede
cambiar en cualquier momento.
2. Qu es una incgnita?
Una literal de la cual se desconoce su valor.
3. Describe qu es compilacin:
Es el proceso mediante el cual la computadora revisa que el programa que
has escrito cumpla con las reglas sintcticas del lenguaje de programacin
que ests utilizando
72
Un id ad
03
NIVEL: Intermedio
.N ET
Programacin .NET
Autor:
Carlos Zepeda Chehaibar
Programacin
.NET
tema
AIntroduccin
Microsoft.NET es el conjunto de nuevas tecnologas en las que Microsoft ha estado trabajando
durante los ltimos aos 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 programacin 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, distribucin
y ejecucin, por otra parte Visual Studio.NET permite realizar las mismas tareas a travs de un
entorno grfico basado en ventanas.
3-01
LMINA
Microsoft .NET
3-01
VIDEO
74
.NET
tema
BEntorno de programacin
Como en la mayora de los programas de Microsoft, al ejecutar un programa te da la bienvenida,
en la pgina principal puedes crear un nuevo proyecto o abrir uno creado con anterioridad.
La mayora de los proyetos que desarrollaras a lo largo de este curso, sern programados bajo
la opcin Aplicacin de consola. Para generar un proyecto nuevo de consola selecciona Nuevo
proyecto/Plantillas instaladas/Visual C#/Aplicacin de consola, luego haz clic en Aceptar.
75
Programacin
.NET
Esto hace que el programa prepare nuestra rea de trabajo que queda como lo muestra a
continuacin, el rea de trabajo contiene el Editor de cdigo, cuadro de herramientas, Explorador
de soluciones y propiedades. A dems cuenta con las barras de men comunes.
5
1
3
1. Barra de mens: Integrada por un conjunto de mens 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.
3. Explorardor de soluciones: Permite ver elementos y realizar tareas de administracin de
elementos en un proyecto.
4. Propiedades: Muestra las opciones que se pueden configurar del objeto activo.
5. Editor de Cdigo: En el se escribe o modifica el cdigo fuente de una aplicacin. Es posible
acercar el texto presionando la tecla <CTRL> y gira la rueda del ratn. Adems, al hacer
clic en un smbolo, todas las instancias de ese smbolo se resaltan automticamente.
6. Lista de errores: Ayuda a acelerar el desarrollo de aplicaciones, debido a que en ella se
muestran los errores, advertencias y mensajes que se generan cuando edita y compila
cdigo.
76
.NET
Hola mundo
Bsicamente una aplicacin en C# puede verse como un conjunto de uno o ms ficheros de
cdigo fuente con las instrucciones necesarias para que la aplicacin funcione como se desea
y que son pasados al compilador para que genere un ejecutable. Cada uno de estos ficheros no
es ms que un fichero de texto plano escrito usando caracteres Unicode y siguiendo la sintaxis
propia de C#.
3-02
LMINA
T IP
3-02
VIDEO
Mi primera aplicacin
PROYECTO
3-01
Mi primera aplicacin
El programa que vamos a desarrollar mostrar sencillamente el texto Hola Mundo en la consola
(a partir de ahora, la consola es la ventana de DOS). De entrada, Visual Studio .NET nos ha escrito
casi todo el cdigo. Es el que sigue:
using System;
namespace HolaMundo
{
/// <summary>
/// Summary description for Class1.
/// </summary>
77
Programacin
.NET
class Class1
{
static void Main(string[] args)
{
//
// TO DO: Add code to start application here
//
}
}
Siempre que crees una aplicacin de Consola en C#, se agregar este cdigo. Seguro que, con
lo que hemos visto hasta ahora, te suena mucho. La librera 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 aplicacin, 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 mtodo Main que es static, que es el mtodo
por el que empezar la ejecucin del programa. Esas tres lneas que hay dentro del mtodo
contienen un comentario. Te lo traduzco: Para hacer: Aade aqu el cdigo para que empiece
la aplicacin. O sea, que ya sabes dnde hay que escribir el cdigo de nuestra aplicacin
Hola Mundo: en el mtodo 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 botn que tiene un tringulo verde apuntando hacia la derecha, o bien pulsa la tecla F5.
Se ha abierto una ventana de lnea de comandos y se ha cerrado rpidamente. No pasa nada.
Todo est bien. Para evitar que se cierre inmediatamente despus de ejecutarse tienes dos
opciones: ejecutar la aplicacin sin opciones de depuracin (men Depurar_Iniciar sin depurar
o bien pulsar Control+F5); o aadir una lnea de cdigo ms para que espere a que se pulse
Enter antes de cerrar la ventana.
Yo s que, seguramente, vas a elegir la primera de ellas (ejecutar sin depuracin), pero es mejor
la segunda. Escribe la siguiente lnea a continuacin de la que escribimos antes:
string a = Console.ReadLine();
Ahora vuelve a ejecutar como hicimos la primera vez. Como ves, ahora la ventana de lnea
de comandos se queda abierta hasta que pulses Enter. Y por qu es mejor hacerlo as que
ejecutar sin depuracin?.
Porque si ejecutamos sin depuracin, obviamente, no podremos usar las herramientas de
depuracin, como poner puntos de interrupcin, ejecutar paso a paso y cosas as. En esta
aplicacin no tendra mucho sentido, es cierto, pero cuando hagamos programas ms grandes
78
.NET
podremos comprobar que todas estas herramientas son verdaderamente tiles. Por lo tanto,
todo el cdigo 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();
}
}
}
79
Programacin
.NET
tema
CIntroduccin a la programacin en C#
C# es un lenguaje de programacin orientada a objetos y todo en l son clases. La clase es
el concepto fundamental de esta metodologa de programacin y es quin identifica a los
componentes que constituyen un programa.
Todo programa en C# por ms sencillo que ste sea, est constituido por ms 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
LMINA
Una estructura bsica 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 aplicacin de software, sin importar el entorno
donde vaya a ejecutarse.
public class PrimerPrograma
{
static void Main()
{
// Instrucciones
}
}
80
.NET
por donde debe iniciar y tambin terminar un programa. Este mtodo o funcin 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 ejecucin de un programa, an 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 funcin que viene en
seguida no retornar ningn valor y que por lo tanto no espere nada. En C#, esta funcin
tambin se puede definir como int.
La funcin Main() puede ir como se mostr en el primer programa, o tambin 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 ejecucin solo son vlidos para programas de consola,
y no para programas que manejan un sistema grfico de ventanas, como las aplicaciones tipo
Windows.
Palabras reservadas
Aunque antes se han dado una serie de restricciones sobre cules son los nombres vlidos que
se pueden dar en C# a los identificadores, falta todava por dar una, los siguientes nombres no
son vlidos como identificadores ya que tienen un significado especial en el lenguaje:
81
Programacin
.NET
Literales
Un literal es la representacin explcita de los valores que pueden tomar los tipos bsicos del
lenguaje. A continuacin se explica cul es la sintaxis con que se escriben los literales en C#
desglosndolos segn el tipo de valores que representan:
Literales enteros: Un nmero entero se puede representar en C# tanto en formato decimal
como hexadecimal. En el primer caso basta escribir los dgitos decimales (0-9) del nmero
unos tras otros, mientras que en el segundo hay que preceder los dgitos hexadecimales (0-9,
a-f, A-F) con el prefijo 0x. En ambos casos es posible preceder el nmero de los operadores
+ para indicar si es positivo o negativo, aunque si no se pone nada se considerar que
es positivo. Ejemplos de literales enteros son 0, 5, +15, -23, 0x1A, -0x1a, etc
En realidad, la sintaxis completa para la escritura de literales enteros tambin puede incluir un
sufijo que indique el tipo de dato entero al que ha de pertenecer el literal.
Literales reales: Los nmeros reales se escriben de forma similar a los enteros, aunque
slo se pueden escribir en forma decimal y para separar la parte entera de la real usan el
tradicional punto decimal (carcter .) Tambin es posible representar los reales en formato
cientfico, usndose 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 ocurra con los literales enteros, los literales reales tambin pueden incluir sufijos
que indiquen el tipo de dato real al que pertenecen.
Literales lgicos: Los nicos literales lgicos vlidos son true y false, que respectivamente
representan los valores lgicos cierto y falso.
Literales de carcter: Prcticamente cualquier carcter se puede representar encerrndolo
entre comillas simples. Por ejemplo, a (letra a), (carcter de espacio), ? (smbolo de
interrogacin), etc. Las nicas excepciones a esto son los caracteres que se muestran en
la Tabla, que han de representarse con secuencias de escape que indiquen su valor como
cdigo Unicode o mediante un formato especial tal y como se indica a continuacin:
82
.NET
Cdigo de
escape Unicode
Cdigo de
escape especial
Comilla simple
\u0027
\'
Comilla doble
\u0022
\"
Carcter nulo
\u0000
\0
Alarma
\u0007
\a
Retroceso
\u0008
\b
Salto de pgina
\u000C
\f
Nueva lnea
\u000A
\n
Retorno de carro
\u000D
\r
Tabulacin horizontal
\u0009
\t
Tabulacin vertical
\u000B
\v
Barra invertida
\u005C
\\
Carcter
En realidad, de la tabla anterior hay que matizar que el carcter de comilla doble tambin puede
aparecer dentro de un literal de cadena directamente, sin necesidad de usar secuencias de
escape. Por tanto, otros ejemplos de literales de carcter vlidos sern \?, ?, \f, \u0000, \\,
\, etc.
Aparte de representar los caracteres de la tabla anterior, tambin es posible usar los cdigos
de escape Unicode para representar cualquier cdigo Unicode, lo que suele usarse para
representar literales de caracteres no incluidos en los teclados estndares.
Junto al formato de representacin de cdigos de escape Unicode ya visto, C# incluye un
formato abreviado para representar estos cdigos en los literales de carcter si necesidad de
escribir siempre cuatro dgitos an cuando el cdigo a representar tenga muchos ceros en su
parte izquierda. Este formato consiste en preceder el cdigo de \x en vez de \u.
De este modo, los literales de carcter \U00000008, \u0008, \x0008, \x008, \x08 y \x8
son todos equivalentes. Hay que tener en cuenta que este formato abreviado slo es vlido en
los literales de carcter, y no a la hora de dar nombres a los identificadores.
Literales de cadena: Una cadena no es ms que una secuencia de caracteres encerrados
entre comillas dobles. Por ejemplo ?Hola, mundo?, ?camin?, etc. El texto contenido
dentro estos literales puede estar formado por cualquier nmero de literales de carcter
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 interpretara como
el final de la cadena.
83
Programacin
.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 slo 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 definicin de clase, en cuyo caso se correspondera
con el tipo de miembro que hasta ahora hemos denominado campo. Tambin puede definirse
como un variable local a un mtodo, que es una variable definida dentro del cdigo del mtodo
a la que slo puede accederse desde dentro de dicho cdigo.
Otra posibilidad es definirla como parmetro de un mtodo, que son variables que almacenan
los valores de llamada al mtodo y que, al igual que las variables locales, slo puede ser
accedidas desde cdigo ubicado dentro del mtodo. 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 parmetros de tipo string. Como se muestra en el ejemplo,
si un mtodo toma varios parmetros las definiciones de stos se separan mediante comas
(carcter ,), y si queremos definir varios campos o variables locales (no vlido para parmetros)
de un mismo tipo podemos incluirlos en una misma definicin incluyendo en sus nombres
separados por comas.
Con la sintaxis de definicin de variables anteriormente dada simplemente definimos variables
pero no almacenamos ningn objeto inicial en ellas. El compilador dar un valor por defecto
a los campos para los que no se indique explcitamente ningn valor segn se explica en el
siguiente apartado. Sin embargo, a la variables locales no les da ningn valor inicial, pero
detecta cualquier intento de leerlas antes de darles valor y produce errores de compilacin en
esos casos.
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 sera as:
84
.NET
Persona p;
p = new Persona(Jos, 22, 76543876-A);
Sin embargo, C# tambin proporciona una sintaxis ms 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 notacin:
As por ejemplo, la anterior asignacin de valor a la variable p podra rescribirse de esta otra
forma ms compacta:
Persona p
3-04
LMINA
Tipos de datos
Son ciertos tipos de datos tan comnmente utilizados en la escritura de aplicaciones que en
C# se ha incluido una sintaxis especial para tratarlos. Por ejemplo, para representar nmeros
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 ms, dado lo frecuente que es el uso de
85
Programacin
.NET
este tipo tambin se ha predefinido en C# el alias int para el mismo, por lo que la definicin de
variable anterior queda as de compacta:
int a = 2;
Tipo CTS
Descripcin
System.Object
object
Cualquier objeto
System.String
string
Cadenas de caracteres
Cualquier cadena
System.SByte
sbyte
System.Byte
byte
System.Int16
short
System.UInt16
ushort
System.Int32
int
System.UInt32
uint
System.Int64
long
Desde -9.223.372.036.854.775.808
hasta 9.223.372.036.854.775.807
System.UInt64
ulong
Desde 0 , hasta
18.446.744.073.709.551.615
System.Char
char
Caracteres Unicode de 2
bytes
System.Single
float
System.Double
double
System.Boolean
bool
Verdadero/falso
true false
decimal
System.Decimal
86
Alias C#
.NET
Pese a su sintaxis especial, en C# los tipos bsicos 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 mtodo que espere un System.Object, lo que es muy til para el diseo
de rutinas genricas que admitan parmetros de cualquier tipo y es una ventaja importante de
C# frente a lenguajes similares como Java donde los tipos bsicos no son considerados objetos.
El valor que por defecto se da a los campos de tipos bsicos consiste en poner a cero toda el
rea de memoria que ocupen. Esto se traduce en que los campos de tipos bsicos numricos
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 cules son los tipos bsicos, es el momento de comentar cules son los
sufijos que admiten los literales numricos para indicar al compilador cul es el tipo que se ha
de considerar que tiene. Por ejemplo, si tenemos en una clase los mtodos:
public static void F(int x)
{...}
public static void F(long x)
...}
Ante una llamada como F(100), a cul de los mtodos se llamara? Pues bien, en principio se
considera que el tipo de un literal entero es el correspondiente al primero de estos tipos bsicos
que permitan almacenarlo: int, uint, long, ulong, por lo que en el caso anterior se llamara al
primer F() Para llamar al otro podra aadirse el sufijo L al literal y hacer la llamada con F(100L).
Sufijo
L l[9]
Uu
ulong
float
ninguno, D d
double
Mm
decimal
3-03
VIDEO
Declaracin de variables
87
Programacin
.NET
tema
3-04
VIDEO
Operadores Unarios
88
.NET
Los operadores && y || se diferencia de & y | en que los primeros realizan evaluacin perezosa
y los segundos no. La evaluacin perezosa consiste en que si el resultado de evaluar el primer
operando permite deducir el resultado de la operacin, entonces no se evala el segundo y se
devuelve dicho resultado directamente, mientras que la evaluacin no perezosa consiste en
evaluar siempre ambos operandos.
Es decir, si el primer operando de una operacin && 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.
Operaciones relacionales: Se han incluido los tradicionales operadores de igualdad (==),
desigualdad (!=), mayor que (>), menor que (<), mayor o igual que (>=) y menor o
igual que (<=).
3-05
LMINA
Operadores
3-05
VIDEO
Operadores Binarios
Constantes
Una constante es una variable cuyo valor puede determinar el compilador durante la
compilacin 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 ejecucin, 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 dndoles siempre un valor inicial al declararlas. O sea, con esta sintaxis:
const <tipoConstante> <nombreConstante> = <valor>;
As, ejemplos de definicin de constantes es el siguiente:
const int a = 123;
const int b = a + 125;
Dadas estas definiciones de constantes, lo que har el compilador ser sustituir en el cdigo
generado todas las referencias a las constantes a y b por los valores 123 y 248 respectivamente,
89
Programacin
.NET
por lo que el cdigo generado ser ms eficiente ya que no incluir el acceso y clculo de los
valores de a y b. Ntese que puede hacer esto porque en el cdigo se indica explcitamente cual
es el valor que siempre tendr a y, al ser este un valor fijo, puede deducir cul ser el valor que
siempre tendr b.
Para que el compilador pueda hacer estos clculos se ha de cumplir que el valor que se asigne
a las constantes en su declaracin sea una expresin constante. Por ejemplo, el siguiente
cdigo no es vlido en tanto que el valor de x no es constante:
// x es una variable normal, no una constante
int x = 123;
// Error: x no tiene porqu tener valor constante (aunque aqu lo tenga)
const int y = x +123;
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 bsicos, pues a no ser que
valgan null sus valores no se pueden determinar durante la compilacin sino nicamente tras
la ejecucin de su constructor. La nica excepcin a esta regla son los tipos enumerados, cuyos
valores se pueden determinar al compilar.
Todas las constantes son implcitamente estticas, por lo se considera errneo incluir el
modificador static en su definicin al no tener sentido hacerlo. De hecho, para leer su valor
desde cdigos externos a la definicin de la clase donde est definida la constante, habr que
usar la sintaxis <nombreClase>.<nombreConstante> tpica de los campos static.
Por ltimo, hay que tener en cuenta que una variable slo puede ser definida como constante
si es una variable local o un campo, pero no si es un parmetro.
3-06
LMINA
Enumeracin
Una enumeracin o tipo enumerado es un tipo especial de estructura en la que los literales de
los valores que pueden tomar sus objetos se indican explcitamente al definirla. Por ejemplo, una
enumeracin de nombre Tamao cuyos objetos pudiesen tomar los valores literales Pequeo,
Mediano o Grande se definira as:
enum Tamao
{
Pequeo,
Mediano,
Grande
}
90
.NET
Para entender bien la principal utilidad de las enumeraciones vamos a ver antes un problema
muy tpico en programacin: si queremos definir un mtodo que pueda imprimir por pantalla un
cierto texto con diferentes tamaos, una primera posibilidad sera dotarlo de un parmetro de
algn tipo entero que indique el tamao con el que se desea mostrar el texto.
A estos nmeros que los mtodos interpretan con significados especficos se les suele denominar
nmeros mgicos, y su utilizacin tiene los inconvenientes de que dificulta la legibilidad del
cdigo (hay que recordar qu significa para el mtodo cada valor del nmero) y su escritura
(hay que recordar qu nmero ha de pasrsele al mtodo para que funcione de una cierta
forma). Una alternativa mejor para el mtodo anterior consiste en definirlo de modo que tome
un parmetro de tipo Tamao para que as el programador usuario no tenga que recordar la
correspondencia entre tamaos y nmeros. Vase as como la llamada (2) del ejemplo que
sigue es mucho ms legible que la (1):
obj.MuestraTexto(2);
// (1)
obj.MuestraTexto(Tamao.Mediano);
// (2)
Adems, estos literales no slo facilitan la escritura y lectura del cdigo sino que tambin
pueden ser usados por herramientas de documentacin, depuradores u otras aplicaciones para
sustituir nmeros mgicos y mostrar textos muchos ms legibles.
Por otro lado, usar enumeraciones tambin facilita el mantenimiento del cdigo. Por ejemplo, si el
mtodo (1) anterior se hubiese definido de forma que 1 significase tamao pequeo, 2 mediano
y 3 grande, cuando se quisiese incluir un nuevo tamao intermedio entre pequeo y mediano
habra que darle un valor superior a 3 o inferior a 1 ya que los dems estaran cogidos, lo que
rompera el orden de menor a mayor entre nmeros y tamaos asociados. Sin embargo, usando
una enumeracin no importara mantener el orden relativo y bastara aadirle un nuevo literal.
Otra ventaja de usar enumeraciones frente a nmeros mgicos es que stas participan en
el mecanismo de comprobacin de tipos de C# y el CLR. As, si un mtodo espera un objeto
Tamao y se le pasa uno de otro tipo enumerado, se producir, segn cuando se detecte
la incoherencia, un error en compilacin o una excepcin en ejecucin. Sin embargo, si se
hubiesen usado nmeros mgicos del mismo tipo en vez de enumeraciones no se habra
detectado nada, pues en ambos casos para el compilador y el CLR seran simples nmeros sin
ningn significado especial asociado.
3-07
LMINA
Enumeraciones
91
Programacin
.NET
Definicin de enumeracin: Ya hemos visto un ejemplo de cmo definir una enumeracin. Sin
embargo, la sintaxis completa que se puede usar para definirlas es:
enum <nombreEnumeracin> : <tipoBase>
{
<literales>
}
Es posible alterar los valores iniciales de cada constante indicndolos explcitamente como
en el cdigo recin 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 Tamao
{
Pequeo,
Mediano = 5,
Grande
}
En este ltimo ejemplo el valor asociado a Pequeo ser 0, el asociado a Mediano ser 5, y el
asociado a Grande ser 6 ya que como no se le indica explcitamente ningn otro se considera
que este valor es el de la constante anterior ms 1.
Obviamente, el nombre que se de a cada constante ha de ser diferente al de las dems de
su misma enumeracin y el valor que se de a cada una ha de estar incluido en el rango de
valores admitidos por su tipo base. Sin embargo, nada obliga a que el valor que se de a cada
92
.NET
constante tenga que ser diferente al de las dems, y de hecho puede especificarse el valor de
una constante en funcin del valor de otra como muestra este ejemplo:
enum Tamao
{
Pequeo,
Mediano = Pequeo,
Grande = Pequeo + Mediano
}
En realidad, lo nico que importa es que el valor que se d a cada literal, si es que se le da
alguno explcitamente, sea una expresin constante cuyo resultado se encuentre en el rango
admitido por el tipo base de la enumeracin y no provoque definiciones circulares.
Por ejemplo, la siguiente definicin de enumeracin es incorrecta ya que en ella los literales
Pequeo y Mediano se han definido circularmente:
enum TamaoMal
{
Pequeo = Mediano,
Mediano = Pequeo,
Grande
}
Ntese que tambin la siguiente definicin de enumeracin tambin sera incorrecta ya que en
ella el valor de B depende del de A implcitamente (sera el de A ms 1):
enum EnumMal
{
A = B,
B
}
PROYECTO
3-02
Clculo de sueldo
Realiza un programa para calcular el sueldo de una persona, conociendo la cantidad de horas
trabajadas y el costo de la hora:
1. Crear un nuevo proyecto llamado CalculoSueldo.
a. Define las siguientes variables:
int horasTrabajadas;
float costoHora;
float sueldo;
string linea;
93
Programacin
.NET
94
.NET
tema
ESentencias de control
Condicionales
Las instrucciones condicionales son instrucciones que permiten ejecutar bloques de
instrucciones slo si se da una determinada condicin. En los siguientes apartados de esta
unidad se describen cules son las instrucciones condicionales disponibles en C#.
Instruccin IF: Permite ejecutar ciertas instrucciones slo si de da una determinada
condicin. Su sintaxis de uso es la sintaxis:
if (<condicin>){
<instruccionesIf>}
else{
<instruccionesElse>}
3-06
VIDEO
Condicional IF
Instruccin Switch: Permite ejecutar unos u otros bloques de instrucciones segn el valor de
una cierta expresin. Su estructura es:
switch (<expresin>)
{
case <valor1>: <bloque1>
<siguienteAccin>
case <valor2>: <bloque2>
<siguienteAccin>
...
default: <bloqueDefault>
<siguienteAccin>
}
95
Programacin
.NET
10%;
5%;
2%;
nada;
3-07
VIDEO
Instruccin Switch
Ciclos
Son instrucciones que permiten ejecutar repetidas veces una instruccin o un bloque de
instrucciones mientras se cumpla una condicin. Es decir, permiten definir bucles donde ciertas
instrucciones se ejecuten varias veces. A continuacin se describen cules son las instrucciones
de este tipo incluidas en C#.
Ciclo While: Permite ejecutar un bloque de instrucciones mientras se de una cierta
instruccin. Su sintaxis de uso es:
while (<condicin>)
{
<instrucciones>
}
96
.NET
3-08
VIDEO
Ciclo While
Ciclo For: Es una variante de while que permite reducir el cdigo necesario para escribir los
tipos de bucles ms comnmente usados en programacin. Su sintaxis es:
for (<inicializacin>; <condicin>; <modificacin>){
<instrucciones>
}
3-09
VIDEO
Ciclo For
97
Programacin
.NET
Este programa muestra en pantalla los nmeros del 0 al 10, cuando alcanza el valor 10 se
cumple la condicin 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 iteracin, por lo que salta el cdigo que falta para
llegar a probar la condicin. Por ejemplo, el siguiente programa visualizar slo los nmeros
pares:
main()
{
int x;
for( x=0; x<100; x++)
{
if (x%2)
continue;
printf(%d ,x);
}
}
3-08
LMINA
98
Sentencias de control
.NET
PROYECTO
3-03
Sentencias de control
2. Presiona la tecla <F5>, notars que aparece una ventana de Consola que se abre y cierra.
3. En la Ventana resultados aparecer la ruta dnde se ejecuta la aplicacin y su
nombre. Es similar a esta: C:\Users\Administrador\AppData\Local\Temporary Projects\
ConsoleApplication1\bin\Debug\ConsoleApplication1.exe, localiza y copia el texto.Si no
vez la ventana de resultados haz clic en men Depurar/Ventanas/Resultados.
4. Ejecuta la consola de Windows, escribe el comando cd (change directory), haz clic con
el botn derecho del ratn, selecciona pegar del men contextual y presiona <Enter>.
Qu funcin realliza este programa?
99
Programacin
.NET
8. De manera similar a la anterior busca la ruta del programa y ejectalo desde la Consola de
Windows. Qu funcin realliza este programa?
100
.NET
tema
En <tipoRetorno> se indica cul es el tipo de dato del objeto que el mtodo devuelve, y si
no devuelve ninguno se ha de escribir void en su lugar.
Como nombre del mtodo se puede poner en <nombreMtodo> cualquier identificador vlido.
Como se ver ms adelante en Interfaces, tambin es posible incluir en <nombreMtodo>
informacin de explicitacin de implementacin de interfaz, pero por ahora podemos considerar
que siempre ser un identificador.
Aunque es posible escribir mtodos que no tomen parmetros, si un mtodo los toma se ha de
indicar en <parmetros> cul es el nombre y tipo de cada uno, separndolos con comas si
son ms de uno y siguiendo la sintaxis que ms adelante se explica.
El <cuerpo> del mtodo tambin es opcional, pero si el mtodo retorna algn tipo de objeto
entonces ha de incluir al menos una instruccin return que indique cul objeto.
101
Programacin
.NET
La sintaxis anteriormente vista no es la que se usa para definir mtodos abstractos. Como ya
se vio en el Tema Clases, en esos casos lo que se hace es sustituir el cuerpo del mtodo y las
llaves que lo encierran por un simple punto y coma (;) Ms adelante en este tema veremos que
eso es tambin lo que se hace para definir mtodos externos.
A continuacin se muestra un ejemplo de cmo definir un mtodo de nombre Saluda cuyo
cuerpo consista en escribir en la consola el mensaje Hola Mundo y que devuelva un objeto
int de valor 1:
int Saluda()
{
Console.WriteLine(Hola Mundo);
return 1;
}
3-09
LMINA
Mtodos externos
Llamada A Mtodos: La forma en que se puede llamar a un mtodo depende del tipo de
mtodo del que se trate. Si es un mtodo de objeto (mtodo no esttico) se ha de usar la
notacin:
<objeto>.<nombreMtodo> (<valoresParmetros>)
El <objeto> indicado puede ser directamente una variable del tipo de datos al que pertenezca
el mtodo o puede ser una expresin 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 mtodo); pero si desde cdigo de algn mtodo de un
objeto se desea llamar a otro mtodo de ese mismo objeto, entonces se ha de dar el valor this
a <objeto>.
En caso de que sea un mtodo de tipo (mtodo esttico), entones se ha de usar:
<tipo>.<nombreMtodo> (<valoresParmetros>)
Ahora en <tipo> ha de indicarse el tipo donde se haya definido el mtodo o algn subtipo
suyo. Sin embargo, si el mtodo pertenece al mismo tipo que el cdigo que lo llama entonces
se puede usar la notacin abreviada:
<nombreMtodo> (<valoresParmetros>)
El formato en que se pasen los valores a cada parmetro en <valoresParmetros> a
aquellos mtodos que tomen parmetros depende del tipo de parmetro que sea.
102
.NET
Parmetros
La forma en que se define cada parmetro de un mtodo depende del tipo de parmetro del
que se trate. En C# se admiten cuatro tipos de parmetros: parmetros de entrada, parmetros
de salida, parmetros por referencia y parmetros de nmero indefinido.
Parmetros De Entrada: Un parmetro de entrada recibe una copia del valor que almacenara
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 modificacin que se haga al parmetro dentro
del cuerpo del mtodo 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 modificacin que se haga al parmetro dentro del mtodo tambin afectar al
objeto original ya que en realidad el parmetro referencia a ese mismo objeto original.
Para definir un parmetro de entrada basta indicar cul el nombre que se le desea dar y el
cul es tipo de dato que podr almacenar. Para ello se sigue la siguiente sintaxis:
<tipoParmetro> <nombreParmetro>
Por ejemplo, el siguiente cdigo define un mtodo llamado Suma que toma dos parmetros
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 instruccin return para indicar cul es el valor que ha de devolver el
mtodo. Este valor es el resultado de ejecutar la expresin par1+par2; es decir, es la suma
de los valores pasados a sus parmetros par1 y par2 al llamarlo.
En las llamadas a mtodos se expresan los valores que se deseen dar a este tipo de
parmetros indicando simplemente el valor deseado. Por ejemplo, para llamar al mtodo
anterior con los valores 2 y 5 se hara <objeto>.Suma(2,5), lo que devolvera el valor 7.
Parmetros De Salida: Un parmetro de salida se diferencia de uno de entrada en que
todo cambio que se le realice en el cdigo del mtodo al que pertenece afectar al objeto
que se le pase al llamar dicho mtodo tanto si ste es de un tipo por valor como si es de un
tipo referencia. Esto se debe a que lo que a estos parmetros se les pasa es siempre una
referencia al valor que almacenara una variable del tipo del objeto que se les pase.
Cualquier parmetro de salida de un mtodo siempre ha de modificarse dentro del cuerpo
del mtodo y adems dicha modificacin ha de hacerse antes que cualquier lectura de su
valor. Si esto no se hiciese as el compilador lo detectara e informara de ello con un error.
Por esta razn es posible pasar parmetros de salida que sean variables no inicializadas,
pues se garantiza que en el mtodo se inicializarn antes de leerlas. Adems, tras la llamada
103
Programacin
.NET
a un mtodo se considera que las variables que se le pasaron como parmetros de salida ya
estarn inicializadas, pues dentro del mtodo seguro que se las inicializa.
Ntese que este tipo de parmetros permiten disear mtodos que devuelvan mltiples
objetos: un objeto se devolvera como valor de retorno y los dems se devolveran
escribindolos en los parmetros de salida.
Los parmetros de salida se definen de forma parecida a los parmetros de entrada pero se
les ha de aadir la palabra reservada out. O sea, se definen as:
out <tipoParmetro> <nombreParmetro>
Al llamar a un mtodo que tome parmetros de este tipo tambin se ha preceder el valor
especificado para estos parmetros del modificador out. Una utilidad de esto es facilitar la
legibilidad de las llamadas a mtodos. Por ejemplo, dada una llamada de la forma:
a.f(x, out z)
Es fcil determinar que lo que se hace es llamar al mtodo f() del objeto a pasndole x como
parmetro de entrada y z como parmetro de salida. Adems, tambin 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 parmetro es que permite evitar errores derivados de que un programador pase una
variable a un mtodo y no sepa que el mtodo la puede modificar.
3-10
LMINA
Otros parmetros
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 ms organizados facilitando su localizacin. De
hecho, as es como se halla organizada la BCL, de modo que todas las clases ms comnmente
usadas en cualquier aplicacin se hallan en el namespace llamado System, las de acceso
a bases de datos en System.Data, las de realizacin de operaciones de entrada/salida en
System.IO, etc.
Por otro lado, los namespace tambin 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 dndoles el nombre de la empresa fabricante, o su nombre de
dominio en Internet, etc.
3-11
LMINA
Importacin de Namespace
Los as definidos pasarn a considerase miembros del namespace llamado. Aparte de clases,
estos tipos pueden ser tambin interfaces, estructuras, tipos enumerados y delegados. A
continuacin se muestra un ejemplo en el que definimos una clase de nombre ClaseEjemplo
perteneciente a un namespace llamado EspacioEjemplo:
namespace EspacioEjemplo
{
class ClaseEjemplo
{}
}
105
Programacin
.NET
PROYECTO
3-04
Errores
1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente cdigo:
using System;
class ParmetrosEntrada
{
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;
ParmetrosEntrada obj2 = new ParmetrosEntrada();
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 atmicas) 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 bsicos de C#, o incluso algunos tipos complejos
como las clases.
Un arreglo es tambin ejemplo de un modelo. Un arreglo puede considerarse como ejemplo de
una variable compuesta capaz de almacenar uno o ms datos al mismo tiempo.
Datos y Variables
Significado
Informacin
30
Arreglo:
Constante_numrica
Factor_de_crecimiento
Resultado_nota
11
13
Impares
Numeros_serie
Infracciones
Registro:
30
Datos_alumno
Datos_lluvia
Datos_tiempo
Archivo:
Careta
Transparencia
documento
agtosto
5
3.1416
11
13
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
Programacin
.NET
Observaciones:
El <tipo-base> puede ser cualquiera de los tipos bsicos 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 tipobase indicado, es un arreglo (lista de elementos del tipo base).
En esta declaracin NO se define el tamao que tendr el arreglo (aunque se puede
determinar las dimensiones, lo que se ver ms adelante).
El tamao del arreglo se determina en una segunda declaracin, que puede ir en la siguiente
lnea, como se muestra a continuacin.
<identificador> = new <tipo-base> [<NumElementos>]
En esta declaracin, se dimensiona el arreglo con una cantidad determinada de elementos, todos
correspondientes a tipo-base. Es posible hacer la declaracin del arreglo y su dimensionamiento
en una misma sentencia:
<tipo-base>[] <identificador> = new <tipo-base>[<NumElementos>]
Esta ltima declaracin implcitamente 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 inicializarn los elementos del arreglo.
Los valores deben ser del <tipo-base> del arreglo.
Tambin es factible declarar, dimensionar, e inicializar un arreglo con todos sus elementos, en
una sola declaracin, pero slo indicando un subconjunto de los valores que el arreglo puede
guardar:
108
.NET
Donde M<N, y N debe ser una expresin constante, como por ejemplo 10. Es factible hacer una
declaracin donde M>N, en cuyo caso, el real dimensionamiento del arreglo se regir por M.
3-12
LMINA
Arreglos Multidimensionales
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 mtodo bsico Sort() de la clase Array:
int [] numeros = { 4,5,2,3,1,6 }
Array.Sort(numeros); // 1,2,3,4,5,6
Bsqueda en arreglos
Para realizar las bsquedas en arreglos se usa la instruccin Foreach. Esta sentencia de control
de flujo, especialmente diseada para este tipo de estructuras, donde se manejan listas de
elementos, todos del mismo tipo. Foreach depende de la definicin previa de un arreglo de
elementos del mismo tipo, los cuales puede recorrer individualmente sin conocer el tamao
explcitamente (como se requiere en otras instrucciones, por ejemplo en el for). La sintaxis de
uso es:
foreach ( <tipo> <variable> in <arreglo> ) {
<instrucciones>
}
109
Programacin
.NET
Donde:
<
tipo> es el tipo bsico 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 iteracin.
PROYECTO
3-05
Arreglos
1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente cdigo:
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
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();
Listas
Una lista es un conjunto de nodos, cada uno de los cuales tiene dos campos: uno de informacin
y un apuntador al siguiente nodo de la lista. Adems un apuntador externo seala el primer
nodo de la lista. Representacin grfica de un nodo:
La informacin puede ser cualquier tipo de dato simple, estructura de datos o inclusive uno o
111
Programacin
.NET
Tipos de listas
Segn el mecanismo de insercin y extraccin de nodos en la lista tenemos los siguientes tipos:
Listas tipo pila.
Listas tipo cola.
Listas genricas.
Una lista se comporta como una pila si las inserciones y extracciones las hacemos por un
mismo lado de la lista. Tambin 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. Tambin se las llama listas FIFO (First In First Out - primero
en entrar primero en salir). Una lista se comporta como genrica cuando las inserciones y
extracciones se realizan en cualquier parte de la lista. Podemos en algn 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. Tambin 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 informacin cualquier tipo de
valor (int, char, float, vector de caracteres, un objeto, etc).
Para estudiar el mecanismo de utilizacin de una pila supondremos que en el campo de
informacin almacena un entero (para una fcil interpretacin y codificacin). Inicialmente la
PILA est vaca y decimos que el puntero raz apunta a null (Si apunta a null decimos que no
tiene una direccin de memoria):
Insertamos un valor entero en la pila: insertar(10).
Luego de realizar la insercin 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 despus
de este.
Insertamos luego el valor 4: insertar(4).
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 direccin del primer
nodo. El nodo que acabamos de insertar en el campo puntero guarda la direccin del nodo
que almacena el valor 10. Ahora qu sucede si extraemos un nodo de la pila. Cul se extrae?
112
.NET
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. Tambin se las llama listas FIFO (First In First Out - primero
en entrar primero en salir).
3-12
VIDEO
Colas
3-13
LMINA
Pilas y Colas
PROYECTO
3-06
Pilas
1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente cdigo:
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
namespace PilasArray
{
113
Programacin
.NET
class Program
{
static void Main(string[] args)
{
//Tamao 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 vlido
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
mtodo 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 mtodo para
imprimir el contenido de la pila
}
break;
case 3:
114
.NET
CIMA \n);
Console.Write(OBTIENE ELEMENTO DE LA
if (esVacia(pilaArreglo))
{
Console.Write(La pila est vacia \n);
}
else
{
Elemento = Cima(pilaArreglo);//Usa
mtodo 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 mtodo para
eliminar el ultimo valor que se agrego
Console.Write(El elemento de la cima
suprimido);
}
break;
default:
Console.Write(Opcin no vlida);
break;
}
} while (!x.Equals(0));
}
//Mtodo que valida si la pila esta vacia
static public bool esVacia(string[] _ pilaArreglo)
{
bool fl = true;
for (int i = _ pilaArreglo.Length - 1; i >= 0; i--)
{
if ( _ pilaArreglo[i] != null)
{
fl = false;
break;
}
}
return fl;
}
//Mtodo que valida si la pila esta llena
static public bool estaLlena(string[] _ pilaArreglo)
{
bool fl = false;
int count = 0;
for (int i = _ pilaArreglo.Length - 1; i >= 0; i--)
115
Programacin
.NET
if ( _ pilaArreglo[i] != null)
{
count += 1; ;
}
}
if (count == _ pilaArreglo.Length) { fl = true; }
return fl;
}
//Mtodo 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;
}
//Mtodo 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;
}
//Mtodo 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;
}
//Mtodo 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);
}
}
}
117
Programacin
.NET
Qu aprendiste?
TEMA A: A reconocer los principales elementos que componen el entorno de desarrollo en
.NET
TEMA B: A identificar Visual C# como entorno de desarrollo.
TEMA C: A desarrollar aplicaciones sencillas en modo consola.
TEMA D: A escribir una operacin algebrica, cambiando valores a las variables que se
indican.
TEMA E: A utilizar las sentencias de control en sus aplicaciones.
TEMA F: A desarrollar ampliamente la aplicacin de las matrices, arreglos y colecciones de
objetos.
EVALUACIN
03
1. Define enumeracin.
Una enumeracin o tipo enumerado es un tipo especial de estructura
en la que los literales de los valores que pueden tomar sus objetos se
indican explcitamente al definirla.
2. Para qu sirven las instrucciones condicionantes?
Las instrucciones condicionales son instrucciones que permiten ejecutar
bloques de instrucciones slo si se da una determinada condicin.
3. Para qu sirven los ciclos?
Son instrucciones que permiten ejecutar repetidas veces una instruccin o
un bloque de instrucciones mientras se cumpla una condicin.
4. Qu es un mtodo?
Un mtodo es un conjunto de instrucciones a las que se les da un determinado
nombre de tal manera que sea posible ejecutarlas en cualquier momento sin
tenerlas que rescribir sino usando slo su nombre.
118
Un id ad
04
NIVEL: Intermedio
P rogra macin
or ientad a a objeto s
Programacin .NET
Autor:
Carlos Zepeda Chehaibar
Programacin
.NET
tema
AClases y Objetos
C# es un lenguaje orientado a objetos puro, lo que significa que todo con lo que vamos a
trabajar en este lenguaje son objetos. Un objeto es un agregado de datos y de mtodos que
permiten manipular dichos datos, y un programa en C# no es ms que un conjunto de objetos
que interaccionan unos con otros a travs de sus mtodos.
Una clase es la definicin de las caractersticas concretas de un determinado tipo de
objetos. Es decir, de cules son los datos y los mtodos de los que van a disponer todos los
objetos de ese tipo. Por esta razn, se suele decir que el tipo de dato de un objeto es la clase
que define las caractersticas del mismo.
4-01
VIDEO
Clases
Definicin de clases
La sintaxis bsica para definir una clase es la que a continuacin se muestra:
class <nombreClase>
{
<miembros>
}
De este modo se definira una clase de nombre <nombreClase> cuyos miembros son los
definidos en <miembros> Los miembros de una clase son los datos y mtodos de los que
van a disponer todos los objetos de la misma. Un ejemplo de cmo declarar una clase de
nombre A que no tenga ningn miembro es la siguiente:
class A
{}
El nombre que demos al campo puede ser cualquier identificador que queramos siempre y
cuando siga las reglas descritas en Aspectos Lxicos para la escritura de identificadores y
no coincida con el nombre de ningn otro miembro previamente definido en la definicin
de clase.
120
class Persona
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad;
// Campo de cada objeto Persona que almacena su edad
string NIF; // Campo de cada objeto Persona que almacena su NIF
Segn esta definicin, todos los objetos de clase Persona incorporarn campos que
almacenarn cul es el nombre de la persona que cada objeto representa, cul es su edad
y cul es su NIF. El tipo int incluido en la definicin del campo Edad es un tipo predefinido en
la BCL cuyos objetos son capaces de almacenar nmeros 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.
Para acceder a un campo de un determinado objeto se usa la sintaxis:
<objeto>.<campo>
Por ejemplo, para acceder al campo Edad de un objeto Persona llamado p y cambiar
su valor por 20 se hara:
p.Edad = 20;
Todo mtodo puede devolver un objeto como resultado de la ejecucin de las instrucciones
que lo forman, y el tipo de dato al que pertenece este objeto es lo que se indica en
121
Programacin
.NET
4-01
LMINA
Operador New
Accesibilidad
La accesibilidad es la caracterstica que podemos aplicar a cualquiera de los elementos que
definamos en nuestro cdigo. 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 cdigo pueden ser cualquiera de los mostrados en la siguiente lista:
p ublic: Acceso no restringido. Este es modificador de accesibilidad con mayor
cobertura, podemos acceder a cualquier miembro pblico desde cualquier parte
de nuestro cdigo. Aunque, como veremos, este acceso no restringido puede verse
reducido dependiendo de dnde lo usemos.
protected: Acceso limitado a la clase contenedora o a los tipos derivados de esta
clase. Este modificador solamente se usa con clases que se deriven de otras.
internal: Acceso limitado al proyecto actual (o ensamblado).
protected internal: Acceso limitado al proyecto actual o a los tipos derivados de la
clase contenedora. Una mezcla de los dos modificadores anteriores.
private: Acceso limitado al tipo contenedor. Es el ms restrictivos de todos los
modificadores de accesibilidad.
Estos modificadores de accesibilidad los podemos usar tanto en clases, estructuras, interfaces,
enumeraciones, delegados, eventos, mtodos, propiedades y campos. Aunque no sern
aplicables en espacios de nombres (Namespace) ni en los miembros de las interfaces y
enumeraciones.
4-02
LMINA
Anidacin 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
PROYECTO
4-01
Colas
1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente cdigo:
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
namespace ColasCirculares
{
class Program
{
static void Main(string[] args)
{
int T = 5; //Tamao del arreglo
string[] ColaArreglo = new string[T]; //cola
string Elemento = string.Empty; //Dato
int Frente = -1; //Frente
int NE = 0;//Nmero de elementos en la cola
string x = string.Empty;
//Men
do
{
Console.Write(\n\nMen \n 1)Meter elemento a la cola
elemento de la cola \n 3)Muestra cola \n 0)Salir \n\n);
\n 2)Sacar
123
Programacin
.NET
x = Console.ReadLine();
//Switch que espera la opcin
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 vlido a la cola:);
Elemento = Console.ReadLine();
}
if (!estaLlena(NE, T))
{
Meter(ref Frente, ref NE, T, ColaArreglo, Elemento);//
Llama al mtodo 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 mtodo 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 mtodo
para mostrar el contenido de la cola
}
else
{
Console.Write(La cola est vacia \n);
}
break;
default:
Console.Write(Opcin no vlida);
break;
}
} while (!x.Equals(0));
}
//Mtodo que agrega elementos a la cola
public static void Meter(ref int _ frente, ref int _ numeroElementosCola,
int _ tamaoCola, string[] _ arregloCola, string _ elemento)
124
int i;
if ( _ frente != -1)
{
i = ( _ frente + _ numeroElementosCola);
}
else
{
i = 0;
_ frente = i;
}
_ arregloCola[i] = _ elemento;
_ numeroElementosCola += 1;
}
//Mtodo que elimina un elemento de la cola
public static string Sacar(ref int _ frente, ref int _ numeroElementosCola,
int _ tamaoCola, 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;
}
//Mtodo que verifica que la cola no este llena
public static bool estaLlena(int _ numeroElementosCola, int _ tamaoCola)
{
bool fl = false;
//Si ambos son iguales la cola est llena
if ( _ numeroElementosCola == _ tamaoCola)
{
fl = true;
}
return fl;
}
//Mtodo 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;
}
//Mtodo que muestra el contenido de la cola
private static void MuestraCola(int _ frente, string[] _ arregloCola)
125
Programacin
.NET
}
}
5. Qu es accesibilidad?
La accesibilidad es la caracterstica que podemos aplicar a cualquiera
de los elementos que definamos en nuestro cdigo.
126
tema
BInterfaz
Hasta ahora hemos resuelto todos los algoritmos haciendo las salidas a travs de una consola
en modo texto. La realidad es que es muy comn la necesidad de hacer la entrada y salida de
datos mediante una interfaz ms amigable con el usuario.
En C# existen varias libreras de clase para implementar interfaces visuales. Utilizaremos las
Windows Forms. Para crear una aplicacin que utilice esta librera debemos crear un proyecto.
Los pasos son los siguientes:
a. Desde el men de opciones del Visual Studio .Net seleccionamos la opcin: Archivo/
Nuevo proyecto...
b. Seleccionamos la plantilla Aplicacin de Windows Forms.
127
Programacin
.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
botn cambiar la propiedad text (la misma cambia la etiqueta que muestra el botn):
4-02
VIDEO
Interfaz grfica
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.
A medida que seleccionamos un objeto en la ventana de Diseo podemos ver como se
actualiza la ventana Propiedades. Por ejemplo, la propiedad Text de la clase Button permite
fijar la etiqueta que muestra el botn.
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 botn .
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 ms
128
comn que deberemos implementar es el Click (este evento se dispara cuando en tiempo de
ejecucin del programa se presiona el botn).
Para disponer el cdigo para dicho evento debemos hacer doble clic sobre dicho evento (esto
hace que se active la ventana del editor y genere automticamente el mtodo asociado a dicho
evento):
private void button1 _ Click(object sender, EventArgs e)
{
}
4-03
LMINA
Controles comunes
PROYECTO
4-02
Botones
1. Abre Visual C# 2010 Express. En un proyecto nuevo con la plantilla Aplicacin de Windows
Forms, elabora un formulario debe contener:
Siete botones.
Un control Label
A cada botn asignale un da de la semana.
Cada botn debe responder al evento Click.
Utiliza la instruccin label1.Text = ; para que al presionar un boton el control label
muestre el da seleccionado.
2. Cuida el aspecto de tu formulario, conservando el orden de los das y utiliza las opciones
del la ventana propiedades para que el texto del control Label, sea atractivo visualemente.
3. Escribe el cdigo fuente de tu programa:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
129
Programacin
.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 = Sbado;
}
private void button7_Click(object sender, EventArgs e)
{
label1.Text = Domingo;
}
}
}
130
tema
131
Programacin
.NET
Si se desea tratar la excepcin hay que encerrar la divisin dentro de una instruccin try con
la siguiente sintaxis:
try
<instrucciones>
catch (<excepcin1>)
<tratamiento1>
catch (<excepcin2>)
<tratamiento2>
...
finally
<instruccionesFinally>
4-04
LMINA
Uso de Catch
Si as se termina llegando al mtodo que inici el hilo donde se produjo la excepcin 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
informacin sobre la excepcin lanzada ya visto.
As, para tratar la excepcin del ejemplo anterior de modo que una divisin por cero provoque
que a d se le asigne el valor 0, se podra 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 cdigo generado y favorecer la legibilidad del fuente,
en los catchs se busca siempre orden de aparacin 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 instruccin try.
132
Tambin hay que sealar que cuando en <instrucciones> se lance una excepcin que
sea tratada por un catch de algn try -ya sea de la que contiene las <instrucciones>, de
algn try padre suyo o de alguno de los mtodos que provocaron la llamada al que produjo la
excepcin- 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
pero antes de seguirse ejecutando por la instruccin 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 mtodo
llamante padre se ejecutarn las <instruccionesFinally>.
Slo si dentro de un bloque finally se lanzase una excepcin se aborta la ejecucin del mismo.
Dicha excepcin sera propagada al try padre o al mtodo llamante padre del try que contuviese
el finally.
Aunque los bloques catch y finally son opcionales, toda instruccin 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 cdigo:
using System;
class MiException:Exception {}
class Excepciones
{
public static void Main()
{
try
{
Console.WriteLine(En el try de Main());
Mtodo();
Console.WriteLine(Al final del try de Main());
}
catch (MiException)
{
Console.WriteLine(En el catch de Main());
}
finally
{
Console.WriteLine(finally de Main());
}
133
Programacin
.NET
}
public static void Mtodo()
{
try
{
Console.WriteLine(En el try de Mtodo());
Mtodo2();
Console.WriteLine(Al final del try de Mtodo());
}
catch (OverflowException)
{
Console.WriteLine(En el catch de Mtodo());
}
finally
{
Console.WriteLine(finally de Mtodo());
}
}
public static void Mtodo2()
{
try
{
Console.WriteLine(En el try de Mtodo2());
throw new MiException();
Console.WriteLine(Al final del try de Mtodo2());
}
catch (DivideByZeroException)
{ Console.WriteLine(En el catch de Mtodo2()); }
finally
{ Console.WriteLine(finally de Mtodo2()); }
}
}
134
tema
DArchivos
La manera de almacenar y recuperar informacin 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
informacin se denomina archivo.
4-05
LMINA
Archivos Complemento
Streams
La lectura y escritura a un archivo son hechas usando un concepto genrico llamado stream.
La idea detrs 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
Marshal By Ref Object
Binary Reader
Binary Writer
Stream
Text Reader
Text Writer
Buffered Stream
String Reader
String Writer
Memory Stream
Stream Reader
Stream Writer
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
Programacin
.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 informacin externas de diversos
tipos. Algunas otras posibilidades fuera de los archivos incluyen:
L eer o escribir datos a una red utilizando algn protocolo de red, donde la intencin
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 razn la clase BufferedStream existe y es
ms 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 ms relacionadas con la escritura y lectura de archivos (File Input/Output o File I/O)
son:
F ileStream: Cuyo propsito es lectura y escritura de datos binarios (no de texto
legible), a cualquier archivo de tipo binario, aunque se puede utilizar para acceder
a cualquier tipo de archivo, inclusive los de texto.
StreamReader y StreamWriter: Las cuales estn diseadas para lectura y escritura
de archivos de texto. Estas clases se asumen como de un nivel ms alto que
FileStream.
Una observacin acerca de la declaracin de nombres/rutas de archivos en C#. Usualmente, la
ruta de un archivo contiene el carcter \, que en C# se utiliza como caracter de control para
smbolos especiales (como el cambio de lnea: \n).
Sin embargo, entendiendo que no es el mismo sentido el que se le quiere dar en la interpretacin
de rutas de archivos (por ej: C:\Mis documentos\Programas\ejemplo.cs), se utiliza una sintaxis
particular, anteponiendo el smbolo @ antes del string con la ruta del archivo. Es decir:
string rutaarchivo = @C:\Temp\archivo.txt;
Esta declaracin evita la interpretacin de los dos caracteres \ como smbolos especiales y el
string queda correctamente inicializado.
136
PROYECTO
4-04
Archivos externos
1. Abre Visual C# 2010 Express. En un proyecto nuevo de consola escribe el siguiente cdigo:
using System;
using System.IO;
static void Main(string[] args)
{
string fileName = temp.txt;
FileStream stream = new FileStream(fileName, FileMode.Open,
FileAccess.Read);
StreamReader reader = new StreamReader(stream);
while (reader.Peek() > -1) Console.WriteLine(reader.ReadLine());
reader.Close();
}
using System;
using System.IO;
/// Permite leer un archivo
/// <param name=sFileName>Nombre del archivo</param>
Private void ReadFile(string sFileName) {
string sPath = c:\\folder\\;
string sFileName = sPath + archivo.txt;
//verifico que exista el archivo
if (File.Exists(sFileName)) {
FileStream fs = new FileStream(sFileName,FileMode.Open,
FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs);
//Leo toda la informacin del archivo
string sContent = sr.ReadToEnd();
//cierro los objetos
fs.Close();
sr.Close();
Response.Write(Contenido = + sContent);
}
}
static void Main(string[] args)
{
string sPath = c:\\folder\\;
string sFileName = sPath + archivo.txt;
ReadFile(sFileName);
}
137
Programacin
.NET
Qu aprendiste?
TEMA A: A reconocer que un objeto contiene toda la informacin que permite definirlo e
identificarlo frente a otros objetos.
TEMA B: A elaborar aplicaciones que se ejecutan desde un entorno grfico.
TEMA C: A controlar resultados inesperados en sus aplicaciones mediante excepciones.
TEMA D: A utilizar archivos externos en el desarrollo de aplicaciones.
EVALUACIN
04
1. 1. Qu es una clase?
Una clase es la definicin de las caractersticas concretas de un
determinado tipo de objetos.
2. Para que sirve el cuadro de herramientas de Visual C# 2010 Express?
El cuadro de herramientas contiene todas las componentes
visuales que nos permiten elaborar nuestro formulario.
3. En dnde se coloca el bloque finally?
El bloque finally es opcional, y si se incluye ha de hacerlo tras todas los
bloques catch
4. Qu es la memoria secundaria?
La manera de almacenar y recuperar informacin 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
5. Qu es un stream?
Un stream es como se denomina a un objeto utilizado para transferir datos.
138