Monika Dekster

It's not a bug. It's an undocumented feature!
To iterate is human, to recurse divine (L. Peter Deutsch)
Talk is cheap. Show me the code (Linus Torvalds)

Laboratorium 1.

Zapoznanie z podstawowymi narzędziami, edycja, kompilacja.

  1. Kompilator gcc/g++
  2. Przykładowe pliki:
    • Program w C: sum_N.c
      kompilacja: gcc -std=c11 -O2 -Wall -Werror=implicit-function-declaration -o sum_N sum_N.c -lm
    • Program w C: random.c
      kompilacja: gcc -std=c11 -O2 -Wall -Werror=implicit-function-declaration -o random random.c -lm
    • Program w C++: hello.cpp
      kompilacja: g++ -std=c++11 -O2 -Wall -o hello hello.cpp -lm

Zadania

  1. Paragon fiskalny zawiera następujące informacje: cenę jednostkową netto a, liczbę zakupionych sztuk towaru x oraz wysokość podatku VAT podaną w procentach p. Napisz program, który wczytuje powyższe dane z klawiatury, a następnie oblicza wartość netto zakupionego towaru, wartość podatku VAT oraz wartość towaru brutto. Wyniki obliczeń należy wypisać na ekranie w formie uproszczonego "paragonu fiskalnego".
  2. Napisz program, który wczytuje liczbę całkowitą $N$ a następnie oblicza i drukuje na ekran wartość $N!$. Uwaga: silnia bardzo szybko powoduje przepełnienie całkowitoliczbowe. Sprawdź dla jakich wartości $N$ program wyprowadza prawidłowy wynik. Przetestuj działanie programu dla różnych typów danych (dla ułatwienia można zastosować definicję typedef).
  3. Program losuje liczbę $0 \le X \le 100$. Napisz funkcję, która zgaduje wartość $X$. W pętli losujemy $n \in [0, 100]$. Jeżeli $X = n$ zgadliśmy $X$, jeżeli nie na podstawie wartości $X$ i $n$ ograniczamy przedział, z którego losujemy kolejne $n$.
  4. Szyfr Cezara polega na szyfrowaniu kolejnych liter (pozostałe znaki pozostawiamy bez zmian). Każda litera zostaje zamieniona w k-tą następną w alfabecie (k jest stałą szyfru), przy czym jeżeli taka nie istnieje (wychodzimy za 'z'), to odliczanie jest kontynuowane z powrotem od 'a'. Szyfrowanie zachowuje wielkość liter. Napisz funkcję, która szyfruje ciąg znaków podany jako argument.
  5. Napisz funkcję, która przyjmuje parametr całkowity $n$ i zwraca liczbę bitów w $n$ ustawionych na 1.
  6. Napisz program, który stwierdza reprezentację liczb na danej maszynie (big endian czy little endian).
  7. Znajdź pole powierzchni ograniczone osią $Ox$ i wykresem funkcji $\sin(x)$ w przedziale $[a, b]$ metodą Monte Carlo. Dane wejściowe: $a, b, N$ (liczba losowanych punktów).
  8. Napisać program tabelaryzujący funkcję cosinus w zadanym przedziale. Dane wejściowe: początek przedziału, koniec przedziału, krok (przyrost $x$). Tabela powinna zawierać 3 kolumny: wartość argumentu $x$, wartość $\cos(x)$ policzoną z wykorzystaniem funkcji bibliotecznej oraz wartość $\cos(x)$ policzoną z rozwinięcia w szereg Taylora.
  9. Dana jest tablica liczb całkowitych o zadanej długości n. Napisz program, który znajduje spójny podciąg o największej sumie. Ponieważ elementy tablicy mogą być ujemne, rozwiązaniem nie jest cała tablica.

    Przykład:

    Dla tablicy {1, 2, -5, 4, -3, 2} rozwiązaniem jest 4 (pojedynczy element o indeksie 3). Jeżeli wszystkie elementy tablicy są ujemne to rozwiązaniem jest 0 (podciąg o długości 0).