Indice del massimo di un array

di Anonimizzato23035 il
17 risposte
Buongiorno a tutti, ho un problema con il codice di un esercizio che mi chiede di indicare l'indice del massimo di un array, tuttavia attraverso il ciclo for se provo a stampare il valore massimo lo fa senza problemi, per quanto riguarda invece l'indice non riesco a far trovare quello giusto. Cosa sbaglio?

#include <stdlib.h>
#include <stdio.h>

int array_max_index(float array[], int size)
{

					int i,j,max=0,posizione;
					float temp;

					

					for(i=0;i<size;i++)
					{	

								if (array[i]>max)
								{
								
									max = array[i];
									posizione = i;
								}
								
					}	



					printf("%d\n",posizione);

		return max;
}

int main(int argc, char const *argv[])
{
	

	int i;
	float array1[]={6,346,647,1,3};
	int size1=5;

	array_max_index(array1,size1);


	return 0;
}

17 Risposte

  • Scusa ma usare un semplice sort?
  • Cioè? Purtroppo studio da pochissimo il C, non sono esperto del linguaggio
  • Perché non riesci ? Cosa succede ?

    (il sort non c'entra in questo caso ...)
  • Esiste la funzione sort che ti permette di ordinare in ordine crescente (o decrescente) gli elementi si un array. nel tu caso si imposta così:
    
    std::sort (array1, array1+5);
    cout<<array1 [4]; //se vuoi il valore max
    cout<<array1 [0]; // se vuoi il valore min
    
    prima dell'int main dovari però mettere
    #include <algorithm>
  • @spingar ... Il sort non c'entra nulla
  • oregon ha scritto:


    Perché non riesci ? Cosa succede ?

    (il sort non c'entra in questo caso ...)

    Il sort l'avevo visto in giro, ma avevo letto che seriva solo per ordinare un array.

    Succede che quando stampo la posizione prende quello del ciclo for, e cioè avendo inserito 5 valori nell'array mi stampa come posizione "4".
  • spingar ha scritto:


    Esiste la funzione sort che ti permette di ordinare in ordine crescente (o decrescente) gli elementi si un array. nel tu caso si imposta così:
    
    std::sort (array1, array1+5);
    cout<<array1 [4]; //se vuoi il valore max
    cout<<array1 [0]; // se vuoi il valore min
    
    prima dell'int main dovari però mettere
    #include <algorithm>

    Si ma io non devo ordinare un array, devo solo stamparne l'indice del valore massimo
  • Non capisco qual è il problema, così non te lo stampa?
  • Ah no ok ho capito cosa intendi
  • Fix96 ha scritto:



    Succede che quando stampo la posizione prende quello del ciclo for, e cioè avendo inserito 5 valori nell'array mi stampa come posizione "4".
    No, a me visualizza 2 (che è corretto)

    Ci sono delle imperfezioni nel codice ma non capisco il tuo problema.
  • Si pure a me funziona
  • oregon ha scritto:


    Fix96 ha scritto:



    Succede che quando stampo la posizione prende quello del ciclo for, e cioè avendo inserito 5 valori nell'array mi stampa come posizione "4".
    No, a me visualizza 2 (che è corretto)

    Ci sono delle imperfezioni nel codice ma non capisco il tuo problema.

    Non è corretto perchè se vedi il valore maggiore è nella posizione 3.

    I valori sono
    float array1[]={6,346,647,1,3}
    e quello maggiore è 647, che sta nella posizione 3, dunque dovrebbe stampare 3.
  • Nulla, ho capito adesso che il problema è che giustamente parte a contare da 0.

    Quali sono le imperfezioni nel codice?
  • In ogni caso non arriva a 4. E che comincia da 0 l'hai scritto tu nel tuo ciclo for, non dovevi "capirlo".

    Le imperfezioni riguardano il tipo di dato trattato. Se usi un array di float la funzione deve restituire un float e max deve essere un float non int.

    Ma "sei sicuro" che la funzione debba restituire il max ? Secondo il nome che hai scelto (e per il fatto che restituisce un int) la funzione deve restituire il valore di 'posizione' che devi poi visualizzare nel main e non nella funzione.
Devi accedere o registrarti per scrivere nel forum
17 risposte