Problem z interpretacją zadania


(Kornicameister) #1

temat może i głupi, ale no nie rozumiem o co chodzi w tym poleceniu, a jest to już 3 z tego zadania, które muszę zrobić i mam już dość takich niejasności

jak mam rozumieć wiersze uporządkowane w kolejności rosnącej ?, że łapię pierwszy element wiersza i porównuje z innymi pierwszymi elementami i jak coś robię zamianę całego wiersza ?


([alex]) #2

nie zupełnie, jak pierwsze elementy wiersza są równe to łapiesz za drugie elementy ewentualnie za kolejne.


(Bela Daniel) #3

wpisz w google sortowanie bąbelkowe


(Kornicameister) #4

zastanawiam się tylko, czy nie idzie jakoś tego uprościć... np. przepisać tablicę dwuwymiarową na jednowymiarową i potem po prostu jakieś odpowiednie przelicznik stosować, żeby algorytm wiedział który indeks jest początkiem kolejnego wiersza ?

coś jakoś mi się zdaje, że chyba jakby to operowało na tablicy dwuwymiarowej to byłby trochę skomplikowany, już teraz mam troszkę problem żeby odpowiednie warunki i założenie zaimplementować (jakoś mi się miesza), ale chyba jak usiądę i to na spokojnie rozpiszę to dojdę do rozwiązania

jednak mnie męczy, czy nie przepisać tego dla prostoty operacji do tablicy jednowymiarowej ?


([alex]) #5

Jeżeli napiszesz funkcję porównującą dwa podane wiersze to problem ze skomplikowaniem znika sam.

Zawsze jak działasz na tablicę wielowymiarowej masz pewne trudności z użyciem wskaźników, a tu akurat wskazane użycie wskaźników.


(Kornicameister) #6

tak po prawdzie to miałem problem z przesłaniem tablicy dwuwymiarowej jako argumentu do funkcji :/, a że chciałem jak najszybciej rozwiązywać sedno problemów, więc operuję na wektorze wektorów (pytałem właśnie o deklarowanie takiej struktury w innym temacie)

void funkcja_c(vector >&wektor,vector >&wektor2,int w,int k) 

{

    /*ma za zadanie sortować tablice wyjsciowa tj. wektor i to posortowanie zapisac do wektor2*/

    int j=0;

    int i=0;

    int min_i=0;

    while(i
    {

        if(wektor[i][j]
        {

            min_i=i;

        }

        else if(wektor[i][j]==wektor[i+1][j]) //jeśli pierwsze elementy są równe

        {

            j++; //przesuwamy się jeden element w prawo

        }

        else

        {

            min_i=i+1; //skoro pierwszy if nie spełniony min_i rowna sie kolejnemu indeksowi

        }

        i++; //ide z indeksem do przodu

        j=0; //jesli gdzies sie zwiekszyl j, to go zeruje 

    }

}

ciało funkcji wygląda tak, jest ono oczywiście tylko czymś baaaardzo niedopracowanym, bo gdybam sobie i gdybam póki co

a operacje są jak widać na argumentach referencyjnych


([alex]) #7

Nie rozumiem co przedstawiony kod ma wspólnego z tematem?


(Kornicameister) #8

póki co to niewiele

-- Dodane N kwi 25, 2010 10:27 am --

temat, trochę wygasł, ale żeby go już zakończyć, nie trzeba było tego robić tak, jak tutaj myśleliśmy

trzeba było w tej tablicy posortować wiersze w kolejności rosnącej

i tak każdy wiersz z osobna, abstrahując od tablicy jako całości

void funkcja_c(vector >&wektor,vector >&wektor2,int w,int k)


{


    int minJ=0;


    int constI=0;


    int temp=0;


    //przepisanie -> konieczne -> powod -> obiekt referencyjny


    for(int i=0;i

    {


        for(int j=0;j

        {


            wektor2[i][j]=wektor[i][j];


        }


    }


    while(constI

    {


        for(int j=0;j

        {


            minJ=j;


            for(int l=j+1;l

            {


                if(wektor2[constI][minJ]>wektor2[constI][l])


                {


                    minJ=l;


                }


            }


            temp=wektor2[constI][minJ];


            wektor2[constI][minJ]=wektor2[constI][j];


            wektor2[constI][j]=temp;


        }


        constI++;


    }


}

a to jest kod do tego polecenia, w całym zadaniu miałem dwa wektora dwuwymiarowe dlatego m.in. ta funkcja operuje na wektorach[przekazywanie przez referencje], a nie na tablicach i pojawiła się konieczność przepisania wektor1 (wejściowego) do wektor2(wynikowego), aby nie modyfikować oryginalnego wektora