Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Funktioiden käyttö

Sivun loppuun

ikoneto [07.11.2007 09:05:33]

#

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ä

Markus [07.11.2007 10:26:00]

#

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.

ikoneto [07.11.2007 12:15:52]

#

Siis tuleeko tuo return -lause siihen funktion sisälle vai pääohjelmaan?

Blaze [07.11.2007 12:36:48]

#

Funktiohan se on, joka arvon palauttaa.

ikoneto [07.11.2007 12:54:49]

#

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

Sami [07.11.2007 13:30:42]

#

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;
}

Kray [07.11.2007 15:04:26]

#

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.

ikoneto [07.11.2007 17:12:14]

#

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.??

Markus [07.11.2007 18:06:07]

#

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;
}

Sami [07.11.2007 18:51:40]

#

http://www.nic.funet.fi/c opas/funktiot.html

ikoneto [07.11.2007 19:25:26]

#

Nonni, nyt alkoi valoa tulla tähänkin päähän. Kiitos paljon avusta ja kärsivällisyydestä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta