Portál AbcLinuxu, 8. listopadu 2025 02:16
....
predem diky za rady
1 2 3 4 5 6 1 2 3 4 5 6 6 1 2 3 4 5→5 1 2 3 4→4 5 1 2 3→3 4 5 1 2→2 3 4 5 1→1 2 3 4 5 6 1 2 3 4 5
.....
)
ve tride Main si nejprve vytvorim objekt(pomocnou matici a tu, kterou uzivatel zada), dale ji naplnim, vypisu, pak volam metodu "orotuj" a pak vypisuju orotovanou......nevim vcem je problem, ostatni ukoly jsem zvladl, ale tenhle se mi nedari...
predem moc dekuju za pomoc...
public void orotujMatici() {
int predchozi = 1;
for (int i = 0; i < zadanaMatice.length - 1; i++) {
for (int j = 0; j < zadanaMatice[0].length - 1; j++) {
if((i == 0) && (j == 0)) predchozi = zadanaMatice[pocetRadku - 1][pocetSloupcu - 1];
if((j == 0) && (i != 0)) predchozi = zadanaMatice[i-1][pocetSloupcu - 1];
if(j != 0) predchozi = zadanaMatice[i][j - 1];
orotovanaMatice[i][j] = predchozi;
}
}
}
class Matice:
Matice (pocet_radku, pocet_sloupcu):
M = new int[pocet_radku * pocet_sloupcu];
offset = 0
int prvek(int radek, int slupec):
return M[ (pocet_sloupcu * radek + sloupec + offset) % (pocet_radku * pocet_sloupcu) ];
void orotuj():
offset += pocet_radku * pocet_sloupcu - 1;
offset %= pocet_radku * pocet_sloupcu;
a obesel bych se uplne bez kopirovani pameti.
Samozrejme v realny aplikaci by volba konkretniho algoritmu zalezela na spouste dalsich faktoru ( napr. jak casto budu provadet tuhle operaci a jak casto nejaky jiny ? je tahle reprezentace matice vhodna i pro ostatni operace s ni ? atd. ... )
orotovanaMatice[0][0]= zadanaMatice[pocetRadku - 1][pocetSloupcu - 1]
Ale tak, ako som to pôvodne pochopil, by malo byť možné použiť systém, kedy máš metódu, ktorá zarotuje len jeden riadok a túto metódu postupne zavolať na všetky riadky. Inými slovami, nemá dochádzať k presunu medzi riadkami (a fungovanie takej metódy som navrhol vyššie). Ako je to? Daj príklad, na maticu, ktorá má viac ako jeden riadok.
Zdenek: pri tvojom riešení vymieňaš prvky. To znamená 3 priradenia na jeden krok. Pri mojom riešení, je to len jedno.
program shift_array implicit none integer, parameter :: max=6 integer :: i, j integer :: a(max) a = (/1, 2, 3, 4, 5, 6/) print'(a12,x,6(i2,1x))',"A(puvodni)= ",(a(i), i=1,max) a = cshift(a,-1) print'(a12,x,6(i2,1x))',"A(nova)= ",(a(i), i=1,max) end program shift_arrayA potom
[milan@penguin-shift-array]$ gfortran -o shift-array shift-array.f90 [milan@penguin-shift-array]$ ./shift-array A(puvodni)= 1 2 3 4 5 6 A(nova)= 6 1 2 3 4 5 [milan@penguin-shift-array]$
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.