Stefan Sokołowski, Podstawy programowania
LABORATORIUM 12


Zadanie 1:

Napisać funkcję, która dla danej liczby rzeczywistej  x , takiej że  0 < x <1 , oblicza liczbę zer po kropce w rozwinięciu dziesiętnym  x . Na przykład Uwaga:
Proszę nie stosować bibliotecznych funkcji obliczających logarytmy.


Zadanie 2:

Do obliczania potęg sum stosuje się t.zw. współczynniki Newtona zdefiniowane przy pomocy funkcji silnia w następujący sposób:

    

Kolejne potęgi sum liczy się tak:

    

Proszę skonstruować funkcję  newton  obliczającą współczynnik Newtona dla liczb naturalnych  n  i  k  (muszą one stanowić parametry tej funkcji), wykorzystując funkcję  silnia  z zad.1 z lab.11. Następnie proszę napisać program, który będzie


Zadanie 3:

Liczenie współczynnika Newtona przez silnię, jak to było zasugerowane w zad.2, ma ,,krótkie nogi'', bo (jak wiemy) silnie liczb większych niż 12 są zbyt duże dla typu  int . Może tak się zdarzyć, że sam współczynnik jest całkiem skromnej wielkości, ale dla jego policzenia trzeba by podzielić przez siebie zbyt duże silnie.

Na szczęście istnieje alternatywna metoda jego liczenia: przez trójkąt Pascala, taki jak na rysunku po prawej. Jest on wypełniony współczynnikami Newtona: współczynnik     stoi na przecięciu  n -tej linii poziomej i  k -tej linii skośnej. Sam nieskończony trójkąt jest tworzony w taki sposób, że
Proszę przerobić funkcję  newton  z zad.1 tak, żeby nie używała silni, ale żeby liczyła współczynnik z trójkąta Pascala. Program powinien działać dokładnie tak samo jak poprzednio, jednak liczyć poprawnie również dla  n≥13 . Oczywiście definicję funkcji  silnia  można z programu usunąć.

Wskazówka:
Wewnątrz ciała funkcji  newton  trzeba będzie zadeklarować pomocniczą tablicę liczb całkowitych o wymiarach  (n−k+1) × (k+1) . Ciało funkcji powinno wypełniać tą tablicę współczynnikami Newtona, a następnie zwracać jej prawy dolny róg.


Zadanie 4 domowe:

Pod koniec wykładziku z Lab.11 zad.0 podana została funkcja ustalająca pierwszeństwo alfabetyczne słów zapisanych w tablicach jednowymiarowych wypełnionych literami (por. przegląd, str.12). Proszę napisać program, który wykorzysta tą funkcję do alfabetycznego sortowania listy słów.

Dokładniej, program powinien
Wskazówki:

1.   Dwuwymiarowa tablica znaków  tab[n][k]  (o  n  wierszach i  k  kolumnach) może być traktowana jako jednowymiarowa tablica długości  n  tablic jednowymiarowych długości  k . W szczególności funkcję, której parametrami mają być tablice jednowymiarowe, można stosować do takich pojedynczych wierszy:

definicja funkcji: użycie funkcji:
 void funkcja(char x[], char y[]) { ... }   funkcja(a[i], a[j]); 
 int funkcja(char x[], char y[]) { ... }  if (funkcja(a[i], a[j])) { ... } 
 

2.   W tym programie oprócz funkcji  poprzedza  z wykładziku potrzebna jeszcze będzie funkcja bezwynikowa (void) zamieniająca całe wiersze. Wtedy będzie już można sortować tablicę słów tak samo jak sortowaliśmy tablicę liczb; tylko tam, gdzie sprawdzaliśmy mniejszość liczb, trzeba będzie ją zastąpić poprzedzaniem wiersza przez wiersz.


Do mojej głównej witrynki

Ostatnia modyfikacja: 16 stycznia 2025