Obrócenie tablicy dwuwymiarowej

0

Witam. Dostałem do zrobienia program, który zamieni miejscami liczby w tablicy dwuwymiarowej (macierzy) i zsumuje. Tzn. na przykładzie mojego niżej programu mam zrobić tak, aby wyświetlil tak jak teraz tablice, nastepnie odwrocil w niej wpisane przykładowo liczby :
1,2
3,4
na
4,3
2,1
wyświetlił znów już przedstawioną tablicę i zsumował ją. Przyznaję się, że jetem dość ciemny z tego, kończe już ten przedmiot, mam zrobić tylko ten program i koniec. Czas wolę przeznaczyć na naukę przedmiotów egzaminacyjnych niż informatyki.Dlatego proszę Was o pomoc. program jest w C nie C++.

#include <stdio.h>

#define n 2
#define m 2

int main ()
{
  int t [n][m];
  unsigned int i,j;
  int suma=0;

  printf("Podaj elementy tablicy \n");

  for(i=0; i<n; i++)
    for(j=0; j<m; j++)
      scanf("%d", &t[i][j]);
  printf("\n");

  for(i=0; i<n; i++)

    {
      for(j=0; j<m; j++)
   {
     suma+=t[i][j];
     printf("%d  ", t[i][j]);

   }
      printf("\n");
      printf("\n");
    }
  printf("Suma liczb znajdujacych sie w tablicy to: %d\n",suma);
   printf("\n");
  return 0;
}
0

Nie wiem, za bardzo o co chodzi z tym odwracaniem, ale możliwe że Cię to "urządzi". U mnie działało, choć kombinowanie z tymi wskaźnikami nie jest chyba zbyt eleganckie. Może ktoś zaproponuje lepszą wersję.

#include <stdio.h>

#define n 2u
#define m 2u

void ReverseArray(int Array[], int ArrayLength);

int main(void){

	int Array[n][m] = {
					{1, 2},
					{3, 4} 
                                                 	};

	/*
		--- Twoj kod
		---
	*/

	/*wywolujesz tak*/
	ReverseArray( (int *)Array, n * m );

}

/*	nie ma sprawdzenia poprawnosci parametrow
	(Array - poprawna tablica, ArrayLength >= 1) 
	odpowiada za to funkcja wywolujaca	*/

void ReverseArray(int Array[], unsigned int ArrayLength){

	int * pLeft = Array;
	int * pRight = Array + ArrayLength - 1u;
	int LeftElementCopy;

	while(pLeft < pRight){

		LeftElementCopy = *pLeft;

		*pLeft = *pRight;
		*pRight = LeftElementCopy;

		++pLeft;
		--pRight;
	}
}
0

nie nie o to :( ma sie wyswielic macierz, potem druga macierz ale odwrocona (zamieniona przekatnymi liczbami) i się zsumowała

0
#include <iostream>
using namespace std;

#define Rows 3
#define Cols 3

int main(void)
  {
   int T[Rows][Cols] ={ {1,2,3},{4,5,6},{7,8,9}};
   int sum=0;
   for(int y=0;y<Rows;++y) for(int x=0;x<Cols;++x) sum+=T[y][x];
   for(int y=0;y<Rows;++y,cout<<endl) for(int x=0;x<Cols;++x) cout<<T[y][x];
   cout<<endl;
   for(int y=Rows-1;y>=0;--y,cout<<endl) for(int x=Cols-1;x>=0;--x) cout<<T[y][x];
   cout<<endl<<"Suma = "<<sum<<endl;
   return 0;
  }
0

Dziękuję kolego, ale to chyba w C++ a ja potrzebuje w C :(

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