Tablica 2 wymiarowa.

0

Witam. Mam problem z napisaniem pętli zliczającej mi sumę elementów tablicy 2 wymiarowej po przekątnej np:

1 0 0 0
0 2 0 0
0 0 2 0
0 0 0 3
Suma=powinna być 8. O to mi chodzi.

Jak zliczyć te jedynki?
Oto co napisałem do tej pory.

 
#include <iostream>
#include <conio.h>
#define X 4
#define Y 4
using namespace std;

int main(){
int tab[X][Y], ix, iy, suma=0;


for(ix=0; ix<X; ix++){
for(iy=0; iy<Y; iy++){
tab[ix][iy] = (rand() % 2);
gotoxy(ix*4+1,iy+4);
}}
for(ix=0; ix<X; ix++){
for(iy=0; iy<Y; iy++){
cout << tab[ix][iy] ;
gotoxy(ix*4+1,iy+4);
}}
//TUTAJ POWINNA MI ZLICZAC SUME WARTOSCI ELEMENTOW PO PRZEKATNEJ
for(ix=0; ix<X; ix++){
for(iy=0; iy<Y; iy++){
suma = suma + tab[ix][ix];
}
cout<<endl<<"Suma: "<<suma<<" ";

getchar();
}

A tu Screen co mi za głupoty oblicza.
www.diunax.strefa.pl

0
 
for(ix=0; ix<X; ix++){
  for(iy=0; iy<Y; iy++){
    suma = suma + tab[ix][ix];
  }
}

Po co Ci dwa fory skoro nawet nie wykorzystujesz iy?

0
 
for(ix=0; ix<=X; ix++){
              suma = suma + tab[ix][ix];
 }

po czymś takim też mi źle zlicza.

0

No nie dziwie się, spróbuj tak:

for(ix=0; ix < X; ix++)  

Dając ix <= X od 0 sumujesz sześć wartości, a nie 5, bo 0,1,2,3,4,5.

0

Jak zamienie:

 
for(ix=0; ix<=X; ix++){
    suma = suma + tab[ix][ix];
}

Na

 
for(ix=0; ix<X; ix++){
    suma = suma + tab[ix][ix];
}

To z tablicy:
2 0 4 2
0 0 3 0
1 3 1 2
2 1 4 0
otrzymuje wynik = 5 więc źle prawda ?

0
    for(int i = 0; i < 4; i++)
    {
        suma += tab[i][i];
    } 

To u mnie dla:

    int tab[4][4] = {
        {3, 0, 6, 0},
        {1, 3, 0, 1},
        {0, 0, 8, 0},
        {0, 8, 0, 1}
    }; 

Daje suma = 15.

0

Niemożliwe..

Mój kod tak na szybko:

#include <iostream>
#define X 4
#define Y 4
using namespace std;

int main(){
  int tablica[X][Y];
  int suma = 0;
  for (int i = 0; i < X; i++){
    for (int j = 0; j < Y; j++){
      cin >> tablica[i][j];
    }
  }
  for (int i = 0; i < X; i++){
    suma = suma + tablica[i][i];
  }
  cout << endl;
  cout << "Suma: " << suma << endl;
 return 0;
}
 

[code]
2 0 4 2
0 0 3 0
1 3 1 2
2 1 4 0

Suma: 3

[/code]

Musi działać, nie ma wyjścia

0

Przyznam Ci racje działa.
Zrobiłem tak jak Ty, dla innych wartości wpisanych na sztywno i jest okej.
Czy problem stwarzała by funkcja rand losująca losowe liczby?

Ale w każdym bądź razi dziękuję Ci, za pomoc.

0

Bardziej zastanawia mnie po co w ogóle ta f-cja gotoxy. W jakim celu jej używasz?

Wiem do czego służy, ale po co ona tutaj?

PS. Jak się odpisuje w tych komentarzach do postów?

0

Żebym miał wizualne rozeznanie jak wygląda tablica

0

Mhm, już rozumiem. Nigdy nie używałem tej f-cji. Sprawdź to jeszcze raz. Może jakoś źle wpisujesz te wartości? Tzn nie tam gdzie trzeba i jest sumowane co innego? Gdybym miał jakiś zamiennik na conio.h pod ubuntu to bym to sprawdził, a tak nie mogę użyć tej f-cji u siebie..

0

Ha, znalazłem. Problem był taki.
Tablica która powinna być np:
4 2 2 2
0 4 2 2
0 0 4 2
0 0 0 4

gotoxy źle ją wyświetlał i robił DOSŁOWNIE coś takiego

4

0 4 2 2
0 0 4 2
0 0 0 4
0 0 0 0

i źle ją zliczał

0

A jeżeli miałbym taką tablice
2, 0, 0, 1
0, 2, 1, 0
0, 1,** 2**, 0
1, 0, 0, 2

i chciałbym zliczyć sumę wartości elementów podkreślonych?
Dlaczego funkcja poniżej zlicza również tą 2 co jest pochylona i pogrubiona?

 for(int y = Y-1; y>0; y--){
        suma2 += tab[y][y];
    }
0
    int tab[][4] = {
        {1, 0, 0, 2},
        {0, 1, 2, 0},
        {0, 2, 1, 0},
        {2, 0, 0, 1},
    };

    int odLewej = 0;
    int odPrawej = 0;

    for(int i = 0; i < 4; ++i)
    {
        odLewej += tab[i][i];
        odPrawej += tab[4-1-i][i];
    }

zobacz czy działa.

0

Niestety, wynik 0. :(

0

No nie rób sobie żartów, musi działać:

 
int suma2 = 0;
  for (int i = 0; i < Y; i++){
    suma2 = suma2 + tablica[Y-i-1][i];
  }
  cout << "Suma2: " << suma2 << endl;

PS. Czyli ten gotoxy to był dobry trop.. ;)

0

Tak dobry trop :)

Tu macie ten kod, może już ja czegoś nie widzę od rana siedzę przed tym monitorem.

 
#include <iostream>
using namespace std;
int main(){
int tab[4][4] = {
        {2, 0, 0, 1},
        {0, 2, 1, 0},
        {0, 1, 2, 0},
        {1, 0, 0, 2}
    };
int suma=0, suma2=0;

for(int i = 0; i < 4; i++){
        suma += tab[i][i];
    }

  for (int i = 0; i < 4; i++){
    suma2 = suma2 + tab[4-i-1][i];
  }

 cout<<endl<<"Suma"<<suma;
 cout<<endl<<"Suma2"<<suma2;
getchar();
}
0

No przecież wszystko działa..
Chyba napis Suma24 czytasz jako Suma 24, a nie jako Suma2 = 4 ...

0

Ooooo ranny :P ale gafa, oczka mi sie już kleją...ale wstyd. Wybaczcie.

0

Spoko, ciesze się, że mogłem pomóc ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1