Får inte formel att fungera. Nybörjare i C++

Permalänk

Får inte formel att fungera. Nybörjare i C++

Hej!

Jag har i uppgift att skriva ett program där man ska skriva in hur mycket man vill spara per år, sparmål man vill uppnå och räntan på det och sen ska programmet räkna ut hur många år det tar och hur mycket man har vid den tidpunkten. Jag sitter och sliter mitt hår för att jag inte förstår var jag gör fel, jag har letat överallt efter olika svar på nätet men hittar inget. Kanske någon här kan hjälpa mig?

Här är vad jag har skrivit:

#include <iostream> using namespace std; int main() { setlocale(LC_ALL,""); int insattning, sparmal, ranta; cout << "Ange hur mycket du vill sätta in varje år: "; cin >> insattning; cout << "Ange ditt sparmål: "; cin >> sparmal; cout << "Ange räntesatsen i procent: "; cin >> ranta; int ar=0; int saldo=0; int ranta_procent; do { saldo++; ranta_procent = (1+ranta/100); saldo = sparmal*ranta_procent; ar = sparmal/insattning; cout << "Ditt sparmål uppnås efter " << ar << " år" << endl; cout << "Ditt saldo kommer då att vara " << saldo << " kr" << endl; return 0; } while (saldo < sparmal); return 0; }

Tack för all hjälp!

Permalänk
99:e percentilen

Använd [code]-taggar när du klistrar in kod, så blir det lättare att läsa den (eller till och med möjligt överhuvudtaget i språk som Python och Haskell, där whitespace påverkar semantiken). Så här gör du:

[code]
int main() {
return 0;
}
[/code]

(Better SweClockers gör det lättare för dig att infoga sådan formatering, plus mycket mer.)

Redigera gärna ditt inlägg enligt ovan.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk

@Alling: Tack! jag funderade just på hur man gjorde det, jag har ändrat nu.

Permalänk
Medlem

Börja med att klura ut hur man räknar ut hur pengar växer dvs pseudokod, just nu skriver du bara kod utan någon baktanke, vilket är tydligt eftersom du ej har en loop logiskt.

Sedan lite generella råd:
Kod ska vara exklusivt engelskt, sedan om du hanterar svensk UI är en annan fråga.
Använd flyttal om något kan vara ej heltal.
Använd ej do loopar om logiken inte kräver det.

Permalänk
Medlem

Ränta funkar inte som du gjort i din kod.

Visa signatur

Moderkort: Gigabyte X570 Aorus Master | CPU: AMD Ryzen R9 5900X | CPU-kylare: Noctua NH-D15 chromax.black | RAM: Corsair Vengeance LPX 64 GB (4x16) DDR4-3600 CL18 | GPU: Gigabyte RTX 4080 Eagle OC | SSD: 2 x Samsung 970 EVO Plus 1 TB NVMe + Kingston A400 480 GB + Samsung QVO860 1 TB | PSU: EVGA SuperNOVA G2 1000 W Gold | Chassi: Lian Li O11 Dynamic XL | Skärm: BenQ PD3200U @ 3840x2160 + ASUS ROG Strix XG32VQ @ 2560x1440 | Tangentbord: Corsair K68 RGB Cherry MX Red | Mus: Logitech MX Master 2S

Permalänk
99:e percentilen
Skrivet av Sinery:

Kod ska vara exklusivt engelskt, sedan om du hanterar svensk UI är en annan fråga.

Du har helt rätt i allmänhet, men jag tycker faktiskt inte det är så dumt att använda svenska namn när man är nybörjare på ett språk, eftersom det tydliggör vilka ord som är en del av språkets grammatik (do, while etc), vilka som tillhör standardbiblioteket (cin, cout etc) och vilka man som programmerare får välja helt själv. Det gäller bara att vara tydlig med att svenska inte ska användas i "riktig" kod.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

Ser en return 0; i slutet av do-while loopen, verkar något malplacerad.

Permalänk
Medlem
Skrivet av Palmsen20:

Hej!

Jag har i uppgift att skriva ett program där man ska skriva in hur mycket man vill spara per år, sparmål man vill uppnå och räntan på det och sen ska programmet räkna ut hur många år det tar och hur mycket man har vid den tidpunkten. Jag sitter och sliter mitt hår för att jag inte förstår var jag gör fel, jag har letat överallt efter olika svar på nätet men hittar inget. Kanske någon här kan hjälpa mig?

Här är vad jag har skrivit:

#include <iostream> using namespace std; int main() { setlocale(LC_ALL,""); int insattning, sparmal, ranta; cout << "Ange hur mycket du vill sätta in varje år: "; cin >> insattning; cout << "Ange ditt sparmål: "; cin >> sparmal; cout << "Ange räntesatsen i procent: "; cin >> ranta; int ar=0; int saldo=0; int ranta_procent; do { saldo++; ranta_procent = (1+ranta/100); saldo = sparmal*ranta_procent; ar = sparmal/insattning; cout << "Ditt sparmål uppnås efter " << ar << " år" << endl; cout << "Ditt saldo kommer då att vara " << saldo << " kr" << endl; return 0; } while (saldo < sparmal); return 0; }

Tack för all hjälp!

Börja på summa 0.

Loop per år
1. Addera insättning till summa
2. Multiplicera med räntesatsen
3. Kolla om du har uppnåt mål och isåfall avbryt loopen

Du bör inte använda int i alla uträckningarna då en integer är ett heltal. Du behöver använda flyttal på vissa ställen.

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Medlem
Skrivet av SanyaIV:

Ser en return 0; i slutet av do-while loopen, verkar något malplacerad.

return 0; är i slutet av main funktionen. TS använder just nu en "do while" loop.

Edit: Missade return 0; som var i loopen.

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Medlem
Skrivet av Palmsen20:

int ranta_procent; ranta_procent = (1+ranta/100); }

Fundera lite på den dessa 2 rader och vad resultatet av uträkningen blir.
Nu råkar du skriva ett värde till variabeln direkt, men brukar alltid vara bra att alltid initiera variablerna till något värde vid deklaration.

Permalänk

@Dew87: Tack för tipsen!

Jag har gjort om enligt nedan, skrivit på engelska, och jag får det i alla fall att räkna ut år och hur mycket plus ränta och jag tror det är rätt.

#include <iostream> using namespace std; int main() { int contributions, goal; float rate; cout << "Enter yearly contributions: "; cin >> contributions; cout << "Enter interest rate: "; cin >> rate; cout << "What is your goal: "; cin >> goal; float interest; float years = 0; float balance = 0; float final_amount = 0; while(balance < goal) { years++; contributions++; interest = balance * (rate/100); balance = balance + interest + contributions; } cout << "It took " << years << " years to reach your goal" << endl; cout << "Your final amount will then be " << balance << " USD" << endl; return 0; }

Permalänk
Hedersmedlem

Nej, det där stämmer inte. Din variabel "contributions" ökar varje år med 1 USD. Varför det?

Permalänk

@pv2b: Tack! Jag fick det att stämma 100% med exemplet från skolan när jag tog bort den raden. Nu kan jag slappna av ikväll. Det är verkligen inte lätt att vara nybörjare på något.

Ha en fin kväll alla!

Permalänk
Avstängd
Skrivet av Sinery:

Sedan lite generella råd:
Kod ska vara exklusivt engelskt, sedan om du hanterar svensk UI är en annan fråga.
Använd flyttal om något kan vara ej heltal.
Använd ej do loopar om logiken inte kräver det.

Precis, hur skall annars indiern som ersätter dig lätt förstå koden?

Permalänk
Medlem
Skrivet av videopac:

Precis, hur skall annars indiern som ersätter dig lätt förstå koden?

Då får jag gråta hela vägen hem, snubblandes över 17 jobb på vägen.
Mycket IT jobb uppe i lilla västernorrland.

Permalänk
Medlem
Skrivet av Dew87:

return 0; är i slutet av main funktionen. TS använder just nu en "do while" loop.

I koden som TS gav i början fanns det två return 0;, en i slutet av main och en i slutet av loopen vilket medför att den skulle returnera efter första iterationen av loopen. Dock fixat i senaste kodsnutten.

Permalänk
Medlem
Skrivet av SanyaIV:

I koden som TS gav i början fanns det två return 0;, en i slutet av main och en i slutet av loopen vilket medför att den skulle returnera efter första iterationen av loopen. Dock fixat i senaste kodsnutten.

Ok, tackar. Missade den som var i loopen.

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Medlem
Skrivet av videopac:

Precis, hur skall annars indiern som ersätter dig lätt förstå koden?

Rädd att bli av med jobbet till någon mer kompetent

Visa signatur

Engineer who prefer thinking out of the box and isn't fishing likes, fishing likes is like fishing proudness for those without ;-)
If U don't like it, bite the dust :D
--
I can Explain it to you, but I can't Understand it for you!

Permalänk
Avstängd
Skrivet av Bengt-Arne:

Rädd att bli av med jobbet till någon mer kompetent

Haha, na inte direkt. Det tråkiga är bara att långt uppe i företagshierarkin så kan de inte se skillnad på en kompetent och en inte så kompetent medarbetare. Det innebär att de gärna väljer indier då dessa inte kostar speciellt mycket.

Permalänk
Medlem
Skrivet av videopac:

Haha, na inte direkt. Det tråkiga är bara att långt uppe i företagshierarkin så kan de inte se skillnad på en kompetent och en inte så kompetent medarbetare. Det innebär att de gärna väljer indier då dessa inte kostar speciellt mycket.

OK!
Förstår att dom då satt upp en filial i Indien, och nu börjat att skörda den frukten.
Indien är stort och där finns även rätt många smarta och framåt människor, kostnaden är kanske en grund i början men när kompetensen blir synlig så blir kostnaden sekundär...

Visa signatur

Engineer who prefer thinking out of the box and isn't fishing likes, fishing likes is like fishing proudness for those without ;-)
If U don't like it, bite the dust :D
--
I can Explain it to you, but I can't Understand it for you!

Permalänk
Avstängd
Skrivet av Bengt-Arne:

OK!
Förstår att dom då satt upp en filial i Indien, och nu börjat att skörda den frukten.
Indien är stort och där finns även rätt många smarta och framåt människor, kostnaden är kanske en grund i början men när kompetensen blir synlig så blir kostnaden sekundär...

Klart det finns smarta indier som är framåt men det är inte de man får för småpengar...

Permalänk
Medlem
Skrivet av videopac:

Klart det finns smarta indier som är framåt men det är inte de man får för småpengar...

Som jag skrev "när kompetensen blir synlig så blir kostnaden sekundär..."
För inte kan det vara dom andra som oroar

Visa signatur

Engineer who prefer thinking out of the box and isn't fishing likes, fishing likes is like fishing proudness for those without ;-)
If U don't like it, bite the dust :D
--
I can Explain it to you, but I can't Understand it for you!

Permalänk
Avstängd
Skrivet av Bengt-Arne:

Som jag skrev "när kompetensen blir synlig så blir kostnaden sekundär..."
För inte kan det vara dom andra som oroar

Aja, då missförstod jag dig. Nej, de andra oroar inte om det är så att det upptäcks i tid (att de inte producerar).