Zadania laboratoryjne (14-16)

Zadanie #9 - 29 maja 2024 r.

Napisać program, który będzie obliczać dyskretną transformatę Fouriera danych wejściowych. Nazwy plików wejściowego oraz wyjściowego (do którego wypiszemy moduł transformaty) należy podać jako argumenty uruchomienia programu. Liczba danych nie jest znana, dlatego należy dane wejściowe wczytywać z realokacją pamięci.

Etapy rozwiązania (po 1 pkt.):

  1. Struktura struct DaneX zawierająca liczbę elementów oraz wskaźnik na tablicę typu double (w niej będą przechowywane dane). {0,5 pkt.}
  2. Analiza argumentów uruchomienia programu, otwarcie plików wejściowego i wyjściowego, kontrola błędów.
  3. Funkcja struct DaneX WczytajDane (FILE *strumien) wczytująca dane z podanego strumienia i zwracająca strukturę z danymi wejściowymi.
  4. Funkcja void WypiszDane (FILE *strumien, struct DaneX dane) wypisująca do podanego strumienia wszystkie liczby. {0,5 pkt.}
  5. Funkcja struct DaneX DFT (struct DaneX dane) licząca dyskretną transformatę Fouriera dla podanych danych i zwracająca ją (moduł Ak) w postaci nowej tablicy ("owiniętej" w nową strukturę).
  6. Użycie powyższych funkcji w funkcji main().

Niepunktowane zadanie domowe: Podział kodu na pliki źródłowe: dft.c, dft.h, main.c oraz Makefile.

Zadanie #04 — 3 kwietnia 2024 r.

Napisać program analizujący angielski przekład Księgi Rodzaju. Program powinien wczytać treść księgi ze standardowego wejścia, obliczając: sumaryczną ilość wyrazów, średnią długość wyrazu, liczbę wyrazów zawierających literę 'e', liczbę wystąpień słowa 'and' oraz słowa 'God' (także w dopełniaczu). Dodatkowo należy wyświetlić histogram przedstawiający procentowe występowanie wszystkich liter alfabetu łacińskiego w tym tekście.

Etapy rozwiązania (po 1 pkt.):

  1. Pętla while odczytująca wyraz po wyrazie. {0,5 pkt.}
  2. Obliczanie ilości i sumarycznej długości wyrazów. {0,5 pkt.}
  3. Obliczanie liczby wystąpień słowa 'and' (uwględnij wielkość liter!). {0,5 pkt.}
  4. Obliczanie liczby wystąpień słowa 'God' (pamiętaj o dopełniaczu!). {0,5 pkt.}
  5. Obliczanie liczby wystąpień wyrazów zawierających literę 'e'. {0,5 pkt.}
  6. Funkcja void aktualizuj_histogram (unsigned *histogram, const char *wyraz) uzupełniająca podany jako parametr "histogram" na podstawie liter występujących w podanym wyrazie.
  7. Funkcja void wyswietl_histogram (const unsigned *histogram) wyświetlający na ekran procentową zawartość poszczególnych liter w histogramie. {0,5 pkt.}
  8. Utworzenie tablicy na histogram (w fukcji main()) oraz prawidłowe wywoływanie ww. funkcji. {0,5 pkt.}
  9. Wyświetlenie wyników analizy na ekran. {0,5 pkt.}

Zadanie #03 — 20 marca 2024 r.

Program weryfikujący numer konta bankowego podanego w formacie NRB. Program powinien poprosić użytkownika o podanie numeru i wczytać go, ignorując białe znaki (np. spacje, myślniki itd.) oraz wyświetlać komunikat Numer rachunku poprawny/niepoprawny oraz wyświetlić nazwę banku prowadzącego rachunek. Do weryfikacji numeru użyć tzw. metody wielomianowej. Zoptymalizować typy używanych tablic pod kątem oszczędności pamięci.

Etapy rozwiązania (po 1 pkt.):

  1. Stworzenie tablicy typu const short [] zawierającej współczynniki wielomianu; wyświetlenie monitu o podanie NRB.
  2. Wczytanie NRB do tablicy liczb (ignorując białe znaki).
  3. Obliczenie liczby kontrolnej.
  4. Sprawdzenie wartości liczby kontrolnej i na tej podstawie wyświetlenie komunikatu o (nie)poprawności numeru.
  5. Wczytanie pliku z identyfikatorami banków, wyszukanie pasującego identyfikatora i wyświetlenie nazwy banku.

Przykładowe numery kont do weryfikacji działania programu można znaleźć na stronie UM Warszawy.

Propozycja dodatkowego, niepunktowanego zadania domowego: zoptymalizuj operacje na tablicach za pomocą "ruchomych" wskaźników.

Zadanie #2 - 13 marca 2024 r. (5 pkt.)

Napisz program, który zapyta użytkownika o liczbę x > 0, a następnie wyliczy wartość ln(1+x) z wykorzystaniem szeregu Maclaurina. Błąd wyliczonej wartości powinien być mniejszy niż 1/1.000.000.

Etapy rozwiązania programu:

  1. Zapytanie i wczytanie liczby x. Sprawdzenie, czy jest z dozwolonego przedziału. Wyświetlenie komunikatu o ewentualnym błędzie.
  2. Rdzeń pętli liczącej wraz ze sprawdzeniem warunku reszty.
  3. Obliczanie i sumowanie kolejnych wyrazów szeregu. {2 pkt.}
  4. Estetyczne wyświetlenie wyniku na ekran.

Propozycja dodatkowego, niepunktowanego zadania domowego: dodaj do programu menu wyboru i kolejne funkcjonalności - obliczenia funkcji sinus i cosinus.

Zadanie #1 - 6 marca 2024 r. (5 pkt.)

Napisz program do wykonania obliczeń księgowych zestawu towarów. Program po uruchomieniu zapyta o nazwę pliku wejściowego oraz wyjściowego. Zestawienie towarów zawiera w każdej linii kolejno: nazwa towaru (jeden wyraz), cena jednostkowa netto, ilość, numer identyfikujący stawkę VAT (0 - 0%, 1 - 5%, 2 - 8%, 3 - 23%). Do pliku wyjściowego przetworzone dane należy zapisać następująco: nazwa towaru (jeden wyraz), cena jednostkowa netto, ilość, numer identyfikujący stawkę VAT, wartość netto, podatek VAT, wartość brutto. Każda kolumna oddzielona tabulacją. Identyczne informacje należy wyświetlić na ekranie, ale w postaci ładnie sformatowanej tabelki wraz z liczbą porządkową w pierwszej kolumnie.

Etapy rozwiązania programu:

  1. Zapytanie i pobranie nazwy pliku wejściowego i wyjściowego.{0,5 pkt.}
  2. Otwarcie plików wraz z obsługą błędów.
  3. Czytanie linia po linii z pliku wejściowego do zmiennych tymczasowych (buforów).
  4. Przetwarzanie rekordów, obliczanie żądanych wartości i zapis do pliku wynikowego. {1,5 pkt.}
  5. Wyświetlenie nagłówka tabeli oraz ładnie sformatowanych danych.

Propozycja dodatkowego, niepunktowanego zadania domowego: na zakończenie programu na ekran wyświetlić następujące informacje: liczba pozycji, suma netto, suma VAT, suma brutto.

Zadanie #0 - 28 lutego 2024 r.

  1. Skonfiguruj swoje ulubione środowisko programistyczne, tj. Geany.
  2. Napisz swój pierwszy fantastyczny program, który wyświetli na ekranie w czytelny sposób rozmiary (w bajtach) kilku przykładowych zmiennych o różnych typach.
  3. Uśmiechnij się!