viernes, 30 de diciembre de 2011

Estructuras de control

Las estructuras de control nos permiten modificar el flujo de ejecución de las instrucciones de un programa.

En C# estas estructuras son básicamente las mismas que encuentras en C/C++.

En cuanto a las estructuras de selección son exactamente las mismas que las que conoces. A excepción de la estructura switch que tiene una restricción adicional: "A jump statement such as a break is required after each case block, including the last block whether it is a case statement or a default statement."

Las estructuras de iteración son todas iguales excepto foreach que es nueva. Esta estructura la veremos junto con las colecciones.

Las estructuras de salto tienen algunas que tal vez no conozcas, como yield, y throw las cuales también veremos más adelante.

Para empezar nos bastará con saber usar if, for, while y switch.

La instrucción if se compone de:
if(<condición>)
{
    instrucciones...
}
[else
{
     instrucciones...
}]

La condición debe ser un resultado booleano, esto es, que su valor sea true o false (a diferencia de C/C++ donde la condición puede ser un entero donde 0 es falso y cualquier otra cosa es verdadero).
La parte del else es opcional y las llaves {} de los bloques también son opcionales cuando el bloque se compone de una sola instrucción pero es recomendado como buena práctica siempre usarlos.

La instrucción for se compone de:

for([inicialización]; [condición de paro]; [aumento])
{
     instrucciones...
}

Todas las partes son opcionales. Si no asignas una condición de paro, el for será un ciclo infinito (que se puede romper con una sentencia de salto como break). Al igual que en el if, el bloque delimitado por las llaves {} es opcional si es solo una instrucción, pero es mejor siempre usarlo.
El formato más común de for es el clásico:

for(int i=0; i<5; i++)
{
}

La instrucción while tiene la forma:

while(<condición de continuación>)
{
}

Al igual que en el if, el bloque delimitado por las llaves {} es opcional si es solo una instrucción, pero es mejor siempre usarlo; y la condición debe ser obligatoriamente un booleano.

Ejercicios

Ahora a usar lo aprendido hasta ahorita:

1.- Hacer un programa que lea de consola dos enteros separados por un espacio y escriba de regreso el menor de ellos.

A diferencia de la función scanf de C/C++, Console.ReadLine siempre lee cadenas de caracteres (string) por lo que la entrada deberá ser convertida a entero. Esto puede ser hecho con el método Parse de Int32 (también se puede escribir como int.Parse(datos[0]); pero yo prefiero usar la clase Int32).

Cada tipo de datos básico tiene su función Parse que convierte de una cadena a el tipo especificado, por ejemplo, puedes convertir a un booleano con Boolean.Parse("True"), o a un double con Double.Parse("3.1416");

En los comentarios en la imagen, dice que la comparación también se puede hacer usando el operador ternario ?:

2.- Escribir un programa que imprima las tablas de multiplicar (del 2 al 10)


En este código de ejemplo puedes ver que el método WriteLine acepta una cadena de formato. Esto es, escribes la cadena con ciertos contenedores donde se escribirá el valor de una variable. Estos contenedores se delimitan entre llaves {} y contienen la posición de la variable (empezando en 0) que irá en ese lugar. Las variables que se declaran después de la cadena, separadas por comas. En este caso la variable 0 es i, la 1 es j y la 2 es i*j. El orden en que escribas los contenedores en la cadena de formato no importa, por ejemplo, podríamos haber escrito:

Console.WriteLine("{2} = {0} x {1}", i, j, i * j);

Existen varios modificadores que se pueden usar en la cadena de formato. Los puedes revisar aquí.

Tareas:

1.- Escribe un programa que lea de consola 5 números separados por un espacio y los escriba en orden en otra linea.

2.- BizzBuzz
Escribe una aplicación que escriba el resultado de jugar BizzBuzz hasta el número 1000.

3.- Escribe un programa que escriba "par" si el segundo actual es par e "impar" si el segundo actual es impar. (para conocer el segundo actual puedes usar int actual = DateTime.Now.Second;)

4.- Escribe una aplicación que lea un entero de la consola y escriba un triángulo de *'s con una base de tamaño n (como se muestra en la figura).

Puedes escribir cadenas en la misma linea usando el método Console.Write

5.- Escribe un programa que escriba en consola la suma de la hora mas el minuto mas el segundo actuales hasta que esta suma sea un múltiplo de 13.

No hay comentarios:

Publicar un comentario