max value in an array

M

Mike Wahler

fdunne2 said:
Hi,

Is there a function in C that returns the max value in an array?

No there is not, but it should be trivial to write one.

I need a function that returns the max value and the corresponding array
index.

Just create a temp variable, set it to the value of element zero,
traverse the array, setting the temp to each value if it's greater.
Track the index the same way, with a temp variable.
Also, when reading float values from a binary file how do you know when
you've reached the end of the file?

It doesn't matter how you're interpreting the data, in any case,
most of the i/o functions return EOF upon an a attempt to read past
end of file.

-Mike
 
F

fdunne2

Hi,

Is there a function in C that returns the max value in an array? I need a function that returns the max value and the corresponding array index.

Also, when reading float values from a binary file how do you know when you've reached the end of the file?

Regards,
Fergal.
 
T

Thomas Matthews

fdunne2 said:
Hi,

Is there a function in C that returns the max value in an array? I need a function that returns the max value and the corresponding array index.

No, but it is trivial to write one.

int max_value(VALUE_TYPE * p_array,
unsigned int values_in_array,
VALUE_TYPE * p_max_value)
{
int position;

position = 0;
*p_max_value = p_array[position];
for (position = 1; position < values_in_array; ++position)
{
if (p_array[position] > *p_max_value)
{
*p_max_value = p_array[position];
break;
}
}
return position;
}

Since you didn't specify the type of the array,
I used VALUE_TYPE. If the array is of float,
then VALUE_TYPE will be float.

This could be simplified by returning the position or
index of the maximum value. The maximum value can then
be retreived from the array using the position:
maximum_value = array[position];

Besure to check the C FAQ section about arrays:
http://www.eskimo.com/~scs/c-faq/s6.html

Also, when reading float values from a binary file how do you know when you've reached the end of the file?

Regards,
Fergal.

As far as detecting end of file, check the C language FAQ:
http://www.eskimo.com/~scs/c-faq/s12.html

A very good idea is to always check the FAQ first, and
search the newsgroups before posting.

--
Thomas Matthews

C++ newsgroup welcome message:
http://www.slack.net/~shiva/welcome.txt
C++ Faq: http://www.parashift.com/c++-faq-lite
C Faq: http://www.eskimo.com/~scs/c-faq/top.html
alt.comp.lang.learn.c-c++ faq:
http://www.raos.demon.uk/acllc-c++/faq.html
Other sites:
http://www.josuttis.com -- C++ STL Library book
 
K

Kurt Watzka

Mike said:
news:7d7d547488009092e5dde0c90badeb7a@localhost.talkaboutprogramming.com...

No there is not, but it should be trivial to write one.


index.

Just create a temp variable, set it to the value of element zero,
traverse the array, setting the temp to each value if it's greater.
Track the index the same way, with a temp variable.

This will probably not find the maximum value of { -7, -3, -1, -10 }.
Better start with the value of the first element.
you've reached the end of the file?

It doesn't matter how you're interpreting the data, in any case,
most of the i/o functions return EOF upon an a attempt to read past
end of file.

OBC: Or in case of an I/O error. After fread(), fscanf(), fgetc() or
similar functions return EOF, feof() and ferror() are handy tools
to determine the reason for the failure to read another item/token/byte.

Kurt Watzka
 
J

Jeremy Yallop

Thomas said:
No, but it is trivial to write one.

Perhaps not /that/ trivial :).
int max_value(VALUE_TYPE * p_array,
unsigned int values_in_array,
VALUE_TYPE * p_max_value)
{
int position;

position = 0;
*p_max_value = p_array[position];
for (position = 1; position < values_in_array; ++position)
{
if (p_array[position] > *p_max_value)
{
*p_max_value = p_array[position];
break;
}
}
return position;
}

This function returns the position of the first value in the array
that's greater than the first value in the array. Here's a version
that returns a pointer to the maximum element:

T *maxelem(const T *array, size_t size) {
const T *pos = array, *end = array + size;
for (; array != end; array++) {
if (*array > *pos) {
pos = array;
}
}
return (T *)pos;
}

Jeremy.
 
J

Joe Wright

fdunne2 said:
Hi,

Is there a function in C that returns the max value in an array? I need a function that returns the max value and the corresponding array index.
#include <stdio.h>
int main(void) {
int iarr[] = { -7, -3, -1, -10 };
int siz = sizeof iarr / sizeof iarr[0];
int m, i, x = 0;
m = iarr[0];
for (i = 1; i < siz; ++i)
if (iarr > m) {
m = iarr;
x = i;
}
printf("The greatest of %d values is %d at index %d\n", siz, m, x);
return 0;
}
Also, when reading float values from a binary file how do you know when you've reached the end of the file?

Assuming you are reading them one at a time, your fread() will return 0
instead of 1.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top