[C con Clase] 2. Ayuda con la plantilla <vector> (David Reza)

David Fire ddfire en gmail.com
Mie Nov 11 12:16:28 CET 2009


por favor no cambies el subject asi queda todo ordenadito, la pregunta y las
respuestas.
David

El 11 de noviembre de 2009 07:35, mil100 <atltras en gmail.com> escribió:

> Hola.
> He leido el código un poco por encima y lo que observo es lo siguiente:
>
>        *Puede que este no sea el problema, pero para iterar sobre el
>        vector mediante bulces for o while, yo usaría un
>        vector::iterator.
>
>        *Respecto a que la clase no este accesible para las demás
>        funciones puede deberse a que los prototipos de las funciones le
>        dicen al compilador que van a usar una clase que este no conoce
>        hasta el momento, debido a que la has declarado después de los
>        prototipos.
>        Prueba a colocar el código de la clase nodo antes de los
>        prototipos.
>
> Un saludo espero haber sido de ayuda.
>
> >
> > ------------------------------
> >
> > Message: 2
> > Date: Tue, 10 Nov 2009 18:32:05 -0600
> > From: David Reza <l.fix3r.l en gmail.com>
> > Subject: [C con Clase] Ayuda con la plantilla <vector>
> > To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> > Message-ID:
> >       <fe9a00e10911101632v796f2a0cmd1f6563e1fb6032a en mail.gmail.com>
> > Content-Type: text/plain; charset="iso-8859-1"
> >
> > Hola a todos, me gustaría que me ayudaran a explicarme un poco el código
> que
> > hice sobre el problema de las 3 jarras. Lo que sucede es que casi no sé
> > mucho de clases y me da muchos errores de que la clase Nodo no está al
> > alcance de las demás funciones que tengo. Espero contar con su ayuda; a
> > continuación el código
> >
> > =============================== CODE ===============================
> >
> > #include <iostream>
> > #include <vector>
> >
> > #define JARRA1 8
> > #define JARRA2 5
> > #define JARRA3 3
> >
> > using namespace std;
> >
> > //                                  Prototipos
> > bool comprobarNodoEnClose(Nodo nodo, vector <Nodo> Close );
> > bool nodoMeta(Nodo nodo);
> > void CrearNodo(vector <Nodo> &Open, int jar1, int jar2, int jar3);
> > void expandirNodo(Nodo nodo, vector <Nodo> Close, vector <Nodo> &Open);
> > void pasarAgua(int cant1, int cant2, int jar1, int jar2, int jar3, vector
> > <Nodo> &Open);
> > void tirarAgua(Nodo nodo, int jar1, int jar2, int jar3, vector <Nodo>
> > &Open);
> > void llenarAgua(Nodo nodo, int jar1, int jar2, int jar3, vector <Nodo>
> > &Open);
> > void meterEnOpen(Nodo nodo, vector <Nodo> &Open);
> > void meterEnClose(Nodo nodo, vector <Nodo> &Close);
> > Nodo sacarNodoDeOpen(vector <Nodo> &Open);
> > Nodo primerNodoDeOpen(vector <Nodo> Open);
> >
> > class Nodo{
> >  public:
> >     int j[3];
> >     Nodo(int j1, int j2, int j3) {        // Constructor
> >         j[0] = j1;
> >         j[1] = j2;
> >         j[2] = j3;
> >     }
> > };
> >
> > bool comprobarNodoEnClose(Nodo nodo, vector <Nodo> Close ){
> //
> > Comprueba si el nodo está en CLOSE
> >     int cont = 0;     // Contador para recorrer la lista
> >
> >     if (Close.empty())
> >         return false;
> >     else {
> >         while (cont < Close.size()) {
> >             if(Close.operator==(nodo))   // Comparar elementos de un
> vector
> >                 return true;
> >             cont++;
> >         }
> >     }
> > }
> >
> > bool nodoMeta(Nodo nodo){
> >     if (nodo.j[0] == 4 || nodo.j[1] == 4 || nodo.j[2] == 4)
> >         return true;
> > }
> >
> > void CrearNodo(vector <Nodo> &Open, int jar1, int jar2, int jar3) {
> //
> > Crea un nodo y lo mete en Open
> >     Nodo nuevo(jar1, jar2, jar3);
> >     meterEnOpen(nuevo, Open);
> > }
> >
> > void expandirNodo(Nodo nodo, vector <Nodo> Close, vector <Nodo> &Open){
> > //Close para comprobar que no está en Close
> >     if (!comprobarNodoEnClose(nodo, Close)){          // Si NO está en
> Close
> > -> Expandir
> >         if (nodo.j[0] > 0 && nodo.j[1] != JARRA2)
> >             pasarAgua(nodo.j[0], nodo.j[1], 1, 2, 0, Open);
> >         if (nodo.j[0] > 0 && nodo.j[2] != JARRA3)
> >             pasarAgua(nodo.j[0], nodo.j[2], 1, 0, 2, Open);
> >         if (nodo.j[1] > 0 && nodo.j[0] != JARRA1)
> >             pasarAgua(nodo.j[1], nodo.j[0], 2, 1, 0, Open);
> >         if (nodo.j[1] > 0 && nodo.j[2] != JARRA3)
> >             pasarAgua(nodo.j[1], nodo.j[2], 0, 1, 2, Open);
> >         if (nodo.j[2] > 0 && nodo.j[0] != JARRA1)
> >             pasarAgua(nodo.j[2], nodo.j[0], 2, 0, 1, Open);
> >         if (nodo.j[2] > 0 && nodo.j[1] != JARRA2)
> >             pasarAgua(nodo.j[2], nodo.j[1], 0, 2, 1, Open);
> >         //    Si la jarra tiene agua, tirarla
> >         if (nodo.j[0] != 0)
> >             tirarAgua(nodo, 1, 0, 0, Open);
> >         if (nodo.j[1] != 0)
> >             tirarAgua(nodo, 0, 1, 0, Open);
> >         if (nodo.j[2] != 0)
> >             tirarAgua(nodo, 0, 0, 1, Open);
> >         //    Si la jarra no está llena, llenarla
> >         if (nodo.j[0] != JARRA1)
> >             llenarJarra(nodo, 1, 0, 0, Open);
> >         if (nodo.j[1] != JARRA2)
> >             llenarJarra(nodo, 0, 1, 0, Open);
> >         if (nodo.j[2] != JARRA3)
> >             llenarJarra(nodo, 0, 0, 1, Open);
> >     }
> > }
> >
> > void pasarAgua(int cant1, int cant2, int jar1, int jar2, int jar3, vector
> > <Nodo> &Open){                 // Necesita la lista open parar pasarla
> >     int cant2copia =
> > 0;
> >                                  // a la función CrearNodo() el cual mete
> el
> > nodo en Open
> >     if (jar1 == 1 && jar2 == 2){
> >         cant2copia = cant2;
> >         cant2 += cant1;
> >         if(cant2 > JARRA2) cant2 = JARRA2;
> >         cant2copia = cant2 - cant2copia;
> >         cant1 -= cant2copia;
> >         CrearNodo(Open, cant1, cant2, jar3);
> >     }
> >     if (jar1 == 1 && jar3 == 2){
> >         cant2copia = cant2;
> >         cant2 += cant1;
> >         if(cant2 > JARRA3) cant2 = JARRA3;
> >         cant2copia = cant2 - cant2copia;
> >         cant1 -= cant2copia;
> >         CrearNodo(Open, cant1, jar2, cant2);
> >     }
> >     if (jar2 == 1 && jar1 == 2){
> >         cant2copia = cant2;
> >         cant2 += cant1;
> >         if(cant2 > JARRA1) cant2 = JARRA1;
> >         cant2copia = cant2 - cant2copia;
> >         cant1 -= cant2copia;
> >         CrearNodo(Open, cant2, cant1, jar3);
> >     }
> >     if (jar2 == 1 && jar3 == 2){
> >         cant2copia = cant2;
> >         cant2 += cant1;
> >         if(cant2 > JARRA3) cant2 = JARRA3;
> >         cant2copia = cant2 - cant2copia;
> >         cant1 -= cant2copia;
> >         CrearNodo(Open, jar1, cant1, cant2);
> >     }
> >     if (jar3 == 1 && jar1 == 2){
> >         cant2copia = cant2;
> >         cant2 += cant1;
> >         if(cant2 > JARRA1) cant2 = JARRA1;
> >         cant2copia = cant2 - cant2copia;
> >         cant1 -= cant2copia;
> >         CrearNodo(Open, cant2, jar2, cant1);
> >     }
> >     if (jar3 == 1 && jar2 == 2){
> >         cant2copia = cant2;
> >         cant2 += cant1;
> >         if(cant2 > JARRA2) cant2 = JARRA2;
> >         cant2copia = cant2 - cant2copia;
> >         cant1 -= cant2copia;
> >         CrearNodo(Open, jar1, cant2, cant1);
> >     }
> > }
> >
> > void tirarAgua(Nodo nodo, int jar1, int jar2, int jar3, vector <Nodo>
> > &Open){
> >     if (jar1 == 1) CrearNodo(Open, 0, jar2, jar3);
> >     if (jar2 == 1) CrearNodo(Open, jar1, 0, jar3);
> >     if (jar3 == 1) CrearNodo(Open, jar1, jar2, 0);
> > }
> >
> > void llenarAgua(Nodo nodo, int jar1, int jar2, int jar3, vector <Nodo>
> > &Open){
> >     if (jar1 == 1) CrearNodo(Open, JARRA1, jar2, jar3);
> >     if (jar2 == 1) CrearNodo(Open, jar1, JARRA2, jar3);
> >     if (jar3 == 1) CrearNodo(Open, jar1, jar2, JARRA3);
> > }
> >
> > void meterEnOpen(Nodo nodo, vector <Nodo> &Open){
> >     Open.push_back(nodo);
> > }
> >
> > void meterEnClose(Nodo nodo, vector <Nodo> &Close){
> >     Close.push_back(nodo);
> > }
> >
> > Nodo sacarNodoDeOpen(vector <Nodo> &Open){
> >     Nodo temporal = Open[0];
> >     for (int cont = 0; cont < Open.size(); cont++) {
> >         Open[cont] = Open[cont + 1];
> >     }
> >     Open.pop_back();
> >     return temporal;
> > }
> >
> > Nodo primerNodoDeOpen(vector <Nodo> Open) {
> >     return Open[0];
> > }
> >
> >
> > //                                       INICIO
> > int main()
> > {
> >     vector <Nodo> Open;                                         //
> > LISTAS
> >     vector <Nodo> Close;
> >
> >     Nodo principal(0,0,0);
> >     meterEnOpen(principal, Open);
> >
> >     while (!Open.empty()) {
> >
> >
> >         if (nodoMeta(primerNodoDeOpen(Open))) {
> >             cout << "META ENCONTRADA!" << endl;
> >             return 0;
> >         }
> >         else {
> >         meterEnClose(primerNodoDeOpen(Open));  // Metemos nodo en Close
> >         expandirNodo(sacarNodoDeOpen(Open), Close, Open);   // Expandimos
> y
> > sacamos de Open
> >         }
> >     }
> >
> >     cout << endl << endl << "No se encontró solución" << endl;
> >
> >     return 0;
> > }
> >
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091111/882fd656/attachment.html>


Más información sobre la lista de distribución Cconclase