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

603

    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. Persut ja Tall poppy -syndrooma

      Persut ovat uhranneet käytännössä koko elämänsä lannistaakseen tai sabotoidakseen yksilöitä, jotka erottuvat joukosta ky
      Maailman menoa
      5
      4688
    2. Oot mahtava tyyppi

      En tiedä luetko palstaa. Koitan siitä huolimatta. Oot mun mielestä tosi erityinen tyyppi. Nopeesti taisin ihastua. Jot
      Ikävä
      43
      4508
    3. Orpo: Seuraavalla hallituksella ei ole yhtään enempää rahaa

      Valtiovarainministeriön virka-arvion mukaan julkisen talouden sopeutuksen tarve on noin kymmenen miljardia euroa ensi va
      Maailman menoa
      149
      3598
    4. Miksi vihereät ja vasemmisto haluavat tuhota tämän maan?

      He halusivat, että kannabis tulisi lailliseksi? - eikö kylliksi nuoria tuhota jo nyt huumeilla? - kannabis tuhosi minun
      Maailman menoa
      106
      3466
    5. Suomen kieli hiipuu vähitellen Vantaalla

      nykytahdilla jo joka kolmas vantaalainen on vieraskielinen 2030-luvun alussa. Maahanmuutto, suomalaisten alhainen synty
      Maailman menoa
      31
      3460
    6. Sofia servasi Pikku-Villen suvereenisti

      – Ihanko tosissaan tuleva sosiaali- ja terveysministeri hyökkää oppositiopuolueen puheenjohtajaa vastaan siksi, että täm
      Maailman menoa
      45
      2926
    7. Ikävän karkoitukseen klassikkokysymys

      Mikä biisi saa hymyn huulille ja ajatukset mukavasti siihen yhteen ja ainoaan? 🤩 Laita biisin sanat, älä linkkiä. Alo
      Ikävä
      12
      1050
    8. Pahimman luokan hasardi

      sellainen sinä olet. Sut pitäis peitellä varoituskolmioilla ja vilkkuvaloilla, rajata lippusiimalla ja varustaa silmälap
      Ikävä
      74
      877
    9. Elämäni rakkaus

      Sitä sinä olet minulle ollut. Siksi tämä on kai niin vaikeaa. Jos sinä luopuisit niin ehkä se tulisi luonnostaan sitten
      Ikävä
      63
      809
    10. Millainen mulle

      Sitten sopisi?
      Ikävä
      93
      752
    Aihe