Gå til innhold

Arrh..hva er galt med denne sekvensen ?


Anbefalte innlegg

Videoannonse
Annonse
Ikkje noko gale med den. Iallefall ikkje mpt. syntaks. Gjer den ikkje det du vil?

nei, virker som det er "4.0*a*c" som er problemet..

 

Hvis 4ac er større enn b^2 så vil du jo ta kavadratroten av et negativt tall, som ikke er mulig med sqrt. Hvis det er det som er problemet så må du eventuelt ta kvadratroten til absoluttverdien.

Lenke til kommentar
Ikkje noko gale med den. Iallefall ikkje mpt. syntaks. Gjer den ikkje det du vil?

nei, virker som det er "4.0*a*c" som er problemet..

 

Hvis 4ac er større enn b^2 så vil du jo ta kavadratroten av et negativt tall, som ikke er mulig med sqrt. Hvis det er det som er problemet så må du eventuelt ta kvadratroten til absoluttverdien.

Ok, hvordan angir jeg absoluttverdi for 4ac ?

Lenke til kommentar
Ikkje noko gale med den. Iallefall ikkje mpt. syntaks. Gjer den ikkje det du vil?

nei, virker som det er "4.0*a*c" som er problemet..

 

Hvis 4ac er større enn b^2 så vil du jo ta kavadratroten av et negativt tall, som ikke er mulig med sqrt. Hvis det er det som er problemet så må du eventuelt ta kvadratroten til absoluttverdien.

Ok, hvordan angir jeg absoluttverdi for 4ac ?

Bruk abs() i cstdlib ev. cmath.

Lenke til kommentar

Tar du abs av 4ac vil det jo ofte gi feil regnestykke, og dermed ikke rart det ikke fungerer. Fungerer programmet ditt hvis b^2 > 4ac? sjekk dette først. Hvis det ikke fungerer da er det noe galt et sted. Hvis du vil det skal funke hvis b^2 < 4ac også er du nødt til å lage din egen sqrt funksjon som tar for seg negative røtter. Er ikke veldig vanskelig, raskt rasket sammen eksempel som ikke er sjekket men tror det skal funke.

 

double mysqrt(double a)
{
double ans = 1;
if(a < 0) {
	ans = -1;
	a *= -1;
}
ans *= sqrt(a);
return ans;
}

 

Hvis du får tilbake en negativ rot vet du at det egentlig er den positive roten gangen i (altså roten av -1). sqrt vil aldri returnere et negativt tall, så dette skal fungere fjell. Kan selvsagt gjøre det på andre måter også, ved å f. eks. bruke en string, men dette er vel den enkleste måten.

Lenke til kommentar
Tar du abs av 4ac vil det jo ofte gi feil regnestykke, og dermed ikke rart det ikke fungerer. Fungerer programmet ditt hvis b^2 > 4ac? sjekk dette først. Hvis det ikke fungerer da er det noe galt et sted. Hvis du vil det skal funke hvis b^2 < 4ac også er du nødt til å lage din egen sqrt funksjon som tar for seg negative røtter. Er ikke veldig vanskelig, raskt rasket sammen eksempel som ikke er sjekket men tror det skal funke.

 

double mysqrt(double a)
{
double ans = 1;
if(a < 0) {
	ans = -1;
	a *= -1;
}
ans *= sqrt(a);
return ans;
}

 

Hvis du får tilbake en negativ rot vet du at det egentlig er den positive roten gangen i (altså roten av -1). sqrt vil aldri returnere et negativt tall, så dette skal fungere fjell. Kan selvsagt gjøre det på andre måter også, ved å f. eks. bruke en string, men dette er vel den enkleste måten.

Ok. Men det funker ikke hvis b^2 > 4ac heller, men hvis jeg tok vekk 4ac såg det ut til å funke, men da blir regnestykket feil, håper jeg får dette til i kveld.

Lenke til kommentar
Ok. Men det funker ikke hvis b^2 > 4ac heller, men hvis jeg tok vekk 4ac såg det ut til å funke, men da blir regnestykket feil, håper jeg får dette til i kveld.

 

Jeg tror tiden er inne til å vise oss koden din, har en mistanke om at du tar absolutt verdien til "4ac" og ikke "b^2 - 4ac". Uansett, dette går vel ut på å finne røttene til et andregradspolynom? I så fall må du sjekke om polynomet faktisk har røtter ved å sammenligne b^2 og 4ac før du tar kvadratroten av differansen.

Lenke til kommentar

int main ()
{
float a = 3;
float b = -4;
float c = 1;
float d = sqrt(pow(b, 2) - (4 * a * c));

if (d < 0)
	cout << "Ingen løsninger" << endl;
else if (d == 0)
	cout << "X = " << (-b / 2 * a) << endl;
else if (d > 0)
{
	cout << "X = " << (-b + d) / (2 * a) << endl;
	cout << "X = " << (-b - d) / (2 * a) << endl;
}

return 0;
}

 

Denne burde funke. Med tanke på din, hvorfor bruker du 'd' i stedet for 2 * a? Er du sikker på at disse er like store?

Lenke til kommentar
int main ()
{
float a = 3;
float b = -4;
float c = 1;
float d = sqrt(pow(b, 2) - (4 * a * c));

if (d < 0)
	cout << "Ingen løsninger" << endl;
else if (d == 0)
	cout << "X = " << (-b / 2 * a) << endl;
else if (d > 0)
{
	cout << "X = " << (-b + d) / (2 * a) << endl;
	cout << "X = " << (-b - d) / (2 * a) << endl;
}

return 0;
}

 

Denne burde funke. Med tanke på din, hvorfor bruker du 'd' i stedet for 2 * a? Er du sikker på at disse er like store?

 

Her forsøker du jo å ta roten av et negativt tall. Heller noe ala:

 

int main ()
{
float a = 3;
float b = -4;
float c = 1;
float d = pow(b, 2) - (4 * a * c);

if (d < 0)
	cout << "Ingen løsninger" << endl;
else if (d == 0)
	cout << "X = " << (-b / 2 * a) << endl;
else if (d > 0)
{
	cout << "X = " << (-b + sqrt(d)) / (2 * a) << endl;
	cout << "X = " << (-b - sqrt(d)) / (2 * a) << endl;
}

return 0;
}

 

Da forsøker du ikke å ta roten av et negativt tall.

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...