0% encontró este documento útil (0 votos)
13 vistas136 páginas

2020 Guias Programacion Estructurada

El documento detalla la planificación docente para la asignatura de Programación Estructurada, incluyendo objetivos, reglamento de uso de laboratorios y lineamientos para prácticas. Se abordan las guías de contenido que los estudiantes deben seguir y las normas de conducta que deben respetar en el laboratorio. Además, se presenta el uso del programa DFD para crear flujogramas y desarrollar la lógica de programación, incluyendo sus componentes y reglas para la elaboración de diagramas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas136 páginas

2020 Guias Programacion Estructurada

El documento detalla la planificación docente para la asignatura de Programación Estructurada, incluyendo objetivos, reglamento de uso de laboratorios y lineamientos para prácticas. Se abordan las guías de contenido que los estudiantes deben seguir y las normas de conducta que deben respetar en el laboratorio. Además, se presenta el uso del programa DFD para crear flujogramas y desarrollar la lógica de programación, incluyendo sus componentes y reglas para la elaboración de diagramas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Facultad: Ingeniería

Escuela: Ingeniería en Computación


Asignatura: Programación Estructurada

Tema:“Planificación Docente”

Objetivos
 Dar a conocer la forma de trabajo en las prácticas de laboratorio de la asignatura Programación
Estructurada.
 Conocer el reglamento del Centro de Cómputo.

Introducción

Esta asignatura comprende el estudio de las estructuras de programación básicas, independientemente


del lenguaje de programación utilizado. Además, se toman en cuenta los conceptos básicos de
matemática discreta, que son necesarios para desarrollar la lógica para poder desarrollar un programa
eficiente, fundamentado en la programación estructurada.
Los contenidos a desarrollar en las prácticas de esta asignatura son:

Guía 1: Planificación Docente. Guía 8: Funciones y Procedimientos en C#.

Guía 2: Uso del Programa DFD. Guía 9: Vectores en C#.

Guía 3: Entorno a C#, Operadores y Tipos de Datos. Guía 10: Matrices y Cadenas en C#.

Guía 4: Estructuras de selección en C#. Guía 11: Estructuras en C#.

Guía 5: Desarrollo en Entorno Grafico en C# Guía 12: Manejo de Archivos en C#.

Guía 6: Estructuras de repetición en C# [For]. Guía 13: Punteros en C#.

Guía 7: Estructuras de repetición [While y DoWhile].

165
Reglamento: uso de laboratorios
I. REGISTROS ES INSCRIPCIONES.
Los estudiantes deberán:
1. Presentar, al inicio del ciclo, el comprobante de pago de laboratorio y el manual original de prácticas
(aplica para asignaturas en las que exista dicho documento).
2. Asistir a la hora de inicio de laboratorio programada, 15 minutos después no se permitirá ingresar al
laboratorio.
3. Presentarse en el horario definido para el grupo de laboratorio en el que están inscritos.
4. Ingresar a los centros de práctica solamente si el docente de laboratorio se encuentra ahí. El ingreso
es exclusivo para los estudiantes inscritos en el laboratorio o personas autorizadas por el docente.

II. USO DEL EQUIPO E INSTALACIONES.


Los estudiantes deberán:
1. Solicitar en bodega el equipo, herramientas o accesorios que el docente le autorice, presentando su
carné de estudiante, el cual será devuelto al regresar dicho préstamo.
2. Revisar y reportar al docente cualquier daño o mal funcionamiento que se dé en el equipo de
laboratorio antes de utilizarlo.
3. Cuidar el equipo, herramientas y accesorios que se le han entregado para realizar la práctica,
haciendo buen uso de ellos.
4. Responder (económicamente) por cualquier daño o pérdida del equipo, herramientas o accesorios
que se registre durante la práctica de laboratorio, salvo casos de desperfectos técnicos no
provocados por el estudiante.
5. Evitar cualquier tipo de daño al mobiliario o equipo del laboratorio, de hacerlo será responsabilidad
del alumno repararlo.
6. Utilizar los equipos o accesorios únicamente para los fines establecidos en la práctica y garantizar
que la cubierta de seguridad de los equipos no será removida.
7. Evitar cualquier operación no estipulada en la guía de práctica, con los equipos de laboratorio, bajo
ninguna circunstancia.
8. Devolver adecuadamente y según el listado, todos los materiales que se le entregaron para realizar
la práctica.
9. Dejar ordenado y limpio su puesto de trabajo, al finalizar la práctica, el incumplimiento de esta norma
se considera una falta grave.
10. Reponer en un plazo máximo de una semana cualquier equipo o accesorio que por negligencia del
estudiante haya sido dañado. De no hacerlo no podrá continuar sus prácticas mientras no solvente
su situación.

166
11. Portar los accesorios de seguridad o gabachas en los laboratorios que le sean exigidos, de lo
contrario no podrá realizar la actividad académica.
12. Solicitar con anticipación, al docente respectivo, los laboratorios fuera de su horario normal, que
quieran ser utilizados para proyectos o tareas ex aula. Para trabajos de otra índole que no sean parte
de sus actividades académicas deberán cancelar un arancel respectivo.
13. Si un estudiantes substrajese equipo, material u objetos personales de sus compañeros de
laboratorio, quedará automáticamente expulsado de las prácticas, pudiendo hacerse acreedor a
otras sanciones de parte de la Secretaría General si el caso lo amerita.

III. NORMAS DE CONDUCTA (A aplicar a los estudiantes de laboratorio y a las personas que
permanezcan en los alrededores de los laboratorios).
Se considera como falta DENTRO y FUERA del área de laboratorios:
1. Comer o ingerir bebidas durante la práctica.
2. Utilizar lenguaje soez.
3. Fumar en las instalaciones del laboratorio.
4. Irrespetar la autoridad de los docentes de laboratorio y la dignidad de los compañeros de clase y
demás empleados de la institución.
5. Utilizar los centros de práctica como lugar de esparcimiento o juegos.
6. Gritar, correr, cantar, bailar, tocar instrumentos musicales.
7. Realizar actos indecorosos que atenten contra la moral.
8. Permanecer en el laboratorio después de finalizar la práctica, a menos que esté autorizado por el
docente.
9. De los estudiantes de laboratorio, ingresar a bodegas u otra área que no sea el laboratorio
correspondiente, sin la autorización del docente.
10. De los estudiantes de laboratorio, abandonar la práctica mientras dure la actividad programada,
excepto por causas justificadas al docente.
11. De los visitantes, estudiantes en general y otras personas que circulan por los edificios del CITT,
permanecer en las instalaciones realizando actividades ajenas a las que se desarrollan en cada
local.

IV. PRÁCTICAS DIFERIDAS


1. Cuando por razón justificada el estudiante pierda una práctica de laboratorio, deberá solicitar, con el
visto bueno del docente, la solicitud de diferido durante la semana siguiente en administración CITT.
Al ser aprobada su solicitud, deberá cancelar el arancel respectivo y luego presentar el recibo del
pago al docente para establecer fecha y hora en la que se realizará el diferido.

167
2. El estudiante tiene derecho a solicitar dos laboratorios diferidos durante el ciclo, por cada asignatura;
siempre y cuando se presenten las constancias que justifiquen la inasistencia.

V. EVALUACIONES
1. El porcentaje de asistencia mínima para tener derecho a la nota en los laboratorios es el 75%,
basados en el artículo 31 del Reglamento de Evaluación de la UDB, el cual dice: “Los estudiantes
deberán asistir a las clases de cada asignatura un tiempo mínimo del 75% en cada período parcial,
como condición para someterse al examen parcial correspondiente o a la actividad equivalente que
lo sustituye. En caso de incumplimiento de dicha condición la nota correspondiente será de cero
(0.0). En las asignaturas con laboratorios, deberá asistir a un mínimo del 75% del número de
sesiones de laboratorios por ciclo, como condición para tener derecho a la nota de laboratorio. En
caso de incumplimiento de dicha condición la nota correspondiente será cero (0.0)”.

VI. ANTE LA COMISIÓN DE UNA FALTA


1. El docente de laboratorio está autorizado y es su obligación, suspender parcial o definitivamente a
cualquier estudiante que cometa una falta de conducta, durante el desarrollo del laboratorio.
2. Ante actos de irrespeto a este reglamento, dentro y fuera del laboratorio, el docente podrá tomar las
medidas pertinentes para garantizar el desarrollo normal del trabajo en el área.
3. Los casos especiales o problemas suscitados, que el docente de laboratorio no pueda resolver,
deberán ser presentados al Director Académico del Laboratorio para su pronta solución.
4. Cualquier situación no prevista en el presente reglamento será resuelto por el Director Académico
del Laboratorio.

Lineamientos para Prácticas


 Todo estudiante debe asistir a cada una de las prácticas de laboratorio programadas con su propio
manual de laboratorio original (en caso de que la asignatura solicite este documento).
 El estudiante debe leer la guía práctica de cada semana antes de asistir a su respectivo grupo de
laboratorio, con el propósito de tener un conocimiento previo de lo que se hará en cada práctica
semanal.
 En cada sesión de prácticas se realizarán ejemplos y ejercicios acerca del tema estudiado, los cuales
deberán ser entregados al docente encargado, para su respectiva revisión.
 Cada sesión de laboratorio contempla una investigación complementaria que deberá ser entregada
al docente encargado (cada dicente definirá las fechas y formas de entrega de las mismas).

168
Porcentajes de Evaluación

Asignación de evaluaciones
Prueba Practica1 10% Prueba Practica2 15% Prueba Practica3 15%
Fecha: Fecha: Fecha:

Anotaciones

169
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Uso del programa DFD”

Objetivos
 Utilizar el programa DFD para crear y ejecutar flujogramas.
 Desarrollar las bases de la lógica de programación.

Introducción
¿Qué es DFD?
Comencemos puntualizando en la idea de que una de las mejores prácticas para la resolución de
problemas a través de la vía informática es el cumplimiento de tres etapas fundamentales: Análisis,
Diseño y la Implementación.

Dichas fases sirven para determinar exactamente los límites del programa y las necesidades que
realmente se deben resolver, así como también la construcción de un esquema (esqueleto) que sirve
como guía para la codificación.

DFD: es un software diseñado para construir y analizar algoritmos. Puede crear diagramas de flujo de
datos para representación de algoritmos de programación estructurada a partir de herramientas de
edición que suministra el programa.

Después de haber ingresado el algoritmo representado por el diagrama, podrá ejecutarlo, analizando y
depurando en un entorno interactivo diseñado para este fin y determinar si el análisis de resultados es
el adecuado de acuerdo con la entrada de datos.

¿Cómo iniciar la aplicación DFD?


Al cargar la aplicación DFD, ésta aparece inicialmente con un nuevo flujograma llamado
“Sin_nombre.dfd”; el cual se encuentra con un diseño de diagrama de flujo vacío en el centro de la
pantalla. El DFD mostrado consta solamente de dos pasos: Inicio y Fin.

170
1. Componentes de Diagrama:
1.1 Objeto Inicio:
Es el primer objeto a ejecutar en cualquier algoritmo.
Al ser ejecutado transfiere el control al siguiente
objeto. El cuadro de diálogo del objeto inicio contiene
un espacio para la descripción o comentarios acerca
del algoritmo. Para poder acceder al cuadro de diálogo,
hacemos clic en el objeto Inicio.

1.2 Objeto de Asignación


El objeto de asignación permite
asignar valores a campos
variables. Al ser ejecutado, se
puede realizar hasta tres
asignaciones.
El cuadro de diálogo del objeto de asignación contiene
espacio para tres asignaciones. En la parte izquierda se
colocan las variables y en la parte derecha los valores o
expresiones que tendrán dichas variables. Por ejemplo, si se desea la fórmula Y = X+1 la variable V se
coloca en el cuadro de la izquierda y X+1 en el cuadro de la derecha. Para el ejemplo además realizamos
la asignación X=0 y Z=SIN(x). Cabe mencionar, que para realizar asignaciones se utiliza una flecha
apuntando a la izquierda, es decir, apuntando a la variable.

1.3 Objeto Lectura


Permite la entrada de valores constantes
desde el teclado y se los asigna a
campos variables. Podrá ser leída
cualquier cantidad de variables utilizando
un objeto Lectura. Al ejecutarse, el objeto despliega un
cuadro de diálogo por cada variable presente en la lista,
este cuadro de diálogo espera que el usuario introduzca un
valor constante que será asignado al espacio de variable.
El cuadro de diálogo para la edición del objeto contiene un espacio para ingresar una lista de variables
separadas por comas. Debe existir por lo menos una variable.

171
1.4 Objeto Salida
Muestra valores por pantalla. Puede ser
visualizada cualquier cantidad de valores
utilizando un objeto de salida. Al
ejecutarse, evalúa cada una de las
expresiones que contiene y despliega un cuadro de diálogo
que muestra el valor, obtenido en cada una de las
expresiones en su respectivo orden.
TIPS: Si quiere mostrar texto enciérrelo entre comillas simples, por ejemplo: ‘Valores:’, pero si quiere
mostrar los valores de las variables debe escribirlas sin utilizar comillas.
El cuadro de diálogo para la edición del objeto contiene un espacio para ingresar una lista de expresiones
separadas por comas. Debe existir por lo menos una expresión.

1.5 Objeto Fin

Este objeto, junto con el objeto Inicio, delimita el cuerpo del procedimiento principal. Sólo
existe un objeto Fin en el programa.
La ejecución de este objeto finaliza la ejecución del algoritmo.

2. Símbolos utilizados para la creación de un Diagrama de Flujo de Datos.


Los símbolos utilizados para el diseño de diagramas de flujo en DFD se encuentran ubicados en la barra
de herramientas y son los siguientes:

A B C D E F G H

Botón Nombre Descripción


Permite que se seleccione los diferentes símbolos de la barra de
A Cursor
herramientas o mover los símbolos dentro del flujograma.
B Asignación Se define el nombre de variables para asignar / actualizar su valor.
Ciclo Mientras Crea una estructura repetitiva “Mientras” definiendo una condición que
C
(while) debe cumplirse para que se repitan todos los pasos contenidos en el ciclo.
D Ciclo Para (for) Crea una estructura repetitiva “Para” basada en un conteo.

172
Define una estructura para la toma de decisiones al evaluar una
E Decisión
condición.
F Lectura Permite que el usuario introduzca el valor de un conjunto de variables.
Muestra comentarios, valores de variables o mezclas de los mismos al
G Salida
usuario.
H Llamada Permite llamar a otro flujograma para continuar la ejecución principal.

3. Reglas para la elaboración de Diagramas de Flujo con DFD


El software DFD consta de una serie de herramientas necesarias para definir los tipos de pasos a
incluir en nuestros flujogramas. Entre estos elementos, tenemos:
a) Definición de variables.
b) Entrada de datos del usuario hacia el flujograma.
3.1 Definición de las variables.
DFD permite definir variables y utilizarlas en el diagrama de flujo para almacenar los datos
proporcionados por el usuario o para guardar resultados de cálculos.
Reglas:
 El nombre de una variable debe comenzar con una letra y luego pueden seguir letras o dígitos.
 Las variables pueden ser de tipo numérico y de tipo cadena de caracteres. Al asignarle valores
o resultados de cálculos, tenga en cuenta que:
a) Variables numéricas: sólo se necesita escribir el dato o fórmula para guardarla en la
variable, por ejemplo:
Num 24
Descuento 0.1 * Sueldo
Prom 0.5 * Nota1 + 0.5 * Nota2
b) Variables de caracteres: Debe escribir la cadena entre un par de comillas simples (‘ ’), por
ejemplo:
Nombre ‘Juan Pérez’
3.2 Entradas de datos del usuario hacia el programa
Cuando se utiliza el control de lectura en un flujograma y se ejecuta, éste permite al usuario que ingrese
un valor para una variable. Si quiere leer dos o más variables en la misma lectura, debe separarlas por
comas (,). Por ejemplo, si se necesita leer tres variables llamadas, (A), (Sueldo) y (Nota) en un mismo
paso, se escribe: A, Sueldo, Nota.
El usuario debe escribir valores numéricos sin problema; pero al ingresar valores de cadenas de
caracteres, como por ejemplo: respuestas a una pregunta “Si” o “No”, escribir su nombre, etc. Estas
cadenas se deben escribir entre un par de comillas simples, así por ejemplo:
‘Si’, ‘No’, ‘Don Bosco’
173
3.3 Salidas de datos hacia el usuario
DFD permite agregar comentarios y mensajes entre una pareja de comillas simples (‘mensaje’), también
puede mezclar comentarios y variables, separándolos por comas.
Ejemplo: se quiere mostrar los valores de las variables X1 = 4 y X2 = 6 de una forma clara para el
usuario, en un control de salida de datos se hace de la siguiente manera:
‘Las soluciones son: A = ’, X1, ‘y el de B = ’, X2
En pantalla saldría el mensaje: Las soluciones son A = 4 y el de B = 6.

Material y Equipo
 Guía de laboratorio #2.
 Computadora con programa DFD.
 Dispositivo de almacenamiento (USB).

Procedimiento

Ejemplo 1:
¿Cómo crear un diagrama de flujo en DFD?
Para comenzar a diseñar un diagrama de flujo, debe colocar cada una de las figuras de los pasos a
realizar entre la flecha que une a los pasos iniciales Inicio – Fin.
Por cada nuevo símbolo seleccionado se comienzan a expandir los símbolos / pasos ubicados entre los
pasos básicos (Inicio - Fin) del flujograma.
Los símbolos que DFD permite utilizar en los diagramas de flujo se explican a continuación:
1. Iniciar el programa DFD.
Necesitamos el símbolo para leer un dato, entonces damos clic al símbolo de lectura, vemos que el
cursor cambia a la forma de dicho símbolo, llevamos el cursor en medio de los símbolos Inicio y Fin
y hacemos clic.

174
2. Ahora hacemos doble clic sobre el símbolo de lectura 3. Hacemos clic en Aceptar, el
y digitamos la variable que deseamos que lea, para flujograma queda de la
este ejemplo digitamos la letra A. siguiente forma:

4. Ahora necesitamos el proceso de 5. Para configurar el símbolo damos doble clic sobre
C = A + 2, para lo que él para que aparezca el cuadro de diálogo de
seleccionamos el símbolo de asignación, la operación que necesitamos es C =
asignación y lo posicionamos A + 2, por lo que la asignación queda así:
abajo del símbolo de lectura:

6. Damos clic en Aceptar y el flujograma queda de la siguiente manera:

175
7. Para imprimir el resultado de la operación, necesitamos el símbolo de salida, hacemos clic sobre él
y lo colocamos debajo de la asignación, luego damos doble clic sobre la salida y digitamos las
variables que deseamos que se impriman.

Nota: Si queremos que aparezca un mensaje con una variable, digitamos el mensaje entre comillas
simples y luego digitamos la variable separada por comas: ‘La respuesta es: ’, C.
Ya finalizado el flujograma falta ponerlo a prueba, para verificar que no tenga ningún error.
8. Pruebas y depuración del diagrama de flujo.
Una vez que el algoritmo se ha traducido en un flujograma, con el apoyo del software DFD se ejecuta
para probar su efectividad en la solución del problema para el que se ha diseñado el diagrama; además
al ejecutarlo se conoce si hay o no hay errores.
Para ejecutar el diagrama, se puede hacer de dos maneras:
 De la barra de menú seleccione Ejecución y clic en Ejecutar.
 Clic al botón Ejecutar ubicado en la barra estándar.
Cuando DFD ejecuta el flujograma, éste comienza a evaluar secuencialmente cada paso, comenzando
por Inicio.
La ejecución mostrará cuadros extra solo para los pasos
de lectura o de salida de datos, en los cuales se
solicitará el ingreso del valor para las variables o
mostrará los resultados calculados en las mismas, hasta
llegar al paso Fin, mostrando un cuadro final con el
mensaje:

