Sei sulla pagina 1di 146

Programacin

.NET
Carlos Zepeda Chehaibar

Programacin
.NET

Libro del Profesor


Autor:

Carlos Zepeda Chehaibar


Apoyo en Desarrollo y Actividades:

Luis Ivn Contreras lvarez


ISBN 978-607-7270-11-9
Primera Edicin

Coordinacin Editorial:

Alejandro Flores Ledesma


Diseo Editorial:

Csar Carranza Contreras


Correccin de Estilo:

Jennifer P. Castillo Ascencio


Ilustracin de Portada:

Marco Antonio Sols

Ilustracin de Interiores:

Judith Lourdes Sierra Prez


Miriam Tatiana Zamora Gutirrez
Csar Carranza Contreras
Editado por Grupo Educare, S.A. de C.V.
Cerro de Mesontepec #83
Colonia Colinas del Cimatario
Quertaro, Quertaro C.P. 76090

DERECHOS RESERVADOS 2014 MMXIII por Grupo Educare, S. A. de C. V.


Esta es una obra protegida por las leyes internacionales de derechos de autor. Prohibida la
reproduccin total o parcial de esta obra y/o los recursos que la acompaan, por cualquier
medio, sin autorizacin escrita de Grupo Educare, S. A. de C. V.
Grupo Educare, el logotipo de Grupo Educare, el logotipo del Programa de Informtica y
Tecnologa, son propiedad de Grupo Educare, S. A. de C. V.
El diseo editorial y contenidos grficos son propiedad exclusiva de Grupo Educare, S.A.
de C.V.
Todos los nombres de empresas, productos, direcciones y nombres propios contenidos en esta obra, forman parte de
ejemplos ficticios, a menos que se indique lo contrario. Las citas, imgenes y videogramas utilizados en esta obra se
utilizan nicamente con fines didcticos y para la crtica e investigacin cientfica o artstica, por lo que el autor y Grupo
Educare, S. A. de C. V. no asumen ninguna responsabilidad por el uso que se d a esta informacin, ni infringen derecho
de marca alguno, en conformidad al Artculo 148 de la Ley Federal del Derecho de Autor.
Microsoft Office, MS DOS, MS Windows, Word, PowerPoint, Excel, FrontPage y Access y sus logotipos son marcas
comerciales de Microsoft Corporation. Microsoft y el logo de Microsoft Office son marcas registradas de Microsoft
Corporation en los Estados Unidos y/o en otros pases. Microsoft no patrocina, endosa o aprueba esta obra. Flash,
Illustrator, Fireworks, Freehand, Dreamweaver, Photoshop y sus logotipos son marcas registradas de Adobe Inc. Adobe
no patrocina o endosa esta obra.

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

Tercera estructura: Ciclos de acciones

27

Actividad1-09Escribe algoritmos computacionales

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

CPseudocdigos de la estructura Si-Entonces- Si no

Actividad2-02Decisiones simples

41

44
45

Contenido

tema

DDecisiones en secuencia

Actividad2-03Decisiones en secuencia
tema

EDecisiones en cascada o anidadas

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

Lmina3-02Consola y Buffer de entrada


Video3-02Mi primera aplicacin
Proyecto3-01Mi primera aplicacin

75
75
75

tema

tema

CIntroduccin a la programacin en C#

Lmina3-03Otros elementos del programa

78
78

Palabras reservadas
79
Literales 80
Variables 82

Contenido

Tipos de datos

83

Lmina3-04Otros tipos de variables


Video3-03Declaracin de variables

83
85

DOperadores, constantes y enumeraciones


86
Operadores 86

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

Uso De Break Y Continue

96

Proyecto3-03Sentencias de control

97

FMtodos, Arreglos y Colecciones


99
Mtodos 99

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

Unidad4Programacin orientada a objetos


AClases y Objetos
Definicin de clases

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

CExcepciones (Instruccin Try) 129

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.

Las propuestas didcticas son flexibles, adaptables a la forma personal de


trabajo del maestro y necesidades especficas de cada clase maximizando as
el empleo de los recursos disponibles.

P ropuesta Did ctica


NIVEL: Bsico

DURACIN SUGERIDA: 24 SESIONES / 45-50 MINUTOS

Este libro lo integran las siguientes Unidades:

Unidad01Algoritmos
Unidad02Pseudocdigo
Unidad03.NET
Unidad04Programacin orientada a objetos

Programacin .NET
Autor:
Carlos Zepeda Chehaibar

Programacin
.NET
Unidad

Tema

Subtema

Comprender cuales son


las secuencias lgicas
que se utilizan en
programacin as como
su finalidad

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

Estimar el valor de una


variable

Evaluar el valor de las


variables en diferentes
operaciones

Operadores

II

Objetivos

Estructuras bsicas

Primera estructura:
Secuencia de acciones
Segunda estructura:
Decisin de accin
Tercera Estructura: Ciclos
de acciones

Manejar las estructuras


bsicas de los algoritmos

Tcnicas para representar


algoritmos

Diagramas de flujo

Conocer las tcnicas para


representar algoritmos

PropuestaDidctica

Competencias

Actividades sugeridas para el


alumno

Describe detalladamente las


secuencias lgicas dentro de
la computacin

Actividad 1-01 Secuencias


lgicas

Contruye un algoritmo para


desarrollar algoritmos

Actividad 1-02 Algoritmos


Actividad 1-03 Algoritmos

Menciona ejemplos de
errores de sintaxis y errores
lgicos

Actividad 1-04 Identificando


errores

Prepara un formato conb


informacin completa sobre
las variables y su asignacin,
resolviendo una prueba de
escritorio.

Actividad 1-05 Variables


Actividad 1-06 Asignacin de
valores

Escribe una operacin


algebrica, cambiando
valores a las variables que se
indican.

Actividad 1-07 Operadores

Disea algoritmos
empleando la secuencia,
decisin y ciclos de
acciones.

Actividad 1-08 Escribiendo


algoritmos
Actividad 1-09 Escribe
algoritmos computacionales

Representa en un diagrama
de flujo algunos algoritmos

Actividad 1-10 Diagramas


de flujo

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

Trabajar con algoritmos


identificando decisiones
simples, en secuencia o
anidadas

Ciclos

Ciclo Mientras (While)


Ciclo Para (For)
Ciclo Hacer-Mientras
(Repeat While)
Ciclo Haer-Hasta (Repeat
Until)
Ciclos Anidados

Elegir el tipo de ciclo


adecuado en la creacin
de algoritmos

Unidad 02 - Pseudocdigo

IV

Objetivos

Pseudocdogos con varias


estructuras

Evaluar las funciones que


se pueden aplicar con
los Pseudocdigos en
diferentes estructuras

Arreglos

Aplicar los Pseudocdigos


para la solucin de
problemas

Matrices

Resolver problemas
matemticos utilizando
algoritmos

PropuestaDidctica

Competencias

Actividades sugeridas para el


alumno

Emplea algunos algoritmos


en el diagrama N-S

Actividad 2-01 Diagramas


N-S

Describe las diferencias


entre los diferentes tipos de
Decisiones

Actividad 2-02 Decisiones


simples
Actividad 2-03 Decisiones en
secuencia
Actividad 2-04 Decisiones
anidadas

Contruiye diferentes
algoritmos utilizando las
cundiones de los ciclos

Actividad 2-05 Ciclo Mientras


Actividad 2-06 Ciclo Para
Actividad 2-07 Ciclo HacerMientras
Actividad 2-08 Ciclo HacerHasta
Actividad 2-09 Ciclos
anidados

Crea un mapa conceptual


con las estructuras de los
Pseudocdigos realizando
una prueba de escritorio.

Actividad 2-10 Prueba de


escritorio
Actividad 2-11 Repaso de
pseudocdigos
Actividad 2-12 Escribiendo
pseudocdigos matemticos

Escribe con un
Pseudocdigo un programa
que de solucin a diferentes
ejercicios

Actividad 2-13 Arreglos

Planea un programa, en
formato de Pseudocdigo,
para ca ejercicio matemtico

Actividad 2-14 Matrices

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.

Describir los elementos


que conforman un
programa, conocer
los diferentes tipos de
datos y como hacer la
declaracin de estos.

Operar las sentencias de


control.

PropuestaDidctica

Competencias

Actividades sugeridas para el


alumno

Tutorial Sugerido

Reconoce los principales


elementos que componen
el entorno de desarrollo en
.NET

Actividad 3-01
Caractersticas de .NET

Video 3-01 Instalacin

Identifica Visual C# como


entorno de desarrollo

Actividad 3-02 Espacio de


trabajo
Proyecto 3-01 Mi Primer
aplicacin

Video 3-02 Mi primera


aplicacin

Proyecto 3-02 Calculando


sueldos

Video 3-03 Declaracin de


variables
Video 3-04 Operadores
Unarios
Video 3-05 Operadores
Binarios

Proyecto 3-03 IF
Proyecto 3-04 Switch

Video 3-04 Condicional IF


Video 3-05 Ciclo For
Video 3-06 Instruccin
Switch
Video 3-07 Ciclo While
Video 3-08 Clases

Desarrolla aplicaciones
sencillas en modo consola

Utiliza las sentencias de


control en sus aplicaciones

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

Conocer las definiciones


de mtodo, arreglo y
colecciones, su uso e
importancia

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

Actividades sugeridas para el


alumno

Desarrolla ampliamente la
aplicacin de las matrices,
arreglos y colecciones de
objetos.

Proyecto 3-05 Errores


Proyecto 3-06 Arreglos
Proyecto 3-07 Colecciones

Reconoce que un objeto


contiene toda la informacin
que permite definirlo e
identificarlo frente a otros
objetos

Proyecto 3-08 Colecciones

Elabora aplicaciones que se


ejecutan desde un entorno
grfico

Proyecto 3-09 Interfaz

Controla resultados
inesperados en sus
aplicaciones mediante
excepciones.

Proyecto 3-10 Excepciones

Utiliza archivos externos en


el desarrollo de aplicaciones

Proyecto 3-11 Archivos

Tutorial Sugerido

Recursos

Video 3-09 Arreglos


Video 3-10 Pilas
Video 3-11 Colas

Video 3-12 Interfaz Grfica

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.

Utiliza los fundamentos de las


matemticas para realizar, con
detalle, algoritmos y operaciones
aplicndolas por completo en
determinar funciones o para disear
programas computacionales.

Un id ad

01

NIVEL: Intermedio

Lg ica co mputaciona l

DURACIN SUGERIDA: 5 SESIONES / 45-50 MINUTOS

Durante el desarrollo de esta unidad aprenders a:


A Comprender la importancia de la lgica y las matemticas dentro de la
computacin
B Identificar el proceso para la elaboracin de algoritmos.
C Clasificar los algoritmos y determinar posibles errores dentro de una secuencia.
D Resolver pruebas de escritorio con valores numricos al asignarle un valor a
cada variable.
E Manejar las estructuras bsicas de los algoritmos.
F Conocer las tcnicas para representar algoritmos.

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

Como ejemplo, contesta detalladamente las siguientes cuestiones:


1. Cules son los pasos para entrar a la calculadora de Windows?
1. Dar clic en el botn Inicio.
2. Seleccionar el men Todos los programas.
3. Seleccionar el men Accesorios.
4. Dar clic en la opcin Calculadora.
2. Hay formas alternativas para entrar a este programa? Describe una:
1. Dar clic en el men Inicio.
2. Seleccionar la opcin Ejecutar.
3. Escribir la palabra calc.
4. Presionar la tecla Enter.
3. Qu ocurre si con cualquiera de las formas, no sigues los pasos o los realizas en desorden?
No podra abrir el programa ya que cada paso subsecuente requiere que el
anterior est completo.

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.

Algoritmo para adquisicin de software


Inicio

1.

2.

3.

4.




Fin

Determinar qu software se desea adquirir


Desplazarnos hacia la tienda de software
Preguntar si tienen el software requerido
Si lo tienen
Comprar el software
Terminar con el algoritmo
Si no lo tienen
Repetir desde el paso 2

Observa el algoritmo anterior.


Casi todas las lneas van enumeradas, pero no todas.
Se debe cumplir con la orden de la lnea 1 para continuar con el resto del algoritmo,
realizando cada tarea indicada.
Si se siguen los pasos, siempre funciona, sin importar el software que se quiera
adquirir ni el lugar donde se va a comprar. El algoritmo es genrico.

13

Programacin
.NET

ACTIVIDAD

1-02

Algoritmos

A continuacin escribirs algunos algoritmos. No olvides ponerles un ttulo e indicar claramente


el principio y el fin.
1. Desarrolla un algoritmo que te permita encender un vehculo.
Algoritmo para encender un vehculo
Inicio
1. Abrir la puerta del vehculo
2. Entrar al vehculo
3. Si el vehculo es estndar

Pisar el clutch
Si no es estndar

Verificar que est en Parking
4. Insertar la llave en la ranura
5. Girar la llave
Fin

2. Desarrolla un algoritmo que te permita hacer un pastel.


Algoritmo para hacer un pastel
Inicio
1. Comprar los ingredientes
2. Mezclar los ingredientes
3. Vaciar la mezcla en un molde para pastel
4. Prender el horno
5. Si el horno est caliente

Meter el pastel al horno
Si no - regresar al paso 5
6. Si el pastel est listo

Sacar el pastel del horno
Si no - regresar al paso 6
Fin

14

Lgicacomputacional

3. Crea un algoritmo para crear algoritmos.


Algoritmo para crear algoritmos
Inicio
1. Determinar el problema a resolver
2. Elegir una posible solucin al problema
3. Indicar los pasos a seguir
4. Realizar una prueba del algoritmo
5. Si la prueba marca errores

Corregir las fallas y regresar al paso 4
6. Si la solucin es satisfactoria

Terminar algoritmo
Si no - regresar al paso 2
Fin

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

1. Desarrolla un algoritmo que te permita determinar si un nmero es par o impar.


Inicio

1. Ingresar nmero a evaluar

2. Si el residuo del nmero/2 = 0

es par

Si no
es impar
Fin
2. Pide a un compaero que realice a tu algoritmo tres pruebas de escritorio utilizando tres
diferentes nmeros enteros. Utiliza este espacio para las pruebas.
a.

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

3. Desarrolla un algoritmo que te permita saber si un nmero es primo.


Inicio

1. Ingresar nmero a evaluar

2. Si nmero < 0
Terminar algoritmo

3. Dividir el nmero por todos los nmeros entre 1 y nmero/2

4. Si el nmero slo es divisible por s mismo y la unidad

Es primo

Si no

No es primo
Fin

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

Errores de precaucin. Algunos compiladores hacen sugerencias para el mejoramiento o


aseguramiento del programa. Cada lenguaje de programacin cuenta con su propio compilador
que te ayudar a escribir tu programa correctamente y a detectar estos errores.
Errores lgicos. Este tipo de errores no pueden ser detectados por el compilador. Ocurren
cuando el programa se compila perfectamente, no tiene errores de sintaxis, sin embargo no
hace lo que se supone que debera hacer. Por ejemplo, si escribo un programa para calcular
el rea de un tringulo y utilizo la frmula rea=(base*altura)/3, cometera un error lgico. El
compilador no detecta ningn error en la frmula, el programa funciona, pero el resultado est
mal. Estos errores son los ms difciles de corregir y se pueden evitar si se disea y analiza
correctamente el problema antes de comenzar a programar en la computadora. Unos minutos
de trabajo previo en papel, te pueden ahorrar muchas horas de trabajo en la computadora.
Estos errores los tenemos que detectar nosotros mismos al hacer las pruebas de escritorio, ya
que ah es donde determinamos si el algoritmo lograr o no el objetivo esperado.

ACTIVIDAD

1-04

Identificando errores

1. Da un ejemplo (diferente a los de este libro) de un error de sintaxis.


Escribir una instruccin Si no sin haber escrito antes la instruccin S

2. Da un ejemplo (diferente a los de este libro) de un error lgico.


Si quiero obtener el promedio de dos nmeros A y B y escribo
promedio = A+B/2
el resultado sera incorrecto.

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

Indica que almacenar el nmero 8 en la variable A.


Indica que almacenar el contenido de la variable A en la variable B.
Indica que almacenar en la variable C, la expresin que resulte de la suma de
los valores que contengan las variables A y 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

Se asigna el valor 10 a la variable A.

B= 15

10

15

C=20

10

15

20

Se asigna el valor 20 a la variable C. A y B mantienen su valor.

A=A+B

25

15

20

La variable A que vala 10 se suma con la variable B con valor a 15


y el resultado ahora se asigna a la variable A, cambiando su valor
de 10 por 25. Las variables B y C mantienen su valor.

B=B-10

25

20

La variable B que vala 15 se resta en 10 y el resultado se almacena


en B, cambiando su valor de 15 por 5. Las variables A y C mantienen
su valor.

Se asigna el valor 15 a la variable B y A mantiene su valor.

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:

P ara expresar una suma: +


Para expresar una resta: Para expresar una potencia: ^
Para expresar una multiplicacin: *
Para expresar una divisin: /

Si ms de un operador se usa en una expresin, las acciones se ejecutan de acuerdo a una


jerarqua:
La computadora evala y realiza las potencias, dando prioridad de derecha a
izquierda.
Despus se calculan las multiplicaciones y divisiones
Por ltimo se realizan las sumas y restas.
Ejemplo 1: x = a + b / c + d
Primero se ejecutara la divisin (b/c), posteriormente la suma del resultado de la divisin con a
y el resultado se sumara con d.
Asignemos algunos valores: a=2, b=8, c=4 y d=3

x = 2 + 8/4 + 3
El valor que tomar x es 7.

Cuando utilizamos parntesis se altera la jerarqua de los operadores, ya que la computadora


realiza primero las operaciones de los parntesis ms internos. Dentro de los parntesis se
respeta la jerarqua de los operadores.
Ejemplo 2: x = (a + b) / (c + d)
Asignemos algunos valores: a=2, b=8, c=4 y d=3

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/c) / (a/b+c)


x=

x=(3+4/2) / (3/4+2)= 20/11

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:

Primera estructura: Secuencia de acciones


Todos los das mientras realizamos nuestras actividades planeamos, consciente o
inconscientemente, lo que vamos a hacer y decidimos un orden para que se realicen las
actividades. Para preparar un pastel, por ejemplo, tenemos que hacerlo paso por paso siguiendo
la secuencia de la receta para prepararlo. En otras palabras la secuencia nos indica el orden
de ejecucin.
Para escribir una secuencia de acciones lo nico que tienes que hacer es escribir una instruccin
despus de otra, de manera que se entienda la secuencia y el orden de ejecucin. Por ejemplo,
si deseramos hacer una secuencia que nos permita observar a travs de una ventana abierta,
el algoritmo sera:
Algoritmo para observar a travs de una ventana abierta.
Inicio
1. Ubicar la ventana por la que deseamos observar.
2. Dirigirnos hacia la ventana que escogimos.
3. Acercarnos lo suficiente para observar a travs de ella.
4. Observar a travs de la ventana abierta.
Fin

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.

Segunda estructura: Decisin de accin


Durante la ejecucin de una secuencia a menudo se tienen que tomar decisiones, ya sea para
escoger la mejor alternativa o simplemente porque tenemos que escoger entre dos caminos
lgicos dependiendo de alguna variable. La vida cotidiana est llena de decisiones: tendremos
que escoger si el pastel ser de chocolate o preferimos que sea de vainilla, o hay que elegir
ropa diferente si est lloviendo o si hace calor.
Siempre que se debe tomar una decisin, sta depende de una condicin. La condicin es una
expresin lgica que nos permite decidir cul es el camino a tomar. Vamos a complementar el
ejemplo de la estructura anterior:

25

Programacin
.NET

Algoritmo para observar a travs de una ventana.


Inicio

1.

2.




3.

3.

4.


5.
Fin

Ubicar la ventana por la que deseamos observar


Si nos encontramos sentados
Levantarnos del lugar donde nos encontremos
Si no estamos sentados
Nos orientamos hacia la ventana
Dirigirnos hacia la ventana que escogimos
Acercarnos lo suficiente para observar a travs de ella.
Si est cerrada
Abrir la ventana
Observar a travs de la ventana abierta.

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

1. Decidir qu tipo de restaurante es


2. Si el restaurante es elegante
3. Si es para hombre
Elegir traje
Si no
Elegir vestido
4. Si el restaurante es casual
5. Si es para hombre
Elegir pantaln de vestir
Elegir camisa
Si no
Elegir blusa

Lgicacomputacional

Fin

Elegir pantaln o falda de vestir


6. Si el restaurante es informal
Elegir jeans
Elegir T-shirt

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

1. Reunirse con el cliente


2. Mostrar un color al cliente
3. Si al cliente no le gusta regresar al paso 2
4.Calcular la pintura necesaria
5. Cotizar el trabajo
6. Si al cliente no le agrada la cotizacin regresar al paso 2
7. Asignar a los trabajadores para el trabajo
8. Llevar a los trabajadores y la pintura al lugar de trabajo

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

total es mayor a 500?


si
total = 510 - 10
total = 500

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

Tercera estructura: Ciclos de acciones


Un ciclo es una estructura que nos permite repetir una o varias acciones. Recuerdas el
algoritmo para crear un pastel? Tal vez queremos hacer varios pasteles y tendremos que repetir
el mismo procedimiento cierto nmero de veces.
Vamos a suponer que eres un supervisor y cada hora, durante tu jornada de trabajo, tienes que
vigilar a travs de una ventana. El resto del tiempo debes permanecer en tu lugar de trabajo y
slo cada hora levantarte y observar a travs de la ventana.
Algoritmo para vigilar desde una ventana
Inicio
Llegar puntual a la jornada laboral
Ubicarse en el lugar de trabajo
Mientras no termine la jornada de trabajo

Ubicar la ventana por la que nos queremos asomar

Si estamos sentados

Levantarnos del lugar en donde estemos sentados

Orientarnos hacia la ventana

Si no

Orientarnos hacia la ventana

Fin Si

Dirigirnos hacia la ventana

Si est cerrada
Abrirla

Fin Si

Observar por la ventana

Regresar al lugar de trabajo

Mientras no haya pasado una hora

Permanecer en el lugar de trabajo

Fin Mientras
Fin Mientras
Fin

Analiza con detalle los cambios en nuestro algoritmo:


La palabra Mientras establece una condicin
que determina el nmero de veces que se
repite un conjunto de acciones.
El ciclo debe tener algn tipo de finalizador que
detenga la repeticin de acciones.
El uso de sangras te ayuda a identificar mejor
cada una de las condiciones y los ciclos.

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

Escribe algoritmos computacionales

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

1. Mientras la bscula no pase de 2 kg.


Agregar un puo de arena
Fin mientras
2.Si la bscula pasa de 2 kg.
Mientras la bscula no baje de 2 kg.
Quitar un poco de arena
Fin mientras
Fin si

Prueba de escritorio Problema 1:


bscula
0
200 g
500 g
750 g
1150 g
1500 g
1800 g
2100 g
2050 g
2000 g

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

1. Mientras la fila no se acabe


2. Revisar boleto del primer espectador
3. Si es azul
Aceptar
4. Si no
Rechazar
5. Recorrer fila
Fin Mientras

Prueba de escritorio Problema 2:


Personas en la fila
5
4
3
2
1
0

Boleto

Aceptar?

Azul
Rojo
Azul
Azul
Rojo

S
No
S
S
No

3. Analiza el siguiente algoritmo y contesta las preguntas.


X = 10
Mientras X>0, Repetir:

Mostrar el valor actual de X

X = X-1
Fin Mientras
a. Qu es lo que hace este programa?
Muestra los nmeros del 10 al 1 utilizando a x como variable.
b. Cuntas veces se repite el ciclo?
10

31

Programacin
.NET

c. Realiza una prueba de escritorio y anota el valor de x en cada repeticin. Prueba de


escritorio:
Repeticin X
1
10
2
9
3
8
4
7
5
6
6
5
7
4
8
3
9
2
10
1

Salida de pantalla

4. Analiza el siguiente algoritmo y contesta las preguntas.


Pedir el valor de X, y pedir el valor de Y
Mientras X>Y, Repetir:

Y = Y+1
Fin del ciclo
Mostrar el valor actual de Y
a. Qu es lo que hace este programa?
Si X es mayor a Y va a aumentar el valor de Y hasta que sea igual a X
y lo muestra en pantalla.
b. Realiza una prueba de escritorio asignando valores a X y Y, donde X > Y. Prueba de
escritorio
Repeticin X
0
16
1
2
3
4
5
6

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

Representa en diagrama de flujo los siguientes algoritmos. La calidad de los diagramas es


importante, por lo que debes utilizar reglas o plantillas para que los diagramas se vean ordenados
y limpios.
1. Utiliza el algoritmo para encender un vehculo que realizaste anteriormente y dibuja el
diagrama de flujo.
Inicio
Abrir la puerta del
vehculo

Entrar al vehculo

Es vehculo
estndar
Verdadero

Falso

Verificar que est en


parking

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

DURACIN SUGERIDA: 8 SESIONES / 45-50 MINUTOS

Durante el desarrollo de esta unidad aprenders a:


A Reconocer pseudocdigos.
B Identificar el Diagrama (N-S) y su aplicacin en los algoritmos.
C Realizar algunos algoritmos en diversos ejercicios, utilizando decisiones
simples.
D Programar algoritmos en diversos ejercicios, utilizando decisiones en secuencia.
E Organiza algoritmos en diversos ejercicios, utilizando decisiones de cascada o
anidadas.
F Construye diferentes algoritmos utilizando las funciones de los ciclos (mientras,
para, hacer-mientras, hacer-hasta, y ciclos anidados).
G Aplicar las herramientas Arreglos y Matrices para generar la solucin de
problemas.

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

BDiagramas de Nassi Schneiderman (N-S)


El diagrama N-S, tambin conocido como diagrama de Chapin, es una tcnica que combina
la descripcin textual del pseudocdigo, con la representacin grfica del diagrama de flujo.
Cuenta con un conjunto limitado de smbolos para representar los pasos del algoritmo, por lo
que se apoya en expresiones del lenguaje natural utilizando un conjunto de palabras reservadas.
Las palabras reservadas ms utilizadas son:
Inicio, Fin, Leer, Escribir, Mientras, Repetir, Hasta, Para, Incrementar, Decrementar, Hacer Funcin,
Entero Real, Carcter, Cadena, Lgico, Retornar.
Veamos como ejemplo un algoritmo que sirve para calcular el rea y permetro de cualquier
rectngulo. El usuario debe proporcionar los valores de la base y la altura.
Algoritmo para calcular el rea y permetro de un rectngulo.
Inicio
1. Pedir al usuario el valor de la base (b)
2. Pedir al usuario el valor de la altura (h)
3. Calcular el rea con la frmula A=b*h
4. Calcular el permetro con la frmula P= 2*(b+h)
5. Mostrar al usuario los valores de A y P
Fin

Este simple algoritmo se puede representar con un diagrama de flujo, como se muestra a
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

Para realizar el diagrama N-S tenemos que hacer el siguiente anlisis.


Datos de entrada: b y h (base y altura)
Datos de salida: A y P (rea y permetro)
Procesos: A = b * h , P = 2 * (b + h)
Diagrama N-S:

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

Hasta este punto parece que el diagrama


N-S no tiene diferencia alguna con el
pseudocdigo, con la excepcin de
que est dentro de una especie de
recuadro con filas. Empezars a notar
cambios cuando tengas que representar
estructuras.

Diagrama N-S de estructuras de decisin


Considera ahora el siguiente caso. Queremos disear un programa para encontrar el valor
absoluto de un nmero entero. Recuerda que para los enteros positivos el valor absoluto es el
mismo nmero, mientras que para los negativos, basta cambiar el signo para encontrar el valor
absoluto.
Datos de entrada: num (cualquier nmero entero
positivo o negativo)
Datos de salida: absnum (valor absoluto de num)
Proceso: absnum = num * (-1) Recuerda que
este proceso slo se realiza si num es menor
que cero.
Diagrama N-S:

42

Inicio
Entero:num, absnum
Leer num
num<0
Si
No
absnum=num*(-1) absnum=num
Escribir valor absoluto, absnum
Fin del algoritmo

Pseudocdigo

Para ejemplificar un algoritmo de decisin mltiple, considera un algoritmo para identificar el


mayor y menor de dos nmeros enteros dados.
Datos de entrada: num1, num2
Datos salida: mayor, menor
Proceso: comparacin
Diseo de la solucin

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

Fin del algoritmo

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

2. Algoritmo que te permita hacer un pastel.


