JAVA prohození matice podle vedlejší diagonály
Zdravím, potřeboval bych poradit s jedním programem
Zadání:
1. Vygeneruje do celého dvojrozměrného pole o rozměru 5 x 5 (tj. matici) náhodná čísla z <-100,100>
2. Vypíše na konzoli matici v podobě pravidelně naformátované tabulky
3. Dále vypíše matici
A
kdy budou prohozené prvky podle hlavní diagonály
B
kdy budou prohozené prvky podle vedlejší diagonály.
Vypracované A:
public class program {
int a = 5;
int b = 5;
int pole[][] = new int[a][b];
void vygenerujPole() {
for (int i = 0; i < pole.length; i++) {
for (int j = 0; j < pole.length; j++) {
pole[i][j] = (int) (-100 + Math.random() * 200);
}
}
}
void vypsatPole1() {
for (int i = 0; i < pole.length; i++) {
for (int j = 0; j < pole.length; j++) {
System.out.printf("% 5d", pole[i][j]);
if (j == (a - 1)) {
System.out.println("");
}
}
}
}
void vypsatPole2() {
System.out.println("");
for (int i = 0; i < pole.length; i++) {
for (int j = 0; j < pole.length; j++) {
System.out.printf("% 5d", pole[i][j]);
if (j == (a - 1)) {
System.out.println("");
}
}
}
}
void prohoditPole() {
int pom;
for (int i = 0; i < pole.length; i++) {
for (int j = i; j < pole.length; j++) {
pom = pole[i][j];
pole[i][j] = pole[j][i];
pole[j][i] = pom;
}
}
}
public static void main(String[] args) {
program z = new program();
System.out.println("Prohození podle hlavní diagonály");
z.vygenerujPole();
z.vypsatPole1();
z.prohoditPole();
z.vypsatPole2();
}
A nemůžu přijít na řešení B. Pokud mám naprogramováno B, místo A, tak se omlouvám, strávil jsem nad tím půl dne a už z toho magořím.
Děkuji
To, co tu máš má jednu "malou" vadu na kráse, a to sice tu, že to bude fungovat jen pro čtvercové matice...
definuj "diagonalu" na obdlznikovej matici.
Šlo mi hlavně o ty metody pro výpis...
http://cs.wikipedia.org/wiki/Matice#Diagon.C3.A1la _matice
Nikde nevidím, že by musela být čtvercová...
No definuj mi diagonalu obdlznikovej matice. To akoze bude koncit niekde na hrane a nie v rohu? To potom neni diagonala. Je logicke ze diagonalu ma len stvorcova matica.
Diagonála matice A, je tvořena prvky A[i,j], kde i=j...
no tak by u obdlznika koncila na hrane, to je diagonala jak svina.
jaj aha metody pro vypis, no metody pro vypis su nahovno to som videl hned ale to neriesim ked to netrapi autora :) Ano metody pre vypis nie su (vseobecne) korektne
Tak jenom pro jistotu:
to odřádkování je epický no.
Náhodou tušil by někdo jak prohodit prvky pod hl. diagonálou mezi 2 maticema? prvky pod hl. diagonálou jsou i=1 až do poctuRadku a sloupce jsou i=0 až do i-1, akorát netuším jak udělat tu výměnu. Děkuji za krátký návod jak to udělat
int pom = pole1[i][j];
pole1[i][j] = pole2[i][j];
pole2[i][j] = pom;
Měl jsem udělat řazení matice podle posledního řádku. Tedy že největší prvek v posl. řádku bude první, a takhle sestupně nebo vzestupně. Udělal jsem to takhle, nešlo by to nějak jednosušejc?
public void serad(boolean vzestupne, int rozmer) {
int pocet = ((rozmer * rozmer) - rozmer) / 2;
int[] arrNad = new int[pocet];
int[] arrPod = new int[pocet];
int pNad = 0, pPod = 0;
for(int x = 0; x < rozmer; x++) {
for(int y = 0; y < rozmer; y++) {
if (y > x) {
arrNad[pNad++] = matice[x][y];
} else if (x > y) {
arrPod[pPod++] = matice[x][y];
}
}
}
sort(arrNad, vzestupne);
sort(arrPod, !vzestupne);
pNad = 0; pPod = 0;
for(int x = 0; x < rozmer; x++) {
for(int y = 0; y < rozmer; y++) {
if (y > x) {
matice[x][y] = arrNad[pNad++];
} else if (x > y) {
matice[x][y] = arrPod[pPod++];
}
}
}
}
private void sort(int[] array, boolean vzestupne) {
//TODO nějaká implementace sortingu
Arrays.sort(array);
if (!vzestupne) {
for (int left = 0, right = array.length - 1; left < right; left++, right--) {
int temp = array[left];
array[left] = array[right];
array[right] = temp;
}
}
}