Voisiko joku neuvoa, kuinka c-kielellä koodataan
seuraavanlainen juttu. Kysytänn määrä ja hinta, joista pitäisi tulostaa sitten summa ja keskiarvo.
Harjoittelijalla meni sormi suuhun.
Kiitti ohjeista.
seuraavanlainen juttu. Kysytänn määrä ja hinta, joista pitäisi tulostaa sitten summa ja keskiarvo.
Harjoittelijalla meni sormi suuhun.
Kiitti ohjeista.
Vastaukset 7
Vanhimmat
Onko tämä joku koulun harjoitustyö joka sinun pitäisi tehdä ihan itse eikä antaa muiden tehtäväksi?
(Me muuten tehdään kassakoneita. Ja ne on koodattu C-kielellä. Siellä pyörii monenmoisia prosesseja kuten printteridrivereitä, näytönohjausta, kortinvarmistusta jne.)
No tässä kuitenkin vihje: scanf(), printf() I/O:na. Matikan osaat varmaan itse: summa = uusin_arvo jne.
Autetaan nyt sitten:
Olen itsekkin täyttä jätettä näissä koodaus hommissa, eli autetaanpa alkuun. Tämä on aika helppo:
Seuraavan tehtävän saat tehdä itse.
#include
#include
void main(void)
{
int maara,hinta,ka,summa;
clrscr();
printf("Anna määrä:
");
scanf("%d",&maara);
printf("Anna hinta:
");
scanf("%d",&hinta);
ka = (maara+hinta)/2;
summa = maara+hinta;
printf("
Keskiarvo on: %d
",ka);
printf("Summa on: %d",summa);
getch();
}
Sinulla on omituinen huumori. Nauroin makeasti.
int kok;
float ka,summa;
#include
int main(void)
{
int maara;
float hinta;
char cont[1];
while (1) {
printf("Anna määrä:
");
scanf("%d",&maara);
printf("Anna hinta:
");
scanf("%f",&hinta);
kok = kok+maara;
summa = summa+(maara*hinta);
ka = summa/kok;
printf("Summa %2f ja ka %f tähän mennessä
",summa,ka);
printf("haluatko antaa lisää (y/n)?");
scanf("%s",cont );
if ( strcmp(cont, "n" )==0 ) {
printf("
Keskiarvo on: %f
",ka);
printf("Summa on: %f
",summa);
exit(0);
}
}
}
On siinä mulla varsinainen guru.
Koodi on kovin tehotonta.
Ensinnäkin ei koskaan näin:
kok = kok+maara;
vaan näin:
kok += maara;
Ajattele jos esim "kok" muuttujan paikalla olisi joku indeksoitu muuttuja ja indeksi voisi olla jokin monimutkainen lauseke,
niin koko härveli tulisi laskettua kahteen kertaan.
Toiseksi ei näin
if ( strcmp(cont, "n" )==0 ) ...
vaan tässä tapauskessa näin:
if(cont[0] == 'n') .....
Tämä on PALJON nopeampi ja kompaktimpi.
Ei näin:
printf("
Keskiarvo on: %f
",ka);
printf("Summa on: %f
",summa);
vaan näin:
printf("
Keskiarvo on: %f
"
"Summa on: %f
",ka, summa);
Ja tähän sivuhuomautus:
Jos printtauslakseen joutuu aloittamaan rivinsiirtomerkillä, niin ohjelman rakennne ei ole kovin hyvä. Käytännössä voi tulla ongelmia monimutakisemmissa tapauksissa jos tätä kohtaa edeltää jotain ehdollisia tulostuksia.
Koodissa on muutakin huomautetavaa jota ohjelmoiti GURULTA ei odottaisi. Jopa virhe. cont[1]:en ei mahdu koko stringiä, vain yksi merkki.
Miksi muuttujat kok, ka ja summa on määritelty globaaleiksi muuttujiksi?
Miksi jo tulostetut keskiarvo ja summa tulostetaan uudestaan lopetettaessa?
jne, jne, ...
Laita kysymykseesi kuvaavampi otsikko.
Esim "apua C-kielen perusteisiin", niin joku asiasta tietävä (tai tietämätön) löytää helpommin kysymyksesi.