Palautus parametrien kautta?

Parametreittäin

Olen kirjoittamassa ohjelmaa, jolla harjoittelen arvojen palauttamista parametrien kautta. Pääohjelman pitäisi kysyä kaksi lukua ja palauttaa arvo parametrin kautta. Alla on tekemääni ohjelmaa.

Pulmana siis ei ole itse arvon palautus, koska sen osaan palauttaa myös return-lauseella. Pulmana on, että miten minun pitäisi määritellä tuo pääohjelman summamuuttuja ja viiteparametri, jotta saan arvon palautettua juuri parametrin kautta pääohjelmaan. Onko tuo alla edes sinne päin?


#include

void palauta(float x, float y, float *sump);

void
main(void)
{
   float luku1,
       luku2,
       summa;

   printf("\nAnna luku 1 > ");
   scanf("%f", luku1);

   printf("\nAnna luku 2 > ");
   scanf("%f", luku2);

   palauta_summa(luku1, luku2, & summa);

   printf("\nSumma on %.2f ", summa);


}

void palauta(float x,float y, float *sump)
{
   float sum;

   sum = x y;
   *sump = & sum;

}

6

637

    Vastaukset 6

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • teuro

      pääohjelmassa kutsut muun muassa anna_summa funktiota, jota ei ole määritelty. Summaa ei anneta parametrina tämän olet ymmärtänyt jotenkin väärin.

      mielummin vaikka näin:

      float anna_summa(float x, float y){
      return (x y);
      }

      • referoija

        Tietysti summan (muuttujan) voi antaa parametrina (referenssinä) jos haluaa.

        Alkuperäisessä oli se &-merkki turha, eli ilman sitä:

        *sump = sum;

        Ja edelliselle "neuvojalle" kysymys, että mitenkäs palautat useamman arvon return lauseella?

        Yksi hyvin yleinen tapa käyttää tätä on palauttaa TRUE/FALSE return lauseella ja vastaus kirjoittamalla referenssinä annettuun muuttujaan, esim:

        int etsi_summa( int kriteeri, int * summa )
        {
        // etsi jotenkin...
        if (osuma < MAX_SUMMAT)
        {
        *summa = summat[osuma];
        return TRUE;
        }

        return FALSE;
        }

        Ja sitä kutsutaan tietysti koodissa näin:

        if (etsi_summa(tunnus, &summa))
        {
        // käytä summaa
        }
        else
        {
        // summaa ei löytynyt
        }


      • helppoa
        referoija kirjoitti:

        Tietysti summan (muuttujan) voi antaa parametrina (referenssinä) jos haluaa.

        Alkuperäisessä oli se &-merkki turha, eli ilman sitä:

        *sump = sum;

        Ja edelliselle "neuvojalle" kysymys, että mitenkäs palautat useamman arvon return lauseella?

        Yksi hyvin yleinen tapa käyttää tätä on palauttaa TRUE/FALSE return lauseella ja vastaus kirjoittamalla referenssinä annettuun muuttujaan, esim:

        int etsi_summa( int kriteeri, int * summa )
        {
        // etsi jotenkin...
        if (osuma < MAX_SUMMAT)
        {
        *summa = summat[osuma];
        return TRUE;
        }

        return FALSE;
        }

        Ja sitä kutsutaan tietysti koodissa näin:

        if (etsi_summa(tunnus, &summa))
        {
        // käytä summaa
        }
        else
        {
        // summaa ei löytynyt
        }

        palautat returnilla pointterin jättimäiseen tai minimaaliseen taulukkoon, jossa on summia ja epäsummia ja mitä vaan kummia laskentatulosteita samassa formaatissa. Vielä helpompaa on palauttaa koko taulukko, mutta sitäkin ennen pitää muistaa varata muistia tulosteet plus yksi paikka nullille, koska muuten tulee runtime-erroreita, vaikka kääntäjä kehuukin, että sulla on periaatteessa ihan hyvät koodit siinä niin.


      • Käsittämättömän helppoa
        helppoa kirjoitti:

        palautat returnilla pointterin jättimäiseen tai minimaaliseen taulukkoon, jossa on summia ja epäsummia ja mitä vaan kummia laskentatulosteita samassa formaatissa. Vielä helpompaa on palauttaa koko taulukko, mutta sitäkin ennen pitää muistaa varata muistia tulosteet plus yksi paikka nullille, koska muuten tulee runtime-erroreita, vaikka kääntäjä kehuukin, että sulla on periaatteessa ihan hyvät koodit siinä niin.

        on palauttaa rakenne eli struktuuri, jossa epäsummia ja summia esittävien liukulukujen lisäksi on pikanttina detaljina eli yksityiskohtana suvun valokuva-albumista mummia esittäviä kuvia, että ne näkee ne.


      • Aika helppoa
        Käsittämättömän helppoa kirjoitti:

        on palauttaa rakenne eli struktuuri, jossa epäsummia ja summia esittävien liukulukujen lisäksi on pikanttina detaljina eli yksityiskohtana suvun valokuva-albumista mummia esittäviä kuvia, että ne näkee ne.

        funktiosta palauttaa vaikka kuinka kummallisen luokan ilmentymän, että siinähän voi tollai tähtitissilläkin pyöritellä vaikka Ensikopeloija-Britannikaa ja Vikipetiaa ihan kokonaisuudessaan, jos ne kerran kuuluu siihen tosi kummallisen luokan määrittelyyn, jos vaan muistikammat ja kovalevyjen heittovapit piisaa. No ei siinä nyt tietysti kokoaikaa tähtitissillä tartte, kun sehän onkin vähän parametrimäistä, mutta jos sä palautatkin tähtitissin sieltä funktiosta, etkä sitä parametrattua Ensikopeloija-Britannikaa ja Vikipetiaa, niin sehän on käytännössä melkein muuta kuin parametrin palauttelua. Mutta, jos sä esmes määritteletkin tosi hyvii frendei, niin sitten sä voit yhdellä returnilla palauttaa parametreistä viisveisailematta mitä vaan siitä funktiosta.


    • läksipää

      #include

      void palauta(float x, float y, float *sump);

      int
      main(void)
      {
      float luku1,
      luku2,
      summa;

      printf("\nAnna luku 1 > ");
      scanf("%f", &luku1);

      printf("\nAnna luku 2 > ");
      scanf("%f", &luku2);

      palauta(luku1, luku2, &summa);

      printf("\nSumma on %.2f ", summa);

      return 0;
      }

      Tuossa korjauksia (olipa monta) - kokeile nyt toteuttaa palauta-aliohjelma.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Haluatko että unohdan sinut kokonaan

      Siihen suuntaan ollaan menossa, nyt jo. Ja ehkä parempi näin, niin ei kulu energiaa hukkaan mahdottomuuteen. Ja vaikka j
      Ikävä
      78
      1160
    2. Millä nimellä

      kutsut kaivattuasi omassa mielessäsi?
      Ikävä
      42
      814
    3. Pisa-tulokset.....

      Tuoreen tutkimuksen mukaan suomalaisten osaaminen on edelleen OECD-maiden keskitasoa parempaa. Kantaväestön oppilaiden
      Maailman menoa
      234
      694
    4. Haapaveden upea kurvikuningatar

      No nyt on kyllä mahtava uutinen että Haapaveden rohkea ja toimelias nainen ja yrittäjä on päässyt finaaliin kurvikuninga
      Haapavesi
      53
      614
    5. Meinasi nainen mennä pasmat sekaisin

      Rupesin vapisemaan, kun huomasin sinut. Mutta sain sentään juuri ja juuri koottua itseni, etten ihan häpäissyt itseäni.
      Ikävä
      35
      561
    6. Sinulle viestiä

      Me sitten oikeasti tutustutaan ensin!!
      Ikävä
      45
      538
    7. Uskaltaisitko ihana nuorempi nainen lähettää

      WhatsApp -viestiä, jos sulla on mun numero. Olisin ihan haltioitunut... Tykkään ja kaipaan ❤️❤️
      Ikävä
      76
      526
    8. Tiedät että on

      Tunteita yhä ja edelleen. Ehkä molemmin puolin.
      Ikävä
      23
      488
    9. Jos ajattelit että

      Annan anteeksi niin en anna.
      Ikävä
      25
      464
    10. 34
      455
    Aihe