plik


��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 Pascalu
operacje na plikach tekstowych
wycena operacji na rachunku
Emisje Głównych Zanieczyszczeń Powietrza W Polsce I Wpływ Na Środowisko Prezentacja (Juda Rezle
operacje na ramkach danych solucja
Operacje na histogramie
670 Przekwalifikowanie leasingu operacyjnego na finansowy
W10 wskazniki na tablice wielowymiarowe i funkcje
operacje na plikach
Kurs CorelDRAW 12 Część 4 Zaawansowane operacje na obiektach
operacje na rekordach zadania
Matlab operacje na macierzach, skrypty
operacje na rekordach
Asembler Operacje na Plikach
Operacje na plikach multimedialnych
Kopernik na tablicy tuż pod rtęcią
Lab Operacje na plikach

więcej podobnych podstron