Gå til innhold

Anbefalte innlegg

Oki, nå er jeg skammelig lei av å få vraket masse fin kode og lure triks pga int/double konventering på topcoder! (For de som ikke vet hva det er, ta en titt på topcoder.. Går god for at du kommer til å like det :yes: )

 

Det jeg skulle var å beregne den rettlinjete avstanden mellom 3 punkter som er gitt ved x,y - x1,y1 - x2,y2. Alle verdier er int, og de skal sammenlignes med verdien d som også er en int!

 

//desperat forsøk på noe som likner pseukode
if( rot{ (x-x1)^2 + (y-y1)^2 } + rot{ (x-x2)^2 + (y-y2)^2 } < d ) hamfsldm;
//beklager den fine tegngivingen, men jeg håper dere tar poenget..

 

dette prøvde jeg å løse slik:

if( rot( pow(x-x1, 2) + pow(y-y1, 2) ) + rot( pow(x-x2, 2) + pow(y-y2, 2) ) < d) nja;

sammen med denne funksjonen:

double rot(int a){
double ret = 0;
for(int i = 0; i != 10; ++i) ret = (ret + a/ret)/2;
return ret;
}

Men som sagt, ikke særlig vellykket.. Kan noen forklare meg en bra måte å behandle int og double i denne typen problemer?

Lenke til kommentar
Videoannonse
Annonse

Noe sånt:

double square(int a){
double ret = 0;
for(int i = 0; i != 20; ++i) ret = (ret + a/ret) /2;
return ret;
}

int EllipseCoverage::calculateCoverage(int x1, int y1, int x2, int y2, int d) {
if(x1 > x2){
 int a = x1;
 x1 = x2;
 x2 = a;
 }
if(y1 > y2){
 int a = y1;
 y1 = y2;
 y2 = a;
 }
 
int count = 0;

for(int x = x1 - d/2; x != x2 + d/2; ++x){
 for(int y = y1 - d/2; y != y2 + d/2; ++y){
 	if(square( (x - x1) * (x - x1) + (y - y1) * (y - y1)) + square((x - x2) * (x-x2) + (y-y2) * (y-y2)) < d) ++count;
 }
}
return count;	
}

 

Oppgaven var å finne antall punkt med heltallkoordinater innenfor en ellipse.

Lenke til kommentar
dette prøvde jeg å løse slik:

if( rot( pow(x-x1, 2) + pow(y-y1, 2) ) + rot( pow(x-x2, 2) + pow(y-y2, 2) ) < d) nja;

sammen med denne funksjonen:

double rot(int a){
double ret = 0;
for(int i = 0; i != 10; ++i) ret = (ret + a/ret)/2;
return ret;
}

Kan problemet være at du forsøker å dele på 0?

Første gjennomløpning får du nemlig

ret = (0 + a/0)/2

 

Men som sagt, ikke særlig vellykket.. Kan noen forklare meg en bra måte å behandle int og double i denne typen problemer?

8807377[/snapback]

 

Ellers er det nødvendig å "caste" tallet hvis du vil endre typen:

int a = 1, b = 3;
double c = 0;
c = (double) a / (double) b;
//du må caste begge, for ellers er det int = int/int som så blir castet til double, som her:
c = (double) (a/b);

Endret av Mr.Garibaldi
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...