|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
tonni Profesionalec
Pridružen/-a: Tor Jan 2004 9:27 Prispevkov: 108
|
Objavljeno: Pet Okt 10, 2008 8:57 am Naslov sporočila: Rotiranje polja |
|
|
živjo
Ne vem,če je to problem ampak meni nekako ne gre.
Imam spremenljivko tipa polje npr. stevilka(i).To polje setavlja
10 bytev(i= 1 to 10).Jaz bi pa rad v določeni situaciji premaknil
prvih 5 bytev v naslednjih 5.Iz stevilka(1) v stevilka(6),stevilka(2)
v stevilka(7) itd.Poizkušal sem z shift in rotate,pa ne gre.Rabil bi
čim bolj enostavno operacijo,ker gre v resnici za bolj obširno polje
kot je ta primer.
lp
tonni |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pet Okt 10, 2008 11:05 am Naslov sporočila: z |
|
|
Z shift premikaš bite v enem bajtu,
Če imaš
dim bajti(10) as Byte
in bi rad prenesel iz Bajt(1) v bajt(6) . iz 2 v 7 itd vse iz 5 v 10
bo potrebna recimo taka zanka
for i = 1 to 5
j = i + 5
bajt(j) = bajt(i)
next
toda to ni rotacija vsebine ... _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
Gustav Profesionalec
Pridružen/-a: Pon Jun 2005 17:19 Prispevkov: 768
|
Objavljeno: Pet Okt 10, 2008 12:25 pm Naslov sporočila: Re: Rotiranje polja |
|
|
tonni je napisal/a: | živjo
Ne vem,če je to problem ampak meni nekako ne gre.
Imam spremenljivko tipa polje npr. stevilka(i).To polje setavlja
10 bytev(i= 1 to 10).Jaz bi pa rad v določeni situaciji premaknil
prvih 5 bytev v naslednjih 5.Iz stevilka(1) v stevilka(6),stevilka(2)
v stevilka(7) itd.Poizkušal sem z shift in rotate,pa ne gre.Rabil bi
čim bolj enostavno operacijo,ker gre v resnici za bolj obširno polje
kot je ta primer. |
To je nesmiseln pristop, ce je pdoatkov res veliko; ne premikas podatkov, ampak namesto spremenis indeks zacetnega elementa, kar je povsem nezahtevna operacija v primerjavi premika ogromno podatkov. Ce je bil prej prvi element tisti z indeksom 0, je zdaj s 5.
Rutine, ki dostopajo do do polja podatkov morajo seveda vedno preveriti ali je indeks znotraj obsega polja, in ce ni, indeks ustrezno popraviti. Do polja tako ne dostopas vec direktno, ampak skozi dodatno funkcijo. |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pet Okt 10, 2008 9:18 pm Naslov sporočila: ni |
|
|
tvoj odgovor gustav drži, a ni primeren za začetnbika _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
Gustav Profesionalec
Pridružen/-a: Pon Jun 2005 17:19 Prispevkov: 768
|
Objavljeno: Sob Okt 11, 2008 8:44 am Naslov sporočila: |
|
|
Jaz basica ne uporabljam, v C-ju je pa zadeva preprosta:
Koda: |
#define VELIKOST_POLJA 1024
unsigned char[VELIKOST_POLJA] polje; /* to je polje bajtov */
unsigned int zacetek; /* kazalec na prvi element */
unsigned char element(unsigned int indeks)
{
if (zacetek + indeks > VELIKOST_POLJA - 1)
element = polje[zacetek + indeks - VELIKOST_POLJA - 1];
else
element = polje[zacetek + indeks - 1];
}
...
/* nekje v programu */
zacetek = 512;
spremenljivka = element[1]; /* spremenljivka dobi vrednost 512. elementa polja in ne 1., brez da bi prej vseh 1024 vrednosti premetaval naokoli */
...
|
Vecje kot je polje, vec prihranis s takim pristopom. Nekje je tocka, kjer je polje tako majhno, da se vseeno bolj splaca premetavati podatke, kakor uporabljati funkcijo za dostop do njega. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|