<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Buenos días.<br><br>Eso aclara mis dudas gracias. Solo 2 comentarios:<br><br>- No uso matrices porque no siempre van a ser tablas de 4x4 enteros. Serán de 4xN enteros dependiendo del caracter. La letra N sería de 5 de longitud por ejemplo.<br><br>- Sobre la creación del typedef <span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">discreteCharacter [4, N];  </span>e ¿Hay alguna forma de definir un constructor, u operator para pasarle los datos por arrays? Mi principal problema era el evitar la notación tan larga como es:<br><br><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][0] = 1;</span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][1] = 1;<br>
</span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][2] = 1;<br></span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][3] = 0;<br><br></span>Si podía sustituirlo por otra más compacta, para hacerlo un poco más "amigable" al revisar el código. No obstante la solución que planteas también me sirve. <br><br>Muchas gracias, un saludo.<br></div><br><br><div><div id="SkyDrivePlaceholder"></div><hr id="stopSpelling">Date: Mon, 4 Mar 2013 23:46:55 -0500<br>From: srd4121@njit.edu<br>To: cconclase@listas.conclase.net<br>Subject: Re: [C con Clase] Problema para guardar matrices como vectores<br><br><div dir="ltr">Hola Víctor,<div class="ecxgmail_extra"><br><div class="ecxgmail_quote">2013/3/4 victor Gonyi <span dir="ltr"><<a href="mailto:mrpiperoman@hotmail.com" target="_blank">mrpiperoman@hotmail.com</a>></span><br>
<blockquote class="ecxgmail_quote" style="border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex;">


<div><div dir="ltr">Buenas noches.<br><br>Estoy intentando hacer una estructura de datos para guardar valores tipo int, que pueden ser 0, 1 o 2. Para ello, quiero usar un vector compuesto de vectores.<br><br></div></div>
</blockquote><div><br></div><div>[CORTE]</div><div><br></div><blockquote class="ecxgmail_quote" style="border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex;">
<div><div dir="ltr"><br>Es decir, antes una entrada compuesta por 1 solo caracter: "A", "E", "~", debe devolver un vector de longitud X, que varía según el caracter introducido.<br><br>Mi falta de experiencia manejando vectores me hace complicado buscar la forma más correcta/elegante de hacer la función. De ahí mis preguntas:<br>
<br>- ¿Es correcto el planteamiento?<br></div></div></blockquote><div><br></div><div>En principio, sí; aunque no estoy seguro de por qué has definido '<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">discreteCharacter' así:</span></div>
<div><br></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">typedef vector< vector<int> > discreteCharacter;</span><br></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;"><br>
</span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">si luego no lo usas al implementar la función 'decodeCharacter()'. Escribes:</span></div><div><br></div><div>
<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">vector< vector<int> > BonusCoinsController::</span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">decodeCharacter( const char *decodeChar )</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">cuando podrías haber escrito:<br></span><br>
<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">discreteCharacter </span><span style="font-size:12.727272033691406px;font-family:arial,sans-serif;">BonusCoinsController::</span><span style="font-size:12.727272033691406px;font-family:arial,sans-serif;">decodeCharacter( const char *decodeChar )</span><br>
</div><div><br></div><blockquote class="ecxgmail_quote" style="border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex;"><div><div dir="ltr">- ¿Cuál es la mejor manera de crear el tipo discreteCharacter si a priori no sé cuanta longitud tiene el caracter introducido? Podría hacer 2 switch pero lo veo un poco engorroso, y no sé si es lo más correcto reservarlo dentro del switch y poner un return en cada uno.<br>
</div></div></blockquote><div><br></div><div>Tal y como lo usas al principio, vas bien encaminado. No veo que necesites hacer 2 switch.</div><div><br></div><blockquote class="ecxgmail_quote" style="border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex;">
<div><div dir="ltr">- ¿Cuál es la sintaxis correcta para que se pueda poner los valores de forma que "a ojo" se pueda ver que carácter es y facilitar su entendimiento? Es decir viendo:<br>myDecodedCharacter = (     (1,1,1,0),<br>
                                              (1,2,0,0),<br>                                              (1,0,0,0),<br>                                              (1,1,1,0));<br><br>Si está bien tabulado, te puedes hacer a la idea que es realmente una E.<br>
