Sei sulla pagina 1di 9

INSTITUTO TECNOLGICO DE POCHUTLA.

PROGRAMACION ORIENTADA A OBJETOS.

ANTELMA VAZQUEZ CARMONA.

ESTRUCTURA DE CONTROL DE C#.

NELSON ROMERO MNDEZ

SAN PEDRO POCHUTLA OAXACA A 18 DE FEBRERO DEL 2013.


Las estructuras de control de C# son similares a las de C y C++. La diferencia ms notable radica en que la instruccin condicional if y los ciclos while y do estn controlados por una expresin lgica (tipo Boolean). Esta restriccin hace que las instrucciones sean ms seguras al evitar posibles fuentes de error, o al menos, facilitan la legibilidad del cdigo. Por ejemplo, en la siguiente instruccin (vlida en C++): if (a) la expresin a podra ser una expresin boolean pero tambin de tipo int, char, float *... y la condicin se evala como true cuando a es distinto de cero (valor entero 0, carcter 0 puntero nulo, en los ejemplos). En C# se clarifica esta ambigedad y slo se admiten expresiones lgicas. De esta manera, la instruccin anterior ser vlida slo cuando a sea una expresin boolean. A modo de resumen, las caractersticas propias de las estructuras de control de C# son: goto no puede saltar dentro de un bloque (da igual, de todas formas no lo usaremos NUNCA). switch funciona como en Pascal (no como en C). Se aade una nueva estructura de control iterativa: foreach. Estructuras condicionales if, if-else La estructura condicional tiene la sintaxis clsica, con la diferencia indicada anteriormente acerca del tipo de la expresin. Si debe ejecutar ms de una instruccin, se encierran en un bloque, delimitado por las llaves { y }. Si slo se acta cuando la condicin es cierta: if (a > 0) if (a > 0) { Console.WriteLine ("Positivo"); Console.WriteLine ("Positivo"); ContPositivos++; } namespace Ejemplo_MVA { class Program { static void Main(string[] args) { int edad = 0; System.Console.WriteLine("Ingresa tu edad"); edad = System.Convert.ToInt32(System.Console.ReadLine()); if (edad >= 18 && edad >= 0) {

System.Console.WriteLine("Es mayor de edad"); } else if (edad < 0) { System.Console.WriteLine("Es incorreta la edad"); } else System.Console.WriteLine("Es menor de edad"); System.Console.ReadKey(); } } } Si se acta cuando la condicin es falsa se emplea la palabra reservada else: if (a > 0) if (a > 0) { Console.WriteLine ("Positivo"); Console.WriteLine ("Positivo"); else ContPositivos++; Console.WriteLine ("No Positivo"); } else { Console.WriteLine ("No Positivo"); ContNoPositivos++; } Puede escribirse una instruccin condicional dentro de otra instruccin condicional, lgicamente: if (a > 0) { Console.WriteLine ("Positivo"); ContPositivos++; } else { if (a < 0) { Console.WriteLine ("Negativo"); ContNegativos++; } else { Console.WriteLine ("Cero"); ContCeros++; } } La concordancia entre if y else se establece de manera sencilla: cada else se asocia al ltimo if que no tenga asociado un bloque else. switch La estructura de seleccin mltiple switch funciona sobre cualquier tipo predefinido (incluyendo string) o enumerado (enum) y debe indicar explcitamente cmo terminar cada caso (generalmente, con break en situaciones "normales" throw en situaciones "anormales", aunque es posible -pero no recomendable- emplear goto case return ): using System; class HolaMundoSwitch { public static void Main(String[] args) { if (args.Length > 0) switch(args[0]) { case "Jos":

Console.WriteLine("Hola Jos. Buenos das"); break; case "Paco": Console.WriteLine("Hola Paco. Me alegro de verte"); break; default: Console.WriteLine("Hola {0}", args[0]); break; } else Console.WriteLine("Hola Mundo"); } } Especificar los parmetros al programa en Visual Studio: Utilizar el explorador de soluciones para configurar las propiedades del proyecto.

Un ejemplo que usa un datos string para controlar la seleccin: using System; namespace ConsoleApplication14 { class Class1 { static int Test(string label) { int res; switch(label) { case null: goto case "A"; // idem case "B" o case "A" case "B": case "C": res = 1; break; case "A": res = 2; break; default: res = 0; break; } return res; } static void Main(string[] args) { Console.WriteLine (Test("")); // 0 Console.WriteLine (Test("A")); // 2 Console.WriteLine (Test("B")); // 1 Console.WriteLine (Test("C")); // 1 Console.WriteLine (Test("?")); // 0 Console.ReadLine(); } } } Estructuras repetitivas

Las estructuras repetitivas de C# (while, do...while, for) no presentan grandes diferencias respecto a las de otros lenguajes, como C++. La aportacin fundamental es la de la estructura iterativa en colecciones foreach. while int i = 0; while (i < 5) { ... i++; } do...while int i = 0; do { ... i++; } while (i < 5); for int i; for (i=0; i < 5; i++) { ... } foreach Un ciclo foreach itera seleccionando todos los miembros de un vector, matriz u otra coleccin sin que se requiera explicitar los ndices que permiten acceder a los miembros. El siguiente ejemplo muestra todos los argumentos recibidos por el programa cuando se invoca su ejecucin (argumentos en la lnea de rdenes): public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); } El vector (la coleccin) que se utiliza para iterar es args. Es un vector de datos string. El ciclo foreach realiza tantas iteraciones como cadenas contenga el vector args, y en cada iteracin toma una y la procesa a travs de la variable de control s. El ejemplo siguiente realiza la misma funcin: public static void Main(string[] args) { for (int i=0; i < args.Lenght; i++) Console.WriteLine(args[i]); } El ciclo foreach proporciona acceso de slo lectura a los elementos de la coleccin sobre la que se itera. Por ejemplo, el cdigo de la izquierda no compilar, aunque el de la derecha s lo har (v es un vector de int): foreach (int i in v) for (int i=0;i<v.Length;i++) i *= 2; v[i] *= 2;

El ciclo foreach puede emplearse en vectores y colecciones. Una coleccin es una clase que implementa el interfaz IEnumerable. Sobre las colecciones dicutiremos ms adelante. Saltos goto Aunque el lenguaje lo permita, nunca escribiremos algo como lo que aparece a continuacin: using System; namespace DemoGoto { class MainClass { static void Busca(int val, int[,] vector, out int fil, out int col) { int i, j; for (i = 0; i < vector.GetLength(0); i++) for (j = 0; j < vector.GetLength(1); j++) if (vector[i, j] == val) goto OK; throw new InvalidOperationException("Valor no encontrado"); OK: fil = i; col = j; } static void Main(string[] args) { int [,] coleccion = new int [2,3] {{1,0,4},{3,2,5}}; int f,c; int valor = Convert.ToInt32(args[0]); Busca (valor, coleccion, out f, out c); Console.WriteLine ("El valor {0} esta en [{1},{2}]", valor,f,c); Console.ReadLine(); } } } break Lo usaremos nicamente en sentencias switch. continue Mejor no lo usamos. return Procuraremos emplearlo slo al final de un mtodo para facilitar la legibilidad del cdigo.

Hasta ahora hemos visto programas muy simples con una serie de pasos secuenciales. En ellos no se comprueban valores para tomar decisiones, en funcin de las entradas, por ejemplo. En esta seccin vamos a estudiar las estructuras de control de C#, tanto las condicionales como los bucles. Estructuras condicionales: if Al igual que en otros lenguajes de programacin, tendremos varias posibilidades para comprobar una condicin:

comprobar una condicin y en funcin de sta realizar una accin comprobar una condicin y en funcin de sta realizar una accin u otra (excluyentes)

comprobar varias condiciones para realizar varias acciones diferentes (excluyentes) Esta estructura es muy parecida a la utilizada en C. La sintaxis de la instruccin if es la siguiente: if (expresin) { instruccin o bloque de intrucciones 1; } [else { instruccin o bloque de intrucciones 2; }] El programa evala la expresin. Cuando esta expresin resulta verdadera, se ejecuta la instruccin o el bloque de instrucciones 1. Por contra, cuando es falsa de ejecuta la instruccin o bloque de instrucciones 2. Esta ltima parte es opcional. Para representar una estructura de varios casos se utilizar la sintaxis siguiente: if (expresin 1) { instruccin o bloque de instrucciones 1; } else if (expresin 2) { instruccin o bloque de instrucciones 2; } else if (expresin 3) { instruccin o bloque de instrucciones 3; } else { intruccin o bloque de instrucciones 4; } Veamos un ejemplo del uso del if/else using System; class condicionalIF { public static void Main() { string myInput; int myInt; Console.Write("Please enter a number: "); myInput = Console.ReadLine(); myInt = Int32.Parse(myInput); // comparacin para una toma de decisin SIMPLE if (myInt > 0) { Console.WriteLine("el nmero {0} es mayor que cero", myInt); } // comparacin para una toma de decisin SIMPLE if (myInt < 0) Console.WriteLine("el nmero {0} es menor que cero", myInt); // comparacin para tomar UNA DE DOS decisiones if (myInt != 0) { Console.WriteLine("el nmero {0} es distinto de cero", myInt); } else { Console.WriteLine("el nmero {0} es igual a cero", myInt); } // decisin MLTIPLE if (myInt < 0 || myInt == 0) { Console.WriteLine("el nmero {0} es menor o igual a cero", myInt);

} else if (myInt > 0 && myInt <= 10) { Console.WriteLine("el nmero {0} est entre 1 y 10", myInt); } else if (myInt > 10 && myInt <= 20) { Console.WriteLine("el nmero {0} est entre 11 y 20", myInt); } else if (myInt > 20 && myInt <= 30) { Console.WriteLine("el nmero {0} est entre 21 y 30", myInt); } else { Console.WriteLine("el nmero {0} es mayor que 30", myInt); } } } Bajar ejemplo ej8.cs En este ejemplo, leemos un valor desde teclado, que nos es devuelto como una cadena de caracteres que debemos transformar en nmero antes de asignarla a una variable entera. Para ello utilizaremos el mtodo de Console que ya conocemos ReadLine(). La transformacin la haremos mediante el mtodo Parse de la clase Int32 del espacio de nombres System: myInput = Console.ReadLine(); myInt = Int32.Parse(myInput); Como vemos, en funcin de la condicin, podemos tomar una o varias acciones mtuamente exclusivas (slo una de ellas se ejecutar). Tambin hay que hacer notar que si dicha accin es una sola instruccin, se pueden omitir la definicin de bloque ( { } ). Estructuras condicionales: switch De forma similar a la estructura if/else/if/else, podemos utilizar la estructura switch. En este caso, seguido de la palabra reservada debemos poner una expresin que se evaluar a uno de los siguientes tipos: sbyte, byte, short, ushort, int, uint, long, ulong, char, string, or enum. A continacin viene el bloque del switch, en el que cada posible caso est etiquetado con la palabra case <expresion>: Si la expresin de un caso concreto coincide con la evaluacin de la primera expresin, se ejecutan las instrucciones que hay a continacin; sino, se pasa a comprobar el siguiente caso. Cada caso debe terminar con la instruccin break; o goto etiq para terminar el switch y evitar que se ejecuten las instrucciones correspondientes al siguiente caso. Como veremos en el siguiente ejemplo, podemos poner un caso por defecto que se ejecutar si ninguno de los casos comprobados conincida: using System; class condicionalSWITCH { public static void Main() { string myInput; int myInt; Console.Write("Please enter a number: "); myInput = Console.ReadLine(); myInt = Int32.Parse(myInput); switch( myInt ) { case 1: Console.WriteLine("primera opcin"); break; case 2: Console.WriteLine("segunda opcin"); break; case 3: Console.WriteLine("tercera opcin"); break; case 4:

Console.WriteLine("cuarta opcin"); break; default: Console.WriteLine("opcin por defecto"); break; } } } Bajar ejemplo ej9.cs Para hacer que cierto grupo de instrucciones se ejecuten cuando se cumplan varios casos, podemos utilizar una estructura como la que sigue: switch( myInt ) { case 1: case 2: case 3: Console.WriteLine("est entre 1 y 3"); break; default: Console.WriteLine("no est entre 1 y 3"); break; }

Estructura de control goto La instruccin goto etiq permite cambiar el recorrido lineal de las lneas de cdigo prosiguiendo la ejecucin del programa en la lnea etiquetada con etiq:. La etiqueta se define colocando al final del identificador dos puntos (:). En el siguiente ejemplo se podr ver mejor la contruccin del goto. if( expresion ) { goto etiq_error; } ... //otras instrucciones del programa etiq_error: Console.WriteLine("expresin incorrecta"); La utilizacin del goto no es recomendable, ya que le quita al cdigo legibilidad y aumenta la posibilidad de errores.

Potrebbero piacerti anche