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?

0

Masz znaleźć punkt podziału tablicy, jednej tablicy. Jeśli by nawet chcieć podzielić to na 2 tablice to musiałbyś przepisać wartości z tablicy wejściowej do tablic wyjściowych i to dopiero po wyznaczeniu punktu podziału. A u ciebie V to było to samo co g (pod tymi samymi indeksami kryły się te same elementy) co jest bez sensu.

  1. Wywal TBL=n z początku
  2. Na starcie powinien być jeszcze blok wejścia-wyjścia pobierający dane wejściowe (taki kopnięty prostokąt)
  3. Wypisywanie wyniku powinieneś umieścić w bloku wejścia-wyjścia (zamień prostokąt prosty na kopnięty).

Ad. poprzednie 4:
Chodzi o to, że na początku przyjmujesz min=V(0) tak więc w pętli która szuka minimum możesz pominąć sprawdzanie elementu o indeksie 0. Jak wstawisz x=x+1 zaraz przed x<=k to sprawdzanie zacznie się od elementu o indeksie 1. Inaczj mówiąc, strzałkę z
min=V(0)
x=0
poprowadź do x=x+1.
Podobnie z y.

// EDIT
Aha, jeszcze strzałki. Za dużo grotów.
Wiadomo o co chodzi w schemacie, ale (podobnie jak z kółeczkami) ktoś upierdliwy oceni to źle.

0

Chyba juz ;)

http://ompldr.org/vY2U5cA

Co do strzalek to taki urok "Magicznych Bloczkow"

0

TBL=n

Tam powinno być coś takiego:
Pobierz n
Pobierz V[n]

Reszta OK.

0

Wielkie dzieki za pomoc! :)

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