C++ tulostusongelma

Auttaisiko joku minua, koska en saa oikein tulostettua? Pitäisi saada tämä ohjelma tulostamaan posit.ja negat.lukujen lukumäärän sekä myös molempien keskiarvot.
Tässä ohjelmani:

#include
#include
void main()
{
int luku,pos=0,neg=0,possumma=0,negsumma=0;
int j;

for(j=0;j < 10; j)
{
printf("
Anna luku ");
scanf("%d",&luku);

if (luku>=0)
   {
   pos=pos ;
   possumma=possumma;
   }
    printf("%d",pos);

if (luku
16889
Äänestä

Muut lukivat myös

Vastaukset 16

Vanhimmat

Kannattaisi varmaan kysellä tuolta, kun siellä on omat foorumitkin c :alle. millä ohjelmalla muuten kirjoitat?

Äänestä
  • Käytän Borlandia (4.52)
    Tässäkö osoitteessa www.suomipelit.com voi saada vastauksia näihin kysymyksiin, en ole tuolla sivulla koskaan aiemmin käynyt.
    Aikaisemmin olen kyllä saanut näihin kysymyksiin vastauksia täältä, sitä toivon myös nyt.

    Äänestä

TÄSSÄ ON RATKAISU.

#include
#include
#include /* nyt käytössä cout */
int main()
{
int luku;
int pos=0,
neg=0,
possumma=0,
negsumma=0;
int poskarvo=0,
negkarvo=0;
int j;

for(j=0;j < 10;++j)
{
printf("Anna luku: ");
scanf("%d",&luku);

if (luku>=0)
{
pos=pos++;
possumma += luku;
}
else
{
neg=neg++;
negsumma += luku;
}
printf("Annoit luvun: %d
",luku);
}
poskarvo = possumma/pos;
negkarvo = negsumma/neg;

printf("Annoit %d positiivista lukua
",pos);
/*c++ tapa tulostaa */
cout

Äänestä
  • Kiitos neuvoista, en kylläkään saanut ohjelmaa toimimaan oikein.
    En saanut tulostumaan positiivisten ja negatiivisten lukujen lukumäärää enkä myöskään niiden keskiarvoja. Ohjelma vain kysyy lukua ja tulostaa annetun luvun, mutta jättää lopun tulostuksen pois.

    Äänestä

  • Apua! kirjoitti:

    Kiitos neuvoista, en kylläkään saanut ohjelmaa toimimaan oikein.
    En saanut tulostumaan positiivisten ja negatiivisten lukujen lukumäärää enkä myöskään niiden keskiarvoja. Ohjelma vain kysyy lukua ja tulostaa annetun luvun, mutta jättää lopun tulostuksen pois.

    Jos luet koodia niin huomaat, että kysytään 10 lukua niinkuin alkuperäisessä koodissasi oli, lopussa kun for looppi loppuu, niin lasketaan negatiivisten ja positiivisten arvojen keskiarvo.

    Jos esim. haluat oppia helposti c :aa suosittelen seuraavaa kirjaa:

    http://www.bookplus.fi/product.php?isbn=0130384747&bpsid=af378bae5949212921782aa2851cefe0

    Amazonista löytyy käyttäjien kommentteja ko. kirjalle:

    http://www.amazon.com/exec/obidos/ASIN/0130384747/qid=1065041080/sr=2-1/ref=sr_2_1/103-9350763-1409410

    Äänestä

Käytät -operaattoria väärin: "pos=pos " sijoittaa pos -muuttujaan pos -muuttujassa olevan arvon, jonka jälkeen se lisää pos -muuttujan sisältämää arvoa yhdellä. Se on siis sama kuin:
pos = pos;
pos = pos 1;

"possumma=possumma" ja "negsumma=negsumma" eivät myöskään ole kovin mielekkäitä.

Tässäpä esimerkki miten keskiarvon voi laskea.. joudut tosin tekemään itse muutokset että laskee erikseen positiivisten ja negatiivisten keskiarvon.

#include

void main()
{
   int i, luku, lkm=0, summa=0;

   for(i=0;i

Äänestä
  • Kiitos ohjeista.
    Laitoin ohjelmaan positiiviset ja negatiiviset luvut, mutta joku tässä vain on pielessä, koska ilmoittaa kahta virhettä, mutta en ymmärrä mitä ne on? Muuten tarkoittaako tuo lkm++, että tämä muuttuja++ laskee lukujen lukumäärän? Ja summa+ lause laskeeko se lukujen yhteenlasketun summan?

    Laitan tähän sen minun koodini:

    #include
    int main()
    {
    int i, luku, lkm=0, negsum=0, possum=0;

       for(i=0;i=0)
        {
          lkm++;
          possum+=luku
          printf("summa: %d ", possum);
          printf("lukumäärä: %d ", lkm);
          printf("keskiarvo: %f ",(float)possum/lkm);
          }
       if (luku

    Äänestä

  • Apua! kirjoitti:

    Kiitos ohjeista.
    Laitoin ohjelmaan positiiviset ja negatiiviset luvut, mutta joku tässä vain on pielessä, koska ilmoittaa kahta virhettä, mutta en ymmärrä mitä ne on? Muuten tarkoittaako tuo lkm++, että tämä muuttuja++ laskee lukujen lukumäärän? Ja summa+ lause laskeeko se lukujen yhteenlasketun summan?

    Laitan tähän sen minun koodini:

    #include
    int main()
    {
    int i, luku, lkm=0, negsum=0, possum=0;

       for(i=0;i=0)
        {
          lkm++;
          possum+=luku
          printf("summa: %d ", possum);
          printf("lukumäärä: %d ", lkm);
          printf("keskiarvo: %f ",(float)possum/lkm);
          }
       if (luku

    "lkm++" lisää muuttujan lkm arvoa yhdellä.

    "possum+=luku" lisää muuttujan possum arvoa muuttujan luku arvolla(Eli on sama kuin "possum = possum + luku").

    "(float)" lausekkeen edessä tarkoittaa sitä että seuraava luku muutetaan(castataan) float-tyyppiseksi eli siis desimaaliseksi. Printf lausekkeessa muotoilu %f tarkoittaa että printf odottaa tähän paikalle float -tyyppistä tietoa.

    Virheet tulevat puuttuvista ;-merkeistä.

    Varoitus tulee koska main -funktio on int tyyppiä, mutta ei kuitenkaan palauta mitään. Lisää main -funktion loppuun "return 0;"

    Muutoin ohjelma kyllä toimii muttei aivan odotetusti.. vielä pieni vika on mutta etköhän sen hoksaa :)

    Äänestä

  • keijo kirjoitti:

    "lkm++" lisää muuttujan lkm arvoa yhdellä.

    "possum+=luku" lisää muuttujan possum arvoa muuttujan luku arvolla(Eli on sama kuin "possum = possum + luku").

    "(float)" lausekkeen edessä tarkoittaa sitä että seuraava luku muutetaan(castataan) float-tyyppiseksi eli siis desimaaliseksi. Printf lausekkeessa muotoilu %f tarkoittaa että printf odottaa tähän paikalle float -tyyppistä tietoa.

    Virheet tulevat puuttuvista ;-merkeistä.

    Varoitus tulee koska main -funktio on int tyyppiä, mutta ei kuitenkaan palauta mitään. Lisää main -funktion loppuun "return 0;"

    Muutoin ohjelma kyllä toimii muttei aivan odotetusti.. vielä pieni vika on mutta etköhän sen hoksaa :)

    Olin ollut näköjään huolimaton,kun olin jättänyt noita puolipisteitä pois. Se pieni vika taitaa olla tuossa tulostusmuodossa luulisin....
    Olen koko illan tehnyt tuota ohjelmaa, varmaan iltapäivästä lähtien, alkaa jo olla puutuneet paikat.
    Annoit minulle tosi hyviä vastauksia, ymmärrän nyt paljon paremmin nuo kysymäni termit.
    Taidan huomenna jatkaa tuon ohjelman viilausta...alkaa jo väsyttää...
    Kiitos taas kerran, nimittäin olet aikaisemminkin auttanut minua näissä ongelmissa.

    Äänestä

  • Apua! kirjoitti:

    Olin ollut näköjään huolimaton,kun olin jättänyt noita puolipisteitä pois. Se pieni vika taitaa olla tuossa tulostusmuodossa luulisin....
    Olen koko illan tehnyt tuota ohjelmaa, varmaan iltapäivästä lähtien, alkaa jo olla puutuneet paikat.
    Annoit minulle tosi hyviä vastauksia, ymmärrän nyt paljon paremmin nuo kysymäni termit.
    Taidan huomenna jatkaa tuon ohjelman viilausta...alkaa jo väsyttää...
    Kiitos taas kerran, nimittäin olet aikaisemminkin auttanut minua näissä ongelmissa.

    Nyt minulla vasta välähti, että laitoin siihen negatiivisille luvuille lukumäärään oman muuttujan ja positiivisille luvuille lukumäärään myös oman muuttujan eli nyt se ohjelma vasta toimii niinkuin pitääkin. Tätä asiaa varmaankin tarkoitit, sillä hoksaamisella. Pitipä noin yksinkertaista asiaa miettiä kauan...taitaa jo niin väsyttää, ettei ajatukset enää pelaa...

    Äänestä

  • Apua! kirjoitti:

    Kiitos ohjeista.
    Laitoin ohjelmaan positiiviset ja negatiiviset luvut, mutta joku tässä vain on pielessä, koska ilmoittaa kahta virhettä, mutta en ymmärrä mitä ne on? Muuten tarkoittaako tuo lkm++, että tämä muuttuja++ laskee lukujen lukumäärän? Ja summa+ lause laskeeko se lukujen yhteenlasketun summan?

    Laitan tähän sen minun koodini:

    #include
    int main()
    {
    int i, luku, lkm=0, negsum=0, possum=0;

       for(i=0;i=0)
        {
          lkm++;
          possum+=luku
          printf("summa: %d ", possum);
          printf("lukumäärä: %d ", lkm);
          printf("keskiarvo: %f ",(float)possum/lkm);
          }
       if (luku

    Jos kyseessä on C :lla tehtävä juttu, niin mikset tulosta cout:lla printf:n sijaan ?

    Lisäksi kahden ifin käyttö on turhaa, sillä minkä tahansa luvun tapauksessa päädytään vain toiseen iffiin, joten parempi ja selvempi tyyli on

    if (luku>=0) {
    ...
    } else {
    ...
    }

    Kolmanneksi, lausekkeen lkm ; voi siirtää iffien yläpuolelle, sillä tämä sama lauseke ajetaan muutenkin molemmissa ifin haarassa.

    Äänestä

  • Mik kirjoitti:

    Jos kyseessä on C :lla tehtävä juttu, niin mikset tulosta cout:lla printf:n sijaan ?

    Lisäksi kahden ifin käyttö on turhaa, sillä minkä tahansa luvun tapauksessa päädytään vain toiseen iffiin, joten parempi ja selvempi tyyli on

    if (luku>=0) {
    ...
    } else {
    ...
    }

    Kolmanneksi, lausekkeen lkm ; voi siirtää iffien yläpuolelle, sillä tämä sama lauseke ajetaan muutenkin molemmissa ifin haarassa.

    Olen täysin aloittelija näissä jutuissa,joten en vielä ole käyttänyt tuota cout-termiä, vaikkakin olen ihmetellyt kaikkia oppikirjoja, joissa sitä on käytetty sekä myöskin cin-termiä, vastaako samaa kuin scanf? Olen yhdellä kurssilla, jossa olemme vain käyttäneet näitä printf- ja scanf- termejä.
    Kiitos neuvoista, ne ovat aina tärkeitä. Opin taas lisää asioita. On muuten kauhean kiva, että on tällainen keskustelusivu, jossa voi kysyä apua näistä ohjelmointiongelmista muilta.
    Varsinkin tällaiselle aloittelijalle se on tosi tärkeää....

    Äänestä

  • Apua! kirjoitti:

    Nyt minulla vasta välähti, että laitoin siihen negatiivisille luvuille lukumäärään oman muuttujan ja positiivisille luvuille lukumäärään myös oman muuttujan eli nyt se ohjelma vasta toimii niinkuin pitääkin. Tätä asiaa varmaankin tarkoitit, sillä hoksaamisella. Pitipä noin yksinkertaista asiaa miettiä kauan...taitaa jo niin väsyttää, ettei ajatukset enää pelaa...

    Sä olisit niinkuin päässyt jo tosi helpolla, jos olisit lukenut ton postaamani ratkaisun jossa homma on hoidettu, ja hommaisit jostain oppikirjan, ennenkuin tulet alkeita kyselemään.

    Äänestä

  • RATKAISU kirjoitti:

    Sä olisit niinkuin päässyt jo tosi helpolla, jos olisit lukenut ton postaamani ratkaisun jossa homma on hoidettu, ja hommaisit jostain oppikirjan, ennenkuin tulet alkeita kyselemään.

    Anteeksi, etten kokeillut ratkaisuasi niinkuin kerroit, olisin päässyt kyllä monta kertaa helpommalla, eikä aikaa olisi mennyt koko iltaa.
    Oppikirjojakin minulla on, mutta ei niistä aina tahdo löytää oikeaa ratkaisua.
    Kiitos vielä neuvoistasi, yritän seuraavalla kerralla toimia paremmin.

    Äänestä

  • Apua! kirjoitti:

    Olen täysin aloittelija näissä jutuissa,joten en vielä ole käyttänyt tuota cout-termiä, vaikkakin olen ihmetellyt kaikkia oppikirjoja, joissa sitä on käytetty sekä myöskin cin-termiä, vastaako samaa kuin scanf? Olen yhdellä kurssilla, jossa olemme vain käyttäneet näitä printf- ja scanf- termejä.
    Kiitos neuvoista, ne ovat aina tärkeitä. Opin taas lisää asioita. On muuten kauhean kiva, että on tällainen keskustelusivu, jossa voi kysyä apua näistä ohjelmointiongelmista muilta.
    Varsinkin tällaiselle aloittelijalle se on tosi tärkeää....

    C :n cin:llä voidaan lukea syötettä, vähän C:n scanf:n tapaan. Lisää tietoa vaikka osoitteista http://www.cplusplus.com/ref/ (kohta iostream library) ja http://www.cppreference.com/ .

    Äänestä

Keijo vastasikin jo aika hyvin noihin pääkohtiin.
Mutta pakko myöntää että en kyllä ymmärrä miten tuon ohjelman voi saada edes noin toimimaan. Sen verta käsittämätöntä logiikkaa tuossa on käytetty.
Ehh? Ei vain käsitä.

Pitkällisen mielessä suoritetun debuggauksen jälkeen ymmärsin tuon. Dodi, itsestäänselvää, mutta luulin tuon tekevän jotain ihan muuta.

Edes Apuva henkilö ei ehkä ole huomannut(Ainakaan siltä se ei näytä), että tuo tulostaa joka luupissa 2 lukua _peräkkäin_, positiiviset luvut ja negatiiviset. eli 34 meinaa kolmea positiivista ja nejää negatiivista syötettä. Lue ne keijon ohjeet esim tuosta = merkistä ja operaattorista myös.

Sitten se toinen onkelma, eli keskiarvo lasketaan luku / kuinka-monesta-luvusta-se-koostuu
eli vaikka 1 2 3 4 / 4 saadaan noiden lukujen keskiarvo, eliii possumma / pos.

Luin tämän viestin läpi, aika sillisalaattia mutta menkööt nyt.

Äänestä

Kommentoi aloitusta


Apua! kirjoitti:

Auttaisiko joku minua, koska en saa oikein tulostettua? Pitäisi saada tämä ohjelma tulostamaan posit.ja negat.lukujen lukumäärän sekä myös molempien keskiarvot.
Tässä ohjelmani:

#include
#include
void main()
{
int luku,pos=0,neg=0,possumma=0,negsumma=0;
int j;

for(j=0;j < 10; j)
{
printf("
Anna luku ");
scanf("%d",&luku);

if (luku>=0)
   {
   pos=pos ;
   possumma=possumma;
   }
    printf("%d",pos);

if (luku

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu