Tehtävänä on:
Alla on alustettu 5 x 5 kokonaislukutaulukko:
int matriisi[5][5] = { 4, 6, 25, 88, 5, 34, 5, 300, 4, 65, 78, 43, 11, 90, 125, 98, 585, 12, 63, 21, 45, 35, 9, 5, 1 };
Kopioi alustus ohjelmaan, joka tulostaa taulukon näytölle, sekä laskee taulukon alkioiden summan. Kunkin rivin perään tulostetaan rivinvaihtomerkki.
Vihje:
Ohjelman toteuttaminen onnistuu hyödyntämällä sisäkkäisiä for-lauseita. If-lauseella voit tarkistaa, tarvitaanko rivinvaihtomerkkiä. Matriisin riveillä luvut tulee erottaa toisistaan yhdellä välilyönnillä.
Esimerkkitulostus
Taulukon:
4 6 25 88 5
34 5 300 4 65
78 43 11 90 125
98 585 12 63 21
45 35 9 5 1
alkioiden summa on 1757
En tajuu näistä matriiseista yhtään mitään. Voisko joku auttaa tässä vaikka kirjoittamalla tekstinä tota ohjelman kulkuu ja koittasin itte koodata sitä, että oppiski samalla jotai.
(Mod. Edit. Kooditagit, jo kolmas kerta! Yritä nyt edes vähän.)
Alustetaan summalaskuri nollaksi Alustetaan 5x5-matriisi Käydään läpi kaikki taulukon rivit { Käydään läpi kaikki taulukon sarakkeet { Tulostetaan vuorossa oleva alkio Jos vuorossa on rivin viimeinen alkio { Tulostetaan rivinvaihto } Lisätään alkion arvo summalaskuriin } } tulostetaan summalaskurin arvo
Unohda se matriisikäsite ja ajattele taulukko taulukkona :)
Ensinnäkin taulukko on väärin alustettu, jokaisen rivin pitäisi olla vielä uudestaan aaltosuluissa:
int taulu[2][2] = { {1, 2}, {3, 4} };
Toiseksi, kun kerran VIOPEa käytät, niin käytä myös. Ihan oikeasti, vaikka se minustakin on sinänsä huonosti toteutettu järjestelmä ja kaikkea, niin kyllä siellä silti asiat opetetaan. Ja jos ei siellä, niin käytä vaikka Googlea ja etsi jokin C-opas — tai lue vaikka Ohjelmointiputkan C-opasta, jonka toinen ja kolmas osa opettavat tarvitsemasi asiat.
alusta taulukko (5x5) alusta summa = 0 silmukka riveille: silmukka sarakkeille: tulosta luku lisää luku summaan jos ei ole rivin viimeinen: tulosta rivinvaihto tulosta rivinvaihto tulosta summa
Siinäpä oppia sisennyksestä samalla. ;)
#include <stdio.h> int main() { int matriisi[5][5] = { 4, 6, 25, 88, 5, 34, 5, 300, 4, 65, 78, 43, 11, 90, 125, 98, 585, 12, 63, 21, 45, 35, 9, 5, 1 }; int summa = 0; int x,y,luku; for(y = 0; y < 5; y++) { for(x = 0; x < 5; x++) { printf(" %d ",luku); summa = summa + luku; if ( x == 5 ){ printf(" \n "); } printf("Taulukon: %d alkioiden summa on %d",matriisi[y][x],summa); } } }
Jotain tommosta yritin säheltää mut ei tos taida ol mitää järkee? :D
Tuossa on ensinnäkin taulukon alkuarvojen asetus edelleen pielessä, katso Metabolixin esimerkki. Lasket tuossa nyt summaan koko ajan muuttujaa luku, mutta luvun arvoa ei muuteta mitenkään. Tarkoituksesi on lisätä summaan jokaisella kierroksella matriisi[x][y]. Ehtolause rivivaihdolle on turha, jos hoidat rivivaihdon tulostamisen heti sisemmän silmukan jälkeen. Summan tulostaminen kannattaa ottaa pois silmukasta ja tulostaa vasta ohjelman lopussa. Mitä yrität tehdä antamalla matriisi[y][x]:n parametriksi viimeiselle printf():lle?
Yritän saada tuon taulukon tulostumaan näkyviin esimerkkitulostuksen mukaisesti tolla matriisi[y][x] jutulla mutta en tiä meneekö se edes noin.
Esimerkkitulostus
Taulukon: 4 6 25 88 5 34 5 300 4 65 78 43 11 90 125 <---- tuon taulukon 98 585 12 63 21 45 35 9 5 1 alkioiden summa on 1757
#include <stdio.h> int main() { int matriisi[5][5] = {{4, 6, 25, 88, 5}, {34, 5, 300, 4, 65}, {78, 43, 11, 90, 125}, {98, 585, 12, 63, 21}, {45, 35, 9, 5, 1}}; int summa = 0; int x,y,luku,taulukko; taulukko = matriisi[5][5]; summa = summa + matriisi[y][x]; printf("Taulukon: %d alkioiden summa on %d",taulukko,summa); return 0; }
Koodinpätkä on nyt tommonen mut en kyl tiä yhtää millai tää homma tehdää...
Niin... Mitäs tämä ohjelma nyt tekeekään:
#include <stdio.h> int main() { // Ohjelma luo 5*5 matriisin (taulukon). int matriisi[5][5] = {{4, 6, 25, 88, 5}, {34, 5, 300, 4, 65}, {78, 43, 11, 90, 125}, {98, 585, 12, 63, 21}, {45, 35, 9, 5, 1}}; // Selvä... Alustetaan summa nollaksi. int summa = 0; // Jahas, nyt luodaan neljä alustamatonta muuttujaa, todennäköisesti ei kovin hyvä juttu. int x,y,luku,taulukko; // Asetetaan kokonaislukumuuttujan taulukko arvoksi matriisi-taulukon alkio [5][5], mutta koska C:ssä taulukoiden indeksointi lähtee nollasta, niin tuollaista alkiota ei ole olemassakaan! taulukko = matriisi[5][5]; // Lisätään summa-muuttujaan matriisi[y][x], mutta hetkinen... x ja y ovat alustamatta! summa = summa + matriisi[y][x]; // Sitten tulostetaan... mutta luultavasti ihan mitä sattuu. printf("Taulukon: %d alkioiden summa on %d",taulukko,summa); return 0; }
Koodatessa(kin) kannattaa ainakin aluksi oikeasti ajatella
a) mitä haluaa koodin tekevän
b) mitä kirjoitettu koodi oikeasti tekee
c) miksi koodi tekee jotain mitä sen ei (mielestäsi) pitäisi tehdä.
Ja sitten vielä vinkkejä edellä olevien virheiden korjaamiseen:
Mikä taulukko- ja luku-muuttujien tarkoitus on? (Niitä ei tarvitse, joten ne voi poistaa kokonaan).
Taulukon tulostaminen ja summan laskeminen:
int x,y; int summa = 0; for (x = 0; x < 5; ++x) { for (y = 0; y < 5; ++y) { // Lisää summaan matriisin alkio [x][y] (summa = summa + matriisi[x][y];) // Tulosta matriisin alkio [x][y] (matriisi[x][y]) ja välilyönti sen jälkeen. } // Tulosta rivinvaihto } // Tulosta muuttujan summa-arvo.
No nyt sain toimimaan en tajunnu että se taulukkko tulostuu siihen niin helposti. Kiitos kaikille avusta!
Aihe on jo aika vanha, joten et voi enää vastata siihen.