CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Tablica ze zmiennym porządkiem liczb
Strona 1 z 1

Tablica ze zmiennym porządkiem liczb

Nowy postNapisane: niedziela, 10 kwietnia 2011, 15:43
przez Cyfrowy Baron
Mam taką tablicę:

KOD cpp:     UKRYJ  
int tab[] = {1, 2, 3 4};


Do tego dochodzi zmienna, która może przyjąć jedną z czterech wartości występujących w tablicy, i jest wprowadzana do tablicy, ale zawsze jako pierwszy element tej tablicy, czyli:

KOD cpp:     UKRYJ  
int i = 2;
int tab[] = {i, 2, 3, 4};


Nie mam pomysłu jak zmienić porządek liczb, by się nie powtarzały, czyli - jeżeli zmienna przyjmuje wartość 2, to w tablicy na miejsce elementu o numerze 2 pojawia się wartość 1, gdyż 2 zostało przesunięte na pierwszą pozycję, czyli:

KOD cpp:     UKRYJ  
int i = 2;
int tab[] = {i, 1, 3, 4};


Gdyby zmienna miała wartość 3, to porządek w tablicy powinien być taki:

KOD cpp:     UKRYJ  
int i = 3;
int tab[] = {i, 1, 2, 4};


a gdyby wartość wynosiła 4 to taki

KOD cpp:     UKRYJ  
int i = 4;
int tab[] = {i, 1, 2, 3};


Mogę to zdefiniować na sztywno w bloku switch, co nie jest zbyt skomplikowane, gdy tablica ma określoną liczbę elementów, problem pojawia się przy dynamicznej tablicy.

Re: Tablica ze zmiennym porządkiem liczb

Nowy postNapisane: niedziela, 10 kwietnia 2011, 18:33
przez Slynx
Nie wiem dokładnie o co Ci chodzi, ale gdybym ja miał wypełniać tablicę o nieznanej wielkości liczb, zakładając że pierwszy element jest elementem niepowtarzalny w granicach tablicy, a reszta jest posortowana rosnąco zrobiłbym to tak... po prostu, tj:

KOD cpp:     UKRYJ  
 int i = 5; //numer jaki przybierze pierwszy elment, czyli te Twoje i
 int x =0; // nwm
 int rozmiar = 20; //tablica 20 elementowa
int temp = 1; // zaczynamy od 1, nie od zera !
array< int^ >^ tab = gcnew array<int^>(rozmiar); //tablica
for each(int ^%n in tab) // tutaj nadaje im kolejne wartości, żeby potem można było to ułożyć
{
        n = temp;
        temp++;
}
x = i; // dodatkowe przechowanie
i = tab->IndexOf(tab, i); // funkcja podaje pierwsze wystąpienie i w ciągu, czyli i (nie i + 1);
tab[i] = tab[0]; // zamiana
tab[0] = -1; // przypisanie 1 liczbnie w ciągu wartości która po sortowania zawsze będzie pierwsza
tab->Sort(tab); // sortowanie
tab[0] = x; // .. i przypisanie Twojego i do 1 elementu.
//
// Efektem będzie ciąg liczb (5, 1, 2, 3, 4, 6, 7...)


Ja wiem, że to może tak trochę do d***, ale algorytmika nie jest moją mocną stroną, a gdybym miał taki problem jak Ty, to tak bym to zrobił.

Re: Tablica ze zmiennym porządkiem liczb

Nowy postNapisane: niedziela, 10 kwietnia 2011, 18:42
przez Cyfrowy Baron
Nie chodzi o wypełnianie tablicy liczbami, lecz o zmianę porządku liczb w oparciu o wartość zmiennej. Przeczytaj jeszcze raz mój post.

Znalazłem już sposób z pętlą, ale jest niewydajny, więc oczekuję lepszych rozwiązań.

Re: Tablica ze zmiennym porządkiem liczb

Nowy postNapisane: niedziela, 10 kwietnia 2011, 19:28
przez Slynx
No to nie rozumiem. Chcesz traktować całą tablicę jako zbiór niepowtarzalnych liczb, przy czym "i" zawsze pozostaje na pierwszym miejscu, a reszta ... jest w jakiś sposób uporządkowana ? Trochę nieprecyzyjnie się wyraziłeś, bo w przykładach ustawiałeś liczby rosnąco.

//
Albo najlepiej pokaż ten swój kod, to wtedy będę wiedział co miałeś na myśli i będzie można się zastanowić nad optymalizacją, zamiast głowić się nad zrozumieniem problemu.

Re: Tablica ze zmiennym porządkiem liczb

Nowy postNapisane: niedziela, 10 kwietnia 2011, 21:57
przez Cyfrowy Baron
Slynx napisał(a):Trochę nieprecyzyjnie się wyraziłeś, bo w przykładach ustawiałeś liczby rosnąco.


No nie zupełnie. Zmienna zawsze jest na pierwszej pozycji, a kolejne elementy tablicy to kolejne liczby licząc od 1, ale bez zmiennej. Przecież przykłady wyraźnie to obrazują.

Slynx napisał(a):Albo najlepiej pokaż ten swój kod, to wtedy będę wiedział co miałeś na myśli i będzie można się zastanowić nad optymalizacją, zamiast głowić się nad zrozumieniem problemu.


Kod już pokazałem, ni mniej, ni więcej. Zmienna + tablica.

Re: Tablica ze zmiennym porządkiem liczb

Nowy postNapisane: poniedziałek, 11 kwietnia 2011, 09:44
przez polymorphism
Cyfrowy Baron napisał(a):Znalazłem już sposób z pętlą, ale jest niewydajny, więc oczekuję lepszych rozwiązań.

Lepszych nie będzie. Jeśli mowa o tablicach z nieokreśloną liczba elementów, to innego sposobu niż z pętlą po prostu nie ma.

Re: Tablica ze zmiennym porządkiem liczb

Nowy postNapisane: poniedziałek, 11 kwietnia 2011, 11:47
przez Slynx
Cyfrowy Baron napisał(a):No nie zupełnie. Zmienna zawsze jest na pierwszej pozycji, a kolejne elementy tablicy to kolejne liczby licząc od 1, ale bez zmiennej. Przecież przykłady wyraźnie to obrazują.

No to mój kod robił dokładnie to samo. Ustawiał na pierwszej pozycji tą zmienną, a resztę liczb (wykluczając zmienną) sortował rosnącą.
Jak pokazywałem, że wypełniam tablicę kolejnymi liczbami to to był jedynie przykład bym miał na czym pracować.
Zresztą, już nieistotne, bo widzę, że masz rozwiązanie.