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
870
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
- 503874
- 1053425
ROTAT VALTAAVAT ALUEITA
Asukkaat nyt loukkuja tekemään ja kiireellä, jätehuolto kuntoon, jätteet niille kuuluville paikoille, huomioikaa yrittäj342811Miten minusta tuntuu että kaikki tietää sun tunteista mua kohtaan
Paitsi suoraan minä itse, vai mitä hlvettiä täällä tapahtuu ja miksi ihmiset susta kyselee minulta 🤔❤️262478- 201879
Alavuden sairaala
Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan51829- 1851766
- 291578
Reuters: Ukraina on iskenyt Venäjän strategisia pommikoneita vastaan. Jopa 40 konetta vahingoittunut
Ukrainan turvallisuuspalvelu SBU on iskenyt Venäjän strategisia pommikoneita vastaan, kertoo Reuters. Uutistoimiston läh3871468Huomenta kulta
En mä halunnut sulle ilkeillä,päinvastoin. Miks mä niin tekisin ku rakastan sua ❤️ mut anteeksi jos ilmaisin itseäni huo91248