Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Noporfavor

#81
Ahh vale, crei que entendi algo mal.

Y... otra preguntita:

Es aqui:
Código: text

void Insertar(int pos, int x)
        {
            if (pos <= Cantidad() + 1)
            {
                Nodo nuevo = new Nodo();
                nuevo.info = x;
                if (pos == 1)
                {
                    nuevo.sig = raiz;
                    raiz = nuevo;
                }
                else
                    if (pos == Cantidad() + 1)
                    {
                        Nodo reco = raiz;
                        while (reco.sig != null)
                        {
                            reco = reco.sig;
                        }
                        reco.sig = nuevo;
                        nuevo.sig = null;
                    }
                    else
                    {
                        Nodo reco = raiz;
                        for (int f = 1; f <= pos - 2; f++)
                            reco = reco.sig;
                        Nodo siguiente = reco.sig;
                        reco.sig = nuevo;
                        nuevo.sig = siguiente;
                    }
            }


Aqui:
Código: text

else
                    {
                        Nodo reco = raiz;
                        for (int f = 1; f <= pos - 2; f++)
                            reco = reco.sig;
                        Nodo siguiente = reco.sig;
                        reco.sig = nuevo;
                        nuevo.sig = siguiente;
                    }


Aqui:
Código: text

for (int f = 1; f <= pos - 2; f++)


Solamente quiero saber si lo entendi bien:
Se ejecuta esta linea:
lg.Insertar (2, 15);
significa eso en la estructura repetitiva for que pos es 2? De ser el caso significa eso que la estrucutra repetitiva se repita mientras f sea menor o igual a 2 - 2, es decir 0? Pero de ser el caso la estructura repititiva for no podra dar vueltas porque f ya es 1.

Gracias y saludos
#82
Hola,
para mi duda este es el codigo del programa:


Código: csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ListaGenerica1
{
    class ListaGenerica
    {
        class Nodo
        {
            public int info;
            public Nodo sig;
        }

        private Nodo raiz;

        public ListaGenerica()
        {
            raiz = null;
        }

        void Insertar(int pos, int x)
        {
            if (pos <= Cantidad() + 1)
            {
                Nodo nuevo = new Nodo();
                nuevo.info = x;
                if (pos == 1)
                {
                    nuevo.sig = raiz;
                    raiz = nuevo;
                }
                else
                    if (pos == Cantidad() + 1)
                    {
                        Nodo reco = raiz;
                        while (reco.sig != null)
                        {
                            reco = reco.sig;
                        }
                        reco.sig = nuevo;
                        nuevo.sig = null;
                    }
                    else
                    {
                        Nodo reco = raiz;
                        for (int f = 1; f <= pos - 2; f++)
                            reco = reco.sig;
                        Nodo siguiente = reco.sig;
                        reco.sig = nuevo;
                        nuevo.sig = siguiente;
                    }
            }
        }

        public int Extraer(int pos)
        {
            if (pos <= Cantidad())
            {
                int informacion;
                if (pos == 1)
                {
                    informacion = raiz.info;
                    raiz = raiz.sig;
                }
                else
                {
                    Nodo reco;
                    reco = raiz;
                    for (int f = 1; f <= pos - 2; f++)
                        reco = reco.sig;
                    Nodo prox = reco.sig;
                    reco.sig = prox.sig;
                    informacion = prox.info;
                }
                return informacion;
            }
            else
                return int.MaxValue;
        }

        public void Borrar(int pos)
        {
            if (pos <= Cantidad())
            {
                if (pos == 1)
                {
                    raiz = raiz.sig;
                }
                else
                {
                    Nodo reco;
                    reco = raiz;
                    for (int f = 1; f <= pos - 2; f++)
                        reco = reco.sig;
                    Nodo prox = reco.sig;
                    reco.sig = prox.sig;
                }
            }
        }

        public void Intercambiar(int pos1, int pos2)
        {
            if (pos1 <= Cantidad() && pos2 <= Cantidad())
            {
                Nodo reco1 = raiz;
                for (int f = 1; f < pos1; f++)
                    reco1 = reco1.sig;
                Nodo reco2 = raiz;
                for (int f = 1; f < pos2; f++)
                    reco2 = reco2.sig;
                int aux = reco1.info;
                reco1.info = reco2.info;
                reco2.info = aux;
            }
        }

        public int Mayor()
        {
            if (!Vacia())
            {
                int may = raiz.info;
                Nodo reco = raiz.sig;
                while (reco != null)
                {
                    if (reco.info > may)
                        may = reco.info;
                    reco = reco.sig;
                }
                return may;
            }
            else
                return int.MaxValue;
        }

        public int PosMayor()
        {
            if (!Vacia())
            {
                int may = raiz.info;
                int x = 1;
                int pos = x;
                Nodo reco = raiz.sig;
                while (reco != null)
                {
                    if (reco.info > may)
                    {
                        may = reco.info;
                        pos = x;
                    }
                    reco = reco.sig;
                    x++;
                }
                return pos;
            }
            else
                return int.MaxValue;
        }

        public int Cantidad()
        {
            int cant = 0;
            Nodo reco = raiz;
            while (reco != null)
            {
                reco = reco.sig;
                cant++;
            }
            return cant;
        }

        public bool Ordenada()
        {
            if (Cantidad() > 1)
            {
                Nodo reco1 = raiz;
                Nodo reco2 = raiz.sig;
                while (reco2 != null)
                {
                    if (reco2.info < reco1.info)
                    {
                        return false;
                    }
                    reco2 = reco2.sig;
                    reco1 = reco1.sig;
                }
            }
            return true;
        }

        public bool Existe(int x)
        {
            Nodo reco = raiz;
            while (reco != null)
            {
                if (reco.info == x)
                    return true;
                reco = reco.sig;
            }
            return false;
        }

        public bool Vacia()
        {
            if (raiz == null)
                return true;
            else
                return false;
        }

        public void Imprimir()
        {
            Nodo reco = raiz;
            while (reco != null) {
                Console.Write (reco.info + "-");
                reco = reco.sig;
            }
            Console.WriteLine();
        }

        static void Main(string[] args)
        {
            ListaGenerica lg=new ListaGenerica();
            lg.Insertar (1, 10);
            lg.Insertar (2, 20);
            lg.Insertar (3, 30);
            lg.Insertar (2, 15);
            lg.Insertar (1, 115);
            lg.Imprimir ();
            Console.WriteLine ("Luego de Borrar el primero");
            lg.Borrar (1);
            lg.Imprimir ();
            Console.WriteLine ("Luego de Extraer el segundo");
            lg.Extraer (2);
            lg.Imprimir ();
            Console.WriteLine ("Luego de Intercambiar el primero con el tercero");
            lg.Intercambiar (1, 3);
            lg.Imprimir ();
            if (lg.Existe(10))
                Console.WriteLine("Se encuentra el 20 en la lista");
            else
                Console.WriteLine("No se encuentra el 20 en la lista");
            Console.WriteLine("La posición del mayor es:"+lg.PosMayor());
            if (lg.Ordenada())
                Console.WriteLine("La lista está ordenada de menor a mayor");
            else
                Console.WriteLine("La lista no está ordenada de menor a mayor");
            Console.ReadKey();
        }
    }
}


Bueno, al principio raiz apunta a null.
raiz = null;

Luego viene un nodo con la informacion 10.
lg.Insertar (1, 10);

Luego, el campo sig de este nodo apunta a raiz, que contiene null.
nuevo.sig = raiz;

Luego viene otro nodo con la informacion 20.
lg.Insertar (2, 20);

Luego el campo sig del nodo con la informacion 10 apunta al nodo con la informacion 20? Y con eso el nodo con la informacion 10 deja de apuntar al nodo raiz=null?
Nodo reco = raiz;
                        while (reco.sig != null)
                        {
                            reco = reco.sig;
                        }
                        reco.sig = nuevo;
                        nuevo.sig = null;

Que cosa entendi mal?

Gracias y saludos
#84
Ahhh ok; gracias  ;D

Pero... si no te molestaria

Viste a donde dice:
if (llegada == minuto)

En realidad esta pensado para cuando llega una persona al cajero. Pero llegada tendria que ser igual a minuto. Pero en llegada vimos:
int llegada = 2 + You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login(0,2);

Entonces resultado 2 o 3

Y vemos que en la primera vuelta de la estructura repetitiva for minuto es 0

Pero 2 o 3 no es igual a 0.

Sere que soy tonto?

Gracias y saludos
#85
Gracias!
Siempre logras que lo entiendo!

Veras....
No te quiero molestar de nuevo; pero tendria otra dudita:

Hemos dicho que llegan clientes a la puerta del cajero cada 2 ó 3 minutos.

Pero mira esto:

Código: text

Random ale=new Random();
            int estado = 0;
            int llegada = 2 + ale.Next(0,2);
            int salida = -1;
            int cantAtendidas = 0;
            Cola cola = new Cola();


En esta linea mira:
int llegada = 2 + You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login(0,2);

La variable llegada almacena en que minuto llegará el próximo cliente (debemos generar un valor entre 2 y 3).
Supongamos que el numero aleatoria sea 2. 2+2=4. Si es 4 no se generara un valor entre 2 y 3.
No deberia, entonces quedar la linea asi?:
int llegada = 2 + You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login(0,1);

Gracias y saludos
#86
Hola,
en realidad es un simple duda. Pero creo importante mostrarlo todo.

Queria desarrollar un programa para la simulación de un cajero automático.
Se cuenta con la siguiente información:
- Llegan clientes a la puerta del cajero cada 2 ó 3 minutos.
- Cada cliente tarda entre 2 y 4 minutos para ser atendido.

Queria que el programa obtenga las siguientes informaciónes:
1 - Cantidad de clientes que se atienden en 10 horas.
2 - Cantidad de clientes que hay en cola después de 10 horas.
3 - Hora de llegada del primer cliente que no es atendido luego de 10 horas (es decir la persona que está primera en la cola cuando se cumplen 10 horas)

Para eso hice en Form1.cs [Diseno] lo siguiente:


Y en Form1.cs puse lo siguiente:
Código: text

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

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Random ale = new Random();
            int estado = 0;
            int llegada = 2 + ale.Next(0, 2);
            int salida = -1;
            int cantAtendidas = 0;
            Cola cola = new Cola();
            for (int minuto = 0; minuto < 600; minuto++)
            {
                if (llegada == minuto)
                {
                    if (estado == 0)
                    {
                        estado = 1;
                        salida = minuto + 2 + ale.Next(0, 3);
                    }
                    else
                    {
                        cola.Insertar(minuto);
                    }
                    llegada = minuto + 2 + ale.Next(0, 2);
                }
                if (salida == minuto)
                {
                    estado = 0;
                    cantAtendidas++;
                    if (!cola.Vacia())
                    {
                        cola.Extraer();
                        estado = 1;
                        salida = minuto + 2 + ale.Next(0, 3);
                    }
                }
            }
            label1.Text = "Atendidos: " + cantAtendidas.ToString();
            label2.Text = "En cola: " + cola.Cantidad().ToString();
            label3.Text = "Minuto llegada: " + cola.Extraer().ToString();
        }
    }
}


Y en Cola.cs lo siguiente:
Código: text

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

namespace ListaTipoCola2
{
    class Cola
    {
        class Nodo
        {
            public int info;
            public Nodo sig;
        }

        private Nodo raiz, fondo;

        public Cola()
        {
            raiz = null;
            fondo = null;
        }

        public bool Vacia()
        {
            if (raiz == null)
                return true;
            else
                return false;
        }

        public void Insertar(int info)
        {
            Nodo nuevo;
            nuevo = new Nodo();
            nuevo.info = info;
            nuevo.sig = null;
            if (Vacia())
            {
                raiz = nuevo;
                fondo = nuevo;
            }
            else
            {
                fondo.sig = nuevo;
                fondo = nuevo;
            }
        }

        public int Extraer()
        {
            if (!Vacia())
            {
                int informacion = raiz.info;
                if (raiz == fondo)
                {
                    raiz = null;
                    fondo = null;
                }
                else
                {
                    raiz = raiz.sig;
                }
                return informacion;
            }
            else
                return int.MaxValue;
        }

        public int Cantidad()
        {
            int cant = 0;
            Nodo reco = raiz;
            while (reco != null)
            {
                cant++;
                reco = reco.sig;
            }
            return cant;
        }
    }
}


Puesto que copie Form1.cs tengo una duda aqui:
Código: text