Inicio
Comprar los ingredientes
Mezclar los ingredientes
Vaciar la mezcla en un molde para pastel
Prender el horno
Esperar unos minutos
Abrir el horno
El horno est caliente
Meter el pastel al horno
Esperar unos minutos
Abrir el horno
El pastel est listo
Sacar el pastel del horno
Fin del algoritmo
3. Algoritmo que te permita determinar si un nmero es par o impar.
Inicio
Entero: n
Entrar al vehculo
n MOD2 = 0
Si
Mostrar:
Es par
Fin del algoritmo

44

No

Mostrar:
Es impar

Pseudocdigo

4. Algoritmo que te permita desarrollar algoritmos.


Inicio
Determinar el problema
Elegir una posible solucin
Indicar los pasos a seguir
Hay posibles errores?
Corregir fallas
Realizar prueba del algoritmo
La solucin fue satisfactoria?
Fin del algoritmo

5. Algoritmo que te permita saber si un nmero es primo.


Inicio

Si

Entero: bandera, nmero, i = 0

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

Fin del algoritmo

nmero MODi= 0

Si
bandera = 1

No

i=i+1

45

Programacin
.NET
tema

CPseudocdigos de la estructura Si-Entonces- Si no


Ya hemos estudiado que cuando en un algoritmo hay que tomar una decisin, se utiliza el
condicional Si. Ya has escrito varios algoritmos utilizando esta estructura de decisin. Ahora
vers la forma correcta de escribir esta estructura en forma de pseudocdigo.
En la toma de decisiones que dependen de una condicin, la o las instrucciones que formen
parte de la estructura slo se ejecutan si se cumple una condicin. Adicionalmente se pueden
incluir una o varias instrucciones que se ejecuten slo en caso de que no se cumpla la condicin.
Un ejemplo en nuestro propio lenguaje sera algo as:

Si hace fro entonces

usar un abrigo

ir al cine

Si no

usar ropa fresca

ir a la playa
Fin_Si
Su estructura general es la siguiente:
Si (Condicin) entonces

Instrucciones a ejecutar en caso de que la condicin sea Verdadera

Si no

Instrucciones a ejecutar en caso de que la condicin sea Falsa


Fin_Si

Veamos un algoritmo de ejemplo. Se debe leer un nmero y determinar si ste es negativo o


positivo.
Programa Decisiones en Secuencia
Inicio

Entero: num

Escribir Digite un nmero entero

Leer num

Si num < 0

Escribir El nmero digitado es negativo

Si no

Escribir El nmero digitado es positivo
Fin _ Si
Fin

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

Entero: total = 0, i = 0, calificacion = 0


Mientras i < 5
Leer calificacion
total = total + calificacion
i = i + 1
Fin mientras
Si total /5 > 5
Mostrar Aprobado
Si no
Mostrar Reprobado
Fin si

2. Realiza un algoritmo para determinar si una persona es mayor de edad. Escrbelo en


pseudocdigo.
Inicio

Fin

Entero: Edad = 0
Leer Edad
Si Edad > 18
Mostrar Mayor de edad
Si no
Mostrar Menor de edad
Fin si

3. Leer un nmero y determinar si es un nmero primo. Escrbelo en pseudocdigo.


Inicio

Entero: bandera = numero = i = 0


Repetir Leer numero
Hasta que numero > 1
Si numero <> 2
i = 2

47

Programacin
.NET

Fin

Mientras bandera = 0 e i < numero/2


Si numero MOD 2 = 0
Bandera = 1
Fin si
i = i + 1
Fin mientras

Fin si
Si bandera = 0
Mostrar Es primo
Si no
Mostrar No es primo
Fin si

4. Leer un nmero y determinar si es nmero par. Escrbelo en pseudocdigo.


Inicio

Fin

Entero: numero
Leer numero
Si numero MOD 2 = 0
Mostrar El nmero es par
Fin si

5. Leer un nmero y determinar si es nmero impar. Escrbelo en pseudocdigo.


Inicio

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

4. Realizar un algoritmo que indique el tipo de un tringulo, dependiendo de las medidas de


sus tres ngulos.
Inicio

Entero: a1, a2, a3


Leer a1, a2, a3
Mientras a1+a2+a3 <> 180
Leer a1, a2, a3
Si a1=a2 y a1=a3 y a2=a3
Mostrar Tringulo equiltero
Si (a1=a2 y a3<> a1) o (a1=a3 y a2<> a1) o (a2=a3 y a1<> a2)

Mostrar Tringulo isceles
Si a1=90 o a2=90 o a3=90
Mostrar Tringulo rectngulo
Si a1>90 o a2>90 o a3>90
Mostrar Tringulo obtusngulo
Si a1<90 o a2<90 o a3<90
Mostrar Tringulo acutngulo
Fin

51

Programacin
.NET
tema

EDecisiones en cascada o anidadas


En este tipo de decisiones, un nuevo condicional completo se coloca dentro de la opcin Si o de
la opcin Si no de otro condicional. A veces es muy conveniente utilizar esta estructura porque
permite optimizar el programa y escribir menos instrucciones. Por ejemplo, analiza este caso:
Si llueve entonces

no salir de casa
Si no

Si hace fro

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

Tambin es posible tener un esquema como ste:


Si condicin1 entonces

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
Si no

Fin_si

Instrucciones a ejecutar en caso de que la condicin1 sea Falsa

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

Programa Decisin en Cascada


Inicio
Entero:num

Escribir Por favor, digite un nmero entero

Leer num

Si num < 0

num = num * (-1)
Fin _ si
Si num > = 1 y num < = 9 entonces

Escriba El nmero tiene 1 dgito
Si no

Si num > = 10 y num < 99 entonces

Escriba El nmero tiene 2 dgitos

Si no

Si num > = 100 y num < 999 entonces

Escriba El nmero tiene 3 dgitos

Si no

Si num > 1000 y num < = 9999 entonces

Escriba El nmero tiene 4 dgitos
Si no

Escriba El nmero tiene ms de 4 dgitos
Fin _ si
Fin _ si
Fin _ si
Fin _ si

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

Entero: num, aux1, aux2


Leer num
Mientras num<10 o num >99
Leer num
aux1= num/10
aux2= num MOD 10
Si aux1< aux2
Si aux2 MOD aux1 = 0

53

Programacin
.NET

Si no


Fin

Fin si

Mostrar El segundo dgito es mltiplo del primero


Fin si
Si aux1 MOD aux2 = 0
Mostrar El primer dgito es mltiplo del segundo
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

Entero: num1, num2, aux


Leer num1
Mientras num1<10 y num1 >99
Leer num1
Leer num2
Mientras num2<10 y num2 >99
Leer num2
Si num2 > num1
aux=num1
num1=num2
num2=aux
Fin si
aux=num1-num2
Si aux MOD 2 = 0

Mostrar num1+num2
Si aux < 10

Mostrar num1*num2
Si aux MOD 10 = 4

Mostrar aux

4. Leer un nmero entero de 2 dgitos. Si el nmero termina en 1 mostrar en pantalla su primer


dgito, si termina en 2 mostrar en pantalla la suma de sus dgitos y si termina en 3 mostrar
en pantalla el producto de sus dos dgitos.
Inicio

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

Entero num, cont = 2


Leer num
Mientras num < 1
Leer num
Fin mientras
Mientras cont < num
Mostrar cont
cont =cont + 2
Fin mientras

2. Mostrar en pantalla todos los enteros impares comprendidos entre 20 y 150.

56

Pseudocdigo

Inicio

Fin

Entero cont = 21
Mientras cont < 150
Mostrar cont
cont =cont + 2
Fin mientras

3. Leer un nmero entero y determinar si es un nmero primo.


Inicio

Fin

Entero: bandera = i = 0, numero


Leer numero
Mientras numero < 0
Leer numero
Si numero <> 0 y numero <> 1
i = 2
Mientras bandera = 0 e i < numero/2
Si numero MOD i = 0
Bandera = 1
i = i + 1
Fin si
Fin mientras
Fin si
Si bandera = 0
Mostrar Es primo
Fin si

4. Leer cualquier nmero entero y mostrar en pantalla su tabla de multiplicar. Escribe el


pseudocdigo y dibuja un diagrama N-S. o diagrama de flujo.
Inicio

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

3. Mostrar en pantalla los primeros 20 mltiplos de 4.


Inicio

Fin

Entero: num
Para num = 1 hasta 20
Mostrar 4* num
Fin para

4. Sumar los nmeros primos comprendidos entre el 1 y el 22.


Inicio

58

Entero: total = 0, num


Para num = 1 hasta 22
Si num es primo
total = total + num

Pseudocdigo

Fin

Fin para
Mostrar total

Fin si

5. Mostrar en pantalla los nmeros pares comprendidos entre el 20 y el 30.


Inicio

Entero: i
Para i = 20 hasta 30
Mostrar i
i = i + 1
Fin para
Fin

ACTIVIDAD

2-07

Ciclo Hacer Mientras

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, prod = 1, fact = 1


Leer num
Mientras num < 1
Leer num
Hacer
fact* = prod
prod + = 1
Mientras prod < num
Mostrar fact

2. Mostrar en pantalla todos los impares comprendidos entre 1 y 100.


Inicio

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

Entero: a, b, suma, aux


Leer a, b
Si b < a
aux = a
a = b
Fin si
Hacer
suma + = a
a + = 1
Mientras a < b

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

Entero: suma, num


Hacer
Leer num
suma + = num
Mientras num <> 9
Mostrar suma

Inicio
Entero = suma, num
num
suma + = num
num <>a

Verdadero

Falso
suma
Fin

ACTIVIDAD

2-08

Ciclo Hacer - Hasta

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

2. Mostrar en pantalla todos los pares comprendidos entre 20 y 100.


Inicio

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

