Forum » Programiranje » Vsota določenih elementov matrike [C]
Vsota določenih elementov matrike [C]
RatedR ::
Pozdrav, rad bi izračunal vsoto določenih elementov v matriki 4x4, v mojem primeru po diagonali s slike:
Odebeljene številke se torej seštejejo, spodaj je koda samo nevem kaj prišteti iRezultatu:
Probal sem oba števca pa pri nobenem ne pride pravilen rezultat.
Odebeljene številke se torej seštejejo, spodaj je koda samo nevem kaj prišteti iRezultatu:
for(iStevec1 = 0; iStevec1 < 4; iStevec1++) { for(iStevec2 = 0; iStevec2 < 4; iStevec2++) { iRezultat = iRezultat + }
Probal sem oba števca pa pri nobenem ne pride pravilen rezultat.
videc ::
Seštevaš samo elemente, kjer sta števca enaka, torej ti manjka en if stavek, nato pa sešteješ elemente v tabeli[][], kjer je indeks v prvem [] enak indeksu v drugem [].
Invictus ::
Glede na to da sešteva po diagonali kvadratne matrike, rabi samo en števec ...
Kje imaš definirano tabelo?
Kje imaš definirano tabelo?
"Life is hard; it's even harder when you're stupid."
http://goo.gl/2YuS2x
http://goo.gl/2YuS2x
RatedR ::
Okej tole razumem brez problemov in deluje tudi:
_________________________________________________________________________________
Prej ko sem objavil ta problem nisem mogel compilat, ker sem imel telo ki sešteva elemente po diagonali v funkciji, torej problem je bil ker nisem mogel compilat drugače bi napako sam odpravil.
Tu je cela koda s funkcijo, ki sešteva elemente na diagonali:
http://pastebin.com/tzEEKzXJ
Napako javi ko kličem funkcijo v 23.vrstici, 23 [Warning] passing arg 1 of `VsotaDiagonal1' from incompatible pointer type
Kazalcev še ne znam uporabljat, tako da iščem bolj osnovno rešitev, vem pa da je napaka ki jo narediš podzavestno in pol ne najdeš.
#include<stdio.h> int main(void) { int iStevec1, iStevec2, iVrstice = 4, iStolpci = 4, iRezultat = 0; int iPolje[iVrstice][iStolpci]; printf("Vnesite vrednosti v 4x4 matriko:\n "); for(iStevec1 = 0; iStevec1 < iVrstice; iStevec1++) { for(iStevec2 = 0; iStevec2 < iStolpci; iStevec2++) { printf("\nVnesite v polje %d | %d: ", iStevec1, iStevec2); fflush(stdin); scanf("%d", &iPolje[iStevec1][iStevec2]); } printf("\n"); } for(iStevec1 = 0; iStevec1 < iVrstice; iStevec1++) { for(iStevec2 = 0; iStevec2 < iStolpci; iStevec2++) { if(iStevec1 == iStevec2) iRezultat = iRezultat + iPolje[iStevec1][iStevec2]; } } printf("\nVsota diagonal znasa: %d", iRezultat); getch(); }
_________________________________________________________________________________
Prej ko sem objavil ta problem nisem mogel compilat, ker sem imel telo ki sešteva elemente po diagonali v funkciji, torej problem je bil ker nisem mogel compilat drugače bi napako sam odpravil.
Tu je cela koda s funkcijo, ki sešteva elemente na diagonali:
http://pastebin.com/tzEEKzXJ
Napako javi ko kličem funkcijo v 23.vrstici, 23 [Warning] passing arg 1 of `VsotaDiagonal1' from incompatible pointer type
Kazalcev še ne znam uporabljat, tako da iščem bolj osnovno rešitev, vem pa da je napaka ki jo narediš podzavestno in pol ne najdeš.
Yacked2 ::
Kaj če bi sešteval takole:
int vsota = 0; for(int i = 0; i < matrika.length; i++) { vsota += matrika[i][i]; }
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!
RatedR ::
Tudi tako bi šlo, če bi dal mojo kodo ven iz funkcije v main() bi delovala pravilno.
Težava je v izvedbi, sicer kot opisano zgoraj dobim težavo ko kličem funkcijo, ki se nanaša zgleda na podatkovni tip polja in parametrov, čeprav so vsi enaki tako da ne vem točno kaj je narobe.
Težava je v izvedbi, sicer kot opisano zgoraj dobim težavo ko kličem funkcijo, ki se nanaša zgleda na podatkovni tip polja in parametrov, čeprav so vsi enaki tako da ne vem točno kaj je narobe.
Zgodovina sprememb…
- spremenilo: RatedR ()
Yacked2 ::
Funkcijo nastavi kot int, kot parameter pa daj kazalec na tabelo.
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!
RatedR ::
Edina stvar ki jo prepoznam pri kazalčnih strukturah je znak '*', nisem še nikoli uporabljal in nevem točno kam ga postavit pri inicializaciji in klicu funkcije.
hexor ::
Tukej ti pošiljam odgovor na tvoje vprašanje o kazalcih in kam jih postavljati ob klicih funkcij, na enostavnem primeru izračunavanja vsote v tabeli.
#include<stdio.h> int obdelaj_tabelo(int *kazalec,int dimenzija) { int i, vsota=0; // naredimo sprehod po tabeli for(i=0;i<dimenzija;i++) { vsota+=*(kazalec); // uporabimo t.i. dereferenčni operator, da dobimo vrednost, ki se nahaja na naslovu, na katero kaze kazalec kazalec++; // gremo na naslednji naslov v pomnilniku } return vsota; } int main() { int dimenzija=5; int tabela[]={1,2,3,4,5}; int rezultat=0; // init kazalca int *kazalec=NULL; // kazalec nastavimo na zacetni naslov tabele kazalec=&tabela; // kazalec na tabelo posredujemo v funkcijo rezultat=obdelaj_tabelo(kazalec,dimenzija); // izpisemo vsoto tabele printf("%d ",rezultat); return 0; }
RootMachine ;)
RatedR ::
Hvala, zanima me če mi lahko kdo pove kaj je narobe pri mojem primeru http://pastebin.com/uHmYXnA6
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Izris lika - idejaOddelek: Programiranje | 3779 (2814) | RatedR |
» | Resne težave z razumevanjem osnov programiranja (strani: 1 2 )Oddelek: Programiranje | 16702 (13214) | RatedR |
» | Združevanje polj [C]Oddelek: Programiranje | 995 (859) | ragezor |
» | Spreminjanje vrednosti v polju [C]Oddelek: Programiranje | 2188 (1987) | specing |
» | Izris zvezdic v C (strani: 1 2 )Oddelek: Programiranje | 7260 (5844) | SimplyMiha |