Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Powtórzenie wiadomości o pętli while

Pętla whilepętla whilePętla while jest specjalną instrukcją programistyczną służącą do powtarzania określonych czynności. To alternatywne rozwiązanie dla pętli forpętla forpętli for, która działa bardzo podobnie. Stosuje się ją zazwyczaj w sytuacjach, gdy kluczową kwestią jest liczba wykonanych powtórzeń. Z kolei pętli while używa się wówczas, gdy liczba wykonywanych powtórzeń nie jest znana, natomiast ważne jest spełnienie określonego warunku.

Przykładowe zastosowania pętli while:

  1. operacje matematyczne na danej liczbie wykonywane do momentu osiągnięcia określonej wartości,

  2. wypisanie n liczb parzystych większych od 0,

  3. odliczanie pozostałego czasu trwania sesjisesjasesji.

Implementacja pierwszego przykładu w pseudokodzie:

Linia 1. liczba ← 0. Linia 3. dopóki liczba otwórz nawias ostrokątny 5 wykonuj dwukropek. Linia 4. liczba ← liczba plus 1.

Implementacja drugiego przykładu w pseudokodzie:

Linia 1. n ← 5. Linia 2. licznik ← 0. Linia 3. i ← 1. Linia 5. dopóki licznik otwórz nawias ostrokątny n wykonuj dwukropek. Linia 6. jeżeli i mod 2 znak równości 0 dwukropek. Linia 7. wypisz i. Linia 8. licznik ← licznik plus 1. Linia 9. i ← i plus 1.

Implementacja trzeciego przykładu w pseudokodzie:

Linia 1. ile podkreślnik sekund ← 60. Linia 3. dopóki ile podkreślnik sekund zamknij nawias ostrokątny 0 wykonuj dwukropek. Linia 4. wypisz otwórz nawias okrągły cudzysłów Pozostało cudzysłów plus ile podkreślnik sekund plus cudzysłów sekund trwania sesji cudzysłów zamknij nawias okrągły. Linia 5. czekaj jedną sekundę. Linia 6. ile podkreślnik sekund ← ile podkreślnik sekund minus 1.

Zadanie 1. Silniowy system pozycyjny

Pojęcie silnisilniasilni dla liczb naturalnych większych od zera definiuje się następująco:

n !   =   1   ·   2   ·   3   ·   . . .   ·   ( n     1 )   ·   n

Silniowy system pozycyjny to pozycyjny sposób zapisu liczb naturalnych, w którym mnożniki dla kolejnych pozycji definiowane są przez silnie kolejnych liczb naturalnych, czyli:

( x ) !   =   ( x n   x n 1   x n 2   . . .   x 2   x 1 ) !   =   x n   ·   n !   +   x n 1   ·     ( n     1 ) !   +   . . .   +   x 2   ·   2 !   +   x 1   ·   1 !

W systemie silniowym współczynnik , który odpowiada mnożnikowi , spełnia zależność . Zapis każdej liczby w silniowym systemie pozycyjnym jest jednoznaczny, tzn. każdą liczbę naturalną można zapisać tylko w jeden i dokładnie jeden sposób. W omawianym zadaniu będziemy mieć do czynienia wyłącznie z takimi liczbami, dla których współczynniki spełniają zależność .

Poniżej przedstawiono algorytm z lukami, który zamienia zapis liczb z systemu dziesiętnego na system silniowy. Uzupełnij luki w tym algorytmie.

Linia 1. silnia ← 1. Linia 2. k ← 1. Linia 3. dopóki otwórz nawias okrągły silnia otwórz nawias ostrokątny x zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 4. k ← k plus 1. Linia 5. silnia ← silnia asterysk k. Linia 6. jeżeli kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 7. silnia ← silnia div k. Linia 8. k ← k – 1. Linia 9. s ← cudzysłów cudzysłów. Linia 10. dopóki otwórz nawias okrągły k zamknij nawias ostrokątny 0 zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 11. cyfra ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 12. s ← s ◦ tekst otwórz nawias okrągły cyfra zamknij nawias okrągły. Linia 13. x ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 14. silnia ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 15. k ← k – 1.

Uwaga:

  • tekst(x) – funkcja zamieniającą liczbę x na jej zapis tekstowy

  • " " – pusty napis

  • u ◦ v – sklejenie dwóch napisów: u oraz v

Specyfikacja problemu:

Dane:

  • x – liczba całkowita dodatnia zapisana w systemie dziesiętnym

Wynik:

  • s – napis reprezentujący liczbę x zapisaną w systemie silniowym

Zadanie zostało opracowane przez Centralną Komisję Egzaminacyjną i zostało opublikowane w zbiorze zadań maturalnych z informatyki. Cały zbiór można znaleźć na stronie internetowej CKE.

Rozwiązanie

Przeanalizujmy algorytm krok po kroku. Pierwsza z luk do uzupełnienia pojawia się tuż po obliczeniu silni, której docelowa wartość ma być nie mniejsza niż x:

Linia 1. silnia ← 1. Linia 2. k ← 1. Linia 3. dopóki otwórz nawias okrągły silnia otwórz nawias ostrokątny x zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 4. k ← k plus 1. Linia 5. silnia ← silnia asterysk k. Linia 6. jeżeli kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 7. silnia ← silnia div k. Linia 8. k ← k – 1.

Instrukcja umieszczona w bloku jeżeli powoduje zmniejszenie wartości zmiennych silnia oraz k. W celu otrzymania pierwszego współczynnika z silniowego systemu pozycyjnego odszukujemy jak największą wartość silni, jednak nie większą niż konwertowana liczba. W związku z tym jedynym możliwym warunkiem dla bloku jest silnia > x:

Linia 1. silnia ← 1. Linia 2. k ← 1. Linia 3. dopóki otwórz nawias okrągły silnia otwórz nawias ostrokątny x zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 4. k ← k plus 1. Linia 5. silnia ← silnia asterysk k. Linia 6. jeżeli silnia zamknij nawias ostrokątny x dwukropek. Linia 7. silnia ← silnia div k. Linia 8. k ← k – 1.

Kolejne luki w algorytmie pojawiają się po zadeklarowaniu pustego łańcucha znaków i  bezpośrednio dotyczą konwersji do silniowego systemu pozycyjnego:

Linia 1. silnia ← 1. Linia 2. k ← 1. Linia 3. dopóki otwórz nawias okrągły silnia otwórz nawias ostrokątny x zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 4. k ← k plus 1. Linia 5. silnia ← silnia asterysk k. Linia 6. jeżeli silnia zamknij nawias ostrokątny x dwukropek. Linia 7. silnia ← silnia div k. Linia 8. k ← k – 1. Linia 9. s ← cudzysłów cudzysłów. Linia 10. dopóki otwórz nawias okrągły k zamknij nawias ostrokątny 0 zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 11. cyfra ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 12. s ← s ◦ tekst otwórz nawias okrągły cyfra zamknij nawias okrągły. Linia 13. x ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 14. silnia ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 15. k ← k – 1.

Luka w linii 11. dotyczy obliczania kolejnej cyfry w silniowym systemie pozycyjnym. Zgodnie z definicją będzie to wynik dzielenia całkowitego przez odpowiednią silnię będącą współczynnikiem przy danej cyfrze, która jest zapisana w zmiennej silnia:

Linia 1. silnia ← 1. Linia 2. k ← 1. Linia 3. dopóki otwórz nawias okrągły silnia otwórz nawias ostrokątny x zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 4. k ← k plus 1. Linia 5. silnia ← silnia asterysk k. Linia 6. jeżeli silnia zamknij nawias ostrokątny x dwukropek. Linia 7. silnia ← silnia div k. Linia 8. k ← k – 1. Linia 9. s ← cudzysłów cudzysłów. Linia 10. dopóki otwórz nawias okrągły k zamknij nawias ostrokątny 0 zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 11. cyfra ← x div silnia. Linia 12. s ← s ◦ tekst otwórz nawias okrągły cyfra zamknij nawias okrągły. Linia 13. x ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 14. silnia ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 15. k ← k – 1.

Następnym krokiem będzie pomniejszenie wartości zmiennej x w celu wyznaczenia cyfr na kolejnych pozycjach. Zmniejszamy ją zatem o zapisaną już część w postaci silniowej, czyli iloczyn zmiennych cyfra oraz silnia (której wartość odpowiada współczynnikowi przy cyfrze):

Linia 1. silnia ← 1. Linia 2. k ← 1. Linia 3. dopóki otwórz nawias okrągły silnia otwórz nawias ostrokątny x zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 4. k ← k plus 1. Linia 5. silnia ← silnia asterysk k. Linia 6. jeżeli silnia zamknij nawias ostrokątny x dwukropek. Linia 7. silnia ← silnia div k. Linia 8. k ← k – 1. Linia 9. s ← cudzysłów cudzysłów. Linia 10. dopóki otwórz nawias okrągły k zamknij nawias ostrokątny 0 zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 11. cyfra ← x div silnia. Linia 12. s ← s ◦ tekst otwórz nawias okrągły cyfra zamknij nawias okrągły. Linia 13. x ← x minus cyfra asterysk silnia. Linia 14. silnia ← kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka kropka. Linia 15. k ← k – 1.

Ostatnia luka stanowi pomniejszanie silni w celu otrzymania kolejnego współczynnika pozycyjnego – podobny krok wykonujemy w linii 7. W związku z tym na zmiennej silnia wykonujemy dzielenie całkowite przez zmienną k:

Linia 1. silnia ← 1. Linia 2. k ← 1. Linia 3. dopóki otwórz nawias okrągły silnia otwórz nawias ostrokątny x zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 4. k ← k plus 1. Linia 5. silnia ← silnia asterysk k. Linia 6. jeżeli silnia zamknij nawias ostrokątny x dwukropek. Linia 7. silnia ← silnia div k. Linia 8. k ← k – 1. Linia 9. s ← cudzysłów cudzysłów. Linia 10. dopóki otwórz nawias okrągły k zamknij nawias ostrokątny 0 zamknij nawias okrągły przecinek wykonuj dwukropek. Linia 11. cyfra ← x div silnia. Linia 12. s ← s ◦ tekst otwórz nawias okrągły cyfra zamknij nawias okrągły. Linia 13. x ← x minus cyfra asterysk silnia. Linia 14. silnia ← silnia div k. Linia 15. k ← k – 1.

Schemat oceniania

  • 3 pkt – za poprawne uzupełnienie wszystkich luk,

  • 2 pkt – za poprawne uzupełnienie 3 luk,

  • 1 pkt – za poprawne uzupełnienie 2 luk,

  • 0 pkt – za poprawne uzupełnienie 1 lub 0 luk, lub za brak odpowiedzi.

Słownik

pętla for
pętla for

instrukcja sterująca, która pozwala wielokrotnie wykonać ustalony zestaw poleceń; o liczbie powtórzeń decyduje specjalna zmienna, zwyczajowo nosząca nazwę i

pętla while
pętla while

pętla, która wykonuje instrukcje w niej zawarte tak długo, jak zadane jej wyrażenie logiczne jest prawdziwe

sesja
sesja

w kontekście stron internetowych: przechowuje przez pewien czas na serwerze szczegóły połączenia między klientem a serwerem, np. dane konta po zalogowaniu

silnia
silnia

n! – iloczyn kolejnych liczb naturalnych, mniejszych lub równych n