Entero: a, b, aux, suma


Leer a, b
Si b > a
aux = a
a = b
b = aux
Fin si
Hacer

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

Entero: num, suma


Hacer
Leer num
suma + = num
Hasta num = 9
Mostrar suma

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

3. Utilizando tres ciclos anidados generar las siguientes ternas de nmeros

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

Escribiendo pseudocdigos matemticos

1. Usando un ciclo escribe el pseudocdigo de un programa que muestre en pantalla la tabla de


multiplicar que pida el usuario, es decir, si el usuario teclea un 7, en la pantalla debe verse:


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

Entero: N1, N2, D1, D2


Leer N1, N2
Hacer
Leer D1
Hasta que D1 <> 0
Hacer
Leer D2
Hasta que D2 <> 0
Mostrar El producto de las fracciones es
N1* N2 sobre D1* D2

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

Entero: edad [7], i


Para i = 1 hasta 7
Leer edad [i]
Fin para
Para i = 1 hasta 7
Mostrar Persona nmero edad[i] es
Si edad [i] < 18
Mostrar Menor de edad
Si no
Mostrar Mayor de edad
Fin para

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

2. Leer 8 enteros, almacenarlos en un arreglo y determinar en qu posicin del arreglo est el


mayor nmero ledo. Adems escribir cul es el nmero mayor del arreglo.
Inicio

Fin

Entero: mayor [8], aux, M, i


Para i = 1 hasta 8
Leer mayor [i]
Fin para
aux = 1
M = mayor[i] > M
Para i = 2 hasta 8
Si mayor[i] > M
aux = i
M = mayor [i]
Fin_si
Fin para
Mostrar El nmero mayor es
Mostrar M
Mostrar Que se encuentra en la posicin
Mostrar aux

67

Programacin
.NET

3. Almacenar en un arreglo de 10 posiciones los 10 primeros nmeros primos comprendidos


entre 150 y 320. Luego mostrarlos en pantalla.
Inicio

Fin

Entero: primos[10], i, cont


cont = , i = 150
Mientras cont < 10 e i < 320
Si i es numero primo
primos [cont] = i
i ++
cont ++
Fin si
Fin mientras
Para i = 1 hasta contador -1
Mostrar primos [i]
Fin para

4. Leer 15 nmeros enteros, almacenarlos en un arreglo y determinar si existe al menos un


nmero repetido.
Inicio

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

Glosario de conceptos algoritmos

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

.NET soporta ms de 20 lenguajes de programacin,


entre los cuales se encuentran: C#, Visual Basic .NET,
Delphi (Object Pascal), C++, F#, J#, Perl, Python, Fortran,
Prolog, Cobol y PowerBuilder.

Un id ad

03

NIVEL: Intermedio

.N ET

DURACIN SUGERIDA: 7 SESIONES / 45-50 MINUTOS

Durante el desarrollo de esta unidad aprenders a:


A Identificar la plataforma .NET, tambin su kit de desarrollo .Net Framework,
que le permitirn desarrollar aplicaciones simples o complejas.
B Conocer el entorno de C# y su instalacin.
C Describir los elementos que conforman un programa, conocer los diferentes
tipos de datos como hacer la declaracin de estos.
D Evaluar el valor de las variables en diferentes operaciones.
E Operar las sentencias de control.
F Conocer las definiciones de mtodo,arreglo y colecciones, su uso e importancia.

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

Entorno de desarrollo (IDE)


El entorno de desarrollo integrado (IDE) de Visual C# es un conjunto de herramientas de
desarrollo expuestas a travs de una interfaz de usuario comn. Algunas de las herramientas
se comparten con otros lenguajes de Visual Studio, y otras, como el compilador de C#, son
exclusivas de Visual C#. En este tema se proporcionan vnculos a las herramientas de Visual C#
ms importantes.
Visual C# es parte de la familia Visual Studio, un conjunto de herramientas de que los
desarrolladores en cualquier nivel se puede utilizar para crear aplicaciones personalizadas
utilizando la configuracin bsica.
Visual C# (pronunciado como c Sharp) esta diseado para la construccin de una gran variedad
de aplicaciones que se ejecutan en .NET Framework, C# es simple, poderoso, con seguridad de
tipos y Orientado a Objetos.

3-01
VIDEO
74

Instalando Visual C# Express 2010

.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.

Imagen 3-1: Pgina Principal

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.

Imagen 3-2: Nuevo proyecto

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

Imagen 3-3: Espacio de trabajo de Visual C# 2010 Express

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

Consola y Buffer de entrada

T IP

Cuando se crea un nuevo proyecto es


recomendable poner el nombre a nuestro
proyecto en el ejemplo de hola mundo
el nombre debe ser HolaMundo, ojo no
debe de haber espacios intermedios
entre los nombres.

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();
}
}
}

Ya hemos terminado. No te olvides de guardarlo antes de salir. Con Archivo/Guardar Todo, o


bien el botn con varios discos dibujados, o bien la combinacin de teclas <Ctrl+Mays+S>.
Ahora realiza un programa que muestre el mensaje Estoy realizando mi segundo programa,
tambin que imprima tu nombre completo, direccin y telfono, todo en lneas separadas.
Escribe el cdigo del programa:

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

Otros elementos del programa

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
}
}

La clase es algo as como la estructura o molde de un componente de software, y se define con


la palabra clave class. El trmino public le informa al sistema que dicha clase y sus componentes
estn disponibles para ser vistos desde afuera del componente de software que la contiene, en
este caso el propio programa.
El programa en s, observe, es una clase, pero no se puede perder de vista que en la prctica el
programa necesita otros componentes de software para poder ejecutarse, y lo ms seguro es
que estos ltimos de alguna manera dependan de una o ms clases.
Cuando se ejecuta el programa, el sistema operativo a travs de la plataforma de ejecucin,
.NET, crea una instancia (para comenzar entindase, un componente de software basado en
ese molde) de esta clase e interpreta las ordenes contenidas en ella. El nombre que le coloques
a la clase, es una cadena de texto tomada arbitrariamente e indiferente a como se escriba, lo
importante es considerar la siguiente regla:
Los nombres de los elementos deben iniciar con una letra o por un guin bajo
Todo programa desarrollado en C# debe incluir un mtodo Main(), el cual le informa al compilador

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:

abstract, as, base,


bool, break, byte, case,
catch, char, checked, class, const, continue,
decimal, default, delegate, do, double,
else, enum, event, explicit, extern,
false, finally, fixed, float, for, foreach,
goto,
if, implicit, in, int, interface, internal, is,
lock, long,
namespace, new, null,
object, operator, out, override,
params, private,protected, public,
readonly, ref, return,
sbyte, sealed, short, sizeof, stackalloc, static, string, struct, switch,
this, throw, true, try, typeof,
uint, ulong, unchecked, unsafe, ushort, using,
virtual, void, while

81

Programacin
.NET

Aparte de estas palabras reservadas, si en futuras implementaciones del lenguaje se decidiese


incluir nuevas palabras reservadas, Microsoft dice que dichas palabras habran de incluir al
menos dos smbolos de subrayado consecutivos (__) Por tanto, para evitar posibles conflictos
futuros no se recomienda dar a nuestros identificadores nombres que contengan dicha
secuencia de smbolos.

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:

<tipoVariable> <nombreVariable> = <valorInicial>;

As por ejemplo, la anterior asignacin de valor a la variable p podra rescribirse de esta otra
forma ms compacta:

Persona p

= new Persona(Jos, 22, 76543876-A);

La especificacin de un valor inicial tambin combinarse con la definicin de mltiples variables


separadas por comas en una misma lnea. Por ejemplo, las siguientes definiciones son vlidas:

Persona p1 = new Persona(Jos, 22, 76543876-A),


p2 = new Persona(Juan, 21, 87654212-S);

Y son tratadas por el compilador de forma completamente equivalentes a haberlas declarado


como:

Persona p1 = new Persona(Jos, 22, 76543876-A);


Persona p2 = new Persona(Juan, 21, 87654212-S);

3-04
LMINA

Otros tipos de variables

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;

System.Int32 no es el nico tipo de dato bsico incluido en C#. En el espacio de nombres


System se han incluido todos estos:

Tipo CTS

Descripcin

Valores que acepta

System.Object

object

Clase base de todos los


tipos del CTS

Cualquier objeto

System.String

string

Cadenas de caracteres

Cualquier cadena

System.SByte

sbyte

Byte con signo

Desde -128 hasta 127

System.Byte

byte

Byte sin signo

Desde 0 hasta 255

System.Int16

short

Enteros de 2 bytes con


signo

Desde -32.768 hasta 32.767

System.UInt16

ushort

Enteros de 2 bytes sin


signo

Desde 0 hasta 65.535

System.Int32

int

Enteros de 4 bytes con


signo

Desde -2.147.483.648 hasta


2.147.483.647

System.UInt32

uint

Enteros de 4 bytes sin


signo

Desde 0 hasta 4.294.967.295

System.Int64

long

Enteros de 8 bytes con


signo

Desde -9.223.372.036.854.775.808
hasta 9.223.372.036.854.775.807

System.UInt64

ulong

Enteros de 8 bytes sin


signo

Desde 0 , hasta
18.446.744.073.709.551.615

System.Char

char

Caracteres Unicode de 2
bytes

Desde 0 hasta 65.535

System.Single

float

Valor de coma flotante de


4 bytes

Desde 1,5E-45 hasta 3,4E+38

System.Double

double

Valor de coma flotante de


8 bytes

Desde 5E-324 hasta 1,7E+308

System.Boolean

bool

Verdadero/falso

true false

decimal

Valor de coma flotante


de 16 bytes (tiene 28-29
dgitos de precisin)

Desde 1E-28 hasta 7,9E+28

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

Tipo del literal entero

Posibles sufijos vlidos:


ninguno

Primero de: int, uint, long, ulong

L l[9]

Primero de: long, ulong

Uu

Primero de: int, uint

UL, Ul, uL, ul, LU, Lu, lU lu

ulong

Sufijos que admiten los literales reales:


Ff

float

ninguno, D d

double

Mm

decimal

3-03
VIDEO

Declaracin de variables

87

Programacin
.NET
tema

DOperadores, constantes y enumeraciones


Operadores
Un operador en C# es un smbolo formado por uno o ms caracteres que permite realizar una
determinada operacin entre uno o ms datos y produce un resultado.

3-04
VIDEO

Operadores Unarios

A continuacin se describen cules son los operadores incluidos en el lenguaje clasificados


segn el tipo de operaciones que permiten realizar, aunque hay que tener en cuenta que C#
permite la redefinicin del significado de la mayora de los operadores segn el tipo de dato
sobre el que se apliquen, por lo que lo que aqu se cuenta se corresponde con los usos ms
comunes de los mismos:
Operaciones aritmticas: Los operadores aritmticos incluidos en C# son los tpicos de
suma (+), resta (-), producto (*), divisin (/) y mdulo (%) Tambin se incluyen operadores
de menos unario () y ms unario (+).
Relacionados con las operaciones aritmticas se encuentran un par de operadores llamados
checked y unchecked que permiten controlar si se desea detectar los desbordamientos que
puedan producirse si al realizar este tipo de operaciones el resultado es superior a la capacidad
del tipo de datos de sus operandos. Estos operadores se usan as:
checked(<expresinAritmtica>)
unchecked(<expresinAritmtica>)

Ambos operadores calculan el resultado de <expresinAritmtica> y lo devuelven


si durante el clculo no se produce ningn desbordamiento. Sin embargo, en caso de que
haya desbordamiento cada uno acta de una forma distinta: checked provoca un error de
compilacin si <expresinAritmtica> es una expresin constante y una excepcin
System.OverflowException si no lo es, mientras que unchecked devuelve el resultado de la
expresin aritmtica truncado para que quepa en el tamao esperado.
Por defecto, en ausencia de los operadores checked y unchecked lo que se hace es evaluar
las operaciones aritmticas entre datos constantes como si se les aplicase checked y las
operaciones entre datos no constantes como si se les hubiese aplicado unchecked.
Operaciones lgicas: Se incluyen operadores que permiten realizar las operaciones lgicas
tpicas: and (&& y &), or (|| y |), not (!) y xor (^).

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

Variales de slo lectura

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>
}

En realidad una enumeracin es un tipo especial de estructura (luego System.ValueType


ser tipo padre de ella) que slo puede tener como miembros campos pblicos constantes y
estticos. Esos campos se indican en , y como sus modificadores son siempre los mismos no
hay que especificarlos (de hecho, es errneo hacerlo).
El tipo por defecto de las constantes que forman una enumeracin es int, aunque puede drseles
cualquier otro tipo bsico entero (byte, sbyte, short, ushort, uint, int, long o ulong) indicndolo
en <tipoBase>. Cuando se haga esto hay que tener muy presente que el compilador de C#
slo admite que se indiquen as los alias de estos tipos bsicos, pero no sus nombres reales
(System.Byte, System.SByte, etc.)
Si no se especifica valor inicial para cada constante, el compilador les dar por defecto valores
que empiecen desde 0 y se incrementen en una unidad para cada constante segn su orden
de aparicin en la definicin de la enumeracin. As, el ejemplo del principio del tema es
equivalente a:
enum Tamao:int
{
Pequeo = 0,
Mediano = 1,
Grande = 2
}

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

b. Escribe un mensaje en la pantalla solicitando Ingrese las horas trabajadas:


c. Almacena en la variable lnea lo que se introduzca con el teclado.
d. Almacena en horas trabajadas el parseo a entero de la variable lnea (int.Parse (linea)).
e. Solicita que se ingrese el pago por hora.
f. Almacena en lnea la cantidad ingresada por el usuario.
g. Almacena en costoHora el paseo a flotante de la variable lnea(float.Parse (lnea)).
h. En la variable sueldo haz la multiplicacin de las horas por el costo.
i. Muestra en pantalla el resultado .
j. Haz una pausa para que no se cierre la pantalla inmediatamente.
2. Escribe a continuacin el cdigo fuente del programa:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CalculoSueldo
{
class Program
{
static void Main(string[] args)
{
int horasTrabajadas;
float costoHora;
float sueldo;
string linea;
Console.Write(Ingrese Horas trabajadas:);
linea = Console.ReadLine();
horasTrabajadas = int.Parse(linea);
Console.Write(Ingrese el pago por hora:);
linea = Console.ReadLine();
costoHora = float.Parse(linea);
sueldo = horasTrabajadas * costoHora;
Console.Write(El sueldo total del operario es:);
Console.Write(sueldo);
Console.ReadLine();
}
}
}

94

.NET

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>}

El significado de esta instruccin es el siguiente: se evala la expresin <condicin>, que ha


de devolver un valor lgico. Si es cierta (devuelve true) se ejecutan las <instruccionesIf>,
y si es falsa (false) se ejecutan las <instruccionesElse> La rama else es opcional, y si
se omite y la condicin es falsa se seguira ejecutando a partir de la instruccin siguiente al if.
En realidad, tanto <instruccionesIf> como <instruccionesElse> pueden ser una
nica instruccin o un bloque de instrucciones. Ejemplo:
Si (te portas bien)
{
te compro un helado;
te dejo ver la tele;
} de lo contrario
{
te castigo en tu cuarto;
te quedas sin cenar;
}

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

El significado de esta instruccin es el siguiente: se evala. Si su valor es se ejecuta el, si es se


ejecuta , y as para el resto de valores especificados. Si no es igual a ninguno de esos valores y
se incluye la rama default, se ejecuta el ; pero si no se incluye se pasa directamente a ejecutar
la instruccin siguiente al switch.
Los valores indicados en cada rama del switch han de ser expresiones constantes que produzcan
valores de algn tipo bsico entero, de una enumeracin, de tipo char o de tipo string. Adems,
no puede haber ms de una rama con el mismo valor.
En realidad, aunque todas las ramas de un switch son opcionales siempre se ha de incluir al
menos una. Adems, la rama default no tiene porqu aparecer la ltima si se usa, aunque es
recomendable que lo haga para facilitar la legibilidad del cdigo.
Ejemplo:
comprobemos (opcion)
{
en caso de 1:
te descuento un
Nada ms;
en caso de 2:
te descuento un
Nada ms;
en caso de 3:
te descuento un
Nada ms;
en otro caso:
no te descuento
Nada ms;
}

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

Su significado es el siguiente: Se evala la <condicin> indicada, que ha de producir un


valor lgico. Si es cierta (valor lgico true) se ejecutan las <instrucciones> y se repite el
proceso de evaluacin de <condicin> y ejecucin de <instrucciones> hasta que
deje de serlo. Cuando sea falsa (false) se pasar a ejecutar la instruccin siguiente al while. En
realidad <instrucciones> puede ser una nica instruccin o un bloque de instrucciones.

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>
}

El significado de esta instruccin es el siguiente: se ejecutan las instrucciones de


<inicializacin>, que suelen usarse para definir e inicializar variables que luego se
usarn en <instrucciones>. Luego se evala <condicin>, y si es falsa se contina
ejecutando por la instruccin siguiente al for; mientras que si es cierta se ejecutan las
<instrucciones> indicadas, luego se ejecutan las instrucciones de <modificacin>
-que como su nombre indica suelen usarse para modificar los valores de variables que se usen
en <instrucciones> - y luego se reevala <condicin> repitindose el proceso hasta
que sta ltima deje de ser cierta.
En <inicializacin> puede en realidad incluirse cualquier nmero de instrucciones que
no tienen porqu ser relativas a inicializar variables o modificarlas, aunque lo anterior sea su
uso ms habitual. En caso de ser varias se han de separar mediante comas (,), ya que el
carcter de punto y coma (;) habitualmente usado para estos menesteres se usa en el for
para separar los bloques de <inicializacin>, <condicin> y <modificacin>
Adems, la instruccin nula no se puede usar en este caso y tampoco pueden combinarse
definiciones de variables con instrucciones de otros tipos.
Con <modificacin> pasa algo similar, ya que puede incluirse cdigo que nada tenga que
ver con modificaciones pero en este caso no se pueden incluir definiciones de variables.
Como en el resto de instrucciones hasta ahora vistas, en <instrucciones> puede ser tanto
una nica instruccin como un bloque de instrucciones. Adems, las variables que se definan
en <inicializacin> sern visibles slo dentro de esas <instrucciones>.

3-09
VIDEO

Ciclo For

97

Programacin
.NET

Uso De Break Y Continue


Como se comento uno de los usos de la sentencia break es terminar un case en la sentencia
switch. Otro uso es forzar la terminacin inmediate de un ciclo, saltando la prueba condicional
del ciclo. Cuando se encuentra la sentencia break en un bucle, la computadora termina
inmediatamente el ciclo y el control del programa pasa a la siguiente sentecia del ciclo. Por
ejemplo:
main()
{
int t;
for(t=0; t<100; t++)
{

printf(%d , t);

if (t==10) break;
}
}

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

1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente


cdigo:
using System;
class HolaMundoIf
{
public static void Main(String[] args)
{
if (args.Length > 0){
Console.WriteLine(Hola {0}!, args[0]);}
else{
Console.WriteLine(Hola mundo!);}
}
}

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?

5. Escribe el nombre del programa, en este caso ConsoleAplication1.exe, seguido de tu


