Wymagania formalne:
Z każdego zadania należy przygotować sprawozdanie zawierające: stronę tytułową, pełną treść zadania, czytelnie skomentowany kod źródłowy, zrzuty ekranu prezentujące poprawne działanie programu dla różnych danych wejściowych oraz krótkie wnioski podsumowujące nabyte umiejętności. Każde zadanie domowe powinno być rozwiązane w osobnym projekcie konsolowym C#.
D1.1
Wielowalutowy przelicznik netto i brutto
Cel

Utworzenie narzędzia finansowego operującego na typie decimal z wykorzystaniem operatorów warunkowych. Student wykazuje zrozumienie mechanizmu wartości domyślnych oraz formatowania walutowego w kontekście międzynarodowym.

Scenariusz

Twoja firma planuje ekspansję na rynki zagraniczne i potrzebuje prostego narzędzia do szybkiej konwersji cenników. Program powinien umożliwiać użytkownikowi wprowadzenie kwoty w złotówkach oraz wybranie waluty docelowej z listy: EUR, USD, GBP. W przypadku, gdy użytkownik pominie wybór waluty (pozostawi puste pole), system powinien automatycznie przyjąć euro jako walutę bazową, wykorzystując operator null-coalescing. Po wczytaniu danych algorytm przelicza kwotę według stałego, zadeklarowanego w kodzie kursu. Dodatkowo system musi obliczyć wartość podatku VAT (przyjmij 23%) i wyświetlić zarówno kwotę netto, jak i brutto w walucie docelowej. Musisz zadbać o to, aby wynik końcowy zawierał poprawny symbol waluty i był czytelny dla klienta. Program powinien również zweryfikować, czy wprowadzona kwota wejściowa jest liczbą dodatnią. Całość ma stanowić przykład solidnego podejścia do obsługi danych finansowych o wysokiej precyzji. Jest to świetna okazja do poćwiczenia interpolacji tekstów z rozbudowanymi flagami formatującymi.

Sugerowane kroki do wykonania
  1. Pobierz od użytkownika kwotę w PLN za pomocą metody Console.ReadLine().
  2. Przekonwertuj wejście na typ decimal, obsługując potencjalne błędy konwersji.
  3. Dodaj instrukcję warunkową sprawdzającą, czy kwota jest większa od zera.
  4. Pobierz od użytkownika kod waluty (EUR, USD lub GBP) jako zwykły string.
  5. Zastosuj operator ?? aby przypisać do zmiennej pomocniczej wartość "EUR", jeśli wejście jest nullem lub puste.
  6. Zadeklaruj zmienną przeznaczoną na kurs wymiany i ustaw jej wartość początkową.
  7. Użyj instrukcji switch do przypisania odpowiedniego kursu (np. EUR: 4.30, USD: 4.00, GBP: 5.00).
  8. Przelicz kwotę netto dzieląc złotówki przez wyznaczony kurs wymiany.
  9. Oblicz wartość brutto, doliczając 23% podatku do uzyskanej kwoty netto.
  10. Wyświetl przejrzyste podsumowanie zawierające obie kwoty sformatowane do dwóch miejsc po przecinku.
D1.2
Statystyka pomiarów laboratoryjnych masy
Cel

Implementacja algorytmu analizy statystycznej zbioru danych z wykorzystaniem tablic 1D o dynamicznie określanym rozmiarze. Student doskonali umiejętność wyszukiwania ekstremów (min/max) oraz precyzyjnych obliczeń na ciągach liczb.

Scenariusz

Otrzymałeś zlecenie od laboratorium chemicznego na stworzenie oprogramowania do gromadzenia wyników ważenia próbek. Program najpierw pyta użytkownika, ile pomiarów zostało wykonanych w trakcie bieżącej serii badawczej. Na tej podstawie system dynamicznie tworzy tablicę o odpowiedniej długości, gotową na przyjęcie danych typu decimal lub double. Następnie w pętli użytkownik wprowadza kolejne wartości masy dla każdej z przebadanych próbek. Twoim zadaniem jest opracowanie algorytmu, który bezbłędnie wyznaczy najmniejszą i największą masę zarejestrowaną w tabeli. Dodatkowo program musi zsumować wszystkie wyniki i wyliczyć średnią arytmetyczną z całej serii pomiarowej. Musisz uwzględnić sytuację, w której dane mogą być wprowadzane z różną precyzją, dlatego formatowanie wyników powinno być ujednolicone. Finalny raport ma być przejrzysty i zawierać informację o liczbie pomiarów poza zakładanym zakresem błędu (np. powyżej 100g). Dzięki temu narzędziu laboranci będą mogli błyskawicznie ocenić jakość przeprowadzonego eksperymentu. Program jest przykładem klasycznego przetwarzania wsadowego danych pomiarowych.

