# Thread: Hi, could someone help me with arrays?

1. ## Hi, could someone help me with arrays?

Hi. I am goodn. i hope to contribute helpfully to your board later, but right now I am the one in need of help. In my c class we are starting to go over Arrays. I really have no grasp of them, other than knowing

int = {4, 6, 7, 2, -1}

is an array of size 5 with values 4, 6, 7, 2, and negative 1. I don't understand their application into programming at all. The way I tend to learn things is by seeing an example, but my prof. doesn't supply any.

Anyway, an assignment I have is to make a tone of functions in a header file using arrays such as isum, dsum, iaverage, daverage, imin, imax, dmin, dmax, etc.

I think if I could get a push in the right direction I would easily be able to do this. If someone could be so kind as to show me how one would do

Code:
```isum
This function will take an integer array of numbers and the array size as its parameters.
It will return the sum of all the numbers in the array as an integer.```
then I think I could do the rest no problem. I've already done very similar functions without arrays, so if someone could give me a start, I'm sure I could do the rest with arrays. I'll post my progress back here. Thanks. 2. Think of an array as a container for objects of the same type. That's it. A word such as "Word" is simply an array of 4 characters. However, arrays of characters are always ended with the '\0' (always considered a single character), and so the above array would actually be 5 cells long.

Arrays of integers are useful too since you can easily move through them with loops.

An example of an averaging function would be one that adds up the total of each cell and then divides that by the number of cells. Hence,

int box = {5,9,10,62,77}; //<---An array of 5 integers

int i= 0;
int total = 0;
int avg = 0;

for( i=0; i< 5; i++)
{
total = total + box[i];
}

avg = total / 5;

Since arrays always start at "0"(not "1"), the adding stops after cell #4 is reached(so not cell# 5); If you accidentally access too many cells, your program will probably crash.

Anyway, that's one example. 3. > Think of an array as a container for objects of the same type.
> That's it. A word such as "Word" is simply an array of 4
> characters. However, arrays of characters are always ended
> with the '\0' (always considered a single character), and so the
> above array would actually be 5 cells long.

This is not always correct. Yes, you think of strings as being 'null
terminated', but it is not a requirement. It is if you are using most
of the 'str*' functions, but it isn't a requirement:
Code:
```char array { 'w', 'o', 'r', 'd' };   // This is legal.

strncpy( array, 4, "cows" ); // This is legal.

puts( array ); // This is bad in this case.```
Generally speaking, yes, you want all of your 'strings' to be null terminated.

A 'string' is an array of characters that is terminated by 1 character which has the value of zero. Thus:

char array = "word";

This will null terminate it for you becuase you're using a "string". By enclosing the characters in double quotation marks at the point of assignment, it adds the null terminator. In my example, since I assign each character seperately, it will not.

Quzah. 4. a hint on isum is that your function declaration would look like this:

int isum( int nNum[], int nQty ); 5. I knew all about what they meant, and about the 0 thing, and I also knew how to declare functions, but now I understand that about how about the box[i] thing. I see how I can increase the function.

so I could use

Code:
```int isum (int iarr[], int num)
{
int i, total;

for (i=0, total=0; i < num; i++)
{
total += iarr[i];
}
}```
As my isum function, would that be correct? 6. Right. That'd work. You can think of each element of an array like a drawer in a dresser. Or a row on a shelf. Something like that. Thus, when you want to access an individual element in the whole array, you're looking at 1 drawer in the dresser. Or one row on the bookshelf. So if you want to see what's on the third row, you do:

shelfContents = myShelf; //since you start at 0 and work up

Yeah, you've got the hang of it.

Quzah. 7. Code:
```int isum (int iarr[], int num)
{
int i, sum;

for (i=0, sum=0; i < num; i++) total += iarr[i];
return sum;
}

int dsum (double darr[], double num,)
{
double d, sum;

for (d=0, sum=0; d < num; d++) total += darr[d];
return sum;
}

int iaverage (int iarr[], int num)
{
int i, sum, avg;

for (i=0, sum=0, avg=0; i < num; i++) total += iarr[i];
avg = total/i;
return avg;
}

int daverage (double darr[], double num)
{
double d, sum, avg;

for (d=0, sum=0, avg=0; d < num; d++) total += darr[d];
avg = total/d;
}```
Ok, here are my other functions so far. I'm having a little problem with my imax, though.

Code:
```int imax (int darr[], int num)
{
int i, max;

for (max = -36667, i = 0; i < num; i++)
{
if (/*what would go here?*/ > max)
max = /*what would go there?*/;
}
return max;
}```
What would I put where my comments are?

Also, since I can't compile a header file, does anyone see any horrible errors with my other functions? 8. [code]int imax (int iarr[], int num)
{
int i, max;

for (max = -36667, i = 0; i < num; i++)
{
if (iarr[i] > max)
max = iarr[i];
}
return max;
}

duh, I don't know why I missed that. One thing I just noticed however is that I never defined num anywhere. I don't see how that could have happened, but how do I know num is the right number for i(or d) to be approaching? 9. One thing to consider about all of your function, is numeric overflow. Consider the following:

int array = { 1000000000, 1000000000, 10000000000 };

Now try and add all those together in an 'int'.

Code:
```nt isum (int iarr[], int num)
{
int i=0, sum=0;

for (; i < num; i++) total += iarr[i];
// or
// while( i < num ) total += iarr[i++];
return sum;
}```
For a max function, first off, your value is likely wrong. If you are compiling on a 32 bit compiler, then an integer's max is ~2 billion.

Anyway, this is the check you would use in your case, assuming 16bit integers:
Code:
```int imax (int darr[], int num)
{
// I am assuming that this function returns the
// integer in the array that is the highest?
int i, max;

for (max = -36667, i = 0; i < num; i++)
{
if( num[i] > max ) max = num[i];
}
return max;
// if you want to return the index of 'max', then
// you'll need an additional variable to store the
// value of 'i' at the time you find 'max'. Set this
// when you set max as I've shown above.
// { max = num[i]; maxIndex ] i; }
// then later, 'return maxIndex;'
}```
Quzah. 10. I also just noticed I was using int for my double functions, and I was using double variables in ones that should be integers.

for instance darray[d] where d is a double. Where in the world will a location in your array be 9.5? Heh, I changed those to integers(keeping the arrays as doubles, of course). 11. Originally posted by Unregistered

Code:
```int imax (int darr[], int num)
{
// I am assuming that this function returns the
// integer in the array that is the highest?
int i, max;

for (max = -36667, i = 0; i < num; i++)
{
if( num[i] > max ) max = num[i];
}
return max;
// if you want to return the index of 'max', then
// you'll need an additional variable to store the
// value of 'i' at the time you find 'max'. Set this
// when you set max as I've shown above.
// { max = num[i]; maxIndex ] i; }
// then later, 'return maxIndex;'
}```
Quzah.
I'm not quite sure what you mean, but are you forgetting that the initialazation of the for loop only happens once or something? I don't understand why I need another variable.

And where did num[i] come from? wouldn't you use iarr[i], the array you declared in the top? 12. No, I am aware that initialization happens once. What I'm saying is this:

Do you want to return the highest value, or the array index (ie: where the highest value is located at in the array)?

If you want to return the highest value, you can just return it like the function states. If you want to return the _INDEX_ of the value, then you need to keep tabs on that by using another value:
Code:
```int imax (int darr[], int num)
{
int i, max, index=-1;

for (max = -36667, i = 0; i < num; i++)
{
if( num[i] > max ) { max = num[i]; index = i; }
}

// this would return the index of the highest value
return i;

// this would return the actual highest number
return max;
}```
Thus:

int array = { 200, 14, 703, -25 };
int highestValue;
int highestValueIndex;

highestValueIndex = imax( array, 4 );
printf("The highest value is located at array[%d] and is %d",
highestValueIndex, array[highestValueIndex );

// assume we used the second return statement instead
highestValue = imax( array, 4 );
printf("The highest value is located at array[%d] and is %d",
//Ooops! We don't know where it's at!
, array[highestValueIndex );

See what I was getting at?

Quzah. 13. edit: that first return should be "return index", sorry. I really should find my password so I can sign in...

Quzah. 14. OH. I see now. Yeah, I definitely want to return the highest value, not the index. Thanks for the tip though, I have a function in my next assignment which DOES need the highest index. 15. Originally posted by goodn
[code]int imax (int iarr[], int num)
{
int i, max;

for (max = -36667, i = 0; i < num; i++)
{
if (iarr[i] > max)
max = iarr[i];
}
return max;
}

duh, I don't know why I missed that. One thing I just noticed however is that I never defined num anywhere. I don't see how that could have happened, but how do I know num is the right number for i(or d) to be approaching?
Yes, you declared num -- you declare it as a parameter to the function in the function definition.

So:

int imax(int iarr[], int num)

declares two variables -- one an array of ints named iarr, one an int named num. Whatever you pass in as your second parameter becomes num within this function.

So, if you called it like this:

imax(array,5);

num would be 5. If you called it like this:

imax(myArray,x); //x is an int

then num would have whatever value x had. Popular pages Recent additions 