Programowanie - mermidon.edu.pl

Transkrypt

Programowanie - mermidon.edu.pl
INFORMATYKA Z MERMIDONEM
Programowanie
Moduł 5 / Notatki
Projekt współfinansowany ze środków Unii Europejskiej
w ramach Europejskiego Funduszu Społecznego.
Realizator projektu:
Opracowano w ramach projektu Nowa Era Informatyki
www.mermidon.edu.pl
2
.edu.pl
Moduł 5.
Tablice jedno i dwuwymiarowe
Notatki do wszystkich części
TWORZENIE TABLICY JEDNOWYMIAROWEJ
Tablicę tworzymy poprzez zdefiniowanie typu zmiennych, które będą przechowywane w tablicy,
jej nazwy i ilości elementów:
typ_zmiennej nazwa_tablicy [liczba elementów]
np.:
int mojaTablica[7];
char tab[20];
Tablicę możemy wypełnić w chwili deklaracji. Tego sposobu używamy, gdy wiemy, co dokładnie
będziemy chcieli przechowywać w tablicy.
int dniMesiaca[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
int imie[6] = {'m', 'i', 'c', 'h', 'a', 'l'};
OPERACJE NA TABLICY JEDNOWYMIAROWEJ
Do operowania na tablicy np. do wypisywania zawartości używamy pętli. Pętle pozwalają na przechodzenie od pierwszego elementu do ostatniego.
int tablica[100];
for (int a = 0; a < 100; a++)
{
cout << tablica[a]
<< " ";
}
Tablice indeksowane są od zera, pierwszy element ma indeks zero (nie jeden):
tablica[0]
– pierwszy element
tablica[1]
– drugi element
tablica[99]
– setny element – ostatni element w tablicy
Zadanie:
Rozważmy napisanie programu, który pobierze z klawiatury n liczb, umieści je w tablicy a następnie wyświetli. Program powinien wczytać liczbę „n” mówiącą ile liczb będziemy wczytywać a następnie je pobrać, zapisać i wypisać.
3
.edu.pl
Rozwiązanie:

Tworzymy tablicę np. 100 elementową („n” w tym przypadku jest w przedziale od 1 do 100).

Pobieramy z klawiatury liczbę „n”.

W pętli od zera do „n” pobieramy kolejne liczby i umieszczamy je w tablicy.

W kolejnej pętli od zera do „n” pobieramy kolejne elementy z tablicy i wypisujemy je na ekran.
Fragment kodu źródłowego, którego możemy użyć do pobierania zmiennej ilości danych z klawiatury:
int tablica[1000];
– rezerwujemy miejsce, nie koniecznie musimy całe użyć
int wielkosc;
cin >> wielkosc;
– wczytujemy ile liczb będziemy wczytywać (ile liczb oczekujemy)
for (int a = 0; a < wielkosc; a++)
– pętla od zera do „n”
{
cin >> tablica[a];
}
TWORZENIE TABLICY DWUWYMIAROWEJ
Tablice dwuwymiarowe tworzymy poprzez określenie typu tablicy, jej nazwy oraz dwóch wymiarów (ilości wierszy i kolumn):
typ_zmiennej nazwa_tablicy [wymiar1][wymiar2];
np.:
int tablica[10][10];
Tak jak w przypadku tablicy jednowymiarowej, dwuwymiarową również możemy wypełnić w chwili
tworzenia.
int tablica[3][2] = {{1,2}, {3,4}, {5,6}};
OPERACJE NA TABLICY DWUWYMIAROWEJ
Do operowania na tablicy dwuwymiarowej używamy dwóch pętli. Jedna jest odpowiedzialna za
iterowanie (przechodzenie) po wierszach a druga po kolumnach. Jedna jest zagnieżdżona w drugiej, – czyli na jeden obrót pierwszej pętli, druga zagnieżdżona przechodzi przez wszystkie elementy.
4
.edu.pl
int tablica[100][50];
for (int w = 0; w < 100; w++)
– iterujemy po wierszach
{
for (int k = 0; k < 100; k++)
– iterujemy po kolumnach
{
cout << tablica[w][k] << " ";
}
cout << endl;
– po wypisaniu wiersza z tablicy, przechodzimy do nowej linii
}
LICZBY PIERWSZE
Liczbą pierwszą jest liczba naturalna, która ma dokładnie dwa różne dzielniki naturalne i są nimi:

jeden,

ona sama.
Kolejne liczby pierwsze:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, itd.
Zadanie:
Rozważmy napisanie programu, który sprawdzi czy podana z klawiatury liczba jest liczbą pierwszą.
Rozwiązanie:

Pobieramy z klawiatury liczbę.

W pętli od 2 do „n” sprawdzamy czy któraś liczba dzieli „n” bez reszty.

Sprawdzamy, czy w poprzednim kroku znaleźliśmy dzielniki dla „n”, jeśli nie, to liczba „n” jest
liczbą pierwszą.
Fragmentu kodu źródłowego szukającego dzielników dla „n”:
for(int a=2; a<n; a++)
{
if(n % a == 0)
– dzielenie modulo
{
//znaleźliśmy dzielnik
}
}
5
.edu.pl
LICZBY DOSKONAŁE
Liczbą doskonałą jest liczba naturalna taka, że suma jej naturalnych dzielników jest równa jej samej.
6=1+2+3
Kolejne liczby doskonałe:
6, 28, 496, 8128, 33550336, 8589869056
Zadanie:
Rozważmy napisanie programu, który sprawdzi czy podana z klawiatury liczba jest liczbą doskonałą.
Rozwiązanie:

Pobieramy z klawiatury liczbę, którą będziemy sprawdzać.

Tworzymy tablicę o wielkości 100 (nie musimy całej wykorzystywać), w której będziemy trzymać dzielniki .

W pętli od 1 do „n” sprawdzamy czy któraś liczba dzieli „n” bez reszty, jeśli tak, liczbę zapisujemy w tablicy z kroku poprzedniego.

W kolejnej pętli od 1 do k, (gdzie k jest liczbą mówiącą ile znaleźliśmy dzielników) wykonujemy
sumowanie.

Sprawdzamy czy suma dzielników równa się wczytanej liczbie, jeśli tak to znaleźliśmy liczbę
doskonałą.
LICZBY BLIŹNIACZE
Liczbami bliźniaczymi są liczby pierwsze, różniące się między sobą o 2.
Przykład:
3 5, 5 7, 11 13, 17 19.
Zadanie:
Rozważmy napisanie programu, który wypisze wszystkie liczby bliźniacze w zbiorze od 1 do „n”.
Rozwiązanie:
Rozwiązań problemu jest co najmniej kilka:

Możemy szukać liczb bliźniaczych w tablicy z wartościami od 1 do n, przeszukując komórki
leżące w odległości dwóch indeksów od siebie.

Możemy przygotować sobie tablicę liczb pierwszych i to w niej szukać liczb bliźniaczych, porównując komórki leżące obok siebie.
6
.edu.pl

Tworzymy tablicę, w której będziemy poszukiwali liczb bliźniaczych (np. 100 elementową).

W pętli od 0 do 100 wpisujemy wartości poszczególnym komórkom w tablicy (dla indeksu 0,
wpisujemy wartość 1, itd.).

Tworzymy nową tablicę, do której przepiszemy liczby pierwsze.

W pętli od 0 do 100 sprawdzamy główną tablicę czy znajdują się w niej liczby pierwsze, jeśli
takową znajdziemy, przepisujemy do tablicy z liczbami pierwszymi.

W pętli od 1 do ilości liczb pierwszych w tablicy, porównujemy pola obok siebie, dany element
jest porównywalny z poprzednim. Jeśli różnica między nimi wynosi 2, oznacza to ze znaleźliśmy parę liczb bliźniaczych.
LICZBY CZWORACZE
Liczbami czworaczymi są liczby pierwsze, które można zapisać w postaci:
p, p+2, p+6, p+8
np.:
5, 7, 11, 13
821, 823, 827, 829
Zadanie:
Rozważmy napisanie programu, który wypisze wszystkie liczby czworacze w zbiorze od 1 do „n”.
Rozwiązanie:

Tworzymy tablicę, w której będziemy szukać liczb czworaczych (np. 100 elementową).

W pętli od 0 do 100 wpisujemy wartości poszczególnym komórkom w tablicy (dla indeksu 0,
wpisujemy wartość 1, itd.).

Tworzymy nową tablicę, do której przepiszemy liczby pierwsze.

W pętli od 0 do 100 sprawdzamy główną tablicę czy znajdują się w niej liczby pierwsze, jeśli
takową znajdziemy, przepisujemy do tablicy z liczbami pierwszymi.

W pętli będziemy sprawdzać czy znaleźliśmy liczby czworacze. W pętli będziemy przechodzić
od 1 do „n” – 8. Pobierzemy pierwszy element z tablicy, sprawdzimy czy jest liczbą pierwszą,
jeśli tak, sprawdzimy czy następny element w tablicy liczb pierwszych jest równy p+2, kolejny
p+6 i jeszcze jeden p+8.

Sprawdzamy czy wszystkie liczby (p, p+2, p+6, p+8) są liczbami pierwszymi. Jeśli tak, znaleźliśmy liczby czworacze.
7
.edu.pl
LICZBY GERMAIN
Liczbą Germain jest liczbą pierwszą, dla której 2·p+1 również jest liczbą pierwszą.
Kolejne liczby Germain:
2, 3, 5, 11, 23, 29, 41, 53, 83
sprawdźmy:
2·2+1=5
2·3+1=7
Zadanie:
Rozważmy napisanie programu, który sprawdzi czy liczba wczytana z klawiatury jest liczbą Germain.
Rozwiązanie:

Pobieramy liczbę z klawiatury.

Sprawdzamy czy wczytana liczba jest liczbą pierwszą.

Jeśli tak, podstawiamy wartość do wzoru.

Sprawdzamy czy wartość wyrażenia również jest liczbą pierwszą.
ROZKŁAD LICZBY NA CZYNNIKI PIERWSZE
Rozkład liczby na czynniki pierwsze polega na zapisaniu jej jako iloczynu liczb pierwszych.
np.:
14 = 2 · 7
15 = 3 · 5
Każda liczba naturalna większa od jeden jest albo liczbą pierwszą albo iloczynem liczb pierwszych
(liczbą złożoną).
Zadanie:
Rozważmy napisanie programu, który rozłoży liczbę na czynniki pierwsze
Rozwiązanie:

Pobieramy liczbę z klawiatury, którą chcemy rozłożyć, niech nią będzie liczba „k”.

Tworzymy tablicę, w której będziemy przechowywać czynniki pierwsze.

W pętli dzielimy liczbę „k” przez liczbę „p” i sprawdzamy czy otrzymaliśmy resztę z dzielenia
czy nie. Jeśli nie ma reszty, oznacza to, że znaleźliśmy czynnik pierwszy, więc przepisujemy go
8
.edu.pl
do odpowiedniej tablicy na liczby pierwsze. Kroki powtarzamy. W następnym obiegu pętli liczbą „k” będzie równa „k”/„p”.

Jeśli w pętli z poprzedniego kroku podczas dzielenia otrzymamy resztę z dzielenia to powiększamy liczbę „p” i krok powtarzamy.
Rozkład liczby 90 na czynniki pierwsze:
90 | 2 = 45
45 | 3 = 15
15 | 3 = 5
5|5 = 1
1
Czynnikami pierwszymi są 2, 3, 3, 5.
9
.edu.pl