Sprawdzenie schematu blokowego

0

Witam.
Jak ktos ma chwilke czasu to prosilbym o sprawdzenie tego schematu i wytkniecie bledow, sugestie lub korekte Wink

Zadanie brzmi tak:
Proszę napisać funkcję, która dla tablicy jednowymiarowej o rozmiarze n, wyznacza
punkt podziału tej tablice na dwie podtablice spełniające własność: minimalna
wartość lewej podtablicy ( od indeksu 0 do indeksu k ) jest równa maksymalnej
wartości prawej podtablicy( tej od indeksu k+1 do n-1). Jeśli istnieje taki podział,
funkcja zwraca punkt podziału (indeks k). W przeciwnym przypadku zwraca
wartość –1.

nr indeksu__ 0 1 2 3 4 5 6 7
Np. dla tablicy A={5,4,6,7,3,-4,4,0 } takim punktem podziału jest indeks k=3.
Wartość minimalna lewej podtablicy od indeksu 0 do 3 wynosi 4. Maksymalna
wartość w prawej podtablicy od indeksu 4 do 7 wynosi również 4.

A schemat wyglada tak:
http://ompldr.org/vYzFzcQ

Nie wiem czy mozna tak zrobic, ze pierw szukam min w L, potem max w P, a na koncu je porownuje.

0
  1. w schemacie blokowym algorytmu nie piszę się komentarzy jako elementów przepływu
  2. używasz jakichś tajemniczych zmiennych, które powinny zostać wczytane albo obliczone gdzieś w schemacie
  3. i na koniec: Twój algorytm nijak ma się do rozwiązania zadania, które masz rozwiązać, bo masz znaleźć jakieś k, dla którego to zachodzi, a nie przyjąć, że k jest w połowie i sprawdzać, czy własność zachodzi
0
int f(int *tab, int n)
{
    for(int k = 1; k < n - 1; k++)
        if(*std::min_element(tab, tab + k) == *std::max_element(tab + k + 1, tab + n))
            return k;

    return -1;
}
0

Cos takiego? :)

http://ompldr.org/vY2JrdA

0
  1. k nigdzie się nie zmienia
  2. Skąd ta druga tablica (g) ? Przecież ma być jedna.
  3. Przesuwając punkt podziału o jedno miejsce w prawo nie musisz przeglądać całej lewej strony w poszukiwaniu minimum. Wystarczy, że uwzględnisz nowo dodaną pojedynczą wartość.
0

Chodzi mi o to, ze na poczatku indeks k=0 dzieli glowna tablice na dwie podtablice i w lewej tablicy od indeksu 0 do k szuka min, a z prawej od k+1 do n szuka max, na koncu jak nie beda sobie rowne to wraca do poczatku, tyle ze k zwieksza sie o jeden. I tak w kolko az k bedzie wieksze od n lub min=max

0
Qbikk napisał(a)

wraca do poczatku, tyle ze k zwieksza sie o jeden
Na pewno nie na schemacie który podałeś ;) Nigdzie nie ma k = ... oprócz początkowego k = 0.

0

ano tak, moj blad :), wrzucilem na serwer starszy, jeszcze nie poprawiony schemat. Ten jest nowy:

http://ompldr.org/vY2U2cQ

0
  1. Wciąż widzę dwie tablice
  2. V(x) = min powinno być min = V(x)
    Podobnie zamiast g(y) = max powinno być max = V(y)
  3. tutaj przypisanie do min jest niepotrzebne, min zostało już wyznaczone, wywal pierwszą linijkę:
    min = V(x)
    max = g(k+1)
    y = k+1
  4. pierwszego elementu nie trzeba porównywać z min (z samym sobą) dlatego przenieś x=x+1 zaraz przed wejście do x<=k.
    Podobnie y=y+1 daj zaraz przed wejściem do y<n-1
  5. Raczej wywaliłbym te kółeczka z krzyżykami. Ktoś upierdliwy powie, że to jest źle.
0

Tak wynika z polecenia, ze musze znalezc k ktore podzieli tablice na dwie czesci. Nie rozumiem 4 pkt, gdzie w schemacie mam to przeniesc?

http://ompldr.org/vY2U4OA i jak?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0