Re: Why am I getting a dividing by zero error message

2021-01-28 Thread tsbockman via Digitalmars-d-learn
On Thursday, 28 January 2021 at 18:37:37 UTC, Ruby The Roobster 
wrote:

Here is the output/input of the program:
Type in  data for an egg:
Width: 3
Hight: 2

object.Error@(0): Integer Divide by Zero
...

Here is the source code:

import std.stdio;
import std.string;
void main(){
egg[1000] data;
data[0] = (new egg(0,0,"a"));
for(int i = 1;i<1000;i++)
{
...
data[i] = new egg(tempx,tempy,tempz);
for(int x = 0;x < i;x++)
{
int tempa;
int tempb;
double temp;
tempa = data[x].x;
if(tempa < 0)
tempa-=tempa;
tempb = data[x].y;
if(tempb < 0)
tempb-=tempb;
temp = tempa / tempb;
if(temp > highs)
{
highs = temp;
high = x;
}
}
...

Why is this happening? Does anybody know?


1) Outside the loops, you set `data[0] = (new Egg(0, 0, "a"))`

2) The outer `for(int i` loop, starts at `i = 1`, and so it never 
overwrites the work of step (1).


3) The inner `for(int x` loop starts at `x = 0`, so its first 
pass divides by `data[1].y`. Since you set that field equal to 0 
in step (1), and both operands have type `uint`, the result is a 
divide by zero error.


4) Also, `if(tempb < 0) tempb-=tempb;` will convert any negative 
values into zeroes. Maybe you meant to write `if(tempb < 0) tempb 
= -tempb;` to get the absolute value, instead?


There are many ways you could fix the program. (I won't try to 
guess what the best way is, though, because it's not entirely 
clear to me what this program is actually intended to do. As is, 
it does some calculations, but doesn't try to output their 
results in any way.)


Re: Why am I getting a dividing by zero error message

2021-01-28 Thread Ruby The Roobster via Digitalmars-d-learn
On Thursday, 28 January 2021 at 18:56:45 UTC, Ruby The Roobster 
wrote:

On Thursday, 28 January 2021 at 18:53:51 UTC, Dennis wrote:
On Thursday, 28 January 2021 at 18:37:37 UTC, Ruby The 
Roobster wrote:

object.Error@(0): Integer Divide by Zero
Why is this happening? Does anybody know?



data[0] = (new egg(0,0,"a"));


Here you set data[0].y to 0


tempb = data[x].y;


In the first iteration, this equals data[0].y which equals 0


temp = tempa / tempb;


And then you divide by zero here, hence the error


Okay. That worked. I added a check to set temp to zero if tempa 
or tempb is zero.


Instead of dividing, which causes the bug.


Re: Why am I getting a dividing by zero error message

2021-01-28 Thread Ruby The Roobster via Digitalmars-d-learn

On Thursday, 28 January 2021 at 18:53:51 UTC, Dennis wrote:
On Thursday, 28 January 2021 at 18:37:37 UTC, Ruby The Roobster 
wrote:

object.Error@(0): Integer Divide by Zero
Why is this happening? Does anybody know?



data[0] = (new egg(0,0,"a"));


Here you set data[0].y to 0


tempb = data[x].y;


In the first iteration, this equals data[0].y which equals 0


temp = tempa / tempb;


And then you divide by zero here, hence the error


Okay. That worked. I added a check to set temp to zero if tempa 
or tempb is zero.


Re: Why am I getting a dividing by zero error message

2021-01-28 Thread evilrat via Digitalmars-d-learn
On Thursday, 28 January 2021 at 18:37:37 UTC, Ruby The Roobster 
wrote:

Here is the output/input of the program:
Type in  data for an egg:
Width: 3
Hight: 2

object.Error@(0): Integer Divide by Zero

0x004023FE
0x0040CF9F
0x0040CF19
0x0040CDB4
0x00409033
0x00402638
0x75F86359 in BaseThreadInitThunk
0x77018944 in RtlGetAppContainerNamedObjectPath
0x77018914 in RtlGetAppContainerNamedObjectPath
Chicken:

Here is the source code:

import std.stdio;
import std.string;
void main(){
egg[1000] data;
data[0] = (new egg(0,0,"a"));
for(int i = 1;i<1000;i++)
{
int tempx;
int tempy;
string tempz;
int high = 0;
double highs = 0;
writeln("Type in  data for an egg:");
write("Width: ");
readf(" %d",&tempx);
write("Hight: ");
readf(" %d",&tempy);
write("Chicken: ");
tempz = readln();
data[i] = new egg(tempx,tempy,tempz);
for(int x = 0;x < i;x++)
{
int tempa;
int tempb;
double temp;
tempa = data[x].x;
if(tempa < 0)
tempa-=tempa;
tempb = data[x].y;
if(tempb < 0)
tempb-=tempb;


/*
x starts with 0, you are acessing data[x] which is set to 
egg(0,0,"a") and you get div by zero as a result. I see logic 
error, though I might be wrong because I haven't actually run 
your code.

*/


temp = tempa / tempb;
if(temp > highs)
{
highs = temp;
high = x;
}
}
tempx = data[high].x - data[i].x;
if(tempx < 0)
tempx-=tempx;
tempy = data[high].y - data[i].y;
if(tempy < 0)
tempy-=tempy;
}
}






Re: Why am I getting a dividing by zero error message

2021-01-28 Thread jmh530 via Digitalmars-d-learn
On Thursday, 28 January 2021 at 18:37:37 UTC, Ruby The Roobster 
wrote:

Here is the output/input of the program:
Type in  data for an egg:
Width: 3
Hight: 2

[...]


It might help to separate break this out into smaller functions. 
May make it easier to follow what is happening.


Re: Why am I getting a dividing by zero error message

2021-01-28 Thread Dennis via Digitalmars-d-learn
On Thursday, 28 January 2021 at 18:37:37 UTC, Ruby The Roobster 
wrote:

object.Error@(0): Integer Divide by Zero
Why is this happening? Does anybody know?



data[0] = (new egg(0,0,"a"));


Here you set data[0].y to 0


tempb = data[x].y;


In the first iteration, this equals data[0].y which equals 0


temp = tempa / tempb;


And then you divide by zero here, hence the error






Why am I getting a dividing by zero error message

2021-01-28 Thread Ruby The Roobster via Digitalmars-d-learn

Here is the output/input of the program:
Type in  data for an egg:
Width: 3
Hight: 2

object.Error@(0): Integer Divide by Zero

0x004023FE
0x0040CF9F
0x0040CF19
0x0040CDB4
0x00409033
0x00402638
0x75F86359 in BaseThreadInitThunk
0x77018944 in RtlGetAppContainerNamedObjectPath
0x77018914 in RtlGetAppContainerNamedObjectPath
Chicken:

Here is the source code:

import std.stdio;
import std.string;
void main(){
egg[1000] data;
data[0] = (new egg(0,0,"a"));
for(int i = 1;i<1000;i++)
{
int tempx;
int tempy;
string tempz;
int high = 0;
double highs = 0;
writeln("Type in  data for an egg:");
write("Width: ");
readf(" %d",&tempx);
write("Hight: ");
readf(" %d",&tempy);
write("Chicken: ");
tempz = readln();
data[i] = new egg(tempx,tempy,tempz);
for(int x = 0;x < i;x++)
{
int tempa;
int tempb;
double temp;
tempa = data[x].x;
if(tempa < 0)
tempa-=tempa;
tempb = data[x].y;
if(tempb < 0)
tempb-=tempb;
temp = tempa / tempb;
if(temp > highs)
{
highs = temp;
high = x;
}
}
tempx = data[high].x - data[i].x;
if(tempx < 0)
tempx-=tempx;
tempy = data[high].y - data[i].y;
if(tempy < 0)
tempy-=tempy;
}
}
class egg {
public:
this(uint x,uint y,string name)
{
this.x = x;
this.y = y;
name = cast(string)name;
}
uint x;
uint y;
char[] name;
}

Why is this happening? Does anybody know?