<br>He probado con llaves, corchetes, operator= y me da errores de compilación continuamente, aun consultando la referencia: <a href="http://www.cplusplus.com/reference/vector/vector/vector/" target="_blank">http://www.cplusplus.com/reference/vector/vector/vector/</a> <br>
<br></div></div></blockquote><div><br></div><div>Los paréntesis y comas son operadores en C++. Si quieres crear nuevos objetos de ciertos tipos, entonces tienes que indicar eso mismo al compilador. Esto sería,</div>
<div><br></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">discreteCharacter myDecodedCharacter( 4, vector<int>(4) );</span><br></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;"><br>
</span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][0] = 1;</span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][1] = 1;<br>
</span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][2] = 1;<br></span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][3] = 0;</span></div>
<div><br></div><div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[1][0] = 1;</span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[1][1] = 2;<br>
</span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[1][2] = 0;<br></span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[1][3] = 0;</span></div>
<div><br></div><div>y así sucesivamente.</div><div><br></div><div>Otra forma podría ser guardando todos los valores en una matriz (array de arrays) de enteros. Por ejemplo,</div><div><br></div><div>
const int aDatos[4][4] = { {1,1,1,0},</div><div>                                        {1,1,1,0},</div><div>                                        {<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">1,0,0,0},</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px;">
                                        {<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">1,1,1,0} };</span><br></div><div><font face="arial, sans-serif"><br>y luego, hacer la asignación explícitamente para 'myDecodedCharacter':<br>
<br></font><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][0] = </span>aDatos[0][0]<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">;</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][1] = </span>aDatos[0][<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">1];</span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][2] = </span>aDatos[0][2]<span style="font-size:12.727272033691406px;font-family:arial,sans-serif;">;</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][3] = </span>aDatos[0][3]<span style="font-size:12.727272033691406px;font-family:arial,sans-serif;">;</span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">...</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">También podríamos usar un bucle para automatizar hacer la copia. </span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">De todas maneras, me parece contraproducente hacer esto: si ya sabes que necesitas una matriz o tabla de 4x4 enteros, entonces deberías hacer eso mismo.</span></div>
<div><br></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">Ahora bien, si quieres que se vea los datos presentados debidamente, entonces escríbelos en comentarios. Por ejemplo,</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">//  </span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">( 1,1,1,0 )</span></div>
<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">//  ( 1,2,0,0 )</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px;"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">//  ( 1,0,0,0 )</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px;">
<span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">//  ( 1,1,1,0 )</span><font face="arial, sans-serif"><br></font></div><div><br></div><div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">discreteCharacter myDecodedCharacter( 4, vector<int>(4) );</span><br>
</div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][0] = 1;</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][1] = 1;<br></span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][2] = 1;<br>
</span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">myDecodedCharacter[0][3] = 0;</span></div></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">...</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">Así se ve bien lo que uno quiere hacer y de lo que trata las siguiente sentencias.</span></div>
<div><br></div></div><blockquote class="ecxgmail_quote" style="border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex;"><div><div dir="ltr">Es un poco complicado para mí usar el vector de forma recursiva, así que cualquier ayuda/sugerencia es bienvenida.<br>
<br></div></div></blockquote><div><br></div><div>No se trata de un 'vector' recursivo. Ten presente que 'vector' es una clase-plantilla. Es cierto que aparece el nombre 'vector' dos veces, pero se trata de clases MUY diferentes. Es decir, existe la clase 'vector<int>' y luego la otra clase 'vector< vector<int> >'. Si lo prefieres, míralas así:<br>
<br>typedef vector<int> fila;</div><div>typedef vector<fila> matriz;<br></div><div>...</div><div>matriz resultado( <span style="font-family:arial,sans-serif;font-size:12.727272033691406px;">4, vector<int>(4) );</span></div>
<div><br></div><div><br></div><div>Espero que esto te aclare las dudas.</div><div><br></div><div>Steven</div><div><br></div></div></div></div>
<br>_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ</div>                                         </div></body>
</html>