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

623

    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. Veroaste on Suomessa viitisen prosenttiyksikköä liian matala

      Veropohjaa on rapautettu käytännössä koko kulunut vuosituhat, jonka vuoksi valtion menoja on jouduttu rahoittamaan velka
      Maailman menoa
      120
      3028
    2. EU komissio - EU-elpymisrahoja voidaan käyttää TILAPÄISESTI väärin!

      Espanja ohjasi miljardeja euroja – Nyt EU-komissio teki yllättävän paljastuksen Skandaaliksi noussut Espanjan EU-rahoje
      Maailman menoa
      35
      1415
    3. Kultasi eka kirjain? Kuka haluaa

      A haluaa J
      Ikävä
      104
      1279
    4. Kristillinen kaste annetaa upotuskasteena

      Kristillinen upotuskaste perustuu juutalaiseen mikve-kasteeseen, jossa upottaudutaan veden alle kokonaan. Paavali vertas
      Kaste
      162
      1027
    5. Koko kansan kaste Punaisen meren ylityksen aikana

      Koko Israelin 2,5 milj.kansa sai kasteen ja Pyhän Hengen lahjan ylittäessän Punaisen meren. 1.Kor.10 1 Sillä minä en ta
      Kaste
      366
      1017
    6. Empaattisuus ja suoruus.

      Tässä tullut noita pehmeitä asioita pohdittua, mutta toisaalta olen myös yksinkertainen mies. Pidän suoruudestakin. Mi
      Sinkut
      133
      998
    7. Nainen, mikset lähetä

      miehelle viestiä? Tiedän, että sulla on asiaa ja kysyttävää.
      Ikävä
      60
      937
    8. Ehkä vähän

      Rakastunut sinuun
      Ikävä
      41
      747
    9. Sä saat mut tuntemaan

      Jotain sellaista mitä ei saisi tuntea mutta må en mahda tälle mitään. Mulla on ikävä niitä meidän katseita ja sitä tunne
      Ikävä
      22
      723
    10. Tunnettujen vanhempien lapset, tv-sarja

      Tunnettujen vanhempien lapset saa tv-sarjan. Juurihan yksi heistä oli MTV:ssä 6.5.26 kertomassa ettei halua julkisuutta
      Kotimaiset julkkisjuorut
      112
      681
    Aihe