Practica nro. 2 Programación Orientada a Objetos
2.1. Estructuras de control Veremos todas las estructuras de control antes de ingresar a ver los objetos Se dividen en dos partes: 2.1.1 Estructuras condicionales Ciclo if La forma general del if es:
la condición puede ser cualquier expresión que devuelve true o false. Por ejemplo:
Ejemplo
Condicional else La condición else se ejecuta cuando la condición del if se evalúa como falsa Sintaxis:
if aninado También puedes incluir o anidar declaraciones dentro de un if. Por ejemplo:
Puede anidar un número ilimitado de sentencias if-else. Por ejemplo:
Ciclo switch Se utiliza para agilizar la toma de decisiones múltiples; trabaja de la misma manera que lo harían if, else, else if. A cada valor se le llama case, y la variable se enciende cuando comprueba el caso. Por ejemplo:
default case En una instrucción switch, el caso opcional default es ejecutado cuando ninguno de los casos anteriores es encontrado. Ejemplo:
2.1.2 Estructuras Repetitivas Ciclo for Bucle for ejecuta un conjunto de instrucciones un número específico de veces sintaxis: for (Init; condición; incremento) { //sentencia } Un contador se declara una vez en init. La condición evalúa el valor del contador y bucle se ejecuta si la condición es verdadera. el buble para cuando la condición se hace falsa Por ejemplo:
Los operadores aritméticos compuestos pueden utilizarse para controlar más iteraciones del bucle. Por ejemplo:
Los Estados init y el incremento pueden ser declarados afuera del for, pero recuerda que el punto y coma es obligatorio. Por ejemplo:
También puedes tener las instrucciones de incremento en el cuerpo del bucle:
Ciclo while Un ciclo while ejecuta un bloque de código mientras una condición dada sea verdadera. Por ejemplo, el siguiente código muestra los números del 1 al 5:
Podemos acortar el ejemplo anterior, incrementando el valor de num justo en la condición:
Ciclo do while Un ciclo do-while es similar al ciclo while, excepto que do-while se ejecutará al menos una vez. Por ejemplo:
do-while vs while Si la condición del do-while se evalúa como false, la declaración se ejecutará una vez:
break Otro uso de break es en los bucles: cuando se encuentra la instrucción break dentro de un bucle, el bucle se termina inmediatamente. Por ejemplo:
Continue la sentencia continue es similar a la instrucción break, pero en vez de terminar el bucle completo, salta la iteración actual del bucle y continúa con la siguiente iteración. Por ejemplo:
Por ejemplo, si se quiere mostrar el texto “Bienvenido” para personas mayores de 18 años y con dinero
Con todos los operadores puedes unir tantas condiciones como quieras. Operador AND Es True si todas las condiciones son verdaderas
Operador OR Es True si al menos una condición es verdadera
Operador NOT el operador logico NOT (!) revierte el estado lógico de una condición. Así, si una condición es true el operador la hace falsa y viceversa.
2.2. Arreglos En C# llamamos arreglo a una colección de objetos, dicha colección tiene longitud definida y esta no puede cambiar con el flujo del programa, esto podrá sonar limitante, pero al trabajar con arreglos se obtiene un mejor desempeño que con cualquier otra colección. Usando el lenguaje podemos crear, recorrer y manipular arreglos de cualquier tipo de objeto.
2.2.1 Arreglos Unidimensionales Comenzando por lo más básico, los arreglos unidimensionales son colecciones lineales, que nos pueden ayudar a representar una secuencia numérica, letras del alfabeto o un cromosoma dentro de un programa de algoritmos genéticos, entre muchas otras otras. Instanciación Para crear un arreglo haremos uso de la palabra reservada new y los corchetes cuadrados [ ], también es necesario conocer el tamaño que necesitaremos, puesto que como ya lo mencioné, no es posible cambiar el tamaño una vez creado:
Si creamos arreglos de esa manera, cada posición tendrá el valor por default del tipo de dato del arreglo… bueno, mejor usamos nuestro ejemplo: El arreglo de vocales contendrá 5 \0, que es el valor por default de un char. El arreglo conteo contendrá 10 0, que es el valor por default de un entero. El arreglo misObjetos contendrá 3 null, que es el valor por default de un object. Además de la instanciación tradicional, también podemos emplear la instanciación de colecciones, la cual nos permite inicializar un arreglo asignándole valores inmediatamente:
como podemos ver, tenemos varias opciones para inicializar arreglos unidimensionales: 1. new char[5] { ..., nos permite indicar el tamaño y el tipo explícitamente y posteriormente indicar los valores, si cambiáramos el 5 por un 7sin aumentar la cantidad de valores obtendríamos un error de compilación.
2. new int[] { 1, 2, ..., nos permite indicar solamente el tipo de dato de los elementos, la cantidad es inferida por el compilador, en este caso podemos incrementar o reducir la cantidad de elementos al momento de inicializar sin ningún problema. 3. { "3", 1, 99.99 }, al inicializar de esta manera estamos dejandole al compilador la tarea de inferir tanto el tipo de dato del arreglo como la cantidad de elementos que contiene. Dicho sea de paso, el declarar un arreglo así puede resultar un poco confuso de leer. Acceso a los elementos Una vez instanciado, podemos acceder a los elementos del arreglo usando nuevamente los corchetes cuadrados [ ] y el índice del elemento al que queremos acceder. Nota importante los arreglos están indizados en 0 es decir, el primer elemento de un arreglo está en el índice 0. Retomemos los arreglos del ejemplo pasado. Para acceder a la a dentro del arreglo vocales debemos acceder a la posición 0:
O, digamos que queremos reemplazar la i por una t:
Propiedades y métodos A pesar de que los arreglos implementan la interfaz IList, con todo y sus propiedades, la única rescatable para los arreglos unidimensionales es la propiedad Length (o LongLength si metemos más de 2^32-1 elementos en el arreglo), que nos devuelve la longitud del arreglo:
Posdata Sin importar su contenido, los arreglos siempre son tipos por referencia, por lo que es posible tener las siguientes líneas de código:
2.2.2 Arreglos Bidimensionales Los arreglos escalonados (o jagged arrays) son los tipos de arreglos multidimensionales más conocidos, y es que también son comunes en otros lenguajes de programación. Un arreglo escalonado no es más que un arreglo de arreglos. Instanciación Para crear estos arreglos de arreglos, tenemos una sintaxis similar a la creación de arreglos unidimensionales, con [ ] para cada dimensión:
Acá es importante notar que al instanciar un arreglo multidimensional de esta manera únicamente estamos indicando el tamaño de la primera dimensión, 3 en el caso de gato, 3 también para rubik y 2 para escalera. Es tarea nuestra inicializar los arreglos interiores:
Con los arreglos escalonados no hay nada que nos prohíba crear arreglos internos de dimensiones iguales a la de arreglo que las contiene, es más, podemos crear arreglos internos de distintos tamaños en la misma dimensión, hagamos algo con nuestro arreglo escalera:
Con estos arreglos de arreglos también podemos usar la instanciación de colecciones:
Acceso a los elementos
De nueva cuenta, y por tratarse de arreglos, usaremos los [ ] para acceder a los elementos de nuestros arreglos, de tal manera que es posible escribir algo como esto:
2.3. Funciones y Procedimientos Todas las instrucciones deben estar incluidas en un procedimiento o función, a las que llamaremos mediante su identificador. A estas funciones y procedimientos podemos pasarles parámetros. En C# tenemos 4 tipos: 1. Los procedimientos que ejecutan un código a petición sin devolver ningún resultado. 2. Las funciones que ejecutan un código y devuelven el resultado al código que las llamó. 3. Los procedimientos de propiedades que permiten manejar las propiedades de los objetos creados. 4. Los procedimientos de operador utilizados para modificar el funcionamiento de un operador cuando se aplica a una clase o una estructura.
2.3.1 Que son las funciones La función devuelve un resultado al código invocante. La ejecución de return provoca la salida de la función.
Programa que permite hacer conversión de monedas digitando una cantidad en dólares, utilizando funciones. 1. static void Main(string[] args) 2. { 3. //Inicia el programa principal 4. Console.ForegroundColor = ConsoleColor.Black; 5. Console.BackgroundColor = ConsoleColor.White; 6. Console.Clear(); 7. Console.Title = "Ejemplo utilizando la sintaxis de funciones"; 8. Double x,p,r; 9. Console.WriteLine("Digitar la cantidad en dólares:"); 10. x = Double.Parse(Console.ReadLine()); 11. // llamadas a las funciones 12. p = euros(x); 13. Console.WriteLine("Los {0} dolares son {1} euros ", x, p); 14. r = libras(x); 15. Console.WriteLine("Los {0} dolares son {1} libras ", x, r); 16. Console.WriteLine("\n"); 17. Console.WriteLine("-->Fin del programa"); 18. Console.ReadKey(); 19. } 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
static Double euros(Double a) { Double g; g = a * 1.15; return g; } static Double libras(Double a) { Double v; v = a * 3.15; return v; }
2.3.2. Que son los Procedimientos La visibilidad de un procedimiento viene determinada por la declaración private, public o internal. Por defecto si no se indica nada se entiende que es public.
Programa que permite digitar un número entero positivo y me diga si es par o impar. 1 static void Main(string[] args) 2 { 3 //Inicio del programa principal 4 Console.ForegroundColor = ConsoleColor.Black; 5 Console.BackgroundColor = ConsoleColor.White; 6 Console.Clear(); 7 Console.Title = "Uso de un procedimiento"; 8 int num; 9 Console.WriteLine("Digitar un numero entero positivo:"); 10 num = Convert.toInt32(Console.ReadLine()); 11 Par(num); 12 Console.WriteLine("\n"); 13 Console.WriteLine("-->Fin del programa"); 14 Console.ReadKey(); 15 } 16 //Aqui termina el programa principal 17 static void Par(int a) 18 { 19 int x; 20 x = (a % 2); 21 if (x == 0) 22 { 23 Console.WriteLine("\nEs par"); 24 } 25 Else 26 { 27 Console.WriteLine("\nEs impar"); 28 } 29 }
Ejercicios para Desarrollar Ejemplos de estructuras condicionales 1. Ingresar por teclado n notas y debe listar los aprobados y desaprobados 2. Ingresar por teclado 5 números y mostrar solo los números primos 3. Ingresar un numero de 5 digitos y debe mostrar en pantalla el numero de decenas, centenas, miles, etc. 4. ingresar al siguiente menú. Y debe mostrar el total de lista1 y la lista2 donde debe hallar al ganador en porcentajes. Menu 1. Elija lista 1 2. Elija lista 2 3. Otra vez 4. Ver totales 5. salir 5. Ingresar por teclado un número del menú la opción 6(donde mostrara el total de alumnos ingresados y el total por cada carrera) solo saldrás del ciclo cuando presione 7 1. epis 2. epie 3. epia 4. epic 5. epii 6. ver totales 7. salir Ejemplos de estructuras repetitivas 1. Generar n números de un rango de 5 a 100 y debe mostrar en pantalla los números primos 2. Generar n números hallar la media, la moda, la desviación standard. 3. Generar n notas mayores de 0 y menores o iguales a 20 y debe mostrar en un cuadro resumen cuantos están aprobados y cuantos están jalados. 4. Generar 10000 números de 1 al 500 y debe mostrar en pantallas los numeros repetidos y cuantas veces se han repetido 5. Generar n alumnos y generar sus edades de 16 a 30 y mostrar en pantalla los que son mayores de edad y los que son menores de edad. Ejemplos de Arreglos 1. Generar 50 numeros almacenarlos en un arreglo y debe mostrar en pantalla los pares al lado izquierdo y los impares al lado derecho(no debe permitir 0) 2. Almacenar en un arreglo las vocales y en otro las consonantes y debe elegir en un menú Si hace clic en 1. Debe elegir aleatoriamante una vocal(desde la a hasta la u) y luego la opción 2 para elegir aleatoriamente una consonante y asi sucesivamente hasta mostrar un nombre aleatoriamente. Menú crear nombre 1. Variable 2. Consonante 3. Ver nombre 4. salir 3. generar un arreglo de n numeros y debe ver el siguiente menú Menu 1. Generar arreglo 2. ver lista de arreglos 3. ver y buscar un numero de la lista
4. salir 4. Crear un arreglo n frutas y debe generar en una cadena todas las frutas en una sola línea 5. Generar 3 arreglos con las siguientes Menu 1. Arreglo 1 numeros menores a 20 2. Arrelgo 2 numeros entre 20 a 50 3. Arreglo 3 numeros entre 30 a 60 4. Mostrar la unión del 2 y3 5. Mostrar la intersección 1 y 2 6. Mostrar la suma de 1 y 3 7. salir Ejemplos de funciones y procedimientos 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. 4. 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 5. 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ú 6. El usuario introducirá un primer número entero positivo (de no más de 6 cifras) que indicará la cantidad de casos de prueba. Después seguirán varias líneas, cada una con un número entero positivo (de no más de 15 cifras). Para cada uno de esos casos de prueba, tu programa debe mostrar el número, un espacio en blanco, un signo de igualdad, otro espacio en blanco y los factores primos de ese número (repetidos si es el caso), cada uno de ellos con un espacio en blanco a continuación.
7. El mínimo común múltiplo de varios números es el menor número que es múltiplo de todos ellos a la vez. Por ejemplo, el mcm de 3 y 7 es 21, el de 4 y 12 es 12, y el de 9 y 12 es 36. El usuario introducirá tres números enteros (positivos, de no más de 5 cifras), uno en cada línea. Tu programa debe mostrar el mínimo común múltiplo de esos tres números.