[SOLUCIONADO] C# Recursividad: Problemas donde conviene aplicar la recursividad

Iniciado por Noporfavor, Agosto 31, 2016, 04:54:04 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Hola,

antes de preguntar, les mostrare el codigo:

archivo: Form1.Designer.cs
Código: php

namespace Laberinto
{
    partial class Form1
    {
        ///

        /// Variable del diseñador requerida.
        ///

        private System.ComponentModel.IContainer components = null;

        ///

        /// Limpiar los recursos que se estén utilizando.
        ///

        /// true si los recursos administrados se deben eliminar; false en caso contrario, false.
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Código generado por el Diseñador de Windows Forms

        ///

        /// Método necesario para admitir el Diseñador. No se puede modificar
        /// el contenido del método con el editor de código.
        ///

        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(11, 15);
            this.button1.name=%26quot%3Bbutton1%26quot%3B%3B
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "Verificar";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // button2
            //
            this.button2.Location = new System.Drawing.Point(93, 15);
            this.button2.name=%26quot%3Bbutton2%26quot%3B%3B
            this.button2.Size = new System.Drawing.Size(124, 23);
            this.button2.TabIndex = 1;
            this.button2.Text = "Otro laberinto";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(345, 428);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.name=%26quot%3BForm1%26quot%3B%3B
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
    }
}


archivo: Form1.cs

Código: php

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Laberinto
{
    public partial class Form1 : Form
    {
        private Label[,] mat;
        private bool salida;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            int x = 10;
            int y = 50;
            mat=new Label[10,10];
            for (int fil = 0; fil < mat.GetLength(0); fil++)
            {
                for (int col = 0; col < mat.GetLength(1); col++)
                {
                    mat[fil, col] = new Label();
                    mat[fil, col].Location = new Point(x, y);
                    mat[fil, col].Size = new Size(30, 30);
                    Controls.Add(mat[fil, col]);
                    x = x + 32;
                }
                y = y + 32;
                x = 10;
            }
            Crear();
        }

        private void Crear()
        {
            Text = "";
            button1.Enabled = true;
            Random ale=new Random();
            for(int f = 0; f < 10; f++)
            {
                for(int c = 0; c < 10; c++)
                {
                    mat[f, c].BackColor = Color.Azure;
                    int a=ale.Next(0,4);
                    if (a==0)
                        mat[f,c].Text="1";
                    else
                        mat[f,c].Text="0";; 
                }
            }
            mat[9,9].Text="s";
            mat[0,0].Text="0";   
        }

        private void Recorrer(int fil, int col)
        {
            if (fil >= 0 && fil < 10 && col >= 0 && col < 10 && salida == false)
            {
                if (mat[fil,col].Text=="s")
                    salida = true;
                else
                    if (mat[fil,col].Text=="0")
                    {
                        mat[fil,col].Text="9";
                        mat[fil,col].BackColor=Color.Red;
                        Recorrer(fil, col + 1);
                        Recorrer(fil + 1, col);
                        Recorrer(fil - 1, col);
                        Recorrer(fil, col - 1);
                    }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            salida = false;
            Recorrer(0, 0);
            if (salida == true)
                Text = "Tiene salida";
            else
                Text = "No tiene salida";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Crear();
        }       
    }
}


Mi pregunta esta en el archivo Form1.cs. En el evento Load:

Código: php

private void Form1_Load(object sender, EventArgs e)
        {
            int x = 10;
            int y = 50;
            mat=new Label[10,10];
            for (int fil = 0; fil < mat.GetLength(0); fil++)
            {
                for (int col = 0; col < mat.GetLength(1); col++)
                {
                    mat[fil, col] = new Label();
                    mat[fil, col].Location = new Point(x, y);
                    mat[fil, col].Size = new Size(30, 30);
                    Controls.Add(mat[fil, col]);
                    x = x + 32;
                }
                y = y + 32;
                x = 10;
            }
            Crear();
        }


Mi pregunta es: que hace esta linea?:
mat[fil, col].Location = new Point(x, y);

Que significa Location?

Gracias y saludos


Ahhh,  vale. Pero entonces hay una cosa que no entiendo:

La fila 1, columna 1 se desplaza a la posición 10, 50?
Seguramente entendí algo mal ya que la matriz es 10x10.

Gracias y saludos

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

La fila 1, columna 1 se desplaza a la posición 10, 50?
Si

Es la posicion 10, 50 de la pantalla, no de la matriz

Ahhh,  ok; vale.

Y que significa size? En esta linea:

  mat[fil, col].Size = new Size(30, 30);

Me fije en Internet y me encontré con tres sizes. Que significa este size?

Septiembre 02, 2016, 07:16:53 AM #5 Ultima modificación: Septiembre 02, 2016, 07:22:44 AM por Hu3c0
Utiliza un poco el sentido común amigo SIZE=sitio=espacio  con lo cual estás dando un espacio de 30,30 height witdh  ancho por alto

Al objeto mat le dices por parámetros la fila y la columna y creas un nuevo sitio,espacio  o como quieras comprenderlo de 30 * 30 
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Es increible que, a pesar de que no estas con C#, sepas entender sus codigos.
Es increible que, a pesar de ser un tema muy dificil para mi eso de las matrices, tu te lo tomas como si fuera viento.
Es increible que, a pesar de tener voluntad, mi naturaleza me lleva bien abajo y me desanima y que a causa de esto deje de aprender C#.
Es increible que, a pesar de haber hecho mucho en C#, todavia me falta mucho en aprender.
Es increible que el poder siempre lo tendran administradores, padres, maestros, policias y que en este mundo no existen los heroes

