Uso de funciones, número mayor

Hola, estoy aprendiendo a integrar funciones en mis códigos de arduino y estaba intentando implementarlas en un código que tenía para prácticarlo. El ejercicio consistía en hacer un Array de 100 números aleatorios y luego buscar y devolver el mayor valor que contiene el array. Esto es lo que he intentado hasta ahora, que el bucle for que busca el valor mayor sea una función pero me da error todo el tiempo; después tampoco se me ocurre como hacer una función que sea la que genere los numeros aleatorios.

//Variables
int miArray[100];
int numeroMayor;

int buscaMayor (numeroMayor)
{
  for(int x=0; x<100; x++)
  { 
    y = miArray[x];
    if(y > numeroMayor){ 
      numeroMayor = y;
    }
}
  
  
void setup()
{
  Serial.begin(9600);
  
}

void loop()
{
  Serial.println("Numeros aleatorios: ");
  
  for (int i = 0; i < 100 ; i++)// En este bucle introducimos un nº aleatorio en cada posición del array
  {
    int n=random(1000);
    Serial.println(n);
    miArray[i]=n;
  } 
  

  numeroMayor = miArray[0];
  buscaMayor(numeroMayor);
  
  /*
  for(int x=0; x<100; x++){ 
    int y = miArray[x];
    if(y > numeroMayor){ 
      numeroMayor = y;
    }
  }*/
  
  Serial.println("El numero mayor es: ");
  Serial.println(numeroMayor);
  
  delay(1000);           
  exit(0);

}

Prueba este código.

#include <Arduino.h>

//Variables
int miArray[100];
int numeroMayor = 0;

int buscaMayor () {
  int y, mayor = 0;
  for (int x=0; x<100; x++)  {
      y = miArray[x];
      if (y > mayor) {
          mayor = y;
      }
  }
  return mayor;
}
 
void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Numeros aleatorios: ");
 
  for (int i = 0; i < 100 ; i++) { // En este bucle introducimos un nº aleatorio en cada posición del array
      int n=random(1000);
      Serial.println(n);
      miArray[i] = n;
  }
 

  numeroMayor = buscaMayor();
 
  Serial.println("El numero mayor es: ");
  Serial.println(numeroMayor);
 
  delay(1000);           
  exit(0);

}

Tu primer error es que defines una función. Cuando pones

int buscaMayor () {

eso requiere que en algun momento o al final mas precisamente termines con una respuesta del tipo

return ValorMayor;

Como no estaba, te da error.
Si no quieres eso y usas globales debes definir la rutina como del tipo void buscaMayor()

Otra cosa, cuando buscas un mayor no hace falta definir el primer valor del arreglo porque con ponerle 0 a tu variable de comparación basta, pero es ya una cuestión de gustos. Cierto es que tu asignación del primer valor ahorra un paso a mi idea de ponerle 0.

Por lo demas mira y seguramente comprenderás lo que he hecho.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.