Portál AbcLinuxu, 12. května 2025 01:21

Dotaz: posun prvku matice

26.11.2009 13:39 Pavel
posun prvku matice
Přečteno: 465×
Odpovědět | Admin
Zdravim, potreboval bych poradit, jak posunout prvky matice o jeden dopredu......?

Ukazka:

1 2 3 4 5 6

=>

6 1 2 3 4 5

Praci s polema uz celkem zvladam, ale na tohle nejak nemuzu prijit:-(....

predem diky za rady
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.11.2009 14:08 Zdenek
Rozbalit Rozbalit vše Re: posun prvku matice
Odpovědět | | Sbalit | Link | Blokovat | Admin
Uz zase domaci ukol? A co s tema polema zvladas? Umis uz zasit obili?
26.11.2009 14:30 Pavel
Rozbalit Rozbalit vše Re: posun prvku matice
no, co se tyce poli tak sem si zkousel bublinkove trideni, prohazovani radku, sloupcu, hledani maxima,..........

necekam ze mi to nekdo napise za me.....jen poradi, jak na to......
26.11.2009 14:37 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: posun prvku matice
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
26.11.2009 14:46 Zdenek
Rozbalit Rozbalit vše Re: posun prvku matice
Hezke. Ja radil tohle :-)
1 2 3 4 5 6

1 2 3 4 5←6
1 2 3 4←6 5
1 2 3←6 4 5
1 2←6 3 4 5
1←6 2 3 4 5

6 1 2 3 4 5
26.11.2009 14:39 Zdenek
Rozbalit Rozbalit vše Re: posun prvku matice
Kdyz uz umis tridit tak posun je prece hracka. Nebo to "zkousel jsem" znamena, ze to za tebe nekdo napsal a tys to spustil? No, ale abys nerekl, ze neporadim tak pro zacatek bys mohl treba prohodit par sloupcu, to uz prece umis, co ty na to?
26.11.2009 15:02 Pavel
Rozbalit Rozbalit vše Re: posun prvku matice
no tohle je neco jineho nez trideni - tohle je Dvourozmerna matice , kde na vstupu zadavam jeji rozmery.....muzu sem dat ukazku kodu, ale nefunguje:-(.....
26.11.2009 17:37 Zdenek
Rozbalit Rozbalit vše Re: posun prvku matice
Jen ho sem dej, neco s nim udelame a hlavne se dozvime v jakem ze to ma byt jazyku :-)
26.11.2009 19:14 Pavel
Rozbalit Rozbalit vše Re: posun prvku matice
tak se davam ten kod, nemam tam komentare, tak trochu vysvetlim jak by to melo fungovat....

http://pastebin.com/m72f07962 http://pastebin.com/m33bca2b5

mam dve tridy - trida Matice a Main

Matice obsahuje: konstruktor pro vytvoreni dvou matic(rozmery zadane uzivatelem) a druhou - pomocnou, do ktere budu ukladat "orotovanou" matici.....dale obsahuje metody pro naplneni matice, vypis, a orotovani(coz se mi bohuzel nedari:-()

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...

26.11.2009 20:49 Zdenek
Rozbalit Rozbalit vše Re: posun prvku matice
Proc u obou for cyklu odecitas jednicku v testovaci podmince?

        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;
            }
          }
        }
26.11.2009 21:32 Pavel
Rozbalit Rozbalit vše Re: posun prvku matice
no myslel sem ze zadanaMatice.lenght mi vraci int pocet (treba ze ma 2 sloupce), ale jelikoz pole se mi indexuje od 0, tak (abych "nepretekl") to odecitam....

pole ktere ma 2 sloupce, ma prece maximalni index 1......

vidim, ze bez toho to funguje, ale nejak sem si vtiom uhdelal gulas......:-(
26.11.2009 21:41 Zdenek
Rozbalit Rozbalit vše Re: posun prvku matice
To sis myslel dobre, ale pak si nemel pouzit podminku "mensi nez" :-)
26.11.2009 22:07 Pavel
Rozbalit Rozbalit vše Re: posun prvku matice
nechapu....pak by tom bylo mensi nebo rovno??
26.11.2009 23:00 vencas | skóre: 32
Rozbalit Rozbalit vše Re: posun prvku matice
Spočítej si na prstech, jakých hodnot bude i nabývat... (nápověda: Zdeněk má pravdu a pochopils to správně)
27.11.2009 11:43 Pavel
Rozbalit Rozbalit vše Re: posun prvku matice
uz to chapu, musel sem si tu matici nakreslit na papir....

este mam ale dotaz: je to hodne prasacky napsany?? jak byste to resili Vy profici?? (nechci celej kod, jen popsat, jak byste to podle toho zadani resili Vy???)

Diky
27.11.2009 19:14 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: posun prvku matice
Ja bych to resil nejak takhle: (je to jenom pseudo-kod)
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. ... )
27.11.2009 08:24 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: posun prvku matice
Ak tomu dobre rozumiem tak metoda orotujMatici() pri j==0 a i==0 urobi

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.

masomlejn avatar 26.11.2009 16:46 masomlejn | skóre: 16
Rozbalit Rozbalit vše Re: posun prvku matice
Odpovědět | | Sbalit | Link | Blokovat | Admin

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_array

A 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]$
29.11.2009 10:41 Kill_Bill
Rozbalit Rozbalit vše Re: posun prvku matice
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jen technicka poznamka, kdyz vidim "Class Matice..." - profi. resice soustav rovnic se dodnes pisi ve Fortranu. Objekty jsou proste fajn ale ta rezie...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.