Septiembre 03, 2016, 01:40:37 AM #7 Ultima modificación: Septiembre 03, 2016, 01:42:23 AM por fudmario
Pero sabes que es lo mas increible?, que con solo un comentario(que según mi opinion no fue ni ofensiva ni destructiva) tengas esa actitud derrotista.

No se que IDE usas, pero personalmente te recomendaria usar Visual Studio, es uno de los mejores IDE's y más completos y con la cual te facilitará aprender programación y ademas de la gran cantidad de complementos que facilita programar, lo poco que aprendí en programación lo hice con Visual Studio.

Y tan solo acercandote con el mouse puedes obtener descripción de Propiedades, Métodos,...





Recuerda que cuanto más aprendas, más te daras cuenta de lo poco que sabes....ya que el camino de la programación es Inmensa

Saludos.





Septiembre 03, 2016, 09:17:05 AM #8 Ultima modificación: Septiembre 03, 2016, 09:53:32 AM por Hu3c0
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Es increible que, a pesar de que no estas con C#, sepas entender sus codigos.
Es increible que, a pesar de ser un tema muy dificil para mi eso de las matrices, tu te lo tomas como si fuera viento.
Es increible que, a pesar de tener voluntad, mi naturaleza me lleva bien abajo y me desanima y que a causa de esto deje de aprender C#.
Es increible que, a pesar de haber hecho mucho en C#, todavia me falta mucho en aprender.
Es increible que el poder siempre lo tendran administradores, padres, maestros, policias y que en este mundo no existen los heroes

Hola amigo no te derrumbes..!! te doy mi consejo este año he estado apunto de  esclafar el pc en la pared de mi dormitorio por lo menos tres veces..!,
ofuscación ante mucha información recibida, módulos que añaden que no tienen que ver con la informatica que son de relleno pero hay que estudiarlos
por obligación,inglés, entornos de desarrollo, base de datos,sobre redes,sobre software, sobre hardware,buffffff.

Pero he seguido terco como una mula ,en este mundo binario sólo hay espacio para los duros de mente es un camino extraordinariamente complicado
pero cuando todo lo que lees se asienta neuronalmente  y lo haces parte de tí, todo fluye como el agua.

No  te puedes imaginar lo que me costó comprender la herencia y la polimorfia en java y aún tengo algunas pequeñas dudas pero con tiempo y progra-
mando iré asentado todo lo que me hace falta.

Lo que has preguntado hasta el momento es todo de sentido común el método recursivo no era complicado, lo que has preguntado sobre size sabiendo
un poco de inglés y siendo intuitivo hubieras llegado a deducirlo.

Lo que te ocurre en estos momentos y yo he pasado por eso como te he descrito en los post de arriba es que tienes una ofuscación de un par de cojo-
...es, cuando te ocurra  desconecta un poco y después retoma el asunto otra vez, verás como luego de un corto tiempo se ven las cosas mejor.

Con respecto a lo que te ha dicho mi amigo y hermano fudmario:
Sigue sus consejos al pie de la letra para mi es un icono desde hace años es una persona con mucha  experiencia y sabiduría y buena gente

PD:Lee hasta caer rendido, duerme y haz parte de tí todo lo que has leído y cuando te levantes olvida todo lo que has leído, porque ya es parte de tí
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Septiembre 03, 2016, 01:04:21 PM #9 Ultima modificación: Septiembre 03, 2016, 07:33:56 PM por Gabriela
Hola seth,
Por si no lo sabes también hubiera tenido esa actitud derrotista sin ese comentario.
Y con respecto a Visual Studio, la definición es explicada como si te hablará un científico de Wikipedia.

Hola Hu3c0,
Tus palabras me dieron ánimo. Pasa que en este largo camino hacia el conocimiento hack inglés tengo a veces tiempos muy turbulentos en donde necesito alguien como vos ;)






Edición:

Bueno Hu3c0,
En la primera vuelta de la estructura repetitiva for de la columna se reserva espacio de 30x30. Pero en la segunda vuelta en la fila 1 columna 2 sucede lo mismo. No es cierto? Entendí algo mal?


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
......
Y con respecto a Visual Studio, la definición es explicada como si te hablará un científico de Wikipedia.
Sobre lo que dices sobre Visual Studio, es verdad que en un principio no se entiende mucho de lo que dice, pero es cuestión de tiempo para comenzar a comprender...

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Bueno Hu3c0,
En la primera vuelta de la estructura repetitiva for de la columna se reserva espacio de 30x30. Pero en la segunda vuelta en la fila 1 columna 2 sucede lo mismo. No es cierto? Entendí algo mal?

Si, ya que cada vez que recorre el for, inicializas una nueva instancia de la estructura No tienes permitido ver los links. Registrarse o Entrar a mi cuenta con las dimensiones
de ancho y alto de 30x30. 

Sugerencia y/o Recomendación:
Como te dije en mi comentario, no se que IDE usas.
Pero desde Visual Studio, puedes depurar el código paso a paso, linea por linea, para poder entender que es lo que esta haciendo(como por ejemplo: ver que es lo que pasa en ese for, que pasa en cada recorrido, la asignacion de valores en las variables,...).





Existe un sin de tutoriales para aprender la Depuracion de Codigo paso a paso, con el cual podrás entender que es lo que pasa durante la ejecucion del codigo. De esta forma evitarias esperar a que alguien te responda dudas que tú mismo podrias responderte y ademas con la cual podrás acelerar tú aprendizaje.
Aquí algunos enlaces de referencia que te podrian servir:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Saludos,.



Ahh gracias por el consejo fudmario y gracias a todos ustedes por el aguante.

Se los agradezco muchisimo