Stefan Sokołowski, Podstawy programowania
LABORATORIUM 4


Zadanie 1:

Ostatnią cyfrę liczby naturalnej można otrzymać, badając resztę z dzielenia tej liczby przez 10: Proszę uruchomić program, który będzie wczytywał liczbę naturalną, a następnie drukował ją od końca. Np.
  po wczytaniu 123wydrukuje 321
  po wczytaniu 2024wydrukuje 4202
itd.

Uwaga dla zaawansowanych:   w tym zadaniu tablice nie są potrzebne i proszę ich nie stosować.


Zadanie 2:

Napisać programy rysujące na ekranie (gwiazdkami) poniższe wzorki. Za każdym razem wielkość rysunku powinna zależeć od podanej liczby. Tak więc program powinien najpierw czytać liczbę całkowitą, a potem wyświetlać wzorek o wielkości wyznaczonej tą liczbą. Program powinien działać dla dowolnej dodatniej wartości tej liczby.

Wskazówka:   Najprostszym rozwiązaniem tego zadania jest zagnieżdżenie pętli w większej pętli.
    --------------------------------------------------------------------
  1. Przykład:
    Pełny kwadrat o boku podanej długości; rysunki dla długości 3, 5 i 6 mają być takie:

    3  5  6
    ***
    ***
    ***
     
    *****
    *****
    *****
    *****
    *****
     
    ******
    ******
    ******
    ******
    ******
    ******
    Uwaga:   to nie wygląda na kwadrat dlatego, że czcionki na ekranie są ,,wyższe niż szersze''; proszę się tym nie przejmować.

    Rozwiązanie:
    #include<stdio.h>
    
    int main() {
      int bok, wiersz, kolumna;
      printf("  Bok kwadratu: ");  scanf("%i", &bok);
      if (bok < 0)
        printf("  !!! Bok kwadratu nie moze byc ujemny !!!\n");
      else {
        printf("\n");
        wiersz = 0;
        while (wiersz < bok) {
          kolumna = 0;
          while (kolumna < bok) {
            printf("*");  kolumna = kolumna+1;
          }
          printf("\n");  wiersz = wiersz+1;
        }
        printf("\n");
      }
    
      return 0;
    }
         
  2. --------------------------------------------------------------------
  3. Kwadrat pusty (sama ramka) o boku podanej długości; rysunki dla długości 3, 5 i 6 mają być takie:

    3  5  6
    ***
    * *
    ***
     
    *****
    *   *
    *   *
    *   *
    *****
     
    ******
    *    *
    *    *
    *    *
    *    *
    ******
  4. --------------------------------------------------------------------
  5. Trójkąt prostokątny równoramienny o podanej długości przyprostokątnych; rysunki dla długości 3, 5 i 6 mają być takie:

    3  5  6
    *
    **
    ***
     
    *
    **
    ***
    ****
    *****
     
    *
    **
    ***
    ****
    *****
    ******
  6. --------------------------------------------------------------------
  7. Krzyż o podanej długości ramienia, równej grubości ramion; rysunki dla długości 3, 5 i 6 mają być takie:

    3  5  6
       ***
       ***
       ***
    *********
    *********
    *********
       ***
       ***
       ***
     
         *****
         *****
         *****
         *****
         *****
    ***************
    ***************
    ***************
    ***************
    ***************
         *****
         *****
         *****
         *****
         *****
     
          ******
          ******
          ******
          ******
          ******
          ******
    ******************
    ******************
    ******************
    ******************
    ******************
    ******************
          ******
          ******
          ******
          ******
          ******
          ******


Zadanie 3:

Potęgowanie można wykonywać przez liniowe wielokrotne mnożenie na przykład tak:
     1 · 3.1410 =         
     =   3.14 · 3.149   =          ←   bo   1 · 3.14 = 3.14
     =   9.8596 · 3.148   =          ←   bo   3.14 · 3.14 = 9.8596
     =   30.9591 · 3.147   =          ←   bo   9.8596 · 3.14 = 30.9591
     =   97.2117 · 3.146   =          ←   bo   30.9591 · 3.14 = 97.2117
     =   305.2448 · 3.145   =          ←   bo   97.2117 · 3.14 = 305.2448
     =   958.4686 · 3.144   =          ←   bo   305.2448 · 3.14 = 958.4686
     =   3009.5914 · 3.143   =          ←   bo   958.4686 · 3.14 = 3009.5914
     =   9450.117 · 3.142   =          ←   bo   3009.5914 · 3.14 = 9450.117
     =   29673.367 · 3.141   =          ←   bo   9450.117 · 3.14 = 29673.367
     =   93174.373 · 3.140   =          ←   bo   29673.367 · 3.14 = 93174.373
     =   93174.373         

Ale potęgowanie można też wykonywać binarnie, za każdym krokiem dzieląc wykładnik przez 2 jeśli jest parzysty, lub zmniejszając o 1, jeśli jest nieparzysty:
     1 · 3.1410 =         
     =   1 · 9.85965   =          ←   bo   3.14 · 3.14 = 9.8596
     =   9.8596 · 9.85964   =          ←   bo   1 · 9.8596 = 9.8596
     =   9.8596 · 97.21172   =          ←   bo   9.8596 · 9.8596 = 97.2117
     =   9.8596 · 9450.1171   =          ←   bo   97.2117 · 97.2117 = 9450.117
     =   93174.373 · 9450.1170   =          ←   bo   9.8596 · 9450.117 = 93174.373
     =   93174.373         

Zamiast 10 mnożeń wykonaliśmy tylko 5. Dla wyższych wykładników oszczędność na ilości wykonanych mnożeń będzie szybko rosnąć:
wykładnikliczba mnożeń
liniowobinarnie
16 16 ≤ 8
256 256 ≤ 16
65536 65536 ≤ 32
..............................
2n 2n ≤ 2·n

Proszę napisać i uruchomić program, który wczytuje liczbę rzeczywistą x oraz wykładnik całkowity n≥0, po czym wylicza metodą binarną potęgę xn i wyświetla wynik.


Zadanie 4 domowe:

Liczba naturalna jest pierwsza, jeśli jej jedynymi dzielnikami naturalnymi jest ona sama oraz 1. Proszę napisać program, który

Spis liczb pierwszych do testowania można znaleźć na przykład tutaj.


Do mojej głównej witrynki

Ostatnia modyfikacja: 16 października 2024