pit emys programacion .net profesor

146

Click here to load reader

Upload: elv-cipri

Post on 11-Jan-2016

219 views

Category:

Documents


73 download

DESCRIPTION

Pit Emys Programacion .Net Profesor

TRANSCRIPT

Page 1: Pit Emys Programacion .Net Profesor

Programación

.NETCarlos Zepeda Chehaibar

Page 2: Pit Emys Programacion .Net Profesor

Programación.NET

Libro del Profesor

Autor: Carlos Zepeda Chehaibar

Apoyo en Desarrollo y Actividades: Luis Iván Contreras Álvarez

ISBN 978-607-7270-11-9Primera Edición

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 reproducción total o parcial de esta obra y/o los recursos que la acompañan, por cualquier

medio, sin autorización escrita de Grupo Educare, S. A. de C. V.

Grupo Educare, el logotipo de Grupo Educare, el logotipo del Programa de Informática y Tecnología, son propiedad de Grupo Educare, S. A. de C. V.

El diseño editorial y contenidos gráficos 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, imágenes y videogramas utilizados en esta obra se utilizan únicamente con fines didácticos y para la crítica e investigación científica o artística, por lo que el autor y Grupo Educare, S. A. de C. V. no asumen ninguna responsabilidad por el uso que se dé a esta información, ni infringen derecho

de marca alguno, en conformidad al Artículo 148 de la Ley Federal del Derecho de Autor.

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 países. 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.

Editado por Grupo Educare, S.A. de C.V.Cerro de Mesontepec #83Colonia Colinas del CimatarioQuerétaro, Querétaro C.P. 76090

Coordinación Editorial:Alejandro Flores LedesmaDiseño Editorial:César Carranza ContrerasCorrección de Estilo:Jennifer P. Castillo AscencioIlustración de Portada:Marco Antonio SolísIlustración de Interiores:Judith Lourdes Sierra PérezMiriam Tatiana Zamora GutiérrezCésar Carranza Contreras

Page 3: Pit Emys Programacion .Net Profesor

Programación.NET

Contenido

Unidad 1 Lógica computacional 9tema a Lógica computacional 10

Actividad 1-01 Secuencias lógicas 10tema B Algoritmos 11

Actividad 1-02 Algoritmos 12Prueba de escritorio 13Actividad 1-03 Algoritmos 14

tema C Clasificación de algoritmos 16Transcripción 16Compilación y errores 16Actividad 1-04 Identificando errores 17

tema D Variables 18Actividad 1-05 Acerca de variables 18Asignación de valores 19Actividad 1-06 Asignación de variables 20

tema e Operadores 21Actividad 1-07 Operadores 22

tema F Estructuras básicas 23Primera estructura: Secuencia de acciones 23Segunda estructura: Decisión de acción 23Actividad 1-08 Escribiendo algoritmos 24Tercera estructura: Ciclos de acciones 27Actividad 1-09 Escribe algoritmos computacionales 28

tema G Diagramas de flujo 31Actividad 1-10 Diagramas de flujo 33Evaluación 01 36

Unidad 2 Pseudocódigo 37tema a Pseudocódigo 38tema B Diagramas de Nassi – Schneiderman (N-S) 39

Diagrama N-S de estructuras de decisión 40Actividad 2-01 Diagramas N-S 41

tema C Pseudocódigos de la estructura Si-Entonces- Si no 44Actividad 2-02 Decisiones simples 45

Propuesta Pedagógica I

Page 4: Pit Emys Programacion .Net Profesor

Contenido

tema D Decisiones en secuencia 47Actividad 2-03 Decisiones en secuencia 47

tema e Decisiones en cascada o anidadas 50Actividad 2-04 Decisiones anidadas 51

tema F Ciclos 54Lámina 2-01 Ciclos 54Actividad 2-05 Ciclo Mientras 54Actividad 2-06 Ciclo Para 56Actividad 2-07 Ciclo Hacer Mientras 57Actividad 2-08 Ciclo Hacer - Hasta 59Actividad 2-09 Ciclos anidados 61Actividad 2-10 Escribiendo pseudocódigos matemáticos 63

tema G Arreglos y matrices 64Lámina 2-02 Arreglos y matrices 64Actividad 2-11 Arreglos 64Actividad 2-12 Matrices 67Lámina 2-03 Glosario de conceptos algoritmos 69Evaluación 02 70

Unidad 3 .NET 71tema a Introducción 72

Entorno de desarrollo (IDE) 72Lámina 3-01 Microsoft .NET 72Video 3-01 Instalando Visual C# Express 2010 72

tema B Entorno de programación 73Hola mundo 75Lámina 3-02 Consola y Buffer de entrada 75Video 3-02 Mi primera aplicación 75Proyecto 3-01 Mi primera aplicación 75

tema C Introducción a la programación en C# 78Lámina 3-03 Otros elementos del programa 78Palabras reservadas 79Literales 80Variables 82

Page 5: Pit Emys Programacion .Net Profesor

Contenido

Tipos de datos 83Lámina 3-04 Otros tipos de variables 83Video 3-03 Declaración de variables 85

tema D Operadores, constantes y enumeraciones 86Operadores 86Video 3-04 Operadores Unarios 86Constantes 87Lámina 3-05 Operadores 87Video 3-05 Operadores Binarios 87Lámina 3-06 Variales de sólo lectura 88Enumeración 88Lámina 3-07 Enumeraciones 89Proyecto 3-02 Cálculo de sueldo 91

tema e Sentencias de control 93Condicionales 93Video 3-06 Condicional IF 93Video 3-07 Instrucción Switch 94Ciclos 94Video 3-08 Ciclo While 95Video 3-09 Ciclo For 95Lámina 3-08 Sentencias de control 96Uso De Break Y Continue 96Proyecto 3-03 Sentencias de control 97

tema F Métodos, Arreglos y Colecciones 99Métodos 99Lámina 3-09 Métodos externos 100Parámetros 101Namespace 102Lámina 3-10 Otros parámetros 102Lámina 3-11 Importación de Namespace 103Proyecto 3-04 Errores 104Arreglos 105Video 3-10 Arreglos 105Declaración de arreglos 106Funciones mas comunes con arreglos 107

Page 6: Pit Emys Programacion .Net Profesor

Contenido

Búsqueda en arreglos 107Lámina 3-12 Arreglos Multidimensionales 107Proyecto 3-05 Arreglos 108Listas 109Pilas 110Colas 111Video 3-11 Pilas 111Video 3-12 Colas 111Video 3-13 Pilas y Colas 111Proyecto 3-06 Pilas 111Evaluación 03 116

Unidad 4 Programación orientada a objetos 117tema a Clases y Objetos 118

Definición de clases 118Video 4-01 Clases 118Accesibilidad 120Lámina 4-01 Operador New 120Lámina 4-02 Anidación de tipos 120Proyecto 4-01 Colas 121

tema B Interfaz 125Ventana Propiedades 126Ventana Eventos 126Video 4-02 Interfaz gráfica 126Lámina 4-03 Controles comunes 127Proyecto 4-02 Botones 127

tema C Excepciones (Instrucción Try) 129Lámina 4-04 Uso de Catch 130Proyecto 4-03 Excepciones 131

tema D Archivos 133Streams 133Lámina 4-05 Archivos Complemento 133Bufferedstream 134Proyecto 4-04 Archivos externos 135Evaluación 04 136

Page 7: Pit Emys Programacion .Net Profesor

Recursos

Este material forma parte de un conjunto de recursos, que conforman el Programa de Informática Educativa (PIE). Está organizado en bloques integrales que incluyen todo lo necesario para aprender, practicar y evaluar habilidades o competencias. Las explicaciones, imágenes, tablas, actividades, notas y tips, apoyados con las láminas y tutoriales, permiten integrar la experiencia de aprendizaje desde múltiples perspectivas. Así, podemos afirmar que el PIE de Grupo Educare es la mejor manera de aprender haciendo.

Los recursos digitales que acompañan al material impreso, contienen videos que te ayudarán a comprender los conceptos y a poner en práctica las habilidades adquiridas. Adicionalmente encontrarás los archivos que se requieren para realizar las actividades, algunos documentos y aplicaciones útiles. No olvides que los recursos digitales son parte integral del programa, por lo que es muy importante que los conozcas y utilices en el curso.

Material Impreso

Recursos Digitales

Page 8: Pit Emys Programacion .Net Profesor

T IP

Explicación Iconográfica

NOTA

Proyecto

Este icono nos indica un ejercicio que refuerza de manera práctica.

Actividad

Este icono nos indica un ejercicio que refuerza la parte teórica de este material.

Video

Es el material digital de los recursos del programa. La representación en video de la parte teórica.

Lámina de apoyo

La lámina es un recurso del profesor, que sirve como refuerzo dinámico e interactivo a un tema denso, que complementa la teoría del material impreso.

Nota

Las notas que verás dentro de tu texto, puntualizan la teoría o los aspectos más importantes de un tema.

Evaluación

Este icono indica un elemento fundamental del proceso educativo que sirve para valorar el proceso de aprendizaje.

Tip

Es una sugerencia que complementa un tema del material impreso, dando un panorama más amplio al alumno sobre cómo ejecutar una actividad de manera más sencilla y práctica.

Page 9: Pit Emys Programacion .Net Profesor

Programación .NET

Autor:Carlos Zepeda Chehaibar

Unidad 01 Algoritmos

Unidad 02 Pseudocódigo

Unidad 03 .NET

Unidad 04 Programación orientada a objetos

NIVEL: Básico DURACIÓN SUGERIDA: 24 SESIONES / 45-50 MINUTOS

Propuesta Didáctica

Este libro lo integran las siguientes Unidades:

Las propuestas didácticas son flexibles, adaptables a la forma personal de trabajo del maestro y necesidades específicas de cada clase maximizando así el empleo de los recursos disponibles.

Page 10: Pit Emys Programacion .Net Profesor

Unidad Tema Subtema Objetivos

II

Programación.NET

Unidad 01 - Algoritmos

Lógica computacional

Comprender cuales son las secuencias lógicas que se utilizan en programación asó como su finalidad

Describe detalladamente las secuencias lógicas dentro de la computación

Actividad 1-01 Secuencias lógicas

Algoritomos

Prueba de escritorio Características del algoritmo

Identificar el proceso para la construcción de algoritmos

Contruye un algoritmo para desarrollar algoritmos

Actividad 1-02 Algoritmos Actividad 1-03 Algoritmos

Clasificación de algoritmos

Transcripción Compilación y errores

Clasificar a los algoritmos partiendo de los errores en las secuencias

Menciona ejemplos de errores de sintaxis y errores lógicos

Actividad 1-04 Identificando errores

Variables Asignación de valoresEstimar el valor de una variable

Prepara un formato conb información completa sobre las variables y su asignación, resolviendo una prueba de escritorio.

Actividad 1-05 Variables Actividad 1-06 Asignación de valores

OperadoresEvaluar el valor de las variables en diferentes operaciones

Escribe una operación algebráica, cambiando valores a las variables que se indican.

Actividad 1-07 Operadores

Estructuras básicas

Primera estructura: Secuencia de acciones Segunda estructura: Decisión de acción Tercera Estructura: Ciclos de acciones

Manejar las estructuras básicas de los algoritmos

Diseña algoritmos empleando la secuencia, decisión y ciclos de acciones.

Actividad 1-08 Escribiendo algoritmos Actividad 1-09 Escribe algoritmos computacionales

Técnicas para representar algoritmos

Diagramas de flujoConocer las técnicas para representar algoritmos

Representa en un diagrama de flujo algunos algoritmos

Actividad 1-10 Diagramas de flujo

Page 11: Pit Emys Programacion .Net Profesor

Competencias Actividades sugeridas para el alumno Tutorial Sugerido Recursos

III

Propuesta Didáctica

Unidad 01 - Algoritmos

Lógica computacional

Comprender cuales son las secuencias lógicas que se utilizan en programación asó como su finalidad

Describe detalladamente las secuencias lógicas dentro de la computación

Actividad 1-01 Secuencias lógicas

Algoritomos

Prueba de escritorio Características del algoritmo

Identificar el proceso para la construcción de algoritmos

Contruye un algoritmo para desarrollar algoritmos

Actividad 1-02 Algoritmos Actividad 1-03 Algoritmos

Clasificación de algoritmos

Transcripción Compilación y errores

Clasificar a los algoritmos partiendo de los errores en las secuencias

Menciona ejemplos de errores de sintaxis y errores lógicos

Actividad 1-04 Identificando errores

Variables Asignación de valoresEstimar el valor de una variable

Prepara un formato conb información completa sobre las variables y su asignación, resolviendo una prueba de escritorio.

Actividad 1-05 Variables Actividad 1-06 Asignación de valores

OperadoresEvaluar el valor de las variables en diferentes operaciones

Escribe una operación algebráica, cambiando valores a las variables que se indican.

Actividad 1-07 Operadores

Estructuras básicas

Primera estructura: Secuencia de acciones Segunda estructura: Decisión de acción Tercera Estructura: Ciclos de acciones

Manejar las estructuras básicas de los algoritmos

Diseña algoritmos empleando la secuencia, decisión y ciclos de acciones.

Actividad 1-08 Escribiendo algoritmos Actividad 1-09 Escribe algoritmos computacionales

Técnicas para representar algoritmos

Diagramas de flujoConocer las técnicas para representar algoritmos

Representa en un diagrama de flujo algunos algoritmos

Actividad 1-10 Diagramas de flujo

Page 12: Pit Emys Programacion .Net Profesor

Unidad Tema Subtema Objetivos

IV

Programación.NET

Unidad 02 - Pseudocódigo

Introducción Reconocer pseudocódigos

Diagramas de Nassi Scheiderman (N-S)

Diagrama N-S de estructuras de decisión

Identificar el Diagrama (N-S) y su aplicación en los algoritmos

Emplea algunos algoritmos en el diagrama N-S

Actividad 2-01 Diagramas N-S

Decisiones

Pseudocódogos 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

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

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 creación de algoritmos

Contruiye diferentes algoritmos utilizando las cundiones de los ciclos

Actividad 2-05 Ciclo Mientras Actividad 2-06 Ciclo Para Actividad 2-07 Ciclo Hacer-Mientras Actividad 2-08 Ciclo Hacer-Hasta Actividad 2-09 Ciclos anidados

Pseudocódogos con varias estructuras

Evaluar las funciones que se pueden aplicar con los Pseudocódigos en diferentes estructuras

Crea un mapa conceptual con las estructuras de los Pseudocódigos realizando una prueba de escritorio.

Actividad 2-10 Prueba de escritorio Actividad 2-11 Repaso de pseudocódigos Actividad 2-12 Escribiendo pseudocódigos matemáticos

ArreglosAplicar los Pseudocódigos para la solución de problemas

Escribe con un Pseudocódigo un programa que de solución a diferentes ejercicios

Actividad 2-13 Arreglos

MatricesResolver problemas matemáticos utilizando algoritmos

Planea un programa, en formato de Pseudocódigo, para ca ejercicio matemático

Actividad 2-14 Matrices

Page 13: Pit Emys Programacion .Net Profesor

Competencias Actividades sugeridas para el alumno Tutorial Sugerido Recursos

V

Propuesta Didáctica

Unidad 02 - Pseudocódigo

Introducción Reconocer pseudocódigos

Diagramas de Nassi Scheiderman (N-S)

Diagrama N-S de estructuras de decisión

Identificar el Diagrama (N-S) y su aplicación en los algoritmos

Emplea algunos algoritmos en el diagrama N-S

Actividad 2-01 Diagramas N-S

Decisiones

Pseudocódogos 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

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

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 creación de algoritmos

Contruiye diferentes algoritmos utilizando las cundiones de los ciclos

Actividad 2-05 Ciclo Mientras Actividad 2-06 Ciclo Para Actividad 2-07 Ciclo Hacer-Mientras Actividad 2-08 Ciclo Hacer-Hasta Actividad 2-09 Ciclos anidados

Pseudocódogos con varias estructuras

Evaluar las funciones que se pueden aplicar con los Pseudocódigos en diferentes estructuras

Crea un mapa conceptual con las estructuras de los Pseudocódigos realizando una prueba de escritorio.

Actividad 2-10 Prueba de escritorio Actividad 2-11 Repaso de pseudocódigos Actividad 2-12 Escribiendo pseudocódigos matemáticos

ArreglosAplicar los Pseudocódigos para la solución de problemas

Escribe con un Pseudocódigo un programa que de solución a diferentes ejercicios

Actividad 2-13 Arreglos

MatricesResolver problemas matemáticos utilizando algoritmos

Planea un programa, en formato de Pseudocódigo, para ca ejercicio matemático

Actividad 2-14 Matrices

Page 14: Pit Emys Programacion .Net Profesor

Unidad Tema Subtema Objetivos

VI

Programación.NET

Unidad 03 - .NET

Introducción

.NET Framwork Entorno de ejecución Biblioteca de Clase Base (BCL) Sistema de tipo común (CTS) Especificación del lenguaje común (CLS)

Identificar la plataforma .NET, también su kit de desarrollo .Net Framework, que le permitirán desarrollar aplicaciones simples o complejas.

Reconoce los principales elementos que componen el entorno de desarrollo en .NET

Actividad 3-01 Características de .NET

Video 3-01 Instalación

Entorno de Programación

Entorno de Desarrollo (IDE) Descarga e Instalación Interface de usuario

Conocer el entorno de C# y su instalación.

Identifica Visual C# como entorno de desarrollo

Actividad 3-02 Espacio de trabajo Proyecto 3-01 Mi Primer aplicación

Video 3-02 Mi primera aplicación

Introducción a la programación en C#

Estructura de un programa Palabras reservadas Literales Variables Tipos de Datos Operadores Constantes y enumeraciones

Describir los elementos que conforman un programa, conocerá los diferentes tipos de datos y como hacer la declaración de estos.

Desarrolla aplicaciones sencillas en modo consola

Proyecto 3-02 Calculando sueldos

Video 3-03 Declaración de variables Video 3-04 Operadores Unarios Video 3-05 Operadores Binarios

Sentencias de ControlCondicionales Ciclos Uso de Break y Continue

Operar las sentencias de control.

Utiliza las sentencias de control en sus aplicaciones

Proyecto 3-03 IF Proyecto 3-04 Switch

Video 3-04 Condicional IF Video 3-05 Ciclo For Video 3-06 Instrucción Switch Video 3-07 Ciclo While Video 3-08 Clases

Page 15: Pit Emys Programacion .Net Profesor

Competencias Actividades sugeridas para el alumno Tutorial Sugerido Recursos

VII

Propuesta Didáctica

Unidad 03 - .NET

Introducción

.NET Framwork Entorno de ejecución Biblioteca de Clase Base (BCL) Sistema de tipo común (CTS) Especificación del lenguaje común (CLS)

Identificar la plataforma .NET, también su kit de desarrollo .Net Framework, que le permitirán desarrollar aplicaciones simples o complejas.

Reconoce los principales elementos que componen el entorno de desarrollo en .NET

Actividad 3-01 Características de .NET

Video 3-01 Instalación

Entorno de Programación

Entorno de Desarrollo (IDE) Descarga e Instalación Interface de usuario

Conocer el entorno de C# y su instalación.

Identifica Visual C# como entorno de desarrollo

Actividad 3-02 Espacio de trabajo Proyecto 3-01 Mi Primer aplicación

Video 3-02 Mi primera aplicación

Introducción a la programación en C#

Estructura de un programa Palabras reservadas Literales Variables Tipos de Datos Operadores Constantes y enumeraciones

Describir los elementos que conforman un programa, conocerá los diferentes tipos de datos y como hacer la declaración de estos.

Desarrolla aplicaciones sencillas en modo consola

Proyecto 3-02 Calculando sueldos

Video 3-03 Declaración de variables Video 3-04 Operadores Unarios Video 3-05 Operadores Binarios

Sentencias de ControlCondicionales Ciclos Uso de Break y Continue

Operar las sentencias de control.

Utiliza las sentencias de control en sus aplicaciones

Proyecto 3-03 IF Proyecto 3-04 Switch

Video 3-04 Condicional IF Video 3-05 Ciclo For Video 3-06 Instrucción Switch Video 3-07 Ciclo While Video 3-08 Clases

Page 16: Pit Emys Programacion .Net Profesor

Unidad Tema Subtema Objetivos

VIII

Programación.NET

Continúa Unidad 03 - .NET

Métodos, Arreglos y Colecciones

Métodos Parámetros Namespace Arreglos Declaración Funciones más comunes con arreglos Colecciones Listas Pilas Colas

Conocer las definiciones de método, arreglo y colecciones, su uso e importancia

Desarrolla ampliamente la aplicación de las matrices, arreglos y colecciones de objetos.

Proyecto 3-05 Errores Proyecto 3-06 Arreglos Proyecto 3-07 Colecciones

Video 3-09 Arreglos Video 3-10 Pilas Video 3-11 Colas

Unidad 04 - Programación orientada a objetos

Clases y Objetos

Definición de clases Accesibilidad

Reconocer el concepto de clase y el modo de acceso a estas en la programación con C#.

Reconoce que un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos

Proyecto 3-08 Colecciones

Interfaces de Usuario

Realizar interfaces graficas usando los diferentes controles que proporciona C#

Elabora aplicaciones que se ejecutan desde un entorno gráfico

Proyecto 3-09 Interfaz Video 3-12 Interfaz Gráfica

ExcepcionesConocer y manejar excepciones en C#

Controla resultados inesperados en sus aplicaciones mediante excepciones.

Proyecto 3-10 Excepciones

ArchivosStreams

Nombrar los requerimientos para el manejo de archivos en C#

Utiliza archivos externos en el desarrollo de aplicaciones

Proyecto 3-11 Archivos

Page 17: Pit Emys Programacion .Net Profesor

Competencias Actividades sugeridas para el alumno Tutorial Sugerido Recursos

IX

Propuesta Didáctica

Continúa Unidad 03 - .NET

Métodos, Arreglos y Colecciones

Métodos Parámetros Namespace Arreglos Declaración Funciones más comunes con arreglos Colecciones Listas Pilas Colas

Conocer las definiciones de método, arreglo y colecciones, su uso e importancia

Desarrolla ampliamente la aplicación de las matrices, arreglos y colecciones de objetos.

Proyecto 3-05 Errores Proyecto 3-06 Arreglos Proyecto 3-07 Colecciones

Video 3-09 Arreglos Video 3-10 Pilas Video 3-11 Colas

Unidad 04 - Programación orientada a objetos

Clases y Objetos

Definición de clases Accesibilidad

Reconocer el concepto de clase y el modo de acceso a estas en la programación con C#.

Reconoce que un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos

Proyecto 3-08 Colecciones

Interfaces de Usuario

Realizar interfaces graficas usando los diferentes controles que proporciona C#

Elabora aplicaciones que se ejecutan desde un entorno gráfico

Proyecto 3-09 Interfaz Video 3-12 Interfaz Gráfica

ExcepcionesConocer y manejar excepciones en C#

Controla resultados inesperados en sus aplicaciones mediante excepciones.

Proyecto 3-10 Excepciones

ArchivosStreams

Nombrar los requerimientos para el manejo de archivos en C#

Utiliza archivos externos en el desarrollo de aplicaciones

Proyecto 3-11 Archivos

Page 18: Pit Emys Programacion .Net Profesor

X

Diseño VectorialInkscape

Inventario de habilidades

Habilidad 1 2 3 4 5

Desarrollo de algoritmos.

Realizar pruebas de escritorio a algoritmos.

Reconocer la clasificación de los algoritmos.

Identificar variables.

Asignar variables.

Identificar constantes.

Representar gráficamente algoritmos.

Definir el concepto de pseudocódigo.

RIdentificar la estructura de ciclos.

Estimar decisiones simples y anidadas.

Identificar arreglos y matrices.

Reconocer el entorno gráfico de Visual C# 2010 Express.

Identificar lenguajes de programación.

Aplicar sentencias de control a un programa.

Utilizar la linea de comandos de Windows.

Aplicación de condicionales en programas.

Definir los conceptos pilas y colas.

Crear aplicaciones con interfaz gráfica.

Aplicar Excepciones en aplicaciones.

Definir el concepto de entorno de desarrollo.

Este inventario se emplea para medir las habilidades de los alumnos que inician el curso. Esto no es una prueba, es un indicador que va del 1 al 5, dónde uno establece poco o nulo conocimiento del tema por parte del alumno y cinco que está completamente familiarizado con el mismo.

Page 19: Pit Emys Programacion .Net Profesor

Programación .NETAutor:Carlos Zepeda Chehaibar

A Comprender la importancia de la lógica y las matemáticas dentro de la computación

B Identificar el proceso para la elaboración de algoritmos.

C Clasificar los algoritmos y determinar posibles errores dentro de una secuencia.

D Resolver pruebas de escritorio con valores numéricos al asignarle un valor a cada variable.

E Manejar las estructuras básicas de los algoritmos.

F Conocer las técnicas para representar algoritmos.

Utiliza los fundamentos de las matemáticas para realizar, con detalle, algoritmos y operaciones aplicándolas por completo en determinar funciones o para diseñar programas computacionales.

Durante el desarrollo de esta unidad aprenderás a:

Unidad 01 Lógica computaciona l

DURACIÓN SUGERIDA: 5 SESIONES / 45-50 MINUTOSNIVEL: Intermedio

Page 20: Pit Emys Programacion .Net Profesor

Programación.NET

12

La lógica es la capacidad de pensar en soluciones alternativas. Se remonta a la época de Aristóteles en la que desarrolló reglas para establecer un razonamiento encadenado. La lógica es una rama del conocimiento que nos permite determinar que algo está aprobado por la razón como bien deducido o bien pensado. En pocas palabras en la forma más obvia y más fácil de hacer algo.

La lógica es muy importante, ya que determina la manera en que se puede resolver un problema. Es un nivel de abstracción sin el cual no es posible estructurar los pasos que generen lo que esperamos obtener.

La computadora trabaja con una lógica especial, exacta y matemática. Aunque tal vez no te hayas dado cuenta, todas las acciones que realizas en la computadora están haciendo uso de esta lógica en la forma de procedimientos o secuencias de pasos que hay que realizar para lograr lo que se quiere.

tema a Lógica computacional

Secuencias lógicas1-01

ACTIVIDAD

Como ejemplo, contesta detalladamente las siguientes cuestiones:1. ¿Cuáles son los pasos para entrar a la calculadora de Windows?

2. ¿Hay formas alternativas para entrar a este programa? Describe una:

3. ¿Qué ocurre si con cualquiera de las formas, no sigues los pasos o los realizas en desorden?

1. Dar clic en el botón Inicio.2. Seleccionar el menú Todos los programas.3. Seleccionar el menú Accesorios.4. Dar clic en la opción Calculadora.

1. Dar clic en el menú Inicio.2. Seleccionar la opción Ejecutar.3. Escribir la palabra “calc”.4. Presionar la tecla Enter.

No podría abrir el programa ya que cada paso subsecuente requiere que el anterior esté completo.

Page 21: Pit Emys Programacion .Net Profesor

13

Lógica computacional

tema B Algoritmos

¿Has pensado quién hizo los programas que conoces? y más aún ¿tienes idea de cómo los hicieron? La computadora permite solucionar una gran cantidad de problemas. El primer paso que debes dar para la solución de un problema es tener muy claro cuál es el problema a resolver, en otras palabras, cuál es el objetivo. Parece una cosa muy obvia, pero la mayoría de las personas que no pueden resolver un problema es porque no lo han identificado y comprendido. Tener claro el objetivo te va a permitir saber hacia dónde vas y a dónde quieres llegar. Cuando el objetivo es lo suficientemente claro podemos vislumbrar un camino lógico para llegar hasta él. A ese camino lógico se le llama Algoritmo.

Una vez identificado el problema es necesario diseñar una solución. Una forma sencilla de aproximarse a una solución, que después pueda implementarse en la computadora, es por medio de un algoritmo. Un algoritmo es un conjunto de pasos que permiten alcanzar un objetivo. Los pasos deben ser secuenciales y ordenados, es decir, deben ser ejecutados uno después de otro, en un orden definido, teniendo un inicio y un fin. Ejemplo:

Objetivo. Tenemos como objetivo adquirir el paquete de Microsoft® Office® 2010. Queremos solamente adquirirlo: no instalarlo, no usarlo. El objetivo solamente es adquirirlo.

Algoritmo. Salimos del lugar donde nos encontremos y nos dirigimos hacia una tienda de software. Al llegar al lugar hay que solicitar el programa. Si lo tienen disponible, lo compramos y si no lo tienen, nos dirigimos hacia otra tienda repitiendo el proceso.

Si explicamos el algoritmo así, simplemente es un texto. Ahora podemos organizar el algoritmo para que sea más estético y entendible. Asignándole un nombre al algoritmo lo generalizamos para cualquier adquisición de software.

Algoritmo para adquisición de software Inicio 1. Determinar qué software se desea adquirir 2. Desplazarnos hacia la tienda de software 3. Preguntar si tienen el software requerido 4. Si lo tienen Comprar el software Terminar con el algoritmo Si no lo tienen Repetir desde el paso 2 Fin

Observa el algoritmo anterior.

¤ Casi todas las líneas van enumeradas, pero no todas. ¤ Se debe cumplir con la orden de la línea 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 genérico.

Page 22: Pit Emys Programacion .Net Profesor

Programación.NET

14

A continuación escribirás algunos algoritmos. No olvides ponerles un título e indicar claramente el principio y el fin.

1. Desarrolla un algoritmo que te permita encender un vehículo.

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

Algoritmos1-02

ACTIVIDAD

Algoritmo para encender un vehículoInicio 1. Abrir la puerta del vehículo 2. Entrar al vehículo 3. Si el vehículo es estándar Pisar el clutch Si no es estándar Verificar que esté en Parking 4. Insertar la llave en la ranura 5. Girar la llaveFin

Algoritmo para hacer un pastelInicio 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 6Fin

Page 23: Pit Emys Programacion .Net Profesor

15

Lógica computacional

Existen problemas que pueden resultar tan complejos que podríamos requerir de cientos o hasta miles de líneas para resolverlos. Además, sabemos que un problema se puede resolver de varias maneras diferentes. El análisis de algoritmos busca que las soluciones sean lo más sencillas posibles, aún para problemas muy complejos. La manera en que buscamos esta solución óptima está fundamentada en la lógica. Es más, sin la lógica no podríamos decidir entre cuál de dos soluciones es más sencilla, simplemente porque esta decisión requiere también del pensamiento lógico.

De forma similar la computadora realiza internamente secuencias de pasos para realizar las tareas que nos son útiles.

3. Crea un algoritmo para crear algoritmos.

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.

Características del algoritmo

Un algoritmo debe tener al menos las siguientes características:

¤ Ser preciso. Las actividades o pasos del algoritmo deben desarrollarse en orden estricto, ya que el desarrollo de cada paso debe seguir un orden lógico.

¤ Ser definido. Esto quiere decir que siempre que se ejecute con los mismos datos, el resultado será el mismo. No puede improvisar, inventar o adivinar la información que necesita para poder realizar un proceso.

Algoritmo para crear algoritmosInicio 1. Determinar el problema a resolver 2. Elegir una posible solución 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 solución es satisfactoria Terminar algoritmo Si no - regresar al paso 2Fin

Page 24: Pit Emys Programacion .Net Profesor

Programación.NET

16

1. Desarrolla un algoritmo que te permita determinar si un número es par o impar.

2. Pide a un compañero que realice a tu algoritmo tres pruebas de escritorio utilizando tres diferentes números enteros. Utiliza este espacio para las pruebas.

a.

Algoritmos1-03

ACTIVIDAD

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

¤ Ser finito. Esto indica que el número de pasos de un algoritmo debe ser limitado, es decir, los pasos a seguir deben de tener un fin.

¤ Presentación. El algoritmo debe ser entendible para cualquier persona, no sólo para la persona que lo diseñó. Más adelante veremos otras formas de presentar un algoritmo, como por ejemplo en pseudocódigo, en un diagrama de flujo o en diagramas de Nassi/Schneiderman, entre otras.

Inicio 1. Ingresar número a evaluar 2. Si el residuo del número/2 = 0 es par Si no es imparFin

número 60 número/2 = 30 residuo = 0 Es par

Page 25: Pit Emys Programacion .Net Profesor

17

Lógica computacional

b.

c.

3. Desarrolla un algoritmo que te permita saber si un número es primo.

4. Pide a un compañero que realice a tu algoritmo cinco pruebas de escritorio utilizando los números 0, 4, 7, y 11. Utiliza este espacio para las pruebas.

número 15 número/2 = 7 residuo = 1 Es impar

número 2 número/2 = 1 residuo = 0 Es par

Inicio 1. Ingresar número a evaluar 2. Si número < 0 Terminar algoritmo 3. Dividir el número por todos los números entre 1 y número/2 4. Si el número sólo es divisible por sí mismo y la unidad Es primo Si no No es primoFin

Número = 0el número es menor o igual a 0 no es primo

Número = 4 4/1 = 4 4/2 = 2 no es primo

Número = 7 7/1 = 7 7/2 = 3.5 7/3 = 2.33 es primo

es primo

Número = 11 11/1 = 11 11/4 = 2.75 11/2 = 5.5 11/5 = 2.2 11/3 = 3.66

Page 26: Pit Emys Programacion .Net Profesor

Programación.NET

18

tema C Clasificación de algoritmos

Hay dos clasificaciones para los algoritmos:

¤ Algoritmos informales ¤ Algoritmos computacionales

Los algoritmos informales son aquellos que no se realizan para una computadora, sino se diseñan para ser ejecutados por el ser humano. Todos los días ejecutas algoritmos informales en todas tus actividades: al prepararte para tus clases, al vestirte, al cocinar, al regresar a casa, entre otros.

Los algoritmos computacionales son los que se crean para que una computadora sea quien ejecute los pasos y obtener el resultado esperado. Se aprovecha la velocidad de procesamiento del ordenador para darnos un resultado mucho más confiable.

Transcripción

Los algoritmos computacionales no pueden ser ejecutados directamente. La transcripción es el proceso a través del cual convertimos un algoritmo en un listado de instrucciones entendibles para la computadora. Estas instrucciones deben ajustarse a las reglas sintácticas de un lenguaje de programación. Las reglas sintácticas de un lenguaje de programación son las restricciones técnicas sobre las cuales está construido el lenguaje.

Así, un programa computacional es un algoritmo escrito con las instrucciones, restricciones y reglas de un lenguaje de programación.

Compilación y errores

Una vez que has identificado el objetivo a cumplir, has realizado un algoritmo que te permita obtener el resultado deseado y lo has transcrito en un lenguaje de programación, necesitas hacer una compilación.

La compilación es el proceso mediante el cual la computadora revisa que el programa que has escrito cumpla con las reglas sintácticas del lenguaje de programación que estés utilizando. El compilador es el encargado de hacer esta revisión y te ayuda a detectar los errores de sintaxis y de precaución.

Errores de sintaxis. Son errores representados en la omisión de alguna o algunas reglas sintácticas del lenguaje de programación. Es como un error ortográfico en el lenguaje que estés programando. Por ejemplo, si en algún lenguaje hay una instrucción “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 querías escribir “print”. Algunas veces se requiere utilizar paréntesis, comas, puntos o corchetes. Si no se cumple con esas reglas de lenguaje, el programa no puede funcionar. Los errores de compilación son los más fáciles de detectar y corregir.

Page 27: Pit Emys Programacion .Net Profesor

19

Lógica computacional

Errores de precaución. Algunos compiladores hacen sugerencias para el mejoramiento o aseguramiento del programa. Cada lenguaje de programación cuenta con su propio compilador que te ayudará a escribir tu programa correctamente y a detectar estos errores.

Errores lógicos. Este tipo de errores no pueden ser detectados por el compilador. Ocurren cuando el programa se compila perfectamente, no tiene errores de sintaxis, sin embargo no hace lo que se supone que debería hacer. Por ejemplo, si escribo un programa para calcular el área de un triángulo y utilizo la fórmula Área=(base*altura)/3, cometería un error lógico. El compilador no detecta ningún error en la fórmula, el programa funciona, pero el resultado está mal. Estos errores son los más difíciles de corregir y se pueden evitar si se diseña y analiza correctamente el problema antes de comenzar a programar en la computadora. Unos minutos de trabajo previo en papel, te pueden ahorrar muchas horas de trabajo en la computadora. Estos errores los tenemos que detectar nosotros mismos al hacer las pruebas de escritorio, ya que ahí es donde determinamos si el algoritmo logrará o no el objetivo esperado.

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

2. Da un ejemplo (diferente a los de este libro) de un error lógico.

Identificando errores1-04

ACTIVIDAD

Escribir una instrucción “Si no” sin haber escrito antes la instrucción “Sí”

Si quiero obtener el promedio de dos números A y B y escribo

promedio = A+B/2

el resultado sería incorrecto.

Page 28: Pit Emys Programacion .Net Profesor

Programación.NET

20

En programación, una variable es un campo de memoria que almacena información, la cual puede cambiar en cualquier momento.

Reflexión previa:

1. ¿Qué significa la palabra variable? y en álgebra ¿qué es una incógnita o variable?

2. En la fórmula para calcular el área de un rectángulo (Área=base x altura) ¿cuáles son las variables? ¿Cómo las puedes identificar?

3. ¿Todas las fórmulas matemáticas tienen variables? ¿Por qué?

4. ¿Qué es lo opuesto de una variable?

tema D Variables

Acerca de variables1-05

ACTIVIDAD

Para poder utilizar variables en un programa deberás especificar primero qué tipo de información va a almacenar. A esto se le conoce como declaración de variables.

Existen diferentes tipos de datos que una variable puede almacenar, a continuación se describen:

Tipo entero. Una variable de tipo entero solamente puede almacenar valores numéricos sin punto decimal, por lo tanto sus operaciones jamás van a generar valores decimales, ya que operan con un juego de reglas llamado Aritmética Entera.

Tipo real. Ésta puede almacenar números que tienen punto decimal y en sus operaciones puede generar decimales, ya que opera con un juego de reglas llamado Aritmética Real.

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.

Las tres, si yo cambio los valores de la base o la altura, el área cambiará también su valor.

Sí, las fórmulas son para casos generales. Así se pueden obtener los valores correctos para cualquier caso específico que exista.

Una constante que no puede cambiar su valor.

Page 29: Pit Emys Programacion .Net Profesor

21

Lógica computacional

Asignación de valores

Para asignar un valor a una variable (cargar una variable), en la mayoría de los lenguajes de programación se utiliza el signo = (igual a), que indica a la computadora que va a almacenar el valor que se encuentre a la derecha del símbolo, dentro de la variable que se encuentre a la izquierda. Por ejemplo:

A=8 B=AC=A+B

Indica que almacenará el número 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 expresión que resulte de la suma de los valores que contengan las variables A y B.

Una variable sólo puede guardar un valor a la vez: si volviéramos a asignarle otro valor a la variable A, ésta cambiaría el valor 8 por el nuevo valor asignado. Entonces concluimos que:

¤ Sólo puede haber una variable del lado izquierdo del signo igual. ¤ Del lado derecho del signo puede haber una constante, una expresión u otra variable. ¤ Cada vez que se asigna un nuevo valor a una variable, se pierde el valor anterior.

Ejemplos de asignación de variables. Observa cómo las variables van adquiriendo nuevos valores conforme se ejecutan las operaciones:

Tipo caracter. Una variable de tipo caracter puede almacenar valores equivalentes del código ASCII (American Standar Code for Infomation Interchange). ASCII es un código internacional de equivalencias internas en el sistema binario, por lo que una variable caracter puede almacenar cualquier cadena de caracteres que hayan sido tecleados.

Valor después de cada instrucción

A B CA= 10 10 Se asigna el valor 10 a la variable A.

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

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 20La variable A que valía 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 5 20La variable B que valía 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.

En este ejercicio se ejemplifica claramente lo que es una prueba de escritorio. Es muy útil ya que puedes verificar qué valores adquieren las variables durante la ejecución de un algoritmo o programa.

Page 30: Pit Emys Programacion .Net Profesor

Programación.NET

22

Realiza una prueba de escritorio para cada uno de los siguientes programas. Anota el valor de las tres variables después de ejecutar cada línea o instrucción.

1. 2.

3. 4.

a b ca=3 ? ?b=8 ?c=1a=5b=9c=7a=a+1b=b-2c=c+3

a b ca=10b=1c=4a=a+cb=a+cc=a+ca=c+5b=c+bc=a+b+c

a b ca=1b=2c=3a=a+bb=a-bc=a*ba=a/bb=a+bc=a*b

a b ca=5b=5c=5a=a+ab=b+bc=c+ca=a+b+cb=a+b+cc=a+b+c

a b ca=10b=10c=10a=a+5b=a+3c=a+2a=b+4b=b+5c=c+8

5.

Asignación de variables1-06

ACTIVIDAD

33 83 8 15 8 15 9 15 9 76 9 76 7 76 7 10

10 - -10 1 -10 1 414 1 414 18 414 18 1823 18 1823 36 1823 36 77

1 - -1 2 -1 2 33 2 33 1 33 1 33 1 33 4 33 4 12

5 - -5 5 -5 5 5

10 5 510 10 510 10 1030 10 1030 50 1030 50 90

10 - -10 10 -10 10 1015 10 1015 18 1015 18 1722 18 1722 23 1722 23 25

Page 31: Pit Emys Programacion .Net Profesor

23

Lógica computacional

Los operadores son signos que expresan relaciones entre variables y/o constantes de las cuales se obtiene un resultado. La acción que realice un operador depende mucho del lenguaje de programación que estemos utilizando. Los operadores más conocidos son:

¤ Para expresar una suma: + ¤ Para expresar una resta: - ¤ Para expresar una potencia: ^ ¤ Para expresar una multiplicación: * ¤ Para expresar una división: /

Si más de un operador se usa en una expresión, las acciones se ejecutan de acuerdo a una jerarquía:

¤ La computadora evalúa y realiza las potencias, dando prioridad de derecha a izquierda.

¤ Después se calculan las multiplicaciones y divisiones ¤ Por último se realizan las sumas y restas.

Ejemplo 1: x = a + b / c + d

Primero se ejecutaría la división (b/c), posteriormente la suma del resultado de la división con a y el resultado se sumaría con d.

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 paréntesis se altera la jerarquía de los operadores, ya que la computadora realiza primero las operaciones de los paréntesis más internos. Dentro de los paréntesis se respeta la jerarquía 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.

tema e Operadores

Page 32: Pit Emys Programacion .Net Profesor

Programación.NET

24

Evalúa las siguientes expresiones. Escribe en una sola línea la expresión algebraica, tal y como se debe escribir en la computadora, usando paréntesis y los operadores adecuados. Después evalúa cada expresión obteniendo el valor final de x, suponiendo en todos los casos que:

a = 3b = 4c = 2d = 1

x

ba c

a cb

=+

+

Operadores1-07

ACTIVIDAD

xa c a

b

aa b c

bb

=+ +

++ +

*

*xa b d

c

a b d ac

=+

+ +

x

bacb

bacb

=-

+

x aa ba

a c da b

= ++

+ ++

1. Expresión:

x=

2. Expresión:

x=

3. Expresión:

x=

4. Expresión:

x=

5. Expresión:

x=

x=(a+b/c) / (a/b+c)

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

x=(a+b/(a+b+b/c))/(a+b/(c+a))

(3+4/(3+4+4/2))/(3+4/(2+3))= 155/171

x=(a+b+c/d*a)/(a+b*c/d)

(3+4+2/1*3)/(3+4*2/1)= 23/33

x=(a/b+b/c)/(a/b - b/c)

(3/4+4/2)/(3/4 - 4/2)= -11/5

x=a+(a+(a+b)/(c+d))/(a+a/b)

3+(3+(3+4)/(2+1))/(3+3/4)= 199/45

Page 33: Pit Emys Programacion .Net Profesor

25

Lógica computacional

Una estructura se define como un esquema que nos permite representar una idea de manera más simplificada, además de restringir un poco la lógica algorítmica. Por ejemplo, cada persona puede tener su propia manera de hacer un pastel, por esta razón es que una estructura puede restringir a que sólo se realice de ciertas formas convenientes. Existen tres estructuras básicas del razonamiento en las que nos basamos para realizar una acción o varias acciones:

Primera estructura: Secuencia de acciones

Todos los días 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 ejecución.

Para escribir una secuencia de acciones lo único que tienes que hacer es escribir una instrucción después de otra, de manera que se entienda la secuencia y el orden de ejecución. Por ejemplo, si deseáramos hacer una secuencia que nos permita observar a través de una ventana abierta, el algoritmo sería:

Algoritmo para observar a través 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 través de ella. 4. Observar a través de la ventana abierta.Fin

Notarás que para utilizar una estructura de secuencia sólo tenemos que indicar en qué orden se ejecutará cada paso y lo que se tiene que hacer.

tema F Estructuras básicas

Segunda estructura: Decisión de acción

