ekorniminator Skrevet 7. juni 2007 Del Skrevet 7. juni 2007 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 ) 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
Frysning Skrevet 7. juni 2007 Del Skrevet 7. juni 2007 Har du hele .cpp/.cc filen? Lenke til kommentar
ekorniminator Skrevet 7. juni 2007 Forfatter Del Skrevet 7. juni 2007 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
Mr.Garibaldi Skrevet 7. juni 2007 Del Skrevet 7. juni 2007 (endret) 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 7. juni 2007 av Mr.Garibaldi Lenke til kommentar
ekorniminator Skrevet 7. juni 2007 Forfatter Del Skrevet 7. juni 2007 problemet er selvfølgelig at jeg prøver å dele på null.. ret skulle vært satt til 1 i steden. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå