elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Problema de recursividad en VB
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de recursividad en VB  (Leído 2,166 veces)
Anabel3

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Problema de recursividad en VB
« en: 26 Junio 2012, 07:17 am »

Hola!

Por favor necesito ayuda urgente.
Soy una principiante en la programación.
Tengo un trabajo de la facu que me esta dando dolores de cabeza hace semanas, porque no el encuentro donde esta fallando mi código.
 :huh:

Tengo que realizar un programa que dibujo la alfombra de sierpinski utilizando recursividad,
una introducción al tema lo vana a encontrar aqui:
[url]http://es.wikipedia.org/wiki/Alfombra_de_Sierpinski[url]

La construcción de la alfombra de Sierpinski se define de forma recursiva:
1º) Comenzamos con un cuadrado.
2º)El cuadrado se corta en 9 cuadrados congruentes, y eliminamos el cuadrado central.
3º) El paso anterior vuelve a aplicarse recursivamente a cada uno de los 8 cuadrados restantes.

El programa que cree posee una función que dibuja el cuadrado y lo divide en 9 cuadrados, y esta función se llama a sí misma 8 veces.
El problema es que la llamada a la función se queda en la 1º de las 8, por ello es que no se crea la alfombra en su totalidad.

Es decir que para el nivel de recursividad igual o mayor a 2, se crea un cuadrado que es divido en 9 cuadrados. Y cada uno de estos cuadrados  deben ser divididos en 9 cuadrados a su vez y asi sucesivamente (dependiendo el nivel de recursividad que determine). Pero nose porque la división de cuadrados solo se aplica en el 1º de los 9 cuadrados.

Se entiende??
Desde ya agradezco cualquier ayuda que puedan brindarme.

Aca esta el código principal de mi programa, la llamada que  inicia  esta clase se realiza desde otro formulario donde se define el nivel de recursividad, (N) que varia desde 0 a 10.

Código
  1. Public Class Alfombra
  2.  
  3.    Inherits System.Windows.Forms.Form
  4.    Public nIteracion As Integer
  5.    Public x, y, ancho, alto As Double
  6.  
  7.  
  8.    Public Sub iniciar_Alfombra(ByRef n As Integer, ByRef x As Double, ByRef y As Double, ByRef ancho As Double, ByRef alto As Double)
  9.  
  10.  
  11.        If n = 0 Then
  12.  
  13.            dibujar_Rectangulo(x, y, ancho, alto)
  14.  
  15.        Else
  16.  
  17.            calcular_Rectangulo(n, x, y, ancho, alto)
  18.  
  19.        End If
  20.  
  21.    End Sub
  22.  
  23.  
  24.  
  25.    Public Sub calcular_Rectangulo(ByRef n As Integer, ByRef x As Double, ByRef y As Double, ByRef ancho As Double, ByRef alto As Double)
  26.  
  27.        Dim x1, x2, x3, x4, x5, x6, x7, x8 As Double
  28.        Dim y1, y2, y3, y4, y5, y6, y7, y8 As Double
  29.        Dim nuevo_Ancho, nuevo_Alto As Double
  30.  
  31.        If n > 0 Then
  32.  
  33.            n = n - 1
  34.            nuevo_Ancho = ancho / 3     '1/3 del ancho
  35.            nuevo_Alto = alto / 3       '1/3 del alto
  36.  
  37.  
  38.            ' Primer rectangulo. Punto origen
  39.            dibujar_Rectangulo(x, y, nuevo_Ancho, nuevo_Alto)
  40.  
  41.            ' Segundo rectangulo
  42.            x1 = x + nuevo_Ancho
  43.            y1 = y
  44.            dibujar_Rectangulo(x1, y1, nuevo_Ancho, nuevo_Alto)
  45.  
  46.            ' Tercer rectangulo
  47.            x2 = x + (2 * nuevo_Ancho)
  48.            y2 = y
  49.            dibujar_Rectangulo(x2, y2, nuevo_Ancho, nuevo_Alto)
  50.  
  51.            ' Cuarto rectangulo
  52.            x3 = x
  53.            y3 = y + nuevo_Alto
  54.            dibujar_Rectangulo(x3, y3, nuevo_Ancho, nuevo_Alto)
  55.  
  56.  
  57.            ' Quinto rectangulo: rectangulo del centro
  58.            'x4 = x + nuevo_Ancho
  59.            'y4 = y + nuevo_Alto
  60.            'Sierpinski.pbDibujo.CreateGraphics.DrawRectangle(Pens.White, CInt(x4), CInt(y4), CInt(nuevo_Ancho), CInt(nuevo_Alto))
  61.            'Sierpinski.pbDibujo.CreateGraphics.FillRectangle(Brushes.White, CInt(x4), CInt(y4), CInt(nuevo_Ancho), CInt(nuevo_Alto))
  62.  
  63.  
  64.            ' Sexto rectangulo
  65.            x5 = x + (2 * nuevo_Ancho)
  66.            y5 = y + nuevo_Alto
  67.            dibujar_Rectangulo(x5, y5, nuevo_Ancho, nuevo_Alto)
  68.  
  69.            ' Septimo rectangulo
  70.            x6 = x
  71.            y6 = y + (2 * nuevo_Alto)
  72.            dibujar_Rectangulo(x6, y6, nuevo_Ancho, nuevo_Alto)
  73.  
  74.            ' Octavo rectangulo
  75.            x7 = x + nuevo_Ancho
  76.            y7 = y + (2 * nuevo_Alto)
  77.            dibujar_Rectangulo(x7, y7, nuevo_Ancho, nuevo_Alto)
  78.  
  79.            ' Noveno rectangulo
  80.            x8 = x + (2 * nuevo_Ancho)
  81.            y8 = y + (2 * nuevo_Alto)
  82.            dibujar_Rectangulo(x8, y8, nuevo_Ancho, nuevo_Alto)
  83.  
  84.            ' Se llama a sí mismo 8 veces
  85.            Call calcular_Rectangulo(n, x, y, nuevo_Ancho, nuevo_Alto)
  86.            Call calcular_Rectangulo(n, x1, y1, nuevo_Ancho, nuevo_Alto)
  87.            Call calcular_Rectangulo(n, x2, y2, nuevo_Ancho, nuevo_Alto)
  88.            Call calcular_Rectangulo(n, x3, y3, nuevo_Ancho, nuevo_Alto)
  89.            Call calcular_Rectangulo(n, x5, y5, nuevo_Ancho, nuevo_Alto)
  90.            Call calcular_Rectangulo(n, x6, y6, nuevo_Ancho, nuevo_Alto)
  91.            Call calcular_Rectangulo(n, x7, y7, nuevo_Ancho, nuevo_Alto)
  92.            Call calcular_Rectangulo(n, x8, y8, nuevo_Ancho, nuevo_Alto)
  93.  
  94.  
  95.        End If
  96.  
  97.    End Sub
  98.  
  99.    Public Sub dibujar_Rectangulo(ByVal x As Double, ByVal y As Double, ByVal ancho As Double, ByVal alto As Double)
  100.  
  101.        Sierpinski.pbDibujo.CreateGraphics.DrawRectangle(Pens.CornflowerBlue, CInt(x), CInt(y), CInt(ancho), CInt(alto))
  102.        'Sierpinski.pbDibujo.CreateGraphics.FillRectangle(Brushes.CornflowerBlue, CInt(x), CInt(y), CInt(ancho), CInt(alto))
  103.  
  104.    End Sub
  105.  
  106.  
  107. End Class
  108.  


« Última modificación: 26 Junio 2012, 19:14 pm por raul338 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] - Recursividad problema « 1 2 »
Programación C/C++
cbug 10 6,145 Último mensaje 4 Julio 2010, 18:39 pm
por cbug
Problema de entendimiento recursividad.
Programación C/C++
axeelcs 7 4,777 Último mensaje 20 Agosto 2011, 21:34 pm
por BlackZeroX
problema con recursividad + punteros + TRIE, PLAIN C
Programación C/C++
luisdr22 7 3,867 Último mensaje 23 Octubre 2012, 21:31 pm
por do-while
Problema con recursividad y buscaminas.
Programación C/C++
miguel0542 1 3,563 Último mensaje 5 Junio 2016, 23:49 pm
por do-while
[Problema con recursividad] Java
Java
Desu Nya 2 3,592 Último mensaje 8 Octubre 2017, 20:24 pm
por Desu Nya
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines