Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Taulukon käsittelyä ja osoittimia

KimmoK [04.01.2007 19:03:49]

#

Tällainen on toinen järkeilyn alla oleva koodi:
Alla esitettävälle C-ohjelmalle syötetään kokonaislukuja komentoriviargumentteina. Saatuaan tarvittavat arvot, ohjelma kutsuu aliohjelmaa ”laske_ja_tulosta”, jonka tehtävänä on ottaa vastaan pääohjelman välittämä taulukko ja sen koko, tulostaa luvut näytölle, sekä tulostaa lukujen summa näytölle.

#include <stdio.h>
#include <stdlib.h>

void laske_ja_tulosta(int *, int);

int main(int argc, char *argv[])
{
  int x, summa=0, koko=5, taulukko[5];
  if(argc == 6){
  /* Ohjelman nimi ja komentoriviltä annetut parametrit */
    for(x=0;x<argc-1;x++){
      taulukko[x] = atoi(argv[x+1]);
    }
    laske_ja_tulosta(taulukko, koko);
  }else{
    printf("Virheellinen määrä komentoriviargumentteja\n");
  }
  return 0;
}

Sinun tehtävänäsi on kirjoittaa aliohjelma "laske_ja_tulosta". Esimerkkitulosteesta näet, kuinka luvut tulostetaan. Pääohjelma pitää sisällään asioita, joita emme käsittele tällä kurssilla, mutta sinun tarvitseekin tehdä vain pääohjelman apuna toimiva aliohjelma.
Esimerkkitulostus


Taulukon alkiot: 23 54 1 83 47
Summa = 208

Tällaista koodia olen saanut aikaiseksi, mutta kun ei vaan aukene ni ei aukene. Hieman helppiä jos vois saada.

laske_ja_tulosta(taulukko, koko)
{
int kokosumma;
kokosumma == taulukko[0]+taulukko[1]+taulukko[2]+taulukko[3]+taulukko[4]; /*Laskee taulukon yhteen */
printf("Taulukon alkiot: %i %i %i %i %i \n",taulukko[0],taulukko[1],taulukko[2],taulukko[3],taulukko[4]); /*Tulostaa taulukon sisällön */
prinft("Summa = %i\n" ,kokosumma); /*Tulostaa summan */
}

Megant [04.01.2007 19:16:49]

#

Sinun pitää määritellä funktion palautustyyppi ja parametrit. (Esimerkiksi int laske_yhteen(int luku1, int luku2))
==-operaattorilla ei sijoiteta, vaan sillä kokeillaan yhtäsuuruutta.
=-operaattorilla sijoitetaan.

Ja tosiaan, jos tuota koko-parametriä aiotaan käyttää mihinkään, tarvitaan looppia.

Lumpio [04.01.2007 19:18:22]

#

Ainakin ensimmäisenä huomaisin että laske_ja_tulosta-funktioltasi puuttuu palautusarvon ja parametrien tyypit sekä käytät ==-operaattoria (vertailu) =-operaattorin (asetus) sijaan.

Ja luuppikaan ei olisi pahitteeksi.

Läksyt on muuten tarkoitus tehdä itse.

Edit: Hidas

Legu [04.01.2007 19:28:16]

#

Funktiosi määrittely on ensinnäkin puutteellinen. Muuta se muotoon

void laske_ja_tulosta(int * taulukko, int koko)

lainaus:

kokosumma == taulukko[0]+taulukko[1]+taulukko[2]+taulukko[3]+taulukko[4]; /*Laskee taulukon yhteen */

Tuo == on vertailuoperaattori. Käytä = sijoittamiseen.

Noilla muutoksilla nykyinen koodi taitaa toimia, tosin siinä tuolla "koko"-parametrillä ei tehdä mitään, vaan oletat että taulukon alkioita on viisi.

En nyt tiedä pitäisikö tehdä valmista koodia, mutta menköön.
Jokaisen kuuluisi kyllä tehdä omat kurssitehtävänsä.

void laske_ja_tulosta(int * taulukko, int koko)
{
    int i = 0; //looppi kasvatus
    int summa = 0; //summa
    printf("Taulukon alkiot: ");

    //käydään läpi koko taulukko
    for (i = 0; i < koko; i++) {
        // kasvatetaan summaa taulukon alkiolla
        summa += taulukko[i];
        // tulostetaan taulukon alkio
        printf("%i ", taulukko[i]);
    }
    // tulostetaan lopuksi summa
    printf("\nSumma = %i\n", summa);
}

Toivottavasti en nyt puhunut mitään väärää tietoa.

EDIT: Hitain
EDIT2: KimmoK yritä tehdä tästä lähtien itse tehtäväsi, äläkä pastea tehtävänantoa suoraan tänne. Apua kyllä voi toki pyytää.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta