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