Random ale=new Random();
            int estado = 0;
            int llegada = 2 + ale.Next(0,2);
            int salida = -1;
            int cantAtendidas = 0;
            Cola cola = new Cola();


Que significa esta linea?
Random ale=new Random();

Hace mucho aprendi lo que es Random pero me olvide. Y en internet no lo explican tan bien como lo hace grep. Razon por la que no lo entiendo.

Gracias y saludos
#87
Ahhh, osea que por ejemplo en esta formula: (2+[3-12]*{8/3})

La primera vuelta de la estructura repititiva for; el ( pasa por esta linea:
if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')

Correcto?
#88
Pero hay una cosa que no entiendo. Mira:
for (int f = 0; f < cadena.Length; f++)

f ya empieza con 0. No es, entonces, imposible que ( este en la posicion 0?

Saludos
#89
Ahhhhh
Y en esta formula por ejemplo: (2+[3-12]*{8/3})
Aqui cadena.Lenght es igual a 16?

#90
Ok grep,
pero visto esto, que funcion cumple (f) en esta linea?:
if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')

Eso me cuesta entender.

Gracias y saludos
#91
Citar
ElementAt devuelve un caracter tipo char, este caracter es el que se encuentra en la posición indicada por parámetro. Entonces, como el parámetro es el valor de la variable f, si suponemos que f es igual a 0 y cadena es igual a "(Hola Mundo)", cadena.ElementAt(f) == '(' es como decir: ¿El caracter que se encuentra en la posición 0 del string "(Hola Mundo)" es igual al caracter '(' ?.

Ok, ( se encuentra en la posicion 0. Pero no se puede decir lo mismo de [ y {. Sin embargo se pregunta lo mismo. Tiene sentido? Cual?

Gracias y saludos
#92
Hola grep,

gracias por avisarme esto. Debi hacer primero una clase para Pila.cs.

Pero ya que estas tengo una duda en este programa. En el codigo Form1.cs esta escrito:

Código: text

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 Formula
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Pila pila1;
            pila1 = new Pila();
            string cadena = textBox1.Text;
            for (int f = 0; f < cadena.Length; f++)
            {
                if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')
                {
                    pila1.Insertar(cadena.ElementAt(f));
                }
                else
                {
                    if (cadena.ElementAt(f) == ')')
                    {
                        if (pila1.Extraer() != '(')
                        {
                            Text = "Incorrecta";
                            return;
                        }
                    }
                    else
                    {
                        if (cadena.ElementAt(f) == ']')
                        {
                            if (pila1.Extraer() != '[')
                            {
                                Text = "Incorrecta";
                                return;
                            }
                        }
                        else
                        {
                            if (cadena.ElementAt(f) == '}')
                            {
                                if (pila1.Extraer() != '{')
                                {
                                    Text = "Incorrecta";
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            if (pila1.Vacia())
            {
                Text = "Correcta";
            }
            else
            {
                Text = "Incorrecta";
            }
        }
    }
}


Y mi duda estaba a donde dice:
Código: text

if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')


De donde viene el ElementAt? Y que significa esto junto con (f)?

Gracias y saludos
#94
Hola,
en Form1.cs [Diseno]* hice esto:




en Pila.cs puse este codigo:

Código: text

Pila pila1;
            pila1 = new Pila();
            string cadena = textBox1.Text;
            for (int f = 0; f < cadena.Length; f++)
            {
                if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')
                {
                    pila1.Insertar(cadena.ElementAt(f));
                }
                else
                {
                    if (cadena.ElementAt(f) == ')')
                    {
                        if (pila1.Extraer() != '(')
                        {
                            Text = "Incorrecta";
                            return;
                        }
                    }
                    else
                    {
                        if (cadena.ElementAt(f) == ']')
                        {
                            if (pila1.Extraer() != '[')
                            {
                                Text = "Incorrecta";
                                return;
                            }
                        }
                        else
                        {
                            if (cadena.ElementAt(f) == '}')
                            {
                                if (pila1.Extraer() != '{')
                                {
                                    Text = "Incorrecta";
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            if (pila1.Vacia())
            {
                Text = "Correcta";
            }
            else
            {
                Text = "Incorrecta";
            }
        }
    }
}


en Form1.cs* puse este codigo:

Código: text

using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Pila pila1;
            pila1 = new Pila();
            string cadena = textBox1.Text;
            for (int f = 0; f < cadena.Length; f++)
            {
                if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')
                {
                    pila1.Insertar(cadena.ElementAt(f));
                }
                else
                {
                    if (cadena.ElementAt(f) == ')')
                    {
                        if (pila1.Extraer() != '(')
                        {
                            Text = "Incorrecta";
                            return;
                        }
                    }
                    else
                    {
                        if (cadena.ElementAt(f) == ']')
                        {
                            if (pila1.Extraer() != '[')
                            {
                                Text = "Incorrecta";
                                return;
                            }
                        }
                        else
                        {
                            if (cadena.ElementAt(f) == '}')
                            {
                                if (pila1.Extraer() != '{')
                                {
                                    Text = "Incorrecta";
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            if (pila1.Vacia())
            {
                Text = "Correcta";
            }
            else
            {
                Text = "Incorrecta";
            }
        }
    }
}


Pero cuando quiero iniciar el programa me aparecen los siguientes errores:




Luego me voy a Form1.cs* en la linea 22 y adonde dice Pila le doy a mostrar posibles correcciones.
Luego le doy click a Formul.Pila.

Y me aparece este error que no lo puedo sacar:




Alguien me puedo ayudar?

Gracias y saludos
#95
Hola BlackBlex,

gracias; me sirvio. A ti tambien te debo una.

Gracias y saludos
#96
Hola,
desde hoy, cuando abro Visual Studio me aparece esto (nunca se me aparecio):



Pero en realidad deberia empezar asi:



Alguien sabe como ponerlo otra vez normal?

Gracias y saludos
#97
Hola grep,
muchisimas gracias por tu gran ayuda;

Este tema esta solucionado. Te debo una.

Gracias y saludos
#98
Hola grep,
al fin entiendo el codigo; para hay que admitir que era un codigo muy complicado. Para gracias a que lo entendi pude entender tambien este codigo:

Código: text

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

namespace ListasTipoPila1
{
    class Pila
    {
        class Nodo
        {
            public int info;
            public Nodo sig;
        }

        private Nodo raiz;

        public Pila()
        {
            raiz = null;
        }

        public void Insertar(int x)
        {
            Nodo nuevo;
            nuevo = new Nodo();
            nuevo.info = x;
            if (raiz == null)
            {
                nuevo.sig = null;
                raiz = nuevo;
            }
            else
            {
                nuevo.sig = raiz;
                raiz = nuevo;
            }
        }

        public int Extraer()
        {
            if (raiz != null)
            {
                int informacion = raiz.info;
                raiz = raiz.sig;
                return informacion;
            }
            else
            {
                return int.MaxValue;
            }
        }

        public void Imprimir()
        {
            Nodo reco=raiz;
            Console.WriteLine("Listado de todos los elementos de la pila.");
            while (reco!=null)
            {
                Console.Write(reco.info+"-");
                reco=reco.sig;
            }
            Console.WriteLine();
        }

        public bool Vacia()
        {
            if (raiz == null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public int Cantidad()
        {
            int cant = 0;
            Nodo reco = raiz;
            while (reco != null)
            {
                cant++;
                reco = reco.sig;
            }
            return cant;
        }

        static void Main(string[] args)
        {
            Pila pila1=new Pila();
            pila1.Insertar(10);
            pila1.Insertar(40);
            pila1.Insertar(3);
            pila1.Imprimir();
            Console.WriteLine("La cantidad de nodos de la lista es:"+pila1.Cantidad());
            while (pila1.Vacia()==false)
            {
                Console.WriteLine(pila1.Extraer());
            }
            Console.ReadKey();
        }
    }
}


Pero tendria una duda aqui. Solo una duda:

public bool Vacia()
        {
            if (raiz == null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

Para que hace falta bool aqui? Tambien se puede escribir este metodo sin bool. O no?

Gracias y saludos
#99
Citar
Como raiz referencia al Nodo 3, y el Nodo 3 referencia al Nodo 2 en su campo "sig", entonces ahora "raiz"
va a referenciar al Nodo 2.

Pero mira lo que dice aqui:

if (raiz == null)
{
  nuevo.sig = null;
  raiz = nuevo;
}
else
{
  nuevo.sig = raiz;
  raiz = nuevo;
}

En esta parte:

else
{
  nuevo.sig = raiz;
  raiz = nuevo;
}

En esta parte:

nuevo.sig = raiz;

Osea que el campo sig del nodo 3 referencia a raiz y raiz por su parte referencia al nodo 3.
Como es posible, entonces, que el campo sig del nodo 3 referencia al nodo 2?

Gracias y saludos
#100
Hola grep,

la variable informacion guarda el numero 3

Cuando leo esta linea: raiz = raiz.sig;

entiendo que raiz apunta al campo sig del nodo 3. Que habla en contra de que esto no es asi? Y de ser asi porque ha de ser eliminado el nodo 3?

Gracias y saludos