mgr inż. Wacław Libront * Bobowa 2019
ZSO Bobowa, ul. Długoszowskich 1, 38-350 Bobowa, tel: 0183514009, fax: 0183530221, email: sekretariat@zsobobowa.eu, www: zsobobowa.eu
Język C (C++ C#) jest obecnie standardem kodowania. Powstał na początku lat 70-tych i był przeznaczony głównie do projektowania systemów operacyjnych i procesów związanych bezpośrednio z układami komputerów. Twórcy postawili na prostotę i minimalizm, co spowodowało, że stosowanie C++ w edukacji jest dość problematyczne.
próba sprowadzenia składni do absolutnego minimum sprawiła, że kod może stać się zupełnie nieczytelny.
wszystkie funkcje w bibliotekach, to standard, ale brak standaryzacji sprawia, że różne wersje tych samych funkcji nakładają się na siebie prowadząc do tzw. „przeciążenia”.
różne wersje kompilatorów i środowisk też nie zachowują się identycznie. Kolejne wersje „cywilizują” C++ doprowadzając do możliwości, które inne języki miały wbudowane od samego początku.
Każdy początkujący programista wyobraża sobie, że po kilku minutach napisze grę komputerową, którą zachwyci cały świat. Rzeczywistość jest brutalna – prawie w każdym języku programowania naukę rozpoczyna się od matematycznych obliczeń i logicznego myślenia. Skopiowanie gotowego, wymyślonego przez kogoś kodu jest pożądane, ale tylko wtedy, gdy rozumiemy, co kryje się pod "dziwnymi krzaczkami na białym tle".
Kilka uwag do scenariuszy
moje scenariusze lekcji, to nie podręcznik C++ zawierający wszystkie możliwe odpowiedzi i rozwiązania, to zestaw lekcji, ćwiczeń, które krok po kroku wprowadzają w świat programowania. I co najważniejsze - to zestaw praktycznych sprawdzianów w kilku wersjach (nie są na razie udostępnione), które mają te umiejętności kontrolować;
wszystkie zamieszczone przykłady są "moimi" rozwiązaniami i choć czasem nie są zgodne z przyjętą ogólnie konwencją, to staram się tworzyć jak najprościej i jak najbardziej zrozumiale;
naukę rozpoczynamy od najprostszych poleceń, dlatego też tworzymy w tzw. konsoli, która zupełnie nie nadaje się do zabawy z grafiką, ale bardzo dobrze można w niej obliczać i przetwarzać teksty – i po prostu nauczyć się programować i myśleć algorytmicznie;
wykorzystuję jak najczęściej standardowe biblioteki i jak najrzadziej biblioteki zawierających funkcje, które "robią wszystko";
do obsługo konsoli nie używam funkcji printf i scanf, za to prawie i wyłącznie cout i cin,
nie używam tablic znakowych char, ale prawie i wyłącznie zmiennych typu string;
programy sprawdzane w DevC++, CodeBlocks i MV C++2010Express. Przyznam, że najlepiej pracowało mi się w tym ostatnim środowisku, chyba ze względy na względnie normalnie pracujący "odpluskwiacz" - choć i tak nijak im do środowisk Borlanda;
Środowisko programistyczne - najpopularniejsze i darmowe
Dev C++
CodeBlocs
Microsoft Visual C++ 2010 Express
Specyfikacja zadania (problemu)
Programy piszemy po to, by rozwiązać jakieś problemy. W programowaniu najważniejsze są porządek i planowanie. I pomimo tego, że C++ (przez swój minimalizm) nie ułatwia tego, to nic nie stoi na przeszkodzie, aby pisać kod zrozumiale, zwłaszcza, jeśli będziemy musieli go analizować po jakimś czasie.
Opis sposobu rozwiązania jakiegoś problemu nazywamy w informatyce specyfikacją, w skład której wchodzą:
opis sposobu rozwiązania,
dane wejściowe,
uzyskiwane wyniki,
zależności pomiędzy danymi, a wynikami.
Prosty program napiszesz bardzo szybko i nawet (być może) nie popełnisz przy tym żadnego błędu. Przy projektach nieco bardziej skomplikowanych nie obejdzie się bez wielu przemyśleń i analiz, poprawiania błędów oraz końcowego testowania. Jakie są etapu tworzenia dużych programów?
specyfikacja: planujemy, jak napisać program
implementacja: zapisanie algorytmu w postaci kodu w konkretnym języku programowania
kompilacja: zamiana kodu źródłowego na język maszynowy
uruchomienie: wykonanie programu przez system komputerowy
debugowanie: (odpluskwianie) sprawdzanie poprawności działania, wyszukiwanie błędów
dokumentacja: tworzenie opisów dla użytkowników programu, jak i dla tych, którzy będą go modernizować
Struktura programu i program minimum
Standardowy schemat wygenerowany w nowym projekcie różni się nieco od przedstawionego w ramce poniżej. Oczywiście, to tylko schemat, ale jak to zwykle bywa w języku C, mamy mnóstwo innych możliwości i wyjątków.
Co wchodzi w skład typowego szkieletu programu:
deklaracja bibliotek: #include <iostream>;
deklaracja stałych zmiennych: int liczba; const float PI=3.14;
deklaracja funkcji: int suma(int a, int b({return a+b;}
część główna: int main {cout<<suma(1,2); return 0;}
Każdy projekt w C++ składa się z kilkunastu różnego rodzaju plików, czasem w kilku różnych folderach, dlatego bardzo ważne jest, aby dla każdego nowego projektu (nawet najmniejszego) tworzyć osobny folder.
W ramce "mój" program minimum, rozbudowany o możliwość pisania „po polsku” i podstawowe biblioteki, które być może nie są potrzebne w tej lekcji, ale przydadzą się w przyszłości. Pod ramką opis poszczególnych instrukcji programu minimum. Jeśli program nie korzysta z funkcji, można taką bibliotekę usunąć z kodu.
//#include <stdafx.h> //tylko w MSVC2010 Express #include <stdlib.h> //system, rand #include <iostream> //cout, cin #include <cstdio> //printf, scanf, getchar #include <iomanip> //fixed, setprecision #include <cmath> //pow #include <ctime> //time using namespace std; int main(){ setlocale(LC_ALL, ""); //instrukcje system("pause"); } |
stdfx.h - biblioteka wymagana tylko w środowisku VC++
stdlib.h - zawiera m.in. polecenie system(”pause”)
iostream - zawiera m.in. polecenia: cout, cin i endl
cstdio - zawiera m.in. polecenia: printf, scanf, getchar
iomanip - zawiera m.in. polecenia: fixed, setprecision i setw
cmath - zawiera m.in. polecenia: pow i sqrt
namespace - tzw. przestrzeń nazw, aby łatwiej było "wyłuskać" funkcje z bibliotek, nie trzeba używać "dziwnych" operatorów "::"
main - program główny zawarty w instrukcji blokowej {}
setlocale - ustawienie polskich ogonków w tekstach wyświetlanych na ekranie konsoli. Niestety nie zawsze daje wymagane efekty.
komentarze - jednowierszowe wpisujemy po znakach "//". Jeśli mamy opis wielolinijkowy lub chcemy dłuższy fragment wyłączyć spod działania programu stosujemy znaki "/*" na początku i "*/" na końcu.
system("pause"); - wstrzymanie działania programu do naciśnięcia dowolnego klawisza - w ten sposób możemy obejrzeć wyniki działania programu na ekranie konsoli.
Kompilowanie i uruchamianie programu
Programy napisane w C++ (podobnie jak w innych językach wysokiego poziomu, np. Pascal, Java) muszą być przetłumaczone na język zrozumiały dla procesora, tzw. język maszynowy. Odbywa się to podczas kompilacji, i przy okazji sprawdzane są wszystkie błędy. Wynikiem działania kompilatora jest plik wykonywalny (aplikacja) z rozszerzeniem exe. Taki wykonywalny plik można już uruchomić, w konsoli, albo też klikając podwójnie na ikonę pliku.
kompilowanie programu (sprawdzenie poprawności)
F9 w CB F7 w VC
Jeśli program nie ma błędów otrzymujemy komunikat końcowy o poprawności kompilacji. Jeśli w programie występują błędy, zostanie wygenerowany komunikat (czasem bardzo obszerny) z opisem i numerem wiersza z błędem
uruchomienie programu (należy wcześniej skompilować)
F10 w CB F5 w VC
Pojawia się ekran konsoli, na którym otrzymujemy wyniki działania programu.
Wynik działania programu "minimum" - oczekiwanie na
wciśnięcie dowolnego klawisza.