Durante la ejecución 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 lógicos 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 decisión, ésta depende de una condición. La condición es una expresión lógica que nos permite decidir cuál es el camino a tomar. Vamos a complementar el ejemplo de la estructura anterior:

Page 34: Pit Emys Programacion .Net Profesor

Programación.NET

26

Para cada uno de los siguientes problemas, escribe un algoritmo que lo solucione. Después pide a un compañero 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.

Algoritmo para observar a través de una ventana.

Inicio 1. Ubicar la ventana por la que deseamos observar 2. Si nos encontramos sentados Levantarnos del lugar donde nos encontremos Si no estamos sentados Nos orientamos hacia la ventana 3. Dirigirnos hacia la ventana que escogimos 3. Acercarnos lo suficiente para observar a través de ella. 4. Si está cerrada Abrir la ventana 5. Observar a través de la ventana abierta.Fin

Conforme utilizas las estructuras de secuencias junto con las estructuras de decisiones, el algoritmo se aproxima más a la realidad. Observa que en las estructuras de decisión siempre se debe indicar el camino que se debe tomar cuando se cumpla la condición, pero no forzosamente tienes que indicar qué acción tomar en caso de no cumplir la condición.

Escribiendo algoritmos1-08

ACTIVIDAD

Inicio 1. Decidir qué tipo de restaurante es 2. Si el restaurante es elegante 3. Si es para hombre Elegir traje Si no Elegir vestido 4. Si el restaurante es casual 5. Si es para hombre Elegir pantalón de vestir Elegir camisa Si no Elegir blusa

Page 35: Pit Emys Programacion .Net Profesor

27

Lógica computacional

Prueba de escritorio:

2. Algoritmo que requiere hacer una empresa que se dedica a pintar casas, antes de presentarse con el cliente a realizar el trabajo.

Prueba de escritorio:

restaurante = casual¿El restaurante es elegante? = no¿El restaurante es casual? = sí¿Es para hombre? = sí Elegir pantalón de vestir Elegir camisa¿El restaurante es informal? =noFin

Elegir pantalón o falda de vestir 6. Si el restaurante es informal Elegir jeans Elegir T-shirtFin

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

Color azul ¿Es de su agrado? = noColor blanco ¿Es de su agrado? = sícosto = $1000 ¿Es de su agrado? = síFin

Page 36: Pit Emys Programacion .Net Profesor

Programación.NET

28

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.

Prueba de escritorio:

4. Una tienda hace un descuento de $10 si el total de la compra está entre $100 y $200 y hace un descuento de $20 si el total de la compra es mayor de $200. Si la compra es menor de $100, no hay descuento. El algoritmo debe calcular el precio a pagar, basado en el valor de la compra.

Inicio 1. Variable total = 0 2. Sumar el precio del artículo al total 3. Si es el último artículo Si total > 500 total = total - 10 Si no regresar al paso 2Fin

total0

150200450510

artículo150

25060

50

¿total es mayor a 500? sitotal = 510 - 10total = 500

Inicio 1. variable total = 0 2. total = total + precio del artículo 3. si hay más artículos regresar al paso 2 4. si total > 100 y total < 200 total = total -10 5. si total > 200 total = total -20 6. Imprimir “El total es $” totalFin

Page 37: Pit Emys Programacion .Net Profesor

29

Lógica computacional

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 número de veces.

Vamos a suponer que eres un supervisor y cada hora, durante tu jornada de trabajo, tienes que vigilar a través de una ventana. El resto del tiempo debes permanecer en tu lugar de trabajo y sólo cada hora levantarte y observar a través de la ventana.

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 MientrasFin

Analiza con detalle los cambios en nuestro algoritmo:

¤ La palabra Mientras establece una condición que determina el número de veces que se repite un conjunto de acciones.

¤ El ciclo debe tener algún tipo de finalizador que detenga la repetición de acciones.

¤ El uso de sangrías te ayuda a identificar mejor cada una de las condiciones y los ciclos.

Cada bloque de instrucciones dentro de una condición o un ciclo debe indicar el inicio y fin.

- Asignación- Entrada- Salida

EstructurasAlgorítmicas

Secuenciales

Condicionales

Cíclicas

- Simples- Dobles- Múltiples

- Para- Mientras Que- Repita Hasta

Page 38: Pit Emys Programacion .Net Profesor

Programación.NET

30

Para cada uno de los siguientes problemas, escribe un algoritmo que lo solucione. Después pide a un compañero 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 báscula. Escribe el algoritmo más adecuado que puedas pensar para despachar la cantidad exacta de arena.

Prueba de escritorio Problema 1:

Escribe algoritmos computacionales1-09

ACTIVIDAD

báscula0

200 g

puño

500 g750 g

1150 g1500 g1800 g2100 g2050 g2000 g

200 g300 g250 g400 g350 g300 g300 g-50 g-50 g

Inicio 1. Mientras la báscula no pase de 2 kg. Agregar un puño de arena Fin mientras 2.Si la báscula pasa de 2 kg. Mientras la báscula no baje de 2 kg. Quitar un poco de arena Fin mientras Fin siFin

Page 39: Pit Emys Programacion .Net Profesor

31

Lógica computacional

2. El guardia de un estadio tiene que verificar los boletos de los espectadores. Sólo podrán entrar quienes tengan boleto azul. No se sabe cuántos espectadores asistirán al evento. Escribe el algoritmo que debe seguir el guardia para cumplir con las reglas.

Prueba de escritorio Problema 2:

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?

b. ¿Cuántas veces se repite el ciclo?

Inicio 1. Mientras la fila no se acabe 2. Revisar boleto del primer espectador 3. Si es azul Aceptar 4. Si no Rechazar 5. Recorrer fila Fin MientrasFin

Boleto

Azul

¿Aceptar?

RojoAzulAzulRojo

SíNoSíSíNo

Personas en la fila543210

Muestra los números del 10 al 1 utilizando a x como variable.

10

Page 40: Pit Emys Programacion .Net Profesor

Programación.NET

32

c. Realiza una prueba de escritorio y anota el valor de x en cada repetición. Prueba de escritorio:

4. Analiza el siguiente algoritmo y contesta las preguntas.

Pedir el valor de X, y pedir el valor de YMientras X>Y, Repetir: Y = Y+1Fin del cicloMostrar el valor actual de Y

a. ¿Qué es lo que hace este programa?

b. Realiza una prueba de escritorio asignando valores a X y Y, donde X > Y. Prueba de escritorio

Repetición X Salida de pantalla

Repetición X Y Salida de pantalla

1 102 93 84 75 66 57 48 39 2

10 1

0 16 101 112 123 134 145 156 16 16

Si X es mayor a Y va a aumentar el valor de Y hasta que sea igual a Xy lo muestra en pantalla.

Page 41: Pit Emys Programacion .Net Profesor

33

Lógica computacional

El uso del rectángulo representa un proceso o acción a realizarse, como por ejemplo la asignación de un valor a una variable.

El rombo se utiliza para representar una condición o decisión. Normalmente el flujo de información entra por arriba y sale por un lado si la condición se cumple o por el lado opuesto si la condición no se cumple. En el interior del rombo se escribe la condición 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 información.

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 símbolo representa una entrada de datos utilizando el teclado y describe la asignación de un valor a una variable. En su interior se debe escribir el nombre de la variable en la que queremos que se almacene el dato tecleado.

Estos símbolos se conocen como conectores. Representan la continuación de un diagrama cuando éste no cabe en una sola hoja. El círculo hace referencia a la continuación de un diagrama dentro de la misma hoja, mientras que el pentágono hace referencia hacia la continuación de un diagrama en otra página.

Este símbolo representa una salida de datos en un dispositivo electrónico, por ejemplo en una impresora.

Este símbolo representa una salida de datos pero sólo en el monitor.

Las flechas representan la forma de conexión entre los demás símbolos. La dirección de la flecha determina el flujo de ejecución.

tema G Diagramas de flujo

Un diagrama de flujo es la forma de representar algoritmos de forma gráfica. El diagrama permite que la secuencia a seguir sea más entendible, especialmente cuando hay condiciones y ciclos. Se basa en la utilización de diversos símbolos universales que representan operaciones específicas. Se les llaman diagramas de flujo por que los símbolos se conectan por medio de flechas para indicar la secuencia de una operación. A continuación se describen algunos símbolos utilizados para hacer diagramas de flujo.

¿Recuerdas el algoritmo para vigilar a través de una ventana? Observa cómo se ve mucho más claro en un diagrama de flujo.

Page 42: Pit Emys Programacion .Net Profesor

Programación.NET

34

Recuerda que para cada problema puede haber una gran variedad de algoritmos, ya que todos utilizamos nuestra propia lógica. Probablemente tú tengas en mente otro proceso para lograr el objetivo de vigilar por una ventana. Lo importante es que se logre el objetivo de la mejor manera posible.

Inicio

Llegar puntual a la jornada laboral

Ubicarnos en nuestro lugar

de trabajo

¿Estamos sentados?

1

Verdadero

Falso

Levantarnos del lugar donde

estamos sentados

Orientarnos hacia la ventana

Orientarnos hacia la ventana

Dirigirnos hacia la ventana

Verdadero

¿Está cerrada?

Falso

Abrirla

Observar por la ventana

Regresar a nuestro lugar

de trabajo

¿Ha pasado una hora?

Verdadero

Falso

¿Ha terminado la jornada laboral?

Falso

Verdadero

Fin

1

Page 43: Pit Emys Programacion .Net Profesor

35

Lógica computacional

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 vehículo que realizaste anteriormente y dibuja el diagrama de flujo.

Diagramas de flujo1-10

ACTIVIDAD

Inicio

Abrir la puerta del vehículo

Entrar al vehículo

Es vehículo estándar

Verdadero

Pisar el clutch

Insertar la llave en la ranura

Verificar que esté en parking

Girar la llave

Fin

Falso

Page 44: Pit Emys Programacion .Net Profesor

Programación.NET

36

2. Utiliza el algoritmo para determinar si un número entero X es par o impar y dibuja el diagrama de flujo.

Inicio

Determinar el problema

Elegir una posible solución

La prueba encontró errores

Verdadero

Fin

Indicar los pasos a seguir

Realizar una prueba del algoritmo

Corregir los errores

La solución fue satisfactoria

Falso

Falso

Verdadero

Page 45: Pit Emys Programacion .Net Profesor

37

Lógica computacional

3. Dibuja un diagrama de flujo del algoritmo que te permita saber si un número entero X es primo.

Fin

Bandera = 0

El número es primo

El número no es primo

A

Falso

Verdadero

Inicio

Bandera = 0

i = 2

número MOD i = 0

Verdadero

Bandera = 1

Falso

número

número = 2

i = i + 1

Falso

A

A

Verdadero

Verdadero

Falso

Falso

Verdadero

Bandera = o ei < numero/2

número < 1

Page 46: Pit Emys Programacion .Net Profesor

Programación.NET

38

¿Qué aprendiste?

TEMA A: Describe detalladamente las secuencias lógicas dentro de la computación.

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 lógicospara tener la certeza de que logra su objetivo.

TEMA D: A diferenciar las características entre los términos variable, incognita y constante.

TEMA E: A expresar relaciones entre variables y/o constantes por medio de operadores para obtiener un resultado.

TEMA F: A diseña algoritmos empleando la secuencia, decisión y ciclos de acciones.

TEMA G: A representar en un diagrama de flujo algunos algoritmos.

1. ¿Qué es una variable?

2. ¿Qué es una incógnita?

3. Describe qué es compilación:

01

EVALUACIÓN

Es un campo de memoria que almacena información, la cual puede cambiar en cualquier momento.

Una literal de la cual se desconoce su valor.

Es el proceso mediante el cual la computadora revisa que el programa que has escrito cumpla con las reglas sintácticas del lenguaje de programación que estés utilizando

Page 47: Pit Emys Programacion .Net Profesor

Programación .NETAutor:Carlos Zepeda Chehaibar

A Reconocer pseudocódigos.

B Identificar el Diagrama (N-S) y su aplicación 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 solución de problemas.

Pseudocódigo

El pseudocódigo, también llamado programación falsa, es una guía que sirve para que el programador sepa los pasos a seguir para lograr un resultado y así adecuarlo al lenguaje de programación de su preferencia.

DURACIÓN SUGERIDA: 8 SESIONES / 45-50 MINUTOS

Durante el desarrollo de esta unidad aprenderás a:

Unidad 02NIVEL: Intermedio

Page 48: Pit Emys Programacion .Net Profesor

Programación.NET

40

tema a Pseudocódigo

El pseudocódigo es un lenguaje de especificación de algoritmos, de uso fácil y sintaxis similar al lenguaje de programación. Es un paso más cercano a los lenguajes de computadora, pero te permite concentrarte en las estructuras y acciones, en vez de preocuparte por la sintaxis del lenguaje en el que se va a programar. Cuando un algoritmo se escribe en pseudocódigo, en vez de en palabras comunes, su traducción a cualquier lenguaje de programación será muy sencilla. Para escribir pseudocódigos hay que cumplir algunos requisitos que facilitarán la posterior transcripción del algoritmo a un lenguaje de computadora:

¤ Asignar un nombre. Se debe poner un título al algoritmo que haga referencia a su contenido o función.

¤ 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 deberán

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 más variables del mismo tipo, separando sus nombres con comas, por ejemplo:

Entero: edad Real: estatura, peso, sueldo Cadena: nombre, dirección

Para asignar un valor a una variable primero se escribe el nombre de la variable, luego el signo de igualdad (=) y después el valor que se va a asignar a la variable. Por ejemplo:

edad = 14 estatura = 1.76 sueldo = 750.80 nombre = “Alejandra”

Antes de analizar a detalle la forma correcta de escribir las estructuras en forma de pseudocódigo, veamos un ejemplo simple que sólo utiliza una secuencia de instrucciones. ¿Puedes comprender su funcionamiento? Realiza una prueba de escritorio.

Programa Identificar usuarioInicio Cadena: nom Escribir “Bienvenido. Teclea tu nombre” Leer nom Escribir “Hola”, nomFin

Page 49: Pit Emys Programacion .Net Profesor

41

Pseudocódigo

tema B Diagramas de Nassi – Schneiderman (N-S)

El diagrama N-S, también conocido como diagrama de Chapin, es una técnica que combina la descripción textual del pseudocódigo, con la representación gráfica del diagrama de flujo. Cuenta con un conjunto limitado de símbolos 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 más utilizadas son:

Inicio, Fin, Leer, Escribir, Mientras, Repetir, Hasta, Para, Incrementar, Decrementar, Hacer Función, Entero Real, Carácter, Cadena, Lógico, Retornar. Veamos como ejemplo un algoritmo que sirve para calcular el área y perímetro de cualquier rectángulo. El usuario debe proporcionar los valores de la base y la altura.

Algoritmo para calcular el área y perímetro de un rectángulo.

Inicio1. Pedir al usuario el valor de la base (b)2. Pedir al usuario el valor de la altura (h)3. Calcular el área con la fórmula A=b*h4. Calcular el perímetro con la fórmula P= 2*(b+h)5. Mostrar al usuario los valores de A y PFin

Este simple algoritmo se puede representar con un diagrama de flujo, como se muestra a continuación:

Inicio

b , h

A= b * h

P= 2* (b+h)

A, P

Fin

Page 50: Pit Emys Programacion .Net Profesor

Programación.NET

42

También sabemos que, para que la traducción posterior a un lenguaje de programación sea más sencilla, es conveniente escribirlo en forma de pseudocódigo, por ejemplo así:

Pseudocódigo para calcular el área y perímetro de un rectángulo.

Inicio Entero: b, h, A, P Pedir b Pedir h A = b*h P=2*(b+h) Mostrar A Mostrar PFin

Para realizar el diagrama N-S tenemos que hacer el siguiente análisis.Datos de entrada: b y h (base y altura)Datos de salida: A y P (área y perímetro)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 perímetro es:”, PFin

Hasta este punto parece que el diagrama N-S no tiene diferencia alguna con el pseudocódigo, con la excepción de que está dentro de una especie de recuadro con filas. Empezarás a notar cambios cuando tengas que representar estructuras.

Diagrama N-S de estructuras de decisión

Considera ahora el siguiente caso. Queremos diseñar un programa para encontrar el valor absoluto de un número entero. Recuerda que para los enteros positivos el valor absoluto es el mismo número, mientras que para los negativos, basta cambiar el signo para encontrar el valor absoluto.

Datos de entrada: num (cualquier número entero positivo o negativo)Datos de salida: absnum (valor absoluto de num)Proceso: absnum = num * (-1) Recuerda que este proceso sólo se realiza si num es menor que cero.

Diagrama N-S:

InicioEntero:num, absnumLeer num

Sinum<0

Noabsnum=num*(-1) absnum=numEscribir” valor absoluto”, absnumFin del algoritmo

Page 51: Pit Emys Programacion .Net Profesor

43

Pseudocódigo

Para ejemplificar un algoritmo de decisión múltiple, considera un algoritmo para identificar el mayor y menor de dos números enteros dados.

Datos de entrada: num1, num2Datos salida: mayor, menorProceso: comparación

Diseño de la solución InicioEntero: n1, n2Leer n1, n2

Sin1 = n2

No

Escribir“Números iguales”

Si n1 > n2 No

Escribirn1,”Mayor”

Escribirn2,”Mayor”

Escribirn2,”Menor”

Escribirn1,”Menor”

Fin del algoritmo

Diagramas N-S2-01

ACTIVIDAD

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 máxima limpieza.

1. Algoritmo que te permita encender un vehículo.

InicioAbrir la puerta del vehículoEntrar al vehículo

SiEs estándar

No

Pisar el clutch Verificar que esté en parking

Insertar la llave en la ranuraGirar la llaveFin del algoritmo

Page 52: Pit Emys Programacion .Net Profesor

Programación.NET

44

2. Algoritmo que te permita hacer un pastel.

3. Algoritmo que te permita determinar si un número es par o impar.

InicioEntero: nEntrar al vehículo

n MOD2 = 0Si No

Mostrar: “Es par”

Mostrar: “Es impar”

Fin del algoritmo

InicioComprar los ingredientesMezclar los ingredientesVaciar la mezcla en un molde para pastelPrender el horno

Esperar unos minutosAbrir el horno

El horno está calienteMeter el pastel al horno

Esperar unos minutosAbrir el horno

El pastel está listoSacar el pastel del hornoFin del algoritmo

Page 53: Pit Emys Programacion .Net Profesor

45

Pseudocódigo

4. Algoritmo que te permita desarrollar algoritmos.

5. Algoritmo que te permita saber si un número es primo.

Fin del algoritmo

Bandera = 0Si NoMostrar: “El número es primo”

Mostrar: “El número no es primo”

InicioEntero: bandera, número, i = 0

Leer númeronúmero > 1

Sinúmero = 2 o número = 1

Noi = 2bandera = 0 e i < número/2

Sinúmero MODi= 0

Nobandera = 1i = i + 1

InicioDeterminar el problema

Elegir una posible soluciónIndicar los pasos a seguir¿Hay posibles errores?

Corregir fallasRealizar prueba del algoritmo

¿La solución fue satisfactoria?Fin del algoritmo

Page 54: Pit Emys Programacion .Net Profesor

Programación.NET

46

Ya hemos estudiado que cuando en un algoritmo hay que tomar una decisión, se utiliza el condicional Si. Ya has escrito varios algoritmos utilizando esta estructura de decisión. Ahora verás la forma correcta de escribir esta estructura en forma de pseudocódigo.

En la toma de decisiones que dependen de una condición, la o las instrucciones que formen parte de la estructura sólo se ejecutan si se cumple una condición. Adicionalmente se pueden incluir una o varias instrucciones que se ejecuten sólo en caso de que no se cumpla la condición. Un ejemplo en nuestro propio lenguaje sería algo así:

Si hace frío 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 (Condición) entonces Instrucciones a ejecutar en caso de que la condición sea Verdadera Si no Instrucciones a ejecutar en caso de que la condición sea Falsa Fin_Si

Veamos un algoritmo de ejemplo. Se debe leer un número y determinar si éste es negativo o positivo.

Programa Decisiones en Secuencia

Inicio Entero: num Escribir “Digite un número entero” Leer num Si num < 0 Escribir “El número digitado es negativo” Si no Escribir “El número digitado es positivo” Fin _ SiFin

tema C Pseudocódigos de la estructura Si-Entonces- Si no

Page 55: Pit Emys Programacion .Net Profesor

47

Pseudocódigo

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. Escríbelo en pseudocódigo.

2. Realiza un algoritmo para determinar si una persona es mayor de edad. Escríbelo en pseudocódigo.

3. Leer un número y determinar si es un número primo. Escríbelo en pseudocódigo.

Decisiones simples2-02

ACTIVIDAD

Inicio Entero: total = 0, i = 0, calificacion = 0 Mientras i < 5 Leer calificacion total = total + calificacion i = i + 1 Fin mientras Si total /5 > 5 Mostrar “Aprobado” Si no Mostrar “Reprobado” Fin siFin

Inicio Entero: Edad = 0 Leer Edad Si Edad > 18 Mostrar “Mayor de edad” Si no Mostrar “Menor de edad” Fin siFin

Inicio Entero: bandera = numero = i = 0 Repetir Leer numero Hasta que numero > 1 Si numero <> 2 i = 2

Page 56: Pit Emys Programacion .Net Profesor

Programación.NET

48

4. Leer un número y determinar si es número par. Escríbelo en pseudocódigo.

5. Leer un número y determinar si es número impar. Escríbelo en pseudocódigo.

Inicio Entero: numero Leer numero Si numero MOD 2 = 0 Mostrar “El número es par” Fin siFin

Inicio Entero numero Leer numero Si numero MOD 2 <> Mostrar “Es impar” Fin siFin

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 siFin

Page 57: Pit Emys Programacion .Net Profesor

49

Pseudocódigo

Este tipo de estructura se utiliza cuando se deben realizar varias preguntas (condiciones) en las que no es importante el “Si no” de cada decisión. Su esquema general es el siguiente:

Si condición1 Instrucciones a ejecutar en caso de que la condición1 sea Verdadera

Si condición2 Instrucciones a ejecutar en caso de que la condición2 sea Verdadera

Si condición3 Instrucciones a ejecutar en caso de que la condición3 sea Verdadera

Si condición4 Instrucciones a ejecutar en caso de que la condición4 sea Verdadera

Realiza una prueba de escritorio del siguiente ejemplo.

Inicio Entero: numero Escribir “Digite un número” Leer numero Si numero =0 Llamar a recepción Si numero =1 Llamar a vigilancia Si numero =2 Llamar a mantenimiento Si numero >2 Mensaje “Error, número invalido”Fin

