» »

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:
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.

noraguta ::

Števca ti data pozicijo elementa v tabeli[][] :-[
Pust' ot pobyedy k pobyedye vyedyot!

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?
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

RatedR ::

Okej tole razumem brez problemov in deluje tudi:
#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.

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Izris lika - ideja

Oddelek: Programiranje
233778 (2813) RatedR
»

Resne težave z razumevanjem osnov programiranja (strani: 1 2 )

Oddelek: Programiranje
8016702 (13214) RatedR
»

Združevanje polj [C]

Oddelek: Programiranje
7995 (859) ragezor
»

Spreminjanje vrednosti v polju [C]

Oddelek: Programiranje
102188 (1987) specing
»

Izris zvezdic v C (strani: 1 2 )

Oddelek: Programiranje
817260 (5844) SimplyMiha

Več podobnih tem