Estrellamos el menu (on = habilitado y off=inhabilitado[proximamente]) .. Sigue Mandando tus susper mensajitos....en guate-->. claro tigo telefonica

Buscar

¡Haga de esta pagina su inicial!

Sitios Encontrados

viernes, 6 de noviembre de 2009

Enumerar filas en el GRIDVIEW ( )

Muchas veces, nos encontramos con que necesitamos el número de fila de un gridview en el cual se devolvieron los registros, Por ejemplo, si hiciera una consulta que me devuelve 3 filas, puede que yo necesite una columna que me indique el número de fila, es decir, que me enumere del 1 al 3 las filas devueltas. foto mas grande
aca les muesto dos maneras funcionales validas
Base de datos:
Nortwind
Librerias :
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Columnas del GridView customizado AutoGenerateColumns ="False">
DE LADO DE LA PAGINA ASPX (CODE LISTING) : foto + grande DE LADO DEL CODIGO (CODE BIHIND VB ) : foto + grande Analisis del codigo : foto + grande A .. Saludos... hasta la proxima ...

Enumerar filas en SQL :

Muchas veces, nos encontramos con que necesitamos el número de fila en el cual se devolvieron los registros, Por ejemplo, si hiciera una consulta que me devuelve 3 filas, puede que yo necesite una columna que me indique el número de fila, es decir, que me enumere del 1 al 3 las filas devueltas. Pues bien, en SQL 2000 se resuelve de la siguiente manera : foto + grande Y para SQL 2005 & SQL2008 se implementa una nueva función que me devuelve el número de fila a partir de cierto criterio que yo especifique. La sintaxis es esta: foto + gande

Por su puesto esto lo podemos consumir dentro de una interface (WEBFORM {.aspx} llenando un GRIDVIEW de la forma tradicional o WINFORM DATAGRIDVIEW) hasta la proxima

jueves, 6 de agosto de 2009

Manual de apoyo ReportServer 2005 & BI

Hola mis amigos he andado un poco desconectado pero persisto en seguir aprendiendo; en la medida de lo posible seguiré con mis temas  de C++ & C#…(Perdón por la tardanza pero he cambiado mi computadora…a. una mejor.jajaja. (x supuesto))  acá les dejo una serie comprimidas de  manuales fabulosos  en (WINRAR) almacenadas en my SkiDrive   es con referencia a ReportServices & BI = inteligencia de negocios; 

saludos… hasta mi  próxima entrega

Pdta.: Esta es mi primer entrada luego de configurar mi Live Writer… espero se vea bien , lo importante de esta herramienta es que puedo trabajar de manera desconectada y luego publicarlos en mi blog x supuesto su IDE es mas amigable lo recomiendo …

 

sábado, 20 de junio de 2009

La venganza de los caidos(TRANSFOMERS)

Hola Mis amigos seguidores; que creen pues estamos a 4 dias del estreno mundial de la super pelicula (TRNAFOMERS2) [La venganza de los caidos ]; como sabran los que me conocen pues soy un enpedernido seguidor de esta serie ; Tengo la coleccion completa de esta caricatura hasta donde recuedo pues toda la vida los he seguido ya que tube un juguete [TRANSFOMERS[OPTIMUS PRIME ]]super excelente(que me regalalaron[DOn JAIME {amigo de la familia}]) y que era uno de mis mas SAGRADOS juguetes que ME acompañaba en mis batallas imaginarias con las que me salia de la relidad segun recuedo ( jajajaja); bueno luego de la primera pelicula me entusiama la idea de volver a tomar el mismo reto que hice con la anterior pelicula de los TRNAFOMERS , pero tengo el proposito de superar las 17 veces que vi la pelicula en el cine invitado( por amigos...que por cierto es parte del reto que si puedo ir al cine pero solo como invitado) aveces parece loco pero la verdad es que ya empece a asegurar a mis patrocinadores(MIS AMIGOS) jajaja so espero otra vez su apoyo para superar mi meta; los TRANSFOMERS son tan importantes para mi que cadavez que desarollo una aplicacion incorporo como sello personal este icono de lo (AUTOBOTS) dentro de ellos y llamo ami aplicacion (jajaja cabal como lo pensaron TRANSFOMERS) .. bueno no quiero aburrirlos mas solo me queda esperar esta super pelicula... estoy a la espectativa... so saludos y que la pasen super. ahi les cuento como me ba; apropostio debo tomarme una foto con mis invitados solo para mostrar las puebas pero eso ya sera con mi amigos so busos Pues ...ajajaja

lunes, 15 de junio de 2009

Puntero no constante hacia datos constantes

Este es un apuntador que se puede modificar para que apunte hacia cualquier elemento de infomacion del tipoapropiado, pero los datos a los que que apuntan no pueden modificarse por medio de ese apuntador.
Tal apuntador podria servir para recibir como argumento un arreglo en una funcion que procesara cada elementode dicho arreglo sin modificar los datos.

En C++ la funcion PrintCharacters() declara que los parametros "sPtr" son del tipo
[const char *]. La declaracion se lee de derecha a izquierda como "sPtr es un apuntador hacia una constante de caracteres" .

En C# la funcion PrintCharacters() no incluye const debido que respeta los tipos de manera integrada amenosque le ordenemos lo contrario (char* sptr) .
EL cuerpo de la funcion utiliza una estructura for conla que envia a la salida , uno por uno, los caracteresde la cadena, hasta que encuentra el carcter nulo. Tras la impresion de un caracter, se incrementa sPtr paraapuntar al siguiente caracter de la cadena.

para C++ seria asi:para C# seria asi:foto + grande

domingo, 14 de junio de 2009

Puntero no constante hacia datos no constantes

Hay 4 maneras de pasar un apuntador a una funcion:1 con un apuntador no contante hacia datos no constantes, 2 mediante un apuntador no constante hacia datos constantes,3 por medio de un apuntador constante hacia datos no constantes y 4 utilizando un apuntador constante hacia datos constantes. Cada combinacion ofrece un nivel distinto de privilegio de acceso.
El mayor acceso se otorga mediante un apuntador no constante hacia datos no constantes -- la informacion puede modificarse a travez del apuntador desreferenciado y dicho apuntador se puede modificar para que apunte hacia otros datos. La declaracion de apuntadores no constantes hacia datos no constantes no incluye a "const". Tal apuntador puede servir para recibir una cadena en una funcion que se vale de aritmetica de apuntadores para procesar (y talves modificar) uno por uno los caracteres de la cadena.
La funcion ConvertToUppercase() declara el parametro "sPtr" (char *sPtr) como apuntador no constante. La funcion procesa la cadena s, caracter por caracter, mediante aritmetica de apuntadores. Los caracters entre la 'a' y la 'z' son convertidos a sus letras mayusculas atravez de la funcion (C++ toupper( *sPtr );) & (C# oracion.ToUpper();); los demas se conservan iguales. La funcion (C++ toupper( *sPtr );) &(C# oracion.ToUpper();) toma como argumento un caracter.Si dicho caracter es una letra minuscula, se devuelve la letra mayuscula correspondiente; de otro modo, se devuelve el carcter original.
para C++ seria asi: foto + grande

para C# seria asi: foto + grande Nota :
Seguramnete has de notar que para C# declaramos primero tipo string ( string line = "caracteres y $32.98";) luego lo convertimos aun arreglo de tipo char(har[] letra = line.ToCharArray();) luego utilizamos fixed(char* cPtr = letra ) esto es para acceder a los elemento de la matriz atravez de un puntero.Es importante que habilites el manejo de punteros en tu aplicacion ya que por defualt esto esta deshabilitado ;

Te recomiendo este sitio : mas detalles

sábado, 30 de mayo de 2009

Funcion por referencia con argumentos de apuntador

Como sabemos "Return en las funciones" puede utilizarse para devolver al invocador un valor desde una funcion llamada (o regresar el control desde una funcion llamada sin devolver un valor). Tambien vimos que se le puden pasar argumentos a una funcion mediante argumentos de referencia, permitiendo que la funcion modifique los valores originales de los argumentos(por lo tanto, se puede "devolver" mas de un valor desde una funcion), o pasar objetos de datos grandes a una funcion y evitar la sobrecarga de pasar los objetos mediante llamada por valor (que, claro esta, involucra llevar acabo una copia del objeto).Los apuntadores, como las referencias , tambien pueden servir para modificar una o mas varibles del invocador o para pasar apuntadores a objetos de datos grandes, evitando la sobrecarga de pasar los objetos mediante llamada por valor. Los programadores se pueden valer de los apuntadores y del operador de indirreccion para simular llamadas por referencia. AL llamar una funcion con argumentos que deben ser modificados, se pasa la direccion de los argumentos. por lo genera, esto se logra aplicandole el operador de direccion(&) al nombre de la variable que se habra de modificar. Elsiguiente ejemplo contiene dos versiones de una funcion que eleva al cubo un entero: 1-cuboPorValor: en esta se pasa la variable numero1 mediante una llamada por valor, Esta eleva al cubo su argumento y devuelve el valor mediante una insturccion "return". EL nuevo valor se asigna a nummero1. Existe la oportunidad de examinar el resultado de la llamada de funcion antes de modificar el valor de una variable. Por ejemplo, en este programa se podria haber almecenado el resultado de cuboPorValor en otra variable, examinando su valor asignando el resultado a numero1 tras comprobar que el resultado es razonable. 2-cuboPorReferencia:en esta pasa la variable numero2 mediante una llamada por referencia(se pasa la direccion de numero2) a la funcion cuboPorReferencia. Esta toma nPtr (que es un apuntador a int) como argumento. La funcion desreferencia el apuntador y eleva al cubo el valor alq ue apunta nPtr. Esto cambia el valor de nummero2. Una funcion que recibe como un argumento una direccion debe definir una parametro de apuntador para recibir dicha direccion. para C++ seria asi: foto + grande para C# seria asi:foto + grande

Nota para C#:

Ud. puede declarar cualquier método como no seguro :

public unsafe void MyMethod(){

De forma alternativa, Ud. puede declarar cualquier clase o estructura como no segura:

unsafe class MyClass{

Declarar una clase como no segura implica que todos sus miembros son tratados como no seguros. Ud. puedeademás declara cualquier campo miembro (aunque no las variables locales) como no seguros, si tiene un campo miembro de tipo puntero:

private unsafe int* pX;

También es posible marcar un bloque de código como no seguro de la siguiente forma:

unsafe{// instrucciones que utilizan punteros}

jueves, 28 de mayo de 2009

Los apuntadores

En hora buena([Capeones]FOrca BARca 2-0 vrs Manchester ).
Aca empezaremos a estudiar una de las caracteristicas mas poderosas del lenguaje de programacion de C++ : el "apuntador" que es una de las capasidades de C++ mas dificiles de dominar. Los apuntadores permiten a los programas simular la llamada por referencia y crear y manipular estructuras dinamicas de datos, es decir, estructuras de datos que pueden crecer y encogerse, como listas vinculadas, colas, pilas y arboles. Las varibles de de apuntador contiene direcciones de memoria como sus valores. Normalmente las variables contienen valores especificos. por otra parte, los apuntadores contienen direcciones de variables que contienen valores especificos. En este sentido , los nombres de varibles hacen referencia directa a un valor y los apuntadores hacen referencia indirecta a un valor.La referencia a un valor atravez de un apuntador se llama indireccion.
Seguramente has de preguntarte y que pasa con C# : pues ya que lo pensastes primero debemos saber que para mantener la seguridad de tipos y la seguridad, C# de manera predeterminada no admite la aritmética con punteros. Sin embargo, utilizando la palabra clave "unsafe", es posible definir un contexto no seguro en el que se pueden utilizar punteros de un modo muy similar a como se hace en C++.
(Para habilitar esta opcion del compilador en el entorno de desarrollo de Visual Studio debes hacer lo siguiente:
1.- Abra la página Propiedades del proyecto.
2.- Haga clic en la página de propiedades GENERAR o BUILD.
3.- Active la casilla de verificación "Permitir código no seguro" o "Allow unsafe code")
Nota SUPER IMPORTANTE :
En el Common Language Runtime (CLR), se hace referencia al código no seguro como código no comprobable. El código no seguro en C# [NO ES necesariamente PELIGROSO]; simplemente es código cuya seguridad No puede ser comprobada por el CLR. Por consiguiente, el CLR sólo ejecutará código no seguro si se encuentra en un ensamblado de plena confianza.Si utiliza el código no seguro,[ES TU RESPONSABILIDAD garantizar que tu código no introduce riesgos de seguridad o errores de puntero].
Debes tomar en cuenta los iguiente, sin enbargo :
En C# no se permite derreferenciar punteros void*, ni tampoco se pueden efectuar operaciones aritméticas sobre punteros void*. La sintaxis void* se ha mantenido simplemente porcompatibilidad descendente, para llamar a funciones externas de la API de Windows que exigen punteros void* como parámetros.
Los punteros no pueden apuntar a tipos-referencia (clases o arrays). Tampoco pueden apuntar a estructuras que contengan tipos-referencia como miembros. Esto es un intento de proteger los datos utilizados por el motor de ejecución .NET y el recolector de basura (aunque en C#, como en C++,una vez que Ud. comienza a utilizar punteros casi siempre encontrará un modo de salvar cualquier restricción realizando operaciones aritméticas sobre los punteros y luego derreferenciando).
Además de declarar las partes relevantes de su código como no seguras, Ud. deberá especificar la opción /unsafe al compilador al compilar código que trabaje con punteros.
Los punteros no pueden apuntar a variable que estén embebidas en tipos-referencia (por ejemplo,miembros de clases),a menos que el puntero esté declarado en un bloque fixed.
para C++ y C# seria asi: foto + grande

Bueno a manera de complemento a esto seguramente te preguntas, si C# de manera predeterminada no admite la aritmética con punteros como lo trabaja? la respuesta seria x medio de un delegado en C# que no tiene equivalente directo en C++,y realiza las mismas funciones que un puntero a función en C++. La idea es que un delegado es un puntero a método, encapsulado en una clase especializada conjuntamente con una referencia al objeto al que el método será aplicado(en el caso de un método de instancia, o la referencia nula en el caso de un método estático).Esto implica que, a diferencia de un puntero a función de C++, un delegado de C# contiene suficiente información parallamar a un método de instancia.Formalmente, un delegado es una clase que se deriva de la clase System.Delegate. Por lo tanto, instanciar un delegado es un proceso de dos fases: la definición de esta clase derivada, y la declaración de una variabledel tipo apropiado. La definición de una clase-delegado incluye los detalles de la signatura (incluyendo el tipodel valor a devolver) del método que el delegado encapsula.La utilización principal de los delegados consiste en pasar de un método a otro las referencias a métodos ypermitir las llamadas indirectas: las referencias a métodos no pueden ser pasadas como parámetros directamente, pero sí como parte de un delegado. Los delegados aseguran la seguridad de tipos, y evitan las llamadas a métodos con signaturas incorrectas. El método contenido en el delegado puede ser llamado a través del delegado.

martes, 19 de mayo de 2009

Multidimensiones o + de 3 o multiplessubindices

Bueno aca les muestro un ejemplo mas extendido; Planteamos el siguiente problema. Se necesita manejar, en un arreglo, la posicion de todos los carcteres escritos en una enciclopedia. El arreglo debera tener las siguientes dimensiones:
Una para menejar el "volumen" en la enciclopedia.
Otra para manejar la "pagina" en el volumen.
Otra para manejar el "renglon" en la pagina.
Otra para menejar la "columna" en la pagina.
El siguiente fragmento de programa implementa la solucion a este programa.
para C++ seria asi: foto + grande para C# seria asi 1:foto + grande 2:foto + grande Nota:
As de notar que exite cambio en la forma como se implemento un arreglo en C#
en la primera clase declaramos un arreglo de tipo rasgado = arreglo de un arreglo
en la segunda clase declaramos un arreglo de tipo rectangular este si es una regilla

sábado, 9 de mayo de 2009

Arreglos de doble subindice

El Siguiente programa efectua otras manipualciones comunes de arreglos sobre un arreglode 3 por 4 denominado"studentGrade".Cada fila del arreglo representa un estudiante y cada columna representa la calificacion de uno de loscuatro examenes que realizaron dichos estudiantes durante el semestre. Las manipulaciones de arreglos las realizancuatro funciones. La funcion (minimum) determina la calificacion mas baja de todos los estudiantes durante el semestre;la funcion (maximum) la calificacion mas alta. La funcion (average) calcula el promedio semestral de un estudiante en particular. La funcion (printArray) envia a la salida, en formato de tabla, el arreglo de doble subindice.Las funciones (minimum), (maximum), (printArray) reciben tres argumentos: el arreglo [studentGrade] (llamado "grades"en cada funcion), el numero de estudiantes(fila del arreglo) y el numero de axamenes(columnas del arreglo). Cada funcionrecorre, por medio de un ciclo, el arreglo [grades] mediante estructura for anidadas es la definicion (minimum):
for (var i = 0; i < pupil; i++)

for (var j = 0; j < test; j++)

if (grade[i, j] < lowGrade)

lowGrade = grade[i, j];

return lowGrade;

La estructura for exterior incia estableciendo "i"( es decir, el subindice de fila) a 0, de modo que los elementos de laprimera fila puedan compararse con la variable lo "lowGrade" en el cuerpo de la estructura for interio. La estructurafor interior recorre, por medio de un ciclo, las cuatro calificaciones de una fila particular y las compara con "lowGrade".si alguna es menor que "lowGrade", dicha calificacion se asigna a esta varible. Despues, la estructura for exterior incrementa a 1 el subindice de la fila. Los elementos de la segunda fila se compararn con la variable "lowGrade".A continuacion se incrementa a 2 el subindicede la fila en la estructura for exterior. Ahora, los elementos de latercera fila se compararan con la varible "lowGrade". Cuando termina la ejecucion de la estructura anidada, "lowGrade"contiene la calificacion menor del arreglo de doble subindice. La funcion (maximum) funciona de igual manera.

La funcion (average) toma dos argumentos. un arreglo de un solo subindice con los resultados de las pruebas de un estudiante en particular y el numero de resultados de las pruebas en el arreglo. Al llamar a (average), el primerargumento es {studentGrade[student]}, que especifica que debe pasarse a (average) una fila particular del arreglo de doble subindice {studentGrade}. Por ejemplo el argemento {studentGrade[1]} representa los cuatro valores (un arreglo decalificaciones de un solo subindice) almacenados en la segunda fila del arreglo de doble subindice {studentGrade}.Los arreglos de doble subindice pueden considerarse como arreglos con elementos que son arreglos con un solo subidice. La funcion (average) calcula la suma de los elementos del arreglo. divide el total entre el numero deresultados de las pruebas y devuelve el resultado en formato de punto flotante.

para C++ seria asi:foto + grande
para C# seri asi: foto + grande

martes, 28 de abril de 2009

Arreglos de multiples subindices

Estos tambien son llamados Arreglos Multidimensionales, tanton en C++ como en C# pueden tener multiples subindices.Un uso comun es la representacion de tablas de valores que consisten en informacion ordenada en filas y columnas.Para identificar un elemento en particular de una tabla, debemos especificar dos subindices:El primero (por convencion) identificar la fila del elemento y el segundo(tambien por convencion), su columna.
Las tablas o arreglos que requieren de dos subindices para identificar un elemento en particular se llama arreglo de doble subindice. Note que los arreglos de multiple subindice pueden tener mas de dos subindices.
C# se aleja significativamente de C++ en lo que respecta a los arrays multidimensionales, dado que C# soportatanto arrays rectangulares como rasgados.
Un array rectangular es una verdadera rejilla de elementos. En C#, esto se indica mediante una sintaxis en laque las comas separan la cantidad de elementos de cada dimensión o rango. Por ejemplo, un array rectangular de dos dimensiones podría definirse de la siguiente forma:
int [,] MyArray2d;
MyArray2d = new int[2,3] { {1, 0}, {3, 6}, {9, 12} }; // C#
Esta sintaxis no es más que una extensión bastante intuitiva de la sintaxis para los arrays de una dimensión. La lista de inicialización en el código anterior podría estar ausente. Por ejemplo:
int [,,] MyArray3d = new int[2,3,2]; // C#
Esto hará que el constructor por defecto sea llamado para cada elemento, inicializando cada int a cero. En este ejemplo particular, estamos ilustrando la creación de un array de tres dimensiones. La cantidad total de elementos en el array es de 2 x 3 x 2 = 12. La característica básica de los arrays rectangulares es que cada filatiene la misma cantidad de elementos.
A los elementos de arrays rectangulares se accede utilizando una sintaxis similar:
int X = MyArray3d[1,2,0] + MyArray2d[0,1]; //C#
Los arrays rectangulares de C# no tienen contrapartida directa en C++. Los arrays rasgados de C#, sinembargo, se corresponden bastante directamente con los arrays multidimensionales de C++. Por ejemplo, siUd. declara el siguiente array en C++:
int MyCppArray[3][5]; //C++
Lo que está declarando no es un array de 3x5, sino un array de arrays – un array de tamaño 3, cada uno decuyos elementos es a su vez un array de tamaño 5. Esto se ve más claramente en el caso de un array alojado enmemoria dinámica. En ese caso deberíamos escribir:
int pMyCppArray = new int[3];
for (int i=0 ; i<3> ; i++)
pMyCppArray[i] = new int[5]; //C++
Debe quedar claro de este código que no hay razón alguna para que cada fila contenga la misma cantidad de elementos (aunque eso es lo que ocurre en el ejemplo). Como ejemplo de array rasgado en C++, que realmentecontiene una cantidad de elementos diferente en cada fila, podríamos escribir:
int pMyCppArray = new int[3];
for (int i=0 ; i<3> ; i++)
pMyCppArray[i] = new int[2*i + 2]; //C++
Las filas respectivas de este array tienen dimensiones 2, 4 y 6.C# obtiene el mismo resultado de un modo muy similar, aunque en el caso de C#, la sintaxis indica la cantidadde dimensiones de forma más explícita:
int [][] MyJaggedArray = new int[3][];
for (int i=0 ; <3> ; i++)
MyJaggedArray[i] = new int[2*i + 2]; //C#
Para el acceso a los elementos de un array rasgado se utiliza la misma sintaxis que en C++:
int X = MyJaggedArray[1][3];
Aquí hemos mostrado un array rasgado de rango 2. Sin embargo, del mismo modo que en C++, Ud. puededefinir un array rasgado con tantas dimensiones como desee – sólo tiene que añadir más corchetes a ladefinición.
para C++ seri asi :foto + grande para C# seri asi:foto + grande Nota : Como anecdota hoy aposte en el partido del Barcelna vrs chelsea 2009 UEFA por supesto nunca conte con un empate {0-0},so el pozo de apuestas se hizo mas grande.. que eperar.(nervios++) .....ojala gane el el barca [por siempre ForCa Barca]...jjaja

viernes, 24 de abril de 2009

Busqueda binaria en un arreglo

Esta busqueda elimina, tras cada comparacion, la mitad de los elementos del arreglo en los que se efectua la busqueda. Primero localiza el elemento central del arreglo y luego lo compara con la clave de busqueda. Si son iguales, se ha encontrado dicha clave y se devuelve el subindice de ese elemento. De otro modo, el problema se reduce buscar en una mitad del arreglo. Si la clave de busqueda es menor que el elmento central del arreglo, se busca en la primera mitad; de otro modo, se busca en la segunda mitad. Si la clave de busqueda no esta en el elemento central del subarreglo especificado (parte del arreglo original), se repite el algoritmo en una cuarta parte del arreglo original. La busqueda continua hasta que la clave de busqueda sea igual al elemento central de un subarreglo o hasta que que el subarreglo consista de un elemento, el cual no es igual ala clave de busqueda(esdecir, no se encuentra la clave de busqueda).
En el peor caso, la busqueda en un erreglo de 1024 elementos solo se llevaras 10 comparaciones mediante la busqueda binaria. La division repetida de 124 entre 2 (dado que tras cada comparacion se puede descartar lamitad del arreglo) nos da los valores 512, 256, 128, 64, 32, 16, 8, 4, 2 y 1. La division entre 2 es quivalente a una comparacion en el algoritmo de busqueda binaria.
El siguiente ejemplo presenta la version iterativa de la funcion (bynarySearch). La funcion recibe cuatro argumentos: un arreglo "b", un entero "searchKey", el subindice "low" del arreglo y el subindice "high" del arreglo. Si la clave de busqueda no es igual al elemento de la mitad de un subarreglo, se ajusta el subindice "low" o "high" para poder hacer la busqueda en un subarreglo mas pequeño. Si la clave de busqueda es menor que el elemento central, el subindice "high" se establece a "middle-1" y se continua la busqueda en los elementos de "low a middle - 1.Si la clave de busqueda es mayor que el elemento centra, el subindice "low" se establece a "middle+ 1" y se continua la busqueda en los elementos de "middle + 1" a "high". El programa emplea un arreglo de 15 elementos. La primera potencia de 2 mayor que la cantidad de elementos de este arreglo es 16(2 ºexponente 4), por loque se necesita un maximo de cuatro comparaciones para encontrar la clave de busqueda. La funcion "printHeader" envia a la salida los subindices del arreglo y la funcion "printRow" envia a la salida cada subarreglo generado durante el proceso de busqueda binaria. El elemento central de cada subarreglo se marca con un asterisco(*), para indicar el elemento con el que se compara la clave de busqueda.
para C++ seria asi:foto + grande
para C# seria asi:foto + grande

jueves, 23 de abril de 2009

Busqueda lineal en un arreglo

Con frecuencia un programador( tu o yo) trabajara con grandes cantidades de informacion almacenada en arreglos. Podria ser necesario determinar si algun arreglo contiene un valor que sea igual a cierto valor clave. El proceso para encontrar un elemento particular en un arreglo se llama busqueda. aca estudiaremos la tecnica simple busqueda lineal que compara todos los elementos del arreglo con la clave de busqueda. Debido a que el arrreglo no esta en ningun orden en particula, existe la misma posibilidad de que el valor este en el primer elemento on en el ultimo. Por lo tanto para encontrar un valor en el arreglo, en promedio el programa debe comparar la clave de busqueda con la mitad de los elementos del arreglo. Para determinar que un valor no esta en el arreglo, el programa debe comparar la clave de busqueda con todos los elementos de dicho arreglo. El metodo de busqueda lineal funciona bien con arreglos pequeños y con los no ordenados. Sin embargo, en los arreglos mayores de busqueda lineal no es suficiente. Si el arreglo esta ordenado, se puede emplear la tecnica de busqueda binaria, que es de alta velocidad.
para C++ seria asi: foto + grande para C# seria asi:foto + grande

martes, 21 de abril de 2009

Calculo de la media, mediana y moda

Uno de los usos comunes de las computadoras es compilar y analizar los resultados de las encuestas y sondeos de opinion. El siguiente ejemplo. utiliza el arreglo "response", incializado con 99 respuestas (representadas por la varible constante "responseSize") de una ecuesta. Cada una de las respuestas es un numero de 1 al 9. El programa calcula le media, la mediana y la moda de los 99 valores.
La media: Es el promedio aritmetico de los 99 valores. La funcion "mean" calcula el promedio totalizando los 99 elementos y dividiendo el resultado entre 99;
La mediana: Es el valor medio. La funcion "median" determina la mediana llamando a la funcion "bubleSort" , que ordena el arreglo de respuestas en orden ascendente, y seleccionando el elemento central, "answare[sizq/2]", del arreglo ordenado. observe que cuando hay un numero par de elementos, la mediana debe calcularse como la media de los dos elementos centrales. La funcion "median" actualmente no ofrece esa capasidad, se llama ala funcion printArray para enviar a la salida el arreglor "responses".
La moda: es el valor que sucede con mayor frecuencia entre las 99 respuestas. La funcion "mode" cuenta el numero de respuestas de cada tipo, luego seleccciona la cifra con mayor conteo. Esta version de la funcion "mode" no maneja empates. Dicha funcion tambien genera un histograma para ayudar a determinar graficamente la moda. este ejemplo incluye la mayoria de las manipulaciones comunes necesarias para los problemas de arreglos, incluyendo el paso de arreglos a funciones.
para C++ seria asi: fot + grande
para C# seria asi: foto + grande
Nota: Seguramente has de notar que para C++ declaramos los parametros de arreglo de algunas funciones de tipo "const" {const int a[]} que especifica que el arreglo "a" es constante y no puede modificarse, esto es para evitar que el arreglo original sea modificado en el cuerpo de la funcion. Este obedece la principio de menor privilegio. A las funciones no debe darseles la capasidad de modificar arreglos, a menos que sea necesario. En C# no debemos preocuparnos de esto ya que esto es por default... bueno hata la proxima SAyonara... jaja me encanta

miércoles, 15 de abril de 2009

Ordenamiento de arreglos

El ordenamiento de informacion(es decir, la colocacion de los datos en algun orden particular; por ejemplo, ascendente o descendente) es una de las aplicaciones mas importantes de la computacion. Un banco ordena todos los cheques por numero de cuenta para poder preparar los estados de cuenta al cierre del mes. practicamente todas las organizaciones deben ordenar informacion y, en muchos casos, volumenes masivos de informacion. El ordenamiento de datos es un problema interesante que ha provocado algunos esfuerzos de investigacion mas intensas en las ciencias de la computacion. En este ejemplo estamos estudiando el esquema de ordenamiento mas sencillo que se conoce.
El siguiente ejemplo ordena los valores del arreglo de 5 elmentos a en orden ascendente & descendente. La tecnica de la que nos valemos se llama ordenamiento de burbuja u ordenamiento por hundimiento, pues los valores mas pequeños(asendente) y los valores mas grandes(descendente) gradualmente burbujean hacia la parte mas alta del arreglo como las burbujas. La tecnica es pasar varias veces por el arreglo. con cada paso, se comparan pares sucesivos de elementos.
para C++ seia asi:foto + grande
para C# seria asi:foto + grande
Nota : tanto C++ y C# tiene maneras mas elegantes de hacer los ordenamientos .

viernes, 3 de abril de 2009

Paso de arreglo a funcion

Al pasar un arreglo a una funcion, generlamente tambien se pasa su tamaño, con elfin de que la funcion pueda procesar la cantidad especifica de elementos que contiene (de otra manera, necesitariamos incluir este conocimiento en la propia funcion llamada o, peor aun poner el tamaño del arreglo e una varible global).
Tanto C++ & C# pasan automaticamente arreglo a funciones utilizando simulacion de llamadas por referencia: las funciones llamadas pueden modificar los valores de los elementos de los arreglos originales de los invocadores.
El nombre del arreglo es la direcciom de su primer elemento. Debido a que se pasa la direccion de incio del arreglo,la funcion llamada sabe con precision donde esta almacenado dicho arreglo. Por lo tanto,cuando la funcion llamada modifica elementos del arreglo en el cuerpo de la funcion, de echo esta modificando los propios elementos del arreglo, es decir sus localidades de memoria originales.
Aunque los arreglos completos se pasan simulando llamadas por referencia, los elementos individuales se pasan mediante llamadas por valor, igual como sucede con las varibles simples. Tales piezas simples de infomacion se llaman escalares o cantidades escalares. Para pasar un elemento de una arreglo a una funcion, utilice el nombre con subindice del elemento del arreglo como argumento de la llamada.
El siguiente programa muestra la diferencia entre pasar un arreglo completo y pasar un elemento del arreglo. El programa primero imprime los cinco elementos del arreglo de enteros "a". Luego "a" y su tamaño se pasan a la funcion modifyArray, donde cada uno de sus elementos es multipliacado por 2. Despues "a" se vuelve a imprimir. como lo demuestra la salida, modifyArray modifica los elementos de "a".
Ahora el programa imprime el valor de a[3] y lo pasa ala funcion modifyElement. La funcion modifyElement multiplica po 2 su argumento e imprime el nuevo valor. Observe que cuando a[3] se reimprime, no ha sido modificado, pues los elementos de los arreglos se pasan medinete llamada por valor.
Para C++ seria asi: foto + grandepara C# seria asi: foto + grande

jueves, 2 de abril de 2009

Comparacion de arreglos Static y local

Los arreglos que se declaran como static se incializan al cargar el programa.Si el programador no incializa explicitamente algun arreglo, etonces el compilador lo inicializara a cero.
El siguientes ejemplos demuestra la funcion "staticArrayInit" con un arreglo local que se declara como [static] y una funcion "automaticArrayInit" con un arreglo automatico local. la funcion "staticArrayInit" es llamada dos veces. El compilador inicializa a cero el arreglo [static] local.
La funcion imprime el arreglo, suma 5 a cada elemento e imprime de nuevo el arreglo. La segunda vez que se llama a la funcion, elarreglo [static] contiene los valores almacenados durante la primera llamada de funcion.
Tambien se llama dos veces a la funcion "automaticArrayInit", Los elementos del arreglo automatico se incializan con los valores 1,2 y3. La funcion imprime el arreglo, suma 5 a cada uno de sus elementos y lo vuelve a imprimir..
La segunda ves que se llama a la funcion, los elementos del arreglo se reinicializan a 1,2 y 3, debido a que el arreglo tiene la clase de almaceanaminto automatico local.
para C++ seia asi: foto + grande para C# seria asi: foto + grande Nota: Creo qe has de de notar que para C# declaramos la varible como {static readonly} fuera de la funcion ya que pues como toda su arquitectura esta basada en clases. Esto nos permite mayor maniobrabilidad. e implementacion de los objetos. te recomiendo utilices los diagramas en C# ya que te dan una vision mas rapida y resumida de que haces....
Bueno solo como anegdota pues mientras escribo esto veo el partido de futbol entre Argentina Y Bolivia y estrepitosamentese les esta dando sepultura al equipo de Argentina(6-1) historico...so me quede pensando esto esta fuero de limites... moraleja = existe otra dimension que nosotros no hemos explorado jajaaj.. bueno hasta la proxima...me ancanta ..jaja++;

martes, 31 de marzo de 2009

Arreglo de cadenas

Hasta ahora hemos estudiado solo arreglos de enteros. Sin embargo, los arreglos pueden ser de cualquier tipo. Ahora explicaremos el almacenamiento de cadenas de caracteres en arreglos de caracteres. hasta ahora, la unica capacidad de procesamiento de cadenas que hemos presentado es la salidad de una cadena por medio de cout en C++ & Console.writeline() en C#. Una cadenacomo 'hola' es enrealidad un arreglo de caracteres porlo tanto podemos acceder a los distintos caracteres de la cadena directamente por la notacionde subindices.los arreglos tienen varias caracteristicas unicas.

El siguiente programa demuestra la incializacion de un arreglo de carcteres con una literal de cadena; la lectura de una cadena para dejarla en un arreglo de carcteres; la impresion de un erreglo de caracteres como cadena y el acceso a los caracteres individualesde una cadena, El siguiente programa se vale de una estructura for para recorrer pormedio de un ciclo el arreglo string1 e imprimirsus caracteres individuales separado por espacios.

para c++ seria asi: foto + grande

para c# seria asi: foto + grandeNota: C# es mucho mas versatil en el manejo de caracteres por que es posible hacer un barrido de los caracteres que componen el string utilizando la propiedad Length que poseen los arreglos y porque es posible acceder a estos tratando al string como un arreglo: sique este link para mas informacion.

viernes, 20 de marzo de 2009

Simulacion lanzamiento de dados

Sele solicita a usted como programador que simule 6000 lanzamientos de un dado.Observe que el dado solo tiene 6 lados y que debe aparecer un numero aproximado de 1000 veces..por supuesto como estamos en arreglos. debemos usar un arreglo.. este problema ya lo habiamos resuelto anteriomente(Aca)
Para C++ seria asi : foto + grande
Para C# seri asi: foto + grande Nota: Entiendo que un programador tiene intrinsicamente la necesidad de analisis so a ca les muestro un ejemplo de un problema solucionado de dos maneras distintas que hacen lo mismo . pero que tu debes evaluar.. su desempeño.. ja=++; hasta la,,, amixorp. a sem olvidada aca sustituimos un swich por un arreglo ...

jueves, 19 de marzo de 2009

Imprime histograma

Bueno continuando con el tema de arreglos en nuestro siguiente ejemplo lee los numeros de un arreglo y traza la infomacion en forma de grafico de barras o histograma; cada numero se imprime , seguido de una barra consistente en la misma cantidad de asteriscos. el ciclo for anidado de echo es el encargado de dibujar las barras.
para C++ seria asi: foto + grande
para C# seria asi: foto + grande hasta la proxima..jajajaa:)

sábado, 14 de marzo de 2009

Analiss de Encuesta

Consider el siguiente planteamiento de problema se pidio a 10 estudiantes que calificaran la calidad de la comida de la cafeteria estudiantil en una escala del 1 a 3(1 significa terrible y 3 excelente).ponga las 10 repuestas en un areglo de enteros y resuma el resultado de la encuesta. Deseamos resumir la cantidad de respuestas de cada tipo(es decir de 1 a 3). El arreglo(responses) es de 10 elementos con las respuestas de los estudiantes. Utilizamos un arreglo (frequency) de 4 elementos con valor de los elementos igual a 0, para contar la cantidad de casos de cada repuesta. Ignoramos el primer elemento, (frequency)[0], pues es mas logico que la respuesta 1 incremente (frequency)[1] que (frequency)[0].Esto nos permite utilizar directamente cada respuesta como subindice del areglo (frequency).
El primer ciclo "for" toma las respuestas, una ala vez, del arreglo(responses) e incrementa uno de los 3 contadores(frequency[1] a frequency [3]) del arreglo (frequency).La instruccion clave del ciclo es:

++frequency[responses[answare]];

Esta instruccion incrementa el contador (frequency) adecuado, dependiendo del valor de reponses[answare]. Por ejemplo, cuando el contador (answare) es 0, el valor de(responses[answares]) es 1,por lo que ++frequency[responses[answare]]; se interpreta como

++frequency[1];

lo que incrementa el elemento uno del arreglo. Cuando (answare) es 1; responses(answare) es 2, asi que ++frequency[responses[answare]]; se iterpreta como

++frequency[2];

con lo que se incrementa el elemento dos del arreglo, Cuando (answare) es 2, responses(answare)es 3, por lo tanto ++frequency[responses[answare]];se interpreta como

++frequency[6];

que incrementa el elemento tres del arreglo,etc. Observe que sin importar la cantidad de repuestas procesadas en la encuesta, solo se requiere un arreglo de 4 elementos(del que se ingnora el elemento cero) para resumir los resultados. Si en los datos hubiera valores invalidos, como 7, el programa intentaria sumar 1 a (frequency)[6]. Esto caeria fuera de los limites del arreglos.

para C++ y C# seria asi :foto + grande
Para ejemplo de como recorre el arreglo les dejo esta fotos de seguimineto del progama para que se den una idea de que sucede tras banbalinas para este caso esocogimos como lengueja C#...por su diciplina geranrquica relamente no difiere mucho de C++, pero debes notar que para C# el array es un objeto. hasta..la proxima.... foto + grande foto + grande

jueves, 12 de marzo de 2009

Sumar arreglos

Esta es una aplicacion tipica de los arreglos, en este se calcula la suma de los elementos del arreglo. Por su puesto estamos declarando una variable constante (ArraySize =12), luego llenamos los valores contenido para el arreglo, luego recorremos con un ciclo for para acumular en la variabel (total) las suma de los valores del arreglo luego los deplegamos ...simple pero necesario de comprender .
para C++ & C# seria asi :foto + grande

Constantantes

Bueno por que no habiamos hablado de constantes ahora es cuando, como seguramente su palabra lo dice una costante son valores que se conocen en tiempo de compilación y no cambian. Las variables contantes pueden ponerse en cualquier lugar donde se espere una expresion contante. El uso de varibles contantes para especificar tamaños de arreglos hace que los programas sean mas escalables. por ejemplo, la mencion repetida del tamaño 10 en el codigo de procesamiento de un arreglo de 10 elementos da a dicho numero un significado artificial que, desafortunadamente, puede confundir al lector cuando el programa contiene otros 10 que no tienen nada que ver con el tamaño del areglo.
para C++ y C# seria asi: foto + grande Nota : Lo importante de consolidar estos pequeños detalles nos asegura buen codigo mantenible y escalable ..hasta la proxima..

miércoles, 11 de marzo de 2009

Arreglos con constantes

El siguiente ejemplo incializa los elementos de un areglo "s" de diez elementos a los enteros 2,4,6...20 e imprime el arregloen fomato de tabla; estos numeros se generan multiplicando por 2 cada valor consecutivo del contador del ciclo y sumandole 2.si te das cuenta estamos utilizando el calificador const para de clarar una de las llamadas Varibles constantes, "arraySize" cuyovalor es 10. Las variables contantes deben incializarse con una expresion constante al momento que se declaran y no puedemodificarse despues. Estas tambien se llaman constantes nombradas o variables de solo lecutura.Note el termino "variable constante"es un oximoro , una contradiccion de terminos como "camaron gigante" o "quemadura x congelamiento...)bueno ustedes me entenderan...algo asi como armonizar dos conceptos opuestos en una sola expresión jajaja
para C++ & C# seria asi :foto + grande hasta la amixorp

Arreglo con incializacion

Siguiendo con los areglos debes notar que para este caso estamos dimensionando el arreglo de una dimension,en este ejemplo hacemos la incializacion de los elementos de un areglo por medio de una declaracion, si hubiera menos inicializadore que elementos en el arreglo, los elementos restantes se incializarian automaticamente a cero.
para C++ & C# seria asi :foto + grande

viernes, 6 de marzo de 2009

Arreglos o array

Un arreglo es un grupo consecutivo de localidades de memoria que tienen el mismo nombre y el mismo tipo.El siguiente programa utiliza una estuctura de repeticion for que incializa a cero los elementos de un arreglo de enteros "n" de diez elementos; luego imprime dicho arreglo en formato de tabla. La primera instruccion de salida despliega los encabezados de las columnas que se imprimira en la estructura for subsiguiente. Los elementos de un arreglo tambien pueden incializarse en la declaracion del arreglo siguiendo a la declaracion con un signo de igualdad y una lista de incializadores separadas por comas (encerradas entre corchetes). El siguiente programa incializa un areglo de enteros con diez valores y lo imprime en formato de tabla. Los arrays son una area en la que la similitud superficial en sintaxis entre C++ y C# esconde el hecho de que lo ocurre por detras del telon en ambos lenguajes es muy diferente. En C++, un array es esencialmente un conjunto de variables dispuestas secuencialmente en memoria y accesible mediante un puntero. Por otra parte , en C# un array es una intancia de la clase base System.Array , y es por lo tanto un objeto con todas las de ley, residente en memoria dinamica bajo el control del recolector de basura. C# utiliza una sintaxis similar a la de C++ para acceder a los metodos de esta clase. Creando la ilusion de que se esta trabajando con arrays al estilo de C++, pero la ventaja es que con los arrays de C# es mucho mas comodo trabajar. Por ejemplo, todos los arrays de C# disponen de una propiedad,Length, que indica la cantidad de elementos en el array, ahorrando al programador tener que almacenar este dato independientemente. arrays de C# son tambien mucho mas seguros...
para C++ seria asi : foto + grande para C# seria si: foto + grande

jueves, 5 de marzo de 2009

Torres de hanoi

Todos los estudiantes de ciencias de la computaciono pues o (ingenieria en sistema...s.jaja) deben lidiar ciertos problemas clasicos. El de las torres de hanoi (vea la figura) es uno de los mas famosos.
La leyenda es que, en un templo del lejano oriente, los monjes intentaron mover una pila de discos de una espiga a otra. La pila incial tiene 64 discos en una espiga, dispuesto de abajo arriba por tamaño mayor a menor. Los monjes intentan mover la pila de esta espiga a una segunda, teniendo como restricciones que se mueva un disco a la vez y que en ningun momento puede ponerse un disco mayor sobre uno menor. Hay una tercera espiga para colocar discos temporlmente.
Supuestamente el mundo terminara cuando los monjes terminen su tarea, por lo que tenemos pocos incentivos para yudarlos ..jajajajaa..&& +++,,, ..
Supongamos que los monjes intentan mover los discos de la espiga 1 al espiga 3.
Deseamos Desarollar un algoritmo que imprima la secuencia precisa de tranferencia de discos.
Si tuvieramos que abordar este problema segun los metodos convencionales, pronto estariamos atorados con el manejo de los discos.

En cambio, si lo atacamos teniendo en mente la recursion, pronto se vuelve mas manejable.

El movimiento de "n" discos puede verse en terminos del movimiento de solo "n - 1" discos(de ahi la recursion), como sigue:

A)- Mueva "n - 1" discos de la espiga 1 a la 2, empleando la 3 como area temporal para colocarlos.
B)- Mueva el ultimo disco(mayor) de la espiga 1 a la 3.
C)- Mueva "n - 1" discos de la espiga 2 a la 3,usando la 1 como area temporal para almacenarlos.

Este proceso terminaria cuando la ultima tarea comprende el movimiento de "n = 1" discos, es decir, el caso base.
Esto se logra simplemente moviendo el disco, sin necesidad del area temporal de almacenamiento.
Aca biene lo importante...jajaja Escriba un programa que resuelva el problema de las torres de hanoi, utilizando una funcion recursiva con cuatro parametros:

a)- Cantidad de discos amover.
b)- La espiga en la que se encuentra inicialmente.
c)- La espiga a la que habra que moverlos.
d)- La espiga que sera el area de almacenamiento temporal.

Su programa debera imprimir las instrucciones con las que se moveran los discos de la espiga origen a la destino. Por ejemplo, para mover una pila de tres discos de la espiga 1 a la 3, su programa debera imprimir la siguiente serie de movimientos:

1 -> 3(esto significa mover un disco de la espiga 1 a la 3)
1 -> 2
3 -> 2
1 -> 3
2 -> 1
2 -> 3
1 -> 3
para C ++ seria asi: foto + grande
para C# seri asi:foto + grande
Nota: lo importante es que entiendas las funciones