Tässä kun vauhtiin pääsee, niin ongelmia tulee eteen.
Yritin tuossa päästä funtioiden maailmaan. alapuolella on yksi esimerkki mitä tein tuossa. Kommentoikaa onko tuo edes oikein tehty ja mitä parannuksia te tekisitte.
// alussa main(void) jälkeen kutsutaan sitten tuota funktiota void laina_laskuri(void){ int la, kk, mv; // tarvittvia muuttujia int=kokonaisluku float desimaaliluku float vk, p, plyh, korko_osuus, korko_kum, summa; mv=1; // alustetaan muutama muuttuja kk=1; cout << "Anna tarvittava lainan osuus: "; cin >> p; cout << "Anna korko prosentti (vuosikorko): "; cin >> vk; cout << "Anna laina-aika (kuukausina): "; cin >> la; cout << "\n \nPaaoman tarve on: " << p <<"€\n"; cout << "Vuosikorko on: " << vk <<"%\n"; cout << "Laina-aika (kk)on: " << la <<"kk\n"; //cout << setw(8) << right << "hö\n" << left << "hä\n"; //Lasketaan ensimmäisen erän korko, pääoma lyhennyt ja yhteensä lyhennys cout << setw(6) << " - KK - "<< setw(6) << " - PAAOMA - "<< setw(6) << " - LYHENNYS - "<< setw(6) << " - KORKO - "<< setw(6) << " - YHT - \n"; korko_osuus = vk/12 * p * mv/100; korko_kum=korko_kum+korko_osuus; plyh=p/la; summa = plyh + korko_osuus; // tulostetaan ensimmäisen lyhennyksen tiedot cout << setw(5)<<" - " << kk << setw(5)<<" - " << p << setw(5)<<" - " << plyh << setw(5)<<" - " << korko_osuus << setw(5)<<" - " << summa <<"\n"; p = p - plyh; // lasketaan ja tulostetaan loppuajan lyhennys tiedot for (int kk = 2; kk <= la; kk = kk + 1) { korko_osuus = vk/12 *p* mv/100; korko_kum = korko_kum + korko_osuus; summa=plyh+korko_osuus; cout << setw(5)<<" - " << kk << setw(5)<<" - " << p << setw(5)<<" - " << plyh << setw(5)<<" - " << korko_osuus << setw(5)<<" - " << summa <<"\n"; p = p - plyh; } }
Ongelmana nyt sitten on se, kun noita funktioita on vaikka kaksi tai kolme, ja sitten pääohjelmassa (tai uudessa) funktiossa pitäisi saada sellanen yhteenveto, noiden funktioiden muuttujien arvoista (tai ainakin osasta).
Kiitos jälleen kärsivällisyydestä
Jos pääohjelma tarvitsee jotain funktion laskemia arvoja pitää ne palauttaa ("return"-lause) pääohjelmalle.
Pitänee vielä huomauttaa, että kaikki muuttujat tulee aina alustaa määrittelyn yhteydessä esim.: int "la=0, kk=1, mv=1;". Alustamaton muuttuja on yksi yleisimmistä bugien lähteistä ohjelmissa.
Siis tuleeko tuo return -lause siihen funktion sisälle vai pääohjelmaan?
Funktiohan se on, joka arvon palauttaa.
No niinhän se tekee...
Miten tuon return lauseen pitäisi laittaa sinne funktioon ja voiko siinä olla usemapi arvo/muuttuja
yritin laittaa sen näin:
void main(void) { // kutsutaan funktiota tulot_menot(); laina_laskuri(); cout << p; // jos vaikka yritän tähän tulostaa arvon system ("pause"); } //.... void tulot_menot(void) { int netto=0, kk_menot=0, kk_tulo=0; // tarvittvia muuttujia int=kokonaisluku float desimaaliluku float yli_jaama=0; cout << "Anna kuukausi tulot (nettotulot): "; cin >> kk_tulo; cout << "Anna kuukausi menot (kaikki kiinteat): "; cin >> kk_menot; netto=kk_tulo-kk_menot; cout << "\n \nIlmoittamasi kuukausi tulot: " << kk_tulo <<" euroa\n"; cout << "Ilmoittamasi kuukausi menot: " << kk_menot <<" euroa\n"; cout << "Kuukaudessa jaava osuus: " << netto <<" euroa\n"; yli_jaama = float (netto *0.4); // kuukaudessa jääva netto osuudesta voidaan 40% laittaa auton säästämiseen cout << "Ylijaama osuus on: " << yli_jaama <<" euroa\n"; return p; //return(p); }
Ei oikein mitenkään päin onnistu
Tässä on esimerkki funktiosta, joka laskee kahden luvun summan ja palauttaa saadun tuloksen.
// | paluuarvon tyyppi // | // v v---------v-- funktiolle annettavat parametrit double summa(double a, double b) { double tulos = a + b; return tulos; // Palautetaan haluttu muuttuja. Muuttujan pitää tietenkin olla jokin tämän funktion sisällä määritelty muuttuja ja samaa tyyppiä kuin funktion alussa on määritelty. } //Ja funktion käyttö toimii näin... void main() double luku1 = 5.3; double luku2 = 12.4; double lukujensumma = summa(luku1, luku2); // kutsutaan funktiota summa ja annetaan sille parametreiksi luku1 ja luku2. cout << "lukujen " << luku1 << " ja " << luku2 << " summa on " << lukujensumma; }
Niin, eli toisin sanoen funktion alussa määritellään, esim.
int plussaa(int a, int b) { int c; c=a+c; return c; }
eli siis kun tuo ensimmäinen int ennen "plussaa" määrittää, minkä tyyppinen return annetaan.
Eli jokseekin rakentan koko homman pieleen. Toisin sanoen tonne funktioon minkä olen tehnyt, ei olisi pitänyt laittaa noita missä pyydetään kk_tulo ja kk_menoja yms.??
ikoneto kirjoitti:
Eli jokseekin rakentan koko homman pieleen. Toisin sanoen tonne funktioon minkä olen tehnyt, ei olisi pitänyt laittaa noita missä pyydetään kk_tulo ja kk_menoja yms.??
Funktiossa saa toki pyytää käyttäjältä syötettä. Ihan miten vain haluat tehdä.
Funktiolle ei ole pakko antaa parametreja vaan voit kysyä tarvittavat asiat käyttäjältä funktion sisällä.
#include <iostream> int kysyLuku() { int luku = 0; std::cout << "Anna luku: "; std::cin >> luku; return luku; } int main() { int syote = kysyLuku(); std::cout << "Annoit luvun: " << syote << "\n"; return 0; }
Nonni, nyt alkoi valoa tulla tähänkin päähän. Kiitos paljon avusta ja kärsivällisyydestä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.