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;
}
Palautus parametrien kautta?
6
610
Vastaukset
- 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
Ranskan vasemmistojohtaja: "Kyllä, meneillään on suuri väestönvaihto!"
Ranskan vasemmistojohtaja Jean-Luc Mélenchon järkytti myöntämällä avoimesti sen, mitä tiedotusvälineet ovat pitkään pitä1002489Valion maitotehtaalla kapina
Ilmastonmuutoksesta, eläinten hyvinvoinnista ja ympäristön saastumisesta huolestuneet eläinkapinalliset estävät panssa522313SDP haluaa tappaa maaseudun - bensan hinta mahdollisimman korkealle
Maaseudulla auto on välttämätön asia, ja lähes kaikilla on bensa-autot. Kuinka tyhmä pitää olla jos äänestää demareita?1632075Päivän Riikka: polttoöljyn hinta räjähti
Näyttää tuo putinismi ilmenevän persuissa myös Suomen yrittäjien kampittamisena. Polttoöljy on se katalyytti, joka pitää171841Helsingin yllä valopalloja
https://www.iltalehti.fi/kotimaa/a/1508be00-28c9-4156-83dc-0be5e7aa3066 "Helsingin taivaalla lensi lauantaina puolen yön951435Kovasti on hävittäjiä ilmassa. Nytkö se alkoi?
Onko nyt sota ?? `Vai harjoituksiako vain? Hävittäjät pörrää kovasti.811255HÄLYYTYS!!
Ukraina se hyökkää jo Suomen maaperälle. https://www.iltalehti.fi/kotimaa/a/645b83ce-e074-4f00-8b99-245d01b38a363161179Helsingin yllä lensi yöllä jotain outoa puolen yön aikaan valopalloja
Poliisi on saanut tapauksesta yhden havaintoilmoituksen. Valopalloja oli noin parikymmentä ILtalehdessä on video tapah1061039- 791033
Nyt Zelenskyi pommittaa drooneillaan jo Suomea!
Kouvola kohteena: https://yle.fi/aihe/tekstitv?P=107225927