Język programowania c++. Podaj specyfikację zadania i skonstruuj algorytm w postaci funkcji (rekurencja) realizujący następujące operacje:
a). sprawdzanie, czy wszystkie wyrazy w tablicy 10-elementowej liczb rzeczywistych są większe od 5, b). sprawdzanie, czy w tablicy 5-elementowej liczb całkowitych znajduje się liczba podzielna przez 7, c). sprawdzanie, czy w n - elementowej tablicy zawierającej wartości rzeczywiste znajduje się liczba różna od 2, d). prawdzanie ,czy w 15-elementowej tablicy zawierającej liczby całkowite wszystkie elementy są NIE większe od 11, e). sprawdzanie ,czy w n-elementowej tablicy zawierającej liczby całkowite znajduje się liczba nie mniejsza od 20,
Proszę , o poprawne odpowiedzi, daje naj. Dziękuję.
vdrake6
Jednym z prostych zastosowań rekurencji w podanych przez ciebie zadaniach jest przechodzenie przez tablicę, w taki sposób, że do funkcji sprawdzającej będzie podawany wskaźnik do testowanej tablicy i aktualny indeks, który sprawdzamy. A więc w symbolicznym, matematycznym zapisie będzie to wyglądało:
Gdzie T to testowana tablica, a i to aktualny indeks, który testujemy. Teraz będziemy przeprowadzali test na i-tym indeksie tablicy. Jeżeli przeprowadzony test będzie udany (otrzymamy logiczną "jedynkę"), przechodzimy do indeksu o 1 mniejszego, a więc do i - 1. Jeżeli przeprowadzony test nie będzie udany zwracamy fałsz i tym samym kończymy algorytm. Testy przeprowadzamy aż do pierwszego indeksu w tablicy (0). Jeżeli teraz wprowadzimy tzw. predykat przyjmujący wartości liczbowe, a zwracający wartości logiczne (1 i 0). To zapis rekurencyjny naszej funkcji będzie wyglądał tak:
Gdzie T[n] oznacza n-ty element w tablicy T, a and jest logicznym operatorem iloczynu logicznego (∧). Teraz uwzględniając przypadek elementarny, kiedy testowany indeks jest pierwszym w tablicy dochodzimy do wzoru:
Teraz przechodzimy do odpowiednich podpunktów zadań wstawionych przez ciebie.
a) Predykatem w tym przypadku będzie test, czy zadana liczba jest większa od 5. Więc predykat będzie wyglądał następująco:
Funkcja sprawdzająca rekurencyjnie całą 10-elementową tablicę będzie wyglądała następująco:
http://pastebin.com/qpdsZES6
Indeksem domyślnym jest 9, gdyż numerację indeksów tablic w C++ zaczynamy od 0, tak więc powoduje to, że w tablicy musi znajdować się dokładnie 10 elementów.
b) Sprawa tutaj będzie prezentowała się w trochę inny sposób, gdyż zadany predykat musi być spełniony dla CO NAJMNIEJ jednego elementu tablicy. Jego postać to:
Gdzie a mod b jest operatorem zwracającym resztę z dzielenia całkowitej liczby a przez całkowitą liczbę b.
Trzeba zmodyfikować lekko postać naszej funkcji, gdyż zamiast operatora iloczynu logicznego użyjemy operatora sumy logicznej (or, ∨):
Cały kod funkcji dla tego przypadku będzie wyglądał następująco: http://pastebin.com/rEu93iVn
c) Sprawa będzie wyglądała podobnie jak w poprzednim przypadku, z tym, że predykat będzie wyglądał następująco:
Cały kod będzie wyglądał tak: http://pastebin.com/FDsdkCLq
Widoczną zmianą jest usunięcie domyślnej wartości testowanego indeksu. Mamy tutaj do czynienia z n-elementową tablicą, a więc jej długość trzeba podać jako parametr wywoływanej funkcji.
Gdzie T to testowana tablica, a i to aktualny indeks, który testujemy. Teraz będziemy przeprowadzali test na i-tym indeksie tablicy. Jeżeli przeprowadzony test będzie udany (otrzymamy logiczną "jedynkę"), przechodzimy do indeksu o 1 mniejszego, a więc do i - 1. Jeżeli przeprowadzony test nie będzie udany zwracamy fałsz i tym samym kończymy algorytm. Testy przeprowadzamy aż do pierwszego indeksu w tablicy (0). Jeżeli teraz wprowadzimy tzw. predykat przyjmujący wartości liczbowe, a zwracający wartości logiczne (1 i 0). To zapis rekurencyjny naszej funkcji będzie wyglądał tak:
Gdzie T[n] oznacza n-ty element w tablicy T, a and jest logicznym operatorem iloczynu logicznego (∧). Teraz uwzględniając przypadek elementarny, kiedy testowany indeks jest pierwszym w tablicy dochodzimy do wzoru:
Teraz przechodzimy do odpowiednich podpunktów zadań wstawionych przez ciebie.
a) Predykatem w tym przypadku będzie test, czy zadana liczba jest większa od 5. Więc predykat będzie wyglądał następująco:
Funkcja sprawdzająca rekurencyjnie całą 10-elementową tablicę będzie wyglądała następująco:
http://pastebin.com/qpdsZES6
Indeksem domyślnym jest 9, gdyż numerację indeksów tablic w C++ zaczynamy od 0, tak więc powoduje to, że w tablicy musi znajdować się dokładnie 10 elementów.
b) Sprawa tutaj będzie prezentowała się w trochę inny sposób, gdyż zadany predykat musi być spełniony dla CO NAJMNIEJ jednego elementu tablicy.
Jego postać to:
Gdzie a mod b jest operatorem zwracającym resztę z dzielenia całkowitej liczby a przez całkowitą liczbę b.
Trzeba zmodyfikować lekko postać naszej funkcji, gdyż zamiast operatora iloczynu logicznego użyjemy operatora sumy logicznej (or, ∨):
Cały kod funkcji dla tego przypadku będzie wyglądał następująco:
http://pastebin.com/rEu93iVn
c) Sprawa będzie wyglądała podobnie jak w poprzednim przypadku, z tym, że predykat będzie wyglądał następująco:
Cały kod będzie wyglądał tak:
http://pastebin.com/FDsdkCLq
Widoczną zmianą jest usunięcie domyślnej wartości testowanego indeksu. Mamy tutaj do czynienia z n-elementową tablicą, a więc jej długość trzeba podać jako parametr wywoływanej funkcji.
d) http://pastebin.com/BvWJHdMe
e) http://pastebin.com/DL9m90yH