Permalänk
Medlem

C++ problem räntesats

Löser inte formeln till detta

Kan nån hjälpa mig eller iaf ge mig en knuff i pseudokod tacksam för all hjälp

Tråd flyttad till Programmering och digitalt skapande /Vzano, Mod
Permalänk
Medlem

Vad har du försökt med, så kan vi ta det vidare därifrån?

Permalänk
Medlem
Skrivet av zyberzero:

Vad har du försökt med, så kan vi ta det vidare därifrån?

Detta är min kod håller på och gör en bankomat löser det andra men fastnar i räntebetalningar

Case ’r’ där börjar problemen

#include <iostream>

using namespace std;

int main()
{

char svar;
float saldo, insatt, uttag;
saldo = 0;

cout << "BANKOMAT"<< endl;
cout << endl;
cout << "Gor ett av foljande val" << endl;
cout << endl;
cout << "[i]nsattning" << endl;
cout << "[u]ttag" << endl;
cout << "[s]aldo" << endl;
cout << "[r]antebetalning" << endl;
cout << "[a]vslut" << endl;
cout << endl;
cin >> svar;

while (svar != 'a')
{
switch (svar)
{
case 'i':
cout << endl;
cout << "Hur mycket vill du sätta in" << endl;
cin >> insatt;
saldo = saldo + insatt;

cout << "Ditt saldo fylls på med " << insatt << endl;
cout << endl;
cout << "[i]nsattning" << endl;
cout << "[u]ttag" << endl;
cout << "[s]aldo" << endl;
cout << "[r]antebetalning" << endl;
cout << "[a]vslut" << endl;
cin >> svar;
break;

case 'u':
cout << endl;
cout << "Hur mycket vill du ta ut" << endl;
cin >> uttag;
saldo = saldo - uttag;

while (uttag >= saldo )
{
cout << "saldo för lågt " << endl;
cout << "Testa en annan summa" << endl;
cin >> uttag;
}
if( uttag <= saldo)
{
cout << uttag << " Kommer att dras från ditt konto" << endl;
}

cout << endl;
cout << "[i]nsattning" << endl;
cout << "[u]ttag" << endl;
cout << "[s]aldo" << endl;
cout << "[r]antebetalning" << endl;
cout << "[a]vslut" << endl;
cin >> svar;
break;

case 's':
cout << endl;
cout << "Ditt saldo är " << saldo << endl;
cout << endl;

cout << "[i]nsattning" << endl;
cout << "[u]ttag" << endl;
cout << "[s]aldo" << endl;
cout << "[r]antebetalning" << endl;
cout << "[a]vslut" << endl;
cin >> svar;
break;

case 'r':
float summa;
int tid, insatt;
tid = 0;
float rantesats;

cout << endl;
cout << "Hur mycket pengar vill du sätta in per år" << endl;

cin >> insatt;

cout << "Ange räntesats i procent" << endl;

cin >> rantesats;

rantesats = insatt / 100 * rantesats;

cout << "Hur många år vill du spara" << endl;
cin >> tid;
cout << endl;

summa = insatt * rantesats * tid;
++ tid;

cout << summa << endl;
break;

}

}

return 0;
}

Permalänk
Moderator

Ränta räknas ut som kapital * räntesats. För varje år får du räkna ut räntan för det året och lägga till det till kapitalet. Tänk på att räntesatsen i procent är 100-delar, dvs du multiplicerar med räntesats i procent / 100.
Dessutom ska du ju för varje år räkna upp kapitalet med ett insatt belopp.

För övrigt bör du använda code-taggar för att göra din kod mer lättläst.
Det hjälper för övrigt att skriva pseudokod som det tipsas om i uppgiften. "Kör" sedan din pseudokod genom att skriva ner hur värdena uppdaterar sig på papper.

Permalänk
Medlem

Jag ska försöka tack för hjälpen

Permalänk
Medlem

En grej som jag noterade är
Om du har 100kr på kontot så får du INTE ta ut 100kr.
while (uttag >= saldo )

Permalänk
Medlem
Skrivet av giplet:

Ränta räknas ut som kapital * räntesats. För varje år får du räkna ut räntan för det året och lägga till det till kapitalet. Tänk på att räntesatsen i procent är 100-delar, dvs du multiplicerar med räntesats i procent / 100.
Dessutom ska du ju för varje år räkna upp kapitalet med ett insatt belopp.

För övrigt bör du använda code-taggar för att göra din kod mer lättläst.
Det hjälper för övrigt att skriva pseudokod som det tipsas om i uppgiften. "Kör" sedan din pseudokod genom att skriva ner hur värdena uppdaterar sig på papper.

Skrivet av Panatin:

Jag ska försöka tack för hjälpen

