Sitios Encontrados
viernes, 6 de noviembre de 2009
Enumerar filas en el GRIDVIEW ( )
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 :
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)
lunes, 15 de junio de 2009
Puntero no constante hacia datos constantes
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
domingo, 14 de junio de 2009
Puntero no constante hacia datos no constantes
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 ;
sábado, 30 de mayo de 2009
Funcion por referencia con argumentos de apuntador
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
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
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
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.
martes, 28 de abril de 2009
Arreglos de multiples subindices
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
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.
jueves, 23 de abril de 2009
Busqueda lineal en un arreglo
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
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
miércoles, 15 de abril de 2009
Ordenamiento de arreglos
viernes, 3 de abril de 2009
Paso de arreglo a funcion
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
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
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
para C++ seria asi: foto + grande
sábado, 14 de marzo de 2009
Analiss de Encuesta
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:
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
jueves, 12 de marzo de 2009
Sumar arreglos
para C++ & C# seria asi :foto + grande
Constantantes
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
para C++ & C# seria asi :foto + grande hasta la amixorp
Arreglo con incializacion
viernes, 6 de marzo de 2009
Arreglos o array
para C++ seria asi : foto + grande para C# seria si: foto + grande
jueves, 5 de marzo de 2009
Torres de hanoi
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