Tablice dwu-wymiarowe

Tym razem zajmiemy się tablicami które sa dwuwymiarowe
Oto przykłady użycia takich tablic:
 
/*Przykład1: Tablice 2x3 liczb typu int deklarujemy tak:*/
int tab[2][3];
 

/*Przykład 2: lub tak : */
int wymiar1,wymiar2;
scanf("%d%d",&wymiar1,&wymiar2);
nazwa_typu nazwa_tablicy[wymiar1][wymiar2]; // tablica o wymiarach wpisanych przez użytkownika
 

/*Przykład 3: Oto przykład deklaracji i jednoczesnego inicjowania tablicy 2x3 */
int tab[2][3]={{0,1,2},{3,4,5}};
 

/*Przykład 4:  przypisanie komórce 0,0 wartości 7 (pamiętajmy że tablice numeruje się od zera) */
int tab[3][3];

tab[0][0] = 7;
 

/*Przykład 5: A oto przykład wypisywania macierzy 4x 4:*/

for(i=0; i<4; i++){
   for(j=0; j<4; j++){
	printf("%d",tab[i][j]);
   }
   printf("\n");
}
 
Tutaj jest link na temat inicjowania tablic 1 i 2 wymiarowych:

Wiki

Inny sposób, jest taki: wpisujemy do pliku (po jednej w wierszu) liczby. Tyle liczb ile jest elementów macierzy. Np. dla 2x3 będzie ich 6. Zapisujemy ten plik pod nazwą np. plik.dat Kiedy już skompilujemy nasz program do postaci wykonywalnej pod nazwą program i ten program będzie w pętli oczekiwał na wprowadzenie z klawiatury do scanfa kolejnych elementów, to zamiast wpisywać te elementy możemy wykonać komendę: cat plik.dat | ./program co spowoduje, że plik.dat zostanie potraktowany jako 'klawiatura' dla naszego programu.

Zad 1 Wczytywanie, wypisywanie

Napisz program który wczytuje tablice 4x4 (używajac 2 pętli for) a następnie wypisuje ją na 2 sposoby: najpierw kolejno wiersze,

potem kolejno kolumny Na przykład dla tablicy

1  2  3  4
5  6  7  8
9  10 11 12
13 14 15 16
 

wypisze

Oto kolejne wiersze tablicy:

wiersz1: 1 2 3 4
wiersz2: 5 6 7 8
wiersz3: 9 10 11 12
wiersz4: 13 14 15 16

Oto kolumny tablicy:

kolumna1: 1 5 9  13
kolumna2: 2 6 10 14
kolumna3: 3 7 11 15
kolumna4: 4 8 12 16

Zad 2 Mini sudoku

Dana jest tablica wymiaru 3x3 (mozna ją wpisać na sztywno)

Sprawdz czy wczytana tablica 3x3 ma w wierszach i w kolumnach

permutacje cyfr 1,2,3

UWAGA Zliczaj w każdym wierszu ilość cyfr równych 1, 2 i 3 odpowiednio używając liczników licz1 licz2 i licz3. Każda z cyfr powinna wystąpić dokładnie 1 raz, tj. licz1 == 1 licz2==1 i licz3 ==1. Wiele innych sposobów, takich jak dodawanie liczb w wierszu itp. nie są na ogół poprawne
Oto przykład działania:

Dla tablicy:
1 2 3 
1 3 2
1 2 3
Źle. Macierz nie w każdym wierszu i kolumnie 
ma permutacje elementów 1 2 3.

Dla tablicy:
1 2 3
2 3 1
3 1 2
Macierz ma permutacje elemmentów 1 2 3 w każdym 
wierszu i kolumnie.

Zad 3 Mnożenie macierzy

Napisz program który mnoży 2 macierze
a) kwadratowe tj. obie o wymiarach n na n wczytanych przez użytkownika
b) dowolnych sensownych wymiarów wpisanych przez użytkownika

Tu możesz sprawdzić czy Twój program działa na małych macierzach: Mnożenie online