jueves, 24 de febrero de 2011

Manejo Clase String en C#.

Aquí expongo el código de un programa en C#, donde desarrollo la aninación LLUVIA de una cadena de caracteres.

class MainClass
{
public static void Main(string[] args)
{
string cad,origen=null;

Console.SetCursorPosition(10,2);
Console.Write("Ingrese una Palabra: ");
origen = Console.ReadLine();

int fil=0, col=31;
for(int i=0;i'<'origen.Length;i++)
{
cad = origen.Substring(i,1);
fil=4;
while(fil'<'=20)
{
Console.SetCursorPosition(col,fil-1);
Console.Write(" ");
Console.SetCursorPosition(col,fil);
Console.Write(cad);
for(long t=0;t'<'=9999999;t++);
fil++;
}
col=col+1;
}

Console.ReadKey();
}
}

Clase String C#.

Métodos principales de la clase String:

EndsWith. Determina si el final de la instancia de String coincide con un substring dado.

Equals. Determina si dos strings dados tienen el mismo valor.

Format. Formatea un string conteniendo varios valores y especificadores acerca de cómo cada valor debe ser formateado.

IndexOf. Ubica la primera ocurrencia de un substring dado, en el string.

IndexOfAny. Ubica la primera ocurrencia de cualquier carácter de un substring dado, en el string.

Insert. Inserta un substring en una posición específico dentro del string.

LastIndexOf. Igual que IndexOf, pero comenzando desde el final del string.

LastIndexOfAny. Igual que IndexOfAny, pero comenzando desde el final del string.

Replace. Reemplaza todos los caracter4es de un substring indicado, por otro también indicado.

Split. Identifica los substrings en la instancia y los ordena por separado en un arreglo de strings.

StartsWith. Como EndsWith, pero revisando el comienzo del string.

Substring. Entrega un substring de la instancia, comenzando en un índice dado.

ToLower. Convierte el string as minúsculas.

ToUpper.
Convierte el string a mayúsculas.

Frase Palindroma en C#.

Código analizado en clase con los alumnos.

using System;
using System.Collections.Generic;

namespace Palimdromo
{
class MainClass
{
public static void Main(string[] args)
{
string origensinespacios=null,destino=null;
Console.WriteLine("Ingrese una Palabra: ");
string origen = Console.ReadLine();

//Inverti Cadena elimimando espacios en blanco
for(int i=origen.Length-1;i>=0;i--)
{
if (origen.Substring(i,1) != " ")
destino=destino + origen.Substring(i,1);
}


//Elimimando espacios en blanco cadena origen
for(int i=0;i < origen.Length;i++)
{
if (origen.Substring(i,1) != " ")
origensinespacios = origensinespacios + origen.Substring(i,1);
}

Console.WriteLine("Destino => {0}",destino);
Console.WriteLine("Origen sin Espacio en Blanco => {0}",origensinespacios);

if(origensinespacios == destino)
Console.WriteLine("Frase palindroma...");
else
Console.WriteLine("Frase no es palindroma..!");

Console.ReadKey();
}
}
}

NUMEROS RANDOMICOS EN C#.

Ejemplo Completo.

En este ejercicio llenamos randomicamente, un array unidimensional y luego visualizamos su contenido.

using System;
using System.Collections.Generic;

namespace AppVector001
{
class MainClass
{

public static void Main(string[] args)
{
Random rnd = new Random();
const int limite =20;
int[] fafi = new int[limite];


for(int i=0;i'<'limite;i++)
{
fafi[i]=rnd.Next(1,10);
}

for(int i=0;i'<'limite;i++)
{
Console.WriteLine("Vector [{0}] = {1}",i,fafi[i]);
}

Console.ReadKey();
}
}
}

Estructuras Repetitivas e Iterativas.

Son operaciones que se deben ejecutar un número repetido de veces. El conjunto de instrucciones que se ejecuta repetidamente cierto número de veces, se llama Ciclo, Bucle o Lazo.

Iteración es cada una de las diferentes pasadas o ejecuciones de todas las instrucciones contenidas en el bucle.

Fases de un Programa Cíclico :
1. Entrada de datos e instrucciones previas
2. Lazo o bucle
3. Instrucciones finales o resto del proceso
4. Salida de resultado.

Las estructuras de repetición básicas que son:

Estructura Desde/Para
Estructura Mientras
Estructura Hacer

Estructura Mientras/Para:

Se llama Mientras a la estructura algorítmica que se ejecuta mientras la condición evaluada resulte verdadera. Se evalúa la expresión booleana y, si es cierta, se ejecuta la instrucción especificada, llamada el cuerpo del bucle. Entonces se vuelve a evaluar la expresión booleana, y si todavía es cierta se ejecuta de nuevo el cuerpo. Este proceso de evaluación de la expresión booleana y ejecución del cuerpo se repite mientras la expresión sea cierta.

Cuando se hace falsa, finaliza la repetición. La estructura While y la estructura Do, se conocen como Iterativas. Se usan cuando no se conoce con anticipación el número de veces que se ejecutará la acción.

La diferencia entre ambas es que la condición se sitúa al principio (Mientras) o al final (Hacer) de la secuencia de instrucciones. Entonces, en el primero, el bucle continúa mientras la condición es verdadera (la cual se comprueba antes de ejecutar la acción) y en el segundo, el bucle continúa hasta que la condición se hace verdadera (la condición se comprueba después de ejecutar la acción, es decir, se ejecutará al menos una vez).

Las estructuras Mientras y Para/Desde suelen en ciertos casos, no realizar ninguna iteración en el bucle, mientras que Hacer ejecutará el bucle al menos una vez.



Observa en el flujograma, que se necesita una variable contadora (un índice), para llevar la cuenta de las veces que entramos al cuerpo del ciclo. También es importante notar que esta variable se inicializa antes de entrar al cuerpo del ciclo y dentro del cuerpo se incrementa en una cantidad constante, por lo general en uno.

Esta variable a la vez, nos sirve para compararla con el valor dado en la condición, cuando se cumple la condición, se sale del ciclo.

Representación pseudocodificada:

Mientras
--> Acciones
Fin_mientras

EJEMPLO:

Calcular la suma de los cuadrados de los primeros 100 números enteros y escribir el resultado.



CENTINELAS Y BANDERAS.
Cuando no se conoce a priori el número de iteraciones que se van a realizar, el ciclo puede ser controlado por centinelas.


CENTINELAS.

En un ciclo While controlado por tarea, la condición de While especifica que el cuerpo del ciclo debe continuar ejecutándose mientras la tarea no haya sido completada.

En un ciclo controlado por centinela el usuario puede suspender la introducción de datos cuando lo desee, introduciendo una señal adecuada llamada centinela. Un ciclo Hacer controlado por centinela es cuando el usuario digita una letra para salir como por ejemplo S o N para indicar si desea continuar o no. El bucle debe repetirse hasta que la respuesta del usuario sea "n" o "N".

Cuando una decisión toma los valores de -1 o algún posible valor que no esté dentro del rango válido en un momento determinado, se le denomina centinela y su función primordial es detener el proceso de entrada de datos en una corrida de programa.

Por ejemplo, si se tienen las calificaciones de un test (comprendida entre 0 y 100); un valor centinela en esta lista puede ser -999, ya que nunca será una calificación válida y cuando aparezca este valor se terminará de ejecutar el bucle.

Si la lista de datos son números positivos, un valor centinela puede ser un número negativo. Los centinelas solamente pueden usarse con las estructuras Mientras y Hacer, no con estructuras Desde/Para.

Ejemplo:

Suponga que debemos obtener la suma de los gastos que hicimos en nuestro último viaje, pero no sabemos exactamente cuántos fueron.

Algoritmo: Gastos_Viaje.
Inicio
sumgas: Entero
gasto: Decimal
Leer (gasto)

Mientras gasto <> -1 hacer
sumgas = sumgas + gasto
Leer (gasto)
Fin_mientras
Escribir (sumgas)
Fin

BANDERAS.
Conocidas también como interruptores, switch, flags o conmutadores, son variables que pueden tomar solamente dos valores durante la ejecución del programa, los cuales pueden ser 0 ó 1, o bien los valores booleanos True o False. Se les suele llamar interruptores porque cuando toman los valores 0 ó 1 están simulando un interruptor abierto/cerrado o encendido/apagado.

Ejemplo 1:

Leer un número entero N y calcular el resultado de la siguiente serie: 1 - 1/2+ 1/3 - 1/4 +.... +/- 1/N.

Algoritmo: Series
Inicio
Serie: Decimal
I,N: Entero
band:Caracter

I=1
Leer (N)
band = "T"
Mientras I <= N hacer
Si band = "T" entonces
serie = serie + (1/I)
band = "F"
Sino
serie = serie - (1/I)
band = "T"
Fin_si
I = I + 1
Fin_mientras
Escribir (serie)
Fin

Ejemplo 2.

Obtener suma de los términos de la serie: 2, 5, 7, 10, 12, 15, 17, .... 1800.
Sumser de tipo entero, es el acumulador de términos de la serie band de tipo carácter, es variable auxiliar que indica si al siguiente término de la serie hay que sumarle 3 ó 2.

Algoritmo: Suma_serie
Inicio
i,sumser:Entero
band:Caracter

i=2
sumser = 0
band = "T"
Mientras (i <= 1800) hacer
sumser = sumser + i
Escribir (i)
Si band = "T" entonces
i = i + 3
band ="F"
Sino
i = i + 2
band ="T"
Fin_si
Fin_mientras
Escribir (sumser)
Fin

c#

Implementar un programa computacional, el mismo que me permita visualizar 3 opciones solicitar al usuario seleccione una opción, desarrolle cada una de ellas.

class MainClass
{
public static void Main(string[] args)
{
int op=0;
Console.WriteLine("1. Area Triangulo");
Console.WriteLine("2. Sumar dos Numeros");
Console.WriteLine("3. Base elevado al cubo");
Console.WriteLine("Seleccione una Opción: ");
op=int.Parse(Console.ReadLine());
switch (op)
{
case 1:

Console.Clear();
double b,h,area=0;
Console.Write("Ingrese la Base:-> ");
b=double.Parse(Console.ReadLine());
Console.Write("Ingrese la Altura:-> ");
h=double.Parse(Console.ReadLine());
area=(b*h)/2;
Console.WriteLine("Area Triangulo => {0}",area);
break;

case 2:
Console.Clear();
int n1,n2,r=0;
Console.Write("Ingrese Primer Numero-> ");
n1 = int.Parse(Console.ReadLine());
Console.Write("Ingrese Segundo Numero-> ");
n2 = int.Parse(Console.ReadLine());
r= n1 + n2;
Console.WriteLine("Resultado Suma => {0}",r);
break;

case 3:
Console.Clear();
double bs,e=0;
Console.Write("Ingrese a la Base-> ");
bs = double.Parse(Console.ReadLine());
e = Math.Pow(bs,3);
Console.WriteLine("Resultado Exponente => {0}",e);
break;

default:
Console.WriteLine("Opción no Existe.....");
break;
}
Console.ReadKey();
}
}

Practica Estructura de Datos (Arreglos)

Ingenieros, aqui les he dejo un ejemplo, el mismo tiene el principio del programa que ustedes deben de hacer, si lo leen y estudian bien, se daran cuenta de que las demas opciones seran casi las mismas.  La idea es que tengan luz de como deben de trabajar.

using System;
using System.Collections.Generic;
using System.Text;

namespace RegistroCalificaciones
{
class Program
{
static void Main(string[] args)
{
//Entonces en su metodo static Main pueden tener sus operaciones de la siguiente forma

string[,] mat1; // declaracion del arreglo
int f1, c1; // El número de filas y columnas del arreglo
//Aqui Llaman al menu y recojen la opción seleccionadabyte opcion;
do
{
opcion = menu();
} while (opcion >= 5);

switch (opcion)
{
case 1: // Registro de estudiantes
// Leemos el número de filas y columnas de la matrizConsole.WriteLine("Introduzca el número de filas de la matriz");
f1 = int.Parse(Console.ReadLine());
Console.WriteLine("Introduzca el número de columnas de la matriz");
c1 = int.Parse(Console.ReadLine());

// Pedimos los datos de filas y columnasConsole.WriteLine("Introduzca los datos de los estudiantes: Nombres y Notas");
mat1 = leer(f1, c1);
Console.Clear();
Main(null);

//Aqui si quieren imprimen en pantalla los datos que introdueron en el arreglo
/*Para mas utilidad en vez de imprimir la matriz directamente crean un metodo

que se llame imprimir y que el mismo espere una matriz*/

break;



case 2: // Segunda Opcion
Console.WriteLine("Metan mano de aqui pa lante, ya lo ma fuerte esta hecho");
break;



//Tercera opciondefault: //Aqui iria cualquier otro desnivel que quieran controlarbreak;
}
Console.ReadKey();
}

// Mas o menos pueden hacer un menu que tenga vida pripia, es decir un metodo, asi:public static byte menu()
{
try {
byte opcion;
Console.SetCursorPosition(10,1);
Console.WriteLine("Sistema de Registro de Notas");
Console.SetCursorPosition(0,3);
Console.WriteLine("Elija la operación que quiere hacer:");
Console.WriteLine("1 - Registrar Estudiantes");
Console.WriteLine("2 - Registrar Notas");
Console.WriteLine("3 - Imprimir Notas con Promedio");

opcion = byte.Parse (Console.ReadLine());

if (opcion >=1 && opcion <=3) {
Console.Clear();
return opcion;
}
else {
Console.Clear();
return 5;
}
}

catch { //En caso de errorConsole.Clear();
return 5;
}
}

// Función que lee los datos de la matrizpublic static string[,] leer(int filas, int columnas)
{
string[,] ret = new string[filas, columnas];
for (int fila = 0; fila < filas; fila++)
{
for (int columna = 0; columna < columnas; columna++)
{
ret[fila, columna] = Console.ReadLine();
}
}
return ret;
}
}
}