Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
To, co tu máš má jednu "malou" vadu na kráse, a to sice tu, že to bude fungovat jen pro čtvercové ma…
MaSo 07.05.2012 19:05
MaSo
definuj "diagonalu" na obdlznikovej matici.
MM.. 07.05.2012 19:07
MM..
Šlo mi hlavně o ty metody pro výpis...:-) http://cs.wikipedia.org/wiki/Matice#Diagon.C3.A1la _matic… nový
MaSo 07.05.2012 19:10
MaSo
No definuj mi diagonalu obdlznikovej matice. To akoze bude koncit niekde na hrane a nie v rohu? To p… nový
MM.. 07.05.2012 19:13
MM..
Diagonála matice A, je tvořena prvky A[i,j], kde i=j...:-P:-) nový
MaSo 07.05.2012 19:15
MaSo
no tak by u obdlznika koncila na hrane, to je diagonala jak svina. nový
MM.. 07.05.2012 19:15
MM..
jaj aha metody pro vypis, no metody pro vypis su nahovno to som videl hned ale to neriesim ked to ne… nový
MM.. 07.05.2012 19:14
MM..
Tak jenom pro jistotu: void vypsatPole1() { for (int i = 0; i < pole.length; i++) { for (int j = 0… nový
MaSo 07.05.2012 19:17
MaSo
to odřádkování je epický no. nový
Migilenik 07.05.2012 19:26
Migilenik
Náhodou tušil by někdo jak prohodit prvky pod hl. diagonálou mezi 2 maticema? prvky pod hl. diagonál… nový
xyzxyz 09.05.2012 23:19
xyzxyz
int pom = pole1[i][j]; pole1[i][j] = pole2[i][j]; pole2[i][j] = pom; nový
MM.. 10.05.2012 00:41
MM..
Měl jsem udělat řazení matice podle posledního řádku. Tedy že největší prvek v posl. řádku bude prvn… poslední
xyzxyz 22.05.2012 09:22
xyzxyz

Tak jenom pro jistotu:

    void vypsatPole1() {
        for (int i = 0; i < pole.length; i++) {
            for (int j = 0; j < pole[i].length; j++) {
                System.out.printf("% 5d", pole[i][j]);
                if (j == (a - 1)) {
                    System.out.println("");
                }
            }
        }
    }

:-)

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

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;
}
}
}

Zpět do poradny Odpovědět na původní otázku Nahoru