��Operacje na tablicach w C#
OpracowaB dr Robert Fidytek
Przegld zagadnieD
�%
Ustawianie element�w na dan warto[
�%
Kopiowanie tablic
�%
Odwracanie tablicy
�%
Sortowanie tablicy
�%
Wyszukiwanie element�w w tablicy
�%
Podsumowanie i zadania sprawdzajce
Ustawianie element�w tablicy na
dan warto[
W czasie tworzenia tablicy mo|emy zainicjowa j dowolnymi warto[ciami.
W dalszej cz[ci programu w pojedynczej instrukcji mo|emy nada warto[
tylko dla pojedynczego elementu:
for (int i = index; i <� index + iloscElementow; i++)
{ tablica[i] = warto[; }
Metoda Clear klasy Array ustawia wybrane elementy tablicy na warto[ zero,
false lub null w zale|no[ci od typu podstawowego tablicy.
int[] tablica = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Array.Clear(tablica, 3, 5); //od 3 indeksu 5 element�w
foreach (int el in tablica) Console.Write("{0}, ", el);
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9 numery indeks�w
//1, 2, 3, 0, 0, 0, 0, 0, 9, 10 - warto[ci element�w tablicy
3
Kopiowanie tablic
W wielu programach istnieje potrzeba dokonania kopii tablicy, w celu jej
przetworzenia, bez modyfikacji tablicy zr�dBowej.
typ[] tablica1 = new typ[rozmiar];
typ[] tablica2 = new typ[rozmiar];
...
tablica1=tablica2;
Zmienne tablicowe tablica1 i tablica2 bd odwoBywa si do tego samego
obiektu tablicowego. To nie jest kopiowanie tablic !!!
Co zostanie wypisane na ekranie?
int[] tab1 = new int[5] { 1, 2, 3, 4, 5 };
int[] tab2 = new int[5] { 6, 7, 8, 9, 10 };
tab2 = tab1;
tab1[0] = 99;
Console.Write("{0}, ", tab2[0]);
4
Kopiowanie tablic
W celu utworzenia dw�ch odmiennych tablic, z kt�rych jedna bdzie
zawiera kopi element�w drugiej tablicy nale|y wykona poni|szy kod:
typ[] zr�dBo = new typ[rozmiar1];
typ[] cel = new typ[rozmiar2];
...
for (int i = 0; i <� rozmiar3; i++)
{ cel[i] = zr�dBo[i]; }
W przypadku odwoBania si do nieistniejcego elemantu tablicy zostanie
zgBoszony wyjtek IndexOutOfRangeException.
Czy tablice zr�dBo i cel musz by takich samych rozmiar�w?
Jak warto[ mo|e przyj rozmiar3 w powy|szym przykBadzie?
5
Kopiowanie tablic
Kopiowanie tablic za pomoc metody Copy klasy Array.
Array.Copy(tablica1,indeks1, tablica2, indeks2, ilo[);
tablica1 tablica zr�dBowa,
tablica2 tablica docelowa,
indeks1 indeks, od kt�rego bd elementy kopiowane z tablicy1,
indeks2 indeks, od kt�rego bd elementy kopiowane do tablicy2,
ilo[ ilo[ kopiowanych element�w.
PrzykBad:
int[] tab1 = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
int[] tab2 = { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 };
Array.Copy(tab1, 2, tab2, 3, 4);
foreach (int el in tab2) Console.Write("{0}, ", el);
//20, 21, 22, 12, 13, 14, 15, 27, 28, 29
6
Odwracanie tablicy
Odwracanie tablicy polega na zamianie kolejno[ci element�w tablicy.
Pierwszy staje si ostatnim, a ostatni pierwszym.
Metoda Reverse
dziaBa tylko z
Odwracanie tablicy za pomoc metody Reverse klasy Array.
tablicami
Array.Reverse(tablica, indeks, ilo[);
jednowymiarowymi.
Pr�ba jej u|ycia
tablica tablica zr�dBowa,
do tablicy
indeks indeks, od kt�rego elementy bd odwracane,
wielowymiarowej
ilo[ ilo[ odwracanych element�w.
spowoduje
zgBoszenie wyjtku
RankException.
PrzykBad:
int[] tab = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Array.Reverse(tab, 2, 5);
foreach (int el in tab) Console.Write("{0}, ", el);
//1, 2, 7, 6, 5, 4, 3, 8, 9, 10,
Array.Reverse(tab); //odwr�cenie caBej tablicy
foreach (int el in tab) Console.Write("{0}, ", el);
7
//10, 9, 8, 3, 4, 5, 6, 7, 2, 1,
Sortowanie tablicy
Sortowaniem nazywamy proces ustawienia element�w pewnego zbioru w
okre[lonym porzdku. Sortowanie wykonuje si w celu uBatwienia
ewentualnego wyszukiwania element�w danego zbioru.
W przypadku sortowania tablic bardzo wa|na jest oszczdno[ pamici.
Metod sortowania, kt�ra nie potrzebuje tworzenia dodatkowej tablicy, do
kt�rej przenosimy elementy, nazywamy sortowaniem w miejscu.
W algorytmice jest szereg metod sortujcych. Jedn z najpopularniejszych,
cho niezbyt wydajn, jest metoda nazywana sortowaniem bbelkowym.
Sortowanie bbelkowe polega na zamianie dw�ch ssiadujcych ze sob
element�w, je|eli wzgldem siebie zajmuj nieprawidBowe miejsca.
8
Sortowanie bbelkowe (bubble sort)
9
Sortowanie tablicy
Sortowanie tablicy za pomoc metody Sort klasy Array.
int[] tab = { 34, 1, 17, 21, 5, 90, 45, 67 };
Array.Sort(tab);
foreach (int el in tab) Console.Write("{0}, ", el);
//1, 5, 17, 21, 34, 45, 67, 90
Metoda Sort klasy Array wykorzystuje algorytm QuickSort. (Algorytm ten
zostanie om�wiony na wykBadzie 10.) Za pomoc metody Sort klasy Array
mo|na sortowa tylko tablice jednowymiarowe. Podczas pr�by sortowania
tablicy wielowymiarowej zostanie zgBoszony wyjtek RankException.
10
Wyszukiwanie elementu w tablicy
Wyszukiwanie indeksu elementu (o danej warto[ci) w tablicy za pomoc
metod IndexOf i LastIndexOf klasy Array.
Array.IndexOf(tablica, element);
Array.IndexOf(tablica, element, indeks_pocztkowy);
tablica tablica zr�dBowa,
element wyszukiwany element tablicy,
indeks_pocztkowy indeks, od kt�rego nastpuje wyszukiwanie.
Metoda IndexOf przeszukuje tablic od pocztku, natomiast metoda
LastIndexOf natomiast przeglda tablic od koDca.
PrzykBad: Znalezienie indeks�w wszystkich element�w o warto[ci 3 w tablicy tab.
int[] tab ={ 1, 4, 3, 5, 3, 3, 2, 1, 3, 4 };
int i = Array.IndexOf(tab, 3);
Metody IndexOf i
while (i != -1)
LastIndexOf zwracaj
{
indeks poszukiwanego
Console.Write("{0}, ", i);
elementu lub -1 w
przypadku jego braku.
i = Array.IndexOf(tab, 3, i + 1);
11
} //2, 4, 5, 8
Wyszukiwanie binarne
W przypadku, gdy chcemy przeszukiwa tablice posortowane, wydajno[
operacji wyszukiwania mo|na znacznie poprawi, stosujc wyszukiwanie
binarne (poB�wkowe).
W przypadku wyszukiwania binarnego wybran warto[ por�wnujemy ze
[rodkowym elementem tablicy.
Je|eli warto[ [rodkowego elementu jest r�wna wybranej warto[ci,
przerywamy wyszukiwanie. Element [rodkowy jest szukanym elementem.
W przypadku, gdy szukana warto[ jest mniejsza od warto[ci [rodkowego
elementu, |adan warto[ pr�bujemy znalez w pierwszej poBowie tablicy.
Natomiast, gdy wybrana warto[ jest wiksza od warto[ci [rodkowego
elementu, |dan warto[ pr�bujemy znalez w dr�giej poBowie tablicy.
Oczywi[cie do wyszukiwania |danej warto[ci w poszczeg�lnych cz[ciach
tablicy stosujemy wyszukiwanie poB�wkowe. Wyszukiwanie koDczymy w
momencie znalezienia |adanej warto[ci lub, gdy w wyniku podziaBu
12
otrzymamy pust podtablic, co jest r�wnowa|ne z brakiem elementu o
|danej warto[ci w przeszukiwanej tablicy.
Wyszukiwanie binarne
Wyszukiwanie binarne indeksu elementu (o danej warto[ci) w tablicy jest
realizowane za pomoc metody BinarySearch klasy Array. Metoda ta zwraca
numer indeksu wyszukiwanego elementu lub warto[ ujemn, gdy tablica nie
zawiera wyszukiwanego elemantu.
PrzykBad:
int[] tab ={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = Array.BinarySearch(tab, 2);
Console.Write("i = {0}, ", i);
wiczenie:
ZaB�|my, |e pomy[laBem dowoln liczb naturaln z przedziaBu od 1 do 100 i
bd odpowiadaB na pytania tylko tak lub nie .
Ile co najwy|ej trzeba zada pytaD, aby zawsze odgadn pomy[lan przeze
mnie liczb?
A gdybym pomy[laB liczb od 1 do 1 000 000? ...
13
Zadanie 1
//Jakie bBdy popeBniono w poni|szym kodzie programu?
int[,] tab1 = { 1, 1, 2, 2, 3, 3, 4, 4, 5 }
int[,] tab2 = { 6, 6, 7, 7, 8, 8, 9, 9, 0, 0 }
Array.Copy(tab1, 4, tab2, 5, 6);
foreach (int el in tab2) Console.Write("{0}, ", tab2);
14
Zadanie 2
//Co zostanie wypisane na ekranie?
const int N = 10;
int[] tab = new int[N] { 1, 3, 5, 7, 9, 0, 2, 4, 6, 8 };
int i=-1, elem;
while (++i <� N / 2)
{
elem = tab[i];
tab[i] = tab[N - 1 - i];
tab[N - 1 - i] = elem;
}
foreach (int el in tab) Console.Write("{0}, ",el);
15
Zadanie 3
//Co realizuje poni|szy kod programu?
const int N = 10;
int[] tab = new int[N];
int elem;
Random r = new Random();
for (int i = 0; i <� N; i++) tab[i] = r.Next(1, 101);
for (int j = 0; j <� N; j++)
for (int k = j; k <� N; k++)
if (tab[j] <� tab[k])
{
elem = tab[j];
tab[j] = tab[k];
tab[k] = elem;
}
16
foreach (int el in tab) Console.Write("{0}, ",el);
Zadanie 4
//Jak warto[ osignie zmienna j?
//Co realizuje poni|szy program?
const int I = 1;
int[] tab = new int[] {1,2,1,3,5,1,2,2,1};
int i=-1, j = 0;
while ((i=Array.IndexOf(tab,I,i+1)) != -1) j++;
Console.WriteLine("j={0}",j);
17
Zadanie 5
//Co zostanie wypisane na ekranie?
int[] tab = new int[] {9, 3, 10, 7, 1, 5, 2, 6, 4, 8,};
1
foreach (int el in tab) Console.Write("{0,2}, ", el);
2
Console.Write("\n");
3
Array.Clear(tab, 1, 2);
4
foreach (int el in tab) Console.Write("{0,2}, ", el);
5
Console.Write("\n");
6
Array.Sort(tab);
7
foreach (int el in tab) Console.Write("{0,2}, ", el);
8
Console.Write("\n");
9
10 Array.Reverse(tab, 4, 3);
11 foreach (int el in tab) Console.Write("{0,2}, ", el);
12
Console.Write("\n");
13
Array.Copy(tab, 2, tab, 3, 4);
18
14
foreach (int el in tab) Console.Write("{0,2}, ",el);
Wyszukiwarka
Podobne podstrony:
34 Pliki Operacje na plikach w Pascaluoperacje na plikach tekstowychwycena operacji na rachunkuEmisje Głównych Zanieczyszczeń Powietrza W Polsce I Wpływ Na Środowisko Prezentacja (Juda Rezleoperacje na ramkach danych solucjaOperacje na histogramie670 Przekwalifikowanie leasingu operacyjnego na finansowyW10 wskazniki na tablice wielowymiarowe i funkcjeoperacje na plikachKurs CorelDRAW 12 Część 4 Zaawansowane operacje na obiektachoperacje na rekordach zadaniaMatlab operacje na macierzach, skryptyoperacje na rekordachAsembler Operacje na PlikachOperacje na plikach multimedialnychKopernik na tablicy tuż pod rtęciąLab Operacje na plikachwięcej podobnych podstron