Poszukujemy liczby


Cele ogólne
Uczeń:
  • planuje kolejne kroki rozwiązywania problemu z uwzględnieniem podstawowych etapów myślenia komputacyjnego (określenie problemu, definicja modeli i pojęć, znalezienie rozwiązania, zaprogramowanie i testowanie rozwiązania),
  • stosuje algorytmy na liczbach: badania pierwszości liczby, zamiany reprezentacji liczb między pozycyjnymi systemami liczbowymi, działań na ułamkach z wykorzystaniem NWD i NWW (I.2a),
  • sprawdza poprawność działania algorytmów dla przykładowych danych (I.5),
  • projektuje i programuje rozwiązania problemów z różnych dziedzin, stosuje przy tym: instrukcje wejścia/wyjścia, wyrażenia arytmetyczne i logiczne, instrukcje warunkowe, instrukcje iteracyjne, funkcje z parametrami i bez parametrów, testuje poprawność programów dla różnych danych; w szczególności programuje algorytmy z punktu (II.1),
  • przedstawia sposoby reprezentowania w komputerze znaków, liczb, wartości logicznych, obrazów, dźwięków, animacji (RI.5)
  • objaśnia sposoby wykonywania przez komputer działań arytmetycznych i operacji logicznych (RI.6),
  • stosuje zasady programowania strukturalnego i obiektowego w rozwiązywaniu problemów (RII.2),
  • sprawnie posługuje się zintegrowanym środowiskiem programistycznym przy pisaniu, uruchamianiu i testowaniu programów (RII.3).
  • definiuje pojęcia: bit i bajt, system pozycyjny, kod ASCII, Unicode, próbkowanie, kodek, logika, zdanie logiczne, koniunkcja, alternatywa, negacja, spójnik logiczny,
  • wymienia systemy liczbowe wykorzystywane w informatyce.
  • wyjaśnia, jak reprezentowane są w komputerze liczby całkowite, wartości logiczne, znaki, napisy, obrazy, dźwięki i animacje,
  • wyjaśnia, w jaki sposób budowane są zdania logiczne.
  • sumuje liczby w systemie binarnym,
  • zapisuje liczby w kodzie uzupełnień do 2 (U2),
  • buduje zdania logiczne z wykorzystaniem koniunkcji, negacji oraz alternatywy.
  • dostrzega zaletę zapisu liczb w kodzie U2,
  • sprawdza poprawność podanego zdania logicznego.
  • określa, ile informacji można przechować na określonej liczbie bitów.
  • tworzy i łączy ze sobą zdania logiczne,
  • zapisuje kody źródłowe programów opartych na poznanych systemach liczbowych,
  • zapisuje kody źródłowe programów wykorzystujących zdania logiczne.
  • Przydatne narzędzia/oprogramowanie
  • ● komputer z zainstalowanym środowiskiem Code::Blocks http://www.codeblocks.org/downloads/binaries
    Zapoznaj się tekstem w podręczniku strony od 151 do 163 ze szczególnym uwzględnieniem Podsumowania.

    Sformułowanie problemu wyszukiwania

    1. Wylosowanie elementów tablicy
    2. Wypisanie elementów tablicy
    3. Wyszukanie elementu w tablicy
    4. Wypisanie wyniku wyszukiwania

    Funkcja losująca elementy tablicy

    1. void Losuj(int T[])
    2. {
    3. for (int i=0; i<N; i++)
    4. T[i] = rand()%100;
    5. }


    Funkcja wypisująca elementy tablicy

    1. void Wypisz(int T[])
    2. {
    3. for (int i=0; i<N; i++)
    4. cout << T[i] << " ";
    5. cout << endl;
    6. }


    Funkcja wyszukująca liczbę w ciagu n-liczb

    1. bool Wyszukaj(int T[], int x)
    2. {
    3. bool wynik = false;
    4. for (int i=0; i<N; i++)
    5. {
    6. if (T[i] == x)
    7. {
    8. wynik = true;
    9. break;
    10. }
    11. }
    12. return wynik;
    13. }


    Główny program

    1. #include <iostream>
    2. #include <ctime>
    3. using namespace std;
    4. const int N=50;
    5. // funkcje
    6. int main()
    7. {
    8. //Poszukujemy liczby str 151
    9. int T[N], x;
    10. srand(time(NULL));
    11. Losuj(T);
    12. Wypisz(T);
    13. cout << "Podaj szukana liczba" ;
    14. cin >> x;
    15. cout << Wyszukaj(T, x);
    16. MiniMaksi(T);
    17. return 0;
    18. }

    ZADANIA

    1. Napisz program, który w tablicy n liczbcałkowitych znajdzie:
      1. wartość najmniejszą
      2. wartość najwiekszą
      3. liczbę, o najmniejszej sumie cyfr (jeśli jest kilka takich liczb to wszystkie nalezy wymienić)
      4. liczbę, o najwiekszej sumie cyfr (jeśli jest kilka takich liczb to wszystkie nalezy wymienić)
      5. najwiekszą i najmniejszą liczbę parzystą
      6. najwiekszą i najmniejszą liczbę nieparzystą
      7. ilośc liczb należących do przedziału domknietego <a, b> gdzie a<b

        Warto podkreślić praktyczne zastosowanie łączenia zdań logicznych poprzez spójniki logiczne w zdania złożone. Dzięki temu możemy pisać kody źródłowe, które są krótsze i bardziej zwięzłe, gdyż wiele instrukcji warunkowych można zastąpić jedną.

        Realizując ćwiczenia i zadania polegające na stworzeniu kodu źródłowego o określonym działaniu, warto podkreślić, by przed przystąpieniem do pisania kodu źródłowego pamiętać o wcześniejszych etapach rozwiązywania problemów z wykorzystaniem komputera – na przykład sformułowaniu algorytmu.

        Wykorzystując zmienne typu string w języku C++, do kodu źródłowego dodaje się dyrektywę #include . Warto podkreślić, że string i iostream nie są jedynymi bibliotekami, z jakich można korzystać w tym języku. Biblioteki znacznie zwiększają możliwości języka. Można to zilustować animacją Podstawowe biblioteki języka C++, dostępną na stronie dlanauczyciela.pl.

         

        Zadanie 2 (łatwe)

        Przelicz na system dwójkowy podane poniżej liczby dziesiętne:
        10(10) = (2)  

        .

         100(10) = (2)  

        .

        1000(10) = (2)  

        .

        10000(10) = (2)  

        .

        93673(10) = (2)  

        .

         

        Zadanie 3 (dosyć łatwe)

        Ile razy wzrośnie zakres n-bitowych liczb binarnych, gdy liczbę bitów zwiększymy o 1, 2, 3, 4, m bitów? Odpowiedź uzasadnij.

        Zadanie 4 (łatwe)

        Obliczyć wartość dziesiętną następujących liczb dwójkowych:
        11,101(2) = (10)  

        .

        101,1101(2) = (10)  

        .

        1101011,11001(2) = (10)  

        .


        Zadanie 5 (łatwe)

        Przeliczyć podane liczby dziesiętne na zapis dwójkowy:
        7,6875(10) = (2)  

        .

        15,84375(10) = (2)  

        .

        27,8359375(10) = (2)  

        .


        Zadanie 6 (dosyć łatwe)

        Wyznaczyć 100 cyfr ułamkowych dwójkowego rozwinięcia liczby dziesiętnej 0,8(10).

         

        Zadanie 7 (dosyć łatwe)

        Wyznacz błąd względny i bezwzględny rozwinięcia dwójkowego liczby dziesiętnej 0,2(10) o dokładności 10 binarnych cyfr ułamkowych.






  • Zadanie 1 (łatwe)- binarne na dziesiętne



    Oblicz wartość następujących liczb binarnych:
    1100000011(2) =   

    .

    111000111(2) =   

    .

    10101010101(2) =   

    .

    11110000(2) =   

    .

    11001100110011(2) =   

    .




    Podział liczby na cyfry



    Zapisz specyfikację oraz algorytm wypisujący poszczególne cyfry liczby.


    Schemat blokowy



    Zapisz w postaci schematu blokowego algorytm obliczający dla danej liczby naturalnej liczbę jej dzielników właściwych większych od 1. Wykorzystaj pseudokod zapisany w podręczniku na stronie 17 /Ćwiczenie 5 str. 16/


    Programy w C++



    Napisz w środowisku CodeBlocks/ na st następujące programy:
    1. Program sprawdzający czy liczba jest parzysta
    2. Program wypisujący poszczególne cyfry z liczby
    3. Program wyświetlający liczbę dzielnikó właściwych liczby n większych od 1
    4. Program wypisujący NWD dla dwóch liczb naturalnych a i b



    Test wiedzy



    |
    		Pytanie 1.  Zamień liczbę 111 systemu dwójkowego na dziesiątkowy i podaj prawidłowy wynik
    
    		A/  6
    		B/  7
    		C/  10
    		D/  11
    		E/  12
    		
    		Pytanie 2  Zamień liczbę 11001 systemu dwójkowego na dziesiątkowy i podaj prawidłowy wynik
    
    		A/  20
    		B/  24
    		C/  25
    		D/  27
    		E/  31
    		
    		Pytanie 3  Zamień liczbę 101 systemu dwójkowego na dziesiątkowy i podaj prawidłowy wynik
    
    		A/  5
    		B/  7
    		C/  9
    		D/  11
    		E/  13
    		
    		Pytanie 4  Zamień liczbę 110011 systemu dwójkowego na dziesiątkowy i podaj prawidłowy wynik
    
    		A/  37
    		B/  40
    		C/  47
    		D/  50
    		E/  51
    		
    		Pytanie 5  Zamień liczbę 10001 systemu dwójkowego na dziesiątkowy i podaj prawidłowy wynik
    
    		A/  12
    		B/  14
    		C/  17
    		D/  21
    		E/  27
    
    		Pytanie 6  Zamień liczbę 56 systemu dziesiętnego na dwójkowy i podaj prawidłowy wynik
    
    		110011
    		111000
    		110101
    		110101
    		111111
    		
    		Pytanie 7  Zamień liczbę 20 systemu dziesiętnego na dwójkowy i podaj prawidłowy wynik
    
    		10100
    		11111
    		10010
    		10001
    		111101
    
    		Pytanie 8  Zamień liczbę 17 systemu dziesiętnego na dwójkowy i podaj prawidłowy wynik
    
    		A/  11111
    		B/  10101
    		C/  100101
    		D/  10111
    		E/  10001
    		
    		Pytanie 9  Zamień liczbę 120 systemu dziesiętnego na dwójkowy i podaj prawidłowy wynik
    
    		A/  1100100
    		B/  1101100
    		C/  1100110
    		D/  1000010
    		E/  1111000
    		
    		Pytanie 10  Zamień liczbę 6 systemu dziesiętnego na dwójkowy i podaj prawidłowy wynik
    
    		A/  110
    		B/  101
    		C/  100
    		D/  111
    		E/  1001
    		
    		Pytanie 11	Zamień liczbę 76 systemu ósemkowego na szesnastkowy i podaj prawidłowy wynik
    		
    		A/  A3
    		B/  4F3
    		C/  4C
    		D/  2A
    		E/  3E
    		
    		Pytanie 12  Zamień liczbę 5F systemu szesnastkowego na dziesiątkowy i podaj prawidłowy wynik
    
    		A/  79
    		B/  87
    		C/  64
    		D/  95
    		E/  112
    			
    		



    Podsumowanie



  • Instrukcja wejścia (wczytywanie danych): cin >> nazwa_zmiennej
  • Instrukcja wyjścia (wypisanie informacji na ekran) : cout << "teks do wyswietlenia" ;
    cout <<nazwa_zmiennej;
  • Instrukcja warunkowa if - else w języku C++ ma postać:
    if (warunek) instrukcja na tak;
    else instrukcja na nie;
  • Instrukcja pętli for
    for
    ( inicjalizacja zmiennej; warunek; aktualizacja zmiennej )
    {
    // Wykonywany kod, jeśli warunek został spełniony
    }
    Przykład:
    for ( int i = 0; i < 10; i++ )
    {
    cout << i << endl;
    }
  • Etapy rozwiązywania problemu: określenie problemu (zadania), podanie specyfikacji, sformułowanie rozwiązania - algorytmu, zaprogramowanie rozwiązania, testowanie rozwiązania.
  • Specyfikacja zadania to określenie danych i wyniku oraz określenie związku między nimi
  • Algorytm to skończony ciąg instrukcji prowadzących do rozwiązania problemu
  • Zapis algorytmu w języku programowania to kod źródłowy programu
  • Testowanie programu polega na wielokrotnym uruchamianiuu go dla różnych danych, dane muszą spełniać warunki specyfikacji.
  • Podstawowe instrukcje sterujące to: instrukcja warunkowa, instrukcja iteracji (pętla)
  • Translatory (które dzielimy na na kompilatory i interpretery) to programy tłumaczące kod źródłowy programu na język maszynowy.
  • Zintegrowane środowisko programistyczne (IDE) to program posiadający edytor do pisania kodu źródłowego, translator oraz funkcje ułatwiające uruchamianie programów



  • Przykładowe rozwiązania oraz komentarze do wybranych ćwiczeń i zadań
  • (ćw. 1, s. 28)
    a) Największą liczbą ośmiocyfrową w systemie dwójkowym jest 11111111, której zapis dziesiętny to 255.
    b) Największą liczbą szesnastocyfrową w systemie dwójkowym jest 1111111111111111, której zapis dziesiętny to 65535. Rozwiązanie w pliku T02_CW1.
  • (ćw. 2, s. 29) Lista kroków: Kroki 2, 3 powtarzaj, aż liczba będzie równa 0: Podziel liczbę przez 2. Część całkowitą z dzielenia liczby zapisz, a resztę z dzielenia wypisz. Rozwiązanie w pliku T02_CW2.
  • (ćw. 3, s. 31) Oczekiwany zapis w systemie szesnastkowym to B3. Rozwiązanie w pliku T02_CW3.
  • (ćw. 4, s. 32)
    a) 2 bajty to 16 bitów, czyli w zapisie binarnym 16 cyfr. Największą liczbą będzie zatem 1111111111111111 zapisane binarnie, czyli 65535 w systemie dziesiętnym.
    b) 78 w systemie binarnym to 1001110, liczba składa się z 7 znaków, czyli do zapisu potrzeba minimum 7 bitów. Rozwiązanie w pliku T02_CW4.
  • (ćw. 5, s. 34) a), c) Aby przedstawić w kodzie U2 liczbę ujemną, należy najpierw dodać do niej wartość podwojonej wagi najstarszego bitu. Na przykład, jeśli liczbę −100 chcemy zapisać w U2 za pomocą 8 bitów, dodajemy do niej liczbę 256, więc otrzymujemy: −100 + 256 = 156. Liczba −100 będzie zatem odpowiadać w kodzie U2 liczbie dziesiętnej 156, przedstawionej w sposób binarny bez znaku. b) Dla liczb nieujemnych zapis w kodzie U2 odpowiada naturalnemu zapisowi liczb binarnych. Rozwiązanie w pliku T02_CW5.
  • (ćw. 6, s. 35) Odpowiedź: −43. Rozwiązanie w pliku T02_CW6.
  • (ćw. 7, s. 36) Rozwiązanie w pliku T02_CW7.
  • (ćw. 8, s. 39) Rozwiązanie w pliku T02_CW8.
  • (ćw. 9, s. 42) a) Zapis operatora koniunkcji w języku C++ to &&. Kod źródłowy do realizacji tego podpunktu znajduje się na s. 41. Rozwiązanie w pliku T02_CW9.
  • (zad. 1) Odpowiedź: 551. Rozwiązanie w pliku T02_ZAD1.
  • (zad. 2) Odpowiedź: 89D0. Rozwiązanie w pliku T02_ZAD2.
  • (zad. 3) Z systemu szesnastkowego można dokonać bezpośredniego przeliczenia na system binarny, przeliczając poszczególne cyfry. E → 1110, 0 → 0000, A → 1010, 8 → 1000, zatem cała liczba w zapisie binarnym to 1110000010101000. Rozwiązanie w pliku T02_ZAD3.
  • (zad. 4) Odpowiedź: 35243. Rozwiązanie w pliku T02_ZAD4.
  • (zad. 5) Odpowiedź: −119. Rozwiązanie w pliku T02_ZAD5.
  • (zad. 6) Rozwiązanie w pliku T02_ZAD6.
  • (zad. 7) Rozwiązanie w pliku T02_ZAD7.
  • (zad. 8) Rozwiązanie w pliku T02_ZAD8.
  • (zad. 9) Liczba Część całkowita z dzielenia przez 4 Reszta z dzielenia przez 4 80 20 0 20 5 0 5 1 1 1 0 1 Liczbę 1100 w systemie czwórkowym można przedstawić, wykorzystując dwa znaki, ustawione parami jeden pod drugim. Poprawną odpowiedzią będzie c., gdyż kropki mogą odpowiadać cyfrze 1, a gwiazdki, cyfrze 0. Rozwiązanie w pliku T02_ZAD9.
  • (zad. 10) Rozwiązanie w pliku T02_ZAD10.
  • (zad. 11) Rozwiązanie w pliku T02_ZAD11.
  • (zad. 12) Rozwiązanie w pliku T02_ZAD12.
  • (zad. 13) Rozwiązanie /T02_ZAD13/.
  • (zad. 14) Rozwiązanie w pliku T02_ZAD14.
  • (zad. 15) Rozwiązanie w pliku T02_ZAD15.
  • (zad. 16) Rozwiązanie w pliku T02_ZAD16.
  • (zad. 17) Przy rozwiązywaniu zadania można posłużyć się także tabelą kodów ASCII ze s. 37. Zdaniem, którym firma Google podzieliła się z użytkownikami Twittera, było: I’m feeling lucky. Rozwiązanie w pliku T02_ZAD17.

    Rozwiązania do ćwiczeń z tej strony

    Ćwiczenie 5 - test
  • 1 --> B; 2 --> C; 3 --> A; 4 --> E; 5 --> C; 6 --> B; 7 --> A; 8 --> E; 9 --> E; 10 --> A; 11 --> E; 12 --> D;