Le code suivant imprime la valeur maximale et minimale. Comment puis-je imprimer l'index de ces valeurs plutôt que les valeurs elles-mêmes?

#include <stdio.h>

int main()
{
    int arr1[100];
    int i, mx, mn, n;   

       printf("Input the number of elements to be stored in the array :");
       scanf("%d",&n);

       printf("Input %d elements in the array :\n",n);
       for(i=0;i<n;i++)
            {
          printf("element - %d : ",i);
          scanf("%d",&arr1[i]);
        }


    mx = arr1[0];
    mn = arr1[0];

    for(i=1; i<n; i++)
    {
        if(arr1[i]>mx)
        {
            mx = arr1[i];
        }


        if(arr1[i]<mn)
        {
            mn = arr1[i];
        }
    }
    printf("Maximum element is : %d\n", mx);
    printf("Minimum element is : %d\n\n", mn);

    return 0;
}
0
Mehzabin 1 juin 2020 à 18:02

3 réponses

Meilleure réponse

Enregistrez simplement l'index lorsque vous mettez à jour mx respectivement mn:

int max_index = 0;
int min_index = 0;

// ...

    if(arr1[i]>mx)
    {
        mx = arr1[i];
        max_index = i;
    }


    if(arr1[i]<mn)
    {
        mn = arr1[i];
        min_index = i;
    }
3
marco-a 1 juin 2020 à 15:05

Comme alternative à la réponse précédente, vous pouvez utiliser des pointeurs et l'arithmétique des pointeurs:

#include <stdio.h>

int main()
{
    int arr1[100];
    int i, n;
    int *mn, *mx;

    printf("Input the number of elements to be stored in the array :");
    scanf("%d", &n);

    printf("Input %d elements in the array :\n",n);
    for(i = 0; i < n; i++)
    {
        printf("element - %d : ", i);
        scanf("%d", &arr1[i]);
    }

    mx = &arr1[0];
    mn = &arr1[0];

    for(i = 1; i < n; i++)
    {
        if(arr1[i] > *mx)
            mx = &arr1[i];

        if(arr1[i] < *mn)
            mn = &arr1[i];
    }

    printf("Maximum element is : %d (%d)\n", *mx, mx - arr1);
    printf("Minimum element is : %d (%d)\n\n", *mn, mn - arr1);

    return 0;
}

Exemple:

$ gcc main.c -o main.exe; ./main.exe;
Input the number of elements to be stored in the array :5
Input 5 elements in the array :
element - 0 : 3
element - 1 : 2
element - 2 : 1
element - 3 : 5
element - 4 : 4
Maximum element is : 5 (3)
Minimum element is : 1 (2)
2
Fiddling Bits 1 juin 2020 à 17:04

Il n'est pas difficile de changer votre code que de suivre les indices des éléments minimum et maximum.

Il suffit de stocker dans les variables mx et mn les indices des éléments minimum et maximum correspondants au lieu de leurs valeurs comme par exemple.

mx = 0;
mn = 0;

for ( i = 1; i < n; i++ )
{
    if ( arr1[i] > arr1[mx] )
    {
        mx = i;
    }
    else if ( arr1[i] < mn )
    {
        mn = i;
    }
}

Mais je tiens à souligner que essayez toujours d'écrire un code plus général.

Vous pouvez écrire une fonction distincte qui renvoie une paire d'indices d'éléments maximum et minimum.

Vous voilà.

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

struct Pair { size_t min; size_t max; } 
minmax_element( const int a[], size_t n )
{
    struct Pair minmax = { .min = 0, .max = 0 };

    for ( size_t i = 1; i < n; i++ )
    {
        if ( a[i] < a[minmax.min] )
        {
            minmax.min = i;
        }
        else if ( a[minmax.max] < a[i] )
        {
            minmax.max = i;
        }
    }

    return minmax;
}

int main(void) 
{
    size_t n = 1;

    printf( "Input the number of elements to be stored in the array: " );
    scanf( "%zu", &n );

    int a[n];

    srand( ( unsigned int )time( NULL ) );

    for ( size_t i = 0; i < n; i++ )
    {
        a[i] = rand() % ( int )n;
    }

    for ( size_t i = 0; i < n; i++ )
    {
        printf( "%d ", a[i] );
    }
    putchar( '\n' );

    struct Pair minmax = minmax_element( a, n );

    printf( "The minimum value is %d at position %zu\n", a[minmax.min], minmax.min );
    printf( "The maximum value is %d at position %zu\n", a[minmax.max], minmax.max );

    return 0;
}

La sortie du programme peut par exemple ressembler à

Input the number of elements to be stored in the array: 10
7 1 7 3 1 7 8 5 0 3 
The minimum value is 0 at position 8
The maximum value is 8 at position 6

Alternativement, la fonction peut être définie avec deux paramètres supplémentaires: pointeur vers l'index de l'élément minimum et pointeur vers l'indice de l'élément maximum.

Vous voilà.

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

void minmax_element( const int a[], size_t n, size_t *min, size_t *max )
{
    *min = 0;
    *max = 0;

    for ( size_t i = 1; i < n; i++ )
    {
        if ( a[i] < a[*min] )
        {
            *min = i;
        }
        else if ( a[*max] < a[i] )
        {
            *max = i;
        }
    }
}

int main(void) 
{
    size_t n = 1;

    printf( "Input the number of elements to be stored in the array: " );
    scanf( "%zu", &n );

    int a[n];

    srand( ( unsigned int )time( NULL ) );

    for ( size_t i = 0; i < n; i++ )
    {
        a[i] = rand() % ( int )n;
    }

    for ( size_t i = 0; i < n; i++ )
    {
        printf( "%d ", a[i] );
    }
    putchar( '\n' );

    size_t min, max;

    minmax_element( a, n, &min, &max );

    printf( "The minimum value is %d at position %zu\n", a[min], min );
    printf( "The maximum value is %d at position %zu\n", a[max], max );

    return 0;
}

La sortie du programme pourrait ressembler à

Input the number of elements to be stored in the array: 10
2 0 4 2 4 3 0 9 1 0 
The minimum value is 0 at position 1
The maximum value is 9 at position 7
1
Vlad from Moscow 1 juin 2020 à 19:53