Om det känns det minsta osäkert vad som ska räknas ut och hur, så kan det ju dessutom vara värt att helt bortse från allt vad kod heter och bara räkna de första 5 åren eller så med papper och penna.
Detta så att du känner att du verkligen förstår själva problemet innan du börjar med programmeringsdelen av uppgiften.

Permalänk
Medlem

Du upprepar mycket kod i onödan. Frågan bör upprepas varje gång användaren inte väljer att avsluta, så detta kan vara en enda gång i while-satsen. Typ:

char svar; cout << "BANKOMAT" << endl; svar = "" while svar != "a" { // Kod för att tömma skärm och fråga användaren // Switch-sats för respons switch(svar) case 'i' // kod för detta case 'u' // etc }

Ränteresultatet kan du sen lösa med en enkel for-sats t ex:

for (int i = 1; i < tid; i++) { saldo = (saldo + insatt) * rantesats }

Om insättningen är noll så ökar beloppet bara med räntan. Jag antar att man sätter in pengar 1 januari så att varje år får hela nya beloppet, samt att även första året får insättningen.

EDIT:
Detta är lite konstigt:

cout << "Ange räntesats i procent" << endl; cin >> rantesats; rantesats = insatt / 100 * rantesats;

Användare lär ange räntesatsen som procent, t ex 5%, eller bara 5. Du behöver se till att detta antingen blir 1.05, eller applicera det påslaget i formeln som ändrar saldot.
Du verkar istället beräkna räntebeloppet, vilket är lite onödigt eftersom det ändras varje år.

Alt 1:

cout << "Ange räntesats i procent" << endl; cin >> rantesats; for (int i = 1; i < tid; i++) { saldo = saldo + insatt rantebelopp = (rantesats/100 + 1)* saldo; saldo = saldo + rantebelopp }

Alt 2:

cout << "Ange räntesats i procent" << endl; cin >> rantesats; for (int i = 1; i < tid; i++) { saldo = (saldo + insatt) * (rantesats/100 + 1); }

Tillägg
Permalänk
Medlem
Skrivet av stgr:

En grej som jag noterade är
Om du har 100kr på kontot så får du INTE ta ut 100kr.
while (uttag >= saldo )

Tack såg det när du nämnde det glömde
|| uttag == saldo

Uppskattar all hjälp mycket

Permalänk
Medlem
Skrivet av stgr:

En grej som jag noterade är
Om du har 100kr på kontot så får du INTE ta ut 100kr.
while (uttag >= saldo )

Skrivet av Panatin:

Tack såg det när du nämnde det glömde
|| uttag == saldo

Uppskattar all hjälp mycket

Du kan minimera det ännu mer. Du verkar vilja neka uttag om uttaget är större än saldot, men just nu kollar din loop om uttaget är större eller lika med saldot. Nog för att lägga på || uttag == saldo skulle lösa ditt problem, men du kan göra det ännu lättare

Permalänk
Moderator
Skrivet av stgr:

En grej som jag noterade är
Om du har 100kr på kontot så får du INTE ta ut 100kr.
while (uttag >= saldo )

Skrivet av Panatin:

Tack såg det när du nämnde det glömde
|| uttag == saldo

Uppskattar all hjälp mycket

Vad händer nu om du har 100kr på kontot och du vill ta ut 100kr?

Permalänk
Medlem
Skrivet av giplet:

Vad händer nu om du har 100kr på kontot och du vill ta ut 100kr?

while (uttag >= saldo || uttag == saldo)

Nu funkar det att ta ut 100 om det finns 100
Men fattar grejen koden för lång hade sett snyggare ut med (uttag == saldo) bara

Fan jag har en tendens att skriva för mycket kod
Måste bli latare hahah

Permalänk
Medlem
Skrivet av evil penguin:

Om det känns det minsta osäkert vad som ska räknas ut och hur, så kan det ju dessutom vara värt att helt bortse från allt vad kod heter och bara räkna de första 5 åren eller så med papper och penna.
Detta så att du känner att du verkligen förstår själva problemet innan du börjar med programmeringsdelen av uppgiften.

Ska försöka med detta tack

Permalänk
Medlem
Skrivet av Panatin:

while (uttag >= saldo || uttag == saldo)

Nu funkar det att ta ut 100 om det finns 100
Men fattar grejen koden för lång hade sett snyggare ut med (uttag == saldo) bara

Fan jag har en tendens att skriva för mycket kod
Måste bli latare hahah

Men det är ju samma sak?
>= betyder Större eller lika med.
== betyder lika med.

uttag >= saldo || uttag == saldo säger alltså;
Om uttag är större eller lika med saldo eller om uttag är lika med saldo.

Med detta villkor kommer du alltså aldrig att kunna ta ut pengar om uttaget är samma summa som saldot innehåller. Kolla om uttaget är större än saldot istället