<html>
<head>
</head>
<body class='hmmessage'><div dir='ltr'>

<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style>
<div dir="ltr">Gracias a ambos. <br>Antonio:<br>Respecto a utilizar el array como parametro, había hecho eso hasta que, revisando el curso, vi que aún no sabía cómo hacer esto y que es distinto que con una sola variable. <br>Respecto al bucle y las variables globales, tienes razón, me percaté cuando leí el código de nuevo viendo tu repuesta.<br>Y respecto a la parte de los algoritmos y los diagramas, sí me fue útil, aunque eso no me causaba problema, puesto que ya sabía sobre dicho tema.<br>Gracias de nuevo.<br><br>Ambos: <br>Sigo sin tener claro por qué requiero repetir el tipo de parámetro al declarar la función, creí que bastaba con declararlo al principio del  programa: <br><br>...<br>char tipo_orden;<br><br>void Ordenar(tipo_orden);<br><br><br><br><div><div id="SkyDrivePlaceholder"></div><hr id="stopSpelling">Date: Wed, 9 Jan 2013 08:22:38 +0100<br>From: antonio.arjona.melches@gmail.com<br>To: cconclase@listas.conclase.net<br>Subject: Re: [C con Clase] Funciones<br><br>
  
    
  
  
    <div class="ecxmoz-cite-prefix">El 09/01/13 02:56, amauri d escribió:<br>
    </div>
    <blockquote cite="mid:BAY002-W682CA2E9EBF7A0B7B3378BBB2B0@phx.gbl">#include <iostream><br>
      using namespace std;<br>
      <br>
      int array_1[10],i,round;<br>
      char tipo_orden;<br>
       <br>
      //La siguiente función ordena la cadena<br>
      void Ordenar(tipo_orden)<br>
      {<br>
          int cambio=0;<br>
      <br>
          //Cuando el ordenamiento sea ascendente<br>
          if(tipo_orden=='a')<br>
          {<br>
              round=0;<br>
              do<br>
              {<br>
                  //Se revisan los elementos del array y se ordenan por
      pares<br>
                  for(i=1;array_1[i];i++)<br>
                  {<br>
                      if(array_1[i]<array_1[i-1]) {cambio=array_1[i];
      array_1[i]=array_1[i-1]; array_1[i-1]=cambio;}<br>
                  }<br>
          <br>
                  round++<br>
              }<br>
              while(array_1[round]); //El ciclo se repite mientras
      exista el elemento array_1[round], round es la pasada por el array<br>
          }<br>
      <br>
          //Cuando el ordenamiento sea descendente<br>
          else if(tipo_orden=='z')<br>
          {<br>
              round=0;<br>
              do<br>
              {<br>
                  //Se revisan los elementos del array y se ordenan por
      pares<br>
                  for(i=1;array_1[i];i++)<br>
                  {<br>
                      if(array_1[i]>array_1[i-1]) {cambio=array_1[i];
      array_1[i]=array_1[i-1]; array_1[i-1]=cambio;}<br>
                  }<br>
          <br>
                  round++;<br>
              }<br>
              while(array_1[round]); //El ciclo se repite mientras
      exista el elemento array_1[round], round es la pasada por el array<br>
          }<br>
      }<br>
    </blockquote>
    <br>
    Hola amauri:<br>
    <br>
    lo primero que veo son las variables, y te comento:<br>
    <br>
    es aconsejable que uses variables locales en vez de globales, esto
    seria dentro de la función.<br>
    <br>
    luego declaras la función directamente, esto no esta mal, pero si
    seria aconsejable que la primera función que se vea al leer tu
    codigo sea main(), esto simplemente ayuda a interpretar mejor el
    código, por parte de las personas, pero esto supone que le tienes
    que informar al compilador que las funciones que llames desde main()
    u otra función, para ello dispones de la posibilidad de crear
    prototipos, de la siguiente forma:<br>
    <br>
    // declaras un prototipo de las funciones que hagas<br>
    <br>
    void MiFuncion(char, int, bool); // esto seria un prototipo de una
    función con tres parámetros de entrada y sin retorno (void)<br>
    <br>
    // en el prototipo solo necesitas usar el tipo de parámetro (char,
    int, float ....), pero puedes añadir a modo de explicación el
    parámetro<br>
    // por poner un ejemplo el prototipo de una función que te diera la
    nota de fin de curso<br>
    // a partir de un array de notas parciales, y la confirmación de
    asistencia mínima:<br>
    <br>
    int NotasFinDeCurso( int NotasTrimestrales, bool AsistenciaMinima);<br>
    <br>
    int OtraFuncion(); // esto seria un prototipo de una función sin
    parámetros que retorna un entero (int)<br>
    <br>
    // declaración de main() después de los prototipos<br>
    int main()<br>
    {<br>
         // llamo a MiFuncion(), como antes hay un prototipo de esta
    función<br>
         // el compilador sabe que existe y la busca en el código
    restante<br>
    <br>
        MiFuncion(cadena[10], 5, true);<br>
    <br>
        return 0;<br>
    }<br>
    <br>
    // después de main() declaras tus funciones<br>
    <br>
    void MiFunción(char cadena[10], int numero, bool SIoNO) <br>
    {<br>
        // el código de la función<br>
        ...<br>
    }<br>
    <br>
    // otra función<br>
    int NotasFinDeCurso( int Notas, bool Asistencia)<br>
    {<br>
        ... // el codigo<br>
    }<br>
    <br>
    de esta forma es mucho mas fácil de leer por parte de las personas<br>
    <br>
    luego, en la declaración de la función solo especificas un parámetro
    para el sentido de ordenación: void Ordenar (tipo_orden)<br>
    tienes que especificar de que se trata, en tu caso seria: void
    Ordenar (char tipo_orden) // de hay el error que te da el compilador<br>
    <br>
    creo que usar un char para indicar una decision es complicarse la
    vida, yo usaria un bool para las 2 opciones: false para ordenar de
    mayor a menor y true de menor a mayor, o un int si las opciones son
    3 o mas.<br>
    <br>
    luego también necesitarías incluir un parámetro para los arrays, el
    motivo es que de momento en tu código creas globalmente una cadena
    numerica: int array_1[10]; y la manejas directamente desde la
    función:<br>
    <br>
        if ( array_1[i] < array_1[i-1] )<br>
    <br>
    esto te fuerza a no poder usar la función con otras cadenas, y la
    solución es pasar la cadena por medio de un parámetro, para
    explicarlo veamos unas llamadas a la función desde main:<br>
    <br>
    int main()<br>
    {<br>
        // declaro varios arrays para probar la función<br>
        int arrayNumerico[] = {1, 3, 5, 7, 9, 0, 8, 6, 4, 2}; // array
    de 10 dígitos<br>
        char arrayAlfanumerico[] = {'a', '0', 'c', '9', 'b', 'h', '3',
    '5', '2', '1'}; // array de 10 caracteres<br>
    <br>
        // llamo a mi función con el primer array de mayor a menor<br>
        Ordenar(arrayNumerico, false);<br>
        cout << arrayNumerico << endl; // imprimo el array
    para ver el resultado<br>
    <br>
        // llamo a mi función con el primer array de menor a mayor<br>
        Ordenar(arrayNumerico, true);<br>
        cout << arrayNumerico << endl;<br>
    <br>
        // llamo a mi función con el segundo array de mayor a menor<br>
        Ordenar(arrayAlfanumerico, false);<br>
        cout << arrayAlfanumerico << endl;<br>
    <br>
        // llamo a mi función con el segundo array de menor a mayor<br>
        Ordenar(arrayAlfanumerico, true);<br>
        cout << arrayAlfanumerico << endl;<br>
    } <br>
    <br>
    como se puede observar para que sea útil se debe poder indicar que
    array quieres ordenar, además del sentido de ordenación...<br>
    <br>
    luego tienes cosas que arreglar en el código como los bucles, pero
    de momento ya es mucho lo que te he dicho, así que animo, sigue
    intentándolo y si ves que no te sale simplifica, y hazlo por partes,
    por ejemplo, primero ordenando directamente una cadena, cuando veas
    que el código funciona, y como funciona, intenta separarlo en la
    función, y posteriormente añadir la opción de cambiar el orden de
    ordenación, lo importante es entender cada parte de código que
    escribas y saber bien lo que hace, para ello ayuda mucho hacer
    diagramas de flujo, no te asustes por el nombre tan solo son unos
    esquemas gráficos,  te dejo un enlace al respecto:<br>
    <br>
    <a href="http://www.nachocabanes.com/c/curso/cc03.php" target="_blank">
      
    </a><a href="http://www.slideshare.net/bleoav100/algoritmos-y-diagramas-de-f-lujo" target="_blank">http://www.slideshare.net/bleoav100/algoritmos-y-diagramas-de-f-lujo</a><br>
    <br>
    espero que algo de esto te sirva de ayuda.<br>
  

<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>
                                          </div></body>
</html>