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