Muszę zrobić program wychwytujący i naprawiający błędy/zakłócenia w ciągu 110 bitów z pomocą kodu Hamminga i CRC. Jestem na etapie tego pierwszego.
Mam następujący problem, jak przepisać (skopiować) kilka wartości z tablicy tab[] do tablicy tabBit[]? Pierwsza ma rozmiar 110, druga 7. Tablica tabBit[] ma służyć do przechowania bitów, które w tab[] znajdują się w "szufladkach", których indeks jest kolejną wartością potęgi 2 (czyli 1,2,4,8,16,32,64). Program wypisuje mi te bity (w nawiasie podany jest indeks o wartości kolejnej potęgi 2).
[edit] Ręcznie skopiowałem tak:
int [] tabBit = new int [7];
tabBit [0] = tab[1];
tabBit [1] = tab[2];
tabBit [2] = tab[4];
tabBit [3] = tab [8];
tabBit [4] = tab[16];
tabBit [5] = tab[32];
tabBit [6] = tab[64];
, ale jak to zrobić w pętli?
[/edit]
Następnie, jak w pętli zapisać, aby wypisywała co drugą, potem co czwartą (itd., aż do końca tablicy) parę bitów? Domyślam się, że służy do tego funkcja continue, lecz nie wiem jak dokładnie zapisać warunek omijania wybranej ilości iteracji. Korzystam z tego tutoriala do Hamminga
package teleinformatykalab2;
import java.sql.Array;
import java.util.Random;
public class TeleinformatykaLab2 {
//Funkcja wypełniająca tablicę ciągiem losowych bitów 0 lub 1 //
public static void Losowanie(int tab[]){
////int [] tab = new int[110];
for (int i = 0; i<110; i++)
{
Random r = new Random();
tab[i] = r.nextInt(2);
if (i%25==0)
{
System.out.println("");
}
System.out.print(tab[i]+"("+i+")"+", ");
}
System.out.println("");
}
/////////////////
//Funkcja wyświetla bity, których indeks w tablicy jest wartością kolejnej potęgi liczby dwa//
public static void zamienBity(int tab[], int tabBit[])
{
////System.out.println("\n"+tab[0]+tab[109]+"\n");
for (int i=0; i<110; i++)
{
if (isPowerOfTwo(i))
{
//tabBit[i]=tab[i];
System.out.print(tab[i]+"("+i+")"+", ");
}
if (i%50==0)
{
System.out.println("");
}
}
System.out.println("\n");
/*if (i == 1 || i == 2 || i == 4 || i == 8 || i == 16 || i == 32 || i == 64)
{
System.out.print(tab[i]+"("+i+")"+", ");
for (int b = 1; b<=7; b++)
{
tab[i]=tabBit[b];
}
};
long p = (long) Math.pow(2, i);
long x = p;
p = tab[i];
if(i==p)
{
System.out.print(tab[i]+", ");
}
System.out.print(p+"("+x+")"+"("+i+")"+", ");*/
}
//Sprawdzenie ciągu kodem Hamminga//
public static void sprawdzHamming(int tab[], int tabBit[])
{
for (int i = 0 ; i<7; i++)
{
System.out.print(tabBit[i]+", ");
}
};
private static boolean isPowerOfTwo(int x)
{
//return (x & (x-1)) ==0;
return (x!=0) && ((x&(x-1)) ==0);
}
public static void main(String[] args) {
int [] tab = new int[110];
int [] tabBit = new int [7]{tab[1].tab[2],tab[4],tab[8],tab[16],tab[32],tab[64]};
// wywołanie metody wypełniającej tablicę ciągiem losowych bitów 0 lub 1
Losowanie(tab);
System.out.println("\n Bity potęgi dwa: ");
zamienBity(tab,tabBit);
System.out.println("hamming");
//sprawdzHamming(tab,tabBit);
}
}