nombre Tu nombre. Qu funcin realliza ahora este programa?

6. Guarda el programa en la ubicacin que indique tu profesor.


NOTAS:

99

Programacin
.NET

7. Crea otro proyecto de consola nuevo y escribe el siguiente cdigo:


using System;
class HolaMundoSwitch
{
public static void Main(String[] args)
{
if (args.Length > 0)
switch(args[0])
{
case Jos:

Console.WriteLine(Hola Jos. Buenos das);
break;
case Paco:
Console.WriteLine(Hola Paco. Me alegro de verte);
break;
default:

Console.WriteLine(Hola {0}, args[0]);
break;
}
else
Console.WriteLine(Hola Mundo);
}
}

8. De manera similar a la anterior busca la ruta del programa y ejectalo desde la Consola de
Windows. Qu funcin realliza este programa?

9. Ejecuta el programa, pero ahora escribe Paco, Qu funcin realliza?

10. Ejecuta el programa agregando el texto Jos. Qu funcin realliza?

11. Ejecuta el programa agregando cualquier texto. Qu funcin realliza?

12. Guarda el programa en la ubicacin que indique tu profesor.

100

.NET

tema

FMtodos, Arreglos y Colecciones


Mtodos
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. A estas instrucciones se les denomina cuerpo del mtodo, y a su
ejecucin a travs de su nombre se le denomina llamada al mtodo.
La ejecucin de las instrucciones de un mtodo puede producir como resultado un objeto
de cualquier tipo. A este objeto se le llama valor de retorno del mtodo y es completamente
opcional, pudindose escribir mtodos que no devuelvan ninguno.
La ejecucin de las instrucciones de un mtodo puede depender del valor de unas variables
especiales denominadas parmetros del mtodo, de manera que en funcin del valor que se
d a estas variables en cada llamada la ejecucin del mtodo se pueda realizar de una u otra
forma y podr producir uno u otro valor de retorno.
Al conjunto formado por el nombre de un mtodo y el nmero y tipo de sus parmetros se le
conoce como signatura del mtodo. La signatura de un mtodo es lo que verdaderamente lo
identifica, de modo que es posible definir en un mismo tipo varios mtodos con idntico nombre
siempre y cuando tengan distintos parmetros. Cuando esto ocurre se dice que el mtodo que
tiene ese nombre est sobrecargado.
Definicin De Mtodo: Para definir un mtodo hay que indicar tanto cules son las
instrucciones que forman su cuerpo como cul es el nombre que se le dar, cul es el tipo
de objeto que puede devolver y cules son los parmetros que puede tomar. Esto se indica
definindolo as:
<tipoRetorno> <nombreMtodo>(<parmetros>)
{
<cuerpo>
}

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

Definicion de namespace: Para definir un namespace se utiliza la siguiente sintaxis:


namespace <nombreEspacio>
{
<tipos>
}

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
{}
}

El verdadero nombre de una clase, al que se denomina nombre completamente calificado, es


el nombre que le demos al declararla prefijado por la concatenacin de todos los namespace
a los que pertenece ordenados del ms externo al ms interno y seguido cada uno de ellos
por un punto (carcter). Por ejemplo, el verdadero nombre de la clase ClaseEjemplo antes
definida es EspacioEjemplo.ClaseEjemplo.
Si no definimos una clase dentro de una definicin de namespace -como se ha hecho en los
ejemplos de temas previos- se considera que sta pertenece al llamado namespace global
y su nombre completamente calificado coincidir con el identificador que tras la palabra
reservada class le demos en su definicin (nombre simple).Aparte de definiciones de tipo,
tambin es posible incluir como miembros de un namespace a otros namespace. Es decir,
como se muestra el siguiente ejemplo es posible anidar namespace:
namespace EspacioEjemplo
{
namespace EspacioEjemplo2
{
class ClaseEjemplo
{}
}
}

105

Programacin
.NET

Ahora ClaseEjemplo tendr EspacioEjemplo.EspacioEjemplo2.ClaseEjemplo como nombre


completamente calificado. En realidad es posible compactar las definiciones de namespace
anidados usando esta sintaxis de calificacin completa para dar el namespace de nombres
a definir. Es decir, el ltimo ejemplo es equivalente a:
namespace EspacioEjemplo.EspacioEjemplo2
{
class ClaseEjemplo
{}
}

En ambos casos lo que se ha definido es una clase ClaseEjemplo perteneciente al namespcae


EspacioEjemplo2 que, a su vez, pertenece al espacio EspacioEjemplo.

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);;
}
}

2. Qu tarea realliza este programa?

106

.NET

3. Cul fue el error que marc?

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

Datos: 30, agosto, 3.1416, 1, 3, 5, 7, 9, 11


Variable

30

Arreglo:

Constante_numrica
Factor_de_crecimiento
Resultado_nota

Estructuras, Modelos de datos


5

11

13

Impares
Numeros_serie
Infracciones

Registro:

30

Datos_alumno
Datos_lluvia
Datos_tiempo

Archivo:
Careta
Transparencia
documento

agtosto
5

3.1416
11

13

La sintaxis del lenguaje permite referirse a cada uno de


los elementos que constituyen el arreglo empleando
ndices. Esto es posible pues los elementos del arreglo
estn numerados en forma jerrquica y consecutiva,
empezando en 0 en cada dimensin.
La siguiente imagen muestra un ejemplo de un arreglo
llamado numeros, cuya posicin 0 almacena el valor
10, la posicin 1 el valor de 21, etc. Este arreglo en total
almacena n+1 elementos. El valor de n, depende de la
memoria que pueda tener el computador y el tipo de
elementos que se almacenen en el arreglo.

Este es un ejemplo de un archivo de texto.


Un archivo de texto se caracteriza por estar
compuesto de caracteres ASCII solamente.
En un archivo de texto se puede editar
programas en C. Generalmente tienen la
extensin: txt. Bat. .C

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

El lenguaje C# no controla la validez de los ndices que se emplean para referenciar un


arreglo. Esto quiere decir que es posible cometer errores graves y difciles de detectar en
este sentido. Ms adelante se presenta un ejemplo en este sentido.
Declaracin de arreglos
Los arreglos, al igual que las dems variables deben declararse antes de poder utilizarlas, y
cumplen con las mismas reglas de alcance y vida. Los arreglos de una sola dimensin reciben
tambin el nombre de vectores. La sintaxis de la declaracin de un arreglo unidimensional es
la siguiente:
<tipo-base>[] <identificador>;

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>]

Adicionalmente es factible declarar, dimensionar, e inicializar un arreglo con todos sus


elementos, en una sola declaracin:
<tipo-base>[] <identificador> = {valor1, valor2, ..., valorN};

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

<tipo-base>[] <identificador> = new <tipo-base>[N] {valor1, ..., valorM};

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

Funciones mas comunes con arreglos


En C#, los arreglos se representan con un tipo especfico, y por ello cuentan con sus propios
atributos y mtodos especficos. Por ejemplo, para obtener el largo (la cantidad de elementos
dimensionados) de un arreglo, o para ordenarlo.
Largo de un arreglo: En el caso de los arreglos unidimensionales, el tamao o cantidad de
elementos se obtiene con la propiedad Length. Ejemplo:
int [] numeros = { 1,2,3,4,5,6 }
Console.WriteLine(Largo: {0}, numeros.Length);

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

En el mismo caso en que se pueda ordenar un arreglo, se puede reordenar exactamente al


revs de como est, aprovechando el mtodo bsico Reverse() de la clase Array:
int [] numeros = { 1,2,3,4,5,6 }
Array.Reverse(numeros); // 6,5,4,3,2,1

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();

2. Qu funcin realliza este programa?

3. Guarda el programa en la ubicacin que indique tu profesor.

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

ms objetos. La direccin al siguiente nodo es un puntero. Representacin grfica de una lista:


Como decamos, una lista es una secuencia de nodos (en este caso cuatro nodos). La
informacin de los nodos en este caso es un entero y siempre contiene un puntero que guarda
la direccin del siguiente nodo.raiz es otro puntero externo a la lista que contiene la direccin
del primer nodo.
El estado de una lista vara durante la ejecucin del programa:
De esta forma representamos grficamente una lista vaca. Si insertamos un nodo en la lista
quedara luego:
Si insertamos otro nodo al principio con el valor 9 tenemos:
Igualmente podemos borrar nodos de cualquier parte de la lista. Esto nos trae a la mente el
primer problema planteado: el desarrollo del procesador de texto. Podramos utilizar una lista
que inicialmente estuviera vaca e introdujramos un nuevo nodo con cada lnea que escribe el
operador. Con esta estructura haremos un uso muy eficiente de la memoria.

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

Como sabemos, en una pila se extrae el ltimo en entrar.


Al extraer de la pila tenemos: extraer().
La pila ha quedado con un nodo. Hay que tener cuidado que si se extrae un nuevo nodo la pila
quedar vaca y no se podr extraer otros valores (avisar que la pila est vaca).

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);
}
}
}

2. Qu funcin realliza este programa?

3. Guarda el programa en la ubicacin que indique tu profesor.


4. Responde correctamente:
a. Qu es una lista?
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.
b. Qu es una lista LIFO?
Es una lista que se comporta como una pila. Si las inserciones y extracciones las hacemos por un mismo lado de la lista recibe el nombre delistas
LIFO (Last In First Out - ltimo en entrar primero en salir).
c. Qu es una lista FIFO?
Cuando una lista se comporta como una cola, las inserciones las hacemos al final y las extracciones las hacemos por el frente de la lista, las
denominamos listas FIFO (First In First Out - primero en entrar primero en
salir).

117

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

Los objetos son entidades con valores bien diferenciados en sus


