wykład 7 - Wydział Matematyki i Informatyki UŁ
Transkrypt
wykład 7 - Wydział Matematyki i Informatyki UŁ
Losowanie liczb Tablice jednowymiarowe - zadania Wstęp do programowania wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Tablice wielowymiarowe Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji rand z biblioteki cstdlib (standardowej bilblioteki języka C) w C++ (od standardu C++11) dostępna jest biblioteka random umożliwiająca bardziej zaawansowane losowanie, np. z wyborem rozkładu prawdopodobieństwa (szczegółowy opis można znaleźć np. pod adresem http://www.open-std. org/jtc1/sc22/wg21/docs/papers/2013/n3551.pdf) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Losowanie za pomocą funkcji z biblioteki cstdlib należy dołączyć do programu bibliotekę cstdlib funkcja rand generuje (pseudo)losową liczbę całkowitą z przedziału [0, RAND MAX ] (gdzie RAND MAX jest stałą zależną od implementacji), Sposób użycia: int liczba = std::rand() aby zapewnić generowanie różnych liczb podczas kolejnych wykonań programu, należy przed pierwszym losowaniem zainicjalizować generator liczbą która przy każdym uruchomieniu programu będzie inna - np. bieżącą wartością zegara komputera w tym celu dołączmy do programu bibliotekę ctime a następnie inicjalizujemy generator bieżącym czasem, tj. wartością liczbową zwróconą przez funkcję time: srand (time (NULL)) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Przykład (Program generujący 10 liczb całkowitych) # include < iostream > # include < ctime > # include < cstdlib > using namespace std ; int main () { srand ( time ( NULL ) ) ; losowania ! // j e d n o k r o t n i e przed r o z p o c z e c i e m for ( int i =0; i <10; i ++) cout << rand () << " " ; return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Losowanie liczb całkowitych z określonego przedziału Chcąc uzyskać wartości losowe z określonego przedziału, używamy tej samej funkcji rand, ale każdą z uzyskanych wartości sprowadzamy do wartości z żądanego przedziału. sposób sprowadzenia: obliczamy resztę z dzielenia wylosowanej liczby przez długość żądanego przedziału (inaczej: ilość wartości w tym przedziale), a następnie do wyniku dodajemy liczbę stanowiącą początek przedziału: int liczba = (std::rand() % długość przedziału) + początek przedziału Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Przykład (Losowanie 10 liczb całkowitych z przedziału [1,20] ) # include < iostream > # include < cstdlib > # include < ctime > using namespace std ; int main () { int DP = 20 , PP = 1; // dlugosc p r z e d z i a l u = 20 , poczatek przedzialu = 1 int liczba ; srand ( time ( NULL ) ) ; // j e d n o k r o t n i e !!! for ( int i =1; i <=10; i ++) { liczba = ( rand () % DP ) + PP ; cout << liczba << endl ; } return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Losowanie liczb rzeczywistych dostępne biblioteki nie oferują funkcji generującej losowe wartości rzeczywiste losowe liczby rzeczywiste można uzyskać np. dzieląc losową liczbę całkowitą przez RAND MAX, dzieląc przez siebie dwie losowe liczby całkowite itp Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Przykład (Losowanie liczb rzeczywistych ) # include < iostream > # include < cstdlib > # include < ctime > using namespace std ; int main () { double liczba ; srand ( time ( NULL ) ) ; for ( int i =1; i <=10; i ++) { liczba = ( rand () %10) + rand () / double ( RAND_MAX ) ; cout << liczba << endl ; } return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Tablice jednowymiarowe - zadania Zadanie 1 Napisać program pobierający od użytkownika tablicę liczb całkowitych o podanej przez niego długości (lub generujący zawartość takiej tablicy), a następnie wypisujący informację czy tablica zawiera dwa sąsiadujące z sobą elementy dodatnie. Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania algorytm sprawdzania czy w tablicy są obok siebie dwie liczby dodatnie: Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania algorytm sprawdzania czy w tablicy są obok siebie dwie liczby dodatnie: sprawdzamy pary sąsiednich elementów - pierwszy i drugi, drugi i trzeci itd, Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania algorytm sprawdzania czy w tablicy są obok siebie dwie liczby dodatnie: sprawdzamy pary sąsiednich elementów - pierwszy i drugi, drugi i trzeci itd, czyli i-ty i i+1-szy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania algorytm sprawdzania czy w tablicy są obok siebie dwie liczby dodatnie: sprawdzamy pary sąsiednich elementów - pierwszy i drugi, drugi i trzeci itd, czyli i-ty i i+1-szy - czyli aby nie wyjść poza tablicę musimy zakończyć sprawdzanie na parze dla której i jest przedostatnim indeksem tablicy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania algorytm sprawdzania czy w tablicy są obok siebie dwie liczby dodatnie: sprawdzamy pary sąsiednich elementów - pierwszy i drugi, drugi i trzeci itd, czyli i-ty i i+1-szy - czyli aby nie wyjść poza tablicę musimy zakończyć sprawdzanie na parze dla której i jest przedostatnim indeksem tablicy jeśli obie liczby w sprawdzanej parze są dodatnie, to znaczy że tablica zawiera to czego szukamy - możemy przerwać szukanie i udzielić odpowiedzi “tak, w tablicy sąsiadują z sobą dwie liczby dodatnie” Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania algorytm sprawdzania czy w tablicy są obok siebie dwie liczby dodatnie: sprawdzamy pary sąsiednich elementów - pierwszy i drugi, drugi i trzeci itd, czyli i-ty i i+1-szy - czyli aby nie wyjść poza tablicę musimy zakończyć sprawdzanie na parze dla której i jest przedostatnim indeksem tablicy jeśli obie liczby w sprawdzanej parze są dodatnie, to znaczy że tablica zawiera to czego szukamy - możemy przerwać szukanie i udzielić odpowiedzi “tak, w tablicy sąsiadują z sobą dwie liczby dodatnie” odpowiedzi “w tablicy nie ma obok siebie dwóch liczb dodatnich” możemy udzielić dopiero po sprawdzeniu całej tablicy, jeśli nie znaleźliśmy w niej odpowiedniej pary Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania algorytm sprawdzania czy w tablicy są obok siebie dwie liczby dodatnie: sprawdzamy pary sąsiednich elementów - pierwszy i drugi, drugi i trzeci itd, czyli i-ty i i+1-szy - czyli aby nie wyjść poza tablicę musimy zakończyć sprawdzanie na parze dla której i jest przedostatnim indeksem tablicy jeśli obie liczby w sprawdzanej parze są dodatnie, to znaczy że tablica zawiera to czego szukamy - możemy przerwać szukanie i udzielić odpowiedzi “tak, w tablicy sąsiadują z sobą dwie liczby dodatnie” odpowiedzi “w tablicy nie ma obok siebie dwóch liczb dodatnich” możemy udzielić dopiero po sprawdzeniu całej tablicy, jeśli nie znaleźliśmy w niej odpowiedniej pary czyli jest to “algorytm z poglądem”. Pogląd na to czy były liczby na początku musi być “nie było pary” (false) [bo taki pogląd ma nam pozostać jeśli nic się nie wydarzy, tzn. przeglądając tablicę nie zobaczymy pary liczb dodatnich], znalezienie odpowiedniej pary zmienia go na “była para” (true). Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Przykład (Rozwiązanie zad. 1) # include < iostream > # include < cstdlib > # include < ctime > using namespace std ; int main () { int dlugosc ; cout << " podaj dlugosc tablicy " ; cin >> dlugosc ; int A [ dlugosc ]; cout << " podaj zawartosc tablicy : " << endl ; for ( int i =0; i < dl ; i ++) { cout << " element " << i << " : " ; cin >> A [ i ]; } cout << " Twoja tablica : " << endl ; for ( int i =0; i < dlugosc ; i ++) cout << A [ i ] << " " ; cout << endl ; bool czyBylaPara = false ; for ( int i =0; i <= dl -2; i ++) if ( A [ i ] >0 && A [ i +1] > 0) { czyBylaPara = true ; break ; } if ( czyBylaPara == false ) cout << " w tablicz nie ma liczb dodatnich na sasiednich miejscach \ n " ; else cout << " tablica zawiera dwie liczby dodatnie na sasiednich miejscach \ n " ; return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Zadanie 2 Napisać program pobierający od użytkownika tablicę liczb całkowitych o podanej przez niego długości (lub generujący zawartość takiej tablicy, a następnie wypisujący wszystkie pary uporządkowane jakie można utworzyć z elementów tej tablicy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary uporządkowane (czyli para (A,B) i (B,A) to dwie różne pary - kolejność elementów jest istotna) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary uporządkowane (czyli para (A,B) i (B,A) to dwie różne pary - kolejność elementów jest istotna) np. dla tablicy z liczbami 1,2,3 będą to pary: (1,1), (1,2), (1,3) (2,1), (2,2), (2,3) a tablicy z liczbami 1,2,2 będą to pary: (1,1), (1,2), (1,2) (2,1), (2,2), (2,2) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania (3,1), (3,2), (3,3) (2,1), (2,2), (2,2) Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary uporządkowane (czyli para (A,B) i (B,A) to dwie różne pary - kolejność elementów jest istotna) np. dla tablicy z liczbami 1,2,3 będą to pary: (1,1), (1,2), (1,3) (2,1), (2,2), (2,3) a tablicy z liczbami 1,2,2 będą to pary: (1,1), (1,2), (1,2) (2,1), (2,2), (2,2) (3,1), (3,2), (3,3) (2,1), (2,2), (2,2) - również pary “element sam z sobą” są dopuszczalne (nie jest powiedziane że mają to być pary elementów tablicy stojących na różnych pozycjach) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary uporządkowane (czyli para (A,B) i (B,A) to dwie różne pary - kolejność elementów jest istotna) np. dla tablicy z liczbami 1,2,3 będą to pary: (1,1), (1,2), (1,3) (2,1), (2,2), (2,3) a tablicy z liczbami 1,2,2 będą to pary: (1,1), (1,2), (1,2) (2,1), (2,2), (2,2) (3,1), (3,2), (3,3) (2,1), (2,2), (2,2) - również pary “element sam z sobą” są dopuszczalne (nie jest powiedziane że mają to być pary elementów tablicy stojących na różnych pozycjach) w takim razie aby utworzyć wszystkie takie pary: Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary uporządkowane (czyli para (A,B) i (B,A) to dwie różne pary - kolejność elementów jest istotna) np. dla tablicy z liczbami 1,2,3 będą to pary: (1,1), (1,2), (1,3) (2,1), (2,2), (2,3) a tablicy z liczbami 1,2,2 będą to pary: (1,1), (1,2), (1,2) (2,1), (2,2), (2,2) (3,1), (3,2), (3,3) (2,1), (2,2), (2,2) - również pary “element sam z sobą” są dopuszczalne (nie jest powiedziane że mają to być pary elementów tablicy stojących na różnych pozycjach) w takim razie aby utworzyć wszystkie takie pary: wybieramy element tablicy który ma być pierwszą liczbą w parze Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary uporządkowane (czyli para (A,B) i (B,A) to dwie różne pary - kolejność elementów jest istotna) np. dla tablicy z liczbami 1,2,3 będą to pary: (1,1), (1,2), (1,3) (2,1), (2,2), (2,3) a tablicy z liczbami 1,2,2 będą to pary: (1,1), (1,2), (1,2) (2,1), (2,2), (2,2) (3,1), (3,2), (3,3) (2,1), (2,2), (2,2) - również pary “element sam z sobą” są dopuszczalne (nie jest powiedziane że mają to być pary elementów tablicy stojących na różnych pozycjach) w takim razie aby utworzyć wszystkie takie pary: wybieramy element tablicy który ma być pierwszą liczbą w parze tworzymy wszystkie możliwe pary postaci: (wybrana wcześniej pierwsza liczba w parze, druga liczba w parze) - gdzie drugą liczbą w parze może być każdy element tablicy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary uporządkowane (czyli para (A,B) i (B,A) to dwie różne pary - kolejność elementów jest istotna) np. dla tablicy z liczbami 1,2,3 będą to pary: (1,1), (1,2), (1,3) (2,1), (2,2), (2,3) a tablicy z liczbami 1,2,2 będą to pary: (1,1), (1,2), (1,2) (2,1), (2,2), (2,2) (3,1), (3,2), (3,3) (2,1), (2,2), (2,2) - również pary “element sam z sobą” są dopuszczalne (nie jest powiedziane że mają to być pary elementów tablicy stojących na różnych pozycjach) w takim razie aby utworzyć wszystkie takie pary: wybieramy element tablicy który ma być pierwszą liczbą w parze tworzymy wszystkie możliwe pary postaci: (wybrana wcześniej pierwsza liczba w parze, druga liczba w parze) - gdzie drugą liczbą w parze może być każdy element tablicy ... podobnie jak w zad.1 z wykładu 5 (pary szef - podwładny) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Przykład (Rozwiązanie zad.2) # include < iostream > # include < cstdlib > # include < ctime > using namespace std ; int main () { int length ; cout << " podaj dlugosc tablicy " ; cin >> length ; int A [ length ]; srand ( time ( NULL ) ) ; int DP = 20 , PP = 1; for ( int i =0; i < length ; i ++) A [ i ] = ( rand () % DP ) + PP ; cout << " Twoja tablica : " << endl ; for ( int i =0; i < length ; i ++) cout << A [ i ] << " " ; cout << endl ; cout << " Pary uporzadkowane elementow tablicy : " << endl ; for ( int i = 0; i < length ; i ++) for ( int j = 0; j < length ; j ++) cout << A [ i ] << " " << A [ j ] << endl ; return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Tablice wielowymiarowe Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Zadanie 3 Napisać program pobierający od użytkownika tablicę liczb całkowitych o podanej przez niego długości (lub losujący zawartość takiej tablicy), a następnie wypisujący wszystkie dwójki (pary nieuporządkowane) elementów tablicy przechowujących różne wartości Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary nieuporządkowane ( (A,B) i (B,A) to to samo - kolejność elementów nie jest istotna) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary nieuporządkowane ( (A,B) i (B,A) to to samo - kolejność elementów nie jest istotna) mają to być pary różnych wartości (a więc pary złożone z dwóch takich samych liczb nie są dozwolone) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary nieuporządkowane ( (A,B) i (B,A) to to samo - kolejność elementów nie jest istotna) mają to być pary różnych wartości (a więc pary złożone z dwóch takich samych liczb nie są dozwolone) np. dla tablicy z liczbami 1,2,3 będą to pary: 1 i 2, tablicy z liczbami 1,2,2 będzie to pary: 1 i 2, Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania 1i2 1 i 3, 2 i 3 a dla Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary nieuporządkowane ( (A,B) i (B,A) to to samo - kolejność elementów nie jest istotna) mają to być pary różnych wartości (a więc pary złożone z dwóch takich samych liczb nie są dozwolone) np. dla tablicy z liczbami 1,2,3 będą to pary: 1 i 2, tablicy z liczbami 1,2,2 będzie to pary: 1 i 2, 1 i 3, 1i2 w takim razie aby utworzyć wszystkie takie pary: Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania 2 i 3 a dla Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary nieuporządkowane ( (A,B) i (B,A) to to samo - kolejność elementów nie jest istotna) mają to być pary różnych wartości (a więc pary złożone z dwóch takich samych liczb nie są dozwolone) np. dla tablicy z liczbami 1,2,3 będą to pary: 1 i 2, tablicy z liczbami 1,2,2 będzie to pary: 1 i 2, 1 i 3, 2 i 3 a dla 1i2 w takim razie aby utworzyć wszystkie takie pary: wybieramy element tablicy który ma być pierwszą liczbą pary Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary nieuporządkowane ( (A,B) i (B,A) to to samo - kolejność elementów nie jest istotna) mają to być pary różnych wartości (a więc pary złożone z dwóch takich samych liczb nie są dozwolone) np. dla tablicy z liczbami 1,2,3 będą to pary: 1 i 2, tablicy z liczbami 1,2,2 będzie to pary: 1 i 2, 1 i 3, 2 i 3 a dla 1i2 w takim razie aby utworzyć wszystkie takie pary: wybieramy element tablicy który ma być pierwszą liczbą pary tworzymy wszystkie możliwe pary postaci: (wybrana wcześniej pierwsza liczba w parze, druga liczba w parze) - gdzie drugą liczbą w parze może być każdy element tablicy nie występujący dotąd w roli pierwszego elementu pary Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary nieuporządkowane ( (A,B) i (B,A) to to samo - kolejność elementów nie jest istotna) mają to być pary różnych wartości (a więc pary złożone z dwóch takich samych liczb nie są dozwolone) np. dla tablicy z liczbami 1,2,3 będą to pary: 1 i 2, tablicy z liczbami 1,2,2 będzie to pary: 1 i 2, 1 i 3, 2 i 3 a dla 1i2 w takim razie aby utworzyć wszystkie takie pary: wybieramy element tablicy który ma być pierwszą liczbą pary tworzymy wszystkie możliwe pary postaci: (wybrana wcześniej pierwsza liczba w parze, druga liczba w parze) - gdzie drugą liczbą w parze może być każdy element tablicy nie występujący dotąd w roli pierwszego elementu pary ... podobnie jak w zad.1 z wykładu 5 (pary “równorzędne”) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania Mamy wypisać wszystkie pary nieuporządkowane ( (A,B) i (B,A) to to samo - kolejność elementów nie jest istotna) mają to być pary różnych wartości (a więc pary złożone z dwóch takich samych liczb nie są dozwolone) np. dla tablicy z liczbami 1,2,3 będą to pary: 1 i 2, tablicy z liczbami 1,2,2 będzie to pary: 1 i 2, 1 i 3, 2 i 3 a dla 1i2 w takim razie aby utworzyć wszystkie takie pary: wybieramy element tablicy który ma być pierwszą liczbą pary tworzymy wszystkie możliwe pary postaci: (wybrana wcześniej pierwsza liczba w parze, druga liczba w parze) - gdzie drugą liczbą w parze może być każdy element tablicy nie występujący dotąd w roli pierwszego elementu pary ... podobnie jak w zad.1 z wykładu 5 (pary “równorzędne”) z powyższych par wypisujemy tylko te, które są złożone z różnych liczb. Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Przykład (Rozwiązanie zad.3) # include < iostream > # include < cstdlib > # include < ctime > using namespace std ; int main () { int length ; cout << " podaj dlugosc tablicy " ; cin >> length ; int A [ length ]; srand ( time ( NULL ) ) ; int DP = 20 , PP = 1; for ( int i =0; i < length ; i ++) A [ i ] = ( rand () % DP ) + PP ; cout << " Twoja tablica : " << endl ; for ( int i =0; i < length ; i ++) cout << A [ i ] << " " ; cout << endl ; cout << " Roznowartosciowe pary nieuporzadkowane elementow tablicy : " << endl ; for ( int i = 0; i < length ; i ++) for ( int j = i ; j < length ; j ++) if ( A [ i ] != A [ j ]) cout << A [ i ] << " " << A [ j ] << endl ; return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Zadanie 4 Napisać program pobierający od użytkownika tablicę liczb całkowitych o podanej przez niego długości (lub losujący zawartość takiej tablicy), a następnie wypisujący wszystkie wartości występujące w tablicy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania mamy wypisać wszystkie wartości występujące w tablicy czyli jeśli liczba występuje w tablicy w kilku miejscach, to jest wypisywana raz Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania mamy wypisać wszystkie wartości występujące w tablicy czyli jeśli liczba występuje w tablicy w kilku miejscach, to jest wypisywana raz wyszukiwanie takich liczb: bierzemy element tablicy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania mamy wypisać wszystkie wartości występujące w tablicy czyli jeśli liczba występuje w tablicy w kilku miejscach, to jest wypisywana raz wyszukiwanie takich liczb: bierzemy element tablicy sprawdzamy, czy ta liczba znajduje się we wcześniejszej części tablicy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania mamy wypisać wszystkie wartości występujące w tablicy czyli jeśli liczba występuje w tablicy w kilku miejscach, to jest wypisywana raz wyszukiwanie takich liczb: bierzemy element tablicy sprawdzamy, czy ta liczba znajduje się we wcześniejszej części tablicy jeśli była - nie wypisujemy (bo już była wypisana) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania mamy wypisać wszystkie wartości występujące w tablicy czyli jeśli liczba występuje w tablicy w kilku miejscach, to jest wypisywana raz wyszukiwanie takich liczb: bierzemy element tablicy sprawdzamy, czy ta liczba znajduje się we wcześniejszej części tablicy jeśli była - nie wypisujemy (bo już była wypisana) jeśli jej nie było - wypisujemy ją Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania mamy wypisać wszystkie wartości występujące w tablicy czyli jeśli liczba występuje w tablicy w kilku miejscach, to jest wypisywana raz wyszukiwanie takich liczb: bierzemy element tablicy sprawdzamy, czy ta liczba znajduje się we wcześniejszej części tablicy jeśli była - nie wypisujemy (bo już była wypisana) jeśli jej nie było - wypisujemy ją i tak po kolei dla wszystkich elementów tablicy Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Elementy schematu postępowania mamy wypisać wszystkie wartości występujące w tablicy czyli jeśli liczba występuje w tablicy w kilku miejscach, to jest wypisywana raz wyszukiwanie takich liczb: bierzemy element tablicy sprawdzamy, czy ta liczba znajduje się we wcześniejszej części tablicy jeśli była - nie wypisujemy (bo już była wypisana) jeśli jej nie było - wypisujemy ją i tak po kolei dla wszystkich elementów tablicy ... przy czym sprawdzanie czy liczba była we wcześniejszej części tablicy to kolejny przykład algorytmu “z poglądem” Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Przykład (Rozwiązanie zad.4) # include < iostream > # include < cstdlib > # include < ctime > using namespace std ; int main () { int length ; cout << " podaj dlugosc tablicy " ; cin >> length ; int A [ length ]; srand ( time ( NULL ) ) ; int DP = 20 , PP = 1; for ( int i =0; i < length ; i ++) A [ i ] = ( rand () % DP ) + PP ; cout << " Twoja tablica : " << endl ; for ( int i =0; i < length ; i ++) cout << A [ i ] << " " ; cout << endl ; int wart_spr ; bool czyByla ; for ( int i = 0; i < length ; i ++) { wart_spr = A [ i ]; // spr czy wart_spr byla we w c z e s n i e j s z e j czesci tablicy czyByla = false ; // k o n i e c z n y reset dla kazdej w artosci s p r a w d z a n e j !! for ( int j =0; j <= i -1; j ++) // p r z e s z u k i w a n i e w c z e s n i e j s z e j czesci if ( A [ j ] == wart_spr ) { czyByla = true ; break ; } if ( czyByla == false ) cout << wart_spr << " " ; } return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Tablice wielowymiarowe Tablice wielowymiarowe, podobnie jak jednowymiarowe, przechowują wartości tego samego typu. Przykłady: tabela temperatur w stolicach europejskich w kolejnych dniach tygodnia szachownica plansza do gry w okręty sudoku ... Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Tablice wielowymiarowe w C++ Tablice wielowymiarowe można uważać za ”tablice tablic”. Przykładowe definicje: int szachownica [8][8]; zwyczajowo przyjmuje się że pierwszy (lewy) indeks oznacza wiersz, a drugi (prawy) - kolumnę, ale taka interpretacja nie jest obowiązkowe liczba wymiarów może być dowolna int przykladTablicy [2][4][2][100][5]; Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Tablice wielowymiarowe w C++ - cd do elementu tablicy wielowymiarowej odwołujemy się poprzez podanie nazwy zmiennej tablocowej i wartości indeksow dla wszystikich wymiarów (indeksowanie zaczyna się od zera, tak jak w tablicach jednowymiarowych): szachownica [1][0] = 1; ustawiamy pionej w kwadracie drugim “poziomo” i pierwszym “pionowo” elementy tablicy wielowymiarowej możemy przeglądać używając zagnieżdżonych pętli, po jednej dla każdego wymiaru: for (int i=0; i<8; i++) { for (int j=0; j<8; j++) cout << szachownica[i][j] << " "; cout << endl; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Inicjalizacja tablic wielowymiarowych tablice dwuwymiarowe: w celu inicjalizacji tablicy dwuwymiarowej najprościej jest użyć zagnieżdżonych nawiasów klamrowych. Wewnętrzne nawiasy zawierają liczby reprezentujące zawartość wierszy: int tab[2][3] = { {1,2,3}, {4,5,6}}; (przy czym wewnętrzne nawiasy klamrowe można pominąć) dozwolone jest pominięcie wartości pierwszego indeksu inicjalizowanej tablicy: int tab[ ][3] = { {1,2,3}, {4,5,6}}; (pominięcie obu specyfikacji rozmiaru jest niedozwolone) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Inicjalizacja tablic wielowymiarowych - cd inicjalizacja tablic o większej liczbie wymiarów przebiega podobnie: int aa[2][3][4] = {{{1,1,1,1}, {2,2,2,2}, {3,3,3,3}}, {{4,4,4,4}, {5,5,5,5}, {6,6,6,6}} }; podobnie jak w tablicach dwuwymiarowych specyfikację pierwszego rozmiaru można pominąć Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Tablice wielowymiarowe o rozmiarze określanym w czasie wykonania programu Tworzenie statycznych tablic wielowymiarowych o rozmiarze określanym w czasie wykonania progamu, tj. użycie konstrukcji postaci int N , M ; cout << " podaj liczbe wierszy i kolumn tablicy : " ; cin >> N >> M ; int tab [ N ] [ M ]; jest niezgodne ze standardem (podobnie jak w przypadku tablic jednowymiarowych), ale akceptowane przez część kompilatorów konstrukcja zgodna ze standardem to tworzenie tablic dynamicznych (z alokacją pamięci za pomocą operatora new i zwalnianiem pamięci za pomocą delete) Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Przykład (Dwuwymiarowa tablica o rozmiarze podanym przez uzytkownika - wersja.1) # include < iostream > using namespace std ; int main () { int N , M ; cout << " ile wierszy ma miec tablica ? " ; cin >> N ; cout << " ile kolumn ma miec tablica ? " ; cin >> M ; int tab [ N ][ M ]; // n i e z g o d n e ze s t a n d a r d e m for ( int i =0; i < N ; i ++) for ( int j =0; j < M ; j ++) tab [ i ][ j ] = i * j ; for ( int i =0; i < N ; i ++) { for ( int j = 0; j < M ; j ++) cout << tab [ i ][ j ] << " " ; cout << endl ; } return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania Losowanie liczb Tablice jednowymiarowe - zadania Tablice wielowymiarowe Przykład (Dwuwymiarowa tablica o rozmiarze podanym przez uzytkownika - wersja.1) # include < iostream > using namespace std ; int main () { int N , M ; cout << " ile wierszy ma miec tablica ? " ; cin >> N ; cout << " ile kolumn ma miec tablica ? " ; cin >> M ; int (** tab ) ; // zgodne ze s t a n d a r d e m // alokacja pamieci tab = new int *[ N ]; for ( int i =0; i < N ; i ++) tab [ i ] = new int [ M ]; // uzycie tablicy for ( int i =0; i < N ; i ++) for ( int j =0; j < M ; j ++) tab [ i ][ j ] = i * j ; for ( int i =0; i < N ; i ++) { for ( int j = 0; j < M ; j ++) cout << tab [ i ][ j ] << " " ; cout << endl ; } // z w o l n i e n i e pamieci for ( int i =0; i < N ; i ++) delete [] tab [ i ]; delete [] * tab ; return 0; } Agata Półrola Wydział Matematyki i Informatyki UŁ Wstęp do programowania