algorytmy_zadania_02..

Transkrypt

algorytmy_zadania_02..
WPROWADZENIE DO ALGORYTMÓW
Zadania
mgr Zofia Makara
11 maja 2004
1
Algorytmy liniowe
Napisz algorytm, przedstaw go przy użyciu schematu blokowego i zaimplementuj w dowolnym języku programowania (np. w C++):
Zadanie 1.1 wczytania i dodawania dwóch liczb rzeczywistych.
Zadanie 1.2 wczytania i różnicy dwóch liczb rzeczywistych.
Zadanie 1.3 obliczenia pola kwadratu, dla długości boku a - wczytanej przez
użytkownika.
Zadanie 1.4 obliczenia pola prostokąta, dla długości boków a, b - wczytanych przez użytkownika.
Zadanie 1.5 obliczenia pola trójkąta, dla długości boku a i wysokości h wczytanych przez użytkownika.
Zadanie 1.6 obliczenia pola trapezu równoramiennego, dla długości podstaw a, b i wyskości h - wczytanych przez użytkownika.
Zadanie 1.7 obliczenia pola trapezu równoramiennego, dla długości podstaw a, b i ramienia c - wczytanych przez użytkownika.
Zadanie 1.8 obliczenia obwodu okręgu, dla długości promienia r - wczytanej przez użytkownika.
( Uwaga. Przyjmij π = 3.14 lub zaimportuj Math.h i użyj stałej M PI)
Zadanie 1.9 obliczenia pola koła, dla długości promienia r - wczytanej
przez użytkownika.
Zadanie 1.10 obliczenia pola powierzchni całkowitej sześcianu, dla długości boku a - wczytanej przez użytkownika.
1
Zadanie 1.11 obliczenia objętości sześcianu, dla długości boku a - wczytanej przez użytkownika.
Zadanie 1.12 obliczenia pola powierzchni kuli, dla długości promienia r wczytanej przez użytkownika.
Zadanie 1.13 obliczenia objętości kuli, dla długości promienia r - wczytanej przez użytkownika.
2
Algorytmy z rozgałęzieniami
Zadanie 2.1 sprawdzania czy podana przez użytkownika liczba a jest większa od zera.
Zadanie 2.2 sprawdzania czy podana przez użytkownika liczba a jest większa od 0, a mniejsza od 11.
Zadanie 2.3 sprawdzania czy podana przez użytkownika liczba √
a jest większa od 0, a mniejsza od 11 lub większa od 17 a mniejsza od 21 · 3.
Zadanie 2.4 sprawdzania czy podana przez użytkownika liczba a jest liczbą
całkowitą.
Zadanie 2.5 sprawdzania czy podana przez użytkownika liczba a jest liczbą
całkowitą i obliczania jej sumy cyfr.
Zadanie 2.6 sprawdzania czy podana przez użytkownika liczba a jest liczbą
całkowitą i sprawdania, czy jest podzielna przez 2.
Zadanie 2.7 sprawdzania czy podana przez użytkownika liczba a jest liczbą
całkowitą i sprawdania, czy jest podzielna przez 2.
Zadanie 2.8 sprawdzania, czy podany przez użytkownika rok jest przestępny.
Zadanie 2.9 podawania daty w formacie - dzien:XX, miesiąc:XX, rok:XXXX,
gdzie X oznacza liczbę naturalną.
Zadanie 2.10 zamiany podanej przez użytkownika liczby naturalnej od 1 do
7 na odpowiadający jej dzień tygodnia. (
Przykład. Jeśli użytkownik poda 1. Powinien mu się wyświetlic tekst: ”PONIEDZIAŁEK”
Uwaga. Jeśli użytkownik poda złą liczbę powinienotrzymać informację: ”Podałeś złą cyfre. Nie ma takiego dnia tygodnia”).
2
Zadanie 2.11 zamiany podanej przez użytkownika liczby naturalnej od 1 do
12 na odpowiadający jej miesiąc. (
Przykład. Jeśli użytkownik poda 1. Powinien mu się wyświetlic tekst: ”STYCZEŃ”
Uwaga. Jeśli użytkownik poda złą liczbę powinienotrzymać informację: ”Podałeś złą cyfre. Nie ma takiego miesiąca”).
Zadanie 2.12 sprawdzania przez które ćwiartki układu współrzędnych przechodzi prosta y = ax + b dla wczytanych przez użytkownika a, b.
Zadanie 2.13 obliczania wartości x dla danego równania ax + b = 0 (i
sprawdzania, czy takie rozwiązanie istnieje- jeśli tak to ile!)
Zadanie 2.14 sprawdzania ilości pierwiastków równania kwadratowego ax2 +
bx + c = 0 dla wczytanych przez użytkownika wartości a, b, c.
Zadanie 2.15 sprawdzania ilości pierwiastków równania kwadratowego ax2 +
bx + c = 0 dla wczytanych przez użytkownika wartości a, b, c i obliczania
watości pierwiastków (o ile oczywiście istnieją).
Zadanie 2.16 sprawdzania ilości pierwiastków równania kwadratowego ax2 +
bx + c = 0 dla wczytanych przez użytkownika wartości a, b, c i sprawdzenia,
czy są oba dodatnie (o ile istnieją).
c
Uwaga. Zastosuj wzory Viette’a: x1 + x2 = −b
a i x1 · x2 = a .
Zadanie 2.17 sprawdzania ilości pierwiastków równania kwadratowego ax2 +
bx + c = 0 dla wczytanych przez użytkownika wartości a, b, c i sprawdzenia,
czy są oba ujemne (o ile istnieją).
Zadanie 2.18 wyznaczania największej i najmniejszej liczby spośród trzech
podanych przez użytkownika wartości: a, b, c.
Zadanie 2.19 wyświetlania trzech podanych przez użytkownika wartości: a,
b, c w kolejności rosnącej (malejącej).
Zadanie 2.20 sprawdzenia ilości rozwiązań i rozwiązywania układu równań
liniowych dla podanych przez użytkownika współczynników a11 , a12 , a21 , a22 ,
b1 , b1 .
Układ liniowy podany jest wzorem:
(
a11 x + a12 y = b1
a21 x + a22 y = b2
3
Zadanie 2.21 obliczania wartości bezwzględnej argumentu x wczytanego przez
użytkownika.
Wzór na wartość bezwzględną:
|x| =


 x
dla x > 0
dla x = 0
dla x < 0
0

 −x
Zadanie 2.22 obliczania funkcji signum, dla argumentu x wczytanego przez
użytkownika.
Wzór funkcji signum podany jest w sposób następujący:
sgn(x) =


 1
0

 −1
dla x > 0
dla x = 0
dla x < 0
Zadanie 2.23 wyznaczania wartości funkcji podanych ”wzorem klamrowym”,
np.:
•
f (x) =


 x+1
1

 −x2 + 1
dla x > 0
dla x = 0
dla x < 0
•
(
f (x) =
3
sin(x)
cos(x)
dla x ¬ 0
dla x > 0
Algorytmy cykliczne
Zadanie 3.1 oblicznia silni n!, dla podanej przez użytkownika wartości n.
Zadanie 3.2 oblicznia dwumianu Newtona (( nk ) =
przez użytkownika wartości n oraz k.
n!
k!·(n−k)! ),
dla podanych
Zadanie 3.3 oblicznia potęgi ab , dla podanych przez użytkownika wartości
a oraz b > 0.
( Uwaga. Należy sprawdzać, czy b > 0).
Zadanie 3.4 oblicznia największego wspólnego dzilenkia dwóch liczb a i b,
wczytanych prze użytkownika.
( Uwaga. Zastosuj algorytm Euklidesa).
Zadanie 3.5 wyświetlania wielomianu, dla podanych przez użytkownika stopnia n i współczynników wielomianu.
4
Zadanie 3.6 obliczania wartości wielomianu, dla podanej przez użytkownika wartości stopnia n i współczynników wielomianu oraz podawanych przez
użytkownika argumenów x (operację obliczania wartości wileomianu kończy
obliczenie wartości wielomianu dla x = 0).
( Uwaga. Możesz zastosować schemat Hornera).
Zadanie 3.7 sprawdzania pierwszości podanej przez użytkownika liczby naturalnej n.
( Uwaga. Możesz zastosować sito Eratostenesa).
Zadanie 3.8 obliczania sumy podawanych przez użytkownika liczb, aż do
wcztania elementu 0.
Zadanie 3.9 obliczania sumy podawanych przez użytkownika liczb, aż do
momentu, kiedy ich suma przekroczy 100.
Zadanie 3.10 obliczania iloczynu podawanych przez użytkownika liczb, aż
do wcztania elementu 1.
Zadanie 3.11 obliczania iloczynu podawanych przez użytkownika liczb, aż
do momentu, kiedy ich iloczyn przekroczy 1000.
Zadanie 3.12 zapisywania w tablicy podanych przez użytkownika 10 liczb i
obliczania:
• sumy wszystkich liczb;
• sumy wszystkich liczb parzystych;
• sumy wszystkich liczb nieparzystych;
• sumy odwrotności wszystkich niezerowych elementów;
• sumy wszystkich elementów tablicy o ineksie parzystym;
• sumy wszystkich elementów tablicy o ineksie nieparzystym;
• iloczynu wszystkich liczb;
• iloczynu liczb różnych od 0;
• iloczynu odwrotności wszystkich niezerowych elementów;
• średniej arytmetycznej podanych liczb;
• średniej geometrycznej wartości bezwzględnej podanych liczb;
i wyznaczania
5
• największej wartości wszystkich liczb;
• największej wartości wszystkich liczb parzystych;
• największej wartości wszystkich liczb nieparzystych;
• najmniejszej wartości wszystkich liczb;
• najmniejszej wartości wszystkich liczb parzystych;
• rozpietości (róznicy największej i najmniejszej wartości);
• najmniejszej wartości wszystkich liczb nieparzystych;
• częstości występowania każdej wartości;
Zadanie 3.13 sprawdzania czy podana przez użytkownika liczba n jest liczbą
Amstronga (suma dzielników danej liczby jest jej równa).
Zadanie 3.14 wczytywania i wyświetlania macierzy kwadratowej o podanym przez użytkownika wymiarze n.
Zadanie 3.15 wczytywania i wyświetlania macierzy prostokątnej o podanym przez użytkownika wymiarze n × m.
Zadanie 3.16 obliczania i wyświetlania podanych zdziałań na macierzach
kwadratowych (prostokątnych) o podanym przez użytkownika wymiarze n
(n × m):
• sumy dwóch macierzy;
• różnicy dwóch macierzy;
• iloczynu dwóch macierzy;
• transpozycji jednej macierzy;
• zerowania elementów na głównej przekątnej danej macierzy;
4
Programowanie proceduralne
Napisz funkcje do zadań z wcześniejszych rozdziałów, miedzy innymi funkcje:
Zadanie 4.1 kwadrat, która dla argumentu a, poda wartość pola kwadratu.
Zadanie 4.2 prostokąt, która dla argumentów a, b, poda wartość pola prostokąta.
Zadanie 4.3 koło, która dla argumentu r, poda wartość pola koła.
6
Zadanie 4.4 trapez, która dla argumentów a, b, h, poda wartość pola trapezu.
Zadanie 4.5 trapez, która dla argumentów a, b, c, poda wartość pola trapezu równoramiennego.
Zadanie 4.6 szescianPole, która dla argumentu a, poda wartość pola całkowitego sześcianu.
Zadanie 4.7 szescianObjetość, która dla argumentu a, poda wartość objetości sześcianu.
Zadanie 4.8 kula, która dla argumentu r, poda wartość pola i objętości
kola.
Zadanie 4.9 liczbaUjemna, która dla argumentu a, poda wartość logiczną,
czy liczba jest większa od 0.
Zadanie 4.10 euklides, która dla argumentów całkowitych a i b, poda największy wspólny dzielnik.
Zadanie 4.11 nww, która dla argumentów całkowitych a i b, poda najmniejszą wspólną wielokrotność.
Zadanie 4.12 powitanie, która dla argumentu imie typu char∗ wyswietli
powitanie: ”witaj XXX”.
Zadanie 4.13 silnia, która dla argumentu calkowitego n poda wartość silni
- n!.
Zadanie 4.14 ulamek, która dla argumentów calkowitych a i b zwróci a|b,
jeśli b = 0, wówczas powinna zwrócić (odpowiednio) +nieskonczonosc lub
−nieskonczonosc.
Zadanie 4.15 ulamekInfo, która dla argumentów calkowitych a i b wyświetli a|b = ..., jeśli b = 0, wówczas powinna wyświetlić się (odpowiednio)
+nieskonczonosc lub −nieskonczonosc.
Zadanie 4.16 silniaInfo, która dla argumentu calkowitego n wyswietli informację ile wynosi wartość silni - n! = ....
Zadanie 4.17 sumaInfo, która dla argumentów calkowitych a, b wyswietli
informację ile wynosi ich suma, iloczyn, minimum, maksimum, (o ile istniją)
wartości ab , ab oraz informację, czy podane liczby są dodatnie.
Zadanie 4.18 formularz, która dla argumentów calkowitych wiek, wzrost,
waga i logicznego tKobieta wyswietli informację, że podany użytkownik jest
kobietą (ew. mężczyzną) w wieku XX, waży XX i ma wzrost XX.
7
5
Algorytmy rekurencyjne
Napisz funkcje rekurencyjne:
Zadanie 5.1 silniaRekur, która dla argumentu calkowitego n poda wartość
silni - n!, skorzystaj ze wzoru:
(
n! =
1
n=0
n(n − 1)! n > 0
dla n ∈ N
Zadanie 5.2 odwracanieTab, która zamienia kolejność elementów dla podanej n−elementowej tablicy tab.
Przykład. Jeśli elementy tab są dane w kolejności 1,2,3,6,4 to po wykonaniu
tej funkcji dane są: 4,6,3,2,1.
Zadanie 5.3 sumaArytm, która wyznacza sumę elementów skończonego ciągu arytmetycznego.
Zadanie 5.4 sumaGeom, która wyznacza sumę elementów skończonego ciągu geometrycznego.
Zadanie 5.5 sredniaAr, która wyznacza średnią arytmetyczną elementów
danych elementów ciągu.
Zadanie 5.6 wiezaHanoi, która wyswietla jak po kolei należy przekładać
klocki z kolejnych wież, aby przełożyć klocki z wieży A na B lub C nie kładąc przy tym większego klocka na mniejszym. Podprogram powinien pobierać
między innymi argumenty: z jakiej wieżyczki powinno się pobrać klocek, na
jaką położyć i ile jest klocków na wieżyczce z której przenosimy.
Zadanie 5.7 potega2doN, która obliczy 2n , dla n ∈ N , skorzystaj z definicji
i własności potęg:
(
n
2 =
1
2n
mod 2
· (2
n
2
)2
n=0
dla n > 0
Napisz podprogramy rekurencyjne dla danach wzorów Fibonacciego:
Zadanie 5.8 fibonacci dla:
un+2 =


 1
1

 u +u
n
n+1
dla n = 0
dla n = 2
dla n > 2
Zadanie 5.9 (*) fibonacci2n dla:
u2n+1 =


 1
dla n = 0
1
dla n = 2
 2

un + u2n+1 dla n > 2
8
6
Sortowanie i wyszukiwanie
Zaimplementuj następujące algorytmy sortujące:
Zadanie 6.1 SortSel sortowania przez selekcję.
Zadanie 6.2 SortWstaw sortowania przez wstawianie.
Zadanie 6.3 SortBabel sortowania bąbelkowego.
Zadanie 6.4 Quicksort sortowania szybkiego (Quicksort).
Zadanie 6.5 SortPoz sortowania pozycyjnego.
Wstaw do podprogramu licznik ilości porównań i przestawień.
Zaimplementuj następujące algorytmy wyszukujące:
Zadanie 6.6 WyszukiwanieLin wyszukiwania liniowego.
Zadanie 6.7 WyszukiwanieBin wyszukiwania binarnego.
Wstaw do podprogramu licznik ilości sprawdzeń.
9