Olen edennyt itseopiskelu kurssissani tällaiseen tehtävään. En nyt oikein pääse lainkaan liikkeelle tässä tehtävässä. Voisiko joku neuvoa alkuun...
Tämmöiset funktiot tein ja koitin niitä tarjota huonolla menestyksellä
int tulosta_matriisi(int matriisi) { for(int i=0; i<5; i++) { for(int j=0; j<5; j++) cout << matriisi[i][j] << " "; cout << endl; } int laske_summa(summa) { for(int i=0; i<5; i++) { for(int j=0; j<5; j++) summa = summa+matriisi[i][j]; return summa; }
Alla oleva C++ -ohjelma lukee tiedostosta matriisi.txt kokonaislukutaulukon sijoittaen sen 5x5 taulukkoon (matriisi[5][5]). Ohjelma tulostaa matriisin näytölle, laskee alkioiden summan ja tulostaa summan näytölle hyödyntäen funktioita tulosta_matriisi() ja laske_summa().
Sinun tehtävänä on laatia em. funktiot. Rivillä sijaitsevat arvot erotellaan välilyönnein. Huomaa, että tiedostojen käsittely ei kuulu varsinaisesti kurssin aihealueeseen.
#include <iostream> #include <fstream> using namespace std; void tulosta_matriisi(int matriisi[5][5]); int laske_summa(int matriisi[5][5]); int main(void) { int matriisi[5][5]; int summa; ifstream luku("matriisi.txt"); if (!luku){ cout << "Tiedoston avaaminen epäonnistui..."; } else { for (int y=0; y<5;y++){ for (int x=0;x<5;x++){ luku >> matriisi[y][x]; } } luku.close(); cout << "Matriisi:" << endl; tulosta_matriisi(matriisi); summa = laske_summa(matriisi); cout << "Alkioiden summa: " << summa << endl; } }
Esimerkkitulostus
Matriisi:32 32 2 23 33 3 2 33 332 32 42 43 44 32 31 83 86 56 545 44 33 37 38 39 30 Alkioiden summa: 1707
Nuo ensimmäiset tekemäni funktiot oli kyllä niin hukassa, että pakko laittaa tämän hetkiset väkerrykset vaikka ratkaisua ei olekkaan löytynyt. Olen pyöritellyt noita vaikka miten päin ja en vain saa menemään läpi.
Tässä tuomio jonka saan kääntäjästä
code.cpp: In function `int laske_summa(int)':
code.cpp:46: error: invalid types `int[int]' for array subscript
code.cpp: At global scope:
code.cpp:49: error: parse error before `return'
void tulosta_matriisi(int matriisi[5][5]) { for(int i=0; i<5; i++) { for(int j=0; j<5; j++) cout << matriisi[i][j] << " "; cout << endl; } return; } int laske_summa(int matriisi) { int summa = 0; for(int i=0; i<5; i++) for(int j=0; j<5; j++) summa = summa+matriisi[i][j]; cout << endl; } return summa; }
Kiitos virtuaalisesta tuesta kaikille..
Sainpa vihdoin funktiot pelaamaan vaikka aika lailla kokeilemalla loppujen lopuksi meni.
void tulosta_matriisi(int matriisi[5][5]) { for(int i=0; i<5; i++) { for(int j=0; j<5; j++) cout << matriisi[i][j] << " "; cout << endl; } return; } int laske_summa(int matriisi[5][5]) { int summa = 0; for(int i=0; i<5; i++) for(int j=0; j<5; j++) summa = summa+matriisi[i][j]; cout << endl; return summa; // en ymmärrä miksi tämä pitää ollaa aaltosulun sisällä ja tuossa toisessa ei tarvi }
Funktiotko nyt siis toimivat? Edelleen noissa on joitain kummallisuuksia. Miksei muuttujia i ja j määritellä? Mikä on "cout << endl;" -rivin tarkoitus summan laskemisessa?
hunajavohveli kirjoitti:
Miksei muuttujia i ja j määritellä?
Määritelläänpäs. C++ ja C99 sallivat muuttujan määrittelyn for-silmukan alussa, huomaa int
. Jälkimmäinen kommentti sen sijaan on kyllä aivan aiheellinen.
Metabolix kirjoitti:
huomaa
int
.
Olen nähtävästi tullut sokeaksi. :)
Vaikka tuleekin hiukan turha viesti, mutta menkään: Missä on sisennykset! Ei tuota koodia pysty lukemaan :<
kermiitti kirjoitti:
return summa; // en ymmärrä miksi tämä pitää ollaa aaltosulun sisällä ja tuossa toisessa ei tarvi
Taitaa olla lähinnä sotkuisen merkkauksen syytä. Minusta return on samassa paikassa molemmissa, kun katselee koodia sulkujen ja sisennysten kanssa. Tässä on hiukan suositeltavampi tapa merkitä samat funktiot:
void tulosta_matriisi( int matriisi[5][5] ) { for( int i = 0; i < 5; i++ ) { for( int j = 0; j < 5; j++ ) { cout << matriisi[i][j] << " "; } cout << endl; } return; } int laske_summa( int matriisi[5][5] ) { int summa = 0; for( int i = 0; i < 5; i++ ) { for( int j = 0; j < 5; j++ ) { summa = summa + matriisi[i][j]; } cout << endl; } return summa; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.