Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2017-07-15, 16:53
  #1
Medlem
Tja! Är en vecka in i programmering och behöver hjälp med att lära mig något. Uppgiften lyder att användaren ska kunna mata in sin årliga insättning, den årliga räntesatsen i procent och ett sparsmål följt av att programmet räknar ut hur många år det kommer ta att spara för att nå målet och exakt vad summan hamnar på. Ex. Du sätter in 3000 varje år med en årlig ränta på 4.2% och vill nå målet 50000. Det kommer ta 13 år och ditt saldo kommer då vara 50513.15 kr.

Så jag tänkte för mig själv att bryta ner det här i olika delar. Det första jag tänkte var att jag vill ha en "do-loop" där "insättningen + insättningen == summa1", "summa1 * årligränta = summa2", "while (summa2 < sparsmål)".

Men då på andra varvet behöver jag ju på något sätt få "summa2 + insättningen == summa1" i början på loopen för att det ska bli rätt.

Så behöver hjälp med logiken här. Alltså hur jag än gör så ser det ut att jag behöver ha samma funktion i början och slutet av loopen på något sätt.
Citera
2017-07-15, 16:57
  #2
Medlem
Trollfeeders avatar
Citat:
Ursprungligen postat av gholiat
Tja! Är en vecka in i programmering och behöver hjälp med att lära mig något. Uppgiften lyder att användaren ska kunna mata in sin årliga insättning, den årliga räntesatsen i procent och ett sparsmål följt av att programmet räknar ut hur många år det kommer ta att spara för att nå målet och exakt vad summan hamnar på. Ex. Du sätter in 3000 varje år med en årlig ränta på 4.2% och vill nå målet 50000. Det kommer ta 13 år och ditt saldo kommer då vara 50513.15 kr.

Så jag tänkte för mig själv att bryta ner det här i olika delar. Det första jag tänkte var att jag vill ha en "do-loop" där "insättningen + insättningen == summa1", "summa1 * årligränta = summa2", "while (summa2 < sparsmål)".

Men då på andra varvet behöver jag ju på något sätt få "summa2 + insättningen == summa1" i början på loopen för att det ska bli rätt.

Så behöver hjälp med logiken här. Alltså hur jag än gör så ser det ut att jag behöver ha samma funktion i början och slutet av loopen på något sätt.

Jag föreslår att du börjar med att skriva ner ekvationen, innan du börjar skissa på någon pseudo-kod ens.
Citera
2017-07-15, 17:10
  #3
Medlem
Xer0s avatar
Man räknar inte ränta med loopar.
Det finns en formel.

https://rikatillsammans.se/ranta-pa-...in-kalkylator/
Citera
2017-07-15, 17:20
  #4
Medlem
Okej det jag sa var i ekvation
x*y = a
a+x = b
b*y = c

där c måste på ngt sätt ersätta x i starten av nästa loop

c*y = a
a+x = b
b*y = c

5000*1.02 = 5100
5100+5000 = 10100
10100*1.02 = 10302 (c)

Hur kan jag uttnyttja C till nästa loop? Ser inte hur jag kan lösa det här i en ekvation hur jag än gör.
Citera
2017-07-15, 17:21
  #5
Medlem
Citat:
Ursprungligen postat av Xer0
Man räknar inte ränta med loopar.
Det finns en formel.

https://rikatillsammans.se/ranta-pa-...in-kalkylator/

Okej tack ska kolla det där
Citera
2017-07-15, 17:26
  #6
Medlem
Citat:
Ursprungligen postat av Xer0
Man räknar inte ränta med loopar.
Det finns en formel.

https://rikatillsammans.se/ranta-pa-...in-kalkylator/

Linken och ekvationen du skicka så vet man ju åren redan. Här så ska åren räknas ut av programmet.
Citera
2017-07-15, 17:39
  #7
Medlem
Xer0s avatar
Citat:
Ursprungligen postat av gholiat
Linken och ekvationen du skicka så vet man ju åren redan. Här så ska åren räknas ut av programmet.

Det går väl att lösa ut antalet år ur ekvationen.

Det är bara att du använder matten som du lärde dig i gymnasiet.

