amtech Skrevet 21. september 2007 Skrevet 21. september 2007 Jeg har fått en oppgave å skrive et program i C++ som beregner pi ved hjelp av Leibniz formel. pi=4*(1-1/3+1/5-1/7+1/9-1/11...) Man skal kunne lese inn verdien på den største nevneren i summen. Eks: Du skriver inn 7, da skal alle brøker tom. 1/7 tas med i beregninga. Hvordan skal jeg få til å skifte mellom addisjon og subtraksjon i beregninga? (Vi har ikke lært så mye enda, begrenser seg til enkle do, do-while og for-sløyfer)
Mr.Garibaldi Skrevet 21. september 2007 Skrevet 21. september 2007 Det enkleste er å bruke en bool verdi som du endrer mellom hver gang, og avhengig av hva den er enten trekker fra eller legger til... kjapp pseudokode for en måte å løse problemet på... Klikk for å se/fjerne innholdet nedenfor bool pluss; float min_pi = 1; //use a loop for the values from 3 to n, increment by 2 //if pluss //add 1/i to min_pi, set pluss to false //else //subtract 1/i from min_pi, set pluss to true //multiply min_pi by 4 1
amtech Skrevet 21. september 2007 Forfatter Skrevet 21. september 2007 Prøvde først med for-sløyfe, men det førte ikke fram i det hele tatt. Kom litt lenger med do-while, men får ikke riktig svar
Mr.Garibaldi Skrevet 21. september 2007 Skrevet 21. september 2007 Tja, da må du nok utdype litt mer hvor du sitter fast... For jeg fikk riktig resultat av å fylle ut pseudo-koden... En ting som kan gi problemer er 1/i, da dette vil bli sett på som heltallsdivisjon. Men hvis du skriver (float)1/i så fungerer det fint...
amtech Skrevet 24. september 2007 Forfatter Skrevet 24. september 2007 Nå fikk jeg det til Hadde bare satt feil krav i sløyfa, <= istedenfor <
Mr.Garibaldi Skrevet 24. september 2007 Skrevet 24. september 2007 Nå fikk jeg det til Hadde bare satt feil krav i sløyfa, <= istedenfor < 9563395[/snapback] Hehe, det er en enkel glipp å gjøre... Lykke til videre med programmeringen
epsil Skrevet 26. september 2007 Skrevet 26. september 2007 (endret) Du går ikke på HiST, vel? Uansett, ferdig program: Klikk for å se/fjerne innholdet nedenfor #include <iostream.h> #include <math.h> int main() { double nevner, piest, teller, i; cout << "Skriv inn verdien til den stoerste nevneren i " << "summen (0 avslutter):\n"; cin >> nevner; while(nevner != 0) { piest = 0.0; teller = 4.0; for(i = 1; i <= nevner; i = i + 2) { piest = piest + teller/i; teller = -teller; } cout << "\npi er estimert til " << piest << "\nM_PI er " << M_PI; cout << "\n\nSkriv inn verdien til den stoerste nevneren i " << "summen (0 avslutter):\n"; cin >> nevner; } return 0; } Hvis du ønsker ANSI-kompatibilitet på det ovenstående, så bytt ut #include <iostream.h> med #include <iostream>, etterfulgt av linjen using namespace std;. Edit: Alternativt kan du gjøre bruk av en rekursiv funksjon, dvs. en funksjon som kaller seg selv: Klikk for å se/fjerne innholdet nedenfor #include <iostream> #include <math.h> using namespace std; double cell(int n, int nevner); int main() { int nevner; double piest; cout << "Skriv inn verdien til den stoerste nevneren i " << "summen (0 avslutter):\n"; cin >> nevner; while(nevner != 0) { piest = 4 * cell(0, nevner); cout << "\npi er estimert til " << piest << "\nM_PI er " << M_PI; cout << "\n\nSkriv inn verdien til den stoerste nevneren i " << "summen (0 avslutter):\n"; cin >> nevner; } return 0; } double cell(int n, int nevner) { double number; number = pow(-1, n)/(2 * n + 1); if(2 * ++n + 1 <= nevner) { number += cell(n, nevner); } return number; } I dette tilfellet er dette neppe særlig ytelsesøkende, i hvert fall ikke i C++, men det er uansett en artig programmeringsøvelse. Endret 21. oktober 2007 av ePsiLON47
Peter Skrevet 8. februar 2008 Skrevet 8. februar 2008 (endret) Det enkleste er å bruke en bool verdi som du endrer mellom hver gang, og avhengig av hva den er enten trekker fra eller legger til... My smartere å ha en int som du ganger med -1 for hver gjennomgang. int x = 1; int pi = 0; int eq = 0; while(...) x = -x; eq = .. * x; pi += eq EDIT: ePsiLON47 gjør visst det samme over her Endret 8. februar 2008 av Peter
_vamecum Skrevet 12. februar 2008 Skrevet 12. februar 2008 (endret) i%2 for å finne ut om det er + eller - funker vel også, men x = -x er den jeg liker best for å skifte fortegn i hver loop-iterasjon. Endret 12. februar 2008 av _vamecum
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å