c++ tabela sześcienna

0

Witam, mam pewien problem ponieważ muszę obliczyć wczytane przez użytkownika tablicy trójwymiarowej elementy i wyświetli sumę przekątnych tablic.
Tablica się wyświetla, tylko gdy próbuję zsumować wychodzą dziwne liczby:

#include <iostream>
using namespace std;

int main()
{
 char tab[101][101][101];
 int x,y,z,a,b,c,i,j,k,suma;
 do
 {
	cout<<"Podaj liczbe x (nie wiecej niz 100): ";
	cin>>x;
 } while ((x<1)||(x>100));
 
  do
 {
	cout<<"Podaj liczbe y (nie wiecej niz 100): ";
	cin>>y;
 } while ((y<1)||(y>100));
 
  do
 {
	cout<<"Podaj liczbe z (nie wiecej niz 100): ";
	cin>>z;
 } while ((z<1)||(z>100));
 
 
 for(a=1;a<=x;a++)
 {
	for(b=1;b<=x;b++)
	{
		for(c=1;c<=x;c++)
		{
			cout<<"Podaj element o indeksach " <<a<<" , " <<b<< " , " <<c<< " : ";
			cin>>tab[a][b][c];
		}
	}
 }
    
 
 for(a=0;a<x;a++) 
 {                
    for(b=0;b<y;b++)
	{
		for(c=0;c<z;c++)
		suma=suma+tab[a][b][c];
	} 
    
 } 
 

 for(int a=0; c<x; a++)
 {
	for(int b=0; b<y; b++)
	{
		for(int c=0; a<z; c++)
		{
			tab[a][b][c]=0;
			cout<<tab[a][b][c];    
		}
	cout<<endl;
	}
 }
 
 cout<<suma<<endl;
 
 system("pause");
 return 0;
}

Ta część kodu nie gra:

 for(a=0;a<x;a++) 
 {                
    for(b=0;b<y;b++)
	{
		for(c=0;c<z;c++)
		suma=suma+tab[a][b][c];
	} 
    
 } 
1

Gdzie ustawiasz wartość suma na 0?

0

A no tak, ale mimo wszystko gdy dam int suma=0 coś nie pyka

2

Dopadł Cię błąd Kopiego-Pejsta:

 for(a=1;a<=x;a++)
 {
    for(b=1;b<=x;b++)
    {
        for(c=1;c<=x;c++)
        {

Ponadto przypisujesz od 1 do x, a odczytujesz i sumujesz od 0 do x-1 (odczyt niezainicjalizowanej wartości to UB, najczęściej objawiający się odczytaniem "losowych" wartości)

Swoją drogą, użycie tablic o stałej wielkości boli w oczy (słyszałeś np. o std::vector?).

2

Jak wyżej oraz ...
Wszystkie wymiary tablicy muszą być takie same inaczej nie ma mowy o jakichkolwiek przekątnych tablicy.

0

Początek skopiowałem z innego programu który robiłem na lekcji i musiałem się machnąć, poprawione na a=0 itp. i wyświetla wszystkie liczby ale suma dalej z kosmosu.

PS.
Wiem o tym, daje takie same dane x,y,z np. 2 zeby byl szescian.

2

Szklana kula wskazuje że po poprawkach nadal masz błąd w 7-mym wierszu.

2

Ty sumujesz wszystkie elementy tablicy, nie ich przekątne.

0

A jak zrobić żeby to zliczyło bo nie mam pomysłów, stosuje if ale nie działa.

1

Współrzędne punktów znajdujących się na przekątnych są funkcją jednej zmiennej, nie trzech. Tak będzie wyglądała suma wartości najprostszej przekątnej:

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

Pozostałe wykombinuj sam.

0

Kurde no nie wiem... możesz podać gotowy element tego kodu? ;/

Na lekcjach brałem tylko dwuwymiarowe tablice, zliczenie na dwuwymiarowej umiem ale mam kosmos w głowie gdy chodzi o coś takiego, pierwszy raz się z tym spotykam.

0

Przecież ci podał, jak czegoś nie rozumiesz to pytaj, jak chcesz cały gotowy kod to raczej za darmo nie dostaniesz.

0

Nie rozumiem czemu takie coś być nie może, sprawdzone są wszystkie warunki.

 
for(a=1; a<=x; a++)
 {
    for(b=1; b<=x; b++)
    {
        for(c=1; c<=x; c++)
        {
        	if((a==b) && (a==c) && (b==c))
        	suma=suma+tab[a][b][c];
    	}
    }
}
1
  1. Po co? Musisz wtedy sprawdzić każdy element tablicy, pomimo, że dokładnie wiesz, których szukasz.
  2. Co z pozostałymi trzema przekątnymi?
1

...
3) Znowu indeksujesz od 1 ?

0

narysuj sobie najprostszy sześcian na kartce i wypisz przekątne potem zastosuj to czego się nauczyłeś w programie; (2, 2, 2) to case, który powinieneś sobie przeanalizować;

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