<div dir="ltr">Hola Colegio,<div class="gmail_extra"><br></div><div class="gmail_extra">En primer lugar, un fichero de cabecera no es técnicamente una biblioteca, aunque se exceptúa aquellas bibliotecas basadas en plantillas de C++. Sugiero que crees dos ficheros: "funciones.h" y "funciones.cpp". El fichero de cabecera debería contener sólo las declaraciones (esto es, prototipos), mientras que el fichero fuente contendrá las creaciones e implementaciones de tales funciones. Así, puedes usar el fichero de cabecera en otros ficheros fuente, sin duplicar las definiciones de las funciones. Recuerda que C/C++ no permite las redefiniciones.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Para Linux, no debería haber ningún problema, ya que todo lo que tienes está escrito en código fuente y usas el estándar.<br><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">De todos modos, tienes algunos errores en varias funciones; esto es,</div><div class="gmail_extra"><br>- La fórmula que usas en 'comb()' es incorrecta; escribes,<br><br></div><div class="gmail_extra"><div class="gmail_extra">int comb(int m, int n){</div><div class="gmail_extra">    return factor(m)/factor(n)*(m-n);</div><div class="gmail_extra">}</div><div class="gmail_extra"><br></div><div class="gmail_extra">La fórmula de combinaciones es:<br><br>      m!<br>-------------<br>n! * (m-n)!</div><div class="gmail_extra"><br></div><div class="gmail_extra">Por lo tanto, debería ser,</div><div class="gmail_extra"><br><div class="gmail_extra">int comb( int m, int n )<br>{</div><div class="gmail_extra">  return factor(m) / (factor(n) * factor(m-n));</div><div class="gmail_extra">}</div><div><br></div></div><div class="gmail_extra">Aconsejo definir 'comb()' de otra manera, porque es posible que algunas combinaciones no se pueden calcular, por salirse del intervalo válido de enteros al calcular cada factorial. La fórmula sería:<br><br> m * (m-1) * ... * (m-n+1)<br>---------------------------------<br>    n * (n-1) * ... * 2 * 1</div><div class="gmail_extra"><br>Claro está, recomiendo usar 'float' o incluso 'double' para la mayoría de estas funciones, porque puede haber desbordamiento al usar enteros.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br>- Para el mínimo y máximo, usas valores iniciales para 'max' que no son correctos, al menos que el array que aceptas siempre va a contener enteros no negativos.<br><br>Aconsejo usar las constantes, 'INT_MIN' e 'INT_MAX', definidas en <climits>. Puedes consultar la referencia en nuestra página yendo a:  <a href="http://c.conclase.net/librerias/index.php?ansilib=limits#inicio">http://c.conclase.net/librerias/index.php?ansilib=limits#inicio</a><br><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">- Usas arrays de cantidad variable (VLA, en inglés). Escribes,<br><br><div class="gmail_extra">int fibo( int a )<br>{</div><div class="gmail_extra">  int n[a];</div>  ...</div><div class="gmail_extra">}<br><br>Esto no es estándar, por ahora; es posible que C++17 incluya esta prestación en el lenguaje, pero no está asegurada. Si quieres memoria dinámica, entonces adjudícala explícitamente.</div><div class="gmail_extra"><br></div><div class="gmail_extra">De todas maneras, el algoritmo que usas realmente no necesita guardar todos los resultados. Sólo necesitas tres variables: la suma, y las dos sumas anteriores. Por ejemplo,<br><div class="gmail_extra"><br>int nAnt2 = 0;</div><div class="gmail_extra">int nAnt1 = 1;<br>...<br>int nResultado = 1;<br></div><div class="gmail_extra">for( int i=2; i<=a; i++ )<br>{</div><div class="gmail_extra">  int nActual = nAnt1 + nAnt2;<br><br>  nAnt2 = nAnt1;</div><div class="gmail_extra">  nAnt1 = nActual;<br>  nResultado += nActual;</div><div class="gmail_extra">}</div><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">- Como ya escribes en tu comentario, cuidado con crear memoria dinámicamente para que se tenga que liberar fuera de la función.<br><br>Aconsejo imponer que la función acepte un tercer parámetro que es el array que contendrá los valores resultantes. Por ejemplo,</div><div class="gmail_extra"><br></div><div class="gmail_extra">int* orden( int resultado[], int n[], int n2 )<br>{<br></div><div class="gmail_extra">  ...<br>  return resultado;<br>}<br><br>Así puedes "encadenar" las invocaciones de 'orden' con otra función que requiera el array.<br><br><br></div><div class="gmail_extra">Espero que esto te aclare las dudas.</div></div><div class="gmail_extra"><br></div><div class="gmail_extra">Steven</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-09-12 11:44 GMT-04:00 colegio4497 <span dir="ltr"><<a href="mailto:colegio4497@disroot.org" target="_blank">colegio4497@disroot.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u><div><div style="font-family:arial,sans-serif;font-size:13px"> <u></u>Simpre para escribir mi codigo de classe uso la libreria funciones.h Me gustaria saber como se hace para incorporar la libreria al systema linux. Os la pongo para que hagais con ella lo que querais. <u></u><br> </div></div>
</blockquote></div><br></div></div>