En C# encontraremos un grupo de estructuras que nos facilitarán mucho el trabajo. Estructuras de datos similares pueden ser encontradas en la mayoría de los lenguajes de programación. Ahora veremos los "Array":

Un "Array" en C# es una estructura que nos permite almacenar un conjunto de datos de un mismo tipo. Para esto, declaramos el array de la siguiente manera "tipo[]":

int[] enteros (para representar un array de int)

string[] cadenas (para representar un array de string)

char[] caracteres (para representar un array de char)

Dimensión de un Array:

Los "Array" tienen varias características importantes: una de ellas es que, cuando se crean, debe declararse su dimensión. Si, por ejemplo, queremos crear un array cuya capacidad sea de 5 elementos, lo hacemos de la siguiente manera:

int[] enteros = new int[5];

Ahora supongamos que en vez de la longitud (que se llama "Length"), queremos decirle, simplemente, los elementos que queremos que contenga, en ese caso, lo hacemos del siguiente modo:

int[] enteros = new int[] {1,2,3,4,5};

Hemos creado un nuevo array de int que contiene 5 elementos (que son 1, 2, 3, 4, 5). No le hemos dicho cuál es su Length cuando lo creamos, pero no hay que preocuparse, al crearlo con 5 elementos él, por default, sabrá que esa es su capacidad.

Podemos preguntarle a un array cuál es su capacidad. Para eso, utilizaremos el comando "nombreDelArray.Length". Por ejemplo, para el array de arriba podríamos hacer algo como esto:

int largo = enteros.Length; 

El valor de "largo" será 5. Por si tienes dudas, puedes probar el siguiente comando:

Console.WriteLine(enteros.Length); 

Indexando Valores:

Es posible modificar un elemento de un array en una posición específica. Para ello debemos tener en cuenta un detalle importante: la primera posición de un array es 0. Así, un array con 5 elementos tendría 4 posiciones: 0,1,2,3 y 4.

Veamos un ejemplo:

Creemos un array de "char":

char[] caracteres = new char[] {'a','m','a'}; 

Ahora, cambiemos el segundo elemento del array (que sería el que se encuentra en la posición 1). Para trabajar sobre una posición de un array, se utiliza como sentencia el nombre del array, acompañado de corchetes "[]" y entre estos últimos el índice de la posición.

caracteres[1] = 'p'; 

Nuestro array ahora tendrá como elementos {'a','p','a'}.

Imprimiendo un Array:

Para imprimir un array es necesario iterar sobre sus elementos. Como vimos en posts anteriores, una manera simple de iterar es utilizando un ciclo "for". Veamos como usarlo en este caso

for (int i = 0; i < caracteres.Length; i++)
            {
                Console.WriteLine(caracteres[i]);
            }

Este ciclo lo que hace es darnos el índice, la posición del array, de uno en uno. Si se fijan, el valor de "i" debe ser menor estricto que el Length del array, ya que, al comenzar en 0, la última posición de nuestro array es "4" y no "5", que es el valor de su Length. Si no ponemos menor estricto, el programa intentará imprimir el contenido del array en la posición 5, pero como la última posición de nuestro array es 4, lanzará una excepción de tipo "Indice fuera de rango".

Otras operaciones con arrays:

Hay otras operaciones que puedes realizar con tu array. Está, por ejemplo array.Reverse() que invierte el orden de los elementos, o array.ToList() que lo convierte en una lista (estructura que estudiaremos más adelante).
En ciertas circunstancias hay dos sentencias que pueden ser muy útiles cuando nos encontramos dentro de un ciclo.

"continue" : pasa directamente a la siguiente iteración sin ejecutar las líneas de código que estén por debajo de esta orden.

"break" : rompe el ciclo.

Veamos un ejemplo de "continue" y la salida que origina:



En este caso, cuando se ejecute la sentencia "continue" se pasará directamente a la siguiente iteración, por lo que no se imprimirá "5":



Ahora veamos un ejemplo de "break":



En este caso, cuando se ejecute la sentencia "break" se saldrá totalmente del ciclo. Obtendremos la siguiente salida:


Ciclos "for":

Los ciclos "for" son otro tipo de instrucciones que permiten repetir un proceso determinado número de veces. Veamos cuál es su formato:

for (valor inicial; condición; variación del valor inicial)

Valor inicial: Es el índice del ciclo, será el valor a partir del cuál se itera.
Condición: Será la condicón necesaria para continuar el ciclo; cuando no se cumpla, este terminará.
Variación: Forma en que varía el "valor inicial" durante el ciclo.

OJO: el valor inicial TIENE que variar, o entraríamos a un ciclo infinito.

Veamos un ejemplo de un ciclo "for" que devuelve el alfabeto (excepto la 'z'):



Analicemos ahora el proceso. Hemos hecho un ciclo cuya orden podría traducirse de la siguiente manera: "para toda i, con i que comienza en la 'a', si i es menor que 'z', entra al ciclo y aumenta i cuando termines la iteración". Esto quiere decir que, como 'a' es menor que 'z', la condición se cumple, en ese caso se entrará al ciclo, se imprimirá 'a' y se aumentará la variable i, cuyo valor pasará a ser 'b'. Como 'b' también es menor que 'z', se repetirá el mismo proceso. La condición dejará de cumplirse cuando i sea igual a 'z', en cuyo caso, como 'z' no es menor estricto que 'z', el ciclo de romperá. Para que este ciclo imprima 'z' también, solamente necesitamos hacer un pequeño cambio en la condición de parada, que ahora sería " i <= 'z' ".

Los ciclos "for" pueden estar anidados. Esto significa que puede haber un ciclo "for" dentro de otro.

Veamos un ejemplo. Supongamos que queremos un programa que imprima las tablas de multiplicar del 1 al 5. Cómo lo haríamos.

Primero tomaríamos un 1 y lo multiplicaríamos por todos los números del 1 al 10. Luego tomaríamos el 2 y haríamos los mismo... así hasta el 5. Así que, traduciendo esto, lo que debemos decirle a nuestro programa es:

{
"Para (los numeros que empiezan en 1; que son <= 5; que van en aumento)"
      { "Para(los numeros que empiezan en 1; que son <= 10, que van en aumento)"
              "imprime el producto"
      }
}

La instrucciones de los ciclos "for" anidados funcionan de la siguiente manera: "para cada valor del ciclo externo se ejecutará completamente el ciclo interno". Así, nuestra instrucción funcionará del siguiente modo: El primer valor del ciclo externo es 1, se entrará al ciclo interno que itera por los valores del 1 al 10 y se irá multiplicando 1*1, 1*2.... 1*10 y se romperá el ciclo interno; entonces entraremos en la 2da iteración del ciclo externo, su segundo valor es 2, volvemos a entrar al ciclo interno: 2*1, 2*2.... Y así. El código para este ejmplo quedaría del siguiente modo:



Ahora, hagamos una pequeña modificación aprovechando la expresividad de los valores de los índices. Copien este código y vean lo que pasa!



A partir de estos ejemplos les propongo los siguientes ejercicios:

-Crear un programa que escriba en la pantalla los numeros del 1 al 50 que son multiplos de 4 (pista: puedes hacerlo iterando de 4 en 4, o agregando una condicional dentro del ciclo).

- Crear un programa que escriba en pantalla los números del 20 al 0, en orden decreciente (pista: en vez de aumentar la variación, hay que disminuirla).
Vamos a ver ahora los Bucles o Ciclos de repetición. Este tipo de instrucciones nos permitirá realizar cierta acción mientras se cumpla una condición determinada.
Veamos un ejemplo simple:

Supongamos que deseamos pedirle al usuario que teclee su nueva contraseña. La contraseña es "fresas". Pero el usuario puede equivocarse escribiendola y, sin darse cuenta, su contraseña ahora podría ser "frezas" por ejemplo. Para eso, le pedimos al usuario que teclee nuevamente su contraseña, si las dos contraseñas no son iguales, simplemente le pediremos que repita el mismo proceso.

Sentencias condicionales:

while(condicion) {hacer esto} - ejecutará "hacer esto" mientras se cumpla la condición.

do {esto} while(condicion); - ejecutará "esto" mientras se cumpla la condición.

Veamos el ejemplo del principio:


Al ejecutar este código obtendremos un programa que nos pedirá nuestro nombre hasta que no lo escribamos sin errores.

Vamos a ver como funciona:

Al principio hemos declarado las variables "nombre" y "nombre2". Luego llegamos a la sentencia do
, dentro de ella se nos pregunta nuestro nombre y lo que escribamos se guarda en la variable "nombre", luego se nos pregunta de nuevo y lo que escribamos se guarda en la variable "nombre2". Luego se llega a la sentencia while que nos dice que, si la variable "nombre"es distinta de la variable "nombre2" debemos volver al do y volver a preguntar el nombre.... Y así, hasta que no se cumpla la condición, o sea, que teclees bien tu nombre y "nombre" sea igual a "nombre2".


Ahora veamos un ejemplo utilizando while de un programa que imprimirá números mientras que estos sean menores que 50:




La sentencia "numero = numero + 1" indica que, por cada iteración dentro del ciclo, la variable numero aumentará en una unidad. También es válido escribir "numero++;"

Veamos cómo funciona este código:

Declaramos la variable "numero" con valor inicial 1. Vamos a la condición del ciclo. Es "numero" menor que 50? Como el valor de "numero" es 1, si, es menor que 50. Asi que entramos en el ciclo. Lo primero que hace este ciclo es imprimir el valor actual de "numero", así que imprimirá "1". Luego, nos dice que la variable "numero" ahora tendrá su valor actual aumentado en 1, como su valor es 1, 1+1= 2 y ahora "numero" vale 2. Hemos terminado esta iteración y regresamos a la condición: es "numero" menor que 50? Como el valor de "numero" ahora es 2, sigue siendo menor que 50.... y así, hasta que el valor de "numero" sea 49, entonces entraremos al ciclo, lo imprimiremos, pero al aumentarlo en 1, en la proxima iteración el valor de "numero" sera 50, y como 50 no es menor que 50, se romperá el ciclo, porque no se cumple la condición. Prueben este código, que debe imprimir los números desde el 1 hasta el 49.
Aqui les dejo algunos ejercicios que pueden resolver con lo que hemos aprendido hasta ahora.
1) Escriba un método que reciba 4 parámtros y devuelva el mayor de ellos.
2) Escriba un método que reciba 3 números enteros y los imprima ordenados.
Hola! Si has leído con atención los post anteriores ya tienes todo lo necesario para enfrentarte a las instrucciones condicionales.

Analicemos para qué nos sirven este tipo de instrucciones:

Supongamos que queremos hacer un pequeño programa para nuestro hermano Juan. Sin embargo, cualquiera puede sentarse al ordenador y ejecutar el programa. Así que le decimos a Juan que, para ver el contenido del programa, debe teclear la palabra "melocoton". Es una palabra secreta que solo Juan conoce. Si, por ejemplo, lo intentara ejecutar nuestra hermana Alicia, como ella no conoce la palabra clave, debería obtener un mensaje de tipo "lo sentimos, pero no puedes acceder a este programa".

Cómo hacer esto? Si lo analizamos podríamos deducir que necesitamos algo como:

- Si la palabra leída es "melocotón" entonces es Juan. Si no, es alguien más y no debemos dejarle ver el contenido.

Instrucciones Condicionales:

Las instrucciones condicionales nos permitirán manejar la situación anterior.

- if: significa "si" en inglés. Nos dice algo como "si se cumple (tal condicion) {entonces has esto}"

- else if: esta condición va debajo de una condición anterior y se ejecuta cuando no se cumple la primera condicion, pero se cumple esta.

- else: se ejecuta cuando no se cumplen ninguna de las condiciones anteriores.


Veamos ahora cómo quedaría el programa propuesto al principio:




Si Juan ejecuta el programa correctamente, verá algo como esto:



Sin embargo, Alicia obtendría el siguiente mensaje:



Veamos ahora un ejemplo más práctico. Vamos a hacer un programa que clasifique a un triángulo en "equilátero", "isósceles" o "escaleno". Como debes saber, los triángulos equiláteros tienen sus tres lados iguales, los isósceles tienen dos y los escalenos tienen todos sus lados distintos.

Tip: cuando sea necesario que se cumplan una condicion y otra condicion, utilizaremos el simbolo "&&" (condicion1 && condicion2). Cuando sea necesario que se cumpla una condicion o la otra utilizaremos el simbolo "||" (condicion1 || condicion2).Cuando deseemos comprobar si dos tipos basicos con iguales utilizaremos el símbolo "==" (if(variable1==variable2)).

Qué tendría que decir nnuestro código. Bueno, sería algo como esto:
{
"Diga cuanto mide el 1er lado"
int a = longitud del primer lado;

"Diga cuanto mide el 2do lado"
int b = longitud del segundo lado;

"Diga cuanto mide el 3er lado"
int c = "longitud del 3er lado";


si (a==b && b==c) {Es equilátero;}
sino si (a==b || a==c || b==c) {Es isósceles;}
sino {Es escaleno;}
}

Veamos cómo luce este código escrito en C#:




Compila y comprueba por ti mismo que funciona!!!
Algunos Tipos Básicos


Vamos ahora a crear una peque
ña aplicación que nos permita interactuar con el usuario. Para empezar, vamos a darle un vistazo a los tipos básicos.

"string", que significa "cadena" en inglés, es un tipo de variable que nos permite manejar cadenas de "caracteres" o "char".

"char", que significa "caracter", es un tipo de variable que nos permite almacenar caracteres independientes.

"int" es un tipo de variable que nos permite almacenar números enteros.

"double" es un tipo de variable que nos permite alacenar números fraccionarios (con coma: 1,23 ; 3,334254 ; 98,2342...)

"bool" es un tipo de variable que nos permite almacenar un valor "true" o "false"

Estas variables deben ser declaradas y les debe ser asignado un valor. Veamos un ejemplo de cómo asignarlo a cada tipo:

- Los string, al ser cadenas de caracteres, se declaran entre comillas dobles (" "):
string nombre
= "pedro";- Para representar un char empleamos comillas simples (' ')
char caracter = 'c';
- Para representar un int, simplemente escribimos el número:
int numero = 89;
- Para represnetar un double lo hacemos del siguiente modo:
double peso = 4.56;
- Para asignar un valor a un bool:
bool verdadero = true;

Como ven, el modo de declarar una variable sigue el siguiente orden:
1- Se declara el tipo de la variable
2- Se le asigna un nombre a la variable (en el caso del estring, le llamamos "nombre"; en el caso del char, le llamamos "caracter"....)
3- Se coloca el signo de igualdad (=) y se le asigna un valor;


Recordando

En el post anterior utilizamos la sentencia Console.Writeline() que nos permite escribir una línea en consola.

Ahora utilizaremos la sentencia Console.ReadLine() que nos permitirá guardar en una variable un valor introducido por el usuario directamente en la consola.

Veamos un ejemplo:


Lo primero que hacemos es imprimir una linea de texto que pregunta al usuario "Cómo te llamas?"

El usuario tecleará en consola su nombre, supongamos que es "juan". Como hemos igualado la variable string nombre al comando Console.ReadLine() lo que el usuario escriba en consola quedará guardado dentro de "nombre". Luego, si el usuario teclea Juan, "nombre" ahora tendrá como valor el string "Juan".

Seguidamente imprimiremos una nueva línea conformada por el resultado de concatenar la palabra "Hola" con el valor de la variable nombre. El resultado debe ser Hola Juan.




Notemos aquí algo importante. Cuando se guarda el valor obtenido por Console.ReadLine() en una variable esta siempre debe ser de tipo string, incluso aunque lo que se lea sea un número, de lo contrario tendremos un error de tipo "no se puede convertir un string en (el tipo de la variable en la que hayas intentado guardarlo)".

Ahora, supongamos que queremos preguntarle al usuario su edad, como la edad es de tipo int necesitamos guardarla en una variable de ese mismo tipo. Veamos cómo hacerlo:



Como ves, la sentencia int.Parse(edad) nos permitió convertir el parámetro de tipo string "edad" que leímos de consola, en un parámetro de tipo int.

Para terminar, veamos en conjunto los dos ejemplos anteriores:



Al ejecutar el código anterior deberíamos ver algo así: