Olen kirjoittamassa ohjelmaa, jolla voisi laskea kuukausittaista lainaerää. Erän kaava on matemaattisesti seuraava:
maksu = iP / 1 - ( 1 i)^-n
Missä kaavassa siis:
P = lainattu rahamäärä
i = kuukausittainen korkoprosentti
n = maksuerien lukumäärä
Ongelmana on tuon muuttaminen C-kielelle. Se ilmeisesti vaatii pow-kirjastofunktion (math.h-tiedostosta) käyttöä. Käsittääkseni perussyntaksi on:
pow(x,y)
Missä siis lasketaan x potenssiin y. Miten sitä pitäisi soveltaa ylläolevaan kaavaan? Mitä tulee x:n ja mitä y:n paikalle?
Kuukausierän laskemisen kaava?
10
863
Vastaukset
- sudhfsiduhf
miten olis pow((1 i),-n);
- korotusongelma
Niinpäs taitaakin olla. Kiitokset avusta! :) Ei ole juuri nyt kääntäjää saatavilla koneella ja menen välillä kaavoissa sekaisin...
- Anonyymi
#include <math.h>
#include <stdio.h>
float laskeKuukausierä(float P, float i, int n){
float maksu = 0;
float korotettu = pow((1 + i), -n);
maksu = i * P / (1 - korotettu);
return maksu;
}
int main(){
float lainattuSumma = 10000.0;
float korkoprosentti = 0.01;
int erienLkm = 12;
float kuukausierä = laskeKuukausierä(lainattuSumma, korkoprosentti, erienLkm);
printf("Kuukausierä: %.2f
", kuukausierä);
return 0;
}- Anonyymi
Matemaattiset funktiot ottavat ja palauttavat liukuluvut double-tyyppisinä, joten koodissa float:in sijaan olisi järkevää käyttää double-tyyppiä. Tai vaihtoehtoisesti pow() funktio tulisi korvata powf() funktiolla, joka on lisätty standardiin C99:n myötä.
Myös printf() funktio olettaa argumentin "%f"-kentälle olevan double-muodossa. Float-tyyppinen argumentti korotetaan automaattisesti double-tyyppiseksi, mistä syntyy ylimääräistä koodia aivan tarpeettomasti.
Float-tyyppi oli käyttökelpoinen joskus kauan sitten, kun liukuluvuilla laskettiin ilman matematiikkaprosessorin tukea ja kun muistia oli kaikkiaan käytettävissä sellaiset 640 kilotavua. Nykyään float-tyypille on hyvin vähän jos lainkaan tarvetta, double on luontevampi em. syistä. - Anonyymi
Anonyymi kirjoitti:
Matemaattiset funktiot ottavat ja palauttavat liukuluvut double-tyyppisinä, joten koodissa float:in sijaan olisi järkevää käyttää double-tyyppiä. Tai vaihtoehtoisesti pow() funktio tulisi korvata powf() funktiolla, joka on lisätty standardiin C99:n myötä.
Myös printf() funktio olettaa argumentin "%f"-kentälle olevan double-muodossa. Float-tyyppinen argumentti korotetaan automaattisesti double-tyyppiseksi, mistä syntyy ylimääräistä koodia aivan tarpeettomasti.
Float-tyyppi oli käyttökelpoinen joskus kauan sitten, kun liukuluvuilla laskettiin ilman matematiikkaprosessorin tukea ja kun muistia oli kaikkiaan käytettävissä sellaiset 640 kilotavua. Nykyään float-tyypille on hyvin vähän jos lainkaan tarvetta, double on luontevampi em. syistä.Kehotankin siis käyttämään double-tyyppiä float-tyypin sijaan matemaattisissa funktioissa ja printf() funktiossa, jotta vältetään ylimääräisen koodin syntymistä ja varmistetaan tarkempi laskenta. Lisäksi pow() funktio kannattaa vaihtaa powf() funktioon, jos halutaan nimenomaan float-tyyppistä tulosta. Tämä lisää koodin luettavuutta ja ylläpidettävyyttä.
- Anonyymi
Yritin kerran myös kunnekas huomasinkin päässeeni ulosotolle. En tarjoudu toiste.
- Anonyymi
Kuukausierä: 888.49
- Anonyymi
Muuten ihan hyvä, mutta kaava on päin honkia.
- Anonyymi
Saahan tuolla kaavalla jonkinlaisen kuukausierän laskettua. Mutta jos aloittaja tavoitteli annuiteettilainan takaisinmaksuerää, sen laskentakaava on hieman toinen.
https://fi.wikipedia.org/wiki/Annuiteettilaina
- Anonyymi
maksu = iP / 1 - ( 1 i)^-n
= iP - i^(-n)
= iP - (-i)^n
= i*P - ( (n%4==0) ? ( 1 : n%4==1 ? ( -i : ( n%4==2 ? -1 : i)) ) ) )
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa
En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod337074- 386474
- 293544
- 453100
- 342744
- 162462
- 372198
- 162086
Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...
Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons481957- 341810