tema D Decisiones en secuencia

Decisiones en secuencia2-03

ACTIVIDAD

Realiza un algoritmo para cada uno de los ejercicios, utilizando decisiones en secuencia.

1. Realiza un algoritmo para un buzón de voz de al menos 4 opciones. Escríbelo como pseudocódigo.

Inicio Entero: numero Mostrar “Elija una opción” Leer numero Si numero = 0 Escuchar mensajes nuevos

Page 58: Pit Emys Programacion .Net Profesor

Programación.NET

50

2. Leer una calificación numérica y determinar si es Deficiente, Regular, Bien, Muy bien o Excelente. Escríbelo como pseudocódigo.

3. Realizar un algoritmo que indique, según el número, el nombre del mes. Escríbelo como pseudocódigo.

Inicio Entero: calificacion Si calificacion < 5 Mostrar “Deficiente” Si calificacion = 6 o calificacion = 7 Mostrar “Regular” Si calificacion = 8 Mostrar “Bien” Si calificacion = 9 Mostrar “Muy bien” Si calificacion = 10 Mostrar “Excelente”Fin

Inicio Entero: mes Leer mes Si mes < 0 o mes > 12 Mostrar “Número no válido” Si mes = 1 Mostrar “Enero” Si mes = 2 Mostrar “Febrero”

Si numero = 1 Escuchar mensajes antiguos Si numero = 2 Borrar mensaje Si numero = 3 Mandar un mensaje a otro usuario Si numero > 3 Mostrar “Opción no válida”Fin

Page 59: Pit Emys Programacion .Net Profesor

51

Pseudocódigo

4. Realizar un algoritmo que indique el tipo de un triángulo, dependiendo de las medidas de sus tres ángulos.

Si mes = 3 Mostrar “Marzo” Si mes = 4 Mostrar “Abril” Si mes = 5 Mostrar “Mayo” Si mes = 6 Mostrar “Junio” Si mes = 7 Mostrar “Julio” Si mes = 8 Mostrar “Agosto” Si mes = 9 Mostrar “Septiembre” Si mes = 10 Mostrar “Octubre” Si mes = 11 Mostrar “Noviembre” Si mes = 12 Mostrar “Diciembre”Fin

Inicio Entero: a1, a2, a3 Leer a1, a2, a3 Mientras a1+a2+a3 <> 180 Leer a1, a2, a3 Si a1=a2 y a1=a3 y a2=a3 Mostrar “Triángulo equilátero” Si (a1=a2 y a3<> a1) o (a1=a3 y a2<> a1) o (a2=a3 y a1<> a2) Mostrar “Triángulo isóceles” Si a1=90 o a2=90 o a3=90 Mostrar “Triángulo rectángulo” Si a1>90 o a2>90 o a3>90 Mostrar “Triángulo obtusángulo” Si a1<90 o a2<90 o a3<90 Mostrar “Triángulo acutángulo”Fin

Page 60: Pit Emys Programacion .Net Profesor

Programación.NET

52

En este tipo de decisiones, un nuevo condicional completo se coloca dentro de la opción Si o de la opción 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 casaSi no Si hace frío usar abrigo ir al cine Si no usar ropa fresca ir a la playa Fin_SiFin_Si

Observa que el grupo de instrucciones en letra cursiva (el condicional interno) sólo se ejecuta en el caso de que la primera condición sea falsa. Si la primera condición es verdadera (si llueve), todo el segundo condicional es ignorado. El esquema general es el siguiente.

Si condición1 entonces Instrucciones a ejecutar en caso de que la condición1 sea VerdaderaSi no Si condición2 entonces Instrucciones a ejecutar en caso de que la condición2 sea Verdadera Si no Instrucciones a ejecutar en caso de que la condición2 sea Falsa Fin _ si Fin _ si

También es posible tener un esquema como éste:

Si condición1 entonces Si condición2 entonces Instrucciones a ejecutar en caso de que la condición2 sea Verdadera Si no Instrucciones a ejecutar en caso de que la condición2 sea Falsa Fin_si Si no Instrucciones a ejecutar en caso de que la condición1 sea FalsaFin_si

De acuerdo a las necesidades de cada algoritmo, se pueden anidar dos, tres o más decisiones. Realiza una prueba de escritorio de este ejemplo: se debe leer un número entero y determinar si es de uno, dos, tres, cuatro o más dígitos. Además hay que verificar que el número no sea negativo.

tema e Decisiones en cascada o anidadas

Page 61: Pit Emys Programacion .Net Profesor

53

Pseudocódigo

Programa Decisión en Cascada

Inicio Entero:num Escribir “Por favor, digite un número entero” Leer num Si num < 0 num = num * (-1)Fin _ siSi num > = 1 y num < = 9 entonces Escriba “El número tiene 1 dígito”Si no Si num > = 10 y num < 99 entonces Escriba “El número tiene 2 dígitos” Si no Si num > = 100 y num < 999 entonces Escriba “El número tiene 3 dígitos” Si no Si num > 1000 y num < = 9999 entonces Escriba “El número tiene 4 dígitos” Si no Escriba “El número tiene más de 4 dígitos” Fin _ si Fin _ si Fin _ siFin _ si

Decisiones anidadas2-04

ACTIVIDAD

Realiza un algoritmo para cada uno de los siguientes ejercicios, utilizando decisiones anidadas o en cascada.

1. Leer un número entero de dos dígitos y determinar si un dígito es múltiplo del otro.

Inicio Entero: num, aux1, aux2 Leer num Mientras num<10 o num >99 Leer num aux1= num/10 aux2= num MOD 10 Si aux1< aux2 Si aux2 MOD aux1 = 0

Page 62: Pit Emys Programacion .Net Profesor

Programación.NET

54

2. Leer dos números enteros. Si la diferencia entre los dos es menor o igual a 10, entonces mostrar en pantalla todos los enteros comprendidos entre el menor y el mayor de los números leídos.

3. Leer dos números enteros de 2 dígitos. Si la diferencia entre los dos números es par mostrar en pantalla la suma de los dos números; si dicha diferencia es un número menor que 10 entonces mostrar en pantalla el producto de los dos números; y si la diferencia entre los números leídos termina en 4 mostrar en pantalla la diferencia.

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 siFin

Mostrar “El segundo dígito es múltiplo del primero” Fin si Si no Si aux1 MOD aux2 = 0 Mostrar “El primer dígito es múltiplo del segundo” Fin si Fin siFin

Page 63: Pit Emys Programacion .Net Profesor

55

Pseudocódigo

4. Leer un número entero de 2 dígitos. Si el número termina en 1 mostrar en pantalla su primer dígito, si termina en 2 mostrar en pantalla la suma de sus dígitos y si termina en 3 mostrar en pantalla el producto de sus dos dígitos.

Inicio Entero: num1, num2, aux Leer num1 Mientras num1<10 y num1 >99 Leer num1 Leer num2 Mientras num2<10 y num2 >99 Leer num2 Si num2 > num1 aux=num1 num1=num2 num2=aux Fin si aux=num1-num2 Si aux MOD 2 = 0 Mostrar num1+num2 Si aux < 10 Mostrar num1*num2 Si aux MOD 10 = 4 Mostrar auxFin

Inicio Entero: num Leer num Mientras num<10 y num>99 Leer num Fin mientras Si num MOD 10 = 1 Mostrar num/10 Si num MOD 10 = 2 Mostrar num MOD 10 + num/10 Si num MOD 10 = 3 Mostrar num MOD 10 * num/10Fin

Page 64: Pit Emys Programacion .Net Profesor

Programación.NET

56

tema F Ciclos

Un ciclo es una estructura que permite repetir o iterar un conjunto de acciones la cantidad de veces que determine una condición. El ciclo siempre debe tener un inicio y un final.

Para facilitar la escritura de algoritmos se utilizan tres formas de ciclos. Aunque siempre que necesites repetir instrucciones puedes usar cualquiera de los tres ciclos, siempre hay alguno que resulta más conveniente o que permite escribir menos instrucciones.

2-01LÁMINA Ciclos

Ciclo Mientras2-05

ACTIVIDAD

Realiza un algoritmo para cada uno de los siguientes problemas, utilizando la estructura del ciclo Mientras.

1. Leer un número entero y mostrar todos los pares comprendidos entre 1 y el número leído. Escríbe el pseudocódigo.

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

Inicio Entero num, cont = 2 Leer num Mientras num < 1 Leer num Fin mientras Mientras cont < num Mostrar cont cont =cont + 2 Fin mientrasFin

Page 65: Pit Emys Programacion .Net Profesor

57

Pseudocódigo

3. Leer un número entero y determinar si es un número primo.

4. Leer cualquier número entero y mostrar en pantalla su tabla de multiplicar. Escribe el pseudocódigo y dibuja un diagrama N-S. o diagrama de flujo.

Inicio Entero cont = 21 Mientras cont < 150 Mostrar cont cont =cont + 2 Fin mientrasFin

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

Inicio Entero num, i = 1 Leer num Mientras i < 12 Mostrar num “*” i i + + Fin mientras Fin

InicioEntero: num, i = 1Leer num

i < 12Mostrar num “*” ii + +

Fin

Page 66: Pit Emys Programacion .Net Profesor

Programación.NET

58

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

2. Generar en orden los números del 1 al 10, utilizando un ciclo que vaya de 10 a 1

3. Mostrar en pantalla los primeros 20 múltiplos de 4.

4. Sumar los números primos comprendidos entre el 1 y el 22.

Ciclo Para2-06

ACTIVIDAD

Inicio Entero: i Para i = 1 hasta 15 Mostrar i Fin paraFin

Inicio Entero: i Para i = 10 hasta 1 Mostrar 11 - i Fin paraFin

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

Inicio Entero: total = 0, num Para num = 1 hasta 22 Si num es primo total = total + num

Page 67: Pit Emys Programacion .Net Profesor

59

Pseudocódigo

Ciclo Hacer Mientras2-07

ACTIVIDAD

Realiza un algoritmo para cada uno de los ejercicios, utilizando la estructura del ciclo Hacer-Mientras.

1. 1. Leer un número y calcular su factorial.

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

5. Mostrar en pantalla los números pares comprendidos entre el 20 y el 30.

Fin si Fin para Mostrar totalFin

Inicio Entero: num, prod = 1, fact = 1 Leer num Mientras num < 1 Leer num Hacer fact* = prod prod + = 1 Mientras prod < num Mostrar factFin

Inicio Entero: num = 1

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

Page 68: Pit Emys Programacion .Net Profesor

Programación.NET

60

3. Leer dos números enteros y mostrar todos los múltiplos de 4 comprendidos entre el menor y el mayor.

4. Leer dos números enteros y sumar todos los valores enteros que haya entre el menor y el mayor.

Inicio Entero: a, b, i = 1, aux Leer a, b Si b > a aux = a a = b b = aux Fin si Mientras a MOD 4 <> 0 y a < b a + = 1 Fin mientras Hacer Mostrar a a = a + 4 Mientras a < bFin

Inicio Entero: a, b, suma, aux Leer a, b Si b < a aux = a a = b Fin si Hacer suma + = a a + = 1 Mientras a < bFin

Hacer Mostrar num num + = 2 Mientras num < 99Fin

Page 69: Pit Emys Programacion .Net Profesor

61

Pseudocódigo

5. Sumar números leídos uno a uno, hasta que el usuario ingrese un 9. Al final debe mostrarse la suma. Escribe el pseudocódigo y dibuja el diagrama de flujo.

Ciclo Hacer - Hasta2-08

ACTIVIDAD

Realiza un algoritmo para cada uno de los ejercicios, utilizando la estructura del ciclo Hacer-Hasta.

1. Leer un número entero y mostrar todos los pares comprendidos entre 1 y el número leído.

Inicio Entero: suma, num Hacer Leer num suma + = num Mientras num <> 9 Mostrar sumaFin

Entero = suma, num

Falso

num

num <>a Verdadero

suma + = num

Fin

suma

Inicio

Inicio Entero: num, i = 2 Leer num Si num > i Hacer Mostrar i i + = 2 Hasta i < num Fin siFin

Page 70: Pit Emys Programacion .Net Profesor

Programación.NET

62

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

3. Leer dos números enteros y mostrar todos los múltiplos de 4 comprendidos entre el menor y el mayor.

4. Leer dos números enteros y sumar los valores enteros que estén entre el menor y el mayor.

Inicio Entero: num = 20 Hacer Mostrar num num + = 2 Hasta num > 100Fin

Inicio Entero: a, b, aux Leer a,b Si b > a aux = a a = b b = aux Fin si Mientras a MOD 4 <> 0 y a < b a + = 1 Fin mientras Hacer Si a < b Mostrar a a + = 4 Hasta a > bFin

Inicio Entero: a, b, aux, suma Leer a, b Si b > a aux = a a = b b = aux Fin si Hacer

Page 71: Pit Emys Programacion .Net Profesor

63

Pseudocódigo

5. Sumar números leídos uno a uno, hasta que el usuario ingrese un 9. Al final debe mostrarse la suma. Escribe el pseudocódigo y dibuja el diagrama de flujo.

Ciclos anidados2-09

ACTIVIDAD

1. Utilizando ciclos anidados, escribe el algoritmo para generar las siguientes parejas de enteros.

x y

2 0

2 1

3 0

3 1

4 0

4 1

5 0

Inicio Entero: num, suma Hacer Leer num suma + = num Hasta num = 9 Mostrar sumaFin

suma + = a a++ Hasta a > bFin

Inicio 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 paraFin

Page 72: Pit Emys Programacion .Net Profesor

Programación.NET

64

x y

4 1

4 2

4 3

5 4

5 5

5 6

6 7

6 8

6 9

3. Utilizando tres ciclos anidados generar las siguientes ternas de números

x y z

1 1 1

1 1 2

1 1 3

1 2 1

1 2 2

1 2 3

2 1 1

2 1 2

2 1 3

2 2 1

2 2 2

2 2 3

2. Utilizando ciclos anidados generar las siguientes parejas de números. Puedes usar una variable auxiliar para llevar la cuenta de las repeticiones en el ciclo interno.

Inicio Entero x, aux, y = 1 Para x = 4 hasta 6 Para aux = 1 hasta 3 Mostrar x Mostrar y y + = 1 Fin para Fin paraFin

Inicio 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 paraFin

Page 73: Pit Emys Programacion .Net Profesor

65

Pseudocódigo

Escribiendo pseudocódigos matemáticos2-10

ACTIVIDAD

1. Usando un ciclo escribe el pseudocódigo 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:

7 X 1 = 7 7 X 2 = 14 7 X 3 = 21... etcétera

2. Cuatro números dados por el usuario representan dos fracciones, donde el N1 es el numerador de la primera fracción, D1 es el denominador de la primera fracción, N2 es el numerador de la segunda fracción y D2 es el denominador de la segunda fracción. Dados estos cuatro números, escribe el pseudocódigo para obtener el numerador (N3) y el denominador (D3) de la fracción que resultaría de multiplicar las dos primeras fracciones.

Inicio Entero: num, i Leer num Para i = 1 hasta 12 Mostrar num “*” i “=” num * i Fin paraFin

Inicio Entero: N1, N2, D1, D2 Leer N1, N2 Hacer Leer D1 Hasta que D1 <> 0 Hacer Leer D2 Hasta que D2 <> 0 Mostrar “El producto de las fracciones es” N1* N2 “sobre” D1* D2Fin

Page 74: Pit Emys Programacion .Net Profesor

Programación.NET

66

Para cada uno de los ejercicios, escribe con pseudocódigo un programa que dé solución a lo que se pide.

1. Leer las edades de 7 personas (números enteros), almacenarlas en un arreglo y determinar cuántas de esas personas son mayores de edad. Además del pseudocódigo realiza la prueba de escritorio.

tema G Arreglos y matrices

2-02LÁMINA Arreglos y matrices

Arreglos2-11

ACTIVIDAD

Inicio Entero: edad [7], i Para i = 1 hasta 7 Leer edad [i] Fin para Para i = 1 hasta 7 Mostrar “Persona número” edad[i] “es” Si edad [i] < 18 Mostrar “Menor de edad” Si no Mostrar “Mayor de edad” Fin si Fin paraFin

Page 75: Pit Emys Programacion .Net Profesor

67

Pseudocódigo

2. Leer 8 enteros, almacenarlos en un arreglo y determinar en qué posición del arreglo está el mayor número leído. Además escribir cuál es el número mayor del arreglo.

1 2 3 4 5 6 78 10 14 18 21 25 17

Edad

i: 1,2,3,4,5,6,7,1,2,3,4,5,6,7 Persona número 1 es menor de edad Persona número 2 es menor de edad Persona número 3 es menor de edad Persona número 4 es mayor de edad Persona número 5 es mayor de edad Persona número 6 es mayor de edad Persona número 7 es menor de edad

Inicio Entero: mayor [8], aux, M, i Para i = 1 hasta 8 Leer mayor [i] Fin para aux = 1 M = mayor[i] > M Para i = 2 hasta 8 Si mayor[i] > M aux = i M = mayor [i] Fin_si Fin para Mostrar “El número mayor es” Mostrar M Mostrar “Que se encuentra en la posición” Mostrar auxFin

Page 76: Pit Emys Programacion .Net Profesor

Programación.NET

68

3. Almacenar en un arreglo de 10 posiciones los 10 primeros números primos comprendidos entre 150 y 320. Luego mostrarlos en pantalla.

4. Leer 15 números enteros, almacenarlos en un arreglo y determinar si existe al menos un número repetido.

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

Inicio Entero: R[15], i, j, n = 0 Para i = 1 hasta 15 Leer R [i] Fin para Para i = 1 hasta 14 Para j = i + 1 hasta 15 Si R [i] = R[j] n = 1 Fin si Fin para Fin para Si n = 1 Mostrar “Existen repeticiones” Fin siFin

Page 77: Pit Emys Programacion .Net Profesor

69

Pseudocódigo

Escribe un programa, en formato de pseudocódigo, para cada uno de los siguientes problemas:

1. Se debe crear la siguiente matriz y asignar en cada posición los valores que se muestran. Utiliza ciclos.

Matrices2-12

ACTIVIDAD

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

1 2 3 4

2 4 6 8

3 6 9 12

4 8 12 16

2. Se debe crear la siguiente matriz y asignar en cada posición los valores que se muestran. Utiliza ciclos.

Inicio 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 paraFin

Inicio 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 paraFin

Page 78: Pit Emys Programacion .Net Profesor

Programación.NET

70

4. Se tiene una matriz de 4 filas por 4 columnas, en la que se han almacenado 16 datos de tipo entero. Debes determinar en qué fila y en qué columna se encuentra el número mayor.

3. Se debe crear la siguiente matriz y asignar en cada posición los valores que se muestran. Utiliza ciclos.

2 3 4 5

3 4 5 6

4 5 6 7

5 6 7 8

Inicio 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 paraFin

Inicio Entero: A[4,4], i, j, m, n m = 1, n = 1 Para i = 1 hasta 4 Para j = 1 hasta 4 Si A [i, j] > A [m, n] m = i n = j Fin si Fin para Fin para Mostrar “El número mayor se encuentra en” Mostrar i “,” j Mostrar “Y tiene un valor de” Mostrar A [i, j]Fin

Page 79: Pit Emys Programacion .Net Profesor

71

Pseudocódigo

6. Se tiene una matriz de 4 filas por 3 columnas, en la que se han almacenado 12 datos de tipo entero. Debes leer cada dato y calcular la suma de los elementos de cada fila. Utiliza algún ciclo.

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

5. Se debe crear la siguiente matriz y asignar en cada posición los valores que se muestran. Utiliza ciclos.

2-03LÁMINA Glosario de conceptos algoritmos

Inicio 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 paraFin

Inicio Entero: A[4,3], i, j, s1 = s2 = s3 = s4 = 0 Para i = 1 hasta 4 Para j = 1 hasta 3 Fin para Fin para Leer A [i, j] Para i = 1 hasta 3 s1 + = A [1, i] Fin para Para i = 1 hasta 3 s2 + = A [2, i] Fin para Para i = 1 hasta 3 s3 + = A [3, i] Fin para Para i = 1 hasta 3 s4 + = A [4, i] Fin paraFin

Page 80: Pit Emys Programacion .Net Profesor

Programación.NET

72

¿Qué aprendiste?

TEMA A: A crea un mapa conceptual con las estructuras de los pseudocódigos 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 pseudocódigo de la estructura.

TEMA D: A utilizar dentro de la ejecución de algoritmos, las decisiones en secuencia correspondientes.

TEMA E: Diferencía las decisiones en cascada y las decisiones anidadas en una programación.

TEMA F: A elegir el tipo de ciclo adecuado en la creación de algoritmos.

TEMA G: A desarrollar un programa, en formato de pseudocódigo, para cada ejercicio matemático.

1. ¿Qué es una variable?

2. ¿Qué es una incógnita?

3. Describe qué es compilación:

02

EVALUACIÓN

Es un campo de memoria que almacena información, la cual puede cambiar en cualquier momento.

Una literal de la cual se desconoce su valor.

Es el proceso mediante el cual la computadora revisa que el programa que has escrito cumpla con las reglas sintácticas del lenguaje de programación que estés utilizando

Page 81: Pit Emys Programacion .Net Profesor

Programación .NETAutor:Carlos Zepeda Chehaibar

A Identificar la plataforma .NET, también su kit de desarrollo .Net Framework, que le permitirán desarrollar aplicaciones simples o complejas.

B Conocer el entorno de C# y su instalación.

C Describir los elementos que conforman un programa, conocerá los diferentes tipos de datos ó como hacer la declaración de estos.

D Evaluar el valor de las variables en diferentes operaciones.

E Operar las sentencias de control.

F Conocer las definiciones de método,arreglo y colecciones, su uso e importancia.

.NET soporta más de 20 lenguajes de programación, entre los cuales se encuentran: C#, Visual Basic .NET, Delphi (Object Pascal), C++, F#, J#, Perl, Python, Fortran, Prolog, Cobol y PowerBuilder.

Durante el desarrollo de esta unidad aprenderás a:

Unidad 03 .NET

DURACIÓN SUGERIDA: 7 SESIONES / 45-50 MINUTOSNIVEL: Intermedio

Page 82: Pit Emys Programacion .Net Profesor

Programación.NET

74

Entorno de desarrollo (IDE)

El entorno de desarrollo integrado (IDE) de Visual C# es un conjunto de herramientas de desarrollo expuestas a través de una interfaz de usuario común. 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 vínculos a las herramientas de Visual C# más 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 configuración básica.

Visual C# (pronunciado como c Sharp) esta diseñado para la construcción de una gran variedad de aplicaciones que se ejecutan en .NET Framework, C# es simple, poderoso, con seguridad de tipos y Orientado a Objetos.

Microsoft.NET es el conjunto de nuevas tecnologías en las que Microsoft ha estado trabajando durante los últimos años con el objetivo de obtener una plataforma sencilla y potente para distribuir el software en forma de servicios que puedan ser suministrados remotamente y que puedan comunicarse y combinarse unos con otros de manera totalmente independiente de la plataforma, lenguaje de programación y modelo de componentes con los que hayan sido desarrollados. Ésta es la llamada plataforma .NET, y a los servicios antes comentados se les denomina servicios Web.

Para crear aplicaciones para la plataforma .NET, tanto servicios Web como aplicaciones tradicionales (aplicaciones de consola, aplicaciones de ventanas, servicios de Windows NT, etc.), Microsoft ha publicado el denominado kit de desarrollo de software conocido como .NET Framework SDK que incluye las herramientas necesarias tanto para su desarrollo, distribución y ejecución, por otra parte Visual Studio.NET permite realizar las mismas tareas a través de un entorno gráfico basado en ventanas.

tema a Introducción

3-01LÁMINA Microsoft .NET

3-01 VIDEO Instalando Visual C# Express 2010

Page 83: Pit Emys Programacion .Net Profesor

75

.NET

tema B Entorno de programación

Como en la mayoría de los programas de Microsoft, al ejecutar un programa te da la bienvenida, en la página principal puedes crear un nuevo proyecto o abrir uno creado con anterioridad.

Imagen 3-1: Página Principal

La mayoría de los proyetos que desarrollaras a lo largo de este curso, serán programados bajo la opción Aplicación de consola. Para generar un proyecto nuevo de consola selecciona Nuevo proyecto/Plantillas instaladas/Visual C#/Aplicación de consola, luego haz clic en Aceptar.

Imagen 3-2: Nuevo proyecto

Page 84: Pit Emys Programacion .Net Profesor

Programación.NET

76

Esto hace que el programa prepare nuestra área de trabajo que queda como lo muestra a continuación, el área de trabajo contiene el Editor de código, cuadro de herramientas, Explorador de soluciones y propiedades. A demás cuenta con las barras de menú comunes.

1. Barra de menús: Integrada por un conjunto de menús desplegables que aloja comandos, herramientas u opciones, que se le pueden aplicar o configurar al documento o programa.

2. Cuadro de Herramientas: Muestra iconos para los controles y otros elementos que se pueden agregar a los proyectos. Para abrir el Cuadro de herramientas, haz clic en menú Vista/Cuadro de herramientas.

3. Explorardor de soluciones: Permite ver elementos y realizar tareas de administración de elementos en un proyecto.

4. Propiedades: Muestra las opciones que se pueden configurar del objeto activo.

5. Editor de Código: En el se escribe o modifica el código fuente de una aplicación. Es posible acercar el texto presionando la tecla <CTRL> y gira la rueda del ratón. Además, al hacer clic en un símbolo, todas las instancias de ese símbolo se resaltan automáticamente.

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 código.

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

5

2

6

1

3

4

Page 85: Pit Emys Programacion .Net Profesor

77

.NET

Hola mundo

Básicamente una aplicación en C# puede verse como un conjunto de uno o más ficheros de código fuente con las instrucciones necesarias para que la aplicación funcione como se desea y que son pasados al compilador para que genere un ejecutable. Cada uno de estos ficheros no es más que un fichero de texto plano escrito usando caracteres Unicode y siguiendo la sintaxis propia de C#.

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.

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 código. Es el que sigue:

using System; namespace HolaMundo{ /// <summary> /// Summary description for Class1.

/// </summary>

3-02LÁMINA Consola y Buffer de entrada

Mi primera aplicación3-01

PROYECTO

3-02 VIDEO Mi primera aplicación

Page 86: Pit Emys Programacion .Net Profesor

Programación.NET

78

class Class1 { static void Main(string[] args) { // // TO DO: Add code to start application here // } }}

Siempre que crees una aplicación de Consola en C#, se agregará este código. Seguro que, con lo que hemos visto hasta ahora, te suena mucho. La librería using System nos permitirá usar miembros de este espacio de nombres sin poner la palabra System delante. Luego hay definido un espacio de nombres para la aplicación, que se llama igual que la misma (HolaMundo).

Luego está el espacio de comentarios, que sirve para que puedas poner ahí lo que quieras (un resumen de lo que hace el programa).

Por último, una clase llamada Class1 con un método Main que es static, que es el método por el que empezará la ejecución del programa. Esas tres líneas que hay dentro del método contienen un comentario. Te lo traduzco: “Para hacer: Añade aquí el código para que empiece la aplicación”. O sea, que ya sabes dónde hay que escribir el código de nuestra aplicación “Hola Mundo”: en el método Main. Escribe esto:

Console.WriteLine(“Hola Mundo”);

Vamos a probarla, a ver qué tal funciona. Haz clic en el menú “Depurar_Iniciar”, o bien haz clic en el botón que tiene un triángulo verde apuntando hacia la derecha, o bien pulsa la tecla F5.

Se ha abierto una ventana de línea de comandos y se ha cerrado rápidamente. No pasa nada. Todo está bien. Para evitar que se cierre inmediatamente después de ejecutarse tienes dos opciones: ejecutar la aplicación sin opciones de depuración (menú Depurar_Iniciar sin depurar” o bien pulsar Control+F5); o añadir una línea de código más 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 depuración), pero es mejor la segunda. Escribe la siguiente línea a continuación de la que escribimos antes:

string a = Console.ReadLine();

Ahora vuelve a ejecutar como hicimos la primera vez. Como ves, ahora la ventana de línea de comandos se queda abierta hasta que pulses Enter. ¿Y por qué es mejor hacerlo así que ejecutar sin depuración?.

Porque si ejecutamos sin depuración, obviamente, no podremos usar las herramientas de depuración, como poner puntos de interrupción, ejecutar paso a paso y cosas así. En esta aplicación no tendría mucho sentido, es cierto, pero cuando hagamos programas más grandes

Page 87: Pit Emys Programacion .Net Profesor

79

.NET

podremos comprobar que todas estas herramientas son verdaderamente útiles. Por lo tanto, todo el código de nuestro programa terminado es este:

using System; namespace HolaMundo{ /// <summary> /// Summary description for Class1. /// </summary> class Class1 { static void Main(string[] args) { // // TODO: Add code to start application here // Console.WriteLine(“Hola Mundo”); string a = Console.ReadLine(); } }}

Ya hemos terminado. No te olvides de guardarlo antes de salir. Con Archivo/Guardar Todo, o bien el botón con varios discos dibujados, o bien la combinación de teclas <Ctrl+Mayús+S>.

Ahora realiza un programa que muestre el mensaje “Estoy realizando mi segundo programa”, también que imprima tu nombre completo, dirección y teléfono, todo en líneas separadas. Escribe el código del programa:

Page 88: Pit Emys Programacion .Net Profesor

Programación.NET

80

C# es un lenguaje de programación orientada a objetos y todo en él son clases. La clase es el concepto fundamental de esta metodología de programación y es quién identifica a los componentes que constituyen un programa.

Todo programa en C# por más sencillo que éste sea, está constituido por más de una clase, las cuales trabajan para permitir que el programa se ejecute. Esto se da sin importar que el programador tan solo deba escribir una de ellas.

tema C Introducción a la programación en C#

3-03LÁMINA Otros elementos del programa

Una estructura básica de un sencillo programa que se ejecutará en una consola de comandos, o al menos la parte que debe construir el programador, pero permite visualizar con detalle los elementos esenciales que soportan a cualquier aplicación de software, sin importar el entorno donde vaya a ejecutarse.

public class PrimerPrograma{ static void Main() { // Instrucciones }}

La clase es algo así como la estructura o molde de un componente de software, y se define con la palabra clave class. El término public le informa al sistema que dicha clase y sus componentes están disponibles para ser vistos desde afuera del componente de software que la contiene, en este caso el propio programa.

El programa en sí, observe, es una clase, pero no se puede perder de vista que en la práctica el programa necesita otros componentes de software para poder ejecutarse, y lo más seguro es que estos últimos de alguna manera dependan de una o más clases.

Cuando se ejecuta el programa, el sistema operativo a través de la plataforma de ejecución, .NET, crea una instancia (para comenzar entiéndase, 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 guión bajo”

Todo programa desarrollado en C# debe incluir un método Main(), el cual le informa al compilador

Page 89: Pit Emys Programacion .Net Profesor

81

.NET

por donde debe iniciar y también terminar un programa. Este método o función siempre se define antecedida de la palabra clave static, la cual permite utilizar la clase directamente, sin necesidad de instanciar un objeto de ella. Esto debe ser así por que en el momentos de iniciar la ejecución de un programa, aún no se ha montado en el sistema todos los componentes necesarias para manejar objetos y por lo tanto el procesador no sabe que hacer con ellos.

La palabra clave void, que antecede a Main, le dice al sistema que la función que viene en seguida no retornará ningún valor y que por lo tanto no espere nada. En C#, esta función también se puede definir como int.

La función Main() puede ir como se mostró en el primer programa, o también incluir argumentos de tipo cadena de texto. Dichos argumentos se identifican por un arreglo o vector del tipo string (cadena de texto), como en la siguiente forma:

static void Main(string[] argumentos) { // Instrucciones }

En apariencia, los argumentos de inicio de ejecución solo son válidos para programas de consola, y no para programas que manejan un sistema gráfico de ventanas, como las aplicaciones tipo Windows.

Palabras reservadas

Aunque antes se han dado una serie de restricciones sobre cuáles son los nombres válidos que se pueden dar en C# a los identificadores, falta todavía por dar una, los siguientes nombres no son válidos como identificadores ya que tienen un significado especial en el lenguaje:

¤ 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

Page 90: Pit Emys Programacion .Net Profesor

Programación.NET

82

Aparte de estas palabras reservadas, si en futuras implementaciones del lenguaje se decidiese incluir nuevas palabras reservadas, Microsoft dice que dichas palabras habrían de incluir al menos dos símbolos de subrayado consecutivos (__) Por tanto, para evitar posibles conflictos futuros no se recomienda dar a nuestros identificadores nombres que contengan dicha secuencia de símbolos.

Literales

Un literal es la representación explícita de los valores que pueden tomar los tipos básicos del lenguaje. A continuación se explica cuál es la sintaxis con que se escriben los literales en C# desglosándolos según el tipo de valores que representan:

¤ Literales enteros: Un número entero se puede representar en C# tanto en formato decimal como hexadecimal. En el primer caso basta escribir los dígitos decimales (0-9) del número unos tras otros, mientras que en el segundo hay que preceder los dígitos hexadecimales (0-9, a-f, A-F) con el prefijo 0x. En ambos casos es posible preceder el número 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 también puede incluir un sufijo que indique el tipo de dato entero al que ha de pertenecer el literal.

¤ Literales reales: Los números reales se escriben de forma similar a los enteros, aunque sólo se pueden escribir en forma decimal y para separar la parte entera de la real usan el tradicional punto decimal (carácter .) También es posible representar los reales en formato científico, usándose para indicar el exponente los caracteres e ó E. Ejemplos de literales reales son 0.0, 5.1, -5.1, +15.21, 3.02e10, 2.02e-2, 98.8E+1, etc.

Al igual que ocurría con los literales enteros, los literales reales también pueden incluir sufijos que indiquen el tipo de dato real al que pertenecen. ¤ Literales lógicos: Los únicos literales lógicos válidos son true y false, que respectivamente

representan los valores lógicos cierto y falso.

¤ Literales de carácter: Prácticamente cualquier carácter se puede representar encerrándolo entre comillas simples. Por ejemplo, ‘a’ (letra a), ‘ ‘ (carácter de espacio), ‘?’ (símbolo de interrogación), 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 código Unicode o mediante un formato especial tal y como se indica a continuación:

Page 91: Pit Emys Programacion .Net Profesor

83

.NET

En realidad, de la tabla anterior hay que matizar que el carácter de comilla doble también puede aparecer dentro de un literal de cadena directamente, sin necesidad de usar secuencias de escape. Por tanto, otros ejemplos de literales de carácter válidos serán ‘\?’, ‘?’, ‘\f’, ‘\u0000’, ‘\\’, ‘\’’, etc.

Aparte de representar los caracteres de la tabla anterior, también es posible usar los códigos de escape Unicode para representar cualquier código Unicode, lo que suele usarse para representar literales de caracteres no incluidos en los teclados estándares.

Junto al formato de representación de códigos de escape Unicode ya visto, C# incluye un formato abreviado para representar estos códigos en los literales de carácter si necesidad de escribir siempre cuatro dígitos aún cuando el código a representar tenga muchos ceros en su parte izquierda. Este formato consiste en preceder el código de \x en vez de \u. De este modo, los literales de carácter ‘\U00000008’, ‘\u0008’, ‘\x0008’, ‘\x008’, ‘\x08’ y ‘\x8’ son todos equivalentes. Hay que tener en cuenta que este formato abreviado sólo es válido en los literales de carácter, y no a la hora de dar nombres a los identificadores.

¤ Literales de cadena: Una cadena no es más que una secuencia de caracteres encerrados entre comillas dobles. Por ejemplo ?Hola, mundo?, ?camión?, etc. El texto contenido dentro estos literales puede estar formado por cualquier número de literales de carácter concatenados y sin las comillas simples, aunque si incluye comillas dobles éstas han de escribirse usando secuencias de escape porque si no el compilador las interpretaría como el final de la cadena.

CarácterCódigo de

escape UnicodeCódigo de

escape especial

Comilla simple \u0027 \'

Comilla doble \u0022 \"

Carácter nulo \u0000 \0

Alarma \u0007 \a

Retroceso \u0008 \b

Salto de página \u000C \f

Nueva línea \u000A \n

Retorno de carro \u000D \r

Tabulación horizontal \u0009 \t

Tabulación vertical \u000B \v

Barra invertida \u005C \\

Page 92: Pit Emys Programacion .Net Profesor

Programación.NET

84

Variables

Una variable puede verse simplemente como un hueco en el que se puede almacenar un objeto de un determinado tipo al que se le da un cierto nombre. Para poderla utilizar sólo hay que definirla indicando cual será su nombre y cual será el tipo de datos que podrá almacenar, lo que se hace siguiendo la siguiente sintaxis:

<tipoVariable> <nombreVariable>;

Una variable puede ser definida dentro de una definición de clase, en cuyo caso se correspondería con el tipo de miembro que hasta ahora hemos denominado campo. También puede definirse como un variable local a un método, que es una variable definida dentro del código del método a la que sólo puede accederse desde dentro de dicho código.

Otra posibilidad es definirla como parámetro de un método, que son variables que almacenan los valores de llamada al método y que, al igual que las variables locales, sólo puede ser accedidas desde código ubicado dentro del método. El siguiente ejemplo muestra como definir variables de todos estos casos:

class A{ int x, z; int y; void F(string a, string b) { Persona p; }}

En este ejemplo las variables x, z e y son campos de tipo int, mientras que p es una variable local de tipo Persona y a y b son parámetros de tipo string. Como se muestra en el ejemplo, si un método toma varios parámetros las definiciones de éstos se separan mediante comas (carácter ,), y si queremos definir varios campos o variables locales (no válido para parámetros) de un mismo tipo podemos incluirlos en una misma definición incluyendo en sus nombres separados por comas.

Con la sintaxis de definición de variables anteriormente dada simplemente definimos variables pero no almacenamos ningún objeto inicial en ellas. El compilador dará un valor por defecto a los campos para los que no se indique explícitamente ningún valor según se explica en el siguiente apartado. Sin embargo, a la variables locales no les da ningún valor inicial, pero detecta cualquier intento de leerlas antes de darles valor y produce errores de compilación 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 sería así:

Page 93: Pit Emys Programacion .Net Profesor

85

.NET

Persona p; p = new Persona(“José”, 22, “76543876-A”);

Sin embargo, C# también proporciona una sintaxis más sencilla con la que podremos asignar un objeto a una variable en el mismo momento se define. Para ello se la ha de definir usando esta otra notación:

<tipoVariable> <nombreVariable> = <valorInicial>;

Así por ejemplo, la anterior asignación de valor a la variable p podría rescribirse de esta otra forma más compacta:

Persona p = new Persona(“José”, 22, “76543876-A”);

La especificación de un valor inicial también combinarse con la definición de múltiples variables separadas por comas en una misma línea. Por ejemplo, las siguientes definiciones son válidas:

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

Tipos de datos

Son ciertos tipos de datos tan comúnmente utilizados en la escritura de aplicaciones que en C# se ha incluido una sintaxis especial para tratarlos. Por ejemplo, para representar números enteros de 32 bits con signo se utiliza el tipo de dato System.Int32 definido en la BCL, aunque a la hora de crear un objeto “a” de este tipo que represente el valor 2 se usa la siguiente sintaxis:

System.Int32 a = 2;

Como se ve, no se utiliza el operador new para crear objeto System.Int32, sino que directamente se indica el literal que representa el valor a crear, con lo que la sintaxis necesaria para crear entero de este tipo se reduce considerablemente. Es más, dado lo frecuente que es el uso de

3-04LÁMINA Otros tipos de variables

Page 94: Pit Emys Programacion .Net Profesor

Programación.NET

86

Tipo CTS Alias C# Descripción Valores que acepta

System.Object objectClase 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 shortEnteros de 2 bytes con signo

Desde -32.768 hasta 32.767

System.UInt16 ushortEnteros de 2 bytes sin signo

Desde 0 hasta 65.535

System.Int32 intEnteros de 4 bytes con signo

Desde -2.147.483.648 hasta 2.147.483.647

System.UInt32 uintEnteros de 4 bytes sin signo

Desde 0 hasta 4.294.967.295

System.Int64 longEnteros de 8 bytes con signo

Desde -9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807

System.UInt64 ulongEnteros de 8 bytes sin signo

Desde 0 , hasta 18.446.744.073.709.551.615

System.Char charCaracteres Unicode de 2 bytes

Desde 0 hasta 65.535

System.Single floatValor de coma flotante de 4 bytes

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

System.Double doubleValor de coma flotante de 8 bytes

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

System.Boolean bool Verdadero/falso true ó false

System.Decimal decimalValor de coma flotante de 16 bytes (tiene 28-29 dígitos de precisión)

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

este tipo también se ha predefinido en C# el alias int para el mismo, por lo que la definición de variable anterior queda así de compacta:

int a = 2;

System.Int32 no es el único tipo de dato básico incluido en C#. En el espacio de nombres System se han incluido todos estos:

Page 95: Pit Emys Programacion .Net Profesor

87

.NET

Pese a su sintaxis especial, en C# los tipos básicos son tipos del mismo nivel que cualquier otro tipo del lenguaje. Es decir, heredan de System.Object y pueden ser tratados como objetos de dicha clase por cualquier método que espere un System.Object, lo que es muy útil para el diseño de rutinas genéricas que admitan parámetros de cualquier tipo y es una ventaja importante de C# frente a lenguajes similares como Java donde los tipos básicos no son considerados objetos.

El valor que por defecto se da a los campos de tipos básicos consiste en poner a cero toda el área de memoria que ocupen. Esto se traduce en que los campos de tipos básicos numéricos se inicializan por defecto con el valor 0, los de tipo bool lo hacen con false, los de tipo char con ‘\u0000’, y los de tipo string y object con null.

Ahora que sabemos cuáles son los tipos básicos, es el momento de comentar cuáles son los sufijos que admiten los literales numéricos para indicar al compilador cuál es el tipo que se ha de considerar que tiene. Por ejemplo, si tenemos en una clase los métodos:

public static void F(int x) {...}

public static void F(long x)...}

Ante una llamada como F(100), ¿a cuál de los métodos se llamara? Pues bien, en principio se considera que el tipo de un literal entero es el correspondiente al primero de estos tipos básicos que permitan almacenarlo: int, uint, long, ulong, por lo que en el caso anterior se llamaría al primer F() Para llamar al otro podría añadirse el sufijo L al literal y hacer la llamada con F(100L).

Sufijo Tipo del literal entero

Posibles sufijos válidos:

ninguno Primero de: int, uint, long, ulong

L ó l[9] Primero de: long, ulong

U ó u Primero de: int, uint

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

Sufijos que admiten los literales reales:

F ó f float

ninguno, D ó d double

M ó m decimal

3-03 VIDEO Declaración de variables

Page 96: Pit Emys Programacion .Net Profesor

Programación.NET

88

Operadores

Un operador en C# es un símbolo formado por uno o más caracteres que permite realizar una determinada operación entre uno o más datos y produce un resultado.

tema D Operadores, constantes y enumeraciones

3-04 VIDEO Operadores Unarios

A continuación se describen cuáles son los operadores incluidos en el lenguaje clasificados según el tipo de operaciones que permiten realizar, aunque hay que tener en cuenta que C# permite la redefinición del significado de la mayoría de los operadores según el tipo de dato sobre el que se apliquen, por lo que lo que aquí se cuenta se corresponde con los usos más comunes de los mismos:

¤ Operaciones aritméticas: Los operadores aritméticos incluidos en C# son los típicos de suma (+), resta (-), producto (*), división (/) y módulo (%) También se incluyen operadores de “menos unario” (–) y “más unario” (+).

Relacionados con las operaciones aritméticas 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(<expresiónAritmética>)

unchecked(<expresiónAritmética>)

Ambos operadores calculan el resultado de <expresiónAritmética> y lo devuelven si durante el cálculo no se produce ningún desbordamiento. Sin embargo, en caso de que haya desbordamiento cada uno actúa de una forma distinta: checked provoca un error de compilación si <expresiónAritmética> es una expresión constante y una excepción System.OverflowException si no lo es, mientras que unchecked devuelve el resultado de la expresión aritmética truncado para que quepa en el tamaño esperado.

Por defecto, en ausencia de los operadores checked y unchecked lo que se hace es evaluar las operaciones aritméticas entre datos constantes como si se les aplicase checked y las operaciones entre datos no constantes como si se les hubiese aplicado unchecked.

¤ Operaciones lógicas: Se incluyen operadores que permiten realizar las operaciones lógicas típicas: “and” (&& y &), “or” (|| y |), “not” (!) y “xor” (̂ ).

Page 97: Pit Emys Programacion .Net Profesor

89

.NET

Los operadores && y || se diferencia de & y | en que los primeros realizan evaluación perezosa y los segundos no. La evaluación perezosa consiste en que si el resultado de evaluar el primer operando permite deducir el resultado de la operación, entonces no se evalúa el segundo y se devuelve dicho resultado directamente, mientras que la evaluación no perezosa consiste en evaluar siempre ambos operandos. Es decir, si el primer operando de una operación && es falso se devuelve false directamente, sin evaluar el segundo; y si el primer operando de una || es cierto se devuelve true directamente, sin evaluar el otro.

¤ 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-05LÁMINA Operadores

Constantes

Una constante es una variable cuyo valor puede determinar el compilador durante la compilación y puede aplicar optimizaciones derivadas de ello. Para que esto sea posible se ha de cumplir que el valor de una constante no pueda cambiar durante la ejecución, por lo que el compilador informará con un error de todo intento de modificar el valor inicial de una constante. Las constantes se definen como variables normales pero precediendo el nombre de su tipo del modificador const y dándoles siempre un valor inicial al declararlas. O sea, con esta sintaxis:

const <tipoConstante> <nombreConstante> = <valor>;

Así, ejemplos de definición 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 código generado todas las referencias a las constantes a y b por los valores 123 y 248 respectivamente,

3-05 VIDEO Operadores Binarios

Page 98: Pit Emys Programacion .Net Profesor

Programación.NET

90

por lo que el código generado será más eficiente ya que no incluirá el acceso y cálculo de los valores de a y b. Nótese que puede hacer esto porque en el código se indica explícitamente cual es el valor que siempre tendrá a y, al ser este un valor fijo, puede deducir cuál será el valor que siempre tendrá b.

Para que el compilador pueda hacer estos cálculos se ha de cumplir que el valor que se asigne a las constantes en su declaración sea una expresión constante. Por ejemplo, el siguiente código no es válido en tanto que el valor de x no es constante:

// 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 básicos, pues a no ser que valgan null sus valores no se pueden determinar durante la compilación sino únicamente tras la ejecución de su constructor. La única excepción a esta regla son los tipos enumerados, cuyos valores se pueden determinar al compilar.

Todas las constantes son implícitamente estáticas, por lo se considera erróneo incluir el modificador static en su definición al no tener sentido hacerlo. De hecho, para leer su valor desde códigos externos a la definición de la clase donde esté definida la constante, habrá que usar la sintaxis <nombreClase>.<nombreConstante> típica de los campos static.

Por último, hay que tener en cuenta que una variable sólo puede ser definida como constante si es una variable local o un campo, pero no si es un parámetro.

3-06LÁMINA Variales de sólo lectura

Enumeración

Una enumeración o tipo enumerado es un tipo especial de estructura en la que los literales de los valores que pueden tomar sus objetos se indican explícitamente al definirla. Por ejemplo, una enumeración de nombre Tamaño cuyos objetos pudiesen tomar los valores literales Pequeño, Mediano o Grande se definiría así:

enum Tamaño { Pequeño, Mediano, Grande }

Page 99: Pit Emys Programacion .Net Profesor

91

.NET

Para entender bien la principal utilidad de las enumeraciones vamos a ver antes un problema muy típico en programación: si queremos definir un método que pueda imprimir por pantalla un cierto texto con diferentes tamaños, una primera posibilidad sería dotarlo de un parámetro de algún tipo entero que indique el tamaño con el que se desea mostrar el texto.

A estos números que los métodos interpretan con significados específicos se les suele denominar números mágicos, y su utilización tiene los inconvenientes de que dificulta la legibilidad del código (hay que recordar qué significa para el método cada valor del número) y su escritura (hay que recordar qué número ha de pasársele al método para que funcione de una cierta forma). Una alternativa mejor para el método anterior consiste en definirlo de modo que tome un parámetro de tipo Tamaño para que así el programador usuario no tenga que recordar la correspondencia entre tamaños y números. Véase así como la llamada (2) del ejemplo que sigue es mucho más legible que la (1):

obj.MuestraTexto(2); // (1) obj.MuestraTexto(Tamaño.Mediano); // (2)

Además, estos literales no sólo facilitan la escritura y lectura del código sino que también pueden ser usados por herramientas de documentación, depuradores u otras aplicaciones para sustituir números mágicos y mostrar textos muchos más legibles.

Por otro lado, usar enumeraciones también facilita el mantenimiento del código. Por ejemplo, si el método (1) anterior se hubiese definido de forma que 1 significase tamaño pequeño, 2 mediano y 3 grande, cuando se quisiese incluir un nuevo tamaño intermedio entre pequeño y mediano habría que darle un valor superior a 3 o inferior a 1 ya que los demás estarían cogidos, lo que rompería el orden de menor a mayor entre números y tamaños asociados. Sin embargo, usando una enumeración no importaría mantener el orden relativo y bastaría añadirle un nuevo literal.

Otra ventaja de usar enumeraciones frente a números mágicos es que éstas participan en el mecanismo de comprobación de tipos de C# y el CLR. Así, si un método espera un objeto Tamaño y se le pasa uno de otro tipo enumerado, se producirá, según cuando se detecte la incoherencia, un error en compilación o una excepción en ejecución. Sin embargo, si se hubiesen usado números mágicos del mismo tipo en vez de enumeraciones no se habría detectado nada, pues en ambos casos para el compilador y el CLR serían simples números sin ningún significado especial asociado.

3-07LÁMINA Enumeraciones

Page 100: Pit Emys Programacion .Net Profesor

Programación.NET

92

Definición de enumeración: Ya hemos visto un ejemplo de cómo definir una enumeración. Sin embargo, la sintaxis completa que se puede usar para definirlas es:

enum <nombreEnumeración> : <tipoBase> { <literales> }

En realidad una enumeración es un tipo especial de estructura (luego System.ValueType será tipo padre de ella) que sólo puede tener como miembros campos públicos constantes y estáticos. Esos campos se indican en , y como sus modificadores son siempre los mismos no hay que especificarlos (de hecho, es erróneo hacerlo).

El tipo por defecto de las constantes que forman una enumeración es int, aunque puede dárseles cualquier otro tipo básico entero (byte, sbyte, short, ushort, uint, int, long o ulong) indicándolo en <tipoBase>. Cuando se haga esto hay que tener muy presente que el compilador de C# sólo admite que se indiquen así los alias de estos tipos básicos, pero no sus nombres reales (System.Byte, System.SByte, etc.)

Si no se especifica valor inicial para cada constante, el compilador les dará por defecto valores que empiecen desde 0 y se incrementen en una unidad para cada constante según su orden de aparición en la definición de la enumeración. Así, el ejemplo del principio del tema es equivalente a:

enum Tamaño:int { Pequeño = 0, Mediano = 1, Grande = 2 }

Es posible alterar los valores iniciales de cada constante indicándolos explícitamente como en el código recién mostrado. Otra posibilidad es alterar el valor base a partir del cual se va calculando el valor de las siguientes constantes como en este otro ejemplo:

enum Tamaño { Pequeño, Mediano = 5, Grande }

En este último ejemplo el valor asociado a Pequeño será 0, el asociado a Mediano será 5, y el asociado a Grande será 6 ya que como no se le indica explícitamente ningún otro se considera que este valor es el de la constante anterior más 1.

Obviamente, el nombre que se de a cada constante ha de ser diferente al de las demás de su misma enumeración 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

Page 101: Pit Emys Programacion .Net Profesor

93

.NET

constante tenga que ser diferente al de las demás, y de hecho puede especificarse el valor de una constante en función del valor de otra como muestra este ejemplo:

enum Tamaño { Pequeño, Mediano = Pequeño, Grande = Pequeño + Mediano }

En realidad, lo único que importa es que el valor que se dé a cada literal, si es que se le da alguno explícitamente, sea una expresión constante cuyo resultado se encuentre en el rango admitido por el tipo base de la enumeración y no provoque definiciones circulares. Por ejemplo, la siguiente definición de enumeración es incorrecta ya que en ella los literales Pequeño y Mediano se han definido circularmente:

enum TamañoMal { Pequeño = Mediano, Mediano = Pequeño, Grande }

Nótese que también la siguiente definición de enumeración también sería incorrecta ya que en ella el valor de B depende del de A implícitamente (sería el de A más 1):

enum EnumMal { A = B, B }

Cálculo de sueldo3-02

PROYECTO

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;

Page 102: Pit Emys Programacion .Net Profesor

Programación.NET

94

b. Escribe un mensaje en la pantalla solicitando “Ingrese las horas trabajadas:”c. Almacena en la variable línea lo que se introduzca con el teclado.d. Almacena en horas trabajadas el parseo a entero de la variable línea (int.Parse (linea)).e. Solicita que se ingrese el pago por hora.f. Almacena en línea la cantidad ingresada por el usuario.g. Almacena en costoHora el paseo a flotante de la variable línea(float.Parse (línea)).h. En la variable sueldo haz la multiplicación 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 continuación el código 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(); } }}

Page 103: Pit Emys Programacion .Net Profesor

95

.NET

tema e Sentencias de control

Condicionales

Las instrucciones condicionales son instrucciones que permiten ejecutar bloques de instrucciones sólo si se da una determinada condición. En los siguientes apartados de esta unidad se describen cuáles son las instrucciones condicionales disponibles en C#.

¤ Instrucción IF: Permite ejecutar ciertas instrucciones sólo si de da una determinada condición. Su sintaxis de uso es la sintaxis:

if (<condición>){ <instruccionesIf>}else{ <instruccionesElse>}

El significado de esta instrucción es el siguiente: se evalúa la expresión <condición>, que ha de devolver un valor lógico. 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 condición es falsa se seguiría ejecutando a partir de la instrucción siguiente al if. En realidad, tanto <instruccionesIf> como <instruccionesElse> pueden ser una única instrucción 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

¤ Instrucción Switch: Permite ejecutar unos u otros bloques de instrucciones según el valor de una cierta expresión. Su estructura es:

switch (<expresión>) { case <valor1>: <bloque1> <siguienteAcción> case <valor2>: <bloque2> <siguienteAcción> ... default: <bloqueDefault> <siguienteAcción> }

Page 104: Pit Emys Programacion .Net Profesor

Programación.NET

96

El significado de esta instrucción es el siguiente: se evalúa. 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 instrucción siguiente al switch.Los valores indicados en cada rama del switch han de ser expresiones constantes que produzcan valores de algún tipo básico entero, de una enumeración, de tipo char o de tipo string. Además, no puede haber más 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. Además, la rama default no tiene porqué aparecer la última si se usa, aunque es recomendable que lo haga para facilitar la legibilidad del código.Ejemplo:

comprobemos (opcion){ en caso de 1: te descuento un 10%; Nada más; en caso de 2: te descuento un 5%; Nada más; en caso de 3: te descuento un 2%; Nada más; en otro caso: no te descuento nada; Nada más;}

3-07 VIDEO Instrucción Switch

Ciclos

Son instrucciones que permiten ejecutar repetidas veces una instrucción o un bloque de instrucciones mientras se cumpla una condición. Es decir, permiten definir bucles donde ciertas instrucciones se ejecuten varias veces. A continuación se describen cuáles son las instrucciones de este tipo incluidas en C#.

¤ Ciclo While: Permite ejecutar un bloque de instrucciones mientras se de una cierta instrucción. Su sintaxis de uso es:

while (<condición>){ <instrucciones> }

Page 105: Pit Emys Programacion .Net Profesor

97

.NET

Su significado es el siguiente: Se evalúa la <condición> indicada, que ha de producir un valor lógico. Si es cierta (valor lógico true) se ejecutan las <instrucciones> y se repite el proceso de evaluación de <condición> y ejecución de <instrucciones> hasta que deje de serlo. Cuando sea falsa (false) se pasará a ejecutar la instrucción siguiente al while. En realidad <instrucciones> puede ser una única instrucción o un bloque de instrucciones.

3-08 VIDEO Ciclo While

¤ Ciclo For: Es una variante de while que permite reducir el código necesario para escribir los tipos de bucles más comúnmente usados en programación. Su sintaxis es:

for (<inicialización>; <condición>; <modificación>){ <instrucciones> }

El significado de esta instrucción es el siguiente: se ejecutan las instrucciones de <inicialización>, que suelen usarse para definir e inicializar variables que luego se usarán en <instrucciones>. Luego se evalúa <condición>, y si es falsa se continúa ejecutando por la instrucción siguiente al for; mientras que si es cierta se ejecutan las <instrucciones> indicadas, luego se ejecutan las instrucciones de <modificación> -que como su nombre indica suelen usarse para modificar los valores de variables que se usen en <instrucciones>- y luego se reevalúa <condición> repitiéndose el proceso hasta que ésta última deje de ser cierta.

En <inicialización> puede en realidad incluirse cualquier número de instrucciones que no tienen porqué ser relativas a inicializar variables o modificarlas, aunque lo anterior sea su uso más habitual. En caso de ser varias se han de separar mediante comas (,), ya que el carácter de punto y coma (;) habitualmente usado para estos menesteres se usa en el for para separar los bloques de <inicialización>, <condición> y <modificación> Además, la instrucción nula no se puede usar en este caso y tampoco pueden combinarse definiciones de variables con instrucciones de otros tipos.

Con <modificación> pasa algo similar, ya que puede incluirse código que nada tenga que ver con modificaciones pero en este caso no se pueden incluir definiciones de variables.Como en el resto de instrucciones hasta ahora vistas, en <instrucciones> puede ser tanto una única instrucción como un bloque de instrucciones. Además, las variables que se definan en <inicialización> serán visibles sólo dentro de esas <instrucciones>.

3-09 VIDEO Ciclo For

Page 106: Pit Emys Programacion .Net Profesor

Programación.NET

98

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 terminación 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 números del 0 al 10, cuando alcanza el valor 10 se cumple la condición de la sentencia if, se ejecuta la sentencia break y sale del ciclo.La sentencia continue funciona de manera similar a la sentencia break. Sin embargo, en vez de forzar la salida, continue fuerza la siguiente iteración, por lo que salta el código que falta para llegar a probar la condición. Por ejemplo, el siguiente programa visualizará sólo los números pares:

main(){ int x; for( x=0; x<100; x++) { if (x%2) continue; printf(“%d “,x); }}

3-08LÁMINA Sentencias de control

Page 107: Pit Emys Programacion .Net Profesor

99

.NET

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

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>, notarás que aparece una ventana de Consola que se abre y cierra.

3. En la Ventana resultados aparecerá la ruta dónde se ejecuta la aplicación 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 botón derecho del ratón, selecciona pegar del menú contextual y presiona <Enter>. ¿Qué función realliza este programa?

5. Escribe el nombre del programa, en este caso ConsoleAplication1.exe, seguido de tu nombre “Tu nombre”. ¿Qué función realliza ahora este programa?

6. Guarda el programa en la ubicación que indique tu profesor.

NOTAS:

Sentencias de control3-03

PROYECTO

Page 108: Pit Emys Programacion .Net Profesor

Programación.NET

100

7. Crea otro proyecto de consola nuevo y escribe el siguiente código:

using System;class HolaMundoSwitch{ public static void Main(String[] args) { if (args.Length > 0) switch(args[0]) { case “José”: Console.WriteLine(“Hola José. Buenos días”); break; case “Paco”: Console.WriteLine(“Hola Paco. Me alegro de verte”); break; default: Console.WriteLine(“Hola {0}”, args[0]); break; } else Console.WriteLine(“Hola Mundo”); }}

8. De manera similar a la anterior busca la ruta del programa y ejecútalo desde la Consola de Windows®. ¿Qué función realliza este programa?

9. Ejecuta el programa, pero ahora escribe Paco, ¿Qué función realliza?

10. Ejecuta el programa agregando el texto José. ¿Qué función realliza?

11. Ejecuta el programa agregando cualquier texto. ¿Qué función realliza?

12. Guarda el programa en la ubicación que indique tu profesor.

Page 109: Pit Emys Programacion .Net Profesor

101

.NET

tema F Métodos, Arreglos y Colecciones

Métodos

Un método 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 sólo su nombre. A estas instrucciones se les denomina cuerpo del método, y a su ejecución a través de su nombre se le denomina llamada al método.

La ejecución de las instrucciones de un método puede producir como resultado un objeto de cualquier tipo. A este objeto se le llama valor de retorno del método y es completamente opcional, pudiéndose escribir métodos que no devuelvan ninguno.

La ejecución de las instrucciones de un método puede depender del valor de unas variables especiales denominadas parámetros del método, de manera que en función del valor que se dé a estas variables en cada llamada la ejecución del método se pueda realizar de una u otra forma y podrá producir uno u otro valor de retorno.

Al conjunto formado por el nombre de un método y el número y tipo de sus parámetros se le conoce como signatura del método. La signatura de un método es lo que verdaderamente lo identifica, de modo que es posible definir en un mismo tipo varios métodos con idéntico nombre siempre y cuando tengan distintos parámetros. Cuando esto ocurre se dice que el método que tiene ese nombre está sobrecargado.

¤ Definición De Método: Para definir un método hay que indicar tanto cuáles son las instrucciones que forman su cuerpo como cuál es el nombre que se le dará, cuál es el tipo de objeto que puede devolver y cuáles son los parámetros que puede tomar. Esto se indica definiéndolo así:

<tipoRetorno> <nombreMétodo>(<parámetros>){ <cuerpo>}

En <tipoRetorno> se indica cuál es el tipo de dato del objeto que el método devuelve, y si no devuelve ninguno se ha de escribir void en su lugar.

Como nombre del método se puede poner en <nombreMétodo> cualquier identificador válido. Como se verá más adelante en Interfaces, también es posible incluir en <nombreMétodo> información de explicitación de implementación de interfaz, pero por ahora podemos considerar que siempre será un identificador.Aunque es posible escribir métodos que no tomen parámetros, si un método los toma se ha de indicar en <parámetros> cuál es el nombre y tipo de cada uno, separándolos con comas si son más de uno y siguiendo la sintaxis que más adelante se explica.

El <cuerpo> del método también es opcional, pero si el método retorna algún tipo de objeto entonces ha de incluir al menos una instrucción return que indique cuál objeto.

Page 110: Pit Emys Programacion .Net Profesor

Programación.NET

102

La sintaxis anteriormente vista no es la que se usa para definir métodos abstractos. Como ya se vio en el Tema Clases, en esos casos lo que se hace es sustituir el cuerpo del método y las llaves que lo encierran por un simple punto y coma (;) Más adelante en este tema veremos que eso es también lo que se hace para definir métodos externos.

A continuación se muestra un ejemplo de cómo definir un método 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-09LÁMINA Métodos externos

¤ Llamada A Métodos: La forma en que se puede llamar a un método depende del tipo de método del que se trate. Si es un método de objeto (método no estático) se ha de usar la notación:

<objeto>.<nombreMétodo>(<valoresParámetros>)

El <objeto> indicado puede ser directamente una variable del tipo de datos al que pertenezca el método o puede ser una expresión que produzca como resultado una variable de ese tipo (recordemos que, debido a la herencia, el tipo del <objeto> puede ser un subtipo del tipo donde realmente se haya definido el método); pero si desde código de algún método de un objeto se desea llamar a otro método de ese mismo objeto, entonces se ha de dar el valor this a <objeto>.

En caso de que sea un método de tipo (método estático), entones se ha de usar:

<tipo>.<nombreMétodo>(<valoresParámetros>)

Ahora en <tipo> ha de indicarse el tipo donde se haya definido el método o algún subtipo suyo. Sin embargo, si el método pertenece al mismo tipo que el código que lo llama entonces se puede usar la notación abreviada: <nombreMétodo>(<valoresParámetros>)

El formato en que se pasen los valores a cada parámetro en <valoresParámetros> a aquellos métodos que tomen parámetros depende del tipo de parámetro que sea.

Page 111: Pit Emys Programacion .Net Profesor

103

.NET

Parámetros

La forma en que se define cada parámetro de un método depende del tipo de parámetro del que se trate. En C# se admiten cuatro tipos de parámetros: parámetros de entrada, parámetros de salida, parámetros por referencia y parámetros de número indefinido.

¤ Parámetros De Entrada: Un parámetro de entrada recibe una copia del valor que almacenaría una variable del tipo del objeto que se le pase. Por tanto, si el objeto es de un tipo valor se le pasará una copia del objeto y cualquier modificación que se haga al parámetro dentro del cuerpo del método no afectará al objeto original sino a su copia; mientras que si el objeto es de un tipo referencia entonces se le pasará una copia de la referencia al mismo y cualquier modificación que se haga al parámetro dentro del método también afectará al objeto original ya que en realidad el parámetro referencia a ese mismo objeto original.

Para definir un parámetro de entrada basta indicar cuál el nombre que se le desea dar y el cuál es tipo de dato que podrá almacenar. Para ello se sigue la siguiente sintaxis:

<tipoParámetro> <nombreParámetro>

Por ejemplo, el siguiente código define un método llamado Suma que toma dos parámetros de entrada de tipo int llamados par1 y par2 y devuelve un int con su suma:

int Suma(int par1, int par2){ return par1+par2;}

Como se ve, se usa la instrucción return para indicar cuál es el valor que ha de devolver el método. Este valor es el resultado de ejecutar la expresión par1+par2; es decir, es la suma de los valores pasados a sus parámetros par1 y par2 al llamarlo.

En las llamadas a métodos se expresan los valores que se deseen dar a este tipo de parámetros indicando simplemente el valor deseado. Por ejemplo, para llamar al método anterior con los valores 2 y 5 se haría <objeto>.Suma(2,5), lo que devolvería el valor 7.

¤ Parámetros De Salida: Un parámetro de salida se diferencia de uno de entrada en que todo cambio que se le realice en el código del método al que pertenece afectará al objeto que se le pase al llamar dicho método 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 parámetros se les pasa es siempre una referencia al valor que almacenaría una variable del tipo del objeto que se les pase.

Cualquier parámetro de salida de un método siempre ha de modificarse dentro del cuerpo del método y además dicha modificación ha de hacerse antes que cualquier lectura de su valor. Si esto no se hiciese así el compilador lo detectaría e informaría de ello con un error. Por esta razón es posible pasar parámetros de salida que sean variables no inicializadas, pues se garantiza que en el método se inicializarán antes de leerlas. Además, tras la llamada

Page 112: Pit Emys Programacion .Net Profesor

Programación.NET

104

a un método se considera que las variables que se le pasaron como parámetros de salida ya estarán inicializadas, pues dentro del método seguro que se las inicializa.

Nótese que este tipo de parámetros permiten diseñar métodos que devuelvan múltiples objetos: un objeto se devolvería como valor de retorno y los demás se devolverían escribiéndolos en los parámetros de salida.

Los parámetros de salida se definen de forma parecida a los parámetros de entrada pero se les ha de añadir la palabra reservada out. O sea, se definen así:

out <tipoParámetro> <nombreParámetro>

Al llamar a un método que tome parámetros de este tipo también se ha preceder el valor especificado para estos parámetros del modificador out. Una utilidad de esto es facilitar la legibilidad de las llamadas a métodos. Por ejemplo, dada una llamada de la forma:

a.f(x, out z)

Es fácil determinar que lo que se hace es llamar al método f() del objeto a pasándole x como parámetro de entrada y z como parámetro de salida. Además, también se puede deducir que el valor de z cambiará tras la llamada.

Sin embargo, la verdadera utilidad de forzar a explicitar en las llamadas el tipo de paso de cada parámetro es que permite evitar errores derivados de que un programador pase una variable a un método y no sepa que el método la puede modificar.

3-10LÁMINA Otros parámetros

Namespace

Del mismo modo que los ficheros se organizan en directorios, los tipos de datos se organizan en namespace, por un lado, esto permite tenerlos más organizados facilitando su localización. De hecho, así es como se halla organizada la BCL, de modo que todas las clases más comúnmente usadas en cualquier aplicación se hallan en el namespace llamado System, las de acceso a bases de datos en System.Data, las de realización de operaciones de entrada/salida en System.IO, etc.

Por otro lado, los namespace también permiten poder usar en un mismo programa varias clases con igual nombre si pertenecen a espacios diferentes. La idea es que cada fabricante defina sus tipos dentro de un namespace propio para que así no haya conflictos si varios fabricantes definen clases con el mismo nombre y se quieren usar a la vez en un mismo programa.

Page 113: Pit Emys Programacion .Net Profesor

105

.NET

Obviamente para que esto funcione no han de coincidir los namespace de cada fabricante, y una forma de conseguirlo es dándoles el nombre de la empresa fabricante, o su nombre de dominio en Internet, etc.

3-11LÁMINA Importación de Namespace

¤ Definicion de namespace: Para definir un namespace se utiliza la siguiente sintaxis:namespace <nombreEspacio>{ <tipos>}

Los así definidos pasarán a considerase miembros del namespace llamado. Aparte de clases, estos tipos pueden ser también interfaces, estructuras, tipos enumerados y delegados. A continuación se muestra un ejemplo en el que definimos una clase de nombre ClaseEjemplo perteneciente a un namespace llamado EspacioEjemplo:

namespace EspacioEjemplo{ class ClaseEjemplo {}}

El verdadero nombre de una clase, al que se denomina nombre completamente calificado, es el nombre que le demos al declararla prefijado por la concatenación de todos los namespace a los que pertenece ordenados del más externo al más interno y seguido cada uno de ellos por un punto (carácter). Por ejemplo, el verdadero nombre de la clase ClaseEjemplo antes definida es EspacioEjemplo.ClaseEjemplo.

Si no definimos una clase dentro de una definición de namespace -como se ha hecho en los ejemplos de temas previos- se considera que ésta pertenece al llamado namespace global y su nombre completamente calificado coincidirá con el identificador que tras la palabra reservada class le demos en su definición (nombre simple).Aparte de definiciones de tipo, también es posible incluir como miembros de un namespace a otros namespace. Es decir, como se muestra el siguiente ejemplo es posible anidar namespace:

namespace EspacioEjemplo{ namespace EspacioEjemplo2 { class ClaseEjemplo {} }}

Page 114: Pit Emys Programacion .Net Profesor

Programación.NET

106

Ahora ClaseEjemplo tendrá EspacioEjemplo.EspacioEjemplo2.ClaseEjemplo como nombre completamente calificado. En realidad es posible compactar las definiciones de namespace anidados usando esta sintaxis de calificación 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.

Errores3-04

PROYECTO

1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente código:using System;class ParámetrosEntrada{ public int a = 1; public static void F(ParametrosEntrada p) { p.a++; } public static void G(int p) { p++; } public static void Main() { int obj1 = 0; ParámetrosEntrada obj2 = new ParámetrosEntrada(); G(obj1); F(obj2); Console.WriteLine(“{0}, {1}”, obj1, obj2.a);; }}

2. ¿Qué tarea realliza este programa?

Page 115: Pit Emys Programacion .Net Profesor

107

.NET

3. ¿Cuál fue el error que marcó?

Arreglos

Los arreglos son estructuras de datos complejos (en el sentido de que no son atómicas) que agrupan datos de un mismo tipo en particular, llamado el tipo base del arreglo. El tipo base de un arreglo puede ser cualquiera de los tipos básicos de C#, o incluso algunos tipos complejos como las clases.

Un arreglo es también ejemplo de un modelo. Un arreglo puede considerarse como ejemplo de una variable compuesta capaz de almacenar uno o más datos al mismo tiempo.

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 están numerados en forma jerárquica y consecutiva, empezando en 0 en cada dimensión.

La siguiente imagen muestra un ejemplo de un arreglo llamado numeros, cuya posición 0 almacena el valor 10, la posición 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.

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

Datos y Variables SignificadoInformación

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

Variable 30Constante_numéricaFactor_de_crecimientoResultado_nota

Arreglo:

ImparesNumeros_serieInfracciones

3 5 7 9 11 13

30 agtosto 3.1416

3 5 7 9 11 13

Archivo:

CaretaTransparenciadocumento

Registro:

Datos_alumnoDatos_lluviaDatos_tiempo

Este es un ejemplo de un archivo de texto.Un archivo de texto se caracteriza por estarcompuesto de caracteres ASCII solamente.En un archivo de texto se puede editarprogramas en C. Generalmente tienen laextensión: txt. Bat. .C

Estructuras, Modelos de datos

Page 116: Pit Emys Programacion .Net Profesor

Programación.NET

108

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 difíciles de detectar en este sentido. Más adelante se presenta un ejemplo en este sentido.

Declaración de arreglos

Los arreglos, al igual que las demás variables deben declararse antes de poder utilizarlas, y cumplen con las mismas reglas de alcance y vida. Los arreglos de una sola dimensión reciben también el nombre de vectores. La sintaxis de la declaración de un arreglo unidimensional es la siguiente:

<tipo-base>[] <identificador>;

Observaciones:

¤ El <tipo-base> puede ser cualquiera de los tipos básicos del lenguaje, o incluso algunos complejos como estructuras.

¤ El <identificador> es el nombre que distinguirá el arreglo. ¤ Los corchetes [] son obligatorios y denotan que el identificador descrito, del tipo-

base indicado, es un arreglo (lista de elementos del tipo base). ¤ En esta declaración NO se define el tamaño que tendrá el arreglo (aunque se puede

determinar las dimensiones, lo que se verá más adelante).

El tamaño del arreglo se determina en una segunda declaración, que puede ir en la siguiente línea, como se muestra a continuación.

<identificador> = new <tipo-base> [<NumElementos>]

En esta declaración, se dimensiona el arreglo con una cantidad determinada de elementos, todos correspondientes a tipo-base. Es posible hacer la declaración del arreglo y su dimensionamiento en una misma sentencia:

<tipo-base>[] <identificador> = new <tipo-base>[<NumElementos>]

Adicionalmente es factible declarar, dimensionar, e inicializar un arreglo con todos sus elementos, en una sola declaración:

<tipo-base>[] <identificador> = {valor1, valor2, ..., valorN};

Esta última declaración implícitamente dimensiona el arreglo para almacenar los N elementos descritos, por lo que no se requiere dimensionarlo aparte. Es decir:

¤ Con los valores indicados entre llaves {} se inicializarán los elementos del arreglo. ¤ Los valores deben ser del <tipo-base> del arreglo.

También es factible declarar, dimensionar, e inicializar un arreglo con todos sus elementos, en una sola declaración, pero sólo indicando un subconjunto de los valores que el arreglo puede guardar:

Page 117: Pit Emys Programacion .Net Profesor

109

.NET

3-12LÁMINA Arreglos Multidimensionales

Funciones mas comunes con arreglos

En C#, los arreglos se representan con un tipo específico, y por ello cuentan con sus propios atributos y métodos específicos. Por ejemplo, para obtener el largo (la cantidad de elementos dimensionados) de un arreglo, o para ordenarlo.

¤ Largo de un arreglo: En el caso de los arreglos unidimensionales, el tamaño 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 método básico Sort() de la clase Array:

int [] numeros = { 4,5,2,3,1,6 }Array.Sort(numeros); // 1,2,3,4,5,6

En el mismo caso en que se pueda ordenar un arreglo, se puede reordenar exactamente al revés de como está, aprovechando el método básico Reverse() de la clase Array:

int [] numeros = { 1,2,3,4,5,6 }Array.Reverse(numeros); // 6,5,4,3,2,1

Búsqueda en arreglos

Para realizar las búsquedas en arreglos se usa la instrucción Foreach. Esta sentencia de control de flujo, especialmente diseñada para este tipo de estructuras, donde se manejan listas de elementos, todos del mismo tipo. Foreach depende de la definición previa de un arreglo de elementos del mismo tipo, los cuales puede recorrer individualmente sin conocer el tamaño explícitamente (como se requiere en otras instrucciones, por ejemplo en el for). La sintaxis de uso es:

foreach ( <tipo> <variable> in <arreglo> ) {<instrucciones>}

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

Donde M<N, y N debe ser una expresión constante, como por ejemplo 10. Es factible hacer una declaración donde M>N, en cuyo caso, el real dimensionamiento del arreglo se regirá por M.

Page 118: Pit Emys Programacion .Net Profesor

Programación.NET

110

1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente código:using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace UsoArreglo{ class Program { int[] numeros; public Program(int[] arreglo) { numeros = new int[arreglo.Length]; for (int i = 0; i < numeros.Length; i++) numeros[i] = arreglo[i]; } public void Ordenar() { Array.Sort(numeros); } public void Reordenar() { Array.Reverse(numeros); } public void Imprimir() { foreach (int i in numeros) Console.Write(“{0} “, i); Console.WriteLine(); } } class MainApp { static void Main() { int[] numeros = { 2, 5, 6, 1, 3, 4 }; Program a = new Program(numeros); Console.WriteLine(“Arreglo original”); a.Imprimir(); Console.WriteLine(“Arreglo ordenado”); a.Ordenar(); a.Imprimir(); Console.WriteLine(“Arreglo invertido”);

Arreglos3-05

PROYECTO

Donde: ¤ <tipo> es el tipo básico de los elementos contenidos en el arreglo. ¤ <arreglo> es el arreglo de elementos a revisar. ¤ <variable> es un identificador de una variable local del foreach() que se usará

para ver un elemento del arreglo en cada iteración.

Page 119: Pit Emys Programacion .Net Profesor

111

.NET

a.Reordenar(); a.Imprimir(); Console.ReadLine(); } }}

2. ¿Qué función realliza este programa?

3. Guarda el programa en la ubicación que indique tu profesor.

Listas

Una lista es un conjunto de nodos, cada uno de los cuales tiene dos campos: uno de información y un apuntador al siguiente nodo de la lista. Además un apuntador externo señala el primer nodo de la lista. Representación gráfica de un nodo:

La información puede ser cualquier tipo de dato simple, estructura de datos o inclusive uno o

más objetos. La dirección al siguiente nodo es un puntero. Representación gráfica de una lista:Como decíamos, una lista es una secuencia de nodos (en este caso cuatro nodos). La información de los nodos en este caso es un entero y siempre contiene un puntero que guarda la dirección del siguiente nodo.raiz es otro puntero externo a la lista que contiene la dirección del primer nodo.

El estado de una lista varía durante la ejecución del programa: De esta forma representamos gráficamente una lista vacía. Si insertamos un nodo en la lista quedaría 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. Podríamos utilizar una lista que inicialmente estuviera vacía e introdujéramos un nuevo nodo con cada línea que escribe el operador. Con esta estructura haremos un uso muy eficiente de la memoria.

Page 120: Pit Emys Programacion .Net Profesor

Programación.NET

112

Tipos de listas

Según el mecanismo de inserción y extracción de nodos en la lista tenemos los siguientes tipos:

¤ Listas tipo pila. ¤ Listas tipo cola. ¤ Listas genéricas.

Una lista se comporta como una pila si las inserciones y extracciones las hacemos por un mismo lado de la lista. También se las llama listas LIFO (Last In First Out - último en entrar primero en salir)

Una lista se comporta como una cola si las inserciones las hacemos al final y las extracciones las hacemos por el frente de la lista. También se las llama listas FIFO (First In First Out - primero en entrar primero en salir). Una lista se comporta como genérica cuando las inserciones y extracciones se realizan en cualquier parte de la lista. Podemos en algún momento insertar un nodo en medio de la lista, en otro momento al final, borrar uno del frente, borrar uno del fondo o uno interior, etc.

Pilas

Una lista se comporta como una pila si las inserciones y extracciones las hacemos por un mismo lado de la lista. También se las llama listas LIFO (Last In First Out - último en entrar primero en salir).

Una pila al ser una lista puede almacenar en el campo de información cualquier tipo de valor (int, char, float, vector de caracteres, un objeto, etc).

Para estudiar el mecanismo de utilización de una pila supondremos que en el campo de información almacena un entero (para una fácil interpretación y codificación). Inicialmente la PILA está vacía y decimos que el puntero raíz apunta a null (Si apunta a null decimos que no tiene una dirección de memoria): Insertamos un valor entero en la pila: insertar(10). Luego de realizar la inserción la lista tipo pila queda de esta manera: un nodo con el valor 10 y raiz apunta a dicho nodo. El puntero del nodo apunta a null ya que no hay otro nodo después de este.

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 dirección del primer nodo. El nodo que acabamos de insertar en el campo puntero guarda la dirección del nodo que almacena el valor 10. Ahora qué sucede si extraemos un nodo de la pila. ¿Cuál se extrae?

Page 121: Pit Emys Programacion .Net Profesor

113

.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á vacía y no se podrá extraer otros valores (avisar que la pila está vacía).

3-13LÁMINA Pilas y Colas

Pilas3-06

PROYECTO

1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente código:using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace PilasArray{

3-11 VIDEO Pilas

Colas

Una lista se comporta como una cola si las inserciones las hacemos al final y las extracciones las hacemos por el frente de la lista. También se las llama listas FIFO (First In First Out - primero en entrar primero en salir).

3-12 VIDEO Colas

Page 122: Pit Emys Programacion .Net Profesor

Programación.NET

114

class Program { static void Main(string[] args) { //Tamaño de pila int Max = 5; //Creando arreglo de pila string[] pilaArreglo = new string[Max]; string Elemento = string.Empty; string x = string.Empty; //Menú de inicio usando un switch case do { Console.Write(“\n\nMenú \n 1)Meter elemento a la pila \n 2)Muestra pila \n 3)Obtiene elemento de la cima \n 4)Suprime elemento de la cima \n 0)Salir \n\n”); x = Console.ReadLine(); switch (x) { case “1”: Console.Write(“INGRESAR VALORES A LA PILA \n”); Console.Write(“Escriba el dato a ingresar a la pila:”); Elemento = Console.ReadLine(); // Espera entrada de teclado while (string.IsNullOrEmpty(Elemento)) { Console.Write(“Ingrese un valor válido a la pila:”); Elemento = Console.ReadLine(); } if (estaLlena(pilaArreglo)) { Console.Write(“La pila está llena, imposible agregar nuevo valor \n”); } else { Meter(pilaArreglo, Elemento);//Usar método de agregar elemento } break; case “2”: Console.Write(“MOSTRAR PILA \n”); if (esVacia(pilaArreglo)) { Console.Write(“La pila está vacia \n”); } else { Mostrar(pilaArreglo);//Usa método para imprimir el contenido de la pila } break; case “3”:

Page 123: Pit Emys Programacion .Net Profesor

115

.NET

Console.Write(“OBTIENE ELEMENTO DE LA CIMA \n”); if (esVacia(pilaArreglo)) { Console.Write(“La pila está vacia \n”); } else { Elemento = Cima(pilaArreglo);//Usa método para obtener el ultimo valor que se agrego Console.Write(“El elemento de la cima es: {0} \n”, Elemento); } break; case “4”: Console.Write(“SUPRIME ELEMENTO DE LA PILA \n”); if (esVacia(pilaArreglo)) { Console.Write(“La pila está vacia \n”); } else { Suprime(pilaArreglo);//Usa método para eliminar el ultimo valor que se agrego Console.Write(“El elemento de la cima suprimido”); } break; default: Console.Write(“Opción no válida”); break; } } while (!x.Equals(“0”)); } //Método que valida si la pila esta vacia static public bool esVacia(string[] _ pilaArreglo) { bool fl = true;

for (int i = _ pilaArreglo.Length - 1; i >= 0; i--) { if ( _ pilaArreglo[i] != null) { fl = false; break; } } return fl; } //Método 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--)

Page 124: Pit Emys Programacion .Net Profesor

Programación.NET

116

{ if ( _ pilaArreglo[i] != null) { count += 1; ; } } if (count == _ pilaArreglo.Length) { fl = true; } return fl; } //Método que verifica cual es el elemento que esta arriba de la pila static public string Cima(string[] _ pilaArreglo) { string elemento = string.Empty; for (int i = _ pilaArreglo.Length - 1; i >= 0; i--) { if ( _ pilaArreglo[i] != null) { elemento = _ pilaArreglo[i]; break; } } return elemento; } //Método que elimina un elemento de la pila static public bool Suprime(string[] _ pilaArreglo) { bool fl = false; for (int i = _ pilaArreglo.Length - 1; i >= 0; i--) { if ( _ pilaArreglo[i] != null) { _ pilaArreglo[i] = null; fl = true; break; } } return fl; } //Método que agrega un elemento a la pila static public bool Meter(string[] _ pilaArreglo, string _ elemento) { bool fl = false; for (int i = _ pilaArreglo.Length - 1; i >= 0; i--) { if ( _ pilaArreglo[i] != null) { _ pilaArreglo[i + 1] = _ elemento; fl = true; break; } else if ( _ pilaArreglo[i] == null && i == 0) { _ pilaArreglo[i] = _ elemento; fl = true;

Page 125: Pit Emys Programacion .Net Profesor

117

.NET

break; } } return fl; } //Método que muestra el contenido de la pila static public void Mostrar(string[] _ pilaArreglo) { for (int i = _ pilaArreglo.Length - 1; i >= 0; i--) { if ( _ pilaArreglo[i] != null) { Console.Write( _ pilaArreglo[i] + “\n”); } } } }}

2. ¿Qué función realliza este programa?

3. Guarda el programa en la ubicación que indique tu profesor.

4. Responde correctamente:

a. ¿Qué es una lista?

b. ¿Qué es una lista LIFO?

c. ¿Qué es una lista FIFO?

Una lista es un conjunto de nodos, cada uno de los cuales tiene dos campos: uno de información y un apuntador al siguiente nodo de la lista.

Es una lista que se comporta como una pila. Si las inserciones y extraccio-nes las hacemos por un mismo lado de la lista recibe el nombre delistas LIFO (Last In First Out - último en entrar primero en salir).

Cuando una lista se comporta como una cola, las inserciones las hace-mos al final y las extracciones las hacemos por el frente de la lista, las denominamos listas FIFO (First In First Out - primero en entrar primero en salir).

Page 126: Pit Emys Programacion .Net Profesor

Programación.NET

118

¿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 operación algebráica, 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 aplicación de las matrices, arreglos y colecciones de objetos.

1. Define enumeración.

2. ¿Para qué sirven las instrucciones condicionantes?

3. ¿Para qué sirven los ciclos?

4. ¿Qué es un método?

03

EVALUACIÓN

Una enumeración o tipo enumerado es un tipo especial de estructura en la que los literales de los valores que pueden tomar sus objetos se indican explícitamente al definirla.

Las instrucciones condicionales son instrucciones que permiten ejecutar bloques de instrucciones sólo si se da una determinada condición.

Son instrucciones que permiten ejecutar repetidas veces una instrucción o un bloque de instrucciones mientras se cumpla una condición.

Un método 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 sólo su nombre.

Page 127: Pit Emys Programacion .Net Profesor

Programación .NETAutor:Carlos Zepeda Chehaibar

A Reconocer el concepto de clase y el modo de acceso a estas en la programación 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#.

Los objetos son entidades con valores bien diferenciados en sus atributos, que son: estado, comportamiento e identidad.

Durante el desarrollo de esta unidad aprenderás a:

NIVEL: Intermedio DURACIÓN SUGERIDA: 4 SESIONES / 45-50 MINUTOS

Programación orientada a objetosUnidad 04

Page 128: Pit Emys Programacion .Net Profesor

Programación.NET

120

tema a Clases y Objetos

Definición de clases

La sintaxis básica para definir una clase es la que a continuación se muestra:class <nombreClase>{ <miembros>}

De este modo se definiría una clase de nombre <nombreClase> cuyos miembros son los definidos en <miembros> Los miembros de una clase son los datos y métodos de los que van a disponer todos los objetos de la misma. Un ejemplo de cómo declarar una clase de nombre A que no tenga ningún miembro es la siguiente: class A {}

Una clase así declarada no dispondrá de ningún miembro a excepción de los implícitamente definidos de manera común para todos los objetos que creemos en C#. Aunque en C# hay muchos tipos de miembros distintos, por ahora vamos a considerar que estos únicamente pueden ser campos o métodos y vamos a hablar un poco acerca de ellos y de cómo se definen:

¤ Campos: Un campo es un dato común a todos los objetos de una determinada clase. Para definir cuáles son los campos de los que una clase dispone se usa la siguiente sintaxis dentro de la zona señalada como <miembros> en la definición de la misma:

<tipoCampo> <nombreCampo>;

El nombre que demos al campo puede ser cualquier identificador que queramos siempre y cuando siga las reglas descritas en Aspectos Léxicos para la escritura de identificadores y no coincida con el nombre de ningún otro miembro previamente definido en la definición de clase.

4-01 VIDEO Clases

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 métodos que permiten manipular dichos datos, y un programa en C# no es más que un conjunto de objetos que interaccionan unos con otros a través de sus métodos.

Una clase es la definición de las características concretas de un determinado tipo de objetos. Es decir, de cuáles son los datos y los métodos de los que van a disponer todos los objetos de ese tipo. Por esta razón, se suele decir que el tipo de dato de un objeto es la clase que define las características del mismo.

Page 129: Pit Emys Programacion .Net Profesor

121

Programación orientada a objetos

Los campos de un objeto son a su vez objetos, y en <tipoCampo> hemos de indicar cuál 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 continuación se muestra un ejemplo de definición 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 }

Según esta definición, todos los objetos de clase Persona incorporarán campos que almacenarán cuál es el nombre de la persona que cada objeto representa, cuál es su edad y cuál es su NIF. El tipo int incluido en la definición del campo Edad es un tipo predefinido en la BCL cuyos objetos son capaces de almacenar números enteros con signo comprendidos entre -2.147.483.648 y 2.147.483.647 (32 bits), mientras que string es un tipo predefinido que permite almacenar cadenas de texto que sigan el formato de los literales de cadena.

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 haría:

p.Edad = 20;

En realidad lo marcado como <objeto> no tiene porqué ser necesariamente el nombre de algún objeto, sino que puede ser cualquier expresión que produzca como resultado una referencia no nula a un objeto (si produjese null se lanzaría una excepción del tipo predefinido System.NullPointerException).

¤ Métodos: Un método es un conjunto de instrucciones a las que se les asocia un nombre de modo que si se desea ejecutarlas basta referenciarlas a través de dicho nombre en vez de tener que escribirlas. Dentro de estas instrucciones es posible acceder con total libertad a la información almacenada en los campos pertenecientes a la clase dentro de la que el método se ha definido, por lo que como al principio del tema se indicó, los métodos permiten manipular los datos almacenados en los objetos. La sintaxis que se usa en C# para definir los métodos es la siguiente:

<tipoDevuelto> <nombreMétodo> (<parametros>) { <instrucciones> }

Todo método puede devolver un objeto como resultado de la ejecución de las instrucciones que lo forman, y el tipo de dato al que pertenece este objeto es lo que se indica en

Page 130: Pit Emys Programacion .Net Profesor

Programación.NET

122

Accesibilidad

La accesibilidad es la característica que podemos aplicar a cualquiera de los elementos que definamos en nuestro código. Dependiendo de la accesibilidad declarada tendremos distintos tipos de accesos a esos elementos.

Los modificadores de accesibilidad que podemos aplicar a los tipos y elementos definidos en nuestro código pueden ser cualquiera de los mostrados en la siguiente lista:

¤ public: Acceso no restringido. Este es modificador de accesibilidad con mayor “cobertura”, podemos acceder a cualquier miembro público desde cualquier parte de nuestro código. Aunque, como veremos, este acceso no restringido puede verse reducido dependiendo de dónde 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 más restrictivos de todos los

modificadores de accesibilidad.

Estos modificadores de accesibilidad los podemos usar tanto en clases, estructuras, interfaces, enumeraciones, delegados, eventos, métodos, propiedades y campos. Aunque no serán aplicables en espacios de nombres (Namespace) ni en los miembros de las interfaces y enumeraciones.

4-01LÁMINA Operador New

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

4-02LÁMINA Anidación de tipos

<tipoDevuelto>. Si no devuelve nada se indica void, y si devuelve algo es obligatorio finalizar la ejecución de sus instrucciones con alguna instrucción return <objeto>; que indique qué objeto ha de devolverse.

Page 131: Pit Emys Programacion .Net Profesor

123

Programación orientada a objetos

la instrucción 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 serán internal, es decir serán visibles en todo el proyecto actual. Por otro lado, las interfaces y enumeraciones por defecto serán públicas.Cuando la clase, estructura, interfaz o enumeración está definida dentro de otro tipo, la accesibilidad predeterminada será private, pero admitirán cualquiera de los modificadores, salvo las interfaces y enumeraciones que no pueden ser protected.

Por otro lado, los miembros de esos tipos también permiten diferentes niveles de accesibilidad, en el caso de las interfaces y enumeraciones, siempre serán públicos, aunque no se permite el uso de esa instrucción. Los miembros de las clases y estructuras serán privados de forma predeterminada, en el caso de las clases, en esos miembros podemos indicar cualquiera de los cinco niveles de accesibilidad, mientras que en las estructuras no podremos declarar ningún miembro como protected o protected internal, ya que una estructura no puede usarse como base de otro tipo de datos.

Colas4-01

PROYECTO

1. En Visual C# 2010 Express, crea un nuevo proyecto de consola y escribe el siguiente código:using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ColasCirculares{ class Program { static void Main(string[] args) { int T = 5; //Tamaño del arreglo string[] ColaArreglo = new string[T]; //cola string Elemento = string.Empty; //Dato int Frente = -1; //Frente int NE = 0;//Número de elementos en la cola string x = string.Empty; //Menú do { Console.Write(“\n\nMenú \n 1)Meter elemento a la cola \n 2)Sacar elemento de la cola \n 3)Muestra cola \n 0)Salir \n\n”);

Page 132: Pit Emys Programacion .Net Profesor

Programación.NET

124

x = Console.ReadLine(); //Switch que espera la opción switch (x) { case “1”: Console.Write(“INGRESAR VALORES A LA COLA \n”); Console.Write(“Escriba el dato a ingresar a la cola:”); Elemento = Console.ReadLine(); while (string.IsNullOrEmpty(Elemento)) { Console.Write(“Ingrese un valor válido a la cola:”); Elemento = Console.ReadLine(); } if (!estaLlena(NE, T)) { Meter(ref Frente, ref NE, T, ColaArreglo, Elemento);//Llama al método de agregar elemento a la cola } else { Console.Write(“La cola está llena”); } break; case “2”: Console.Write(“SACAR ELEMENTO DE LA COLA \n”); if (!estaVacia(NE)) { Elemento = Sacar(ref Frente, ref NE, T, ColaArreglo);//Llama al método que elimina un elmento de la cola Console.Write(“El elemento que se saco de la cola es {0}”, Elemento); } else { Console.Write(“La cola está vacia \n”); } break; case “3”: Console.Write(“MOSTRAR COLA \n”); if (!estaVacia(NE)) { MuestraCola(Frente, ColaArreglo);//Llama al método para mostrar el contenido de la cola } else { Console.Write(“La cola está vacia \n”); } break; default: Console.Write(“Opción no válida”); break; } } while (!x.Equals(“0”)); } //Método que agrega elementos a la cola public static void Meter(ref int _ frente, ref int _ numeroElementosCola, int _ tamañoCola, string[] _ arregloCola, string _ elemento)

Page 133: Pit Emys Programacion .Net Profesor

125

Programación orientada a objetos

{ int i; if ( _ frente != -1) { i = ( _ frente + _ numeroElementosCola); } else { i = 0; _ frente = i; } _ arregloCola[i] = _ elemento; _ numeroElementosCola += 1; } //Método que elimina un elemento de la cola public static string Sacar(ref int _ frente, ref int _ numeroElementosCola, int _ tamañoCola, string[] _ arregloCola) { string _ elemento; _ elemento = _ arregloCola[ _ frente]; _ arregloCola[ _ frente] = null; //Mueve los índices para evitar desperdiciar un registro for (int i = 0; i < _ arregloCola.Length; i++) { if (i < _ arregloCola.Length - 1) { _ arregloCola[i] = _ arregloCola[i + 1]; _ arregloCola[i + 1] = null; } } _ frente = 0; _ numeroElementosCola -= 1; return _ elemento; } //Método que verifica que la cola no este llena public static bool estaLlena(int _ numeroElementosCola, int _ tamañoCola) { bool fl = false; //Si ambos son iguales la cola está llena if ( _ numeroElementosCola == _ tamañoCola) { fl = true; } return fl; } //Método que verifica que la cola no este vacia public static bool estaVacia(int _ numeroElementosCola) { bool fl = false; //Si es igual a cero la cola está vacia if ( _ numeroElementosCola == 0) { fl = true; } return fl; } //Método que muestra el contenido de la cola private static void MuestraCola(int _ frente, string[] _ arregloCola)

Page 134: Pit Emys Programacion .Net Profesor

Programación.NET

126

{ 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 método MuestraCola?

3. Guarda el programa en la ubicación que indique tu profesor.

4. ¿Qué es una clase?

5. ¿Qué es accesibilidad?

6. ¿Que es un objeto en C#?

Una clase es la definición de las características concretas de un determinado tipo de objetos.

La accesibilidad es la característica que podemos aplicar a cualquiera de los elementos que definamos en nuestro código.

Un objeto es un agregado de datos y de métodos que permiten manipular dichos datos, y un programa en C# no es más que un conjunto de objetos que interaccionan unos con otros a través de sus métodos.

Page 135: Pit Emys Programacion .Net Profesor

127

Programación orientada a objetos

tema B Interfaz

Hasta ahora hemos resuelto todos los algoritmos haciendo las salidas a través de una consola en modo texto. La realidad es que es muy común la necesidad de hacer la entrada y salida de datos mediante una interfaz más amigable con el usuario.

En C# existen varias librerías de clase para implementar interfaces visuales. Utilizaremos las Windows Forms. Para crear una aplicación que utilice esta librería debemos crear un proyecto. Los pasos son los siguientes:

a. Desde el menú de opciones del Visual Studio .Net seleccionamos la opción: Archivo/Nuevo proyecto...

b. Seleccionamos la plantilla “Aplicación de Windows Forms”.

Imagen 4-1: Cuadro de diálogo: Nuevo proyecto

c. Ahora ya tenemos un esqueleto para desarrollar nuestra aplicación. Si vemos la ventana Explorador de soluciones tenemos tres archivos generados en forma automática: 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 botón izquierdo del mouse dentro del formulario que se encuentra en la parte central del Visual Studio .net:

Imagen 4-3: Control “Button”

Page 136: Pit Emys Programacion .Net Profesor

Programación.NET

128

e. Ahora podemos analizar la ventana Propiedades que nos muestra las propiedades del objeto seleccionado del formulario. Podemos por ejemplo, si tenemos seleccionado el botón cambiar la propiedad text (la misma cambia la etiqueta que muestra el botón):

f. Cuando ejecutamos la aplicación 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 automáticamente por el programa

Imagen 4-4: Ventana Propiedades

Imagen 4-5: Programa en ejecución

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 “Diseño” podemos ver como se actualiza la ventana Propiedades. Por ejemplo, la propiedad Text de la clase Button permite fijar la etiqueta que muestra el botón.

Ventana Eventos

La ventana de eventos coincide con la ventana de propiedades. Para activar la lista de eventos disponibles para un objeto debemos presionar el botón . Podemos observar la lista de eventos que puede reaccionar el objeto seleccionado en ese momento. Por ejemplo, si tenemos seleccionado un objeto de la clase Button el evento más

4-02 VIDEO Interfaz gráfica

Page 137: Pit Emys Programacion .Net Profesor

129

Programación orientada a objetos

común que deberemos implementar es el Click (este evento se dispara cuando en tiempo de ejecución del programa se presiona el botón).

Para disponer el código para dicho evento debemos hacer doble clic sobre dicho evento (esto hace que se active la ventana del editor y genere automáticamente el método asociado a dicho evento): private void button1 _ Click(object sender, EventArgs e) {

}

Botones4-02

PROYECTO

1. Abre Visual C# 2010 Express. En un proyecto nuevo con la plantilla Aplicación de Windows Forms, elabora un formulario debe contener:

¤ Siete botones. ¤ Un control Label ¤ A cada botón asignale un día de la semana. ¤ Cada botón debe responder al evento Click. ¤ Utiliza la instrucción label1.Text = “”; para que al presionar un boton el control label

muestre el día seleccionado.

2. Cuida el aspecto de tu formulario, conservando el orden de los días y utiliza las opciones del la ventana propiedades para que el texto del control Label, sea atractivo visualemente.

3. Escribe el código fuente de tu programa:

4-03LÁMINA Controles comunes

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;

Page 138: Pit Emys Programacion .Net Profesor

Programación.NET

130

4. Guarda el programa en la ubicación que indique tu profesor.

using System.Windows.Forms;

namespace WindowsFormsApplication6{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { label1.Text = “Lunes”; } private void button2_Click(object sender, EventArgs e) { label1.Text = “Martes”; } private void button3_Click(object sender, EventArgs e) { label1.Text = “Miercoles”; } private void button4_Click(object sender, EventArgs e) { label1.Text = “Jueves”; } private void button5_Click(object sender, EventArgs e) { label1.Text = “Viernes”; } private void button6_Click(object sender, EventArgs e) { label1.Text = “Sábado”; } private void button7_Click(object sender, EventArgs e) { label1.Text = “Domingo”; } }}

Page 139: Pit Emys Programacion .Net Profesor

131

Programación orientada a objetos

tema C Excepciones (Instrucción Try)

Una vez lanzada una excepción es posible escribir código que es encargue de tratarla. Por defecto, si este código no se escribe la excepción provoca que la aplicación aborte mostrando un mensaje de error en el que se describe la excepción producida (información de su propiedad Message) y dónde se ha producido (información de su propiedad StackTrace) Así, dado el siguiente código 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á ningún 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 válido. Sin embargo, al ejecutarlo se intentará dividir por cero en esa instrucción y ello provocará que aborte la aplicación 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 excepción de división por cero (tipo DivideByZeroException) dentro del código del método Main() del tipo PruebaExcepciones. Si al compilar el fuente hubiésemos utilizado la opción /debug, el compilador habría creado un fichero .pdb con información extra sobre las instrucciones del ejecutable generado que permitiría que al ejecutarlo se mostrase un mensaje mucho más detallado con información sobre la instrucción exacta que provocó la excepción, la cadena de llamadas a métodos que llevaron a su ejecución y el número de línea que cada una ocupa en el fuente:

Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero.at A.G() in E:\c#\Ej\ej.cs:line 22at A.F() in E:\c#\Ej\ej.cs:line 16

at PruebaExcepciones.Main() in E:\c#\Ej\ej.cs:line 8

Page 140: Pit Emys Programacion .Net Profesor

Programación.NET

132

Si se desea tratar la excepción hay que encerrar la división dentro de una instrucción try con la siguiente sintaxis:

try <instrucciones> catch (<excepción1>) <tratamiento1> catch (<excepción2>) <tratamiento2> ... finally <instruccionesFinally>

El significado de try es el siguiente: si durante la ejecución de las <instrucciones> se lanza una excepción de tipo <excepción1> (o alguna subclase suya) se ejecutan las instrucciones <tratamiento1>, si fuese de tipo <excepción2> se ejecutaría <tratamiento2>, y así hasta que se encuentre una cláusula catch que pueda tratar la excepción producida. Si no se encontrase ninguna y la instrucción try estuviese anidada dentro de otra, se miraría en los catch de su try padre y se repetiría el proceso. Si al final se recorren todos los trys padres y no se encuentra ningún catch compatible, entonces se buscaría en el código desde el que se llamó al método que produjo la excepción.

4-04LÁMINA Uso de Catch

Si así se termina llegando al método que inició el hilo donde se produjo la excepción y tampoco allí se encuentra un tratamiento apropiado se aborta dicho hilo; y si ese hilo es el principal (el que contiene el punto de entrada) se aborta el programa y se muestra el mensaje de error con información sobre la excepción lanzada ya visto.Así, para tratar la excepción del ejemplo anterior de modo que una división por cero provoque que a d se le asigne el valor 0, se podría reescribir G() de esta otra forma:

static public void G(){ try{int c = 0; int d = 2/c; } catch (DivideByZeroException) { d=0; } }

Para simplificar tanto el compilador como el código generado y favorecer la legibilidad del fuente, en los catchs se busca siempre orden de aparación textual, por lo que para evitar catchs absurdos no se permite definir catchs que puedan capturar e xcepciones capturables por catchs posteriores a ellos en su misma instrucción try.

Page 141: Pit Emys Programacion .Net Profesor

133

Programación orientada a objetos

También hay que señalar que cuando en <instrucciones> se lance una excepción que sea tratada por un catch de algún try -ya sea de la que contiene las <instrucciones>, de algún try padre suyo o de alguno de los métodos que provocaron la llamada al que produjo la excepción- se seguirá ejecutando a partir de las instrucciones siguientes a ese try.

El bloque finally es opcional, y si se incluye ha de hacerlo tras todas los bloques catch. Las <instruccionesFinally> de este bloque se ejecutarán tanto si se producen excepciones en <instrucciones> como si no. En el segundo caso sus instrucciones se ejecutarán tras las <instrucciones>, mientras que en el primero lo harán después de tratar la excepción pero antes de seguirse ejecutando por la instrucción siguiente al try que la trató. Si en un try no se encuentra un catch compatible, antes de pasar a buscar en su try padre o en su método llamante padre se ejecutarán las <instruccionesFinally>.

Sólo si dentro de un bloque finally se lanzase una excepción se aborta la ejecución del mismo. Dicha excepción sería propagada al try padre o al método llamante padre del try que contuviese el finally.

Aunque los bloques catch y finally son opcionales, toda instrucción try ha de incluir al menos un bloque catch o un bloque finally.

Excepciones4-03

PROYECTO

1. Abre Visual C# 2010 Express. En un proyecto nuevo de consola escribe el siguiente código:

using System; class MiException:Exception {} class Excepciones { public static void Main() { try { Console.WriteLine(“En el try de Main()”); Método(); Console.WriteLine(“Al final del try de Main()”); } catch (MiException) { Console.WriteLine(“En el catch de Main()”); } finally { Console.WriteLine(“finally de Main()”); }

Page 142: Pit Emys Programacion .Net Profesor

Programación.NET

134

} public static void Método() { try { Console.WriteLine(“En el try de Método()”); Método2(); Console.WriteLine(“Al final del try de Método()”); } catch (OverflowException) { Console.WriteLine(“En el catch de Método()”); } finally { Console.WriteLine(“finally de Método()”); } } public static void Método2() { try { Console.WriteLine(“En el try de Método2()”); throw new MiException(); Console.WriteLine(“Al final del try de Método2()”); } catch (DivideByZeroException) { Console.WriteLine(“En el catch de Método2()”); } finally { Console.WriteLine(“finally de Método2()”); } } }

2. Qué función realliza este programa?

3. Guarda el programa en la ubicación que indique tu profesor.

Recuerda ejecutar la aplicación desde la consola de Windows® para revisar su función.

Page 143: Pit Emys Programacion .Net Profesor

135

Programación orientada a objetos

tema D Archivos

La manera de almacenar y recuperar información que perdure en el tiempo se basa en el uso de “memoria secundaria”, compuesta esencialmente por discos (diskettes, discos duros, CD, DVD, etc.) y ocasionalmente cintas. En cualquiera de estos medios, la unidad de almacenamiento de información se denomina archivo.

4-05LÁMINA Archivos Complemento

Streams

La lectura y escritura a un archivo son hechas usando un concepto genérico llamado stream. La idea detrás del stream existe hace tiempo, cuando los datos son pensados como una transferencia de un punto a otro, es decir, como un flujo de datos. En el ambiente .NET se puede encontrar muchas clases que representan este concepto que trabaja con archivos o con datos de memoria.

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

System. Object

Marshal By Ref Object Binary Reader Binary Writer

Stream

Buffered Stream

Memory Stream

File Stream

Text Reader

String Reader

Stream Reader

Text Writer

String Writer

Stream Writer

Page 144: Pit Emys Programacion .Net Profesor

Programación.NET

136

Frecuentemente, la fuente externa será un archivo, pero eso no necesariamente es el caso, por lo que el concepto es utilizado ampliamente con fuentes de información externas de diversos tipos. Algunas otras posibilidades fuera de los archivos incluyen:

¤ Leer o escribir datos a una red utilizando algún protocolo de red, donde la intención es que estos datos sean recibidos o enviados por otro computador.

¤ Lectura o escritura a un área de memoria. ¤ La Consola ¤ La Impresora ¤ Otros ...

Algunas clases que C# provee para resolver este acceso a fuentes diversas incluyen las clases de tipo: Reader y Writer.

Bufferedstream

Esta clase se utiliza para leer y para escribir a otro stream.El uso de streams para la lectura y escritura de archivo es directa pero lenta. Por esta razón la clase BufferedStream existe y es más eficiente. Puede ser utilizado por cualquier clase de stream. Para operaciones de archivo es posible utilizar FileStream, donde el buffering está ya incluido.

Las clases más relacionadas con la escritura y lectura de archivos (File Input/Output o File I/O) son:

¤ FileStream: Cuyo propósito 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 están diseñadas para lectura y escritura de archivos de texto. Estas clases se asumen como de un nivel más alto que FileStream.

Una observación acerca de la declaración de nombres/rutas de archivos en C#. Usualmente, la ruta de un archivo contiene el carácter ‘\’, que en C# se utiliza como caracter de control para símbolos especiales (como el cambio de línea: ‘\n’).

Sin embargo, entendiendo que no es el mismo sentido el que se le quiere dar en la interpretación de rutas de archivos (por ej: “C:\Mis documentos\Programas\ejemplo.cs”), se utiliza una sintaxis particular, anteponiendo el símbolo ‘@’ antes del string con la ruta del archivo. Es decir:

string rutaarchivo = @”C:\Temp\archivo.txt”;

Esta declaración evita la interpretación de los dos caracteres ‘\’ como símbolos especiales y el string queda correctamente inicializado.

Page 145: Pit Emys Programacion .Net Profesor

137

Programación orientada a objetos

Archivos externos4-04

PROYECTO

1. Abre Visual C# 2010 Express. En un proyecto nuevo de consola escribe el siguiente código: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 archivoif (File.Exists(sFileName)) {FileStream fs = new FileStream(sFileName,FileMode.Open,FileAccess.Read, FileShare.ReadWrite);StreamReader sr = new StreamReader(fs);//Leo toda la información del archivostring sContent = sr.ReadToEnd();//cierro los objetosfs.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é función realliza este programa?

3. Guarda el programa en la ubicación que indique tu profesor.

Page 146: Pit Emys Programacion .Net Profesor

Programación.NET

138

¿Qué aprendiste?

TEMA A: A reconocer que un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos.

TEMA B: A elaborar aplicaciones que se ejecutan desde un entorno gráfico.

TEMA C: A controlar resultados inesperados en sus aplicaciones mediante excepciones.

TEMA D: A utilizar archivos externos en el desarrollo de aplicaciones.

1. 1. ¿Qué es una clase?

2. ¿Para que sirve el cuadro de herramientas de Visual C# 2010 Express?

3. ¿En dónde se coloca el bloque finally?

4. ¿Qué es la memoria secundaria?

5. ¿Qué es un stream?

04

EVALUACIÓN

Una clase es la definición de las características concretas de un determinado tipo de objetos.

El cuadro de herramientas contiene todas las componentes visuales que nos permiten elaborar nuestro formulario.

El bloque finally es opcional, y si se incluye ha de hacerlo tras todas los bloques catch

La manera de almacenar y recuperar información que perdure en el tiem-po se basa en el uso de “memoria secundaria”, compuesta esencialmente por discos (diskettes, discos duros, CD, DVD, etc.) y ocasionalmente cintas

Un stream es como se denomina a un objeto utilizado para transferir datos.