Gå til innhold

Regne ut pi ved hjelp av Leibniz' formel


Anbefalte innlegg

Går på 2.år elektro og fikk i datateknikk å regne ut pi ved hjelp av Leibniz' formel:

 

pi=4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 +...)

 

Fikk oppgitt at M_PI var forhåndsdefinert i math.h (altså "#include<math.h>"?)

 

Om noen kunne være behjelpelig til en enkel løsning på problemet med litt forklaringer hva som gjør hva i C++-koden hadde det vært supert!

 

På forhånd takk!

Lenke til kommentar
Videoannonse
Annonse

Skal du lage et program som printer ut uendelig mange desimaler, eller skal du regne ut pi så nærme som en float tillater?

 

I det første tilfelle kan du f.eks. regne ut en desimal av gangen ved å holde orden på når hvert ledd bidrar med en ikke-null desimal.

 

I det andre tilfellet kan du kanskje bruke en for-løkke til å summere ledd for ledd til summen ikke endrer seg i fra forige iterasjon.

Lenke til kommentar

øøø hvilke linje under elekto går du og når startet de med å gi oppgaver i C++ på elektro?

 

Jeg vil ikke ikke gi deg hele løsningen, har du noe mer konkret enn "løs oppgaven og kommenter".

Hvor langt har du kommet så langt?

Hvor stopper det opp for deg?

Endret av Giddion
Lenke til kommentar
Går på 2.år elektro og fikk i datateknikk å regne ut pi ved hjelp av Leibniz' formel:

 

pi=4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 +...)

 

Fikk oppgitt at M_PI var forhåndsdefinert i math.h (altså "#include<math.h>"?)

 

Om noen kunne være behjelpelig til en enkel løsning på problemet med litt forklaringer hva som gjør hva i C++-koden hadde det vært supert!

 

På forhånd takk!

 

 

Da synes jeg du bør gjøre det :p . som giddon sier, vi hjelper gjerne med folk som har problemer, men det gir deg ingenting om vi løser det for deg. Hvor mange desimaler av pi skulle du regne ut?

Lenke til kommentar

Går 2.året elektro og fikk oppgaven som "ei lita nøtt" i faget datateknikk.

 

I oppgaven er det ikke oppgitt hvor mange desimaler som skal regnes ut, så sikkert så mange som mulig.

 

Vi har enda ikke lært nok til å ha grunnlag for å løse oppgaven, derfor kommer jeg hit. Oppgaven skal ikke engang leveres inn til godkjenning, så derfor ønsker jeg å kunne lære litt nå på forhånd.

 

Programmet ser til nå slik ut :

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

int main()
{

int N=1;
double sum=0;					// sum er her summen inne i parentesen
int sistenevner;
	cout << "Dette programmet regner pi ved Leibniz' formel:"<<endl<<endl;
	cout << "pi = 4*(1-1/3+1/5-1/7+1/9-1/11+...)"<<endl<<endl;
	cout << "Velg siste nevner i formelen og trykk Enter"<<endl<<endl;
	cout << "sistenevner = ";
	cin >> sistenevner;	 // sistenevner %2==1

do
{
	sum=sum+1/N;		   // hvordan skal denne skrives da? +/-?
	N=N+2;
}
	while (N<=sistenevner);				// hmm


	cout << 4*sum;
	system("PAUSE");
return 0;
}

 

EDIT: oppdatert koden

Som dere ser er problemet at jeg kan -meget- lite til nå, men har lyst å komme til frampå siden C++ fascinerer meg, så litt mer hjelp hadde vært fint :)

Endret av sinnadyr
Lenke til kommentar

hah har ikke lekt med slike oppgaver på en god stund, fikk ikke veldig bra pressisjon med den algoritmen, men siden læreren din nevner konstanten M_PI så regner jeg med at du skal ha lik pressisjon som den. noe som er mulig med en double eller float. og jeg måtte kjøre løkken en god del ganger før jeg fikk riktig 6th desimal

Lenke til kommentar
hah har ikke lekt med slike oppgaver på en god stund, fikk ikke veldig bra pressisjon med den algoritmen, men siden læreren din nevner konstanten M_PI så regner jeg med at du skal ha lik pressisjon som den. noe som er mulig med en double eller float. og jeg måtte kjøre løkken en god del ganger før jeg fikk riktig 6th desimal

Som igjen leder meg til spørsmålet : Hvilken presisjon har M_PI ?

Folkens, jeg vet ingenting om dette. Han gav oppgaven for de som frivillig ville gjøre den, og her sitter jeg lærevillig og får bare småhint som egentlig ikke sier meg noen verdens ting.

 

Har skrevet fram og tilbake nå med else og if og while og det som er, får plenti feilmeldinger så kommer rett og slett ikke lengre. Ingen som kan legge ut programmet?

Lenke til kommentar
#include<iostream.h>
do
{
 sum=sum+1/N;		   // hvordan skal denne skrives da? +/-?
 N=N+2;
}
while (N<=sistenevner);

 

Du må skrive det som + og - for så variere hvilke formel du skal bruke avhengig av hva du brukte sist, bruk 'if' og 'else' til den jobben

 

 

Det greieste er vel å lage en funksjon som tar utgangspunkt i "summation notation". Det var sånn jeg implementerte det ihvertfall.

 

Tips: ikke bruk float, bruk en array, da får du langt flere desimaler og brownie points hos læreren.

Kan du utdype? I hvilken sammenheng?

Endret av Dead_Rabbit
Lenke til kommentar

Da er det for vanskelig for deg da. Betal noen til å gjøre det for deg (meg f.eks. ;)) eller bare si til læreren din at dere ikke har forutsetning for å kunne løse dette her. Generellt sett så er det ikke så mange som er interesserte i å bare dele ut leksehjelp uten vidre.

Endret av Dead_Rabbit
Lenke til kommentar
Går 2.året elektro og fikk oppgaven ...

 

f.eks

 

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

int main()
{
int N=1;
double sum=0;					
int sistenevner;
int count = 0;
cout << "Dette programmet regner pi ved Leibniz' formel:"<<endl<<endl;
cout << "pi = 4*(1-1/3+1/5-1/7+1/9-1/11+...)"<<endl<<endl;
cout << "Velg siste nevner i formelen og trykk Enter"<<endl<<endl;
cout << "sistenevner = ";
cin >> sistenevner;

do
{
	hvis count er lik 0 så:
		sum=sum+1.0F/N;		   
		count må endres her så den ikke går her en gang til neste iterasjon			   

	hvis ikke så:
		sum=sum-1.0F/N;		   
		count må endres her så den ikke går her en gang til neste iterasjon  

	N=N+2;
}
while (N<=sistenevner);				

cout << 4.0F*sum;
system("PAUSE");
return 0;
}

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...