Algorytmy Przykład

advertisement
Algorytmy
Warunki zaliczenia tych zajęć
Rozwiązania zadań domowych oznaczonych (*) proszę zapisać do pliku tekstowego Algorytmy.txt
i wysłać do mnie jako załącznik. Ostateczny termin: wtorek 14.04, godzina 24:00.
Przykład
Algorytm szukający liczby największej w tablicy Tab zawierającej iRozmTab liczb całkowitych,
dodatkowo algorytm podaje pozycję liczby największej.
iMax = Tab[0]
iPozMax = 0
iPozAkt = 1
dopóki iPozAkt < iRozmTab wykonuj
{
jeżeli Tab[iPozAkt] > iMax to
{
iMax = Tab[iPozAkt]
iPozMax = iPozAkt
}
iPozAkt = iPozAkt + 1
}
wypisz iMax, iPozMax
Inny zapis powyższego algorytmu:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
iMax = Tab[0]
iPozMax = 0
iPozAkt = 1
jeśli iPozAkt > iRozmTab idź do 10
jeśli Tab[iPozAkt] <= iMax idź do 8
iMax = Tab[iPozAkt]
iPozMax = iPozAkt
iPozAkt = iPozAkt + 1
idź do 4
wypisz iMax, iPpozMax
Jak wyglądałby powyższy algorytm w Javie (zakładamy, że tablica Tab zawiera liczby typu int, tzn.
całkowite z przedziału [-2 147 483 648,2 147 483 647]):
int iMax = tab[0];
int iPozMax = 0;
int iPozAkt = 1;
while(iPozAkt < iRozmTab)
{
if(Tab[iPozAkt] > iMax)
{
iMax = tab[iPozAkt];
iPozMax = iPozAkt;
NIF
Strona 1
}
iPozAkt = iPozAkt + 1;
}
System.out.println(iMax + ", " + iPozMax);
Uwagi:
Większość języków programowania (w tym Java) numeruje (indeksuje) wyrazy tablicy zaczynając od
zera: wyrazy 100-elementowej tablicy są oznaczane tak: Tab[0],...,Tab[99].
W wielu językach (w tym Java) nawiasy klamrowe służą do wydzielenia bloków, w podanym
przykładzie wydzielone są dwa bloki: co ma być powtarzane, co ma być wykonane gdy spełniony jest
warunek.
Pytania:
Jakie będą wartości zmiennych iMax, iPozMax po wykonaniu powyższego algorytmu jeżeli
tablica Tab zawiera liczby 1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,3,2,1?
Czy powyższy algorytm będzie poprawny, jeżeli wiersz
jeżeli Tab[iPozAkt] > iMax to
zamienimy na
jeżeli Tab[iPozAkt] >= iMax to
Jakie będą efekty wykonania zmienionego algorytmu na tablicy z poprzedniego pytania?
Zadania
1. Napisać algorytm liczący ile jest liczb dodatnich, ujemnych, równych 0, w tablicy Tab
zawierającej iRozmTab liczb. Wyniki zapisz w zmiennych iDod, iUjem, iZero.
2. Napisać algorytm obliczania
.
Wskazówka: Euklides zauważył prosty fakt, iż NWD liczb n i dzieli również ich różnicę.
Zatem od większej liczby odejmujemy w pętli mniejszą dotąd, aż obie liczby się zrównają.
Wynik to NWD dwóch wyjściowych liczb.
3. Napisać algorytm NWW(n,k) obliczający dla dwóch liczb całkowitych n i k ich najmniejszą
wspólną wielokrotność.
Wskazówka:
.
4. Dana jest tablica napisów Tab o długości iRozmTab. Napisać algorytm wyznaczający długość
najdłuższego podciągu jednakowych napisów. (Dla tablicy {"Jan", "Jan", "jan",
"Jan", "Ewa", "Ewa", "Ewa", "to", "niedobrana", "para"} odpowiedź
powinna wynosić 3.)
Pytanie: jaki warunek należy dodać do zadania, aby odpowiedź wynosiła 4?
NIF
Strona 2
5. Dana jest tablica Tab o długości iRozmTab zawierająca liczby (oceny). Napisać algorytm
obliczający średnią ocenę. Każda liczba w tablicy ma wartość 0; 2; 3; 3,5; 4; 4,5 lub 5. Wartość 0
oznacza, że student jeszcze nie zdawał egzaminu i nie należy tej liczby uwzględniać podczas
obliczania sredniej.
Jeżeli Tab = [3;5;3,5;4;5;0;0;3], to algorytm powinien zwrócić (3 + 5 + 3,5 + 4 + 5 + 3)/6 = 3,92.
6. Napisz algorytm obliczający rozwiązania równania kwadratowego
.
7. Dana jest liczba całkowita n ≥ 2, Co robi poniższy algorytm?
bZagadka = true
k = 2
g = √
dopóki (k < = g) oraz bZagadka wykonuj
{
jezeli (n%k == 0)
{
bZagadka = false
}
k = k+1
}
Symbol n%k oznacza resztę z dzielenia n/k.
Po zakończeniu wykonywania algorytmu zmienna zagadka ma wartość true lub false.
Wyznacz wartość zmiennej bZagadka dla n=2,3,4,5,6,7.
Pytania:
Dla jakiego typu liczb n zmienna bZagadka ma wartość true, a dla jakiego ma wartość false?
Dlaczego w pseudokodzie użyto zmiennej g:
g = √
dopóki (k < = g) oraz bZagadka wykonuj
zamiast wykonać „prostszy” warunek sprawdzający:
dopóki (k < = √ ) oraz bZagadka wykonuj
?
Zadania domowe
8. (*) Dane są dwie tablice Tab1 i Tab2 zawierające odpowiednio iRozmTab1 i iRozmTab2
tekstów. Napisać algorytm sprawdzający, czy jakiś napis się powtarza, tzn. czy występuje
jednocześnie w tablicy Tab1 i Tab2.
9. (*) Dana jest tablica liczb Tab o długości iRozmTab. Napisać algorytm wyznaczający
największą różnicę między liczbami zawartymi w tej tablicy. (Dla tablicy {2,4,6,3,11,8,0,5} odpowiedź powinna wynosić 15.)
NIF
Strona 3
Download