Jätte enkelt att ta reda på om du gjort rätt efteråt, sätt in lite siffror och kolla att det stämmer med original-ekvationen.
__________________
Senast redigerad av Xer0 2017-07-15 kl. 17:42.
Citera
2017-07-15, 17:48
  #8
Medlem
Xer0s avatar
Sedan tänkte jag bara verifiera. Du skall skiva detta i C, och du får använda standardbiblioteket?

Skall man skriva det i assembler, eller utan att använda standardbiblioteket... då blir det nog enklast att göra loopar ändå.

Grejen är att du inte vill implementera sqrt eller pow själv.

Tänk också på när du dividerar att du dividerar med flyttal och inte med heltal.
Ett sätt att göra det på är att casta till double eller sätta .0 efter talet.

I java kan mans kriva t.ex. 100f för att visa att 100 är ett flyttal, men vet inte om det går i C.
__________________
Senast redigerad av Xer0 2017-07-15 kl. 17:56.
Citera
2017-07-15, 18:24
  #9
Medlem
Citat:
Ursprungligen postat av Xer0
Sedan tänkte jag bara verifiera. Du skall skiva detta i C, och du får använda standardbiblioteket?

Skall man skriva det i assembler, eller utan att använda standardbiblioteket... då blir det nog enklast att göra loopar ändå.

Grejen är att du inte vill implementera sqrt eller pow själv.

Tänk också på när du dividerar att du dividerar med flyttal och inte med heltal.
Ett sätt att göra det på är att casta till double eller sätta .0 efter talet.

I java kan mans kriva t.ex. 100f för att visa att 100 är ett flyttal, men vet inte om det går i C.

C++. Problemet med det du skickade är att det inte går att vända på talet (så vitt jag vet?) för att få ut åren då man använder upphöjt. T.ex 1.08^10=2.15892.. Det går inte att få ut 1.08 eller 10 ur 2.15892 med något av talen som redan använts.

Sen ska det ju läggas till en summa varje år för den nya räntan så formeln hade inte funkat ändå.
Citera
2017-07-15, 19:09
  #10
Medlem
Xer0s avatar
Citat:
Ursprungligen postat av gholiat
C++. Problemet med det du skickade är att det inte går att vända på talet (så vitt jag vet?) för att få ut åren då man använder upphöjt. T.ex 1.08^10=2.15892.. Det går inte att få ut 1.08 eller 10 ur 2.15892 med något av talen som redan använts.

Sen ska det ju läggas till en summa varje år för den nya räntan så formeln hade inte funkat ändå.

Jag gjorde en snabb uträkning och fick fram

antal_år = (log(slutvärde / startvärde) / log(1 + ränta/100))

Går det inte?

Om det inte går, så gör en for loop och gör break när du vill avsluta.

Kod:
int year;
for(year=0;;year++) {
 ...
  if( sum >= target) {
    break;
  }
}

Do while kanske är snyggare.

Kod:
int year = 0;
do {
  year++;
  ...
} while(sum < target)
__________________
Senast redigerad av Xer0 2017-07-15 kl. 19:17.
Citera
2017-07-15, 19:17
  #11
Moderator
Protons avatar
Varför krångla till det med matematiken när det är uppenbart att det är en nybörjartråd och en loop-övning?

Algoritmen, uttryckt i nån slags pseudokod borde ju vara nåt sånt här?

Kod:
int startval 0;
int deposit 3000;
double sum 0;
double interest 0.12;

sum *= interest;
sum += deposit;
//räkna antal varv i loopen med
//while sum < nånting 

Övrigt återstår naturligtvis att göra som en del i övningen.
Citera
2017-07-15, 19:19
  #12
Medlem
Xer0s avatar
Citat:
Ursprungligen postat av Proton
Varför krångla till det med matematiken när det är uppenbart att det är en nybörjartråd och en loop-övning?

Algoritmen, uttryckt i nån slags pseudokod borde ju vara nåt sånt här?

Kod:
int startval 0;
int deposit 3000;
double sum 0;
double interest 0.12;

sum *= interest;
sum += deposit;
//räkna antal varv i loopen med
//while sum < nånting 

Övrigt återstår naturligtvis att göra som en del i övningen.

Det finns ingen anledning att göra en korkad uppgift och förvänta sig en korkad lösning.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback