Sunteți pe pagina 1din 68

ALGORITMOS Y

PROGRAMACIÓN
Clase 2
Lenguaje C#

Dr. Lic. Waldo Hasperué


Temario
• Lenguaje C#

• Estructuras de control (continuación)

• Arreglos

• Strings

• Funciones
Estructuras de control – DO WHILE
• Es una estructura de repetición condicional como
el WHILE.
• La condición siempre va entre paréntesis.
• A diferencia del WHILE, el DO WHILE ejecuta el
código de su bloque al menos una vez.

do {
<Código hasta que test sea falso>;
}
while ( <test> );
Estructuras de control – DO WHILE
• Ejemplos

int a = 1;
do {
Console.WriteLine("Hola");
}
while ( a++ != 1 );

¿Qué imprime?
¿Y si se hubiera usado el
WHILE?
Estructuras de control – SWITCH
• Es una estructura condicional que simplifica el uso de IFs
anidados.
• La condición NO es booleana. Debe ser una variable o el
resultado de una operación
switch (<testVar>) {
case <valor1>:
<código si <testVar> == <valor1> >
break;
...
case <valorN>:
<código si <testVar> == <valorN> >
break;
default:
<código si no entró por ningún case>
break;
}
Estructuras de control – SWITCH
• Ejemplos
int a = 3;
switch (a) {
case 1:
Console.WriteLine("uno");
break;
case 2:
Console.WriteLine("dos");
break;
default:
Console.WriteLine("otro");
break;
}
Estructuras de control – SWITCH
• Ejemplos Puede haber
Puedesentencias
tantas haber tantas
int a = 3; sentencias case
case como secomo se
switch (a) { necesiten
necesiten
case 1:
Console.WriteLine("uno");
break;
case 2:
Console.WriteLine("dos");
break;
default:
Console.WriteLine("otro");
break;
}
Estructuras de control – SWITCH
• Ejemplos
int a = 3;
switch (a) {
case 1:
Console.WriteLine("uno");
break;
case 2:
Console.WriteLine("dos");
break;
default:
Console.WriteLine("otro");
break;
} El uso de la condición
default es opcional
Estructuras de control – SWITCH
• Ejemplos
int a = 3;
switch (a) {
case 1:
case 2:
case 3:
Console.WriteLine("uno, dos o tres");
break;
case 4:
Console.WriteLine("cuatro");
break;
}
Estructuras de control – SWITCH
• Ejemplos
int a = 3; Si a vale 1, 2 o 3 se
switch (a) { ejecuta el mismo bloque
de código
case 1:
case 2:
case 3:
Console.WriteLine("uno, dos o tres");
break;
case 4:
Console.WriteLine("cuatro");
break;
}
Estructuras de control – SWITCH
• Ejemplos
int a = 3;
No hay una cláusula default
switch (a) { Si a toma un valor distinto de
case 1: 1, 2, 3 o 4 NO hace nada
case 2:
case 3:
Console.WriteLine("uno, dos o tres");
break;
case 4:
Console.WriteLine("cuatro");
break;
}
Estructuras de control
• Interrupción de bucles. Pueden ser utilizados para
cualquier estructura de bucle: FOR, WHILE y DO WHILE.
• break – El bucle termina inmediatamente

• continue – Termina el ciclo corriente inmediatamente (la ejecución

continua con el próximo ciclo)

• goto – Permite saltar fuera del bucle (no recomiendada)

• return – Salta fuera del loop y de la función que lo contiene


Estructuras de control
• Interrupción de bucles. Ejemplo:

int i; ¿Qué imprime?


for(i=1; i<=10; i++) {
if (i==5)
break;
if (i % 2 == 0)
continue ;
Console.WriteLine(i);
}
Ámbito de las variables
• No se puede ocultar un nombre de un ámbito local
redefiniendo el identificador en otro más interno.
int i = 0;
if (true) {
int i = 1;
} El compilador marca un
if (true) { error, ya que se está
"redefiniendo" la variable i
int j = 0;
}
if (true) {
int j = 1;
}
Ámbito de las variables
• No se puede ocultar un nombre de un ámbito local
redifiniendo el identificador en otro más interno.
int i = 0;
if (true) {
int i = 1;
} Lasvariables
Las variablesj jestán
están
definidas
definidascada
cadauna
unaen ensu
if (true) { supropio
propio bloque.
bloque.
int j = 0; Nohay
No hayerror.
error.

}
if (true) {
int j = 1;
}
Arreglos
• Un arreglo es un conjunto de elementos homogéneos

(mismo tipo) accedidos a través de uno o más índices.

• Los arreglos pueden tener varias dimensiones (vector,

matriz, tensor, etc.) el número de dimensiones se


denomina rank.

• El número total de elementos de un arreglo (en todas sus

dimensiones) se llama longitud del arreglo (Length)


Arreglos
• Arreglos de una dimensión (vectores)
Declaración de una
variable vector1 de tipo int
int [ ] vector1;
vector1 = new int [200];

int [ ] vector2 = new int [100];

int [ ] vector3 = new int [ ] {5,1,4,0};


Arreglos
• Arreglos de una dimensión (vectores)

int [ ] vector1; Instanciación de la variable


vector1, reservando espacio
vector1 = new int [200]; para almacenar hasta 200
números de tipo int

int [ ] vector2 = new int [100];

int [ ] vector3 = new int [ ] {5,1,4,0};


Arreglos
• Arreglos de una dimensión (vectores)

Declaración e instanciación
int [ ] vector1; de la variable vector2,
vector1 = new int [200]; reservando espacio para
almacenar hasta 100
números de tipo int
int [ ] vector2 = new int [100];

int [ ] vector3 = new int [ ] {5,1,4,0};


Arreglos
• Arreglos de una dimensión (vectores)

int [ ] vector1;
vector1 = new int [200];

int [ ] vector2 = new int [100];

int [ ] vector3 = new int [ ] {5,1,4,0};

Declaración e instanciación de la variable vector3.


Notar que en la inicialización no se está
estableciendo la cantidad de valores que
almacenará la variable.
Arreglos
• Arreglos de una dimensión (vectores)

int [ ] vector1;
vector1 = new int [200];

int [ ] vector2 = new int [100];

int [ ] vector3 = new int [ ] {5,1,4,0};

En estos casos es necesario dar la lista de valores


que contendrá la variable. Los valores son
encerrados entre llaves y separados por coma.
Arreglos
• Arreglos de una dimensión (vectores)

int tam=5; Cuando se instancia


un arreglo, el
char [ ] vocal = new char [tam]; tamaño puede
especificarse por
medio de una
vocal[1] = ‘E’; variable

vocal[0] = ‘A’;

vocal[vocal.Length - 1] = ‘U’;
Arreglos
• Arreglos de una dimensión (vectores)

int tam=5; El acceso a los


elementos del vector
char [ ] vocal = new char [tam]; se realiza con
operador [ ]

vocal[1] = ‘E’;

vocal[0] = ‘A’;

vocal[vocal.Length - 1] = ‘U’;
Arreglos
• Arreglos de una dimensión (vectores)

int tam=5;
char [ ] vocal = new char [tam];

vocal[1] = ‘E’;

El primer elemento
vocal[0] = ‘A’; del vector está en la
posición 0

vocal[vocal.Length - 1] = ‘U’;
Arreglos
• Arreglos de una dimensión (vectores)

int tam=5;
char [ ] vocal = new char [tam];

vocal[1] = ‘E’;

El último elemento
vocal[0] = ‘A’; del vector está en la
posición n-1

vocal[vocal.Length - 1] = ‘U’;
Arreglos
• Para recorrer todos los elementos de un arreglo, C#
provee la estructura de control foreach

• Se utiliza con arreglos y otras colecciones

• Reemplaza al for de una manera más compacta

foreach (<tipoElem> <elem> in <vector>) {


<instrucciones>
}
Arreglos
• La variable de iteración debe ser declarada del mismo
tipo que los elementos del arreglo.

• Además no puede ser asignada en el cuerpo del foreach

• Ejemplo:
int [ ] vector = new int[ ] {1,2,3};
foreach (int elemento in vector)
Console.WriteLine(elemento);
Arreglos multidimensionales
• Se pueden arreglos de dos o más dimensiones

int [ , ] matriz = new int [4, 3];


int [ , , ] tensor = new int [4, 3, 8];
int [ , , , ] cuatroD = new int [4, 3, 8, 5];

• Acceso a cada elemento:


matriz [2, 1] = 5;
tensor [ 3, 1, 0 ] = 34;
cuatroD [ 3, 1, 6, 2] = -21;
Arreglos multidimensionales
• Declaración, instanciación e inicialización

int [ , ] matriz = new int [ , ] { { 1, 2, 3, 4 },


{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 } } ;
La longitud de
la primer
dimensión es 3.

La longitud de
la segunda
dimensión es 4.
Arreglos de arreglos
• Se pueden crear arreglos de arreglos para crear
estructuras no cuadradas.

int [ ][ ] tabla = new int [4][ ];


tabla [0] = new int [2];
tabla [1] = new int [3];
tabla [2] = new int [5];
tabla [3] = new int [2];

tabla [1] [4] = 8;


Arreglos de arreglos
• Se pueden crear arreglos de arreglos para crear
estructuras no cuadradas.

int [ ][ ] tabla = new int [4][ ];


tabla [0] = new int [2];
tabla [1] = new int [3];
tabla [2] = new int [5];
tabla [3] = new int [2]; Se declaran
Se declaran
con con
múltiples
múltiples
parespares
de de
tabla [1] [4] = 8; corchetes,
corchetes,uno
unopor
cada
pordimensión
cada
que se desee.
dimensión que
se desee.
Arreglos de arreglos
• Se pueden crear arreglos de arreglos para crear
estructuras no cuadradas.

int [ ][ ] tabla = new int [4][ ];


tabla [0] = new int [2];
tabla [1] = new int [3];
tabla [2] = new int [5];
tabla [3] = new int [2];
El acceso a los
elementos también
tabla [1] [4] = 8; es por múltiples
pares de corchetes
Arreglos de arreglos
• Se pueden crear arreglos de arreglos para crear
estructuras no cuadradas.

int [ ][ ] tabla = new int [4][ ];


tabla [0] = new int [2];
tabla [1] = new int [3];
tabla [2] = new int [5];
tabla [3] = new int [2]; Se declara la
Se declara
longitudladelongitud
la
de la
primer primer y
dimensión
dimensión
de cada unay de decada
las
tabla [1] [4] = 8; una de las segundas
segundas
dimensiones por
dimensiones por
separado.
separado.
Strings
• Los strings pueden verse como un arreglo de tipo char.

string st = "Hola";
char c = st [0];

• Los strings son inmutables (de sólo lectura), eso significa


que no es posible modificar el valor de sus caracteres

st [0] = 'h'; //  Produce un error en compilación


Strings
• Declaración y armado de strings

string c = "hola";
c+= " mundo";
c+= '!';
c+= 1 + " abrazo";
Console.WriteLine(c + " (" + c.Length + ")");
Strings
• Declaración y armado de strings

Recordar que los


string c = "hola"; strings se escriben
c+= " mundo"; entre comillas dobles.
c+= '!';
c+= 1 + " abrazo";
Console.WriteLine(c + " (" + c.Length + ")");
Strings
• Declaración y armado de strings

Los caracteres se
string c = "hola"; escriben entre comillas
c+= " mundo"; simples
c+= '!';
c+= 1 + " abrazo";
Console.WriteLine(c + " (" + c.Length + ")");
Strings
• Declaración y armado de strings A los strings se les
puede concatenar tanto
strings como caracteres.
A los strings se les puede
string c = "hola"; Notar que lostanto
concatenar strings se
strings
c+= " mundo"; escriben
comoentre comillas
caracteres.
dobles y los caracteres
c+= '!'; entre comillas simples.
c+= 1 + " abrazo";
Console.WriteLine(c + " (" + c.Length + ")");
Strings
• Declaración y armado de strings

string c = "hola"; Se les puede concatenar un


número. El compilador hace la
c+= " mundo"; conversión de manera implícita.
c+= '!';
c+= 1 + " abrazo";
Console.WriteLine(c + " (" + c.Length + ")");
Strings
• Declaración y armado de strings

La propiedad Length devuelve


string c = "hola"; la cantidad de caracteres del
c+= " mundo"; string
c+= '!';
c+= 1 + " abrazo";
Console.WriteLine(c + " (" + c.Length + ")");
Strings
• Declaración y armado de strings

string s;
char c = 'A';
int i = 3;
A los strings se les puede
concatenar un char o un int.
s = c; Pero no se les puede asignar
s = i; directamente.
Esto produce error de
compilación.
Strings
• Declaración y armado de strings

string s;
char c = 'A';
int i = 3;

s = c.ToString(); Se debe realizar una


s = i.ToString(); conversión explícita.
Strings
• Funciones de los strings

string i = "hola mundo";


int a = i.IndexOf("mundo");
i = i.Insert(a-1, " mi lindo ");
i = i.Remove(a, 3);
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
IndexOf devuelve la
Strings posición de i donde se
encuentra el string
pasado por parámetro.
• Funciones de los strings
Recordar que la primer
posición es la 0.
En este ejemplo
string i = "hola mundo"; devuelve 5.
int a = i.IndexOf("mundo");
i = i.Insert(a-1, " mi lindo ");
i = i.Remove(a, 3);
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Strings
Insert inserta en la
• Funciones de los strings posición pasada en el
primer parámetro, el
string pasado en el
string i = "hola mundo"; segundo parámetro

int a = i.IndexOf("mundo");
i = i.Insert(a-1, " mi lindo ");
i = i.Remove(a, 3);
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Strings
• Funciones de los strings Remove borra desde la
posición indicada por el
primer parámetro, la
string i = "hola mundo"; cantidad de caracteres
int a = i.IndexOf("mundo"); indicada en el segundo
parámetro.
i = i.Insert(a-1, " mi lindo ");
i = i.Remove(a, 3);
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Strings
• Funciones de los strings

Replace reemplaza toda


string i = "hola mundo";
ocurrencia del primer
int a = i.IndexOf("mundo"); string por el segundo
i = i.Insert(a-1, " mi lindo ");
i = i.Remove(a, 3);
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Strings
• Funciones de los strings

Substring devuelve el
string i = "hola mundo"; substring que comienza
int a = i.IndexOf("mundo"); en la posición indicada
por el primer parámetro,
i = i.Insert(a-1, " mi lindo "); y formado por la cantidad
i = i.Remove(a, 3); de caracters indicada por
i = i.Replace("mundo", "MunDo "); el segundo parámetro.

string s = i.Substring(10, 8);


s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Strings
• Funciones de los strings

string i = "hola mundo";


int a = i.IndexOf("mundo"); ToLower devuelve el
i = i.Insert(a-1, " mi lindo "); mismo string pero con
i = i.Remove(a, 3); todos los caracteres en
minúscula.
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Strings
• Funciones de los strings

string i = "hola mundo";


int a = i.IndexOf("mundo"); ToUpper devuelve el
i = i.Insert(a-1, " mi lindo "); mismo string pero con
i = i.Remove(a, 3); todos los caracteres en
mayúscula.
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Strings
• Funciones de los strings

string i = "hola mundo";


int a = i.IndexOf("mundo"); Trim elimina todos los
i = i.Insert(a-1, " mi lindo "); espacios en blanco que
i = i.Remove(a, 3); hay al principio y al final
del string s.
i = i.Replace("mundo", "MunDo ");
string s = i.Substring(10, 8);
s = s.ToLower();
s = s.ToUpper();
s = s.Trim();
Strings
• Funciones de los strings: Split
• La función Split divide un string en diferentes partes
buscando como separador uno o más caracteres
específicos.

string s = "Holis querido mundillo!";


string [ ] partes;
partes = s.Split(new char [ ] {' '});
foreach(string parte in partes)
Console.WriteLine(parte);
Strings
• Funciones de los strings: Split
• La función Split divide un string en diferentes partes
buscando como separador uno o más caracteres
específicos.

string s = "Holis querido mundillo!";


string [ ] partes;
partes = s.Split(new char [ ] {' '});
foreach(string parte in partes)
Console.WriteLine(parte);
Split devuelve un
arreglo de strings
Strings
• Funciones de los strings: Split
• La función Split divide un string en diferentes partes
buscando como separador uno o más caracteres
específicos.

En este arreglo de
string s = "Holis querido mundillo!"; chars le
string [ ] partes; indicamos todos
los caracteres por
partes = s.Split(new char [ ] {' '}); los cuales
foreach(string parte in partes) deseamos hacer
Console.WriteLine(parte); la división.
En este ejemplo,
el espacio en
blanco
Strings
• Funciones de los strings: Split
• La función Split divide un string en diferentes partes
buscando como separador uno o más caracteres
específicos.

string s = "Holis querido mundillo!";


string [ ] partes;
partes = s.Split(new char [ ] {' '});
foreach(string parte in partes)
Console.WriteLine(parte);

El espacio en blanco usado para la división


no forma parte de ningún string
Strings
• Funciones de los strings: Split
• La función Split divide un string en diferentes partes
buscando como separador uno o más caracteres
específicos.

string s = "Holis querido mundillo!";


string [ ] partes;
partes = s.Split(new char [ ] {'i'});
foreach(string parte in partes)
Console.WriteLine(parte); ¿Qué imprime si se
usa la i como
separador?
Strings
• Funciones de los strings: Split
• La función Split divide un string en diferentes partes
buscando como separador uno o más caracteres
específicos.

string s = "Holis querido mundillo!";


string [ ] partes;
partes = s.Split(new char [ ] {'i'});
foreach(string parte in partes)
Console.WriteLine(parte);
Strings
• Funciones de los strings: Split
• La función Split divide un string en diferentes partes
buscando como separador uno o más caracteres
específicos.

string s = "Holis querido mundillo!";


string [ ] partes;
partes = s.Split(new char [ ] {'i', 'o', 'u'});
foreach(string parte in partes)
Console.WriteLine(parte); Se pueden definir
tantos separadores
como se necesiten.
Funciones
• Definición
<tipoRetorno> <nombreMétodo>(<parámetros>)
{
<cuerpo>
}

• Al igual que una variable, al definir una función se debe


indicar que tipo de valor devuelve.
• Si la función no devuelve ningún valor se utiliza void
como <tipoRetorno>.
Funciones
• Ejemplo

void imprimir(string algo) {


Console.WriteLine(algo);
}

double sumar(double a, double b) {


return a + b;
}
La instrucción
return determina el
valor que devuelve
la función.
Funciones El tipo de retorno de la
función debe coincidir con
lo declarado.
• Ejemplo En este ejemplo da error.

double sumar(double a, double b) {


return a.ToString() + b.ToString();
}

double sumar(double a, double b) {


return a + b;
a = b; Cualquier instrucción debajo de
un return NO se ejecuta.
}
La instrucción return "finaliza" la
ejecución de cualquier función
Funciones
using System; Notar que hasta ahora
namespace Ejercicio3 hemos estado escribiendo
{ en el cuerpo de una función
class Program
{ llamada Main.
public static void Main(string[] args)
{
imprimir(sumar(3.4, 5.8).ToString());
Console.ReadKey(true);
}
static void imprimir(string s)
{
Console.WriteLine(s);
}
static double sumar (double a, double b)
{
return a + b;
}
}
}
Funciones
using System;
namespace Ejercicio3
{
class Program
{
public static void Main(string[] args)
{
imprimir(sumar(3.4, 5.8).ToString());
Console.ReadKey(true);
}
static void imprimir(string s)
{
Console.WriteLine(s); Todas las funciones que
} declaremos deben estar
static double sumar (double a, double b) fuera de la función Main
{
return a + b;
}
}
}
Funciones
using System;
namespace Ejercicio3
{
class Program
{
public static void Main(string[] args)
{
imprimir(sumar(3.4, 5.8).ToString());
Console.ReadKey(true);
}
static void imprimir(string s)
{ Todas las funciones deben
Console.WriteLine(s);
} estar declaradas en la
static double sumar (double a, double b)
sección:
{ class Program
return a + b; (ya veremos más al
}
} respecto)
}
Funciones
using System;
namespace Ejercicio3
{
class Program
{
public static void Main(string[] args)
{ Todas
Todas
las las
funciones
funcionesdeben
imprimir(sumar(3.4, 5.8).ToString()); deben
comenzar
comenzar conconla la
Console.ReadKey(true); instrucción
instrucción static
static
} Ya veremos
Ya veremos másmásadelante
static void imprimir(string s) adelante
que que
significa
significa
{
Console.WriteLine(s);
}
static double sumar (double a, double b)
{
return a + b;
}
}
}
Funciones
using System;
namespace Ejercicio3
{
class Program
{
public static void Main(string[] args)
{
imprimir(sumar(3.4, 5.8).ToString());
Console.ReadKey(true);
}
static void imprimir(string s)
{
Console.WriteLine(s);
}
Si todo está declarado en
static double sumar (double a, double b) su sitio entonces podemos
{ llamar a las funciones
return a + b;
} imprimir y sumar.
}
}
Funciones
using System;
namespace Ejercicio3
{
class Program
{
public static void Main(string[] args)
{
imprimir(sumar(3.4, 5.8).ToString());
Console.ReadKey(true);
}
static void imprimir(string s)
{
Console.WriteLine(s);
} Notar que al resultado de la
static double sumar (double a, double b) función sumar se le aplica
{ una conversión explícita a
return a + b; string
}
} ¿Por qué es necesario?
}
Funciones
using System;
namespace Ejercicio3
{
class Program
{
public static void Main(string[] args)
{
imprimir(sumar(3.4, 5.8).ToString());
Console.ReadKey(true);
}
static void imprimir(string s)
{
Console.WriteLine(s);
} Porque la función imprimir
espera recibir como
static double sumar (double a, double b)
{
parámetro algo del tipo
return a + b; string.
}
}
}

S-ar putea să vă placă și