Sugerowane kroki do wykonania
  1. Poproś o podanie liczby pomiarów (N) i wczytaj ją jako liczbę całkowitą (int).
  2. Zadeklaruj tablicę typu decimal o rozmiarze N pobranym od użytkownika.
  3. Uruchom pętlę for trwającą od 0 do N-1, aby wypełnić tablicę danymi z klawiatury.
  4. Upewnij się, że każdy wprowadzony ciąg znaków jest poprawnie konwertowany na liczbę.
  5. Zainicjalizuj zmienne min i max wartością pierwszego elementu tablicy.
  6. Stwórz pętlę przechodzącą przez tablicę w celu wyszukania faktycznych wartości skrajnych.
  7. Podczas iteracji sumuj wszystkie elementy do osobnej zmiennej zbiorczej.
  8. Po wyjściu z pętli oblicz średnią (suma podzielona przez N).
  9. Wyświetl kompletny raport zwierający: Min, Max, Sumę oraz Średnią z odpowiednim opisem.
  10. Przetestuj program dla co najmniej pięciu różnorodnych wartości pomiarowych.
D1.3
Generator sformatowanej tabliczki mnożenia
Cel

Zaawansowana praca z tablicami dwuwymiarowymi regularnymi oraz sterowanie formatowaniem szerokości pola w konsoli. Student uczy się poprawnej wizualizacji struktur macierzowych w interfejsie tekstowym.

Scenariusz

Projektujesz pomoc dydaktyczną dla uczniów szkoły podstawowej w formie elektronicznej tabliczki mnożenia. Twoim celem jest stworzenie programu, który wygeneruje macierz liczb o wymiarach 10 na 10 i wypełni ją wynikami mnożenia odpowiednich indeksów. Musisz najpierw zainicjalizować tablicę wielowymiarową w kodzie, a następnie użyć zagnieżdżonych struktur sterujących do jej wypełnienia. Kluczowym wyzwaniem w tym zadaniu nie jest samo obliczenie, lecz estetyczne wyświetlenie gotowej tabeli na ekranie konsoli. Każda kolumna musi być wyrównana do prawej strony tak, aby jedności, dziesiątki i setki znajdowały się w pionowych liniach. Wykorzystaj do tego celu specyficzne parametry formatowania metody Console.Write, określające minimalną szerokość pola. Dodatkowo program powinien wyróżnić wiersz i kolumnę nagłówkową za pomocą innego koloru lub separatorów tekstowych. Dzięki temu narzędziu uczeń będzie mógł łatwo odczytać wynik na przecięciu wybranych wartości. Program demonstruje, jak ważne dla użytkownika końcowego jest poprawne formatowanie surowych danych numerycznych. Całość powinna być czytelna nawet przy zmianie rozmiaru okna terminala.

Sugerowane kroki do wykonania
  1. Zadeklaruj regularną tablicę dwuwymiarową typu int o rozmiarze 10x10.
  2. Użyj pętli zewnętrznej sterującej wierszami (od 1 do 10).
  3. Użyj pętli wewnętrznej sterującej kolumnami (od 1 do 10).
  4. Zapisz wynik mnożenia i*j w odpowiedniej komórce tablicy (pamiętaj o przesunięciu indeksu o 1).
  5. Po wypełnieniu całej tablicy, stwórz nową parę zagnieżdżonych pętli do wyświetlania.
  6. W pętli wewnętrznej użyj Console.Write z formatowaniem szerokości, np. {0, 4}.
  7. Pamiętaj o przejściu do nowej linii (Console.WriteLine) po zakończeniu każdego wiersza.
  8. Dodaj nagłówki kolumn nad tablicą dla lepszej orientacji użytkownika.
  9. Spróbuj dodać linię oddzielającą nagłówek od właściwej treści tabliczki.
  10. Zweryfikuj, czy wyrównanie pionowe kolumn jest stałe dla liczb jednocyfrowych i trzycyfrowych.
D1.4
System rabatowy "Lojalność+"
Cel

Projektowanie wielowarstwowej logiki decyzyjnej z użyciem instrukcji switch oraz operacji arytmetycznych na typie decimal. Student uczy się łączenia stałych rabatów procentowych z warunkowymi bonusami kwotowymi.

Scenariusz

