Laboratorio II-2012

84
________________________________ 20/03/2012 _____________________________________ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { System.Console.WriteLine(13 + 21); } } } _____________________________________________________________________________ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int a, b,suma; a = 13; b = 21; suma = a+b; System.Console.WriteLine("{0} + {1} = {2}", a, b, suma); } } } ______________________________________________________________________________ using System; using System.Collections.Generic; using System.Linq; using System.Text;

description

Ejercicios-teoria

Transcript of Laboratorio II-2012

Page 1: Laboratorio II-2012

________________________________20/03/2012_____________________________________using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { System.Console.WriteLine(13 + 21); }

}} _____________________________________________________________________________using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { int a, b,suma; a = 13; b = 21; suma = a+b; System.Console.WriteLine("{0} + {1} = {2}", a, b, suma); }

}} ______________________________________________________________________________using System;using System.Collections.Generic;using System.Linq;using System.Text;

Page 2: Laboratorio II-2012

namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int c = a % b; Console.WriteLine("El resultado es : {0}", c); }

}}______________________________________________________________________________using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int c = a - b; Console.WriteLine("El resultado es : {0}", c); }

}}______________________________________________________________________________using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int c = a * b;

Page 3: Laboratorio II-2012

Console.WriteLine("El resultado es : {0}", c); }

}} EJ 6: Calcular las raíces ,vértice, corte de Y de una función cuadrática a) -2+3*5-2 + 1513b)(20+5)%61c) 15+(-5)*6/1012 d)2+10/5*2-7%1 Nombre del tipo Tamaño Rango de valores.sbyte 1 -128 a 127byte 1 0 a 255short 2 -32768 a 32762ushort 2 0 a 65535int 4 -2147483648 a 2147483647uint 4 o a 4294967295long 8 -9223372036854775808 a 9223372036854775807 A)a+=b a = a+bb)a-=b b=a-bc)a*=b d)a/=be)a%b _________________________________21/03/2012____________________________________ Ejercicio 9: ¿Cuál sera el resultado de las siguientes operaciones? a=5;b=a+2;b-=3;c=-3;c*=2;++c;a*=b ______________________________________________________________________________

Page 4: Laboratorio II-2012

Tipo de dato real.

Coma fija 3 enteros , 4 decimales Coma flotante numero de enteros y decimales variables , importa las cifras significativas (a partir del ultimo 0) EJ 134050000000,000000734912,0000034

float double decimalTamaño en bits 32 64 128 Valor máspequeño -1,51045 5,010324 1,01028 Valor másgrande 3,41038 1,710308 7,91028 CifrasSignificativas 7 15-16 28-29 Math.sqrt(); ______________________________________________________________________________ Control formato de salida Double numero 12.3;Console.WriteLine (numero.ToString (“n1”));Console.WriteLine (numero.ToString (“n3”));Console.WriteLine (numero.ToString (“0.0));Console.WriteLine (numero.ToString (“0.000”));Console.WriteLine (numero.ToString (“ #.# “));Console.WriteLine (numero.ToString (“ #### “)); ______________________________________________________________________________ Secuencias de escape Secuencia \’ Muestra comilla simple \a\” Muestra comilla doble \b\\ Doble Barra \\0 Carácter nulo

Page 5: Laboratorio II-2012

using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { string frase; frase = "bienvenido a laboratorio"; Console.WriteLine("La frase ex \"{0}\"", frase); Console.WriteLine("Introduce una nueva frase"); frase = Console.ReadLine(); Console.WriteLine("Ahora la frase es \"{0}\"", frase); } }} ______________________________________________________________________________ Sentencia de Control if (Condición) Sentencia Booleano (True - False) Ejercicio: Identificar si el nro ingresado por el usuario es par o impar using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { byte a =Convert.ToByte(Console.ReadLine());

Page 6: Laboratorio II-2012

if (a % 2 == 0) { Console.WriteLine("Par"); } else Console.WriteLine("Impar"); } }} ______________________________________________________________________________Identificar si el caracter ingresado es una vocalusing System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { string vocal; vocal = Console.ReadLine(); Console.Clear(); if ((vocal == "a") || (vocal == "o") || (vocal == "i") || (vocal == "e") || (vocal == "u")) { Console.WriteLine("{0} Es una vocal", vocal); }else Console.WriteLine("{0} No es vocal",vocal); } }} ______________________________________________________________________________13:Ingresar 2 numeros cortos y me diga si son iguales o cual es mayor. using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program

Page 7: Laboratorio II-2012

{ static void Main(string[] args) { byte a = Convert.ToByte(Console.ReadLine()); byte b = Convert.ToByte(Console.ReadLine()); if (a == b) Console.WriteLine("Son Iguales"); else if (a > b) Console.WriteLine("{0} > {1}",a,b); else Console.WriteLine("{0} < {1}", a, b); } }} ______________________________________________________________________________ Operador condicional ? Hay una forma de asignar un valor segùn se de o no una condiciòn nombrevariable = condicion ? valor 1 : valor 2; significan : “sì se cumple la condicion toma el valor v1 sino v2 “ numeromayor = (a>b)? a:b; ______________________________________________________________________________ ej16 Adivinar el numero. La computadora elige un nro entero entre 0-9 y tener 3 veces para adivinar. _________________________________27/03/2012____________________________________ Switch Es la opcion frente a usar muchos if anidados Formato : Switch (Expresión){

case valor 1: sentencia1break

-----default: otra sentencia

Page 8: Laboratorio II-2012

break;} ____ using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication32{

class Program{

static void Main(string[] args) { char letra; Console.WriteLine("Introduzca una letra"); letra = Convert.ToChar(Console.ReadLine()); switch (letra) { case "0": Console.WriteLine("Espacio"); break; case "1": goto case "0"; case "2": goto case "0"; case "3": goto case "0"; case '0': Console.WriteLine("Digito"); break; default: Console.WriteLine("Ni espacio ni digito"); } }

}} _________________________________28/03/2012____________________________________ FOR: Se usa para hacer que ciertas partes del programa se repita un cierto numero de veces For (valorinicial; condicionrepeticion;incremento)

sentencia; Ej:int contadorfor(contador =1;contador <=10;contador++)Console.Write(“{0}”,contador); Ejercicio: Escribir las tablas de multiplicar del 1 al 5.

Page 9: Laboratorio II-2012

using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int x, y; for(x=1;x<=5;x++) { for(y=1;y<=5;y++) { Console.WriteLine("{0} * {1}={2}", x, y, x * y); } Console.WriteLine(); } } }}______________________________________________________________________________Numeros Primos: using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int cont = 0; for (int i = 2; i <= 1000; i++){ for (int j = 1; j <= i; j++) { if (i % j == 0){ cont = cont + 1; } } if (cont < 3){ Console.WriteLine("{0}",i); } cont = 0;

Page 10: Laboratorio II-2012

} Console.ReadKey(); } } } ______________________________________________________________________________ Fibonacci: using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int i; for (i = 1; i < 100; i++) { Console.WriteLine("{0}\t", fibonacci(i)); } Console.ReadKey();f } static int fibonacci(int n) { int a, n1, n2, n3; n1 = 1; n2 = 1; n3 = 1; if (n == 1) { return 1; } if (n == 2) { return 1; } if (n > 2) { for (a = 1; a < n; a++)

Page 11: Laboratorio II-2012

{ n3 = n1 + n2; n1 = n2; n2 = n3; } } return n3; } }} ==================================================================3/4/12 ARRAY Conjunto de elementos del mismo tipoformato: Ej conjunto de números enteros int[] , y para reservarles un espacio de memoria 4 numeros enteros

int[]ejemplo = new int [4]; NOTA: Los elementos del array comienzen a numerarse desde 0. En este ejemplo serian: ejemplo[0] , ejemplo[1] , ejemplo[2] , ejemplo[3] ejercicio: Definir 4 numeros enteros y hallar su suma , promedio. PONE LA BARRITA DE COLOR CON LA FECHA , GRACIAS, O LO HAGO YO DESPUÉS, DEJÁ. PUTO: Regards, Dolan. TABLAS BIDIMENSIONALES int[,] notas1 = new int [2,2];notas1[0,0] = 1;notas1[0,1] = 2;

Page 12: Laboratorio II-2012

