6. Napisz program, w którym stworzona zostanie tablica o rozmiarze określonym przez argument
przekazany do programu w trakcie jego uruchamiania. Jeśli rozmiar tablicy będzie liczbą nieparzystą,
to środkowy element tablicy ma być zerem, natomiast kolejne elementy mają być zwiększane o 1. Tak
samo idąc w stronę mniejszych indeksów tablicy, jej sąsiednie elementy mają być zwiększane o 1
(patrz przykładowy wynik). Jeśli rozmiar tablicy będzie liczbą parzystą, to dwa środkowe elementy
tablicy mają być zerami, natomiast w co do pozostałych elementów tablicy, to sytuacja ma być
analogiczna jak dla przypadku z nieparzystą liczbą elementów. Program ma wypisać na ekran
zawartość tablicy ponownie wykorzystując pętlę for-each.
Przykładowy wynik działania programu dla argumentu na wejściu: 17
Wybrany rozmiar tablicy: 17
Tablica: 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8
// // SPOSOB 1:
// int rozmiar = Integer.parseInt(args[0]);
// int tab[] = new int[rozmiar];
// System.out.println("Wybrany rozmiar tablicy: " + rozmiar);
// System.out.print("Tablica: ");
// for(int i = 0; i < rozmiar ; i++)
// {
// tab[i] = (rozmiar - 2*i - 1)/2; // dla parzystego rozmiaru ucinane jest to co po przecinku, np. dla i = 0 tab[i] = 10.5,
// // ale program widzi to jako dzielnie liczb calkowitych, wiec wypisuje tylko 10
// if(tab[i] < 0)
// {
// tab[i]=Math.abs(tab[i]); // wartosc bezwzgledna, aby nie bylo wartosci ujemnych
// }
// }
// for(int i : tab)
// {
// System.out.print(i+" ");
// }
// // SPOSOB 2:
// int rozmiar = Integer.parseInt(args[0]);
// System.out.println("Wybrany rozmiar tablicy: " + rozmiar);
// int tab[] = new int[rozmiar];
// // Wypełnianie tablicy
// if (rozmiar%2 == 1)
// {
// tab[rozmiar/2] = 0;
// for (int i = 1; i <= rozmiar/2; i++)
// {
// tab[rozmiar/2 - i] = tab[rozmiar/2 + i] = i;
// }
// }
// else
// {
// for (int i = 0; i < rozmiar/2; i++)
// {
// tab[rozmiar/2 + i] = tab[rozmiar/2 - 1 - i] = i;
// }
// }
// // Wypisywanie tablicy - pętla for-each
// System.out.print("Tablica: ");
// for (int i : tab)
// {
// System.out.print(i + " ");
// }
1 - Czy ten program (sposób 1) działa poprawnie dzięki tym własnościom, które wpisałem w komentarzach (wartość bezwzględna i dzielenie liczb całkowitych)?
2 - Czy mógłby Pan wytłumaczyć pętlę if i else w sposobie 2 (z odpowiedzi)?
2 - tab[rozmiar/2 - 1] minus jest dlatego, że chodzi o indeksy?
Dlaczego to wszystko przyrównujemy do i? tab[rozmiar/2 - i] = tab[rozmiar/2 + i] = i;
Tak.
Bo i to będą kolejne liczby naturalne, to już akurat robimy tak dlatego, że w treści zadania jest takie polecenie :)
2 - trochę nie rozumiem, czyli ta tablica będzie się wypełniała na lewo i prawo na boki zaczynając od środka?
1 - tak.
2 - if sprawdza tylko, z którym rodzajem tablicy mamy do czynienia. Jeśli rozmiar jest nieparzysty, to tab[rozmiar/2] zawsze będzie odpowiadało środkowemu elementowi (z podobnego powodu, który wykorzystałeś w Twoim sposobie) i potem po prostu jednocześnie idziemy na lewo i na prawo od tego środkowego elementu wypełniając tablicę kolejnymi liczbami naturalnymi. W elsie też tak robimy, tylko że tam nie ma środkowego elementu, a są dwa środkowe, które akurat można zapisać jako tab[rozmiar/2] i tab[rozmiar/2 - 1].