modificacion de codigo en C

Iniciado por DAOST420, 12 Noviembre 2020, 17:15 PM

0 Miembros y 1 Visitante están viendo este tema.

DAOST420

Hola gente tengo estos 2 vectores en donde en el primer vector se indica el numero mayor y en el segundo vector se indica en que posicion esta el mayor, recien probando mi codigo nose porque no funciona lo que seria indicar la posicion del mayor en el segundo vector ademas tengo que agregar que en el caso de que haya 2 numeros iguales en cada vector se deba indicar cuales son.

#include <stdio.h>

int main(void){
  int vecA[5];
  int vecB[5];

  int BuscaMayor(int []);
  void EncuentraMayor(int [], int mayor);

  int f;
 
  for (f=1;f<=5;f++){
   printf("Ingrese el elemento %d ",f); scanf("%d",&vecA[f]);
  }

 printf("\n");

  for (f=1;f<=5;f++){
   printf("Ingrese el elemento %d ",f); scanf("%d",&vecB[f]);
  }

 int mayor = BuscaMayor(vecA);

 EncuentraMayor(vecB, mayor);

}


int BuscaMayor(int vec[]){

 int f;
 int mayor;

 mayor = vec[0];

 for (f=0;f<=4;f++) {

   if(vec[f] > mayor){
     mayor = vec[f];
   }  

 }

 printf("El mayor es %d en el vector 1 ", mayor);

 return mayor;

}

void EncuentraMayor(int vec[], int mayor)
{

 int f;
 int cont;

 cont=0;

 for (f=0;f<=4;f++)
 {

   if(vec[f] == mayor)
{
     cont++;
   }  

 }

 printf(        " Se econtro el mayor en la posicion %d del segundo vector ", cont);

}




MOD: Seleccionado lenguaje C en las etiquetas de Código GeSHi

K-YreX

Entiendo que lo que quieres hacer es encontrar el valor del elemento más grande del primer array y la posición del elemento más grande del segundo array, no?

Tienes algunos problemas que son los siguientes:
  • Empiezas a rellenar el array en la posición 1 y acabas en la 5 (incluida). Los arrays tienen longitud 5 y como en C/C++, el primer índice es el 0, deberías recorrer desde 0 hasta 4 (incluido). {0,1,2,3,4} -> 5 posiciones. La posición 5 queda fuera del array.
  • En la función EncuentraMayor() no buscas los índices en los que se encuentre el elemento más grande sino cuántas veces aparece el elemento más grande. Esto es porque incrementas la variable cont cada vez que lo encuentras.

    Además como consejo te recomiendo utilizar constantes para los tamaños y cuando trabajes con arrays como parámetros, pasa como parámetro también la longitud de este, así haces las funciones más genéricas y las puedes reutilizar más veces:

    #include <stdio.h>

    const int MAX_SIZE = 5;

    int main(){
      int v1[MAX_SIZE], v2[MAX_SIZE];
      // Guardar los valores en los arrays. Recuerda: desde el 0 hasta el MAX_SIZE-1.
      for(int i = 0; i < MAX_SIZE; ++i){
        printf("Introduce el valor %d: ", i+1);
        scanf("%d", &v1[i]);
      }
      //...
      int valorMaximo = buscarMayor(v1, MAX_SIZE);
      mostrarIndices(v2, valorMaximo);
    }


    Como ves, la función buscarMayor() es igual solo que recibes la longitud como argumento. Su definición deberá ser:
    int buscarMayor(int v[], int size);

    En el caso de la segunda función, como puede ser que más de un elemento tenga el valor buscado, no podemos devolver el índice como un <int>. Se puede hacer devolviendo un array o modificando un array pasado como argumento pero como supongo que estás empezando, también puedes mostrarlo directamente en la función.
    void mostrarIndices(int v[], int valorBuscado);
    En esta función lo que tienes que hacer es cada vez que un elemento del array sea igual a <valorBuscado> muestras un mensaje con el índice que tiene tu iterador del bucle en ese momento.

    Inténtalo y si tienes algún problema coméntalo. :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;