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

636

    Vastaukset

    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. Missä tapasit kaivattusi

      ensimmäisen kerran?
      Ikävä
      62
      905
    2. Aattelin nainen

      Jos oppisin puhumaan. Rehellisesti, rennosti ja hetkessä.
      Ikävä
      119
      704
    3. J-mies, miten voit olla niin varma siitä

      että minä olen juuri se nainen, kenen ajattelet ja haluat minun olevan, se kenelle avaat ajatuksiasi ja tunnustat syvimp
      Ikävä
      79
      680
    4. Mikä on loppuelämäsi suunnitelma

      Kaivattuasi kohtaan? Olet päättänyt jotain?
      Ikävä
      39
      630
    5. Jani Wickholm on kuollut

      Tämä oli Janilta hieno laulu. https://youtu.be/72wWxqWon7k?is=5HKdV-H8yY466YXm
      Kotimaiset julkkisjuorut
      36
      621
    6. Uskaltaisitko vielä

      Lähestyä vai et kaivattuasi?
      Ikävä
      86
      547
    7. Alan pikkuhiljaa olemaan sinut

      sen asian kanssa, että en tule enää löytämään ketään. Mikä tilanne sinulla on ja miten olet koittanut ratkaista tilante
      Sinkut
      110
      535
    8. Pystytkö pitämään

      Taukoa ja eroa ihan hyvillä mielin vai tekeekö tiukkaa
      Ikävä
      41
      481
    9. Mennään näin sitten

      Ettei kohdata enää.
      Ikävä
      37
      475
    10. Mitä toivot

      Kaivattusi suhteen?
      Ikävä
      70
      456
    Aihe