notas1[1,0] = 3;notas1[1,1] = 4; int notas2={

{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20} EJERCICIOIngresar Paises por continentesQUINI 6 using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{class Program{static void Main(string[] args){int capital, apuesta;int[] nsale = new int[6];int[] napostado = new int[6];Random aux = new Random();int i;capital = 1;i = 0; apuesta = 1; do{Console.WriteLine("ttt ++++Bienvenido a Quini 6++++");Console.WriteLine("A qué número desea apostar?");for (i = 0; i <= 5; i++){napostado = leernumero();nsale = aux.Next(30);for (int d = 0; d <= 5; d++){if (nsale == nsale[d]){nsale = aux.Next(30);}

Page 13: Laboratorio II-2012

}if (napostado > 30){Console.WriteLine("El Numero maximo al que puedes adivinar es el 30");}else if (apuesta > capital){Console.WriteLine("usted no tiene suficiente vidas para continuar!");} }for (i = 0; i <= 5; i++){for (int d = 0; d <= i; d++){if (nsale == napostado[d]){Console.WriteLine("Salio el **{0}** has ganado", nsale);}}}capital = 0; Console.WriteLine("Le quedan 0 vidas");Console.ReadKey();Console.Clear(); } while (capital > 0);for (i = 0; i <= 5; i++){if (capital == 0){Console.WriteLine("Tu numero es {0} --- {1}", napostado, nsale);}}Console.WriteLine("Lo sentimos Usted ha perdido todas las vidas");Console.ReadKey(); }static int leernumero(){int a;string aux;aux = Console.ReadLine();

Page 14: Laboratorio II-2012

a = Convert.ToInt32(aux);return (a);} }} _________________________________10/04/2012____________________________________ Estructuras o registros. Registro = Agrupación de datos, no es necesario que sean del mismo tipo, se definen con la palabra “struct”.Nota = Primero hay que declarar la estructura de nuestro registro, pero NO dentro del “main “. Dentro de main se van a declarar las variables de ese tipo.Los datos que forman “struct” pueden ser públicos o privadosPor el momento utilizaremos PublicPara acceder a cada uno de los datos que forman el registro;tanto para leer como para cambiar su contenido, será necesario indicar el nombre de la variable y el del dato (o campo) separados por un punto.

variable.campo

Ap Nombre Edad Telefono D.N.I1 gomez carlos 19 - 2312302813212 carreño ramon 21 546454355454 Public class ejemplo{

struct tipopersona{public string nombre;public char inicial;public int edad;public float nota;}

Main ()tipopersona [] persona; Persona.Nombre=”Juan”;“.inicial = “j”;“.edad”=20

Page 15: Laboratorio II-2012

“.nota” = 7.5f; Console.WriteLine(“La edad de {0} es {1}”,persona.nombre,persona.edad) Ejercicio: Datos de 10 mp3. using System; public class Ejemplo39{ struct datos { public string artista; public string nombre; public int tamaño; public float longitud; } public static void Main() { datos [] a = new datos[10]; string opcion = Convert.ToString(Console.ReadLine()); Console.WriteLine("[1] - Agregar\n[2] - Buscar\n[3] - Borrar\n[4] - Salir"); Do switch (opcion) { case "1":for(int i =0;i<10;i++) } }} _________________________________11/04/2012____________________________________ _________________________________17/04/2012____________________________________ .Trabajo con cadenas *Las cadenas de caracteres son como los arrays. El primer elemento es cadena [0]

Page 16: Laboratorio II-2012

*Las cadenas NO se pueden modificar letra a letra. Ej : Texto[0] = “a”.*Podemos saber cuantas letras forman una cadena con cadena.length. Esto permite recorrer toda la cadena letra a letra usando “For”.*Podemos extraer parte de una cadena con substring.Saludo = frase.substring (0,4)Caracter de inicioCantidad de caracteres a extraer a partir de inicio.Si omitimos éste valor extrae todos. Buscar en una cadena. Para ver si una cadena tiene cierto texto, usamos index Of, que nos dice en qué posición se encuentra , y si no devuelve (-1) Ej: if (nombre.IndexOf(“Juan”,5,5)> = 0 Console.Write (“Bienvenido, Juan”); Parámetro opcional para indicar a partir de qué posición buscar.Opcional. Indica hasta que posición buscar. de forma similar . LastIndexOf, indica la última posición, es decir busca de derecha a izquierda. Otras manipulaciones de cadenas ToUpper() Convierte a mayúsculas. Ej nombreCorrecto = nombre.toUpper()ToLower() Convierte a minúsculas. Ej pass2 = pass.tolower();Insert (int posicion,string subcadena) insertar una subcadena dentro de una posición de una cadena inicial. Ej: nombreFormal = nombre.insert (0, “Don”);Remove(int posicion,int cantidad) Elimina una cierta cantidad de caracteres a partir de una posición. Ej apellidos = nombreCompleto (0,6);Replace (String textoasustituir,string cadenasustituta) sustitue una cadena todas las veces que aparezca por otra. Ej: Nombre Corregido = Nombre.Replace(“Pepe”,”Jose”);

Ejemplo : namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { String ejemplo = "Hola, que tal estas"; Console.WriteLine("El texto es {0}",ejemplo); Console.WriteLine("La primera letra es : {0}", ejemplo[0]); Console.WriteLine("Las tres primeras letras son:{0}", ejemplo.Substring(0,3)); Console.WriteLine("La longitud del texto es {0}", ejemplo.Length); Console.WriteLine("La posición de \"que\" es: {0}", ejemplo.IndexOf("que")); Console.WriteLine("La última A está en la posición: {0}",ejemplo.LastIndexOf("a"));

Page 17: Laboratorio II-2012

Console.WriteLine("En mayúsculas: {0}",ejemplo.ToUpper()); Console.WriteLine("En minúsculas: {0}",ejemplo.ToLower()); Console.WriteLine("Si insertamos \";tio\": {0}",ejemplo.Insert(4,", tio")); Console.WriteLine("Si borramos las 6 primeras letras: {0}",ejemplo.Remove(0,6)); Console.WriteLine("Si cambiamos Estas por Estamos:{0}",ejemplo.Replace("estas","estamos")); }

}} _________________________________18/04/2012____________________________________ Para descomponer una cadena en trazos utilizando delimitadores (espacios o comas) se puede usar split, que crea un array a partir de los fragmentos de la cadena. main(){

String ejemplo = “uno,dos,tres”;char[] delimitadores = ( ‘,’ ,’,’);int i;string[] ejemplopartido = ejemplo.split(delimitadores);for(i=0;i<ejemplopartido.length;i++)Console.WriteLine(“fragmento{0}={1}”,i,ejemplopartido[i]); ◘Para comparar cadenas se usa compareto,que devolverà un numero mayor que 0, si la cadena ingresada es mayor que la cadena que indicamos como parámetro , o un numero negativo si nuestra cadena es menor, o “0” si son iguales.◘Si deseamos ignorar mayúsculas o minusculas se agrega True.Ejemplo: if(string.Compare(Frase,hola,true)>0)

Console.WriteLine(“Es mayor que hola (may o minus)”); Ejemplo:using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication13{ class Program { public class Ejemplo43c {

Page 18: Laboratorio II-2012

public static void Main() { string frase; Console.WriteLine("Escriba una palabra"); frase = Console.ReadLine(); if (frase == "hola") Console.WriteLine("Ha escrito hola"); if (frase.CompareTo("hola") > 0) Console.WriteLine("Es mayor que hola"); else if (frase.CompareTo("hola") < 0) Console.WriteLine("Es menor que hola"); bool ignorarMays = true; if (String.Compare(frase, "hola", ignorarMays) > 0) Console.WriteLine("Es mayor que hola (mays o mins)"); else if (String.Compare(frase, "hola", ignorarMays) < 0) Console.WriteLine("Es menor que hola (mays o mins)"); else Console.WriteLine("Es hola (mays o mins)"); Console.ReadKey(); } } }} STRING BUILDER Si necesitamos modificar una cadena letra a letra no podemos hacerlo con String, para ello debemos usar StringBuilder. * Hay que reservarle espacio en memoria con la palabra New al igual que los arrays y se pueden convertir a una “convencional” usando ToString. * Cargar using System.Text; Ejemplo : Main() StringBuilder cadenamodificable=New StringBuilder(“Hola”);

Page 19: Laboratorio II-2012

cadenamodificable[0] = ’ M ’ ; Console.WriteLine(“cadena modificada:{0}”,cadenamodificable); String cadenanormal; cadenanormal=cadenamodificable.ToString(); Console.WriteLine(“cadena normal a partir de ellos: {0}”,cadenanormal);; EJERCICIO:

● Crear un juego del ahorcado, en el que un primer usuario introduzca la palabra a adivinar, se muestre esta programa oculta con guiones (-----) y el programa acepte las letras que introduzca el segundo usuario, cambiando los guiones por letras correctas cada vez que acierte (por ejemplo, a---a-t-). La partida terminará cuando se acierte la palabra por completo o el usuario agote sus 8 intentos.

25/4/12 using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { Console.WriteLine("Ingrese la Palabra"); string i = Console.ReadLine(); int b; int a; int vidas = 8; b = i.Length; for (a = 1; a <= b; a++) { Console.Write(" - "); } Console.WriteLine(); int x;

Page 20: Laboratorio II-2012

char[] cosa = new char[b]; for (x = 0; x < b; x++) { cosa[x] = Convert.ToChar(i.Substring(x, 1)); } //Console.WriteLine("Ingrese Una Letra"); //char p = Convert.ToChar(Console.ReadLine()); do { char o; Console.WriteLine("Ingrese Una Letra"); o = Convert.ToChar(Console.ReadLine()); StringBuilder cadena = new StringBuilder(i foreach (char palabra in i) { int cont = 0; cont = cont + 1; { if (o == palabra) { cadena[cont] = o; Console.WriteLine("{0}", palabra); } else { Console.Write(" - "); } } } } while (vidas != 0); }

}} ______________________________________________________________________________using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication4{

Page 21: Laboratorio II-2012

class Program{

static void Main(string[] args) { Console.WriteLine("Ingrese una palabra"); string j = Console.ReadLine(); int b, x; x = 0; b = j.Length; StringBuilder o = new StringBuilder(j); for (x = 0; x < b; x++) { o[x] = '-'; Console.Write("{0}", o[x]); } Console.ReadLine(); char y; int w = j.Length; int v = 0; int r = 0; do { Console.WriteLine("Ingrese una letra"); y = Convert.ToChar(Console.ReadLine()); Console.WriteLine(); int cont = -1; foreach (char palabra in j) { cont = cont + 1; if (y == palabra) {

Page 22: Laboratorio II-2012

o[cont] = palabra; for (r = 0; r < j.Length; r++) { if (o[r] != '-') { ; } else { v = v + 1; } } if (v == 0) { Console.Write("Ganaste!"); }else Console.Write(" {0} ", o[cont]); } else { Console.Write(" {0} ", o[cont]); } } Console.WriteLine(); w = w - 1; } while (w != 0); }

}} //Console.WriteLine("Perdiste"); _________________________________15/05/2012____________________________________ -Programa para administrar hasta 1000 fichas y los siguientes datos: nombre del fichero, tamaño( en kb → nro entre 0 <= 8.000.000.000 )

Page 23: Laboratorio II-2012

1 - Añadir datos a un fichero. 2 - Mostrar el nombre de todos los ficheros almacenados. 3 - Mostrar ficheros que sedan de más de un cierto tamaño (ej: 2000kb) 4 - Ver todos los datos de un cierto fichero ( a pedir de su nombre ) 5 - Salir de la aplicación( como no usamos ficheros, los datos se perderán ) _________________________________16/05/2012____________________________________ using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { struct tipoficha { public string nombre; public long tamaño; } static void Main(string[] args) { tipoficha[] fichas = new tipoficha[1000]; int a; int nf=0; do { Console.WriteLine("[1] - Añadir datos\n[2] - Mostrar nombre de ficheros\n[3] - Ficheros mayores a 2000kb\n[4] - Ver datos de cierto fichero \n[5] - Salir"); Console.WriteLine("Ingrese una opción"); a = Convert.ToInt32(Console.ReadLine()); switch (a) { case 1: if (nf < 1000)

Page 24: Laboratorio II-2012

{ Console.Clear(); Console.WriteLine("Ingrese Nombre"); fichas[nf].nombre = Console.ReadLine(); Console.WriteLine("Ingrese Tamaño [Kb]"); fichas[nf].tamaño = long.Parse(Console.ReadLine()); nf++; } else { Console.WriteLine("Ya ingresó más de 1000 fichas."); } break; case 2: { Console.Clear(); for (int i = 0; i < nf; i++) { Console.WriteLine("NOMBRE: {0}\nTAMAÑO: {1}kb",fichas[i].nombre,fichas[i].tamaño); } } break; case 3: { Console.Clear(); Console.WriteLine("Archivos de qué tamaño desea mostrar?"); long b = long.Parse(Console.ReadLine()); for (int i = 0; i < nf; i++) { if (fichas[i].tamaño >= b) { Console.WriteLine("Nombre: {0}\nTamaño: {1}",fichas[i].nombre,fichas[i].tamaño); } } } break; case 4: { Console.Clear(); Console.WriteLine("¿Qué nombre desea buscar?"); string c = Console.ReadLine(); for (int i = 0; i < nf; i++) { if (fichas[i].nombre == c ) {

Page 25: Laboratorio II-2012

Console.WriteLine("Nombre: {0}\nTamaño: {1}", fichas[i].nombre, fichas[i].tamaño); } } } break; case 5: { Console.WriteLine("Fin del Programa"); } break; default: Console.WriteLine("Opcion no válida"); break; } } while (a != 5); } }} _________________________________16/05/2012____________________________________

Un programa que sea capaz de almacenar los datos de 50 personas: Nombre,Dirección,teléfono,edad. Deberá ir pidiendo los datos uno por uno.Hasta que un nombre se introduzca vacío.Entonces deberá aparecer un menú que permita : Mostrar la lista de todos los nombres, mostrar las personas de cierta edad,mostrar las personas cuya inicial sea la que el usuario indique; Este menú debe repetirse hasta que se escoja la opción salir Nota: Los nombres se muestran ordenados alfabéticamente..

Métodos para Ordenar.

Burbuja(Intercambiar cada pareja consecutiva que no esté ordenada)

Page 26: Laboratorio II-2012

Para i =1 hasta n-1Para y=i+1 hasta nsi a[i]>a[j] intercambiados a[i],a[j]

Algunos autores hacen el bucle exterior creciente y estos decreciente,así:

Para i=n desc hasta 2Para j=2 hasta isi a[j-1] > a[j]intercambiar (a[j-1] > a[j]

Seleccion directa en cada paso busca el menor y lo intercambia el final de la pasada Para i=1 hasta n-1menor = iPara j = i+1 hasta nSi a[j] < a [menor]mejor = jsi menor <> 1intercambiar (a[i],a[menor]) _________________________________05/06/2012____________________________________ Funciones Cada fragmento del programa será una independencia al realizar una función breve y concreta El programa principal es más fácil de leer y corregir Repartir el trabajo entre varias personas. using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication4{

class Program{

public static void escribirnro(float n) { Console.WriteLine(n.ToString("#.###")); } static void Main(string[] args) { float x;

Page 27: Laboratorio II-2012

x = 5.1f; Console.WriteLine("El primer nro real es..."); escribirnro(x); Console.WriteLine("y otro distinto es..."); escribirnro(2.3f); }

}} ______________ using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication4{

class Program{

public static int cuadrado(int n) { return n * n; } static void Main(string[] args) { int numero; int resultado; numero = 5; resultado = cuadrado(numero); Console.WriteLine("El cuadrado de {0} es {1}",numero,resultado); Console.WriteLine("Y el de 3 es {0}",cuadrado(3)); }

}} _________________________________06/06/2012____________________________________ using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args)

Page 28: Laboratorio II-2012

{ menu(); Console.WriteLine("Elija una opción"); int w = int.Parse(Console.ReadLine()); Console.Clear(); double x1= 0; double x2= 0; double a, b, c; string a1; switch (w) { case 1: { espacio(); } break; case 2: { cubo(); } break; case 3: { Console.WriteLine("Ingrese valor de A"); a = double.Parse(Console.ReadLine()); Console.WriteLine("\nIngrese valor de B"); b = double.Parse(Console.ReadLine()); Console.WriteLine("\nIngrese valor de C"); c = double.Parse(Console.ReadLine()); x1 = raízc(a, b, c); Console.WriteLine(("El valor de x1 es:\t{0}"), x1.ToString("#.###")); x2 = raízc2(a, b, c); Console.WriteLine(("El valor de x2 es:\t{0}"), x2.ToString("#.###")); } break; case 4: { Console.WriteLine("Ingrese Palabra:"); a1 = Console.ReadLine(); char o = inicial(a1); Console.WriteLine("La primera letra es:",o); char p = fin(a1); Console.WriteLine("La última letra es:",p); }

Page 29: Laboratorio II-2012

break; } } public static void menu() { Console.WriteLine("[1]Linea Blanca\n[2]Cubo\n[3]Raíz\n[4]Letras"); Console.WriteLine(); } public static void espacio() { Console.Clear(); for (int a = 0; a <= 26; a++) { for (int i = 0; i < 80; i++) { Console.Write("▒"); } Console.Write("▒"); } Console.WriteLine(""); } public static void cubo() { Console.WriteLine("Ingrese numero:"); double n = double.Parse(Console.ReadLine()); Console.Clear(); Console.WriteLine("A qué exponente desea elevarlo?"); double e = double.Parse(Console.ReadLine()); double a = Math.Pow(n, e); Console.Clear(); Console.WriteLine("El número {0} elvado a la potencia {2} es igual a = {1}", n, a,e); } public static double raízc(double j, double h, double g) { double e, r; e = (h * h) - 4 * j * g; r = Math.Sqrt(e); double y1 = (-h + e) / (2 * j); return (y1);

Page 30: Laboratorio II-2012

} public static double raízc2(double j, double h, double g) { double e, r; e = (h * h) - 4 * j * g; r = Math.Sqrt(e); double y2 = (-h - e) / (2 * j); return (y2); } public static char inicial(string v) { StringBuilder a = new StringBuilder(v); int c = a.Length(); } public static char fin(string b) { }

}}______________________________________________________________________________public static int potencia(int nBase,int nExponente) {int temporal=1;int i; for (i=1;i<nExponente;+i++) temporal *=nBase; return temporal; } Main() {int num1,num2; Console.WriteLine(“Introduzca la base:”); num1=Convert.ToInt32(Console.ReadLine()); Console.WriteLine(“Introduzca el siguiente exponente:”);

Page 31: Laboratorio II-2012

num2=Convert.ToInt32(Console.ReadLine()); Console.WriteLine(“{0} elevado a {1}={2}”,num1,num2,potencia(num1,num2)); } _________________________________12/06/2012_______________________________________ Hacer con función:A) Si el número ingresado es primob) En un triángulo de 2 lados que indique el valor del 3eroc)Seno,coseno,tangente de un ángulo.d)Longitud,circunferencia,superficie,circuloe)Recibe una cadena y una letra y dice la cantidad de veces que aparece la letra en la cadena.f)Ingreso letra y nro y me forma un triángulo. Ej letra *, numero 4; **** *** ** *a) B) using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { Console.WriteLine("Ingrese lados del triangulo:"); Console.ReadKey(); Console.Clear(); Console.WriteLine("Lado A?"); double a = Convert.ToDouble(Console.ReadLine()); Console.Clear(); Console.WriteLine("Lado B?");

Page 32: Laboratorio II-2012

double b = Convert.ToDouble(Console.ReadLine()); Console.Clear(); triangulo(a,b); Console.WriteLine("El resultado es {0} ", triangulo(a, b));

} public static double triangulo(double o, double u) { double c; c = (o * o) + (u * u); double d = Math.Sqrt(c);

return d; }

}} _________________________________________________________________________________________ using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication2{

class Program{

static void Main(string[] args) { Console.WriteLine("Ingrese Ángulo!"); double m = Convert.ToDouble(Console.ReadLine()); seno(m); coseno(m); tangente(m); Console.Clear(); Console.WriteLine("El ángulo que uste' ingresó es {0}",m); Console.WriteLine("El seno del ángulo que ingreso es: {0}", seno(m)); Console.WriteLine("El coseno es: {0}",coseno(m)); Console.WriteLine("Y la tangente es: {0}", tangente(m)); } public static double coseno(double n) { double a = Math.Cos(n); return a; }

Page 33: Laboratorio II-2012

public static double seno(double n) { double b = Math.Sin(n); return b; } public static double tangente(double n) { double c = Math.Tan(n); return c; }

}} _________________________________________________________________________________________ using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication3{

class Program{

static void Main(string[] args) { Console.WriteLine("Ingrese Radio."); double r = Convert.ToDouble(Console.ReadLine()); double x; x = circulo(r); longitud(x); superficie(r); Console.Clear(); Console.WriteLine("Circulo:"); Console.WriteLine("Diametro {0}",circulo(r)); Console.WriteLine("Longitud {0}",longitud(x)); Console.WriteLine("Superficie: {0}", superficie(r)); } public static double longitud(double a) { double c = 3.14 * a; return c; } public static double circulo(double b) {

Page 34: Laboratorio II-2012

double p = b * 2; return p; } public static double superficie(double c) { double u = 3.14 * (c * c); return u; }

}} _________________________________________________________________________________________ using System;using System.Collections.Generic;using System.Linq;using System.Text; /* 0-1000 1000-10000 10000-100000 100000-1000000 1000000-10000000 */ namespace ConsoleApplication4{

class Program{

static void Main(string[] args) { primo1(); Cosnoel primo2(); primo3(); primo4(); primo5(); } public static int primo1() { return 0; } public static int primo2()

Page 35: Laboratorio II-2012

{ return 0; } public static int primo3() { return 0; } public static int primo4() { return 0; } public static int primo5() { return 0; }

}} _________________________________19/06/2012_______________________________________zALCANCE DE VARIABLES *Las variables se pueden declarar dentro de un bloque(una funcion), y entonces solo ese bloque las conocera, no se podran usar desde ningun otro bloque del programa -> “Variables Locales”. * Si declaramos una variable del programa, fuera de todos los “bloques” de programa, sera una “Variable Global”, a la que se podra acceder desde cualquier parte. Ejercicio: Explicar los valores de “n” Public Static Void duplica( int x){ Console.WriteLine(“El valor recibido de n es:{0}”,x); x=x*2;rConsole.WriteLine(“Y ahora n vale={0}”,x); Public Static Void Main(); int n=5; Console.WriteLine(“n vale ={0}”,n); duplica( n);

Page 36: Laboratorio II-2012

Console.WriteLine(“Ahora n vale={0}”,n);}------------------------------------------------------------------------------------------------------------------------------------------------------------ using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

public static void duplica(ref int x) { Console.WriteLine("El valor recibido de N es:{0}", x); x = x * 2; Console.WriteLine("Y ahora N vale={0}", x); } static void Main(string[] args) { int n = 5; Console.WriteLine("N vale={0}", n); duplica(ref n); Console.WriteLine("Ahora N vale={0}", n); Console.ReadKey(); }

}} ------------------------------------------------------------------------------------------------------------------------------------------------------------ using System;using System.Collections.Generic;using System.Linq;using System.Text;

Page 37: Laboratorio II-2012

namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { Random r = new Random(DateTime.Now.Millisecond); int aleatorio = r.Next(1, 10); Console.WriteLine("Un numero entre 1 y 10:{0}", aleatorio); Console.ReadKey(); }

}} ------------------------ Tabla de Math.Sqrt Abs(x) : valor absoluto Celling(x): El valor entero superior a X y mas cercano a el Exp(x): E elevado a la X Floor(x): El mayor valor entero que es menor a X Pow(x,y): X elevado a Y Round(x,cifras): Redondea un numero ------------------------------------------- * Hacer un programa que calcule el factorial de un numero. Ejemplo: using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1

Page 38: Laboratorio II-2012

{class Program{

public static long fact (int n) { if (n == 1) return 1; return n * fact(n - 1); } static void Main(string[] args) { int num; Console.WriteLine("Introduzca un numero entero:"); num = System.Convert.ToInt32(System.Console.ReadLine()); Console.WriteLine("Su factorial es:{0}",fact(num)); Console.ReadKey(); }

}} -----------------------------------------------------------------------------------------------------------------------------------------------------------CONTINUAR EJERCICIO: using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication2{

class Program{

static void Main(string[] args) { int a, i; i = 1; char b;

Page 39: Laboratorio II-2012

Console.WriteLine("Ingrese un numero:"); a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ingrese un signo:"); b = Convert.ToChar(Console.ReadLine()); do { for (i = 1; i <= a; i++) { Console.Write("{0}", b); } Console.WriteLine(""); if (a == 0) { Console.WriteLine(""); } else { a--; } } while (a != 0); Console.ReadKey(); }

}} * Recursividad, Hacer serie de Fibonacci de forma recursiva. * Crear un programa para calcular la suma de los elementos de un vector * Crear un programa para calcular el mayor de los elementos de un vector * Crear un programa para dar vuelta a una cadena de caracteres * Crear un programa recursivo e iterativo que me diga si una palabra es un palíndromo. * Crear un programa que encuentre el máximo común divisor de dos números usando el algoritmo de Euclides: Dado 2 números enteros positivos , m y n que divide a ambos, dividir m por n, para obtener el resto r (0 <= 1< m), Si r = 0 el McD es n; Si no, el máximo común divisor es McD(m,r) _________________________________03/07/2012_______________________________________ FIBONACCI:

Page 40: Laboratorio II-2012

using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { int v1, v2, cont1; cont1 = 0; v1= 1; v2=1; Console.WriteLine("{0}",v1 ); Console.WriteLine("{0}",v2); fibonacci(v1, v2,cont1); Console.ReadKey(); } public static int fibonacci(int n1, int n2,int cont) { int n3; n3 = 0; if (cont == 15) { return 0; } n3 = n1 + n2; Console.WriteLine("{0}", n3); cont++; return fibonacci(n2, n3,cont); } }

}

Page 41: Laboratorio II-2012

_------------------------------ using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication4{

class Program{

static void Main(string[] args) { int a= int.Parse(Console.ReadLine()); int[] cosa = new int[a]; for (int i = 0; i < a; i++) cosa[i] = int.Parse(Console.ReadLine()); }

}} _________________________________10/07/2012_______________________________________ using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { public static int sumavector(int b,int i,int acumulador) { int[] vec = new int[b]; i++; if (i < b) { vec[i] = Convert.ToInt32(Console.ReadLine()); } else { Console.WriteLine("El resultado es {0}",acumulador); return 0;

Page 42: Laboratorio II-2012

} return sumavector(b,i,(acumulador+=vec[i])); } static void Main(string[] args) { Console.WriteLine("Ingrese la cantidad de numeros del vector:"); int a = int.Parse(Console.ReadLine()); sumavector(a,-1,0); Console.ReadKey(); } }} using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { public static int sumavector(int b,int i,int acumulador) { int[] vector = new int[b]; i++; if (i < b) { vector[i] = int.Parse(Console.ReadLine()); } else

Page 43: Laboratorio II-2012

{ Console.WriteLine("El resultado es {0}",acumulador); return 0; } return sumavector(b,i,acumulador += vector[i]); } static void Main(string[] args) { Console.WriteLine("Ingrese la cantidad de numeros del vector:"); int g = 0; int e = 0; int a = int.Parse(Console.ReadLine()); Console.WriteLine("Ingrese Valores"); sumavector(a,-1,e); Console.ReadKey(); } }} 3 - using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{

class Program{

public static int mayor(int b, int i,int a) { int[] vec = new int[b]; for(i=0;i<b;i++) { vec[i] = Convert.ToInt32(Console.ReadLine()); if (a <= vec[i]) { a = vec[i]; }

Page 44: Laboratorio II-2012

} Console.WriteLine("El mayor es {0}", a); return mayor(b, i,a); } static void Main(string[] args) { Console.WriteLine("Ingrese la cantidad de numeros del vector:"); int a = int.Parse(Console.ReadLine()); mayor(a,0,0); Console.ReadKey(); }

}} -------------------------------------- 28/08/2012 ALGO HICIMOS. using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { Console.WriteLine("Ingrese un numero:"); int a = int.Parse(Console.ReadLine()); Console.WriteLine("{0}",jamon(a)); Console.ReadKey(); } public static int jamon(int b) { int c = b;

Page 45: Laboratorio II-2012

for (int i = 1; i < b; i++) { c *= i; } return (c); }

}} 29/08/2012 PROGRAMACION ORIENTADA A OBJETOS (OOP, POO) poo

propiedades | objeto metodos(acciones) | class

evento(reaccion) | caracteristicas|--------------->encapsulacion

|--------------->herencia |--------------->polismirfismo

encapsulacion:no podemos separar los comportamientos de las caracteristicas de 1 objeto.Los comportamientos seran funcion q en oop llamaremos metodos.las caracteristicas de 1 objeto seran variables como las hemos usado siempre pero las llamaremos atributos.La apariencia de 1 objeto en c# recordara a un registro o struct Herencia:unos objetos pueden heredar metodos y datos de otros. Polismorfismo:un mismo nombre de 1 metodo puede hacer referencia a comportamientos distintos (EJ:abrir puerta abrir libro)por ej:el peso de 1 puerta y de 1 porton tienen el mismo nombre pero difieren en el valor clase:es un conjunto de obj q tienen caracteristicas comunes por ej:mi puerta como la de mi vecino son puertas es decir ambas son objetos q pertenecen a la misma clase puerta. objetos y clases en c#

Page 46: Laboratorio II-2012

--------------------- using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{ class Program { public class puerta { int ancho; int alto; string color; bool abierta; public void altura() { Console.WriteLine("ingrese la altura"); alto = Convert.ToInt32(Console.ReadLine()); } public void definir_ancho() { Console.WriteLine("ingrese el ancho"); ancho = Convert.ToInt32(Console.ReadLine()); } public void colores() { Console.WriteLine("ingrese color"); color = Console.ReadLine(); } public void abrir() { abierta = true; } public void cerrada() { abierta = false; } public void mostrarEstado() { Console.WriteLine("ancho {0}", ancho); Console.WriteLine("alto {0}", alto); Console.WriteLine("color {0}", color); Console.WriteLine("abierta {0}", abierta); }

Page 47: Laboratorio II-2012

} static void Main(string[] args) { puerta p = new puerta(); p.definir_ancho(); p.altura(); p.colores(); Console.WriteLine("el estado de puerta"); p.mostrarEstado(); Console.WriteLine("vamos a abrir"); p.abrir(); p.mostrarEstado(); Console.ReadKey(); } }} using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication2{ class Program { public class persona { string nombre; public void a() { Console.WriteLine("Ingrese nombre"); nombre = Console.ReadLine(); } public void saludar() { Console.WriteLine("Hola soy {0} ", nombre); } }

Page 48: Laboratorio II-2012

static void Main(string[] args) { persona o = new persona(); persona a = new persona(); o.a(); a.a(); o.saludar(); a.saludar(); } }} _________________________ using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

public class letra { string palabra; char caracter; public void hola() { Console.WriteLine("Ingrese Palabra"); palabra = Console.ReadLine(); Console.WriteLine("Ingrese Caracter"); caracter = Convert.ToChar(Console.ReadLine()); } public void chau() { int o = 0; for (int i = 0; i < palabra.Length; i++) { if (caracter == palabra[i]) { o++;

Page 49: Laboratorio II-2012

} } Console.WriteLine("La letra {0} se repite {1} veces en la palabra {2}", caracter, o, palabra); } } static void Main(string[] args) { letra a = new letra(); a.hola(); a.chau(); }

}} _________________________________________________________________________________________

Page 50: Laboratorio II-2012

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1{class Program{public class uno(){public int c;  }public class dos{public int c;public class tres(){public int intanidado(int e){dos d=new dos();uno v=new uno();v.c=5+e;d.c=c=e;return v.c+c;}private int c;}public tres y;}    static void Main(string[] args){dos x=new dos();x.y=new tres();Console.WriteLine("intanidado(6)="+intanidado(6));}  }}}

Page 51: Laboratorio II-2012

using System;using System.Collections.Generic;using System.Linq;using System.Text;//Lados , Clasificacion,perimetro,superficie.namespace ConsoleApplication2{

class Program{

public class triangulo { double a,b,c,p,r,area; float altura; public void ingrese() { Console.WriteLine("Ingrese Lados"); a = double.Parse(Console.ReadLine()); b = double.Parse(Console.ReadLine()); c = double.Parse(Console.ReadLine()); } public void cosa() { if (a == b && b == c && c == a) { Console.WriteLine("Es Equilatero"); }else if (a != b && b!= c && c != a) { Console.WriteLine("Es Escaleno"); }else { Console.WriteLine("Es Isósceles"); } Console.WriteLine("El perimetro del triángulo es de {0}",a+b+c); p = ((a + b + c)/ 2); r = (p * (p - a) * (p - b) * (p - c)); area = Math.Sqrt(r); Console.WriteLine("El Area es de {0}",area); } } static void Main(string[] args)

Page 52: Laboratorio II-2012

{ triangulo t = new triangulo(); t.ingrese(); t.cosa(); }

}} _______________________________________________________________________________________ using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

public class hardware { public static void borrarpantalla() { } } public class juego { public static void comienzopartida() { } hardware borrarpantalla(); } public class ejemplo { } static void Main(string[] args) { }

}} }

Page 53: Laboratorio II-2012

Una clase define un objetoUna variable de clase se llama atributoUna función de una clase es un mètodo. JUEGO DE RULETA: 1) Determinar cantidad de jugadores.2) Las apuestas de cada uno , color.3) Número sorteada y color.ddddddçusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1{class Program{public class uno{public int c;  }public class dos{public int c;public class tres{public int intanidado(int e){dos d=new dos();uno v=new uno();v.c=5+e;d.c=c=e;return v.c+c;}private int c;}public tres y;}

Page 54: Laboratorio II-2012

    static void Main(string[] args){dos x=new dos();x.y = new dos.tres();Console.WriteLine("intanidado(6)="+x.y.intanidado(6));Console.ReadLine();}  }} Constructores y destructores. Hemos visto que para declarar una clase se dan valores por defecto a los atributos, generalmente 0. Pero puede ocurrir que deseemos otros valores iniciales, esto se puede conseguir, declarando un “constructor” para la clase. Un constructor es una función especial que se pone en marcha cuando se crea un objeto de una clase y se suele usar para dar esos valores iniciales,para reservar memoria si fuera necesario, etc. Se declara usando el mismo nombre que el de la clase y sin ningun tipo de retoque ej: puerta Public Puerta (){ ancho = 200;alto = 100;Color = 0xFFFFFF;abierta = false; } Podemos tener más de un constructor cada uno con distintos parámetros, puede haber otro constructor que nos permita indicar el ancho y el alto Public Puerta (int an,int al){ancho = an;alto = al;color = 0xFFFFFF;abierta =false;

Page 55: Laboratorio II-2012

} Ahora si declaramos un objeto de la clase Puerta: Puerta p = New Puerta(); [ancho = 200 ; alto = 100] Puerta p2 = New Puerta (90,220) [ancho = 90 ; alto = 220] using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication2{

class Program{

public class puerta { int ancho; int alto; int color; bool abierta; public puerta() { ancho = 100; alto = 200; color = 0xFFFFFF; abierta = false; } public puerta(int an, int al) { ancho = an; alto = al; color = 0xFFFFFF; abierta = false; } public void abrir()

Page 56: Laboratorio II-2012

{ abierta = true; } public void cerrar() { abierta = false; } public void mostrarEstado() { Console.WriteLine("ancho {0}", ancho); Console.WriteLine("alto {0}", alto); Console.WriteLine("color {0}", color); Console.WriteLine("abierta {0}", abierta); } } static void Main(string[] args) { puerta p = new puerta(); puerta p2 = new puerta (90,220); Console.WriteLine("valores iniciales..."); p.mostrarEstado(); Console.WriteLine("La vamos a abrir..."); p.abrir(); p.mostrarEstado(); Console.WriteLine("Para la segunda puerta..."); p2.mostrarEstado(); }

} } Hacer un programa usando constructores que maneje una señal luminica y una barrera. using System;using System.Collections.Generic;using System;using System.Collections.Generic;using System.Linq;using System.Text;//Hacer un programa usando constructores que maneje una señál luminica y una barrera.namespace ConsoleApplication3{

class Program{

public class señal

Page 57: Laboratorio II-2012

{ bool encendida; int color; public señal() { color = 0xFFFFFF; encendida = true ; } public señal(int co,bool en) { color = co; en = encendida; } public void encender() { encendida = true; } public void apagar() { encendida = false; } public void Sestado() { Console.WriteLine("Color: {0}",color); Console.WriteLine("Señal: {0}",encendida); } }/* public class barrera { bool levantada; int color; public barrera() { color = 0xFFFFFF; levantada = false; } public void encender() { levantada = true; } public void apagar() { levantada = false; } public void Bestado()

Page 58: Laboratorio II-2012

{ Console.WriteLine("Color: {0}", color); Console.WriteLine("Levantada: {0}", levantada); } } */ static void Main(string[] args) { señal a = new señal(); Console.WriteLine("Valores Iniciales:"); a.Sestado(); Console.WriteLine("Valores nuevos"); señal b = new señal(123,true); b.Sestado(); }

}} NO BORRAR PLZ using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication2{

class Program{

public class barrera { int color; bool abierta; public barrera() { color=0xffffff; abierta=false; } public barrera(int co) { color=0xffffff;

Page 59: Laboratorio II-2012

abierta=false; } public void Abrir() { abierta=true; } public void Bajar() { abierta=false; } public void MostrarEstado() { Console.WriteLine("Color:{0}",color); Console.WriteLine("Abierta:{0}",abierta); } static void Main(string[] args) { barrera p= new barrera(); Console.WriteLine("Valores inciales..."); p.MostrarEstado(); Console.WriteLine("\n Vamos a abrir..."); p.Abrir(); p.MostrarEstado(); Console.WriteLine("Para la luzluminica..."); }

}}

__________________________________________19/9/????______________________________________

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication2{

class Program

Page 60: Laboratorio II-2012

{ public class persona { public string nombre; public string apellido; public uint añonacimiento; public persona(string nombre ,string apellido,uint añonacimiento) { this.nombre = nombre; this.apellido = apellido; this.añonacimiento = añonacimiento; } } static void Main(string[] args) { persona juan=new persona("juan","ferrer",1980); persona pedro=juan; pedro.nombre="pedro"; Console.WriteLine(juan.nombre); Console.WriteLine(pedro.nombre); Console.ReadKey(); } }

}1000/500 500/400 300/200

__________________________________________25/9/2012_______________________________________

Polimorfismo & Sobrecarga. Los dos constructores Puerta(1) y Puerta (int alto, int ancho), que se llaman igual pero reciben distintos parámetros , y se comportan de forma que puede ser distinta, son ejemplos de polimorfismo (funciones que tienen el mismo nombre pero distinto parámetros y que quizá no se comporten de igual forma) Un concepto muy relacionado con el polimorfismo es el de sobrecarga: Dos funciones están sobrecargadas cuando se llaman igual,reciben el mismo número de parámetros pero se aplican a objetos distintos, así: Puerta.abrir();Libro.abrir(); Orden Llamada de los constructores:

Page 61: Laboratorio II-2012

De lo general a lo particular ej: Animal > Gato > SiamesClass Class Class Crear una jerarquia de clases que contenga: Trabajador cuyo constructor escribe en pantalla soy un trabajador.Programador que derive de trabajador y cuyo constructor diga soy trabajador.Analista < Trabajador soy analistaUna clase ingeniero que derive de trabjador que diga soy ingeniero.Ingeniero informatico > ingeniero. Una clase tecnico trabajador que derive de analista y que diga soy tecnico programador. Una clase prueba de trabajadores perteneciente a cada una de esas clases. necesitamos manipular varios objetos pertenecientes a la misma clase.En ese caso deberemos reserbar memoria primero para el array,y luego para cada uno de los elementos.Por ej:podriamos tener un array de 5 perros q ‘ creariamos de esta forma:Perro[] misPerros = new Perro[5];for(byte i=0;i<5;i++){misPerros[i]=new Perro();} using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

public class animal { public animal() { Console.WriteLine("Ha naciado un animal"); } }

Page 62: Laboratorio II-2012

public class perro : animal { public perro() { Console.WriteLine("Ha nacido un perro"); } } static void Main(string[] args) { perro[] misperros = new perro[5]; for (byte i = 0; i < 5; i++) misperros[i] = new perro(); Console.ReadKey(); }

} } ------------------------------------animal[] misanimales=new animales[3]misanimales[0]=new perro();misanimales[1]=new gato();misanimales[2]=new siames(); ------------------------------------------------------------------using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

public class animal { public animal() { Console.WriteLine("Ha nacido un animal"); } } public class perro : animal

Page 63: Laboratorio II-2012

{ public perro() { Console.WriteLine("Ha nacido un perro"); } } public class gato : animal { public gato() { Console.WriteLine("Ha nacido un gato"); } } public class siames : gato { public siames() { Console.WriteLine("Ha nacido un siames"); } } static void Main(string[] args) { animal[] misanimales = new animal[8]; misanimales[0]=new perro(); misanimales[1]=new gato(); misanimales[2]=new siames(); for (byte i = 3; i < 7; i++) misanimales[i] = new perro(); misanimales[7] = new animal(); Console.ReadKey(); }

} } El problema con el array es que no invoca los métodos correspondientes a perro y gato. Es decir como la clase base es Animal , el primer elemento hace lo que corresponde a un animal generico(decir”estoy comunicandome”). A pesar de que hallamos dicho que se trata de un perro. Sería interesante no crear un array de perros y otros de gatos sino poder crear un array de animales y que contuvieran animales de distintos tipos para conseguir este comportamiento debemos indicar a nuestro compilador que el método hablar que se usa en la clase animal puede que sea redefinido por otras clases hijas y que en ese caso

Page 64: Laboratorio II-2012

debe prevalecer lo que indiquen las clases hijas. Esto se logra declarando en la clase base el método hablar como virtual y en las clases hijas reemplazar new por Override -----------------------------------------------------------using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

public class animal { public virtual void hablar() { Console.WriteLine("Estoy comunicandome"); } } public class perro : animal { public override void hablar() { Console.WriteLine("Guauuuuuuuuuuu"); } } public class gato : animal { public override void hablar() { Console.WriteLine("Miauuuuuuuuuuu"); } } static void Main(string[] args) { perro miperro = new perro(); gato migato = new gato(); animal mianimal= new animal(); miperro.hablar(); migato.hablar(); mianimal.hablar(); Console.WriteLine("");

Page 65: Laboratorio II-2012

animal[] misanimales = new animal[3]; misanimales[0] = new perro(); misanimales[1] = new gato(); misanimales[2] = new animal(); misanimales[0].hablar(); misanimales[1].hablar(); misanimales[2].hablar(); Console.ReadKey(); }

} } ////////////////////////////////mal no borrarrrr////////////////////////////////////////////////para el martes using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

public class remiseria { public int chofer; public virtual void porcentaje() { int agencia = 30; int saldo; saldo = (chofer * agencia) / 100; Console.WriteLine("su saldo es de {0}",saldo); } } public class chofer1 : remiseria { public void ganancia() { Console.WriteLine("ingrese ganancias"); chofer=Convert.ToInt32(Console.ReadLine()); } }

Page 66: Laboratorio II-2012

public class chofer2 : remiseria { public void ganancia() { Console.WriteLine("ingrese ganancias"); chofer = Convert.ToInt32(Console.ReadLine()); } } public class chofer3 : remiseria { public void ganancia() { Console.WriteLine("ingrese ganancias"); chofer = Convert.ToInt32(Console.ReadLine()); } } static void Main(string[] args) { chofer1 miperro = new chofer1(); chofer2 migato = new chofer2(); chofer3 mianimal = new chofer3(); miperro.ganancia(); migato.ganancia(); mianimal.ganancia(); miperro.porcentaje(); migato.porcentaje(); mianimal.porcentaje(); Console.WriteLine(""); remiseria[] misanimales = new remiseria[3]; misanimales[0] = new chofer1(); misanimales[1] = new chofer2(); misanimales[2] = new chofer3(); Console.ReadKey(); }

} }-----------------------------------------codigo completo------------------------------------------------------------------------------------ using System;using System.Collections.Generic;using System.Linq;using System.Text;

Page 67: Laboratorio II-2012

namespace ConsoleApplication1{

class Program{

public class remiseria { public int chofer; public remiseria() { Console.WriteLine("ingrese ganancias"); chofer = Convert.ToInt32(Console.ReadLine()); } } public class choferes : remiseria { public choferes() { int agencia = 30; int saldo; saldo = (chofer * agencia) / 100; Console.WriteLine("su saldo es de {0}", saldo); } } static void Main(string[] args) { choferes[] chofer1 = new choferes[3]; chofer1[0] = new choferes(); chofer1[1] = new choferes(); chofer1[2] = new choferes(); Console.ReadKey(); }

}} -----------------------------------temperatura-----------------------------------------------using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{

class Program{

public class temperaturas { public double celcius;

Page 68: Laboratorio II-2012

public temperaturas() { Console.WriteLine("ingrese temperatura a convertir"); celcius = Convert.ToDouble(Console.ReadLine()); } } public class convertir : temperaturas { public convertir() { double farengei; farengei = (celcius * (1.8) + 32); Console.WriteLine("El resultado de la convercion es {0} farengei", farengei); } } static void Main(string[] args) { convertir[] temperatura = new convertir[1]; temperatura[0] = new convertir(); Console.ReadKey(); }

}} 3/9 Llamado metodo de la clase padre: Puede ocurrir que en un método de una clase hija no nos interese redefinir por completo las posibilidades del método equivalente sino ampliarlas. En ese caso no hace falta que volvamos a teclear todo lo que hacia el metodo de la clase base, sino que podemos llamarlo directamente, precediendolo de la palabra “base”. Por ejemplo podemos hacer que un gato siames hable igual que un gato normal, pero diciendo “pfff” despues. _______________using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{

class Program{

public class animal { public virtual void hablar()

Page 69: Laboratorio II-2012

{ Console.WriteLine("Estoy comunicandome"); } } public class perro : animal { public override void hablar() { Console.WriteLine("Guauuuuuuuuuuu"); } } public class gato : animal { public override void hablar() { Console.WriteLine("Miauuuuuuuuuuu"); } } public class siames : gato { public new void hablar() { base.hablar(); Console.WriteLine("Pfff"); } } static void Main(string[] args) { perro miperro = new perro(); gato migato = new gato(); animal mianimal = new animal(); siames misiames = new siames(); miperro.hablar(); migato.hablar(); misiames.hablar(); mianimal.hablar(); Console.WriteLine(""); animal[] misanimales = new animal[3]; misanimales[0] = new perro(); misanimales[1] = new gato(); misanimales[2] = new animal();

Page 70: Laboratorio II-2012

misanimales[0].hablar(); misanimales[1].hablar(); misanimales[2].hablar(); Console.ReadKey(); }

} }__________-- Sobrecarga de operadores Los operadores son los simbolos que se emplean para indicar ciertas operaciones. Por ejemplo:El operador + se usa para indicar que queremos sumar dos numeros. En C# se pueden sobrecargar operadores, es decir, redefinir su significado, para poder sumar por ejemplo objetos que nosotros hayamos creado, de forma más cómoda y legible.Por ejemplo, para sumar dos matrices , en vez de hacer algo como: matriz 3= suma (matriz1+matriz2); Se hace : matriz 3= matriz1+matriz2; La idea está en que redifiniriamos un método llamado operador suma y que devolvería un dato del tipo con el que estamos(una matriz) y recibiria los datos de ese mismo tipo como parametro. Public static matriz operator + (Matriz mat1, Matriz mat2) { matriz nuevamatriz =new matriz ();for(int x =o;x < tamaño;x++) for(int y = 0;y <tamaño;y++){

