PDA

View Full Version : Could someone look over my code please?

Sirena400
Mar 14, 2005, 11:43 AM
I thought at first that my code was okay but then when I actually tried running it I got an illegal vector index: 6 max index = 5 as a message. :confused: I've tried fixing it but I can't seem to find the problem. Can any of you guys figure out where I went wrong? Here's the code, and please excuse the poor programming, I'm not very good ^^;

#include <iostream.h>
#include <math.h>
#include "apvector.h"
apvector<double>scores(6);
apvector<double>darts(6);
int main()
{
double distance=0;
double location=0;
double total=0;
double final=0;
double q=0;
double p=0;

for (int x=0;x<scores.length();x++)
{
cin>>scores[x];
}
for (int y=0;y<darts.length();y++)
{
cin>>darts[x];

}
for (x=0;x<scores.length();x+=2)
{
if (scores[x]>0 && scores[x+1]>0)
q=4;
else if (scores[x]<0 && scores[x+1]>0)
q=3;
else if (scores[x]<0 && scores[x+1]<0)
q=2;
else (scores[x]>0 && scores[x+1]<0);
q=1;
}
for (y=0;y<darts.length();y+=2)
{
if (darts[y]>0 && darts[y+1]>0)
p=4;
else if (darts[y]<0 && darts[y+1]>0)
p=3;
else if (darts[y]<0 && scores[y+1]<0)
p=2;
else (darts[y]>0 && darts[y+1]<0);
p=1;
}
distance=sqrt((scores[x]*scores[x])+(scores[x+1]*scores[x+1]));
location=sqrt((darts[y]*darts[y])+(darts[y+1]*darts[y+1]));

if (distance<=7)
{
total=total+10;
}
else if (distance<=15 && distance>7)
{
total=total+7;
}
else if (distance<=55 && distance>15)
{
total=total+q;
}
else if (distance<=59 && distance>55)
{
total=total+(q*3);
}
else if (distance<=85 && distance>59)
{
total=total+q;
}
else if (distance<=89 && distance>85)
{
total=total+(q*2);
}
else (distance>89);
{
total=total+0;
}

if (location<=7)
{
final=final+10;
}
else if (location<=15 && location>7)
{
final=final+7;
}
else if (location<=55 && distance>15)
{
final=final+p;
}
else if (location<=59 && distance>55)
{
final=final+(p*3);
}
else if (location<=85 && location>59)
{
final=final+q;
}
else if (location<=89 && location>85)
{
final=final+(q*2);
}
else (location>89);
{
final=final+0;
}

if (total>final)
{
cout<<"First player wins, "<<total<<"-"<<final<<".";
}

if (final>total)
{
cout<<"Second player wins, "<<final<<"-"<<total<<".";
}

if (final=total)
{
cout<<"Tie game. "<<final<<"-"<<total<<".";
}

return 0;
}

SilentPanda
Mar 14, 2005, 11:52 AM
Edit: This isn't the issue but I'll leave it here anyhow... the for loop is x+=2 whereas normally I just assume loops are x++....

-------------------------

It's where you have [x+1] and [y+1].

Your loops go from 0 to < array.length. When you add 1 to it you are essentially going to array.length instead of 1 less than.

Also you might consider using the "code" bb tag when pasting code as it makes it easier to read.

cubist
Mar 14, 2005, 12:07 PM
Also you should have comments, not just for other people's sake, but for your own.

SilentPanda
Mar 14, 2005, 12:09 PM
Ack! The [X+1] and [Y+1] isn't the problem.

The problem is after your two loops. Your X and Y values will be 6. Then you are trying to access the array with those values...

Your loop goes x=0, x=2, x=4, then it makes x=6 and breaks out of the loop.

Same with y.

Then right under that you access the arrays using x=6 and y=6.

I don't normally read "for" loops, I just usually assume they're x++ instead of x+=2... :) so your for loop is good.

SilentPanda
Mar 14, 2005, 12:13 PM
Also you should have comments, not just for other people's sake, but for your own.

I agree even though... I don't... :( I know I should and I could tell you why I don't but it's not valid anyhow... usually I do for large projects though...

Sirena400
Mar 16, 2005, 11:43 AM
Sorry about not adding more comments, I didn't know that I should've added some or else I would've done that. I'll make sure to do that next time. SilentPanda, thanks for the help, but I'm don't quite get what you're telling me. What part of my code accesses the arrays using x=6 and y=6 and why can't I do that? Is it because I'm trying to access an array that was already broken out of?

SilentPanda
Mar 16, 2005, 11:59 AM
Sorry about not adding more comments, I didn't know that I should've added some or else I would've done that. I'll make sure to do that next time. SilentPanda, thanks for the help, but I'm don't quite get what you're telling me. What part of my code accesses the arrays using x=6 and y=6 and why can't I do that? Is it because I'm trying to access an array that was already broken out of?

I'll make a shorter example (I code in Java primarily but it's pretty much the same for what you're doing).

int[] iArray = new int[6]; // makes an array with index of 0 through 5
int X = 0;
int iSomeVariable = 0;

// just some for loop stuff
for (X = 0; X < iArray.length; X+=2) {
iArray[X]++;
iArray[X + 1]+=2;
}

// at this point X = 6. This is where the issue lies.
iSomeVariable = iArray[X] + iArray[X + 1];
// this is actually iSomeVariable = iArray[6] + iArray[7];

If you look in your code you are doing just this after your for loop for the variable y. You are calculating distance and location and going out of bounds on your index. Here is how the above for loop would process.

X = 0
Is X < iArray.length (which is 6)?
Yes, do inside of the loop.
X+=2 (now is 2)
Is X < iArray.length (which is 6)?
Yes, do inside of the loop.
X+=2 (now is 4)
Is X < iArray.length (which is 6)?
Yes, do inside of the loop.
X+=2 (now is 6)
Is X < iArray.length (which is 6)?
No! Leave.

I think you are not realizing the +=2 happens and then the loop exits.

Sirena400
Mar 17, 2005, 11:26 AM
Ah I see, thank you SilentPanda. I get what my problem is. Now I just have to figure a way to fix it. Thanks a lot for the help! That example really helped me a lot, thanks again.

mwpeters8182
Mar 19, 2005, 12:08 PM