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
637
Vastaukset 6
- 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
- 1011613
Henkilöauto ajoi puuhun Suomussalmella
Henkilöauto ajoi puuhun Suomussalmen torin laitamilla. Poliisi epäilee tutkivansa tapausta. Silminnäkijä391165Kattoikkuna puuttui - vai puuttuiko sittenkään?
Tönölään ei saatu mökkejä, kun kattoikkunasta oli pula. Näyttää konkurssihakemus tulleen kuitenkin 31.8., joten kattoikk23930Petteri A-studiossa: "Ihmiset ovat alkaneet saada töitä" ..mitä vitt..
Missä todellisuudessa toi Orpo oikein elää, Suomen työttömyys 2000-luvun ja EU/OECD-maiden korkein tuplat niiden keskita164771Kajaanissa on kadoksissa 27vuotias nainen.
Poliisin tiedoteessa on ,että 1.9.2026 katosi kajaanissa 27vuotias nainen. Kuva löytyy ja tiedot pituudesta ,iästä yms.13740Nythän todellisuus on kuitenkin se
että miehen täytyy tehdä miehen työ. Olla mies. Naisen täytyy tehdä naisen työ. Olla nainen. Voimme puhua pehmeitä ja200695- 46679
Kuka oli kuskina
Volvo suistunut päin koivua torin laidalla? Oliko vauhtia liikaa vai sairaskohtaus vai humala?13657Mies sun käytös satutti...
Mahdatko sitä ymmärtää...😔 Olisipa kaikki mennyt hyvin. Vaikea tästä on enää mitään ihanaa rakentaa.39588- 33580