nuevamatriz[x,y] = mat1[x,y] +mat2[x,y]; return nuevamatriz;}} -----------------------------------------------------------------------------------------------------------------------------------manejo de ficheros

Page 71: Laboratorio II-2012

-Escritura en un fichero de textopara manejar ficheros ,siempre debemos hacer 3 operaciones basicas:

.abrir ficheros

.Leer los datos o escribir en èl

.Cerrar ficheroNo siempre se podra realizar dichas operaciones por lo que se deberan manejar los errores.Por ej puede q desee abrir un fichero q no existe o escribir un dispositivo q es de solo lectura -vamos a crear un fichero y escribir en el. AÑADIR UN ARCHIVO EXISTENTE El uso de File.exist nos permite saber si el fichero existe o no, pero puede ocurrir que no tengamos permiso para acceder al fichero. a pesar de que existe. o que intentemos escribir en un dispositivo de sólo lectura como un cd-rom. La forma más eficaz de comprobar si existe algún error es a través del uso de excepciones. La idea es la siguiente: Es dar una serie de pasos y al final de todos ellos indicar que ocurre si no se cumple, la forma de conseguirlo es dividir en dos bloques las partes de programa que puedan dar lugar a error. 1) En un primer bloque indicamos (try)2) A continuación detallaremos las posibles excepciones que queremos interceptar.(catch)3) Un ejemplo, para mostrar el contenido de un fichero de texto, y en caso de error se limitará a mostrar un mensaje y abandonar el programa. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { StreamReader fichero; string nombre; string linea; Console.WriteLine("Introduzca nombre fichero"); nombre = Console.ReadLine();

Page 72: Laboratorio II-2012

try { fichero = File.OpenText(nombre); do { linea = fichero.ReadLine(); if (linea != null) Console.WriteLine(linea); } while (linea != null); fichero.Close(); } catch (Exception exp) { Console.WriteLine("Error: {0}", exp.Message); return; } }

}} _ using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { StreamWriter fichero; string nombre; string linea; Console.WriteLine("Escriba nombre a guardar"); nombre = Console.ReadLine(); Console.WriteLine("Escriba la frase a guardar"); linea = Console.ReadLine(); try { fichero = File.CreateText(nombre); fichero.WriteLine(linea); fichero.Close();

Page 73: Laboratorio II-2012

} catch (PathTooLongException e) { Console.WriteLine("Nombre demasiado Largo!"); return; } catch (IOException e) { Console.WriteLine("No se puede escribir"); Console.WriteLine("El error exacto es {0}", e.Message); } }

}} ___ Concepto básicos sobre ficheros ◘Fichero físico: Es un fichero que existe realmente en el disco ej: agenda.txt◘Fichero lógico: Es un identificador que aparece dentro de nuestro programa y que permite acceder a un fichero físico.ej: Streamreader fichero1. es un variable “fichero1” que representa un fichero lógico.◘Equivalencia entre fichero lógico y fichero físico: No necesariamente tiene que existir una correspondencia 1 a 1 puede que accedamos a un fichero físico mediante o más ficheros logicos y viceversa.◘Registro: Un bloque de datos que forma un “todo”, como el conjunto de los datos de una persona: nombre dirección teléfono,email,etc Cada uno de estos apartados del registro, se denomina campo. Acceso secuencial es cuando debemos recorrer todo el contenido de un fichero si queremos llegar hasta un cierto punto. Ej, cintas de video,ficheros de textoAcceso aleatorio es cuando podemos acceder a cualquier parte del fichero directamente sin necesidad de recorrer todo lo anterior LEER DATOS BÁSICOS DE UN FICHERO BINARIO. Son ficheros en los que la información está estructurada como una secuencia de bytes, esto ocurre en las imagines, los ficheros de sonido,video,etc

Page 74: Laboratorio II-2012

Vamos a ver como leer de un fichero general y lo aplicaremos a descifrar la información almacenada en ciertos formatos habituales como una imagen .bmp o un sonido .mp3. Como primer acercamiento vamos a ver como abrir un fichero y leer el primer byte que contiene. Para ello vamos a usar una clase especial, la clase: binaryreaderusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO; namespace ConsoleApplication1{

class Program{

static void Main(string[] args) { BinaryReader fichero; string nombre; byte undato; Console.WriteLine("Escriba nombre del fichero"); nombre = Console.ReadLine(); try { fichero = new BinaryReader { File.Open(nombre, FileMode.Open) }; undato = fichero.ReadByte(); Console.WriteLine("el byte leído es un {0}",undato); fichero.Close(); } catch(Exception exp) { Console.WriteLine(exp.Message); return; } } }

} using System;using System.Collections.Generic;using System.Linq;using System.Text;

Page 75: Laboratorio II-2012

using System.IO;namespace ConsoleApplication1{ class Program { static void Main(string[] args)

{ StreamReader fichero; string nombre; string dato; Console.WriteLine("Industroduzca nombre fichero"); nombre = Console.ReadLine();

try { fichero = new StreamReader ( File.Open(nombre,FileMode.Open)); dato = fichero.ReadLine(); Console.WriteLine("{0}", dato);

fichero.Close(); } catch (Exception e) { Console.WriteLine(e.Message); return; } } }

} -------------------------------------------------30/10/12using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ConsoleApplication1{ class Program

{ static void Main(string[] args) {

Page 76: Laboratorio II-2012

BinaryReader fichero; string nombre; byte dato; Console.WriteLine("Industroduzca nombre fichero");

nombre = Console.ReadLine(); try { fichero = new BinaryReader ( File.Open(nombre,FileMode.Open)); dato = fichero.ReadByte();

Console.WriteLine("{0}", dato); fichero.Close(); } catch (Exception e) { Console.WriteLine(e.Message); return;

} } }} Leer bloque de datos de un fichero binario. Leer byte a byte (o float a float) puede ser comodo pero tambien es lento . Por eso en la practica es comun leer grandes bloques de datos.Tipicamente esos datos se guardaran como un array de bytes.Para eso usaremos la clase FileStream esta clase tiene metodos Read que nos permite leer una cierta cantidad de datos desde el fichero. Le indicaremos en que array guardar esos datos, apartir de que posicion del array debe introducir los datos y que cantidad de datos se deben leer. Nos devuelve un valor que es la cantidad de datos que se van a poder leer realmente(porque puede ser menos de lo que le hemos pedido,si hay un error u estamos al final del fichero) Ejemplo: para abrir el fichero usaremos open read. using System;using System.Collections.Generic;using System.Text;using System.IO; namespace ConsoleApplication1{ class Program

Page 77: Laboratorio II-2012

{ static void Main(string[] args) { FileStream fichero; string nombre; byte[] datos; int cantidadleida; Console.WriteLine("Nombre Fichero"); nombre = Console.ReadLine(); try { fichero = File.OpenRead(nombre); datos = new byte[10]; int posicion = 0; int cantidadaleer = 10; cantidadleida = fichero.Read(datos, posicion, cantidadaleer); if (cantidadleida < 10) Console.WriteLine("No se pudo leer todo"); else { Console.WriteLine("El 1er byte leido es{0}", datos[0]); Console.WriteLine("El 3er es {0}", datos[2]); } fichero.Close(); Console.ReadKey(); } catch (Exception exp) { Console.WriteLine(exp.Message); return; } } }} La posicion en el fichero la clase FileStream tiene tambien un metodo ReadByte que permite leer un unico byte. En ese caso(y aveces en el caso de leer todo un bloque ), habitualmente nos interesara situranos antes en la posicion exacta en la que se encuentra el dato que nos interesa leer. Para ello tenemos el metodo Seek, a este metodo se le indican 2 parametros la posicion a la que queremos saltar y el punto desde el que queremos que se cuente esa posicion (desde el comienzo del fichero Seekorigin.begin, desde la posicion actual Seekorigin.current , o desde del final del fichero

Page 78: Laboratorio II-2012

Seekorigin.end ) La posicion es un int 64 porque puede ser un numero muy grande e incluso un numero negativo.Sera negativo solo cuando me situe en el final. De buen modo podemos saber en que posicion del fichero nos encontramos consultando la propiedad “position”, asi como la longitud del fichero mirando su propiedad length. Ej: using System;using System.Collections.Generic;using System.Text;using System.IO;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { FileStream fichero; string nombre; byte[] datos; int cantidadleida; Console.WriteLine("Escriba nombre del fichero"); nombre = Console.ReadLine(); try { fichero=File.OpenRead(nombre); datos=new byte[10]; int position=0; int cantidadaleer=10; cantidadleida=fichero.Read(datos,position,cantidadaleer); if (cantidadleida<10) Console.WriteLine("No se pudo leer"); else { Console.WriteLine("El 1er byte {0}",datos[0]); Console.WriteLine("El 3er byte {0}",datos[2]); } if (fichero.Length>30) { fichero.Seek(19,SeekOrigin.Begin); int nuevodato=fichero.ReadByte(); Console.WriteLine("El byte 20 es un {0}",nuevodato); Console.WriteLine("La posicion actual es {0}",fichero.Position); Console.WriteLine("Y el tamaño del fichero es {0}",fichero.Length); } fichero.Close(); Console.ReadLine(); } catch (Exception exp) { Console.WriteLine(exp.Message); return;

Page 79: Laboratorio II-2012

} } }} Para escribir un FileStream usaremos la misa estructura que para leer 1 - un metodo Write para escribir un bloque de informacion(desde cierta posicion de un array y con cierto tamaño) 2 - un metodo Writebyte para escribir solo un byte.Ademas a la hora de abrir un fichero tenemos 2 alternativas a - abrir un fichero existente con “OpenWrite” b - crear un nuevo fichero con “Create” Ej. crearemos un fichero, guardaremos datos, lo leeremos para comprobar que todo es correcto, añadiremos al final y volveremos a leer. using System;using System.Collections.Generic;using System.Text;using System.IO; namespace ConsoleApplication1{ class Program { const int tamanyo_buffer = 10; static void Main(string[] args) { FileStream fichero; string nombre; byte[] datos; nombre = "datos.dat"; datos=new byte[tamanyo_buffer]; for(byte i=0;i<tamanyo_buffer;i++) datos[i]=(byte) (i+10); try { int posicion = 0; fichero = File.Create(nombre); fichero.Write(datos, posicion, tamanyo_buffer); fichero.close(); fichero = File.OpenRead(nombre);

Page 80: Laboratorio II-2012

Console.WriteLine("El tamaño es {0}", fichero.Length); fichero.Seek(2, SeekOrigin.Begin); int nuevodato = fichero.ReadByte(); Console.WriteLine("El 3er byte es {0}", nuevodato); fichero.Seek(-2, SeekOrigin.End); nuevodato = fichero.ReadByte(); Console.WriteLine("El penultimo byte es {0}", nuevodato); fichero.close(); fichero = FileOpenWrite(nombre); fichero.Seek(0, SeekOrigin.End); fichero.Write(datos, 0, tamanyo_buffer); fichero.Seek(2, SeekOrigin.Begin); fichero.WriteByte(99); fichero.close(); fichero = FileOpenRead(nombre); Console.WriteLine("El tamaño es {0}", fichero); fichero.Seek(2, SeekOrigin.Begin); nuevodato = fichero.ReadByte(); Console.WriteLine("El 3er byte es {0}", nuevodato); fichero.close(); } catch (Exception exp) { Console.WriteLine(exp.Message); return; } } }}

El formato BMPEl formato BMP es uno de los más simples. Fue desarrollado por Microsoft e IBM en forma conjunta, lo que explica su uso particularmente amplio en plataformas Windows y OS/2. Un archivo BMP es un archivo de mapa de bits, es decir, un archivo de imagen de gráficos, con píxeles almacenados en forma de tabla de puntos que administra los colores como colores reales o usando una paleta indexada. El formato BMP ha sido estudiado de manera tal que permite obtener un mapa de bits independiente del dispositivo de visualización periférico (DIB, Mapa de bits independiente del dispositivo).La estructura de un mapa de bits es la siguiente:

● Encabezado del archivo● Encabezado de información del mapa de bits (también llamado encabezado de información).

Page 81: Laboratorio II-2012

● Paleta (opcional)● Cuerpo de la imagen

Encabezado del archivoEl encabezado del archivo proporciona información acerca del tipo de archivo (mapa de bits) y su tamaño, así como también indica dónde comienza realmente la información de la imagen.El encabezado comprende cuatro campos:

● La firma (en 2 bytes), que indica que se trata de un archivo BMP con dos caracteres○ BM, 424D en hexadecimal, que indica que se trata de un mapa de bits de Windows○ BA que indica que se trata de un mapa de bits OS/2○ CI que indica que se trata de un icono de color de OS/2○ CP indica que es un puntero de color de OS/2○ IC indica que es un icono de OS/2○ PT indica que es un puntero de OS/2

● El tamaño total del archivo en bytes (codificado en 4 bytes)● Un campo reservado (en 4 bytes)● El desajuste de la imagen (en 4 bytes), es decir, la ubicación del comienzo de la información de la

imagen en relación con el comienzo del archivo

Encabezado de información del mapa de bitsEl encabezado de información del mapa de bits proporciona información acerca de la imagen, en especial las dimensiones y los colores.La información del mapa de bits comprende cuatro campos:

● El tamaño del encabezado de información del mapa de bits en bytes (codificado en 4 bytes). Los siguientes valores hexadecimales son posibles según el tipo de formato BMP:

○ 28 para Windows 3.1x, 95, NT○ 0C para OS/2 1.x○ F0 para OS/2 2.x

● El ancho de la imagen (en 4 bytes), es decir, el número de píxeles contados de forma horizontal● La altura de la imagen (en 4 bytes), es decir, el número de píxeles contados de forma vertical● El número de planos (en 2 bytes). Este valor es siempre 1● La profundidad del modelo de color (en 2 bytes), es decir, el número de bits usados para codificar

el color. Este valor puede ser equivalente a 1, 4, 8, 16, 24 ó 32● El método de compresión (en 4 bytes). Este valor es 0 cuando la imagen no está comprimida o 1,

2 ó 3 según el tipo de compresión usado:○ 1 para la codificación RLE de 8 bits por píxel○ 2 para la codificación RLE de 4 bits por píxel○ 3 para la codificación de campo de bits, lo que significa que el color fue codificado por una

máscara triple representada por la paleta● El tamaño total de la imagen en bytes (en 4 bytes).● La resolución horizontal (en 4 bytes), es decir, el número de píxeles por metro contado de forma

horizontal● La resolución vertical (en 4 bytes), es decir, el número de píxeles por metro contado de forma

vertical● El número de colores de la paleta (en 4 bytes)

Page 82: Laboratorio II-2012

● El número de colores importantes de la paleta (en 4 bytes). Este campo puede equivaler a 0 cuando todos los colores son importantes.

Paleta de imágenesLa paleta es opcional. Cuando se define la paleta, ésta contiene 4 bytes de forma sucesiva para cada una de las entradas, que representan:

● El componente azul (en un byte)● El componente verde (en un byte)● El componente rojo (en un byte)● Un campo reservado (en un byte)

Codificación de imágenesLa codificación de imágenes se realiza escribiendo en forma sucesiva los bits que corresponden a cada píxel, línea por línea, comenzando por el píxel del extremo inferior izquierdo.

● Las imágenes de 2 colores usan 1 bit por píxel, lo que significa que un byte permite codificar 8 píxeles

● Las imágenes de 16 colores usan 4 bits por píxel, lo que significa que un byte permite codificar 2 píxeles

● Las imágenes de 256 colores usan 8 bits por píxel, lo que significa que se necesita un byte para codificar cada píxel

● Las imágenes de colores reales usan 24 bits por píxel, lo que significa que se necesitan 3 bytes para codificar cada píxel, respetando la alternancia del orden de los colores para el azul, el verde y el rojo.

Cada línea de la imagen debe comprender un número total de bytes que sea múltiplo de 4; si este esquema no se cumple, la línea se debe completar con todos los 0 necesarios para respetar el criterio. ____

using System;using System.Collections.Generic;using System.Text;using System.IO;//Ej : Escribir datos de diferentes tipos. namespace ConsoleApplication5{ class Program { static void Main(string[] args) { BinaryWriter ficherosalida; BinaryReader ficheroentrada; string nombre; byte undatobyte; int undatoint;

Page 83: Laboratorio II-2012

float undatofloat; double undatodouble; string undatostring; Console.WriteLine("Nombre de fichero a crear"); nombre = Console.ReadLine(); Console.WriteLine("Creando Fichero..."); try { ficherosalida = new BinaryWriter( File.Open(nombre,FileMode.Create)); undatobyte = 1; undatoint =2; undatofloat =3.0f; undatodouble= 4.0; undatostring = "Hola"; ficherosalida.Write(undatobyte); ficherosalida.Write(undatoint); ficherosalida.Write(undatofloat); ficherosalida.Write(undatodouble); ficherosalida.Write(undatostring); ficherosalida.Close(); } catch(Exception exp) { Console.WriteLine(exp.Message); return; } Console.WriteLine("leyendo fichero"); try { ficheroentrada = new BinaryReader( File.Open(nombre,FileMode.Open)); undatobyte = ficheroentrada.ReadByte(); Console.WriteLine("El Byte leído es un {0}",undatobyte); undatoint = ficheroentrada.ReadInt32(); Console.WriteLine("El Int leído es un {0}",undatoint);

Page 84: Laboratorio II-2012

undatodouble = ficheroentrada.ReadDouble(); Console.WriteLine("El Double leído es un {0}",undatodouble); undatofloat = ficheroentrada.ReadSingle(); Console.WriteLine("El Float leído es un {0}",undatofloat); Console.WriteLine("Volvamos a leer el int..."); ficheroentrada.BaseStream.Seek(2,SeekOrigin.Begin); undatoint = ficheroentrada.ReadInt32(); Console.WriteLine("El Int leído es un {0}",undatoint); ficheroentrada.Close(); } catch(Exception exp) { Console.WriteLine(exp.Message); return; } } } }

____

3.1.0.0.0.0 1,2,0,0,0,0,0,64,64,0,0,0,0,0,0,16,64,04,72