• C

print index of a number in an array

I'm going back to school in Jan and trying to brush up my skills the problem is find the maxium value in an array and print its corresponing index for the life of me I can't remember how this is what i have so far
#include <stdio.h>

int max_array(int a[], int num_elements);
void print_array(int a[], int num_elements);

void main(void)
{
   int a[10] = {1, 2, 0, 0, 4, 5, 6, 9, 9, 17};
   int max;

   printf("\nArray:\n");
   print_array(a, 10);

   max = max_array(a, 10);
   printf("The max is %d\n", max);
   sleep(10);
}

int max_array(int a[], int num_elements)
{
   int i, max=-32000;
   for (i=0; i<num_elements; i++)
   {
       if (a[i]>max)
       {
          max=a[i];
       }
   }
   return(max);
   
   
}

void print_array(int a[], int num_elements)
{
   int i;
   for(i=0; i<num_elements; i++)
   {
       printf("%d ", a[i]);
   }
   printf("\n");
   
}
Serena2345Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

akshayxxCommented:
what do u need?
if u need the index of the max number, then in the max_array function keep another variable for the index of the max value..and when u done browsing the array, instead of returning the max number return the index only.. and then in the main function u can print the index and appropriate number from the array..
0
ExceterCommented:
Try this,

int max_array( int a[], int num_elements )
{
    int i, max = 0;

    for( i = 1; i < num_elements; ++i )
    {
        if( a[i] > a[max] )
            max = i;
    }
    return max;  
}

Cheers!
Exceter
0
guitardude101Commented:
if you want your funtion to work with negative as well as positive numbers init max to the first subscript.

Exceter:
Your loop should be
 for( i = 0; i < num_elements; ++i )

since mine inits to the first subscript I can start the loop at 1.


int max_array( int a[], int num_elements )
{
    int i, max = a[0];
    for( i = 1; i < num_elements; ++i )
    {
        if( a[i] > a[max] )
            max = i;
    }
    return max;  
}


0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Choose an Exciting Career in Cybersecurity

Help prevent cyber-threats and provide solutions to safeguard our global digital economy. Earn your MS in Cybersecurity. WGU’s MSCSIA degree program was designed in collaboration with national intelligence organizations and IT industry leaders.

Serena2345Author Commented:
will this also print out the index number?
0
guitardude101Commented:
I just re read this and found a problem the function to return the max value should be

int max_array( int a[], int num_elements )
{
    int i, max = a[0];
    for( i = 1; i < num_elements; ++i )
    {
        if( a[i] > max )
            max = i;
    }
    return max;  
}


the function to return the index of max value should be

int max_array_index( int a[], int num_elements )
{
    int i, max = a[0],  maxindex = 0;
    for( i = 1; i < num_elements; ++i )
    {
        if( a[i] > max )
        {
            max = a[i]
            maxindex = i;
        }
    }
    return maxindex;  
}



0
Serena2345Author Commented:
you're the best!! thanks
0
ExceterCommented:
>> Exceter:
>> Your loop should be
>> for( i = 0; i < num_elements; ++i )

No it shouldn't be...

>> if you want your funtion to work with negative as well as positive numbers init max to the first subscript.

Did you even read the read the code I posted!? If you had tried to run my code you would have seen that is DOES, in actuality, work with negative numbers. For example,

int a[] = { -45, -327, -8, -23  };
printf("%i\n", max_array( a, 4 ));

-- output --
2

The function I posted stores the subscript of the value in max NOT the value itself... The asker wanted the index the value is found at NOT the value itself. Why the devil would you store the value in max? That makes no sense as you'd have to declare another variable, which is completely unnecessary.

>> if( a[i] > a[max] )

You can plainly see that I used max as a subscript NOT the value itself. I started the loop at 1 because I already set max to subscript 0. Therefore, if there is only one element in the array, I simply return subscript 0 as containing the highest value in the array. If not, the loop will then compare subscript i, which is intialized to 1, to subscript max, which initialized to 0. If it is greater than the value found at offset max then max is replaced with the counter value, which is 1. The process is then repeated until all elements have been processed and subscript max is returned.

In the future, please grant your fellow experts the courtesy of reading their comments before you attempt to critique them.
Exceter
0
Serena2345Author Commented:
I used it as a subscipt and I got the right answer I didn't try the other way yet
0
Serena2345Author Commented:
okay I ran both of them and the one that ends with maxindex =i gave the intended restult. The other one worked as long as the largest number in the array was in the last postion when I switched them around it still gave me 4 no matted what the value was. I want to thank everyone for their help.
0
ExceterCommented:
>> The other one worked as long as the largest number in the array was in the last postion when I switched them around it
>> still gave me 4 no matted what the value was.

To which function are you refering?
0
Serena2345Author Commented:
max_array_index
0
ExceterCommented:
>> max = a[i]

This is the only blatantly obvious error I found, it's just a typo, no big deal. It should have been,

max = a[i];

What data are you using as input? All issues of style aside, that function should be giving the correct value. Have you tried the function I posted?

Exceter
0
Serena2345Author Commented:
not yet I'll try it later tonight
0
Mayank SAssociate Director - Product EngineeringCommented:
Sorry friends, this is slightly out of the question, but Akshay ol' buddy, pls post your views on:

http://www.experts-exchange.com/Programming/Q_20816080.html
0
Mayank SAssociate Director - Product EngineeringCommented:
(others are requested too).
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.