Wprowadzenie do programowania
Przegląd sekcji
-
Kurs stanowi szybkie wprowadzenie w podstawy tworzenia programów, ze szczególnym uwzględnieniem języków C i Python.
Nie jest to jednak kompleksowy trening, wyczerpujący wszelkie podstawy i podsuwający zróżnicowane ćwiczenia konieczne do opanowania wspomnianych języków. Materiały pomyślane są raczej jako porządkujące podstawowe pojęcia związane z programowaniem i akcentujące wspólne dla różnych języków elementy. Zapoznając się z nimi uzyskasz pierwsze spojrzenie na to, co trzeba mieć na uwadze komunikując komputerowi zadania w formie kodu. Dzięki temu, mam nadzieję, będziesz w stanie bardziej świadomie poruszać się po kursach i materiałach dotyczących konkretnych języków programowania, zapewne nie tylko C i Pythona, pamiętając, że dla inżyniera stanowią one narzędzia - zróżnicowane, ale jednak ostatecznie służące temu samemu celowi - wykonaniu przez system komputerowy pożądanych operacji.
Opracowanie: Mateusz Szumilas
Ostatnie zmiany: 26 listopada 2025 r.
Kurs powstał w ramach projektu "OMNIS2 Otwartość. Modernizacja. Nowoczesność. Integracja. Społeczność.", współfinansowanego ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Plus, w ramach programu Fundusze Europejskie dla Rozwoju Społecznego 2021-2027.Publikacja jest dostępna na zasadach licencji Creative Commons CC BY 4.0 Uznanie autorstwa.
Treść licencji dostępna jest na stronie https://creativecommons.org/licenses/by/4.0/deed.plW ramkach Zadanie znajdziesz pytania i ćwiczenia do samodzielnego opracowania. Nawiązują one do prezentowanych w kursie treści, a także poruszają zagadnienia wykraczające poza te materiały. Nie pomijaj ich - to ważne, żeby zaangażować się nie tylko w odbieranie, ale także wykorzystywanie lub przekazywanie nabytych informacji. Nie mierz się z nimi tylko w głowie - jeżeli w zadaniu trzeba uruchomić kod, zrób to; jeżeli trzeba poszukać wyjaśnienia cechy lub elementu języka programowania - poświęć chwilę na przestudiowanie tematu i zapisz krótką odpowiedź - wystarczy kilka zdań, może być na papierze albo cyfrowo. Jeżeli nie wiesz jak wyjaśnić pojęcie lub napisać kod - zapisz pytania, które się nasuwają. -
Gdy mamy do rozwiązania problem, mniej lub bardziej złożony, z pomocą mogą przyjść nam pewne schematy myślenia. Myślenie obliczeniowe (computational thinking) to określenie procesu, który obejmuje takie działania, jak: dekompozycja, wyszukiwanie wzorców, abstrahowanie czy tworzenie algorytmów. Z punktu widzenia programisty, celem myślenia obliczeniowego jest ustalenie jakie informacje ma otrzymać maszyna obliczeniowa i jakie kroki podjąć, żeby rozwiązać postawiony problem. Dobrze, gdy ten proces jest realizowany świadomie i w sposób usystematyzowany już zanim rozpocznie się tworzenie programu komputerowego.
-
W programach komputerowych musimy zapisywać liczby, które dla procesora ostatecznie przybierają formę ciągów zer i jedynek. Nie posługujemy się jednak tylko systemem dziesiętnym i liczbami całkowitymi. W tej sekcji przyjrzyjmy się zapisowi liczb całkowitych w systemach (notacjach) dwójkowej i szesnastkowej, a także zapisowi liczb obejmującym część ułamkową w systemach stało- i zmiennoprzecinkowych.
-
Czy można wyróżnić punkty wspólne dla różnych języków programowania? Elementy, które występują w prawie wszystkich programach? Tak, są pewne składowe, które spotykamy powszechnie.
Omówimy więc zmienne i struktury danych. Zarówno pojedyncze zmienne, jak i całe struktury służą nam do przechowywania różnych danych dla naszego kodu. Wtedy, kiedy program musi je modyfikować, ale także gdy wykorzystuje je jako stałe. Logicznie powiązane ze sobą zmienne łączymy w struktury danych. Następnym elementem są operatory, które pozwalają na przetwarzanie zmiennych: dodawanie, odejmowanie, dzielenie, mnożenie, operacje logiczne i tak dalej. Operatory i zmienne łączymy w instrukcje. Instrukcje wykonywane są w określonej w kodzie sekwencji, która wynika z implementowanego algorytmu działania. Natomiast jeżeli do kodu dodamy pewną warunkowość, to poprzez sprawdzanie szeregu warunków mamy możliwość zmiany ścieżki wykonania programu, która bez warunkowości musiałaby być stała. Do implementacji tego zachowania, służą nam szczególne instrukcje: instrukcje wyboru, znane także jako instrukcje warunkowe. Czasem kod trzeba powtórzyć wielokrotnie, wykonać wiele jego iteracji, zwykle ze zmieniającymi się parametrami. Żeby takie iteracje zrealizować również dostępne są odpowiednie składowe programu, np. instrukcje tworzące pętle.
-
W materiale znajdziesz wprowadzenie w zasady stosowania zmiennych w programowaniu. Pojawią się takie pojęcia jak: typy danych, deklaracje i nazewnictwo zmiennych. Przykłady obejmują programy w języku C i Python.
-
W tej sekcji omówiona jest reprezentacja danych w pamięci na przykładzie programu napisanego w języku C. Przytaczane związki między typami zmiennych, notacją wartości liczbowych w kodzie, a zawartością komórek pamięci, zachodzą jednak w różnych językach programowania.
-
Do działań na zmiennych wykorzystujemy operatory. Znajdziesz tutaj informacje o podstawowych typach operatorów (arytmetyczne, logiczne, porównania) i przykłady ich zastosowania. Część materiału poświęcono omówieniu operatorów bitowych.
-
W niektórych językach typy całkowitoliczbowe mogą przechowywać wartości ze znakiem, czyli signed, albo tylko dodatnie bez znaku, unsigned. Przyjrzymy się specyfice wykorzystania takich typów w języku C i zjawiskom przewinięcia (wraparound) oraz przepełnienia (overflow). Na przykładzie tego samego języka wprowadzone zostaną typy o stałym rozmiarze (fixed-width), przydatne gdy istnieje potrzeba zdefiniowania liczby bajtów zajmowanej w pamięci przez zmienne.
-
Dane, które przetwarzamy w programach, mają swoje typy. Typy te mogą być określane na stałe lub mogą podlegać pewnym zmianom. Omówimy różnice między typowaniem statycznym a dynamicznym, a także jak przebiegać może konwersja typów. Opis uzupełnią przykłady w językach C i Python.
-
Funkcje to ważny element programów. Pozwalają na wydzielenie fragmentów kodu, które możemy wielokrotnie uruchamiać (wykonywać) w ramach jednego albo wielu programów. Dodatkowo te fragmenty kodu mogą być sparametryzowane, a więc możemy wprowadzić pewne wartości, które przekazujemy do wykorzystania w funkcji. Uwzględnienie parametrów sprawia, że wykonywane obliczenia (czy też inne operacje) mogą być adaptowane do kontekstu, w którym funkcja jest wywoływana. Z zastosowania funkcji wynika też modularyzacja kodu, a więc rozdzielenie go na fragmenty, które posiadają pewne interfejsy komunikacyjne (ich wejścia i wyjścia danych). Dobrze przeprowadzona modularyzacja ułatwia utrzymanie kodu: naprawianie go i rozwijanie w przyszłości.
-
Gdy nie chcemy, żeby sekwencja instrukcji wykonywana w ramach programu za każdym razem była taka sama, a raczej żeby zależała od danych, które do tego programu przekazujemy, lub od wyniku ich przetwarzania, posługujemy się instrukcjami wyboru. W tej sekcji omówiono przykłady takich instrukcji i sposobu w jaki zapewniają zmianę przepływu sterowania. Przykłady obejmą instrukcje z języków C i Python - instrukcje typu if ... else oraz switch/match.
-
Gdy pewien fragment kodu chcemy wykonać wielokrotnie (czasem wiedząc dokładnie ile razy, czasem znając tylko warunek przerwania tych powtórzeń), zwykle korzystamy z instrukcji pętli. W materiale wprowadzono pojęcie iteracji, a także rozróżnienie dwóch typów pętli: while i for. Przy okazji przedstawiono instrukcje wpływające na natychmiastowe przejście do następnej iteracji lub przerwanie pętli: continue i break. Sposoby deklarowania pętli omówiono na przykładzie języków C/C++ i Python.
-
Logicznie powiązane ze sobą zmienne grupujemy zwykle w struktury danych. Pozwala to na efektywniejsze pisanie kodu, ułatwia zwiększenie jego czytelności. W sekcji można znaleźć informacje o sposobie deklarowania takich struktur języka C jak tablica (array) czy struktura (struct), oraz dla języka Python: krotki (tuple), listy (list) i słownika (dictionary). Omówiono również możliwości uzyskania dostępu do należących do wspomnianych struktur elementów. Praktyczne przykłady zaprezentowano w języku Python.
-