atributos, que son: estado, comportamiento e identidad.

Un id ad

04

NIVEL: Intermedio

P rogra macin
or ientad a a objeto s

DURACIN SUGERIDA: 4 SESIONES / 45-50 MINUTOS

Durante el desarrollo de esta unidad aprenders a:


A Reconocer el concepto de clase y el modo de acceso a estas en la programacin
con C#.
B Realizar interfaces graficas usando los diferentes controles que proporciona C#.
C Conocer y manejar excepciones en C#.
D Nombrar los requerimientos para el manejo de archivos en C#.

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
{}

Una clase as declarada no dispondr de ningn miembro a excepcin de los implcitamente


definidos de manera comn para todos los objetos que creemos en C#. Aunque en C# hay
muchos tipos de miembros distintos, por ahora vamos a considerar que estos nicamente
pueden ser campos o mtodos y vamos a hablar un poco acerca de ellos y de cmo se definen:
Campos: Un campo es un dato comn a todos los objetos de una determinada clase. Para
definir cules son los campos de los que una clase dispone se usa la siguiente sintaxis
dentro de la zona sealada como <miembros> en la definicin de la misma:
<tipoCampo> <nombreCampo>;

El nombre que demos al campo puede ser cualquier identificador que queramos siempre y
cuando siga las reglas descritas en Aspectos Lxicos para la escritura de identificadores y
no coincida con el nombre de ningn otro miembro previamente definido en la definicin
de clase.

120

Programacin orientada a objetos

Los campos de un objeto son a su vez objetos, y en <tipoCampo> hemos de indicar


cul es el tipo de dato del objeto que vamos a crear. ste tipo puede corresponderse con
cualquiera que los predefinidos en la BCL o con cualquier otro que nosotros hallamos
definido siguiendo la sintaxis arriba mostrada. A continuacin se muestra un ejemplo de
definicin de una clase de nombre Persona que dispone de tres campos:

{



}

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;

En realidad lo marcado como <objeto> no tiene porqu ser necesariamente el nombre


de algn objeto, sino que puede ser cualquier expresin que produzca como resultado
una referencia no nula a un objeto (si produjese null se lanzara una excepcin del tipo
predefinido System.NullPointerException).
Mtodos: Un mtodo es un conjunto de instrucciones a las que se les asocia un nombre
de modo que si se desea ejecutarlas basta referenciarlas a travs de dicho nombre en vez
de tener que escribirlas. Dentro de estas instrucciones es posible acceder con total libertad
a la informacin almacenada en los campos pertenecientes a la clase dentro de la que
el mtodo se ha definido, por lo que como al principio del tema se indic, los mtodos
permiten manipular los datos almacenados en los objetos. La sintaxis que se usa en C# para
definir los mtodos es la siguiente:

<tipoDevuelto> <nombreMtodo> (<parametros>)
{
<instrucciones>
}

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

<tipoDevuelto>. Si no devuelve nada se indica void, y si devuelve algo es obligatorio


finalizar la ejecucin de sus instrucciones con alguna instruccin return <objeto>; que
indique qu objeto ha de devolverse.

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

Programacin orientada a objetos

la instruccin private, sino declararlas de la forma habitual. La accesibilidad de un tipo, variable


o procedimiento en la que no hemos indicado el modificador de accesibilidad depender del
sitio en el que lo hemos declarado.
Por ejemplo, las clases y estructuras definidas a nivel de un espacio de nombres solo pueden ser
declaradas como public o internal, y si no llevan un modificador de accesibilidad, por defecto
sern internal, es decir sern visibles en todo el proyecto actual. Por otro lado, las interfaces y
enumeraciones por defecto sern pblicas.
Cuando la clase, estructura, interfaz o enumeracin est definida dentro de otro tipo, la
accesibilidad predeterminada ser private, pero admitirn cualquiera de los modificadores,
salvo las interfaces y enumeraciones que no pueden ser protected.
Por otro lado, los miembros de esos tipos tambin permiten diferentes niveles de accesibilidad,
en el caso de las interfaces y enumeraciones, siempre sern pblicos, aunque no se permite
el uso de esa instruccin. Los miembros de las clases y estructuras sern privados de forma
predeterminada, en el caso de las clases, en esos miembros podemos indicar cualquiera de los
cinco niveles de accesibilidad, mientras que en las estructuras no podremos declarar ningn
miembro como protected o protected internal, ya que una estructura no puede usarse como
base de otro tipo de datos.

PROYECTO

4-01

Colas

1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente 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

Programacin orientada a objetos

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

}
}

for (int i = 0; i < _ arregloCola.Length; i++)


{
if ( _ frente == i)
{
Console.Write([Frente] + _ arregloCola[i]);
}
else
{
Console.Write([ + i + ] + _ arregloCola[i]);
}
Console.Write(\n);
}

2. Qu sucede con el mtodo MuestraCola?

3. Guarda el programa en la ubicacin que indique tu profesor.


4. Qu es una clase?
Una clase es la definicin de las caractersticas concretas de
un determinado tipo de objetos.

5. Qu es accesibilidad?
La accesibilidad es la caracterstica que podemos aplicar a cualquiera
de los elementos que definamos en nuestro cdigo.

6. Que es un objeto en C#?


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.

126

Programacin orientada a objetos

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.

Imagen 4-1: Cuadro de dilogo: Nuevo proyecto

c. Ahora ya tenemos un esqueleto para desarrollar


nuestra aplicacin. Si vemos la ventana Explorador de
soluciones tenemos tres archivos generados en forma
automtica: Program.cs, Form1.cs y Form1.Designer.cs:
Imagen 4-2: Ventana: Explorador
de soluciones

d. Ahora podemos seleccionar un control visual de la ventana


Cuadro de herramientas (seleccionemos el control
Button) y seguidamente presionemos el botn izquierdo
del mouse dentro del formulario que se encuentra en la
parte central del Visual Studio .net:

Imagen 4-3: Control Button

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):

Imagen 4-4: Ventana Propiedades

f. Cuando ejecutamos la aplicacin el resultado podemos ver


que es muy distinto a la interfaz en modo texto vista hasta
el momento:
g. Por ltimo vamos a ver los contenidos de los archivos
generados automticamente por el programa
Imagen 4-5: Programa en ejecucin

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

Programacin orientada a objetos

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;
}
}
}

4. Guarda el programa en la ubicacin que indique tu profesor.

130

Programacin orientada a objetos

tema

CExcepciones (Instruccin Try)


Una vez lanzada una excepcin es posible escribir cdigo que es encargue de tratarla. Por
defecto, si este cdigo no se escribe la excepcin provoca que la aplicacin aborte mostrando
un mensaje de error en el que se describe la excepcin producida (informacin de su propiedad
Message) y dnde se ha producido (informacin de su propiedad StackTrace) As, dado el
siguiente cdigo fuente de ejemplo:
using System;
class PruebaExcepciones
{
static void Main()
{

A obj1 = new A();

obj1.F();
}
}
class A
{
public void F()
{

G();
}
static public void G()
{ int c = 0;

int d = 2/c;
}
}

Al compilarlo no se detectar ningn error ya que al compilador no le merece la pena calcular


el valor de c en tanto que es una variable, por lo que no detectar que dividir 2/c no es vlido.
Sin embargo, al ejecutarlo se intentar dividir por cero en esa instruccin y ello provocar que
aborte la aplicacin mostrando el siguiente mensaje:
Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero.
at PruebaExcepciones.Main()
Como se ve, en este mensaje se indica que no se ha tratado una excepcin de divisin por cero
(tipo DivideByZeroException) dentro del cdigo del mtodo Main() del tipo PruebaExcepciones.
Si al compilar el fuente hubisemos utilizado la opcin /debug, el compilador habra creado
un fichero .pdb con informacin extra sobre las instrucciones del ejecutable generado que
permitira que al ejecutarlo se mostrase un mensaje mucho ms detallado con informacin
sobre la instruccin exacta que provoc la excepcin, la cadena de llamadas a mtodos que
llevaron a su ejecucin y el nmero de lnea que cada una ocupa en el fuente:
Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero.
at A.G() in E:\c#\Ej\ej.cs:line 22
at A.F() in E:\c#\Ej\ej.cs:line 16
at PruebaExcepciones.Main() in E:\c#\Ej\ej.cs:line 8

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>

El significado de try es el siguiente: si durante la ejecucin de las <instrucciones> se lanza


una excepcin de tipo <excepcin1> (o alguna subclase suya) se ejecutan las instrucciones
<tratamiento1>, si fuese de tipo <excepcin2> se ejecutara <tratamiento2>, y
as hasta que se encuentre una clusula catch que pueda tratar la excepcin producida. Si no
se encontrase ninguna y la instruccin try estuviese anidada dentro de otra, se mirara en los
catch de su try padre y se repetira el proceso. Si al final se recorren todos los trys padres y
no se encuentra ningn catch compatible, entonces se buscara en el cdigo desde el que se
llam al mtodo que produjo la excepcin.

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

Programacin orientada a objetos

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

<instruccionesFinally> de este bloque se ejecutarn tanto si se producen excepciones


en <instrucciones> como si no. En el segundo caso sus instrucciones se ejecutarn tras
las <instrucciones>, mientras que en el primero lo harn despus de tratar la excepcin

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()); }
}
}

2. Qu funcin realliza este programa?

3. Guarda el programa en la ubicacin que indique tu profesor.


Recuerda ejecutar la aplicacin desde la consola de Windows para revisar su funcin.

134

Programacin orientada a objetos

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

Programacin orientada a objetos

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);
}

2. Qu funcin realliza este programa?

3. Guarda el programa en la ubicacin que indique tu profesor.

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

Potrebbero piacerti anche