Otrzymałeś zadanie zintegrowania modułu naliczania zniżek dla systemu sprzedażowego w sklepie odzieżowym. Program musi pobrać od użytkownika całkowitą wartość koszyka zakupów (jako kwotę brutto) oraz zdefiniować status karty lojalnościowej klienta. Dostępne statusy to: Bronze (5% zniżki), Silver (10% zniżki) oraz Gold (20% zniżki). Twoim zadaniem jest poprawne wyliczenie kwoty po zastosowaniu rabatu wynikającego bezpośrednio z poziomu członkowstwa. To jednak nie wszystko - system posiada dodatkową regułę promocyjną promującą duże zakupy. Jeśli wartość koszyka po naliczeniu bazowego rabatu nadal przekracza barierę 1000 zł, klient otrzymuje stały bonus kwotowy w wysokości 50 zł odejmowany od rachunku. Musisz przygotować algorytm tak, aby kolejność naliczania zniżek była zgodna z polityką firmy (najpierw procentowa, potem kwotowa). Program kończy działanie, wyświetlając szczegółowy raport: kwotę początkową, wartość przyznanego upustu lojalnościowego oraz finalną kwotę do zapłaty. Zadbaj o obsłużenie sytuacji, w której kwota do zapłaty mogłaby teoretycznie stać się ujemna (choć przy tych danych to mało prawdopodobne). Całość ma być przykładem czytelnego kodu biznesowego opartego na jasnych regułach.

Sugerowane kroki do wykonania
  1. Pobierz wartość zakupów od użytkownika i skonwertuj ją na decimal.
  2. Pobierz nazwę statusu (Bronze/Silver/Gold) jako ciąg znaków.
  3. Użyj funkcji .ToUpper() na pobranym statusie, aby uniknąć problemów z wielkością liter.
  4. Zadeklaruj zmienną przeznaczoną na procentowy wymiar zniżki.
  5. Wykorzystaj strukturę switch do przypisania odpowiedniego procentu rabatu dla każdego statusu.
  6. Oblicz wartość rabatu procentowego i odejmij ją od kwoty wejściowej.
  7. Zastosuj instrukcję if do sprawdzenia, czy aktualna kwota przekracza próg 1000 zł.
  8. Jeśli warunek jest spełniony, odejmij dodatkowy bonus w wysokości 50.00m.
  9. Upewnij się, że finalny wynik nie jest mniejszy od zera (użyj np. Math.Max).
  10. Wyświetl sformatowane zestawienie finansowe z użyciem interpolacji stringów.
D1.5
Generator paragonu z analizą pozycji
Cel

Łączenie danych z wielu tablic jednowymiarowych oraz iteracja przy użyciu pętli for i foreach. Student uczy się generowania złożonych raportów tekstowych z wyliczaniem wartości pochodnych (podatki) dla każdej pozycji z osobna.

Scenariusz

Budujesz uproszczony moduł drukujący paragony dla kasy fiskalnej w małym punkcie usługowym. Program operuje na dwóch powiązanych ze sobą tablicach: jedna zawiera nazwy pięciu sprzedanych towarów, a druga ich ceny jednostkowe netto. Twoim celem jest wygenerowanie eleganckiego zestawienia, które dla każdego produktu wyliczy wartość podatku VAT (przyjmij stawkę 23%) oraz cenę brutto. Program musi wyświetlić każdą pozycję w osobnej linii, dbając o czytelne oddzielenie nazwy produktu od jego ceny. Po wypisaniu wszystkich pozycji, system ma za zadanie podsumować cały paragon, podając łączną wartość netto, całkowity zebrany podatek oraz sumaryczną kwotę brutto do zapłaty. Musisz wykorzystać pętlę foreach do przejścia po nazwach produktów w części informacyjnej podsumowania (np. "Sprzedano: Produkt A, Produkt B..."). Zwróć szczególną uwagę na estetykę wyjścia - użyj linii z myślników lub gwiazdek, aby oddzielić nagłówek i stopkę dokumentu. Paragon powinien wyglądać profesjonalnie i być łatwy do odczytania przez fikcyjnego klienta. Zadanie to łączy umiejętności pracy na indeksach tablic z nowoczesnymi strukturami iteracyjnymi języka C#. Finalny kod musi być dobrze udokumentowany, wyjaśniając sposób mapowania rekordów między tablicami.

Sugerowane kroki do wykonania
  1. Zadeklaruj i zainicjalizuj 5-elementową tablicę string z nazwami towarów.
  2. Zadeklaruj i zainicjalizuj 5-elementową tablicę decimal z cenami netto produktów.
  3. Utwórz trzy zmienne pomocnicze typu decimal na łączną sumę netto, vat i brutto.
  4. Wypisz ozdobną linię nagłówkową paragonu w oknie konsoli.
  5. Użyj pętli for, aby przechodzić przez obie tablice jednocześnie przy użyciu tego samego indeksu.
  6. Wewnątrz pętli oblicz VAT i brutto dla aktualnej pozycji oraz zaktualizuj sumy zbiorcze.
  7. Wypisz sformatowaną linię produktu z użyciem stałych szerokości kolumn.
  8. Po zakończeniu pętli for, wypisz ozdobną linię oddzielającą.
  9. Wypisz wyliczone podsumowanie wszystkich wartości (netto, vat, brutto) z formatowaniem :c.
  10. Użyj na końcu pętli foreach, aby wypisać listę sprzedanych produktów w jednej linii po przecinku.