Najkrótszy, możliwy kod U2


(Mkbart) #1

Witam, uczę się Pascala i cały czas myślę nad znalezieniem odpowiedniego algorytmu do wyznaczenia najkrótszego, możliwego kodu U2 liczby całkowitej od -128 do 127. Do czasu kiedy robiłem to na 8 bitach, było w miarę łatwo, teraz jednak pojawiły się problemy :wink:. Oto przykłady: 12 (dec) = 01100 (U2), -11 (dec) = 10101 (U2), 1 (dec) = 01 (U2)


(rozwalkompa) #2

Jeśli się nie mylę, 1 (dec) na ośmiu bitach wygląda tak: 00000001, a -11 (dec) -> 11110101.

Nie wiem jak zapisujesz te liczby, ale jeśli w tabeli, to możesz jechać od lewej do prawej i zależnie od pierwszego znaku szukać pierwszego innego:

przykład dla -11:

B[1]:=A[1]; {pierwszy przepisujesz A=11110101, B=1}

for i:=2 to 8 do

if A[i]<>A[1] then begin a:=i; break; end; {dopóki są takie same to nic, gdy są inne zapisuje od którego się różnią}

for i:=a to 8 do B[i]:=A[i] {przepisuje pozostałe znaki A=11110101, B=10101}

(Mkbart) #3

Tak, ale teraz chodzi mi o wersję najkrótszą, nie ośmiobitową :wink:


(rozwalkompa) #4

No i właśnie w tablicy B będzie zapisana najkrótsza wersja.