Behöver hjälp med hur man skriver roten ur

Permalänk

Behöver hjälp med hur man skriver roten ur

Tjena
Så här ser programmeringskoden ut:

#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

double L;
double W;
double X;

int main()
{
cout<<"Ett program som raknar ut maximal volym på
en rektangel";
cout<<"Hur lång är L?: ";
cin>>L;

cout<<"Hur lång är W?: ";
cin>>W;

X= 1/6(W+L) + sqrt 1/36 (W+L)^2 - 1/12 W*L;

cout<<"Storsta volym ar ">>X>>"";

getch();
return 0;
}

Hur skriver jag:
X= 1/6(W+L) + sqrt 1/36 (W+L)^2 - 1/12 W*L;
..så att inte programmet klagar?

Förenklat:
X= 1/6*(W+L) + roten ur 1/36*(W+L`)^2 - 1/12 W*L;

X är alltså den maximala volymen...

Mvh
Solsken

Permalänk
Medlem

microsoft dokumentation av sqrt säger följande;

double sqrt( double x ); float sqrt( float x ); // C++ only long double sqrt( long double x ); // C++ only float sqrtf( float x );

men volym på en rektangel..?

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

X= 1/6 * (W+L) + sqrt(1/36) * pow(W+L, 2) - 1/12 * W*L

sådär

du kan inte skriva 6x utan du måste skriva 6 * x
och om du ska ha nåt i kvadrat får du använda pow och funktioner skrivs foo(variabel)

Visa signatur

flippy @ Quakenet

Permalänk

Tack så mycket för svaret
..dock fungerar det inte riktigt som det ska.. programmet ser numera ut som följande:

#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

double L;
double W;
double X;

int main()
{
cout<<"Ett program som raknar ut maximal volym på en rektangel";
cout<<"Hur lång är L?: ";
cin>>L;

cout<<"Hur lång är W?: ";
cin>>W;

X= 1/6 * (W+L) + sqrt(1/36) * pow(W+L, 2) - 1/12 * W*L;

cout<<"Storsta volym ar "<<X<<"";

getch();
return 0;
}

Slutresultatet blir dock 0 hela tiden. Jag är ganska säker på att jag räknat rätt (hade mvg i matte c ), så vad kan det vara för fel?

Permalänk
Medlem

Sunshine2: du utför heltalsdivisioner .. 1/36 och 1/6 och 1/12 blir 0 då ..

Permalänk
Medlem

Du hade MVG i Matematik C men kan inte skilja på volym och area?
Jag måste säga att din uträkning ser ganska skum ut. Om längden är L och bredden är W är ju "maximala" arean L*W.

Permalänk
Medlem

Som MagnusL sa. För att få det rätt måste ha en decimal på någon sida. 1/36.0, 1/6.0, 1/12.0 osv

Sen kan jag tillägga att du skriver å som \x84, ä som \x86 och ö som \x94 (kan ha blandat ihop dem, men så är det) (såg att du hade skrivit o för ö osv, kände för att vara snäll )

Du kan ju också tänka på att deklarera variablerna på en rad, ser snyggare ut och blir mindre onödig kod. (double L,W,X; )

Permalänk
Citat:

Ursprungligen inskrivet av CC01
Du hade MVG i Matematik C men kan inte skilja på volym och area?
Jag måste säga att din uträkning ser ganska skum ut. Om längden är L och bredden är W är ju "maximala" arean L*W.

Kan förstå om du tycker det ser skumt ut.. meningen var inte att du skulle kommentera uträkningen utan mer förklara hur en smidig programmeringskod kan se ut.

Men för att ni (speciellt du) ska förstå får jag väl ta det från början:

*Uppgiften*
På ett papper så skärs det ut kvadrater i varje hörn. Om du skär ut de 4 skuggade kvadraterna och sen viker upp kanterna så får du en låda. Skriv ett program där användaren får mata in längd och bredd (L och W i figuren) Gör så att programmet räknar ut vilket värde på X som ger den största volymen.

Av figuren som finns på pappret kan man dra följande slutsatser:
L=L-2X
W=W-2X
Tyvärr har jag ingen ork att ta kort med digitalkameran för att visa.. hoppas du förstår ändå.

Uträkningen blir då följande:
V=(W-2X)*(L-2X)*X
V=(4X^2-2Wx-2Lx+W*L)*X
V=4X^3-2Wx^2-2Lx^2+WLx
Deriverar för att få maximal volym:
V'=12X^2/12-4Wx/12-4Lx/12+WL/12=0/12
Då får man en andragradare:
X^2 -1/3Wx -1/3Lx +1/12WL
X^2 -1/3(W+L)*X +1/12 WL=0
Eftersom man får två olika X får jag anta att det största värdet på något av X:en är det som gäller.
X=1/6(W+L) + roten ur 1/36(W+L)^2-1/12 WL. Detta är det slutgiltiga lösningen som ska användas till programmet.
Ni kanske inte förstår vad jag menar.. men jag är trött nu...

Permalänk
Medlem

'^' är xor, brar så du vet...

Permalänk
Medlem

Är du säker på att du inte ska skriva ett program som bruteforcar det? Dvs testar en massa X för att komma fram till den bästa, det känns rätt onödigt att skriva ett program om det ändå bara är en formel sådär.

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk

Gör följande på papper:
Tag reda på uttrycket för volymen
Derivera det

I programmet:

double x, prev_x; x = L/2; prev_x = 0; while(abs(x - prev_x) < 0.000001){ prev_x = x; x = x - (uttrycket)/(derivatan av uttrycket) }

[EDIT] Hmm, detta kan ju inte fungera. Hur som helst är nog iteration rätt väg att gå.

Permalänk
Citat:

Ursprungligen inskrivet av Myris
Är du säker på att du inte ska skriva ett program som bruteforcar det? Dvs testar en massa X för att komma fram till den bästa, det känns rätt onödigt att skriva ett program om det ändå bara är en formel sådär.

*Uppgiten*
Gör så att programmet räknar ut vilket värde på X som ger den största volymen.
Massan är inte inblandad..

Iteration kanske är rätt väg att gå? Jag är inte så haj på programmering som ni kanske har förtstått.

Permalänk

(kvadrat)roten ur är väll detsamma som upphöjt till ½?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Överkill
(kvadrat)roten ur är väll detsamma som upphöjt till ½?

Ja, men det hjälper inte? Finns ju redan en funktion för att få kvadratroten.

Och som sagt så är ^ XOR i C++, man får använda pow() för att upphöja (tror det finns en sådan funktion, kan ha fel ) eller skriva x*x, men ^ är definitivt inte rätt