176
9. Ejecución paso a paso.
Puede ejecutar a su flujograma paso a paso, para verificar cada paso de la secuencia del flujo de la
secuencia de datos. Este proceso se puede hacer de dos formas:
 Presionando la tecla F7.
 Buscando en la barra estándar el botón Paso Simple (figura como de huellas de zapatos). En
ambos casos repita la presión de la tecla o del botón para ver cómo se ejecuta uno por uno los
pasos de su flujograma y en caso de errores o cálculos incorrectos podrá identificar fácilmente
en qué paso está el error.

Modificaciones o correcciones de errores en un paso:


Para hacer ajustes en los cálculos de un paso o también reparar errores, haga doble clic en el paso a
modificar y se mostrará la ventana de edición con las características actuales de ese paso, para que así
se puedan modificar si es necesario.

¿Cómo guardar y abrir sus programas DFD?


Una vez terminado su flujograma en el DFD y necesite guardarlo en su máquina o dispositivo de
almacenamiento siga las siguientes instrucciones:
 Los flujogramas creados con el software DFD se guardan con la extensión (.dfd).
 Haga clic en el botón Guardar de la barra de herramientas estándar, o si lo prefiere haga clic en el
menú Archivo  Guardar.
 Si es un nuevo flujograma, DFD le solicitará el nombre y la carpeta de ubicación de su archivo .dfd;
sino solo se actualizará el archivo .dfd que se está mostrando.

Para ver y modificar algún [Link], seleccione la opción Abrir dentro de la barra de herramientas
estándar o también dentro del menú Archivo  Abrir. Luego, DFD le solicitará que abra la carpeta
donde se encuentra el diagrama para que localice el archivo con el flujograma que abrirá.
Para comenzar un nuevo flujograma, puede seleccionar la opción Nuevo en la barra de herramientas
estándar o dentro del menú Archivo.

Aquí digitamos la ruta de acceso para guardar el archivo en el escritorio de la computadora:

C:\

177
Análisis de Resultados
En el análisis de resultados, se le pide desarrollar los siguientes ejercicios y mostrar su resultado de la
manera más creativa posible.
1. Crear un flujograma que pida dos números al usuario y los multiplique, posteriormente debe mostrar
el resultado de dicho producto.
No. Corrida Datos entradas Resultado
1 n1=4 n2=5
2 n1=7.5 n2=3.5
3 n1=15 n2=4.5

2. En una empresa de calzado se aplican los siguientes descuentos al sueldo base de cada uno de sus
empleados:
 Renta 10%.
 AFP 7%.
 Seguro Social 5%.
Desarrollar el diagrama de flujo que pida el sueldo base de un empleado y que determine los
descuentos y el sueldo neto a pagar.
No. Corrida Datos entradas Resultado
1 sueldo=550

2 sueldo=1250

3 sueldo=600.50

3. Realizar un diagrama de flujo para obtener el salario neto de un empleado a partir del número de
horas trabajadas en el mes.
Al salario nominal, se le aplica un descuento del 15%. Debe mostrar como resultado un mensaje en
el cual aparecerá el nombre del empleado, el número de horas trabajadas, el salario nominal, el
descuento aplicado y el salario neto devengado.
No. Corrida Datos entradas Resultado
1 nombre=Messi
h=50
pg=5

178
2 nombre=Luisito
h=44
pg=4.25
3 nombre=Shakira
h=35
pg=7.5

Investigación Complementaria
Desarrollar los siguientes problemas en DFD.
1. Construya un diagrama de flujo que calcule e imprima el número de segundos que hay en un
determinado número de días. El número de días será introducido desde teclado.
No. Corrida Datos entradas Resultado
1 d=3
2 d=5
3 d=7

2. Construya un diagrama de flujo tal que dado el valor del lado de


un triángulo equilátero, calcule e imprima su Área.

No. Corrida Datos entradas Resultado


1 a=3
2 a=4
3 a=7

3. Construya un diagrama de flujo que al digitar 3 numeros enteros distintos, realice lo siguiente:
a. Que calcule e imprima los 2 números siguientes al segundo número
b. Que calcule e imprima la potencia a la cuarta del tercer número
c. Que calcule e imprima la multiplicación del primer número por el tercero por el valor de Pi
(3.1415)

179
No. Corrida Datos entradas Resultado
1 n1=3, n2=8, n=4

2 n1=9, n2=3, n=2

3 n1=7, n2=10, n=5

4. Construya un diagrama de flujo tal que dados los tres lados de un triángulo pueda determinar su
área.

No. Corrida Datos entradas Resultado


1 a=4
b=3.5
c=4
2 a=2.5
b=2.5
c=4
3 a=4
b=4
c=3

Bibliografía

Metodología de la Programación (Algoritmos, Diagramas de Flujo y Programas), 3ª Edición, Oswaldo


Cairó, Editorial Alfaomega, México, 2008.

180
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Entorno a C#”


Objetivos
 Utilizar el entorno de programación Visual Studio 2013 o superior.
 Aprender la estructura de un programa, los operadores y los tipos de datos en C#.
 Crear una aplicación de consola en C#.

Introducción

Visual C#
Visual Studio .NET es un entorno de programación repleto de herramientas que contiene toda la
funcionalidad necesaria para la creación de proyectos de C# grandes o pequeños. Es posible crear,
incluso proyectos que combinan de forma homogénea módulos de lenguajes diferentes.
C# es un lenguaje de programación que se ha diseñado para compilar diversas aplicaciones que se
ejecutan en .NET Framework. C# es simple, eficaz, con seguridad de tipos y orientado a objetos; no
obstante, perfectamente pueden crearse aplicaciones utilizando el paradigma de la programación
estructurada. Las numerosas innovaciones de C# permiten desarrollar aplicaciones rápidamente y
mantener la expresividad y elegancia de los lenguajes de estilo de C.

En el primer ejercicio se inicia el entorno de programación de Visual Studio .NET y se enseña a crear
una aplicación en consola.

Para este curso utilizaremos la versión de Visual Studio 2013. C#, permite trabajar en modo consola y
modo gráfico, en esta asignatura trabajaremos en modo consola.
A continuación se presenta la pantalla de inicio, en la cual vamos a aprender cómo crear un nuevo
proyecto.

¿Cómo iniciar Visual Studio 2013?


Inicio  Todos los Programas  Visual Studio 2013

181
Entorno de Visual Studio 2013 (Pantalla de Inicio).

Opciones de proyecto Barra de herramientas estándar Barra de menú

Explorador de soluciones
¿Cómo crear un nuevo proyecto en Visual Studio 2013?
Ahora, elegimos el tipo de aplicación que vamos a trabajar. Para este caso elegimos Aplicación de
Consola. Por defecto, el nuevo proyecto asigna un nombre “ConsoleApplication1”. En ese lugar
escribimos el nombre de nuestro proyecto.

182
 Con respecto a la ubicación, por defecto crea una carpeta de proyectos en la dirección que aparece
ahí, pero perfectamente se puede elegir una ubicación diferente dando clic en el botón examinar.
 El nombre de la solución debe ser editado igual que el nombre del proyecto.

Bibliotecas (librerías) indispensables para la ejecución


correcta del programa. Una librería es un espacio que
contiene una cantidad de funciones a utilizar, entonces
lógicamente para poder utilizar las funciones
predefinidas hay que incluir la respectiva librería.

En el cuerpo del programa se incluyen las variables a utilizar, asignaciones, procesos, cálculo de
resultados, etc.
 Variables: Es el lugar (espacio de memoria) donde se almacenan los datos a utilizar y éstas pueden
ser de un tipo de datos particular.
 Constantes: Son los datos o valores que no cambian durante la ejecución de un programa.

TIPOS DE DATOS
Los diferentes objetos de información con los que un programa trabaja se denominan datos. Todos los
datos tienen un tipo asociados con ellos que nos servirá para poder conocer con que información
trabajaremos. Es decir, cuando ingresemos el sueldo de un trabajador necesitamos que este contenga
decimales, o al solicitar la edad de una persona está tiene que estar con números enteros, etc. Además
la suma entre caracteres no tiene sentido.
La asignación de tipos a los datos tiene dos objetivos principales:
 Detectar errores de operaciones aritméticas en los programas.
 Determinar cómo ejecutar las operaciones.
Tipos de Datos Comunes:
Estos son los tipos de datos más utilizados en los lenguajes de programación:
 Numéricos.
 Caracteres.
 Lógicos.

183
TIPOS NUMÉRICOS TIPOS CARACTER TIPOS LÓGICOS
Dentro de estos tipos se Los tipos carácter se dividen Los tipos lógicos solamente
puede hacer mención de también en caracteres ASCII, pueden tomar valores
los tipos enteros, reales, de como por ejemplo: a, A, &, *, etc. El verdadero o falso.
coma flotante, Decimales y otro grupo son los strings o
de los exponenciales. cadenas de caracteres, como por
ejemplo: “Hola mundo”.

OPERADORES UTILIZADOS EN LA PROGRAMACIÓN


Operadores Aritméticos
SÍMBOLO OPERADOR
+ Suma
- Resta
* Multiplicación
/ División
^ Exponenciación
Mod (%) Módulo
Operadores Relacionales
En ocasiones en los programas se necesitan realizar comparaciones entre distintos valores, esto se
realiza utilizando los operadores relaciones, los cuales se listan a continuación:
SÍMBOLO OPERADOR
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
= Asignación
== Comparación
!= Diferente de

Identificadores:
 Dan nombre a variables, constantes y métodos (funciones o procedimientos).
 Constan de caracteres alfanuméricos.
 C# es sensible a mayúsculas y minúsculas.
 No se pueden utilizar palabras reservadas como nombre de variables.
 Deben comenzar con letras y pueden ser seguidas de números.
184
Instrucciones de Entrada y Salida (E/S) en C#
Para poder mostrar en pantalla y capturar desde teclado, hacemos uso de la clase Console, que
contiene los métodos para mostrar mensajes en pantalla y permite entradas desde teclado. Cuando se
desea tener acceso a los métodos hacemos uso del operador de acceso, el cual será el símbolo (.).
En el siguiente ejemplo veremos cómo leer una cadena de texto en una consola C# y mostrarla por
pantalla. Para ello, declararemos una variable de tipo String llamada Texto. Posteriormente a través del
método ReadLine de la clase Console, leeremos el contenido tecleado por el usuario y lo almacenaremos
en dicha variable. Finalmente, a través del método WriteLine de la clase Console, mostraremos el
contenido de la variable Texto.
1 using System;
2 using [Link];
3 using [Link];
4 using [Link];
5 namespace Salida_Entrada_Pantalla
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 //Declaracion de variables
12 String Texto;
13 // Acabamos de declarar una variable de tipo cadena para capturar
14 // lo que digitamos por el teclado
15 [Link]("Digitar un texto");
16 // Ahora guardamos lo digitado
17 // Lo almacenamos en la variable Texto
18 // Para esto utilizaremos la siguiente instruccion
19 Texto = [Link]();
20 // Mostraremos el texto digitado, haciendo uso del operador de concatenacion (+),
21 // escribiendo el nombre de la variable que contiene el texto. Asi:
22 [Link]("\nEl texto digitado es:" + Texto);
23 // Los simbolos \n significan un salto de liena
24 // La siguiente instruccion me proporciona una pausa para ver el resultado
25 // permitiendo cerrar la ventana cuando presione una tecla
26 [Link]();
27 }
28 }
29 }
185
Importante:
 Cada una de las instrucciones se finalizan con punto y coma (;) de lo contrario el compilador no
detecta un fin de línea.
 Los comentarios: es una práctica muy importante en el mundo de la programación, ya que se puede
aplicar una descripción a las líneas de código o fragmentos de un programa. Existen dos formas de
utilizarlos: una de ellas es la que les he mostrado en el ejemplo anterior, colocando los símbolos //,
pero esta forma se utiliza cuando el comentario solo ocupará una línea. La otra forma es encerrando
un bloque de código con los símbolos: /* esto es un comentario útil para una línea o fragmento
grande de código*/
 C# reconoce como cadenas de caracteres todo lo que ingresamos desde teclado, por esa razón
debemos hacer una conversión a un tipo de dato numérico para poder realizar los cálculos
correspondientes.

Material y Equipo
 Guía de laboratorio #3.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Crear una carpeta con el nombre Práctica3 para guardar los ejemplos y ejercicios.

Ejemplo1 Diseñar un programa en C# que nos permita realizar la suma de dos números.

1 using System;
2 using [Link];
3 using [Link];
4 using [Link];
5 namespace Guia3Ejemplo1
6 {
7 class Suma_de_dos_numeros
8 {
9 static void Main(string[] args)
10 {
11 [Link] = "Programa que suma 2 numeros";
12 // Declaracion de variables
13 Double n1, n2, resp;
186
14 [Link]("\nPrograma que suma dos números");
15 // Entrada de datos
16 [Link]("\nDigitar el primer número:");
17 n1 = [Link]([Link]());
18 [Link]("\nDigitar el segundo número:");
19 n2 = [Link]([Link]());
20 // Proceso de los datos
21 resp = n1 + n2;
22 // Salida de los datos
23 [Link]("\nLa suma de los numeros digitados es:" + resp);
24 [Link]();
25 }
26 }
27 }

Corrida del programa

No. Corrida Datos entradas Resultado


1 n1 = 0

n2 = 5

2 n1 = -8

n2 = -5

3 n1 = -148.87

n2 = 15.64

4 n1 = a

n2 = 14.84

187
Diseñar un programa en C# que nos permita encontrar el promedio de ventas
Ejemplo2 de un vendedor. Es importante preguntar el nombre y apellido de la persona.

1 static void Main(string[] args)


2 {
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = "Promedio de ventas";
7 String nombre,apellido;
8 Double v1,v2,v3,prom;
9 [Link]("Digitar nombre del vendedor");
10 nombre = ([Link]());
11 [Link]("Digitar apellido del vendedor");
12 apellido = ([Link]());
13 [Link]("Digitar la primer venta: ");
14 v1 = [Link]([Link]());
15 [Link]("Digitar la segunda venta: ");
16 v2 = [Link]([Link]());
17 [Link]("Digitar la tercer venta: ");
18 v3 = [Link]([Link]());
19 prom = (v1 + v2 + v3)/3;
20 [Link]("El promedio de " + nombre + " es: " + prom);
21 [Link]();
22 }

Ejemplo3 En una empresa de calzado se aplican los siguientes descuentos al sueldo base
de cada uno de sus empleados:
 Renta 10%.
 AFP 7%.
 Seguro Social 5%.
Desarrollar un programa en C# que pida el sueldo base de un empleado y que determine los descuentos
y el sueldo neto a pagar. Diseñar el código necesario para resolver el problema. Recordar el nombre
del archivo: Guia3 Ejemplo3

No. Corrida Datos entradas Resultado


1 Sueldo base = 500 Descuentos =
Sueldo a pagar =
2 Sueldo base = 1000 Descuentos =
Sueldo a pagar =

188
3 Sueldo base = 1250.25 Descuentos =
Sueldo a pagar =

Análisis de Resultados
1. Construya un programa en C# que permita digitar una cantidad en kilómetros y me muestre como
resultado la misma cantidad convertida en metros, en yardas y en varas.
Equivalencias: 1mt = 1.09361 yardas 1mt = 1.1963 varas
No. Corrida Datos entradas Resultado
1 k=4

2 k=8

3 k = 10

2. Construya un programa en C# tal que dados la base y altura de un triángulo vía teclado, calcule e
imprima su Área.

No. Corrida Datos entradas Resultado


1 b=8
h=5
2 b=7
h=4.25
3 b=9
h=6.5

3. Realizar un programa en C# que permita resolver esta ecuación:

X
=

No. Corrida Datos entradas Resultado


1 r=3

2 r=4

3 r = 5.5

189
4. Realizar un programa en C# que permita resolver esta ecuación:

P
=
No. Corrida Datos entradas Resultado
1 x1=8, y1=3, x2=11, y2=7
2 x1=7, y1=2, x2=10, y2=4
3 x1=12, y1=5, x2=15, y2=8

Investigación Complementaria

1. Construya un programa en C# que calcule e imprima el número de segundos que hay en un


determinado número de días. El número de días será introducido desde teclado.
No. Corrida Datos entradas Resultado
1 d=4
2 d=8
3 d = 10

2. Construya un programa en C# tal que dado el costo de un artículo vendido y la cantidad de dinero
entregado por el cliente vía teclado, calcule e imprima el cambio que debe entregarse al mismo.
No. Corrida Datos entradas Resultado
1 di = 25, art = 17
2 di = 55, art = 41.50
3 di = 95, art = 77.65

3. Construya un programa en C# tal que dado el valor del lado de un triángulo equilátero, calcule e
imprima su Área.
Fórmula No. Corrida Datos entradas Resultado
1 a=5

2 a=6

3 a=9

190
4. Construya un programa en C# tal que dados como datos el radio y la altura de un cilindro, calcule e
imprima su área total.

No. Corrida Datos entradas Resultado


1 r=2, h=3

2 r=3.5, h=4.75

3 r=6, h=9

5. La media armónica (H) de un conjunto de elementos no nulos (X1, X2,…,XN) es el recíproco de la


suma de los recíprocos (donde 1/Xi es el recíproco de Xi)) multiplicado por el número de elementos
del conjunto (N).

La media armónica es la recíproca de la media aritmética. Los elementos del conjunto deben ser
necesariamente no nulos. Esta media es poco sensible a los valores grandes, pero muy sensible a
los valores próximos a cero, ya que los recíprocos 1/Xi son muy altos.
La media armónica no tiene un uso muy extenso en el mundo científico. Suele utilizarse
principalmente para calcular la media de velocidades, tiempos o en electrónica.
Ejemplo
Un tren realiza un trayecto de 400km. La vía tiene en mal estado que no permitían correr. Los
primeros 100 km los recorre a 120km/h, los siguientes 100km la vía está en mal estado y va a
20km/h, los terceros a 100km/h y los 100 últimos a 130km/h. Para calcular el promedio de
velocidades, calculamos la media armónica.

La media armónica es de H=52,61km/h.

191
Realice una programa que resuelva el ejemplo presentado.

6. Solicite una serie de 4 números cualquiera, para luego calcular y mostrar el valor promedio de la lista
y también la desviación típica de toda la serie.
La desviación típica (s) de una serie de N valores se calcula con la siguiente fórmula:

Por ejemplo: Si usuario brinda los números 5, 6, 3, 4, el promedio es de 4.5 y la desviación típica

es de 1.118

7. Ayude al Contador de un Banco a determinar en cuanto tiempo N (en años) un monto inicial (C) de
un préstamo realizado a un cliente se convertirá en un monto (S) final que se pagara por el mismo
en el futuro. El banco aplica una tasa de interés anual compuesta (i). La formula a tomar en cuenta
es la siguiente:

8. Juan, Raquel y Daniel aportan cantidades de dinero para formar un capital. Juan y Raquel aportan
en dólares y Daniel en soles. Diseñe un programa que determine el capital total en dólares y que
porcentaje de dicho capital aporta cada uno.
Considere que: 1 dólar = 3.25 soles.
9. Investigar como poder utilizar las funciones trigonométricas (seno, coseño, tangente), en un
programa diseñado en C#.
10. Determine los lados restantes de un triángulo “rectángulo”, del cual solamente se conoce uno de
sus ángulos agudos y la hipotenusa.

Bibliografía

Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2000
192
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Estructuras de Selección en C#”


Objetivos
 Utilizar las instrucciones de selección “if” e “if..else” para elegir una de varias acciones alternativas.
 Conocer la sintaxis de C# para las instrucciones condicionales simples, dobles y múltiples, así como
también la utilidad en la programación.
 Aprender a utilizar la estructura y sintaxis del switch-case para la evaluación de condiciones
múltiples.

Introducción

Por lo general, las instrucciones en una aplicación se ejecutan una después de la otra, en el orden en
que se escriben. A este proceso se le conoce como ejecución secuencial. Varias instrucciones de C#
le permiten especificar que la siguiente instrucción a ejecutar no es necesariamente la siguiente en la
secuencia. A este se le conoce como transferencia de control.

Estructuras de Selección en C#
C# cuenta con tres tipos de estructuras de selección, que de aquí en adelante denominaremos
instrucciones de selección. La instrucción if realiza (selecciona) una acción si una condición es
verdadera, o ignora la acción si la condición es falsa.
a. La instrucción if…else realiza una acción si una condición es verdadera o realiza una acción distinta
si la condición es falsa.
b. La instrucción switch realiza una de varias acciones distintas, dependiendo del valor de una
expresión (expresión de control).
c. A la instrucción if se le llama instrucción de selección simple, debido a que selecciona o ignora
una acción individual.
d. A la instrucción if...else se le llama instrucción de selección doble, debido a que selecciona una
de dos acciones distintas (o grupos de acciones).
e. A la instrucción switch se le llama instrucción de selección múltiple, debido a que selecciona una
de varias acciones distintas (o grupo de acciones).

193
Sintaxis de las Instrucciones Condicionales
Una instrucción if simple responde a la siguiente sintaxis:

if (expresión booleana)
{
Instrucción(es) de condición verdadera.
}

Advertencia:
Las llaves son opcionales si hay una sola acción. Normalmente, es aconsejable añadirlas de todas
formas. Su omisión puede ser causa de fallos inesperados.
La instrucción if solo garantiza la ejecución de determinadas acciones basándose en una condición
verdadera (true). Se ejecutan o no se ejecutan. Para controlar tanto la condición true como la falsa
(false) es necesario utilizar la instrucción if…else. Su sintaxis en la siguiente:

if (expresión booleana)
{
Instrucción(es) de condición verdadera.
}
else
{
Instrucción(es) de condición falsa.
}

Recordar:
La condición siempre se evalúa en el if. NUNCA se evaluará una condición después de la sentencia
else.
Muchas veces vamos a necesitar evaluar más de dos condiciones, por lo que nos encontramos con el
siguiente tipo de estructura, para el cual se muestra la sintaxis e interpretación:

if (condicion1)
{
Bloque de instrucciones que se ejecutan si la condición 1 es verdadera.
}
else if(condicion2)

194
{
Bloque de código que se ejecuta si la condición 2 es verdadera.
}
else if(condicion n)
{
Bloque de código se la siguiente condición n es verdadera.
}
else
{
Bloque de código que se ejecuta si ninguna de las condiciones previas fue verdadera.
}

Operadores Lógicos
Los operadores lógicos producen un resultado booleano (verdadero o falso) y sus operandos son
también valores lógicos. Nos permiten formular condiciones complejas a partir de condiciones simples.
A continuación se muestra una tabla con las tres compuertas lógicas básicas que nos servirán como
operadores lógicos:
OPERADOR C# SINTAXIS COMENTARIO
AND && Exp_Lógica && Exp_Lógica Devuelve verdaderos si se cumplen ambas
condiciones.
OR || Exp_Lógica || Exp_Lógica Devuelve verdaderos si se cumple al menos
una de las condiciones.
NOT ! ! Niega la condición.

Nota:
 La operación (x&&y) corresponde a la operación (x and y).
 La operación (x||y) corresponde a la operación (x or y).
Instrucción Switch
Cuando hay muchas condiciones a evaluar, la instrucción if…else puede resultar demasiado compleja
de manejar. Una solución mucho más limpia en estos casos consiste en usar la instrucción switch.
La instrucción switch permite cualquier valor entero o de cadena con múltiples valores. Cuando se
produce una coincidencia se ejecutan todas las instrucciones asociadas con ella.
Esta estructura es muy utilizada a la hora de trabajar con menú dentro de las aplicaciones.

195
La sintaxis es la siguiente:
Switch (expresión de control )
{
case<literal-1>:
Instrucción(es)
break;
.
.
case<literal-n>:
Instrucción(es)
break;
default:
Instrucción(es)
}
Caracteres ASCII utilizados:
ALT + 92 = \ ALT + 91 = [ ALT + 93 = ] ALT + 35 = #
ALT + 94 = ^ ALT + 123 = { ALT + 125 = } ALT +124 = |

Material y Equipo
 Guía de laboratorio #4.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Crear una carpeta con el nombre Practica4 para guardar los ejemplos y ejercicios, en el escritorio de su
computadora.

Diseñar un programa en C# que nos permita saber cuál es el número mayor


Ejemplo1 entre 2 números.

1 static void Main(string[] args)


2 {
3 [Link] = " El mayor de dos numeros";
4 Int32 x,y;
5 [Link]("Digitar el primer número del 1 al 1000");

196
6 x = [Link]([Link]());
7 [Link]("Digitar el segundo número del 1 al 1000");
8 y = [Link]([Link]());
9 if (x>y)
10 {
11 [Link]("\nEl numero {0} es mayor que {1}", x, y); // v
12 }
13 else
14 {
15 [Link]("\nEl numero {0} es mayor que {1}", y, x); // f
16 }
17 [Link]("\n\n");
18 [Link]("\n----->Fin del programa");
19 [Link]();
20 }

No. Corrida Datos entradas Resultado

1 x=100 y=87

2 x=150 y=245

3 x=200 y=135

Desarrollar un programa en C# que lea desde teclado dos números. Si el


Ejemplo2 primero es mayor que el segundo se deberá mostrar la suma y la diferencia de
dichas cantidades, en caso contrario se deberá mostrar el producto y la división
del primero respecto al segundo.
1 {
2 Double x, y, z, w;
3 [Link] = "CONDICIONALES";
4 [Link]("\tDigitar primer numero:");
5 x = [Link]([Link]());
6 [Link]("\tDigitar segundo numero:");
7 y = [Link]([Link]());
8 if (x > y)
9 {

197
10 z = x + y;
11 w = x - y;
12 [Link]("\tMOSTRANDO RESULTADOS");
13 [Link]("\tSUMA: " + z);
14 [Link]("\tRESTA: " + w);
15 }
16 else
17 {
18 z = x * y;
19 if (y == 0)
20 {
21 [Link]("\tNo se puede dividir entre CERO");
22 }
23 else
24 {
25 w = x / y;
26 [Link]("\tMOSTRANDO RESULTADOS");
27 [Link]("\tMULTIPLICACION: " + z);
28 [Link]("\tDIVISION: " + w);
29 }
30 }
31 [Link]();
32 }
33 }
34 }

No. Corrida Datos entradas Resultado

1 x = 8, y=4

2 x = 5, y = 10

3 x = 0, y=0

198
Las raíces reales de la expresión ax2 + bx + c = 0.
Ejemplo3 Desarrollar un programa para encontrar las raíces de la ecuación cuadrática
sabiendo que la fórmula a utilizar es:

−𝑏 ± √𝑏 2 − 4𝑎𝑐
𝑥=
2𝑎
1 {
2 [Link] = [Link];
3 [Link] = [Link];
4 [Link]();
5 Double a,b,c,disc,x1,x2;
6 [Link] = ("Programa que calcule las raíces de una ecuación de 2do
grado");
7 [Link]("Ingresa coeficiente cuadratico");
8 a = [Link]([Link]());
9 [Link]("Ingresa coeficiente lineal");
10 b = [Link]([Link]());
11 [Link]("Ingresa constante");
12 c = [Link]([Link]());
13 disc=([Link](b,2)-4*a*c);
14 if(a!=0)
15 {
16 if(disc<0)
17 {
18 [Link]("Tiene raices imaginarias");
19 }
20 else
21 {
22 x1=(-b+[Link](disc))/(2*a);
23 x2=(-[Link](disc))/(2*a);
24 [Link]("X1 = " + [Link](x1,3) + " X2 = " +
[Link](x2,3));
25 }
26 }
27 else

199
28 {
29 [Link]("El coeficiente cuadratico debe ser diferente de 0");
30 }
31 [Link]();
32 }

200
Realice un programa que solicite el nombre de una persona, su edad y su sexo
Ejemplo4 si el sexo es masculino que muestre en pantalla el mensaje de “ El Sr. (nombre)
ha sido registrado" y si el sexo es femenino que muestre el mensaje "La Sra.
(nombre) ha sido registrada".
1 {
2 [Link] = " El sexo de una persona";
3 Int32 edad;
4 String nombre, sexo;
5 [Link]("Digitar tu nombre");
6 nombre = [Link]();
7 [Link]("Digitar tu edad");
8 edad = [Link]([Link]());
9 [Link]("Digitar tu sexo ( Hombre=M y Mujer=F )");
10 sexo = [Link]();
11 if (sexo == "M" || sexo == "m") // instruccion lógica OR
12 {
13 [Link]("\nEl Sr {0} ha sido registrado", nombre); // v
14 }
15 else
16 {
17 [Link]("\nLa Sra {0} ha sido registrada", nombre); // f
18 }
19 [Link]("\n\n");
20 [Link]("\n----->Fin del programa");
21 [Link]();
22 }
No. Corrida Datos entradas Resultado
1 nombre = Chabelo
edad = 45
sexo = m
2 nombre = Luismi
edad = 28
sexo = m
3 nombre = Andrea
edad = 44
sexo = f

201
Se necesita un programa que muestre un menú con las siguientes opciones:
Ejemplo5 1. Suma.
2. Resta.
3. Multiplicación.
4. División.
5. Raíz Cuadrada.
6. Exponenciación.
7. Salir del programa.

1 static void Main(string[] args)


2 {
3 int op;
4 Double x, y, z;
5 [Link]("\nDigitar el primer numero:");
6 x = [Link]([Link]());
7 [Link]("\nDigitar el segundo numero:");
8 y = [Link]([Link]());
9 [Link] = "SWITCH CASE";
10 [Link]("\n\tOPERACIONES MATEMATICAS");
11 [Link]("\n\t1. SUMAR");
12 [Link]("\n\t2. RESTAR");
13 [Link]("\n\t3. MULTIPLICAR");
14 [Link]("\n\t4. DIVIDIR");
15 [Link]("\n\t5. RAIZ CUADRADA");
16 [Link]("\n\t6. POTENCIACION");
17 [Link]("\n\t7. SALIR DEL PROGRAMA");
18 [Link]("\n\n\t Digite su opcion: ");
19 op = [Link]([Link]());
20 switch (op)
21 {
22 case 1:
23 z = x + y;
24 [Link]("\t El resultado de la suma es: " + z);
25 break;
26 case 2:

202
27 z = x - y;
28 [Link]("\t El resultado de la resta es: " + z);
29 break;
30 case 3:
31 z = x * y;
32 [Link]("\t El resultado de la multiplicacion es: " + z);
33 break;
34 case 4:
35 if ( y == 0 )
36 {
37 [Link]("\t Division Invalida...");
38 }
39 else
40 {
41 z = x / y;
42 [Link]("\t El resultado de la division es: " + z);
43 }
44 break;
45 case 5:
46 z = [Link](x);
47 [Link]("\t La raiz cuadrada del primer numero es " + z);
48 break;
49 case 6:
50 z = [Link](y,2);
51 [Link]("\t El cuadrado del segundo numero es " + z);
52 break;
53 case 7:
54 [Link](0);
55 break;
56 default:
57 [Link]("\t Opcion no definida.. intente de nuevo");
58 break;
59 }
60 [Link]();
61 }

203
62 }
63 }

Corrida del ejercicio:

NOTA: Siempre hay que utilizar las validaciones para que las operaciones matemáticas tengan el
resultado correcto.

Análisis de Resultados

1. Un postulante a un empleo, realiza un test de capacitación. Se obtuvo la siguiente información:


cantidad total de preguntas que se realizaron y la cantidad de preguntas que contestó correctamente.
Se pide desarrollar un programa que ingrese los datos por teclado e informe el nivel del mismo según
el porcentaje de respuestas correctas que ha tenido y sabiendo que:
 Nivel máximo ---------------------------------- Porcentaje >= 90.
 Nivel medio ------------------------------------ Porcentaje >= 75% y < 90%.
 Nivel regular ----------------------------------- Porcentaje >= 50% y < 75%.
 Fuera de nivel --------------------------------- Porcentaje < 50%.

204
No. Corrida Datos entradas Resultado
1 total=100 contestadas=87
2 total=150 contestadas=45
3 total=200 contestadas=135

Investigación Complementaria

1. Cree un programa que pida 3 números al usuario y determine cuál de ellos es el mayor.
No. Corrida Datos entradas Resultado

1 a=9 b=4 c=1

2 a=3 b=6 c=2

3 a=4 b=1 c=10

2. Cree un programa que pida 3 números al usuario y determine cuál de ellos es el menor.
No. Corrida Datos entradas Resultado

1 a=9 b=4 c=1

2 a=2 b=6 c=5

3 a=4 b=1 c=10

3. Cree un programa que pida 2 números al usuario y determine si el primer número es múltiplo del
segundo.
No. Corrida Datos entradas Resultado

1 a=9 b=3

2 a=12 b=5

3 a=25 b=5

205
4. Crear un programa que pida tres números e indicar si el tercero es igual a la suma del primero y el
segundo.
No. Corrida Datos entradas Resultado

1 a=9 b=3 c=12

2 a=12 b=5 c=15

3 a=25 b=5 c=30

5. Crear un programa que tome dos números y diga si ambos son pares o impares.
No. Corrida Datos entradas Resultado

1 x=9 y=3

2 x=12 y=10

3 x=25 y=4

6. Crear un programa que muestre un menú donde las opciones sean “Equilátero”, “Isósceles” y
“Escaleno”, pida una opción y calcule el perímetro del triángulo seleccionado.
Formulas:
Equilátero: Perímetro = 3 * lado1
Isósceles: Perímetro = (2*lado1) + base
Rectángulo: Perímetro = lado1 + lado2 + (raizcuadrada[ (lado1)2 + (lado2)2] )

7. Hacer un programa que posea dentro de él 2 menús, teniendo el siguiente formato:


f) conversión de colones a dólares
g) conversión de millas a kms
h) conversión de grados Celsius a grados Fahrenheit
i) segundo menú
1. si es positivo o negativo
2. área de un triangulo
3. fin submenú
j) fin de menú
Seleccione una opción (a..e):

206
8. Hacer un programa con un menú que pase de Kg a otra unidad de medida de masa, mostrar en
pantalla un menú con las opciones posibles.
Menú: Kg a libras
Kg a onzas
Kg a toneladas
No. Corrida Datos entradas Resultado

1 Kg=10 a onzas

2 Kg=15 a libras

3 Kg=2000 a toneladas

9. Crear un programa que pida al usuario un número de día y un número de mes, evalúe si la entrada
es correcta y en caso de que así sea calcule el día del año que es, considerando un año no bisiesto.
Observaciones a tomar en cuenta:
 Un problema puede tener distintas vías para ser resuelto. Vamos a enfocarlo hacia una resolución
usando la instrucción Según (Caso) Hacer.
 En primer lugar y como variantes globales contemplaremos dos posibilidades: datos correctos o
datos incorrectos. Se considerarán datos correctos aquellos en los que el número de día esté
comprendido entre 1 y 31 y el número de mes entre 1 y 12. Se podría afinar más restringiendo
mes a mes las posibilidades (p. ej. en el mes de febrero no admitir un número de día que fuera
30, ya que ese valor es inviable), cosa que no haremos para simplificar el ejercicio.
 Por otro lado, para el cálculo del día del año se considerarán 12 casos posibles, que son los doce
meses del año. Para cada mes, se calculará el día del año como el día del mes correspondiente
más el total de días acumulados correspondientes a los meses anteriores. Por ejemplo: el día del
año que es el día 15 del mes 2 (15 de febrero) se calcula como 15 + 31 siendo 31 el acumulado
de días de los meses anteriores.

Resultados a obtener.
 Día del año expresado como un valor comprendido entre 1 y 365.
 Convertir este pseucódigo en C#

1. Inicio [Cálculo del día del año ejemplo [Link]]


2. Mostrar “Introduzca el número del día y número del mes”
3. Pedir NDia, Nmes
4. Si Ndia>= 1 y Ndia <= 31 y Nmes >= 1 y Nmes <= 12 Entonces

207
Según Nmes Hacer
Caso, = 1
DDA = NDia [DDA es día del año]
Caso, = 2
DDA = NDia + 31
Caso, = 3
DDA = NDia + 59
Caso, = 4
DDA = NDia + 90
Caso, = 5
DDA = NDia + 120
Caso, = 6
DDA = NDia + 151
Caso, = 7
DDA = NDia + 181
Caso, = 8
DDA = NDia + 212
Caso, = 9
DDA = NDia + 243
Caso, = 10
DDA = NDia + 273
Caso, = 11
DDA = NDia + 304
Caso, = 12
DDA = NDia + 334
FinSegún
Mostrar “El”, NDia, “del”, Nmes, “es el día”, DDA, “del año”
SiNo
Mostrar “Datos proporcionados no válidos”
FinSi
5. Fin

208
10. El siguiente programa que simula un cajero automático con un saldo inicial de 1000 Euros, se
encuentra diseñado en C++ y lo necesitamos convertirlo a C#.

#include <stdio.h>
void main()
{
//declaracion de variables
int SI,opc;
float din,dan,S;
SI=1000;
//menú principal
printf("Bienvenido a su cajero virtual.\n");
printf("Seleccione una opcion:\n\n");
printf("[Link] en cuenta.\[Link].\[Link] el saldo
disponible\[Link]\n\nUsted ha marcado: ");
scanf("%d",&opc);
if(opc==1){
printf("\nBien, escriba el dinero que desee introducir: ");
scanf("%f",&din);
S=SI+din;
printf("\nIngreso realizado correctamente. Su saldo actual es de %f\n",S);
}else if(opc==2){
printf("\nAhora, teclee la cantidad de capital que desea retirar: ");
scanf("%f",&dan);
if(dan>SI){
printf("\nError. No dispone de tanto sueldo.\n");
}else{
S=SI-dan;
printf("\nReintegro realizado correctamente. Su saldo actual es de %f\n",S);
}
}else if(opc==3){
printf("\nSu saldo actual es de %d\n",SI);
}else if(opc==0){
printf("\nGracias por utilizar este programa.\n\n");
}else{

209
printf("\nDisculpe, se ha equivocado al marcar.\n\n");
}
}

Bibliografía

 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

210
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Entorno de Desarrollo Visual Studio en C#”.


Objetivos
 Construir aplicaciones básicas de Windows Forms para proyectos en C#.

Introducción

INTRODUCCIÓN A WINDOWS FORM

Esta guía tiene como objeto mostrar cómo construir aplicaciones básicas de Windows Forms usando
varios de los componentes más comunes que son una característica de la mayoría de las aplicaciones
GUI.
Se verá como establecer las propiedades de los formularios y de los componentes de Windows Forms
usando Visual Designer y la ventana de propiedades. También tiene por objeto que se aprenda a
cambiar o examinar los valores de estas propiedades dinámicamente usando el código de C#.

HERRAMIENTAS DE C#

A continuación, se detallan las herramientas y ventanas más importantes de Visual C#. Las ventanas
de la mayoría de herramientas pueden abrir desde el menú “Ver”.
1. El editor de código, para escribir código fuente
2. El compilador de C#, que se encarga de convertir el código fuente de C# en un programa
ejecutable.
3. El depurador de Visual Studio, para probar el programa
4. El cuadro de herramientas y el Diseñador, para desarrollar rápidamente interfaces de usuario con
el mouse.
5. El explorador de soluciones, para ver y administrar archivos de proyectos y configuraciones.
6. El diseñador de proyectos, para configurar opciones del compilador, rutas de implementación,
recursos, entre otros.
7. La vista de clases, para desplazarse por el código fuente según los tipos, no los archivos.
8. La ventana “Propiedades”, para configurar propiedades y eventos en los controles de la interfaz
de usuario.

211
9. El examinador de objetos, que ve los métodos y clases disponibles en las bibliotecas de vínculos
dinámicos, incluidos los ensambladores de .NET Framework y los objetos COM
10. Document Explorer, para explorar y buscar la documentación del producto en su equipo local y
en Internet.

ENTORNO
El entorno C# está compuesto con herramientas para interactuar a través de ventanas, páginas de
propiedades y asistentes.

1. Cuadro de herramientas

2. Barra de herramientas y menú

3. Proyectos abiertos, propiedades y ayuda

4. Compilación de la aplicación, listado de errores.

5. Área de diseño y edición

212
EXPLORADOR DE SOLUCIONES Y DISEÑADOR DE PROYECTOS

La ventana de la parte superior derecha es el “Explorador de Soluciones”, que muestra todos los archivos
del proyecto en una vista de árbol jerárquica.
Cuando se utiliza el menú “Proyecto” para agregar nuevos archivos al proyecto, se verán reflejados en
el Explorador de Soluciones. Además de los archivos, el Explorador de soluciones también muestra la
configuración del proyecto y las referencias a las bibliotecas externas que necesita la aplicación.
Para obtener acceso a las páginas de propiedades del Diseñador de proyectos, haga clic con el botón
secundario del mouse en “Propiedades” del Explorador de soluciones y, a continuación, haga clic en
“Abrir”.
Utilice estas páginas para modificar opciones de generación, requisitos de seguridad, detalles de
implementación y muchas otras propiedades del proyecto.

Material y Equipo
 Guía de laboratorio #5.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Creación de primer proyecto.


Ejemplo1

Para la creación del proyecto, en Visual Studio

1. Inicie Visual [Link]

2. En el menú “Archivo (FILE)” , seleccione “Nuevo (NEW)” y después seleccione la opción “Proyecto
(PROJECT)”

213
En el panel “Tipos de Proyecto”, seleccione proyectos de Visual C# y en el panel de plantillas,
seleccione “Aplicación para Windows (Windows Forms Aplication)” y en el cuadro de texto “Nombre”,
escribiremos “Ejemplo1”, después hacer clic en el botón “Aceptar (OK)”

214
Pasos
1. En la ventana “Propiedades” (si no ve la ventana presione (F4), haga clic en la propiedad (Name), y
después escriba Ejemplo1 en el cuadro de texto (Name) para cambiar el nombre del control del
formulario (esto se hace así, porque con este nombre se hará referencia cuando se esté
programando)

2. En la misma ventana “Propiedades”, seleccione la propiedad Text y después escriba “Este es un


ejemplo”, para cambiar la barra de título del formulario.
3. Seleccione la propiedad Font y haga clic en el botón “Puntos suspensivos” que aparece al
seleccionar la propiedad. Cuando se hace clic en el botón “Puntos suspensivos”, se abre el cuadro
de diálogo “Font” y se puede seleccionar la fuente y los efectos que se desean.

215
Añadir controles a los formularios
Hasta ahora se ha creado un formulario, se han establecido algunas de sus propiedades. Para que el
formulario sea útil, se necesita agregar los controles y escribir algo de código propio.

Agregar controles de Windows Forms

En la siguiente figura se muestra el cuadro de herramientas,


donde podemos arrastrar los controles que necesitamos para
nuestra aplicación, (si no aparece la venta presionar Ctrl + w +x)

Arrastre los controles necesarios, para construir un formulario similar al mostrado en la figura
siguiente:

Form

Textbox

Label

Botón

Botón

Control Propiedad Valor


form1 Text Este es un ejemplo
Name frmventana
label1 Text Ingrese su nombre:
Name lbmensaje
textbox1 Text (dejar vacío)
Name txtnombre

216
button1 Text Guardar nombre
Name btnguardar
button2 Text SALIR
Name btnsalir

Ahora que tenemos toda la interfaz diseñada procedamos a la codificación:

Entremos al código dando F7 o clic derecho sobre el form y eligiendo < >View Code.
Para regresar al diseño cambiamos de pestaña y seleccionamos [Link] [Design]

Programando eventos
Hasta ahora se ha creado un formulario, se han establecido algunas de sus propiedades. Como
siguiente paso codificaremos los eventos de cada herramienta, de forma que logremos obtener
nuestro mensaje.

1. Damos doble clic sobre el btnguardar y nos mostrará algo como esto:

Al hacer doble clic creamos un evento


para esa herramienta y esto genera una
función (o procedimiento) para decirle qué
hacer

217
1.1 Ingresamos el siguiente fragmento de código en este método

string nombre = [Link];


[Link]("Bienvenido a POO " + nombre + " este es tu primer formulario");

2. Como segundo paso hagamos la misma rutina pero con el btnsalir y dentro de su método
escribamos:

[Link](); //termina la aplicación

3. Estamos listos para probar el programa, ejecútelo con Start o F5 e ingrese su nombre en el textbox.
Al hacer esto debe aparecernos esta ventana

4. Para concluir, de clic en Aceptar y luego clic en el botón salir que usted programó.

CONSIDERACIONES
 Los label y los messagebox, suelen ser utilizados como los encargados de
mostrar mensajes para el usuario (hacen la función de un [Link]( )
pero en el entorno gráfico. Aunque no son los únicos sí son de los más
frecuentes
 Hay varias formas de capturar información: textbox, radiobutton, listbox,
comboBox. (Muchas formas de un [Link]( ) )
 Todos los datos recogidos son considerados texto (string), así que si deseamos
hacer cálculos con ellos (como una suma) hay que convertir eso a int, float,
double o a lo que necesitemos.

218
Creación de calculadora.
Ejemplo2 Ahora haremos una aplicación para calcular las cuatro operaciones básicas

1. Configure las propiedades de los controles que acaba de agregar al formulario. Para cambiar el
valor de la propiedad de un control, haga clic en el control para seleccionarlo y luego introduzca el
valor correcto en la ventana de Propiedades. Hasta hacer un formulario similar a esto.

En la siguiente tabla se listan las propiedades y valores que hay que asignar a cada uno de los
controles.
Control Propiedad Valor

Label1 Text Número 1

TextBox1 Name txtnum1


Text Dejar en blanco

Label2 Text Número 2

TextBox2 Name txtnum2

Text Dejar en blanco


ComboBox1 Name cmbop
DropDrowStyle DropDrowList (Esta configuración fuerza a los usuarios a elegir
uno de los elementos de la lista; los usuarios no pueden escribir
un valor nuevo)
ListBox1 Name listadvance

RadioButton1 Name rbtn1


Text Básicas
RadioButton2 Name rbtn2
Text Avanzadas

219
Button1 Name btncalcular
Text Calcular

Cambio de las propiedades de forma dinámica


Hasta ahora se ha usado la vista de diseño para fijar las propiedades estáticamente. Cuando se ejecuta
el formulario, sería útil restablecer el valor de cada control a un valor inicial predeterminado.
Para hacerlo hay que escribir algo de código.

• Dar doble clic en cualquier parte del formulario(que no sea sobre un control), para entrar al evento
Load, si lo hizo bien el cursor deberá aparecer, dentro de las llaves del siguiente texto:

private void Ejemplo1_Load(object sender, EventArgs e)


{
}
• Dentro de esas llaves justo donde aparece el circulo digitamos lo siguiente:

//agrega item al combo


[Link]( );
[Link] ("sumar");
[Link] ("Restar");

//agrega item a la lista [Link] ( ); [Link] ("Multiplicacion");


[Link] ("Division"); [Link] = 0;

//inhabilita el combo y la lista [Link] = false; [Link] = false;

• Presione la tecla F5 para que vea lo que le sucede al formulario, este deberá aparecer con el
combo y la lista desactivada

• Ahora vuelva al formulario (modo de diseño), y dar doble clic sobre el control radiobutton que
tiene de texto BASICAS.

private void rbtn1_CheckedChanged (object sender, EventArgs e)


{
}

• El nombre de ese método aparece como CheckedChanged, que indica que cuando el radio
button cambie, se realizará lo que está dentro de este método, ahora digitamos lo siguiente:

220
if ([Link] == true)
{ [Link] = true;
[Link] = false;
}

Al final ese método se verá así:


private void rbtn1_CheckedChanged (object sender, EventArgs e) {
if ([Link] == true)
{ [Link] = true;
[Link] = false;
}
}

• Regresar al modo de diseño y dar doble clic al segundo radiobutton con el texto de
“Avanzadas”, y digitar lo siguiente:

[Link] = false;
[Link] = true;

//me permite seleccionar el primer elemento de la lista


[Link] = 0;

• Regresamos nuevamente al modo de diseño, y damos doble clic al botón, para que nos aparezca
el evento de ese botón de la siguiente manera:

private void btncalcular_Click (object sender, EventArgs e)


{
}
• Dentro de esas llaves, digitar el texto siguiente:

double n1, n2, r;


n1 = [Link] ([Link]);
n2 = [Link] ([Link]);
if ([Link] == true)
{ if ([Link] ( ) == "sumar") r = n1 + n2;
else
r = n1 - n2;
221
[Link] ("El Resultado es "+ [Link] ( ),"Respuesta");
}

if ([Link] == true)
{
if ([Link] ( ) == "Multiplicacion") r = n1 * n2;
else
r = n1 / n2;
[Link] ("El Resultado es " + [Link] ( ), "Respuesta");
}
Presione F5 para ejecutar la aplicación.

Análisis de Resultados

1. Crear un formulario, que pedirá el nombre y el salario de un empleado.


En caso que el empleado sea un Gerente se le hace un descuento de 20% sobre el sueldo
(impuestos), si es subGerente se le hace un descuento del 15% y si es secretaria del 5%.
El resultado debe mostrar qué tipo de empleado es, cuánto gana antes de los descuentos,
cuánto le descuentan (en dinero) y cuánto le queda de sueldo líquido.
Se sugiere un diseño como el siguiente (pero es libre según su creatividad)

222
2. Investigar qué hacen y cómo funciona try y catch en C#, posterior a ello modifique el ejercicio
anterior de tal forma que trabaje con try y catch.

Investigación Complementaria

1. Realice un programa que haga conversiones de tres tipos diferentes de datos :


a. Temperatura ( de celcius a farenheit)
b. Longitud (de metros a pies)
c. Peso (de kilogramos a libras)

2. Crear un formulario, donde se calculará el valor de x1 y x2 utilizando la formula cuadrática

223
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Estructuras de Repetición en C# [For]”.


Objetivos
 Utilizar las estructuras de repetición para ejecutar instrucciones repetidas en una aplicación.
 Solucionar problemas con programas que integren la estructura de selección y estructuras repetitivas
for.

Introducción

Los bucles o ciclos repiten una sentencia o una secuencia de sentencias un número de veces. A dichas
sentencias se les conoce como cuerpo del bucle. A cada repetición del bucle se le llama iteración.
El bucle for
Si conocemos exactamente la cantidad de veces que necesitamos repetir un conjunto de sentencias,
entonces podemos usar un bucle FOR.
En general, los bucles controlados por contador requieren:
a) Una variable de control o contador
b) Un valor inicial para el contador
c) Un valor final para el contador
d) Una condición para verificar si la variable de control alcanzo su valor final
e) Un valor de incremento ( o decremento ) con el cual se modifica la variable de control en cada
bucle
La forma general del bucle FOR es:
for (inicialización; condición_iteración; incremento_o_decremento)
{
Sentencia 1...;
Sentencia 2…;
….
Sentencia n;
}

224
Por ejemplo tenemos:
for (x=1;x<=5;x=x+1)
{
…………..
}

 Contadores: un contador es una variable casi siempre de tipo entero cuyo valor se incrementa o
decrementa en cada repetición del bucle. Es habitual llamar a esta variable “cont” (contador) o “i”
(índice). El contador suele utilizarse de este modo:
1. Se inicializa antes de que comience el bucle. Es decir, se le da un valor inicial-
Por ejemplo: cont = 1
2. Se modifica dentro del cuerpo del bucle. Lo más habitual es que se incremente su valor en una
unidad:
Por ejemplo: cont = cont + 1;
Esto quiere decir que el valor de la variable cont se incrementa en una unidad y es asignado de
nuevo a la variable contador. Es decir, si cont valía 1 antes de esta instrucción, cont valdrá 2
después. Otra forma típica del contador es: cont = cont – 1.
Formas de incrementar los contadores:
Primera Forma Segunda Forma Tercera Forma
cont = cont + 1 cont++ cont += 1

 Acumuladores: Las variables acumuladores tienen la misión de almacenar los resultados sucesivos,
es decir, de acumular resultados.
Las variables acumuladores también deben ser inicializadas. Si llamamos “acum” a un acumulador,
escribiremos antes de iniciar el bucle algo como esto: acum = 0.
Por supuesto, el valor inicial puede cambiar, dependiendo de la naturaleza del problema. Más tarde,
en el cuerpo del bucle, la forma en la que solemos encontrarla es:
acum = acum + N;
Otra manera de escribir esta sentencia sería: acum += N.

Material y Equipo
 Guía de laboratorio #6.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

225
Procedimiento

Realizar un programa que nos permita digitar 5 números enteros y nos permita
Ejemplo1 ver en la pantalla el cubo de cada uno de ellos. Hacer uso de una estructura for.

1 static void Main(string[] args)


2 {
3 [Link] = "Utilizando la estructura FOR";
4 Double cubo;
5 int cantidad;
6 int i;
7 [Link]("Calculo de Cubos");
8 for (i = 1; i <= 5; i++)
9 {
10 [Link]("Escriba un numero entero: ");
11 cantidad = [Link]([Link]());
12 cubo = [Link](cantidad,3);
13 [Link]("El cubo de la cantidad es: " + cubo);
14 }
15 [Link]("Saliendo del programa...");
16 [Link]();
17 }

Corrida del ejercicio:

226
Hacer uso de una estructura for. Realizar un programa que permita calcular el
Ejemplo2 promedio de un alumno que tiene 5 calificaciones en una materia.

1 static void Main(string[] args)


2 {
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = ("Promedio de Notas de Calculo Diferencial");
7 String alumno;
8 int x;
9 Double nota, sum, prom;
10 sum = 0;
11 [Link]("Digitar el nombre del estudiante: ");
12 alumno = [Link]();
13 [Link]();
14 [Link]("El nombre del estudiante es: {0}", nombre);
15 [Link]("\n");
16 for (x = 1; x <= 5; x = x + 1)
17 {
18 [Link]("Digitar la nota {0} : ", x);
19 nota = [Link]([Link]());
20 sum = sum + nota;// aki se van sumando las notas (acumulador)
21 }
22 // procesos afuera del ciclo for
23 prom = sum / 5;
24 [Link]("\n");
25 [Link]("El promedio del alumno {0} es de: {1}", alumno,
[Link](prom,3));
26 [Link]("\n");
27 [Link]("-->Fin del programa");
28 [Link]();
29 }

No. Corrida Datos entradas Resultado


1 alumno: pepito El promedio de
nota1= 5.5 nota2 = 4.5 es de
nota3 = 7.5 nota4 = 9.5
nota5 = 2.5
2 alumno: margarita El promedio de
nota1= 9.5 nota2 = 8.5 es de
nota3 = 8.5 nota4 = 9.5
nota5 = 9.5
227
Leer 4 números enteros cualesquiera e imprimir solamente los números
Ejemplo3 positivos

1 static void Main(string[] args)


2 {
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = ("Numeros Positivos");
7 int y;
8 Double num;
9 for (y = 1; y <= 4; y = y + 1)
10 {
11 [Link]("Digitar el numero {0} : ", y);
12 num = [Link]([Link]());
13 if (num > 0)
14 {
15 [Link](" El numero: {0} es positivo", num);
16 }
17 }
18 [Link]("\n");
19 [Link]("-->Fin del programa");
20 [Link]();
21 }

No. Corrida Datos entradas Resultado


1 numero1 = 9
numero2 = -5
numero3 = -3
numero4 = -8
2 numero1 = 6
numero2 = 0
numero3 = -2
numero4 = -7

Ejecute el siguiente código de programa en su cuaderno y escriba la salida en


Ejemplo4 el cuadro que está debajo del código.

1 static void Main(string[] args)


2 {
3 [Link] = "Programa extra del ciclo FOR";
4 int x, y;

228
5 [Link]("Programa que imprime una secuencia de numeros");
6 [Link]("\n");
7 for (x=1;x<10;x=x+2)
8 {
9 y=x+5;
10 [Link](x + "," + y +",");
11 }
12 [Link]();
13 }
14 }

Digitar una lista de 7 números enteros desde el teclado. Informar el mayor, el


Ejemplo5 menor y la sumatoria de los que se encuentran entre 100 y 500 inclusive.

1 static void Main(string[] args)


2 {
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = ("Mayor, Menor y Sumatoria");
7 int i;
8 Int32 n, max=0, min=0, sum=0;
9 [Link]("Ingrese 7 enteros:");
10 for (i=1;i<=7;i=i+1)
11 {
12 n = [Link]([Link]());
13 if (i == 1)
14 {
15 max = n;
16 min = n;
17 }
18 if (n > max)
19 {
20 max = n;

229
21 }
22 if (n < min)
23 {
24 min = n;
25 }
26 if ((n >= 100) && (n <= 500)) // los que se estan en el rango
27 {
28 sum = sum + n;
29 }
30 }
31 [Link]("\nEl numero mayor es: " + max);
32 [Link]("\nEl numero menor es: " + min);
33 [Link]("\nLa suma de los que estan entre 100 y 500 es:" + sum);
34 [Link]("\n");
35 [Link]("-->Fin del programa");
36 [Link]();
37 }

No. Corrida Datos entradas Resultado


1 n1 = n2 =
n3 = n4 =
n5 = n6 =
n7 =
2 n1 = n2 =
n3 = n4 =
n5 = n6 =
n7 =

Análisis de Resultados

1. Desarrollar un programa que capture un número desde teclado e imprima su tabla de multiplicar.
2. Escribir un programa que pida ingresar coordenadas (x,y) que representen puntos en el plano.
Informar cuantos puntos se han ingresado en el primer, segundo, tercer y cuarto cuadrante. Al
comenzar el programa se pide que se ingrese la cantidad de pares de puntos a procesar.
3. Realizar un programa que lea los datos de “n” triángulos e informar:
a. De cada uno de ellos, que tipo de triangulo es: equilátero ( tres lados iguales), isósceles ( dos
lado iguales?, o escaleno (ningún lado igual)
b. Cantidad de triángulos de cada tipo
c. Tipo de triangulo que posee menor cantidad

230
4. Se realiza la entrada de 10 numeros enteros. Se desea conocer:
a. La cantidad de numeros negativos
b. La cantidad de números positivos
c. La cantidad de multipos de 15
d. El valor acumulado de los números ingresados que son pares
5. Desarrollar un programa que permita imprimir en pantalla los números del 1 al 30, excepto el 25.

Investigación Complementaria
1. Desarrollar un programa, que dados como datos 10 números enteros, obtenga la suma de los
números impares y el promedio de los números pares.
2. Escribir un programa en C# que determine de un conjunto de 10 números enteros, ¿Cuántos son
menores de 5, mayores de 85 y cuantos entre 50 y 150?
3. Suponga que se proporciona una secuencia de “X” números enteros tales como: 6,-4, 5, 29, 6, 43,-
567,-23, 6, 90, etc. y se desea contar e imprimir ¿cuántos números 6 hay, cuántos son pares y
cuántos son positivos?
4. Confeccionar un programa que lea “n” pares de datos, cada par de datos corresponde a la medida
de la base y la altura de un triángulo.
El programa deberá informar:
a. De cada triángulo la medida de su base, su altura y su superficie.
b. La cantidad de triángulos cuya superficie es mayor a 12.
5. Escribir un programa que lea 10 números enteros y luego muestre cuántos valores ingresados fueron
múltiplos de 3 y cuántos de 5. Debemos tener en cuenta que hay números que son múltiplos de 3 y
de 5 a la vez.
6. En una empresa de computadoras, los salarios de los empleados se van a aumentar según el
contrato actual:
Contrato Aumento %
$ 0.0 - $9,000.00 20
$9,001 – $15,000 10
$15,001 – $20,000 5
Más de $20,000 0

Calcular el nuevo salario del empleado, tomando en cuenta que son 4 empleados en el área de ventas.

Bibliografía

 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.
231
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Estructuras de Repetición en C#


[While y Dowhile]”
Objetivos

 Utilizar las estructuras de repetición para ejecutar instrucciones repetidas en una aplicación.
 Solucionar problemas con programas que integren la estructura de selección y estructuras repetitivas
While y Do while.

Introducción
Una estructura repetitiva permite ejecutar una instrucción o un conjunto de instrucciones varias veces.
Una ejecución repetitiva de sentencias se caracteriza por:
 Las sentencias que se repiten.
 El test o prueba de condición antes de cada repetición, que motivará que se repitan o no las
sentencias.
El bucle while
Repite la ejecución de una sentencia o de un grupo de sentencias mientras la condición que se evalúa
(al principio del bucle) sea verdadera.
Sintaxis:
while(condición_de_bucle)
{
Sentencias;
}
Representación gráfica de la No debemos confundir la representación gráfica de la estructura
estructura while: repetitiva while (Mientras) con la estructura condicional if (Si)
Funcionamiento:
 En primer lugar se verifica la condición, si la misma resulta
verdadera se ejecutan las operaciones que indicamos por la
rama del Verdadero.A la rama del verdadero la graficamos
en la parte inferior de la condición. Una línea al final del

232
bloque de repetición la conecta con la parte superior de la
estructura repetitiva.
 En caso que la condición sea Falsa continúa por la rama del Falso y sale de la estructura repetitiva
para continuar con la ejecución del algoritmo.
 El bloque se repite MIENTRAS la condición sea Verdadera.
Importante: Si la condición siempre retorna verdadero estamos en presencia de un ciclo repetitivo
infinito. Dicha situación es un error de programación, nunca finalizará el programa.

El bucle do while
La estructura do while es otra estructura repetitiva, la cual ejecuta al menos una vez su bloque repetitivo,
a diferencia del while o del for que podían no ejecutar el bloque. Esta estructura repetitiva se utiliza
cuando conocemos de antemano que por lo menos una vez se ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while o del for que está en
la parte superior.
Representación gráfica de la Funcionamiento:
estructura do while:  El bloque de operaciones se repite MIENTRAS que la
condición sea Verdadera.
 Si la condición retorna Falso el ciclo se detiene. En C#, todos
los ciclos repiten por verdadero y cortan por falso.
 Es importante analizar y ver que las operaciones se ejecutan
como mínimo una vez.

No hay que confundir los rombos de las estructuras condicionales con los de las estructuras repetitivas
do while.

Sintaxis:
do
{
Sentencias;
} while (condición de bucle);

233
Material y Equipo
 Guía de laboratorio #7.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Escriba un programa que lea 5 números desde teclado y presente la


Ejemplo1 sumatoria de los mismos. Hacer uso de la estructura repetitiva while.

1 {
2 [Link] = "Utilizando la estructura WHILE";
3 int contador = 1;
4 Double suma = 0;
5 int N;
6 Double prom;
7 while (contador <= 5)
8 {
9 [Link]("Ingrese un numero entero:[{0}] " , contador);
10 N = [Link]([Link]());
11 suma = suma + N;
12 contador = contador + 1;
13 }
14 [Link]("La suma de los 5 numeros ingresados es: " + suma);
15 prom = suma / 5;
16 [Link]("El promedio de los numeros ingresados es: " +
[Link](prom,3));
17 [Link]();
18 }

Corrida del ejercicio:

234
Programa que combina uso de for y do while. Esta aplicación captura
Ejemplo2 desde teclado los datos de uno o varios empleados y calcula el total
invertido en sueldos.
1 {
2 [Link] = "Utilizando la estructura DO WHILE";
3 int op, i, cantidad;
4 String nombre, ocupacion;
5 Double sueldo;
6 Double total = 0;
7 do
8 {
9 [Link]();
10 [Link]("Cuantos empleados va a registrar?");
11 cantidad = [Link]([Link]());
12 for (i=1; i<=cantidad; i=i+1)
13 {
14 [Link]("Ingrese el nombre del empleado[{0}]: ", i);
15 nombre = [Link]();
16 [Link]("Ingrese la ocupacion del empleado: ");
17 ocupacion = [Link]();
18 [Link]("Ingrese el sueldo: ");
19 sueldo = [Link]([Link]());
20 total = total + sueldo;
21 }
22 [Link]("\tEl total de dinero invertido en sueldos es:$ " + total);
23 [Link]("\tSi desea continuar, presione 1 sino presione 0");
24 op = [Link]([Link]());
25 } while (op == 1);
26 [Link]();
27 }

Corrida del ejercicio:

235
El numero primo
Ejemplo3 Convertir el siguiente algoritmo en código de C# que permite visualizar si un
número es primo o no lo es, recordando que un número primo es todo aquel
número que es divisible por sí mismo y por la unidad.
Por ejemplo:
1) 7 es primo porque solo se puede dividir entre 7 y entre 1.
2) 9 no es primo porque se puede dividir entre 9, 3 y 1, por lo tanto no es primo.
3) 13 es primo porque solo se puede dividir entre 13 y 1.
4) 27 no es primo porque se puede dividir entre 27, 9, 3, 1.

Sin olvidar que el operador MOD se refiere al módulo de una división entera y su símbolo es %.
Convertir el siguiente algoritmo en su correspondiente código en C#:
Inicio
Entero numero, contador, k
Leer (numero)
contador = 0
k = 1
Mientras k<= numero
Si ((numero MOD k) == 0) Entonces
contador = contador + 1
FinSi
k = k +1
FinMientras
Si contador == 2 Entonces
Escribir ("Es un numero Primo")
Sino
Escribir ("El numero no es primo")
FinSi
Fin

236
El numero perfecto
Ejemplo4 Convertir el siguiente algoritmo en código de C# que permite visualizar si al
digitar un número entero me diga si es perfecto o no, tomando en cuenta que:
Un número es perfecto si la suma de sus divisores menores a él es el mismo
número, por ejemplo:

1) 28 = 1+2+4+7+14
2) 496 = 1+2+4+8+16+31+62+124+248
3) 8128 = 1+2+4+8+16+32+64+127+254+508+1016+2032+4064
Sin olvidar que el operador DIV se refiere a división entera y su respectivo símbolo es /
Convertir el siguiente algoritmo en su correspondiente código en C#:
Inicio
Entero dato, k, suma
Leer (dato)
k = 1
suma = 0
Mientras (k <= (dato DIV 2))
Si ((dato MOD k) == 0) Entonces
suma = suma + k
FinSi
k = k + 1
FinMientras
Si (suma == dato) Entonces
Escribir ("Es numero perfecto...”)
Sino
Escribir ("No es perfecto...”)
FinSi
Fin

237
El Estadio el Manguito es uno de los estadios más importantes de Soyapango.
Ejemplo5 Este estadio tiene diversos sectores. El costo de la entrada a los partidos del
estadio se asigna en virtud de los sectores del estadio mediante la siguiente
tabla:
Sector Costo de la entrada
Sol Candente $3
Sol Luminoso $5
Sombrita $8
Tribunita $ 15
Silla Plástica $ 20

Se pide desarrollar un programa que permita seleccionar un sector del estadio, ingresar la cantidad de
entradas solicitadas y calcular el total a pagar por las entradas.

1 static void Main(string[] args)


2 {
3 [Link] = "Programa de entradas del Manguito";
4 int cantidad = 0;
5 String op;
6 Double precio = 0, total = 0;
7 [Link]("Hey que ondas aqui estas en el estadio El Manguito");
8 [Link]("Ingresa la cantidad de entradas requeridas: ");
9 cantidad = [Link]([Link]());
10 [Link]();
11 if (cantidad < 1)
12 {
13 [Link]("\t ERROR: La cantidad de entradas debe ser mayor que 1");
14 [Link]();
15 [Link](0);
16 }
17 [Link]();
18 [Link]("\t***************************************************");
19 [Link]("\t* BIENVENIDO AL ESTADIO EL MANGUITO *");
20 [Link]("\t***************************************************");
21 [Link]("\t* *");
22 [Link]("\t* SECTORES DEL ESTADIO *");
23 [Link]("\t* A- SOL CANDENTE *");
24 [Link]("\t* B- SOL LUMINOSO *");
25 [Link]("\t* C- SOMBRITA *");
26 [Link]("\t* D- TRIBUNITA *");
27 [Link]("\t* E- SILLA PLASTICA *");

238
28 [Link]("\t* *");
29 [Link]("\t***************************************************");
30 [Link]("");
31 [Link]("SELECCIONA LA LETRA DEL SECTOR DEL ESTADIO: ");
32 op = [Link]();
33 switch(op)
34 {
35 case "A": case "a":
36 [Link]("\t Sector seleccionado: Sol Candente");
37 precio = 3;
38 break;
39 case "B": case "b":
40 [Link]("\t Sector seleccionado: Sol Luminoso");
41 precio = 5;
42 break;
43 case "C": case "c":
44 [Link]("\t Sector seleccionado: Sombrita");
45 precio = 8;
46 break;
47 case "D": case "d":
48 [Link]("\t Sector seleccionado: Tribunita");
49 precio = 15;
50 break;
51 case "E": case "e":
52 [Link]("\t Sector seleccionado: Silla Plastica");
53 precio = 20;
54 break;
55 default:
56 [Link]("\t ERROR: El sector seleccionado no existe");
57 [Link]();
58 [Link](0);
59 break;
60 }
61 total = precio * cantidad;
62 [Link]("\t Precio Unitario: $" + precio);
63 [Link]("\t Cantidad de entradas: " + cantidad);
64 [Link]("\t Total a pagar: $" + total);
65 [Link]("\t Gracias por visitar el Manguito!");
66 [Link]();
67 }

239
NOTA:
Después de haber utilizado este sistema de entradas, se le contrata a su persona para que posea una
opción de SALIR, sin olvidar que, utilizando alguna estructura repetitiva se pueda obtener que el menú
de opciones siempre se encuentre activo hasta que el usuario decida salir del programa.

Star Wars:
Ejemplo6 Digitar este código y ejecutarlo para saber lo que realiza.

1 {
2 ConsoleKeyInfo op;
3 do
4 {
5 [Link](); //Limpiar la pantalla
6 [Link]("\t\t\t\tMenú \n");
7 [Link] = [Link];
8 [Link]("[A]Agregar\t");
9 [Link]("[E]Eliminar\t");
10 [Link]("[B]Buscar\t");
11 [Link]("[Esc]Salir\t\n\n");
12 [Link] = [Link];
13 [Link]("Seleccione opcion...");
14 op = [Link](true);//Que no muestre la tecla señalada
15 //métodos son acciones, las propiedades son valores
16 switch ([Link])
17 {
18 case ConsoleKey.A:
19 [Link]("Ud seleccionó la opción Agregar");
20 [Link]("Presione una tecla para continuar...");

240
21 [Link]();
22 break;
23 case ConsoleKey.E:
24 [Link]("Ud seleccionó la opción Eliminar");
25 [Link]("Presione una tecla para continuar...");
26 [Link]();
27 break;
28 case ConsoleKey.B:
29 [Link]("Ud seleccionó la opción Buscar");
30 [Link]("Presione una tecla para continuar...");
31 [Link]();
32 break;
33 case [Link]:
34 [Link]("Chao");
35 [Link]();
36 break;
37 }
38 } while ([Link] != [Link]);

Análisis de Resultados

1. Desarrolle un programa que presente el siguiente menú:


a) Seno de x.
b) Coseno de x.
c) Tangente de x.
d) Raiz cuadrada de x
e) Potencia de Yx
f) Verificar si un número es par o impar.
g) Salir del programa.
Consideraciones:
 El menú tiene que estar activo hasta que el usuario decida salir del programa.
241
 Cada vez que se seleccione una opción deberá realizar una limpieza de pantalla para más
orden en la aplicación.
 Se recomienda la utilización del switch case y la estructura repetitiva do while.
2. Que pida un número entero del rango entre 1 y 15 y muestre en pantalla el mismo número de
asteriscos.
3. Que pida dos números y muestre todos los números pares que van desde el primero al segundo. Se
debe controlar que los valores son correctos.

Investigación Complementaria
1. Se ingresan las temperaturas de cada dia de la semana, determinar e informar:
 Promedio de temperatura semanal
 La temperatura más fria y la más calurosa
 Porcentaje de temperaturas bajo cero
2. Supóngase que en una reciente elección hubo cuatro candidatos (con identificadores 1,2,3 y 4).
Usted habrá de encontrar, mediante un programa, el número de votos correspondiente a cada
individuo y el porcentaje que obtuvo respecto al total de los votantes. El usuario tecleara los votos
de manera desorganizada, tal y como se obtuvieron en la elección, el final de datos está representado
por un cero.
Observe, como ejemplo, la siguiente lista:
132342344121240
Donde 1 representa un voto para el candidato1, 3 un voto para el candidato3 y así sucesivamente.

Bibliografía
 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

242
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Funciones y Procedimientos en C#”.


Objetivos

 Utilizar la sintaxis de las funciones definidas por el usuario (programador) para resolver problemas.
 Identificar la diferencia entre una función y un procedimiento.

Introducción
Un problema complejo se puede dividir en pequeños subproblemas más sencillos. Estos subproblemas
se conocen como módulos y su implementación en un lenguaje se llama subprograma (procedimientos
y funciones). Un subprograma realiza las mismas acciones que un programa, sin embargo, vamos a
utilizar el subprograma o módulo para una acción u operación específica.
Un subprograma recibe datos de un programa y le devuelve resultados (el programa “llama” o “invoca”
al subprograma, éste ejecuta una tarea específica y devuelve el “control” al programa que lo llamó).
En C# a las funciones o procedimientos se le conocen con el nombre de métodos.

Métodos en C#

Función Procedimiento

Funciones (Retornan un valor)


En el ámbito de la programación, una función es un tipo de subalgoritmo, es el término para describir
una secuencia de órdenes que hacen una tarea específica de una aplicación más grande.
Las declaraciones de las funciones, generalmente son especificadas por:
 Un nombre único en el ámbito. Nombre de la función con el que se identifica y se distingue de
otras. No podrá ser otra función o procedimiento con ese nombre (salvo sobrecarga o polimorfismo
en programación orientada a objetos).

243
 Un tipo de dato de retorno. Tipo de dato del valor que la función devolverá al terminar su ejecución.
 Una lista de parámetros. Especificación del conjunto de argumentos (pueden ser cero uno o más)
que la función debe recibir para realizar su tarea.

Sintaxis de una Función.


Modificador de acceso_Tipo Devuelto_Nombre Funcion (tipo(s) argumento(s) nombres)
{
// declaración de datos y cuerpo de la función.
return (valor);
}

Procedimientos (No retornan valor)

Fragmento de código (subprograma) que realiza una tarea específica y es relativamente independiente
del resto del código. Los procedimientos suelen utilizarse para reducir la duplicación de códigos en un
programa.
Los procedimientos pueden recibir parámetros, pero no necesitan devolver un valor como es el caso de
las funciones.
Sintaxis Procedimiento
Modificador_de_acceso void Nombre_procedimiento(tipo(s)_argumento(s) nombres)
{
//declaración de datos y cuerpo de la función.
}

Material y Equipo
 Guía de laboratorio #8.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Programa que permite digitar un número entero positivo y me diga si es par o


Ejemplo1 impar.

1 {
2 //Inicio del programa principal

244
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = "Uso de un procedimiento";
7 int num;
8 [Link]("Digitar un numero entero positivo:");
9 num = [Link]([Link]());
10 Par(num);
11 [Link]("\n");
12 [Link]("-->Fin del programa");
13 [Link]();
14 }
15 static void Par(int a)
16 {
17 int x;
18 x = (a % 2);
19 if (x == 0)
20 {
21 [Link]("\nEs par");
22 }
23 else
24 {
25 [Link]("\nEs impar");
26 }
27 }

En nuestro segundo ejemplo, vamos a implementar un procedimiento que sea


Ejemplo2 capaz de realizar una suma y una resta.

1 static void Main(string[] args)


2 {
3 [Link] = "Trabajando con Procedimientos";
4 suma(); // llamando al procedimiento llamado suma
5 [Link]();
6 [Link]();
7 resta(); // llamando al procedimiento llamado resta
245
8 [Link]();
9 }
10
11 static void suma()
12 {
13 Double r, n1, n2;
14 [Link]("Digitar primera cantidad");
15 n1 = [Link]([Link]());
16 [Link]("Digitar segunda cantidad");
17 n2 = [Link]([Link]());
18 r = n1 + n2;
19 [Link]("El resultado de la suma es: " + r);
20 }
21
22 static void resta()
23 {
24 Double r, n1, n2;
25 [Link]("Digitar primera cantidad");
26 n1 = [Link]([Link]());
27 [Link]("Digitar segunda cantidad");
28 n2 = [Link]([Link]());
29 r = n1 - n2;
30 [Link]("El resultado de la resta es: " + r);
31 }

Corrida del programa1

Corrida del programa2

246
Programa que permite hacer conversión de monedas digitando una cantidad en
Ejemplo3 dólares, utilizando funciones.

1 {
2 //Inicia el programa principal
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = "Ejemplo3 utilizando la sintaxis de funciones";
7 Double x,p,r;
8 [Link]("Digitar la cantidad en dólares:");
9 x = [Link]([Link]());
10 // llamadas a las funciones
11 p = euros(x);
12 [Link]("Los {0} dolares son {1} euros ", x, p);
13 r = libras(x);
14 [Link]("Los {0} dolares son {1} libras ", x, r);
15 [Link]("\n");
16 [Link]("-->Fin del programa");
17 [Link]();
18 }
19 static Double euros(Double a)
20 {
21 Double g;
22 g = a * 1.15;
23 return g;
24 }
25 static Double libras(Double a)
26 {
27 Double v;
28 v = a * 3.15;
29 return v;
30 }

247
Utilización de un menú principal con la estructura Switch-Case y su facilidad al
Ejemplo4 unirse con los procedimientos

1 static void Main(string[] args)


2 {
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = "Ejemplo4 de Procedimientos en un menú";
7 Int32 num1, num2;
8 int opcion;
9 [Link]("\n MENU PRINCIPAL DE OPERACIONES MATEMATICAS:");
10 [Link]("\n");
11 [Link]("\tDigitar el primer número: ");
12 num1 = [Link]([Link]());
13 [Link]("\n");
14 [Link]("\tDigitar el segundo numero: ");
15 num2 = [Link]([Link]());
16 [Link]();
17 [Link]("\n MENU PRINCIPAL DE OPERACIONES MATEMATICAS:");
18 [Link] = [Link];
19 [Link]("\n ===============================================");
20 [Link]("\n");
21 [Link]("\t1) Mayor de los 2");
22 [Link]("\t2) Multiplo");
23 [Link]("\t3) Potencia");
24 [Link]("\n ===============================================");
25 [Link] = [Link];
26 [Link]("\n");
27 [Link]("\tDigitar la opción deseada [1..3]: ");
28 opcion = [Link]([Link]());
29 [Link]("\n");
30 switch (opcion)
31 {
32 case 1:
33 mayor(num1,num2);
34 break;
35 case 2:
36 multiplo(num1,num2);
37 break;
38 case 3:
39 potencia(num1,num2);
40 break;
41 default:

248
42 [Link]("\tSe ha equivocado de opcion, solo acepta[1..3]");
43 break;
44 }
45 [Link]("\n");
46 [Link]("\t-->Fin del programa");
47 [Link]();
48 }
49
50 static void mayor(Int32 a, Int32 b)
51 {
52 if (a > b)
53 {
54 [Link]("\tEl numero {0} es mayor que {1} ", a, b);
55 }
56 else
57 {
58 [Link]("\tEl numero {0} es mayor que {1} ", b, a);
59 }
60 }
61 static void multiplo(Int32 a, Int32 b)
62 {
63 Int32 w;
64 w = (a%b);
65 if (w == 0)
66 {
67 [Link]("\tEl numero {0} es multiplo de {1} ", a, b);
68 }
69 else
70 {
71 [Link]("\tEl numero {0} no es multiplo de {1} ", b, a);
72 }
73 }
74 static void potencia(Int32 a, Int32 b)
75 {
76 Double s;
77 s = [Link](a,b);
78 [Link]("\tEl numero {0} a la potencia de {1} es: {2}",a,b,s);
79 }

249
250
Análisis de Resultados
1. Crear un programa que solicite el año de nacimiento de una persona y retorne la edad haciendo
uso de procedimientos.
2. Desarrollar un programa que implemente una función para convertir coordenadas polares a
rectangulares. Debe tener en cuenta lo siguiente:
x = rcos(θ) ; y = rsen(θ)
3. Cree un programa que contenga el siguiente menú:
a) Dividir.
b) Obtener cubo.
c) Cálculo de IMC (Índice de Masa Corporal).
d) Salir.
Consideraciones:
 El menú debe permanecer disponible hasta que el usuario elija la opción d.
 Utilizar una función o procedimiento para cada opción.
 Para la opción d, utilice la fórmula: IMC = Peso[Kg] / Altura2[Metros].

Investigación Complementaria

1. Escribir un programa que lea dos números desde teclado (x y n) e implemente una función para
calcular la siguiente progresión:
1 + X + X2 + X3 +… + Xn
2. Escribir un programa que permita al usuario elegir el cálculo del área de cualquiera de las figuras
geométricas: circulo, cuadrado, rectángulo o triangulo, mediante procedimientos o funciones.
No se le olvide presentarlo en un menú.

Bibliografía

 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

251
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Vectores en C#”


Objetivos
 Introducir al estudiante a los conceptos de estructura de datos.
 Conocer la sintaxis de creación y definición de vectores.
 Conocer los tipos de vectores que se utilizan en la programación.
 Resolver problemas aplicando vectores.

Introducción

Los arreglos son estructuras de datos que consisten en elementos de datos del mismo tipo relacionados.
Los arreglos son entidades de longitud fija; conservan la misma longitud una vez que se crean, aunque
puede reasignarse una variable tipo arreglo de tal forma que haga referencia a un nuevo arreglo de
distinta longitud.
Arreglos
Un arreglo es un grupo de variables (llamadas elementos) que contienen valores y todos son del mismo
tipo. Recordemos que los tipos se dividen en dos categorías: por valor y por referencia.
Los elementos de un arreglo pueden ser tipos por valor o referencia. Para referirnos a un elemento en
especial dentro de un arreglo, especificamos el nombre de la referencia al arreglo y el número de la
posición de este elemento en el arreglo. Al número de la posición se le conoce como índice del elemento.
Una aplicación hace referencia a cualquier elemento del arreglo mediante una expresión de acceso al
arreglo, la cual incluye el nombre del arreglo, seguido el índice del elemento específico entre corchetes
([ ]). El primer elemento en cualquier arreglo tiene el índice cero, el cual se conoce como elemento cero.
En la figura siguiente, se muestra una ilustración de un arreglo:

 El nombre del arreglo anterior es C.


 El índice del elemento en el arreglo C se denota por: C[0], C[1], …, C[9].
 Si un arreglo tiene n posiciones, la última posición tiene el índice o subíndice n-1.

252
Declaración y Creación de Arreglos
Las instancias de los arreglos ocupan espacio en memoria. Al igual que los objetos, los arreglos se crean
con la palabra clave new. Para crear una instancia de un arreglo, se especifica el tipo y el número de
elementos del arreglo, y el número de elementos como parte de una expresión de creación de arreglos,
que utiliza la palabra clave new.
Dicha expresión devuelve una referencia que puede almacenarse en una variable tipo arreglo. La
siguiente expresión de declaración y creación de arreglos crea un objeto que contiene 12 elementos int,
y almacena la referencia al arreglo en la variable C.
int[ ] C = new int[12];
Cabe mencionar, que la expresión anterior puede dividirse en dos partes, así:
int [ ] C;
C = new int[12];

Material y Equipo
 Guía de laboratorio #9.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Se desea guardar los sueldos de 5 empleados de una fábrica X. Según lo


Ejemplo1 que hemos estudiado hasta el momento, deberíamos definir 5 variables si
queremos tener en un cierto momento los 5 sueldos almacenados en
memoria. Empleando un vector, solo se requiere definir un único nombre y
accedemos a cada elemento por medio del subíndice.
1 {
2 Double[] Sueldos = new Double[5];
3 for (int i = 0; i < 5; i++)
4 {
5 [Link]("Ingrese el sueldo del empleado" + (i + 1) + ":");
6 Sueldos[i] = [Link]([Link]());
7 }
8 Mostrar(Sueldos); // utilizando un procedimiento
9 [Link]();
10 }
11 static void Mostrar (Double[] Sueldos)
12 {
13 [Link]("Los sueldos ingresados son:");

253
14 for (int i=0;i<5;i++)
15 {
16 [Link]("\t" + Sueldos[i]);
17 }
18 }

En este ejemplo veremos cómo trabajar con un arreglo unidimensional que ha


Ejemplo2 sido previamente inicializado. Vamos a conocer la forma de especificar los
elementos que contiene la estructura de datos.
1 {
2 [Link] = "Ejemplo2 de vectores con la funcion Lenght";
3 Double SumaNotas = 0, Promedio;
4 Double[] Notas = { 10, 7.2, 8.5, 9.1, 6.5 };
5 String[] Alumnos = {"Juan Perez","Toño","Chepe","Rodrigo", "Marisol"};
6 for ( int i=0; i<[Link]; i++)
7 {
8 [Link]("\nLa nota de {0} es: {1}", Alumnos[i], Notas[i]);
9 }
10 for ( int i=0; i<[Link]; i++)
11 {
12 SumaNotas = SumaNotas + Notas[i];
13 }
14 Promedio = (SumaNotas / 5);
15 [Link]("-----------------------------------------");
16 [Link]("\n\tLa suma de todas las notas es: " + SumaNotas);
17 [Link]("\n\tEl promedio de las notas es: " + [Link](Promedio,2));
18 [Link]();
19 }

254
En este ejemplo, aprenderemos a encontrar el mayor elemento de un arreglo
Ejemplo3 así como también el menor elemento del mismo.

1 {
2 [Link] = "Ejemplo3 el mayor y menor en un vector";
3 int[] n;
4 int tam, menor, mayor;
5 [Link]("Dame el tamaño del vector");
6 tam = [Link]([Link]());
7 n = new int[tam];
8 for (int i = 0; i < tam; i++)
9 {
10 [Link]("Digite el elemento" + (i+1) + " : ");
11 n[i] = [Link]([Link]());
12 }
13 mayor = n[0];
14 menor = n[0];
15 for (int i = 0; i < tam; i++)
16 {
17 if (n[i] > mayor)
18 {
19 mayor = n[i];
20 }
21 else if (n[i] < menor)
22 {
23 menor = n[i];
24 }
25 }
26 [Link]("El menor de los elementos es: " + mayor );
27 [Link]("El mayor de los elementos es: " + menor);
28 [Link]();
29 }
255
A continuación presentamos varias operaciones que podemos realizar con un
Ejemplo4 vector de datos numéricos, como lo es: llenado de datos, buscar datos, mayor y
menor, sumatoria y promedio y sin olvidar lo más importante es utilizar el método
de la burbuja para el ordenamiento de los datos.

1 static void Main(string[] args)


2 {
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = "Programa que posee el método de la burbuja";
7 Double[] ventas = new Double[5];
8 int i,j;
9 Double resp, encontrado, promedio, suma, buscar, mayor, menor, aux;
10 //LLENADO DE VENTAS
11 for (i=0;i<5;i++)
12 {
13 [Link]("Posición número " + i +" de las ventas = $");
14 ventas[i] = [Link]([Link]());
15 }
16 [Link]("\n");
17 //IMPRIME LOS DATOS AÑADIDOS
18 for(i=0;i<5;i++)
19 {
20 [Link]("\t" + ventas[i]);
21 }
22 [Link]("\n");
23 //BUSCAR UNA VENTA
24 encontrado = 1;
25 resp = 0;
26 [Link]("\nDigitar la venta a buscar: $");
27 buscar = [Link]([Link]());
28 for(i=0;i<5;i++)

256
29 {
30 if (buscar == ventas[i])
31 resp = 1;
32 }
33 if (encontrado == resp)
34 {
35 [Link]("\nLa venta ${0} fue encontrada", buscar);
36 }
37 else
38 {
39 [Link]("\nLa venta ${0} no fue encontrada", buscar);
40 }
41 //MOSTRAR LA MAYOR Y LA MENOR VENTA
42 mayor=0;
43 menor=1000;
44 for(i=0;i<5;i++)
45 {
46 if (mayor < ventas[i])
47 mayor = ventas[i];
48 if (menor > ventas[i])
49 menor = ventas[i];
50 }
51 [Link]("\nLa mayor venta es: $" + mayor);
52 [Link]("\nLa menor venta es: $" + menor);
53 //LA SUMATORIA DE LAS VENTAS
54 suma = 0;
55 for(i=0;i<5;i++)
56 {
57 suma = suma + ventas[i];
58 }
59 [Link]("\nLa suma de las ventas es: $" + suma);
60 promedio=suma/5;
61 [Link]("\nEl promedio de las ventas es: $" +
[Link](promedio,3));
62 //REALIZA LA ORDENACION POR MEDIO DE LA BURBUJA
63 for(i=0;i<5-1;i++)
64 {//inicio de primer for
65 for(j=0;j<5-1;j++)
66 { //inicio del segundo for
67 if(ventas[j]>ventas[j+1])
68 { // inicio del if
69 aux=ventas[j];
70 ventas[j]=ventas[j+1];
71 ventas[j+1]=aux;
72 }// fin del if

257
73 }//fin del segundo for, el más interno, el de la j
74 }//fin del primer for
75 //IMPRIME LAS VENTAS ORDENADAS
76 [Link]("\nEl vector ordenado queda asi:");
77 [Link]("\n");
78 for(i=0;i<5;i++)
79 {
80 [Link]("\t $" + ventas[i]);
81 }
82 [Link]("\n");
83 [Link]();
84 }

Programa que permite digitar una oración y me muestra cuántas vocales y


Ejemplo5 espacios en blanco posee.

1 static void Main(string[] args)


2 {
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = "Ejemplo de vectores con letras";
7 //Escriba un programa que lea una cadena de texto y como resultado que
muestre el total de vocales y espacios en blanco que tiene la frase.
8 String nombre;
9 char caracter;

258
10 int i, vocales, espacios;
11 vocales = 0;
12 espacios = 0;
13 [Link]("\nIntroduzca una frase: ");
14 nombre = [Link]();
15 [Link]("\n");
16 [Link]("El tamaño de la oracion es de " + [Link] + "
caracteres");
17 [Link]("\n");
18 [Link]("------------------------------------------------------");
19 for (i = 0; i < [Link]; i++)
20 {
21 caracter = [Link]([Link](i, 1));
22 //búsqueda de espacios en blanco
23 if (caracter == ' ')
24 // al poner un espacio en blanco entre apostrofe significa espacio en blanco
25 espacios++;
26 //busqueda de vocales
27 if ((caracter == 'A') || (caracter == 'a'))
28 vocales++;
29 if ((caracter == 'E') || (caracter == 'e'))
30 vocales++;
31 if ((caracter == 'I') || (caracter == 'i'))
32 vocales++;
33 if ((caracter == 'O') || (caracter == 'o'))
34 vocales++;
35 if ((caracter == 'U') || (caracter == 'u'))
36 vocales++;
37 }
38 [Link]("\nEl total de espacios en blanco son " + espacios);
39 [Link]("\nEl total de vocales son " + vocales);
40 [Link]();

259
Programa que permite digitar los datos de 2 vectores y realiza la suma de ellos.
Ejemplo6

1 static void Main(string[] args)


2 {
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 [Link] = "Ejemplo7 Suma de Vectores";
7 //Programa que suma los elementos de 2 vectores
8 Double[] vector1 = new Double[5];
9 Double[] vector2 = new Double[5];
10 Double[] suma = new Double[5];
11 int i;
12 //LLENADO DEL VECTOR1
13 for (i = 0; i < 5; i++)
14 {
15 [Link]("Posición número " + (i+1) + " del vector1 = ");
16 vector1[i] = [Link]([Link]());
17 }
18 for (i = 0; i < 5; i++)
19 {
20 [Link]("\t" + vector1[i]);
21 }
22 [Link]("\n");
23 //LLENADO DEL VECTOR2
24 for (i = 0; i < 5; i++)
25 {
26 [Link]("Posición número " + (i+1) + " del vector2 = ");
27 vector2[i] = [Link]([Link]());
28 }
29 for (i = 0; i < 5; i++)
30 {
31 [Link]("\t" + vector2[i]);
260
32 }
33 [Link]("\n");
34 //REALIZA LA SUMA DE LOS VECTORES E IMPRIME EL RESULTADO
35 for (i = 0; i < 5; i++)
36 {
37 suma[i] = vector1[i] + vector2[i];
38 }
39 [Link]("\nLa suma de los vectores es:");
40 for (i = 0; i < 5; i++)
41 {
42 [Link]("\t" + suma[i]);
43 }
44 [Link]("\n");
45 [Link]();
46 }

Análisis de Resultados
1. De una lista de 9 notas almacenadas en un vector llamado Grado, se necesita saber cuántas notas
son igual a 8.5
2. Una planta que fabrica perfiles de hierro posee un lote de “n” piezas. Diseñar un programa que pida
ingresar la cantidad de piezas a procesar y luego ingresar la longuitud de cada perfil de hierro;
sabiendo que la pieza cuya longuitud este comprendida en el rango de 1.20 y 1.40 son aptas. Imprimir
por pantalla la cantidad de piezas aptas que hay en el lote.

261
3. Cargar un vector y solicitarle al usuario un valor que quiera buscar en un arreglo de una dimensión,
luego el programa debe decirle si se encuentra o no.
Si se encuentra, debe mostrarse la posición del elemento.
4. Realizar un programa para la empresa “T-Comunico” que solicite las ventas de recargas mensuales
de la tienda (durante 9 meses), luego muestre el mes en el que se realizo la venta mayor y la venta
menor, además del promedio y los meses que tienen ventas menores al promedio.
5. En una empresa trabajan “x” empleados cuyos sueldos oscilan entre $100 y $500, realizar un
programa que lea los sueldos que cobra cada empleado e informe cuantos empleados cobran entre
$100 y $300 y cuantos cobran mas de $350.
6. Desarrollar un programa que permita cargar 5 nombres de personas y sus edades respectivas. Luego
de digitar la información de todas las personas, se necesita imprimir los nombres de las personas
mayores de edad ( mayores o iguales a 18).

Investigación Complementaria
1. Desarrollar una aplicación que ordene los elementos de un vector de 7 números enteros (ascendente
y descendente).
2. Se dispone de una lista de las temperaturas de una ciudad en cada uno de los días de una
determinada semana.
Se desea calcular la temperatura mayor y menor de la semana.
3. De una lista de 6 precios almacenados en un vector llamado Mercadito, se necesita saber cuántos
precios son mayores a $25.
4. Definir un vector de 5 componentes de tipo Double que representen las alturas de 6 personas.
Obtener el promedio de las mismas. Contar cuantas personas son mas altas que el promedio y
cuantas mas bajas.
5. Una empresa tiene dos turnos ( mañana y tarde ) en los que trabajan 8 empleados ( 4 por la mañana
y 4 por la tarde ). Diseñar un programa que permita almacenar los sueldos de los empelados
agrupados por turno. Imprimir el total de sueldos por turno.
6. Se tienen las notas del primer parcial de los alumnos de dos cursos, el curso A y el curso B, cada
curso cuenta con 5 alumnos. Realizar un programa que muestre el curso que obtuvo el mayor
promedio general.

Bibliografía

 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

262
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Matrices y Cadenas en C#”.


Objetivos
 Implementar arreglos de dos dimensiones.
 Resolver problemas aplicando matrices.
 Mostrar la implementación y el uso de cadenas de texto.
 Identificar las funciones de tratamiento de cadenas en C#.

Introducción

Arreglos Multidimensionales

Los arreglos multidimensionales de dos dimensiones se utilizan con frecuencia para representar tablas
de valores, que consisten en información ordenada en filas y columnas.
Para identificar una tabla en particular debemos especificar dos índices. Por convención, el primero
identifica la fila del elemento y el segundo su columna.
Los arreglos que requieren dos índices para identificar un elemento específico se llaman arreglos
bidimensionales.

Sintaxis para declarar y crear los arreglos bidimensionales

Aprendamos la declaración de matrices a través de un ejemplo. Como recordamos, cuando trabajamos


con arreglos vamos a hacer uso de los signos de agrupación llamados corchetes, ya que con ello le
263
especificamos al compilador que estamos trabajando con variables de tipo arreglo que han sido
instanciados mediante la palabra clave new.
Los tipos de datos que se pueden utilizar en los arreglos son los que hemos estudiando en las prácticas
anteriores, por lo tanto en este ejemplo utilizamos un tipo de dato int:
int [,] b;
b = new int[ 3,4 ]
En el ejemplo anterior estamos creando una matriz de 3 filas y 4 columnas.
Al igual que en los arreglos de una dimensión se utilizaba un bucle (generalmente for) para cargar u
operar los elementos de un vector, así también en las matrices vamos a utilizar bucles, con la diferencia
que ahora utilizaremos un for para las filas y otro for para las columnas (for anidados).

Cadenas en C#
Una definición de cadena es la siguiente: Serie de caracteres tratados como una sola unidad.
Una cadena puede incluir letras, dígitos y varios caracteres especiales (+, -, *, /, $, entre otros). Una
cadena en C# es una matriz de caracteres que se declara utilizando la palabra clave String. Un literal de
cadena se declara utilizando las comillas, como se muestra en el siguiente ejemplo:

String S = “Estamos en la guía 10”;

Los objetos de cadena son inmutables, lo que significa que no se pueden cambiar una vez creados. Los
métodos que actúan sobre las cadenas, devuelven los nuevos objetos de cadena.
En muchas ocasiones es preciso trabajar con cadenas de caracteres en las diferentes aplicaciones que
se desarrollan, por eso es muy necesario conocer algunas de las funciones más utilizadas para el
tratamiento de estas estructuras.

264
Material y Equipo

 Guía de laboratorio #10.


 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Programa que carga una matriz de una dimensión establecida y muestra los
Ejemplo1 valores en pantalla.

1 {
2 [Link] = "Ejemplo1 de una matriz 3x4";
3 int[,] Matrix = new int[3,4];
4 //Cargar y visualizar una matriz
5 for (int x=0; x<3; x++) // for externo para filas
6 {
7 for (int y=0; y<4; y++) // for interno para columnas
8 {
9 [Link]("Ingrese el valor de la posición [" + x + "," + y + "]: ");
10 Matrix[x,y]=[Link]([Link]());
11 }
12 }
13 [Link]("\n");
14 [Link]("Ahora visualizamos la matrix digitada....");
15 Imprimir(Matrix);
16 [Link]();
17 }
18 static void Imprimir(int[,] Matrix)
19 {
20 for (int x=0; x<3; x++)
21 {
22 [Link]("\n");
23 for (int y=0; y<4; y++)
24 {
25 [Link]("\t" + Matrix[x,y] + "\t");
26 }
27 }
28 }

265
Programa que suma dos matrices de 2 x 3.
Ejemplo2

1 {
2 [Link] = "Ejemplo2 Sumando 2 matrices 2x3";
3 //Declarando las matrices
4 int[,] Matriz1 = new int[2,3];
5 int[,] Matriz2 = new int[2,3];
6 int[,] Matriz3= new int[2,3];
7 //Digitamos la primer matriz
8 [Link]("Digitamos la primer matriz [1]");
9 [Link]("\n");
10 for (int i = 0; i < 2; i++)
11 {
12 for (int j = 0; j < 3; j++)
13 {
14 [Link]("Ingrese el elemento [" + i + "," + j + "]: ");
15 Matriz1[i,j] = [Link]([Link]());
16 }
17 }
18 [Link]("\n");
19 //Digitamos la segunda matriz
20 [Link]("Digitamos la segunda matriz [2]");
21 [Link]("\n");
22 for (int i = 0; i < 2; i++)
23 {
24 for (int j = 0; j < 3; j++)
25 {
26 [Link]("Ingrese el elemento [" + i + "," + j + "]: ");
27 Matriz2[i, j] = [Link]([Link]());
28 }

266
29 }
30 [Link]("\n");
31 //Realizamos el cálculo de la suma de las 2 matrices
32 [Link]("Sumando las 2 matrices anteriores");
33 [Link]("\n");
34 for (int i = 0; i < 2; i++)
35 {
36 for (int j = 0; j < 3; j++)
37 {
38 Matriz3[i,j] = Matriz1[i,j] + Matriz2[i,j];
39 }
40 }
41 //Llamamos a un procedimiento para visualizar el resultado
42 Mostrar(Matriz3);
43 [Link]();
44 }
45 static void Mostrar(int[,] Matriz3)
46 {
47 for (int i = 0; i < 2; i++)
48 {
49 [Link]("\n");
50 for (int j = 0; j < 3; j++)
51 {
52 [Link]("\t" + Matriz3[i,j] + "\t");
53 }
54 }
55 }

267
Se tiene la siguiente información:
Ejemplo3

 Nombres de 4 operarios.
 Ingresos en concepto de sueldo, cobrado por cada operario, en los últimos 3 meses.
Realizar un programa para:
a. Realizar el ingreso de la información mencionada.
b. Generar un vector que contenga el ingreso acumulado en sueldos en los últimos 3 meses para
cada operario.
c. Mostrar por pantalla el total pagado en sueldos a todos los operarios en los últimos 3 meses.
d. Obtener el nombre del operario que tuvo el mayor ingreso acumulado

1 {
2 [Link] = [Link];
3 [Link] = [Link];
4 [Link] = "Ejemplo3 de matrices con vectores";
5 [Link]();
6 String[] empleados = new String[4];
7 int[,] sueldos = new int[4,3];
8 int[] sueldostot = new int[4];
9 int x = [Link];
10 [Link]("el valor de x es: " + x);
11 //Primera Parte
12 For (int f=0; f<x; f++)
13 {
14 [Link]("Ingrese el nombre del operario "+(f+1)+": ");
15 empleados[f] = [Link]();
16 int y = [Link](1); // devuelve el tamaño de la columna
17 for (int c=0; c<y; c++)
18 {
19 [Link]("Ingrese sueldo " + (c + 1) + ": ");
20 sueldos[f,c] = [Link]([Link]());
21 }
22 }
23 //Segunda Parte
24 int z = [Link](0); // devuelve el tamaño de la fila
25 for (int f=0;f<z;f++)
26 {
27 int suma=0;
28 int e = [Link](1);
29 for (int c=0;c<e;c++)
30 {
31 suma = suma + sueldos[f, c];
32 }
268
33 sueldostot[f] = suma;
34 }
35 //Tercera Parte
36 [Link]("\n");
37 [Link]("-----Estadistica de Sueldos-----");
38 [Link]("Total de sueldos pagados por Operario.");
39 for (int f = 0; f< [Link]; f++)
40 {
41 [Link](empleados[f] + " -> " + "\t $" + sueldostot[f]);
42 }
43 //Cuarta Parte
44 int may = sueldostot[0];
45 string nom = empleados[0];
46 for (int f = 0; f < [Link]; f++)
47 {
48 if (sueldostot[f] > may)
49 {
50 may = sueldostot[f];
51 nom = empleados[f];
52 }
53 }
54 [Link]("El operario con mayor sueldo es " + nom + " que tiene un
sueldo de $" + may);
55 [Link]();
56 }

269
Hacer un programa o algoritmo que permita eliminar un alumno de un salón de
Ejemplo4
clase, dada una posición indicada.
Por ejemplo tenemos una matriz 3 x 3
111
111
111
Y queremos eliminar la posición [0,2], nos daría la siguiente respuesta:
110
111
111

1 {
2 [Link] = "Ejemplo4 de Matrices";
3 [Link] = [Link];
4 [Link] = [Link];
5 [Link]();
6 int f,c;
7 int[,] M = new int[3,3];
8 [Link]("Digitamos la matriz");
9 [Link]("\n");
10 for(int i=0;i<3;i++)
11 {
12 for(int j=0;j<3;j++)
13 {
14 [Link]("Ingrese el elemento [" + i + "," + j + "]: ");
15 M[i, j] = [Link]([Link]());
16 }
17 }
18 [Link]("\n");
19 for (int i = 0; i < 3; i++)
20 {
21 [Link]("\t\t");
22 for (int j = 0; j < 3; j++)
23 {
24 [Link](M[i,j] + " ");
25 }
26 [Link]("\n");
27 }
28 [Link]("Ingrese la posicion del alumno a eliminar");
29 [Link]("Ingresa fila: ");
30 f = [Link]([Link]());
31 [Link]("Ingresa columna: ");
32 c = [Link]([Link]());
270
33 M[f,c]=0;
34 [Link]("\n");
35 for (int i = 0; i < 3; i++)
36 {
37 [Link]("\t\t");
38 for (int j = 0; j < 3; j++)
39 {
40 [Link](M[i, j] + " ");
41 }
42 [Link]("\n");
43 }
44 [Link]();
45 }

Función de comparación de cadenas Equals().


Ejemplo5
Este programa comprueba que el usuario y contraseña sean los correctos; de lo
contrario, al tercer intento cierra el programa.

1 static void Main(string[] args)


2 {
3 Login();
4 [Link]();
5 }

271
6 static void Login()
7 {
8 String Usuario = "user";
9 String Password = "123456";
10 [Link] = "L O G I N";
11 // Con la siguiente funcion mostramos fecha y hora del sistema
12 [Link]("Fecha y hora del sistema: [" + [Link]() + "]");
13 [Link]();
14 for (int i = 0; i < 3; i++)
15 {
16 [Link]();
17 [Link]("Intento: [" + (i + 1) + "]");
18 [Link]("Usuario: ");
19 String User = [Link]();
20 [Link]("Contraseña: ");
21 String Pass = [Link]();
22 if (([Link](Usuario)) && ([Link](Password)))
23 {
24 [Link]("\n");
25 [Link]("BIENVENID@ AL PROGRAMA.... ");
26 break;
27 }
28 else
29 {
30 [Link]("\n");
31 [Link]("Saliendo del programa...intente más tarde...");
32 }
33 }
34 }

272
En este ejemplo, utilizamos la función Replace() para sustituir un carácter
Ejemplo6
específico por otro carácter.
1 {
2 String cadena, cambio, opcion;
3 do
4 {
5 [Link]();
6 [Link]("Escribe una oracion: ");
7 cadena = [Link]();
8 cambio = [Link]("a", "*");
9 [Link]("\t" + cambio);
10 [Link]("Desea ingresar otra oracion? (s/n)");
11 opcion = [Link]();
12 } while (opcion=="S" || opcion=="s");
13 [Link]();
14 }
15 }

En este ejemplo vamos a desarrollar una pequeña aplicación que verifica si una
Ejemplo7
frase ingresada es palíndroma. Una frase palíndroma es aquella que se lee igual
de izquierda a derecha y viceversa.

1 {
2 [Link] = "Digitar una palabra para averiguar si es palindroma";
3 String op;
4 do
5 {
6 [Link]();
7 Palindroma();
8 [Link]("Desea verificar otra frase? (s/n)");
9 op = [Link]();
10 } while (op == "S" || op == "s");
11 [Link]();
12 }
13 static void Palindroma()
14 {

273
15 String cadena1 = "", cadena2 = "";
16 [Link]("Escribe una palabra: ");
17 cadena1 = [Link]();
18 for (int i = [Link] - 1; i >= 0; i--)
19 {
20 cadena2 = cadena2 + cadena1[i];
21 }
22 [Link]("La cadena invertida es: " + cadena2);
23 if ([Link](cadena1, cadena2))
24 {
25 [Link]("La cadena " + cadena1 + " es palindroma...");
26 }
27 else
28 {
29 [Link]("La cadena " + cadena1 + " no es palindroma...");
30 }
31 }
32 }

Funciones para convertir cadenas a mayúsculas y minúsculas. Además utilizamos


Ejemplo8
la función que calcula el número de caracteres de una frase cualquiera (incluye
espacios en blanco como caracteres).
1 {
2 [Link] = "Programa que convierte una oración";
3 String cad1, cad2, cad3;
4 int largo;
5 [Link]("Digitar una frase que tenga letras mayúsculas y
minúsculas: ");
6 cad1 = [Link]();
7 // la siguiente función calcula el número de caracteres
8 largo = [Link];
9 [Link]("La frase [" + cad1 + "] tiene [" + largo + "]
caracteres.");
10 // la siguiente función convierte la frase a letras minúsculas
11 cad2 = [Link]();
12 [Link]("La frase en letras minúsculas es : " + cad2);
13 // la siguiente función convierte la frase a letras minúsculas
14 cad3 = [Link]();
15 [Link]("La frase en letras mayúsculas es : " + cad3);
16 [Link]();
17 }
18 }

274
Análisis de Resultados

1. Desarrollar una aplicación que pida al usuario la dimensión de una matriz, la cargue y le diga cuántos
de los elementos ingresados fueron positivos, negativos y ceros.
2. Desarrollar una aplicación que busque el mayor y el menor elemento en una matriz.
3. Escriba un programa que realice la captura de datos de una matriz de números enteros con (3x4)
elementos y luego saque el promedio de la matriz.
4. Comparar dos cadenas de caracteres haciendo uso de la función Compare().
5. Concatenar cuatro cadenas de caracteres utilizando la función Concat().
6. Invertir los elementos de un vector tipo String.

Investigación Complementaria
1. Desarrollar una aplicación utilizando funciones o procedimientos para buscar cualquier elemento
dentro de una matriz y mencione además la posición en donde se encuentra.
2. Utilizando un vector tipo carácter y una matriz numérica, realice un programa que lea los nombres
de un grupo de alumnos y 3 notas, almacena las notas en la matriz. Calcule el promedio para cada
alumno y luego muestre el listado de los alumnos con las notas respectivas.

Bibliografía

 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

275
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Estructuras en C#”.


Objetivos
 Conocer el concepto de estructura y cómo se utilizan en C#.
 Conocer las operaciones con estructuras y sus aplicaciones.
 Desarrollar programas utilizando estructuras.

Introducción

En el desarrollo de aplicaciones se necesita trabajar con diferentes tipos de datos asigndos dependiendo
del tipo de información con la que se trabaja. En clases anteriores, se ha trabajado con la primera
estructura de datos: los arreglos.
Dicha estructura permite trabajar con una colección de elementos del mismo tipo; sin embargo, hay
problemas que requieren la utilización de varios tipos de datos que describen una misma entidad.
¿Qué es una entidad?
Una entidad es todo aquello que se puede describir. La descripción puede hacerse en términos de
atributos y métodos.
Definició[Link] estructura es un tipo de valor que se suele utilizar para encapsular pequeños grupos
de variables relacionadas. Las variables que se agrupan no necesariamente deben ser del mismo. Un
registro o estructura se define con la palabra clave struct.
¿Qué pueden contener las Estructuras?
 Constructores, Constantes, Campos.
 Métodos, Propiedades, Indizadores.
 Operadores, Eventos, Tipos anidados
Para declarar una estructura, se utiliza la siguiente sintaxis:
Modificador_Acceso struct Nombre_Estructura
{
Miembros; // Variables, Funciones y/o Procedimientos.
}
En C#, primero deberemos declarar cual va a ser la estructura de nuestro registro, lo que no se puede
hacer dentro de “Main”. Mas adelante, ya dentro de “Main”, podremos declarar variables de ese nuevo
tipo.
276
Los datos que forman un “struct” pueden ser publicos o privados. Por ahora, a nosotros nos interesará
que sean accesibles desde el resto de nuestro programa, por lo que les añadiremos delante la palabra
“public” para indicar que queremos que sean publicos.

Ya desde el cuerpo del programa, para acceder a cada uno de los datos que forman el registro, tanto
asi queremos leer su valor como si queremos cambiarlo, se debe indicar el nombre de la variable y el
del dato ( o campo) separados por un punto.
En este contexto, al operador punto lo llamaremos operqador de acceso, ya que permitira acceder a
cada uno de los miembros que formn parte de la estructura, es decir, podremos acceder a las variables.

¿Cómo se realiza el acceso a los miembros de una estructura?


Variable_tipo_estructura.nombre_del_miembro.

Material y Equipo
 Guía de laboratorio #11.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Forma de capturar y mostrar datos utilizando estructuras.


Ejemplo1

1 class Program
2 {
3 struct Estudiante
4 {
5 public String Nombre;
6 public int Edad;
7 public String Colegio;
8 public int Tel;
9 }
10 public static void Main(string[] args)
11 {
12 [Link] = "Primer ejemplo de estructuras";
13 String Opcion;
14 Estudiante Objeto = new Estudiante();
15 int Op;
277
16 do
17 {
18 [Link]();
19 [Link]("==========================");
20 [Link](" Menu Principal ");
21 [Link]("1. Registrar");
22 [Link]("2. Mostrar");
23 [Link]("3. Salir");
24 [Link]("==========================");
25 [Link]("\n");
26 [Link]("Digitar su opcion (1-3)?");
27 Op = [Link]([Link]());
28 switch (Op)
29 {
30 case 1:
31 [Link]();
32 [Link]("INGRESE LA INFORMACION DEL ESTUDIANTE");
33 [Link]("\nDigite su Primer Nombre y Primer Apellido: ");
34 [Link] = [Link]();
35 [Link]("\nSu Edad: ");
36 [Link] = [Link]([Link]());
37 [Link]("\nColegio donde estudio su Bachillerato: ");
38 [Link] = [Link]();
39 [Link]("\nTelefono: ");
40 [Link] = [Link]([Link]());
41 break;
42 case 2:
43 [Link]();
44 [Link]("INFORMACION DEL ESTUDIANTE");
45 [Link]("Nombre: " + [Link]);
46 [Link]("Edad: " + [Link]);
47 [Link]("Colegio: " + [Link]);
48 [Link]("Telefono: " + [Link]);
49 break;
50 case 3:
51 [Link](0);
52 break;
53 }
54 [Link]("\n");
55 [Link]("\tDesea continuar? (S/N)");
56 Opcion = [Link]();
57 } while (Opcion == "s");
58 [Link]();
59 }
60 }

278
Productos en un almacen.
Ejemplo2

1 {
2 struct vendedor
3 {
4 public String producto1;
5 public String producto2;
6 public String producto3;
7 public int cantidad1;
8 public int cantidad2;
9 public int cantidad3;
10 public Double precio1;
11 public Double precio2;
12 public Double precio3;
13 public Double d1,d2,d3,sub,iva,total;
14 }
15 static void Main(string[] args)
16 {
17 [Link] = [Link];
18 [Link] = [Link];
19 [Link]();
20 [Link] = " Almacen Aqui todo es barato baratus brother ";
21 vendedor chispa = new vendedor();
22 [Link]("Digite el nombre del primer producto");
23 chispa.producto1 = [Link]();
24 [Link]("Digite el nombre del segundo producto");
25 chispa.producto2 = [Link]();
26 [Link]("Digite el nombre del tercer producto");
27 chispa.producto3 = [Link]();
28 [Link]("Digite el precio del primer producto");
29 chispa.precio1 = [Link]([Link]());
30 [Link]("Digite el precio del segundo producto");
31 chispa.precio2 = [Link]([Link]());
32 [Link]("Digite el precio del tercer producto");
33 chispa.precio3 = [Link]([Link]());
34 [Link]("Digite la cantidad del primer producto");
35 chispa.cantidad1 = [Link]([Link]());
36 [Link]("Digite la cantidad del segundo producto");
37 chispa.cantidad2 = [Link]([Link]());
38 [Link]("Digite la cantidad del tercer producto");
39 chispa.cantidad3 = [Link]([Link]());
40 chispa.d1 = chispa.cantidad1 * chispa.precio1;
41 chispa.d2 = chispa.cantidad2 * chispa.precio2;
42 chispa.d3 = chispa.cantidad3 * chispa.precio3;
279
43 [Link] = chispa.d1 + chispa.d2 + chispa.d3;
44 [Link] = [Link] * 0.13;
45 [Link] = [Link] - [Link];
46 [Link]("Vamos a imprimir los resultados de las ventas, dale
enter para seguir");
47 [Link]();
48 [Link]();
49 [Link]("----------------------------------------------------");
50 [Link]("-- Impresion de datos --");
51 [Link]("Cantidad \tProducto \t\tPrecio \tTotalitos ");
52 [Link]("\n");
53 [Link](chispa.cantidad1+"\t"+chispa.producto1+"\t\t\t"+chispa.precio1+"\t"
+ chispa.d1);
54 [Link]("\n");
55 [Link](chispa.cantidad2+"\t\t"+chispa.producto2+"\t\t\t"+chispa.precio2 +
"\t" + chispa.d2);
56 [Link]("\n");
57 [Link](chispa.cantidad3 + "\t\t" + chispa.producto3 + "\t\t\t" +
chispa.precio3 + "\t" + chispa.d3);
58 [Link]("\n");
59 [Link]("\t\t\t\t\tSubTot" + "\t"+[Link]([Link],2));
60 [Link]("\n");
61 [Link]("\t\t\t\t\tIVA" + "\t"+[Link]([Link],2));
62 [Link]("\n");
63 [Link]("\t\t\t\t\tTotal" + "\t"+[Link]([Link],2));
64 [Link]("\n-->Fin del programa");
65 [Link]();
66 }
67 }

Arreglos de Estructuras.
Ejemplo3

1 class Program
2 {
3 struct Persona
4 {
5 public String Nombre;
6 public int Edad;
7 public String Direccion;
8 }
9 public static void Main(string[] args)
10 {
11 [Link] = "Ejemplo2 de estructuras";
12 int max;
13 [Link]("¿Digitar la cantidad de personas?");

280
14 max = [Link]([Link]());
15 Persona[] Acceso = new Persona[max]; //Acceso es la variable timbre
16 [Link]("\n");
17 for (int i = 0; i < max; i++)
18 {
19 [Link]("Persona con ID:[" + (i + 1) + "]");
20 [Link]("Nombre: ");
21 Acceso[i].Nombre = [Link]();//timbre con la variable Nombre
22 [Link]("Edad: ");
23 Acceso[i].Edad = [Link]([Link]());//timbre con la variable Edad
24 [Link]("Direccion: ");
25 Acceso[i].Direccion = [Link]();//timbre con la variable Direccion
26 [Link]("\n");
27 }
28 [Link]();
29 [Link]("Las personas digitadas son:");
30 [Link]("\n");
31 for (int i = 0; i < max; i++)
32 {
33 [Link]("Persona con ID:[" + (i + 1) + "]");
34 [Link]("Nombre:" + Acceso[i].Nombre);
35 [Link]("Edad: " + Acceso[i].Edad);
36 [Link]("Direccion:" + Acceso[i].Dirreccion);
37 [Link]("--------------------------------------");
38 }
39 [Link]();
40 }
41 }

Estructuras Anidadas. En ocasiones se trabajara con datos o campos que


Ejemplo4
provienen de varias estructuras, entonces lo que se hace es introducir una
estructura dentro de otra. Veamos el siguiente ejemplo:
1 class Program
2 {
3 struct programa
4 {
5 public String Universidad;
6 public String Carrera;
7 }
8 struct Estudiante
9 {
10 public String nombre;
11 public int edad;
12 public programa Estudios;
281
13 }
14 static void Main(string[] args)
15 {
16 [Link]="Ejemplo3 de estructuras anidadas";
17 Estudiante student = new Estudiante();
18 //Entrada de datos
19 [Link]("Ingrese Nombre: ");
20 [Link] = [Link]();
21 [Link]("Edad: ");
22 [Link] = [Link]([Link]());
23 [Link]("Carrera: ");
24 //Accedemos a miembros de otra estructura
25 [Link] = [Link]();
26 [Link]("Universidad: ");
27 [Link] = [Link]();
28 [Link]();
29 [Link]("Mostrando datos: ");
30 [Link]("Estudiante: " + [Link]);
31 [Link]("Edad: " + [Link]);
32 [Link]("Carrera: " + [Link]);
33 [Link]("Universidad: " + [Link]);
34 [Link]();
35 }
36 }

Estructuras y Procedimientos.
Ejemplo5

1 class Program
2 {
3 struct Alumno
4 {
5 public String carnet;
6 public String Nombre;
7 public void Mostrar(Alumno X)
8 {
9 [Link]("\nNombre: " + [Link]);
10 [Link]("\nCarnet: " + [Link]);
11 }
12 }
13 public static void Main()
14 {
15 Alumno Var = new Alumno();
16 int op, O;
17 [Link] = "Ejemplo4 Utilizando procedimientos y estructuras";

282
18 do
19 {
20 [Link]();
21 [Link]("=======================");
22 [Link](" MENU ");
23 [Link]("\n");
24 [Link](" [Link].");
25 [Link](" [Link].");
26 [Link]("\n");
27 [Link]("=======================");
28 [Link]("Digitar la opcion (1-2)");
29 op = [Link]([Link]());
30 switch (op)
31 {
32 case 1:
33 [Link]();
34 [Link]("Nombre: ");
35 [Link] = [Link]();
36 [Link]("Carnet: ");
37 [Link] = [Link]();
38 break;
39 case 2:
40 [Link]();
41 [Link](Var);
42 break;
43 }
44 [Link]("Si desea continuar regresar al menú presione 1, para
finalizar presione 2");
45 O = [Link]([Link]());
46 } while (O == 1);
47 [Link]();
48 }
49 }

283
Análisis de Resultados
Desarrollar las siguientes aplicaciones en C#.
1. Modifique el ejemplo 4 para que acepte más de un registro.
2. Un "struct" que almacene datos de una canción en formato MP3: Artista, Título, Duración (en
segundos),Tamaño del fichero (en KB). Un programa debe pedir los datos de una canción al
usuario, almacenarlos en dicho "struct" y después mostrarlos en pantalla.
3. Un “struct” que guarde los datos de n vehículos.
Los datos a solicitar son los siguientes:
Placa, Color, Año, Marca, Modelo, Propietario.
El programa debe solicitar los datos al usuario y mostrarlos haciendo uso de un procedimiento.

Investigación Complementaria
Desarrolle un programa haciendo uso de estructuras que simule una agenda. La aplicación debe solicitar
los datos y mantenerlos en tiempo de ejecución ( el programa debe estar activo hasta que se escoja la
opción de Salir).
Los datos que se deben solicitar son los siguientes:
Nombre, DUI, Dirección, Teléfono, Email, Profesión u Oficio.
El menú debe tener las opciones:
1. Ingresar Datos.
2. Mostrar Datos.
3. Buscar Persona.
4. Salir
En la opción 3, debe buscar por DUI, ya que es un dato que es único para cada usuario, al encontrar
dicha persona el programa debe mostrar los datos encontrados.

Bibliografía

 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

284
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Archivos en C#”.


Objetivos
 Conocer la forma de transferencia de información en C#.
 Aprender las operaciones de lectura y escritura de archivos.
 Desarrollar aplicaciones utilizando almacenamiento permanente

Introducción

En las aplicaciones que se han desarrollado hasta el momento, los datos únicamente los manejamos
en tiempo de ejecución, es decir, una vez cerrada la aplicación los datos que fueron cargados en
memoria se pierden.
Es necesario tener un respaldo de toda la información que se maneja, por eso ahora se incluye el tema
de archivos.
Un archivo se conoce como un elemento para almacenar información de manera permanente; dichos
archivos pueden ser .txt, .doc, entre otros.
La manera de almacenar y recuperar información que perdure en el tiempo se basa en el uso de
“memoria secundaria”, compuesta esencialmente unidades externas como CD, DVD, Memorias USB,
entre otros tipos de almacenamiento.
Streams
La lectura y escritura a un archivo son hechas usando un concpeto 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 de Visual Studio, se encuentran varias
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 direcciones posibles:
 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 una fuente externa, entonces se habla de
escribir desde el stream.

285
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 ordenador.
 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, se incluyen las clases de
tipo Reader y Writer.
Existen tres tipos de operaciones:

Métodos
ReadLine().
Al igual que el conocido [Link](), este método lee una línea completa de un archivo d etexto
hasta el cambio de línea mas pró[Link] igual que su equivalente de consola, StreamReader() no
incluye en ele string el carácter de cambio de linea.
String Linea = [Link]()

ReadToEnd()
Este método, por su parte, se encarga de acumular la información que hay desde la lectura anterior
( que pudo haberse hecho con ReadLine, por ejemplo ) hasta el final del archivo, todo con el mismo
string.
String Linea = [Link]()

Read()
Finalmente, el método simple Read() se encarga de leer un carácter qa la vez, lo que permite procesar
símbolo por símbolo el contenido del archivo. Convenientemente, este método reconoce el cambio d
elinea y se lo salta como si no existiese. Cuando se encuentra con el fin del archivo, retorna un valor (-
1), considerando que su retorno es siempre un int ( y no un chart).
int Carácter = [Link]()

286
Este mismo método ofrece una declaración alternativa (sobrecarga), donde es posible leer una
cantidad específica de caracteres y almacenarlos en un arreglo de enteros.
Lógica de los Archivos:

Material y Equipo
 Guía de laboratorio #12.
 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Vamos a desarrollar una sencilla aplicación para conocer cómo crear, escribir y
Ejemplo1
leer archivos de texto.

1 using System;
2 //Se incluya la librería de entrada / salida
3 //Para poder utilizar las clases de lectura / escritura
4 using [Link];
5 using [Link];
6 using [Link];
7 using [Link];
8 using [Link];
9 namespace Archivos_Ejemplo1
10 {
11 class Program
12 {
13 static StreamReader Leer;
14 static StreamWriter Escribir;
15 static void Main(string[] args)
16 {
17 [Link] = "Primer ejemplo de archivos en C#";
18 int Op;
19 String Cadena;
20 [Link]("Digite 1 para crear y escribir sobre un archivo.");
21 [Link]("Digite 2 para leer un archivo.");
22 Op = [Link]([Link]());
287
23 if(Op==1)
24 {
25 Escribir = new StreamWriter("[Link]", true);
26 [Link]("Digitar Mensaje de prueba:");
27 Cadena = [Link]();
28 [Link](Cadena);
29 [Link]("Escritura exitosa...");
30 [Link]();
31 }
32 if(Op==2)
33 {
34 Leer = new StreamReader("[Link]", true);
35 Cadena = [Link]();
36 [Link]("\tLo leido del archivo es: " + Cadena);
37 [Link]();
38 }
39 [Link]();
40 }
41 }
42 }

Lectura – Escritura
Ejemplo2

1 using System;
2 using [Link];
3 using [Link];
4 using [Link];
5 using [Link];
6 using [Link];
7 namespace Archivos_Ejemplo2
8 {
288
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 [Link] = "Segundo ejemplo en uso de archivos";
14 String Mensaje, Opcion;
15 do
16 {
17 TextWriter archivo = new StreamWriter("[Link]", true);
18 [Link]("Ingrese un mensaje para escribir en el archivo....");
19 Mensaje = [Link]();
20 [Link](Mensaje);
21 [Link]();
22 [Link]();
23 [Link]("Los datos se han guardado correctamente...");
24 [Link]("Vamos a leer el contenido del archivo");
25 //Creamos objeto de lectura
26 TextReader Leer = new StreamReader("[Link]");
27 //Utilizamos ReadToEnd para leer todo lo que tiene el archivo de texto
28 [Link]([Link]());
29 [Link]();
30 [Link]("Desea ingresar otro texto al archivo de datos (S/N)");
31 Opcion = [Link]();
32 } while (Opcion =="S" || Opcion == "s");
33 [Link]();
34 }
35 }
36 }

Lectura – Escritura – Abrir Archivo (Con estructuras)


Ejemplo3

1 using System;
2 using [Link];
3 using [Link];
4 using [Link];
5 using [Link];
6 using [Link];
7 using [Link];
8 namespace Archivos_Ejemplo3
9 {
10 class Program
11 {
12 struct Persona
13 {

289
14 public String Nombre;
15 public int Edad;
16 public String Direccion;
17 }
18 static StreamWriter Escribir;
19 static StreamReader Leer;
20 static void Main(string[] args)
21 {
22 [Link] = "Tercer ejemplo de archivos con estructuras";
23 int i = 0, contador = 0;
24 String Opcion, Linea;
25 //Creamos el objeto de tipo estructura
26 Persona Acceso = new Persona();
27 //Objeto para escribir sobre el archivo
28 do
29 {
30 [Link]();
31 Escribir = new StreamWriter("[Link]", true);
32 [Link]("Persona con ID:[" + (i + 1) + "]");
33 [Link]("Nombre:");
34 [Link] = [Link]();
35 [Link]("Edad:");
36 [Link] = [Link]([Link]());
37 [Link]("Direccion:");
38 [Link] = [Link]();
39 //Escribimos sobre el archivo
40 [Link]("Persona con ID:" + (i + 1));
41 [Link]("Nombre: " + [Link]);
42 [Link]("Edad: " + [Link]);
43 [Link]("Direccion: " + [Link]);
44 [Link]("----------------------------------");
45 i++;
46 [Link]();
47 [Link]("Desea ingresar otro registro? (S/N)");
48 Opcion = [Link]();
49 if (Opcion == "N" || Opcion == "n")
50 {
51 [Link]("[Link]");
52 }
53 } while (Opcion == "S" || Opcion == "s");
54 //Creamos objeto para leer desde el archivo
55 Leer = new StreamReader("[Link]");
56 while ((Linea = [Link]()) != null)
57 {
58 [Link](Linea);

290
59 contador++;
60 }
61 [Link]();
62 [Link]();
63 }
64 }
65 }

291
Análisis de Resultados

Desarrollar los siguientes programas en C#:


1. Un “struct” que almacene datos de una canción en formato mp3: artista, titulo, duración ( en
segundos), tamaño del archivo (en Kb). Diseñar un programa que permita pedir los datos de una
canción al usuario, almacenarlos en dicho “struct” y después mostrarlos en pantalla. Además, toda
la información debe almacenarla en un archivo.
2. Diseñar un “struct” que almacene en un archivo los datos de una cantidad “n” de vehículos. Los datos
a solicitar son los siguientes: placa, color, año, marca, modelo, propietario. El programa debe solicitar
los datos al cliente y mostrarlos haciendo uso de un procedimiento.
Además, toda la información debe almacenarla en un archivo.

Investigación Complementaria
1. Desarrolle un programa haciendo uso de estructuras que simule una agenda. La aplicación debe
solicitar los datos y mantenerlos en tiempo de ejecución (el programa debe estar activo hasta que
se escoja la opción de Salir). Los datos que se deben solicitar son los siguientes:
Nombre, DUI, Dirección, Teléfono, Email, Profesión u Oficio.
El menú debe tener las opciones:
1. Ingresar Datos.
2. Mostrar Datos.
3. Buscar Persona.
4. Salir
En la opción 3, debe buscar por DUI, ya que es un datos que es único para cada usuario, al
encontrar dicha persona el programa debe mostrar los datos encontrados.
Para esta aplicación se requiere obligatoriamente el uso de archivos.

Bibliografía
 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

292
Facultad: Ingeniería
Escuela: Ingeniería en Computación
Asignatura: Programación Estructurada

Tema: “Punteros en C#”.


Objetivos

 Conocer el concepto de punteros y su aplicación en C#.


 Desarrollar aplicaciones en C# utilizando punteros.
 Utilizar este tipo especial de variable y su uso en el desarrollo de aplicaciones con gestión
dinámica de memoria.

Introducción

Punteros
Los punteros son un tipo especial de variables que tiene direcciones de memoria como sus valores. Por
ser una variable, aunque de tipo especial, su declaración no varia de gran forma con lo estudiado hasta
el momento.
Sintaxis:
<tipo_de_dato> * <nombre_puntero>;
El tipo de dato de una variable de tipo puntero se corresponde con el tipo de dato de la variable a la que
apunta. Los punteros pueden ser inicializados cuando son declarados o en un enunciado de la
asignación. Pueden ser inicializados a 0, Null o a una dirccion especifica ( cuyo formato se presenta en
hezadecimal); un puntero con un valor Null apunta a nada.
Para declarar un puntero debe utilizarse un tipo de datos:
int *ptrentero;
float *ptrreal;
char *ptrdireccion;
Si se desea declarar varios punteros en una misma línea de código, C# permite hacerlo de la siguente
manera:
int* p1, p2, p3;
Luego, no se podra utilizar un puntero declarado int con variables de tipo char o Double. La idea anterio
significa que los punteros deben declararse del mismo tipo de dato al cual apuntan. En un programa
pueden aparecer errores en tiempo de ejecución y advertencias en tiempo de compilación cuando se

293
define un puntero a determinado tipo de dato y a continuación, se utiliza para apuntar a algún otro tipo
de dato.
Para entender los punteros y los vectores, es necesario primero conocer como se almacenan los
números en la memoria del ordenador. El valor de cada variable en un programa de ordenar se guarada
en una sección de memoria cuyo tamaño esta determinado por el tipo de dato de la variable.
La localización de esta sección de memoria es almacenada en la dirección de la variable.
Por tanto, es asi como si cada variable estuviera compuesta de dos partes: su valor y su dirección de
memoria. Cada celda de memoria se puede considerar de una parte con el contenido y la otra parte que
se almacena en la dirección.
Las direcciones se representan normalmente por un número hexadecimal, pudiendo contener un
carácter, un entero o un real ( aunque en realidad todos son almacenados como números binarios, lo
cual es más entendible para la máquina a la hora de compilar los programas ).
Una forma de acceder a la información de una variable es por medio de una segunda variable que
contiene la dirección de la variable la que se pretende acceder. Este tipo de variable se conoce como
apuntador o puntero.

Operadores para Punteros


 El operador de dirección (&) es un operador unario que devuelve la dirección de memoria de
su operando.
 El operador de indireccón (*) regresa el valor del objeto hacia el cual se apunta.
Por ejemplo:
int y = 5;
int *puntero;
La instrucción: puntero=&y asigna la dirección de la variable “y” a la variable del apuntador puntero.
Entonces, se dice que puntero “apunta a y”.
Ahora, puntero hace referencia de manera indirecta al valor de la variable y observe que el & de la
instrucción de asignación anterior no es el mismo que el & de una declarcion de variable de apuntador,
el cual siempre es precedido por el nombre del tipo de dato.
Código Inseguro (Unsafe Code)
Con unsafe code o código inseguro nos referimos a una región de código en la que se esta permitida
la declaración y operaciones con punteros. La palabra clave para marcar un método, miembro o bloque
es unsafe.

294
Ejecutar una aplicación en modo inseguro (unsafe)
Dado que los punteros manipulan la memoria de nuestro ordenador, para cada aplicación que
vayamos a ejecutar vamos a activar la ejecución en modo inseguro, la cual la activamos de la
siguiente manera: (suponga que nuestro proyecto se llama G13 Ejemplo1)
1) Clic en la propiedades del proyecto:

2) Ahora, se abre la siguiente ventana, en la cual tenemos que chequear la opción de Generar* y
despues a opcion de Permitir código no seguro

3) Guardamos los cambios y pasemos a nuestro código.


4) Ahora, en vez de utilizar el static void Main (string[] args) vamos a utilizar el tipo de
método inseguro (recordemos que estamos trabajando con referencias de memoria):
unsafe static void Main (string[] args).
295
A continuación se muestran ejemplos de declaraciones de tipos de puntero:

Material y Equipo

 Guía de laboratorio #13.


 Computadora con Visual Studio 2013 o superior.
 Dispositivo de almacenamiento (USB).

Procedimiento

Programa que ejemplifica el uso de punteros y direcciones de memoria.


Ejemplo1

1 using System;
2 using [Link];
3 using [Link];
4 using [Link];
5 namespace G13_Ejemplo1
6 {
7 class Program
8 {
9 unsafe static void Main(string[] args)
10 {
11 int Valor;
12 int* puntero = null;
13 puntero = &Valor;
14 [Link] = "Trabajando con punteros en C#";
15 [Link]("Digite un valor entero: ");
16 Valor = [Link]([Link]());
17 [Link]("\nEl numero ingresado es: " + Valor);
18 [Link]("El valor al que apunta el puntero es: "
+ (int)*puntero);
19 [Link]("La direccion de memoria de la variable Valor es:"
+ (int)puntero);

296
20 [Link]();
21 }
22 }
23 }

En este programa se pasa la variable Num, utiizando llamada por referencia ( se


Ejemplo2
pasa la dirección de memoria de la variable ) al procedimiento Raíz, al cual lle
damos como argumento una variable de tipo puntero *Ptr.
1 using System;
2 using [Link];
3 using [Link];
4 using [Link];
5 namespace G13_Ejemplo2
6 {
7 class Program
8 {
9 unsafe static void Raiz(Double* Ptr)
//procedimiento que accede al valor recibido a través de un puntero
10 {
11 [Link]("\nLa raiz cuadrada de [" + *Ptr + "] es: " +
[Link](*Ptr));
12 }
13 unsafe static void Main(string[] args)
14 {
15 [Link] = "Funciones con paso por referencia";
16 String Op;
17 Double Num;// declaracion de variable normal
18 Double* Ptr = null; // declaracion e inicializacion de puntero
19 do
297
20 {
21 [Link]();
22 [Link]("Escribir un numero para extraer la raiz cuadrada: ");
23 Num = [Link]([Link]());
24 Raiz(&Num);// damos la direccion de memoria como parametro al procedimiento
25 [Link]("¿Desea calcular otra raiz [S/N]: ");
26 Op = [Link]();
27 } while (Op == "s" || Op == "S");
28 [Link]();
29 }
30 }
31 }

Este programa muestra la forma de incrementar por valor e incrementar por


Ejemplo3
referencia
1 using System;
2 using [Link];
3 using [Link];
4 using [Link];
5 namespace G13_Ejemplo3
6 {
7 class Program
8 {
9 unsafe static void IncrementarPorValor(int n)
10 {
11 n = n + 1;
12 [Link]("Al aplicar incremento por valor obtenemos: " + n);
13 }
14 unsafe static void IncrementarPorReferencia(int* n)

298
15 {
16 *n = *n + 1;
17 [Link]("Al aplicar incremento por referencia obtenemos: " + *n);
18 }
19 unsafe static void Main(string[] args)
20 {
21 [Link] = "Ejemplo3 con punteros";
22 int Op;
23 int n;
24 do
25 {
26 [Link]();
27 [Link]("Digitar un valor entero: ");
28 n = [Link]([Link]());
29 IncrementarPorValor(n);
30 [Link](" ");
31 IncrementarPorReferencia(&n);
32 [Link]("\n¿Incrementar otro valor? [1=si / 2=no]");
33 Op = [Link]([Link]());
34 } while (Op == 1);
35 [Link]();
36 }
37 }
38 }

299
Análisis de Resultados

Desarrollar las siguientes aplicaciones en C#.


1) Dado el siguiente vector Vec[ ] = {1, 2, 3, 4, 5, 6, 7}, utilizar una variable de tipo puntero para
imprimir los elementos del vector.
2) Escribir un programa que permita cargar un vector de longitud 10. El programa debe mostrar los
elementos ordenados. Use punteros.

Investigación Complementaria

Utilizar punteros en los siguientes problemas:


1) Desarrollar un programa que lea una cadena de texto y mostrar en pantalla el numero de vocales
que tiene dicho texto.
2) Desarrollar un programa que lea dos vectores con datos enteros y utilizando punteros generar un
tercer vector con la sumatoria d elos vectores cargados anteriormente.

Bibliografía
 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

300

También podría gustarte