Zbiór zadań laboratoryjnych przygotowanych dla studentów pierwszego roku informatyki. Materiał obejmuje podstawy składni, typy danych, instrukcje sterujące oraz fundamenty programowania obiektowego w środowisku konsolowym.
Zapoznanie studenta z podstawową strukturą pliku źródłowego w języku C#. Zrozumienie różnicy między modelem klasowym a instrukcjami najwyższego poziomu (Top-level statements).
W tym zadaniu Twoim celem jest utworzenie pierwszego, działającego programu w środowisku C#. Program powinien wyświetlać na ekranie powitanie oraz aktualną datę i godzinę systemową. Należy przeanalizować dwa podejścia do budowy aplikacji konsolowej. Pierwsze z nich to tradycyjny model wykorzystujący klasę Program oraz statyczną metodę Main jako punkt wejścia. Drugie podejście to nowoczesne "Top-level statements", które upraszczają kod do minimum, usuwając zbędną "otoczkę" kodu systemowego. W opisie zadania należy uwzględnić, jak kompilator interpretuje te dwie formy zapisu. Wykorzystasz do tego przestrzeń nazw System oraz klasę Console. Program ma być prostym, ale kompletnym przykładem poprawnej składni C#.
Poznanie podstawowych typów danych dostępnych w języku C# oraz umiejętność przypisywania do nich wartości pochodzących od użytkownika.
Każdy program komputerowy przetwarza dane, które muszą być przechowywane w pamięci w odpowiednich "szufladkach" zwanych zmiennymi. W tym zadaniu stworzysz aplikację, która pobierze od użytkownika cztery różne informacje: imię (tekst), wiek (liczba całkowita), wzrost (liczba zmiennoprzecinkowa) oraz informację, czy użytkownik lubi programować (wartość logiczna true/false). Wykorzystasz typy danych takie jak string, int, double oraz bool. Ważnym elementem jest konwersja danych pochodzących z klawiatury, ponieważ funkcja Console.ReadLine() zawsze zwraca tekst. Do zamiany tekstu na liczby użyjesz metod takich jak int.Parse() lub double.Parse(). Na koniec program powinien wyświetlić wszystkie te dane w jednej, czytelnej linii tekstu, wykorzystując tzw. interpolację ciągu znaków (znak $ przed cudzysłowem). To zadanie uczy, jak dobierać typy zmiennych do rodzaju przechowywanych informacji.
Zastosowanie instrukcji warunkowych if-else do budowy logiki decyzyjnej opartej na wielu parametrach.
W tym zadaniu napiszemy program, który symuluje prosty system kadrowy sprawdzający uprawnienia emerytalne. Użytkownik zostanie poproszony o podanie swojego imienia, aktualnego wieku oraz płci (oznaczonej jako 'K' dla kobiet i 'M' dla mężczyzn). Program musi uwzględnić polskie przepisy prawa pracy, według których wiek emerytalny dla kobiet wynosi 60 lat, a dla mężczyzn 65 lat. Wykorzystując instrukcje warunkowe if oraz else if, program powinien sprawdzić, czy użytkownik osiągnął już wymagany wiek. Jeśli tak, wyświetli radosną informację o prawie do odpoczynku. W przeciwnym razie obliczy, ile dokładnie lat pozostało do osiągnięcia limitu. Ważnym aspektem zadania jest obsługa wejścia tak, aby litery 'k'/'m' były traktowane tak samo jak wielkie 'K'/'M'. To zadanie uczy logicznego myślenia oraz umiejętności rozgałęziania przepływu programu na podstawie danych wejściowych.
Praktyczne wykorzystanie operatorów arytmetycznych oraz zaawansowane formatowanie wyników finansowych w konsoli.
Zadanie polega na stworzeniu nowoczesnego kalkulatora zakupowego, który precyzyjnie oblicza koszty produktów. Użytkownik wprowadza nazwę towaru, jego cenę netto oraz stawkę podatku VAT wyrażoną w procentach (np. 23). Program musi wykonać szereg operacji matematycznych: obliczyć kwotę podatku oraz cenę brutto za jedną sztukę. Dodatkowo program pyta o liczbę zakupionych sztuk i oblicza łączną wartość zamówienia. Kluczowym elementem zadania jest użycie typu danych decimal zamiast double, co jest profesjonalnym standardem przy obliczeniach finansowych ze względu na eliminację błędów zaokrągleń. Wyniki powinny być wyświetlone w czytelny sposób, z użyciem formatowania walutowego (np. symbol zł dodawany automatycznie przez system). Uczeń dowie się, jak operować na liczbach zmiennoprzecinkowych i jak prezentować dane w sposób profesjonalny dla użytkownika końcowego.
Ćwiczenie złożonych warunków logicznych przy użyciu operatorów && oraz || oraz instrukcji switch.
Wyobraź sobie, że budujesz system sprzedaży biletów dla lokalnego kina. Cena bazowa biletu wynosi 30 zł, ale system musi automatycznie naliczać zniżki na podstawie wieku i statusu studenta. Dzieci do lat 7 wchodzą za darmo (0 zł). Młodzież i studenci w wieku od 7 do 26 lat otrzymują 50% zniżki, o ile posiadają ważną legitymację. Seniorzy powyżej 65 roku życia mają stałą zniżkę 30%. Twój program powinien zapytać o wiek, a następnie – jeśli wiek mieści się w przedziale studenckim – dopytać o posiadanie legitymacji (T/N). Wykorzystaj operatory logiczne (AND oraz OR) do połączenia tych warunków w elegancki sposób. Dodatkowo, użyj instrukcji switch, aby pozwolić użytkownikowi wybrać rodzaj seansu (2D lub 3D), gdzie seans 3D dolicza dodatkowe 10 zł do ostatecznej ceny. Zadanie to doskonale uczy budowania wielowarstwowej logiki biznesowej, która jest podstawą większości aplikacji komercyjnych.
Opanowanie zagnieżdżonych pętli for oraz technik wyrównywania tekstu w konsoli.
Pętle są jednym z najważniejszych fundamentów programowania, pozwalającym na wielokrotne powtarzanie tych samych operacji. W tym zadaniu stworzysz automatyczny generator tabliczki mnożenia o wymiarach 10x10. Wykorzystasz do tego dwie pętle for – zewnętrzną dla wierszy i wewnętrzną dla kolumn. Każda komórka tabeli powinna być wynikiem mnożenia indeksu wiersza przez indeks kolumny. Aby tabela wyglądała estetycznie i była czytelna, musisz zastosować metodę PadLeft() na wyświetlanym tekście lub użyć odpowiednich manipulatorów formatowania w Console.Write(). Dzięki temu liczby jedno- i dwucyfrowe będą idealnie wyrównane w kolumnach. Zadanie to uczy, jak zarządzać wielowymiarowymi strukturami danych oraz jak dbać o profesjonalny wygląd interfejsu tekstowego, co jest kluczowe w narzędziach konsolowych (CLI).
Zastosowanie pętli while oraz klasy Random do obsługi interaktywnych procesów o nieznanej liczbie powtórzeń.
Stworzysz klasyczną grę liczbową, w której komputer "myśli" liczbę z zakresu od 1 do 100, a zadaniem gracza jest jej odgadnięcie. Program wykorzystuje klasę Random do wygenerowania tajnej liczby przed rozpoczęciem gry. Sercem aplikacji jest pętla while, która będzie się powtarzać tak długo, aż użytkownik poda poprawną wartość. Po każdej próbie program musi udzielić podpowiedzi: "Za dużo!" lub "Za mało!", naprowadzając gracza na właściwy trop. Dodatkowym wyzwaniem jest zaimplementowanie licznika prób, który na końcu gry poinformuje użytkownika, jak sprawnie poradził sobie z zadaniem. Zadanie to uczy obsługi zdarzeń losowych, sterowania pętlami nieskończonymi z warunkiem przerwania (break lub zmiana flagi logicznej) oraz budowania interakcji, która wymaga reakcji programu na błędy użytkownika.
Zrozumienie pojęcia modularności kodu poprzez definicję i wywoływanie własnych metod z parametrami.
Do tej pory cały kod pisaliśmy wewnątrz jednej głównej metody. W tym zadaniu nauczysz się dzielić program na mniejsze, logiczne części zwane metodami. Stworzysz uniwersalny przelicznik jednostek temperatury, który będzie posiadał dwie oddzielne metody: jedna do zamiany stopni Celsjusza na Fahrenheita, a druga do wykonania odwrotnej operacji. Każda z tych metod musi przyjmować parametr typu double i zwracać wynik tego samego typu. W metodzie głównej (Main) zbudujesz proste menu, które pozwoli użytkownikowi wybrać kierunek konwersji, a następnie wywoła odpowiedni fragment kodu. Zadanie to uczy, jak unikać powtarzania tego samego kodu (zasada DRY – Don't Repeat Yourself) oraz jak zarządzać przepływem danych między różnymi częściami aplikacji. To pierwszy krok w stronę tworzenia złożonych systemów o czytelnej i łatwej w utrzymaniu architekturze.
Wprowadzenie do świata obiektowości poprzez definicję własnej klasy, pól oraz metod operujących na stanie obiektu.
Programowanie obiektowe (OOP) to paradygmat, w którym dane i funkcje są łączone w spójne całości zwane obiektami. W tym zadaniu Twoim celem jest zamodelowanie klasy Student, która będzie przechowywać informacje o imieniu, nazwisku oraz numerze indeksu. Klasa powinna posiadać publiczne pola (lub właściwości) oraz specjalną metodę o nazwie PrzedstawSie(), która wyświetli sformatowane dane studenta na konsoli. W metodzie głównej programu musisz utworzyć (zinstancjonować) co najmniej dwa obiekty tej klasy, przypisać im różne wartości dla pól i wywołać ich metody. Dzięki temu zadaniu zrozumiesz kluczową różnicę między klasą (projektem/szablonem), a obiektem (konkretnym bytem w pamięci komputera). Dowiesz się również, jak hermetyzacją i strukturą kodu można odwzorowywać rzeczywiste obiekty w świecie cyfrowym.
Podsumowanie zdobytych umiejętności poprzez budowę aplikacji generującej estetyczne raporty tekstowe.
Ostatnie zadanie jest zwieńczeniem kursu podstaw i wymaga połączenia niemal wszystkich poznanych elementów: zmiennych, pętli, instrukcji warunkowych oraz formatowania tekstu. Napiszesz program generujący "Raport z postępów kursu C#". Program powinien pozwolić na wprowadzenie listy wykonanych zadań (wykorzystując pętlę), a następnie wyświetlić je w formie eleganckiej tabeli z nagłówkiem i stopką. Kluczowe jest użycie zaawansowanej interpolacji ciągów znaków do precyzyjnego wyrównywania kolumn (np. {nazwa,-20}) oraz formatowania dat. Program powinien również obliczać procentowy postęp wszystkich zadań w stosunku do oczekiwanego celu. Zadanie to uczy dbałości o szczegóły oraz pokazuje, jak w prostym środowisku konsolowym można tworzyć profesjonalne raporty danych, które są czytelne i estetyczne dla użytkownika. Jest to doskonały trening przed tworzeniem bardziej zaawansowanych aplikacji biznesowych i systemowych.