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
Fórum › Java
Prace s polem
ulozis si jeden prvek do pomocny promenny.. (napriklad posledni), zbytek posunes o jednu vedle (pokud mozno zacit posunem na tem posledni prvek) a nakonec das prvek z tempu misto prvniho
v javě bohužel nedělám ale v c++ by to mohlo vypadat takto:
const int POCET = 6;
int pole[POCET] = { 1, 2, 3, 4, 5, 6 };
int temp = pole[POCET-1];
for(int i = 2; i < POCET+1; i++)
{
pole[POCET-i+1] = pole[POCET-i];
}
pole[0] = temp;
píšu to z hlavy, tak je tam možná chyba
tak se davam zdrojovy 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...
pro dvojrozměrné by mě napadlo udělat takto:
const int RADKY = 3;
const int SLOUPCE = 3;
int pole[RADKY][SLOUPCE]; //pole naplníš
int temp = pole[RADKY-1][SLOUPCE-1];
for(int y = RADKY-1; y >= 0; y--)
{
int i = SLOUPCE-1;
while(i > 0)
{
pole[y][i] = pole[y][i-1];
i--;
}
if(i == 0)
pole[y][i] = pole[y-1][SLOUPCE-1];
}
pole[0][0] = temp;
mělo by to fungovat
To crAzY^ : toto téma mě celkem zaujalo, a tak sem se pokusil udělat co nejefektivnější funkci pro posun pole oběma směry. Myslíte, že by to šlo udělat ještě efektivněji?
void shiftArray(int *pole, int posun, int count)
{
if(posun > 0){
if(posun > count)
posun = posun % count;
if(posun > 5){
shiftArray(posun-count);
return;
}
int temp[posun];
int y;
for(int i = 0, y = count-1; y >= count-posun-1; i++, y--)
temp[i] = pole[y];
// posun
for(int i = count-posun-1; i >= 0; i--)
pole[i+posun] = pole[i];
int a;
for(int i = posun-1, a = 0; i >= 0; i--, a++)
pole[a] = temp[i];
}else if(posun < 0)
{
posun = -posun;
if(posun > count)
posun = posun % count;
if(posun > 5){
shiftArray(count-posun);
return;
}
int temp[posun];
for(int i = 0; i < posun; i++){
temp[i] = pole[i];
}
for(int i = posun; i < count; i++)
pole[i-posun] = pole[i];
int y;
for(int i = count-posun, y = 0; i < count; i++, y++)
pole[i] = temp[y];
}
}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Práce s polem — založil k1
Práce s polem — založil Serath
Práce s polem - porovnání — založil MikeCZ
Práce s polem(odstraněni,pridani,vytisteni) — založil Petr
Menu , prace s textovymi soubory - závěrečná práce , nevim si rady :( — založil honzajs
Moderátoři diskuze