Strona główna » C++ » Zadania » Skoki na kijku pogo

Skoki na kijku pogo

Zadanie

Wczytaj od użytkownika liczbę jak duża powinna być tablica. Następnie wczytaj do niej kolejne, wpisywane przez użytkownika liczby. Następnie sprawdź dla jakiego najmniejszego n suma ciągu n pierwszych wyrazów tablicy przekracza 100. Sumę ciągu wyrażamy wzorem: . Na sam koniec wypisz dla jakiego

Oryginalna treść zadania

Wyjaśnienie

Na pierwszy rzut oka wzór może wydawać się nieco abstrakcyjny, ale w rzeczywistości pozwala matematycznie zrozumieć zależności w zadaniu. Wysokość z jakiej skacze skoczek z pierwszego schodka na drugi wynosi dokładnie wysokość pierwszego schodka czyli: . Drugi z kolei to połowa pierwszego przeskoku dodać wysokość drugiego schodka czyli . To pozwala nam stwierdzić, że . Dzięki temu widzimy, że możemy wyliczać wysokość na jaką skacze skoczek przy pomocy pętli.

Druga część jeśli zrozumiało się pierwszą powinna być oczywista, bo wystarczy kilka prostych przekształceń, aby uzyskać odpowiedź:


Wiemy też, że wysokość schodka to liczba całkowita czyli możemy przyjąć, że .

Implementacja

Rozwiązanie

  1. #include <iostream>
  2. using namespace std;
  3. int jumps(int* tab, int n);
  4. int first_jump_height(int a);
  5. int main (){
  6.   setlocale(LC_ALL,"");
  7.   int n;
  8.   cout << "Podaj liczbę schodków: ";
  9.   cin >> n;
  10.   int* t = new int[n];
  11.   cout << "Podaj wysokości schodków (w cm): ";
  12.   for(int i=0; i < n; i++)
  13.     cin >> t[i];
  14.   cout << "Skoczek wykona " << jumps(t,n) << " skoki\n";
  15.   cout << "Wys. 1 schodka: " << first_jump_height(t[1]);
  16.   delete t;
  17.   system("pause");
  18.   return 0;
  19. }
  20. int jumps(int* tab, int n){
  21.   int skokow = 0, spadek = 0;
  22.   for(int i = 0; i < n; i++){
  23.     spadek = spadek / 2.0 + tab[i];
  24.     if(spadek > 100)
  25.       return skokow;
  26.     skokow++;
  27.   }
  28.   return skokow;
  29. }
  30. int first_jump_height(int a){
  31.   return ((100 - a) * 2 + 1);
  32. }

(1.) Deklarujemy chęć skorzystania z biblioteki, która pomaga w komunikacji konsola<->użytkownik. (3.) W celu unikania pisania np. std::cout warto dopisać tę linijke. (5.-6.) To linijki deklaracji funkcji. Każda taka deklaracja "typ" "nazwa_funkcji"(argumenty); Pozwala to nam napisać tą funkcję po funkcji main().

Co do funkcji main() to (9.) zawiera tajemniczą linijkę, która nieważne, dlaczego ani jak działa, ale pozwala na wypisywanie polskich znaków. (11. - 13.) Deklarujemy zmienną, pokazujemy komunikat i wczytujemy ilość schodków. (15. - 18.) To deklaracja tablicy do której przy pomocy pętli for wczytujemy dane. (20. - 21.) Wywołanie odpowiednich funkcji i pokazanie komunikatów. (23.) Usuwamy tablice. (24. - 25.) Czekamy na interakcje użytkownika. aby zakończyć interakcje z użytkownikiem.

Przechodzimy teraz do funkcji jumps. To właśnie tutaj sprawdzamy ile skoków wykona skoczek. (29.) Inicjalizujemy zmienne z których skoków mówi ile skoczek wykonał skoków, a spadek będzie przechowywał dotychczas spadek jaki był czyli nasze Sn. Pętla jest wykonywana dla każdego elementu tablicy: wyliczamy aktualny spadek. Sprawdzamy czy spadek nie wyniesie więcej niż 100. Jeśli tak to zwracamy ilość skoków. Na koniec każdej pętli zawsze zwiększamy ilość skoków o 1. Po zakończeniu pętli zwracamy ilość skoków, która de facto wtedy to n - 1.

Funkcja first_jump_height() to napisany w C++ wzór .