Tema: tomarMayor
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/01/2014, 04:38
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 8 meses
Puntos: 10
Respuesta: tomarMayor

Hola:

El programa tiene bastantes fallos:

Por un lado estás intentando acceder a los índices del array así:
Código C++:
Ver original
  1. cin >>num[i];
Cuando i es un float.
Los índices del array son int. No se puede acceder a array[4.5], por ejemplo (en rigor sí se podría, pero sobrecargando el operador y en todo caso ya estamos hablando de otra cosa)

Otro fallo:
Código C++:
Ver original
  1. for(i=0;i<=num[10];i++)
Estas intentando que el bucle vaya desde float = 0 (error comentado arriba) a float = num[10]. No tiene sentido, querrás que el bucle vaya hasta el índice 10 (realmente 9, ya que un array de 10 elementos va de 0 a 9), pero no hasta el valor que haya en num[10];

Por otro lado, en la declaración de la función tienes:
Código C++:
Ver original
  1. float tomarMayor(float num[10]);
y en la implementación:
Código C++:
Ver original
  1. float *tomarMayor(float num){}
La función retorna un puntero a float*, pero tú retornas mayor, que es float (no float*)

Por otro lado, el propio algoritmo de la función no te va a funcionar correctamente, porque haces comparaciones 2 a 2, por lo que realmente sólo te va a retornar el mayor de los últimos dos números comparados. Suponiendo que el blucle estuviera bien, te compararía el valor del índice 8 y del índice 9 (valores 9 y 10 del array)
Además ten cuidado porque cuando haces:

Código C++:
Ver original
  1. for(w=0;w<=num;w++)
  2.     {
  3.         if(num[w]>=num[w-1])
  4. .......................

En la primera iteración te estás saliendo fuera del array, ya que si w=0, w-1=-1, o sea que estás intentando acceder a la posición -1 del array. Si te compilase, lo siguiente que tendrías probablemente fuera un error de segmentación.

Bueno, además, haces uso de variables globales que no tienen mucho sentido.
Con respecto a recorrer el array en la función, puedes definir el tamaño del mismo con una constante, así puedes usar esa constante para recorrer el bucle, y con sólo cambiar su valor te valdrá para cualquier tamaño de array:

Te pongo una propuesta sin los errores:
Código C++:
Ver original
  1. #include <iostream>
  2.     using namespace std;
  3.  
  4.     const int tam_array=10;
  5.     float tomarMayor(float M[tam_array]);
  6.  
  7.     int main() {
  8.         float A[tam_array];
  9.         int i=0;
  10.         for(i=0;i<tam_array;i++)
  11.         {
  12.             cout << "Introduzca un numero para introducir en el array:";
  13.             cin >>A[i];
  14.         }
  15.         cout<<tomarMayor(A);
  16.  
  17.         return 0;
  18.     }
  19.  
  20.     float tomarMayor(float M[tam_array])
  21.     {
  22.         float mayor=0;
  23.         for(int w=0;w<tam_array;w++)
  24.         {
  25.             if(M[w]>=mayor)
  26.             {
  27.                 mayor = M[w];
  28.             }
  29.         }
  30.         return mayor;
  31.     }