Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Matriisifunktion luominen

kermiitti [04.11.2007 01:30:30]

#

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

kermiitti [04.11.2007 04:28:58]

#

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
}

hunajavohveli [04.11.2007 09:33:19]

#

Funktiotko nyt siis toimivat? Edelleen noissa on joitain kummallisuuksia. Miksei muuttujia i ja j määritellä? Mikä on "cout << endl;" -rivin tarkoitus summan laskemisessa?

Metabolix [04.11.2007 09:45:53]

#

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.

hunajavohveli [04.11.2007 15:49:18]

#

Metabolix kirjoitti:

huomaa int.

Olen nähtävästi tullut sokeaksi. :)

ZcMander [04.11.2007 15:50:40]

#

Vaikka tuleekin hiukan turha viesti, mutta menkään: Missä on sisennykset! Ei tuota koodia pysty lukemaan :<

LaNu [04.11.2007 21:44:01]

#

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;
}

Vastaus

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

Tietoa sivustosta