Kurs: Kurs wstępu do programowania KONKURS

Lekcja: Pierwszy program w C++

Wprowadzenie



Witamy Cię w kursie programowania w języku C++. Nie będzie to kurs techniczny języka C++, ale kurs ogólnej umiejętności programowania – napisany w oparciu o nowoczesny język C++. To tak jak z nauką języka obcego – by nauczyć się nowego języka, nie wystarczy nauczyć się słów tego języka (co odpowiada nauce konstrukcji), lecz trzeba się także nauczyć budować poprawne zdania, a później dłuższe wypowiedzi (to właśnie odpowiada nauce programowania). Gdy już będziesz umiał programować, to zmiana języka programowania nie będzie dla Ciebie problemem.

W każdej lekcji umieścimy Część programistyczną, Część techniczną, Komentarz i Zadania do samodzielnego rozwiązania, o zróżnicowanym stopniu trudności. Lekcje będziemy ilustrować nagraniami wideo. Większość lekcji będzie omawiać podstawowe elementy programowania z użyciem prostych mechanizmów wczytywania i wypisywania. Na ostatniej lekcji pokażemy, że elementy, których nauczyliśmy się, pozwalają tworzyć także programy graficzne.

Zachęcamy Cię do próby rozwiązania jak największej liczby zadań w trakcie kursu.

Część techniczna: Środowisko programistyczne

Nasz kurs będziemy prowadzić z użyciem polskojęzycznej wersji środowiska Code Blocks w systemie operacyjnym Windows 7 lub nowszym. Poniżej podajemy instrukcję instalacji tego środowiska. Środowisko Code Blocks działa także w systemach Windows 2000, XP oraz Vista. Na stronie domowej Code Blocks (http://www.codeblocks.org/downloads/26) dostępne są także wersje środowiska działające pod różnymi wersjami systemu operacyjnego Linux oraz w systemie Mac OS X.

Może jednak być tak, że z różnych powodów nie możesz zainstalować środowiska Code Blocks (np. korzystasz ze szkolnej pracowni i nie masz do tego uprawnień, a administrator nie wyraził na to zgody). W takim wypadku proponujemy Ci używać strony internetowej http://ideone.com, pozwalającej na uruchamianie programów bez konieczności instalowania jakiegokolwiek środowiska na Twoim komputerze. Z punktu widzenia tego kursu środowisko Ideone ma tylko dwa braki w porównaniu do Code Blocks: nie umożliwia wykonywania krokowego programów, tzw. odpluskwiania (będzie o tym mowa na lekcji 7), oraz nie pozwala tworzyć aplikacji graficznych czy okienkowych (lekcja 10). Żadna z tych funkcjonalności nie będzie jednak konieczna do zaliczenia tego kursu. Na jednym z nagrań w tej lekcji pokazujemy, w jaki sposób korzystać ze strony Ideone.

Możesz też w ramach tego kursu używać jakiegoś innego środowiska programistycznego umożliwiającego pisanie programów w C++ (np. Dev-C++, DJGPP, Eclipse-CDT, Geany, Scite, kompilator w konsoli Linuksa/Mac OS plus dowolny edytor), jednak może to utrudniać podążanie za materiałem kursu.

Instalacja Code Blocks

Przejdziemy teraz przez kolejne kroki instalacji środowiska Code Blocks w systemie Windows (konkretniej, będziemy pracować na polskojęzycznej wersji stabilnej Code Blocks 13.12 w systemie Windows 8.1). Pamiętaj, że musisz mieć w tym celu prawa administratora na swoim komputerze i co najmniej pół gigabajta wolnego miejsca na dysku. Cały proces nie będzie zbytnio skomplikowany, jednak opisaliśmy go dość dokładnie, żeby nikt nie utknął w tym miejscu kursu.

Na początku ściągnij instalator programu, używając tego linka. Po kliknięciu na link odczekaj kilka sekund, po czym zacznie się pobieranie pliku. Wersja instalacyjna ma rozmiar ok. 100 MB, a program po zainstalowaniu zużywa ok. 250 MB. Później postępuj zgodnie z instrukcjami podanymi na filmie.


Zobacz tekst nagrania

W ten sposób zainstalowałeś(aś) angielską wersję środowiska Code Blocks. Aby móc korzystać z niej w języku polskim, ściągnij na swój komputer plik z tłumaczeniem na polski (Uwaga: początkowo ymieściliśmy tu nieaktualny plik z tłumaczeniem. Ten teraz jest dobry), a następnie wykonaj następujące kroki:


Zobacz tekst nagrania

Część programistyczna: Piszemy i kompilujemy pierwszy program

Przyszła pora, by napisać pierwszy program w C++. Oto on:
#include <iostream>
using namespace std;

int main() {
    cout << "Pierwszy program!" << endl;
}


Zobacz tekst nagrania

A oto krótka instrukcja dla osób, które zamiast Code Blocks będą używać strony Ideone.


Uwaga: W niektórych środowiskach programistycznych do C++ (np. Dev-C++), aby zobaczyć wynik działania programu w środowisku, trzeba używać instrukcji system("pause"). W przypadku środowiska Code Blocks używanie tej instrukcji nie jest potrzebne. Co więcej, programy wysłane do MAIN 2 nie mogą jej używać.

Trochę terminologii

Program, taki jak napisaliśmy na początku, nazywa się kodem źródłowym. Napisaliśmy go w języku o nazwie C++, ale moglibyśmy go napisać w dowolnym innym języku programowania. Niestety takiego programu nie da się bezpośrednio uruchomić na komputerze – język C++ nie jest zrozumiały dla procesora. Dlatego potrzebowaliśmy specjalnego programu o nazwie kompilator C++ (zawartego w środowisku Code Blocks), który przetłumaczył program z języka C++ na tzw. język maszynowy, który jest już zrozumiały dla procesora. Wynik działania kompilatora nazywamy plikiem wykonywalnym (potocznie zwanym programem), czyli wersją programu, którą można uruchomić na komputerze. Samo słowo program jest więc niejednoznaczne: może oznaczać zarówno kod źródłowy programu, jak i otrzymany za pomocą kompilatora plik wykonywalny.

Uwaga: Zamiast prostej procedury kompilowania programu znajdującego się w pojedynczym pliku moglibyśmy też utworzyć projekt Code Blocks. Ponieważ na tym etapie nauki nie jest to do niczego potrzebne, opiszemy, jak to zrobić, dopiero w lekcji 6.

Kolejne programy



Zobacz tekst nagrania

Proponujemy Ci, abyś poeksperymentował chwilę z tym programem, zmieniając różne drobiazgi i patrząc, jakie błędy wypisał kompilator. Na przykład, czy można umieścić spację między dziubkami "<<"?

Co będzie dalej?...

Oczywiście jest o wiele więcej czynności, które można wykonać za pomocą programów w C++, poza wypisywaniem komunikatów na ekran. Będziesz je kolejno poznawać w ramach niniejszego kursu. Jako pewien przedsmak pokażemy, że program w języku C++ może służyć jako kalkulator, np. przeliczyć 100 stopni w skali Celsjusza na stopnie w skali Fahrenheita:
#include <iostream>
using namespace std;

int main() {
    cout << 100 * 9 / 5 + 32 << endl;
}

Komentarz

O komputerach często mówi się, że są to "inteligentne" urządzenia liczące. Słowo "inteligentne" sugeruje, że komputery potrafią myśleć. Tak jednak nie jest. Komputer to zwykła maszyna zachowująca się tak, jak nakaże jej użytkownik, wykonując jego polecenia. Co wyróżnia komputer od innych maszyn, to zestaw specyficznych operacji, które komputer jest zdolny wykonać, oraz niezwykła szybkość ich wykonywania. Mówiąc bardzo ogólnie, komputery potrafią po prostu bardzo szybko liczyć. Działają one zgodnie z zadanymi przepisami, które nazywamy algorytmami. Jedna z nieformalnych definicji algorytmu mówi (Lech Banachowski i Antoni Kreczmar, "Elementy analizy algorytmów", WNT, Warszawa 1982):

Algorytmem nazywa się najczęściej przepis postępowania, który ma prowadzić w sposób automatyczny do rozwiązania określonego zadania. Ten przepis postępowania powinien być na tyle precyzyjny, aby posługiwanie się nim polegało tylko na automatycznym wykonywaniu instrukcji przepisu. Zakłada się przy tym, że pewne pierwotne instrukcje tego przepisu są wykonalne, to znaczy, że są one zdefiniowane i w algorytmie nie musi się ich definiować, ale można ich używać.

W tej definicji algorytmu jest kilka bardzo ważnych elementów, na które należy zwrócić uwagę. Po pierwsze, mówimy o rozwiązywaniu zadania. Takie zadanie powinno być dokładnie zdefiniowane. Zazwyczaj podaje się warunki, jakie muszą spełniać dane, na których będziemy operowali, oraz warunki, jakie powinny spełniać wyniki, po wykonaniu algorytmu dla tych danych. Po drugie, musimy wiedzieć, jakim zestawem dostępnych operacji dysponujemy. Pozostaje jeszcze sposób opisu rozwiązania. Ten opis także powinien być zrozumiały dla tego, kto ma wykonywać algorytm, tym bardziej że ma być on wykonany w sposób automatyczny, czyli bez myślenia. W przypadku komputerów algorytmy wyraża się zgodnie z precyzyjnymi regułami zadanymi przez język programowania, używany do zapisywania tych algorytmów, a proces zapisywania algorytmu w konkretnym języku programowania nazywamy kodowaniem. Sam język programowania narzuca ścisłe ograniczenia na operacje, których możemy używać w opisie algorytmu. Kodowanie należy zdecydowanie odróżnić od programowania. Programowanie jest pojęciem dużo szerszym i składa się między innymi z analizy zadania do rozwiązania, ułożenia algorytmu będącego rozwiązaniem tego problemu, zakodowaniu algorytmu w wybranym języku programowania i przetestowaniu otrzymanego programu. Najważniejszy w tym procesie jest algorytm. Dział informatyki zajmujący się badaniem algorytmów nazywamy algorytmiką. Wybitny izraelski informatyk David Harel napisał ("Rzecz o istocie informatyki - algorytmika, WNT, Warszawa 1992):

Algorytmika to więcej niż dział informatyki. Tkwi on w sercu wszystkich działów informatyki i z całą uczciwością można o niej powiedzieć, że jest ważna dla większości nauk matematyczno-przyrodniczych, ekonomii i techniki. Sama natura algorytmiki czyni ją szczególnie odpowiednią do stosowania w tych dyscyplinach, które czerpią korzyści z posługiwania się komputerami; takich dyscyplin jest przytłaczająca większość.

Umiejętność dobrego programowania nie jest łatwa. Niektórzy podnieśli programowanie do rangi sztuki (zobacz dzieło Donalda Knutha "Sztuka programowania"). W tym kursie chcielibyśmy zrobić z Wami pierwszy krok w kierunku artyzmu programowania.

Skąd się wzięło pojęcie algorytm. Jest to termin średniowieczno-łaciński, ale wywodzący się z arabskiego. Pochodzi od imienia perskiego uczonego Muhammeda Al-Chwarizmiego (IX wiek). Jego nazwisko pisane po łacinie brzmiało Algorismus. Dlaczego imię Al-Chwarizmiego przetrwało w postaci terminu algorytm? Otóż napisał on wiele prac naukowych, z których większość zachowała się do dziś. Oto one: Tablice (astronomia, kalendarz, sinus, cotangens), Arytmetyka (hinduski zapis pozycyjny, metody rachunkowe), Algebra (równania liniowe i kwadratowe), Kalendarz Żydowski, Kroniki, Geografia, Astrologia. Oczywiście czerpał wiele z nauki greckiej i hinduskiej. Te dwa połączone nurty dały wspaniały wynik w postaci pozycyjnego zapisu liczb i rozwoju metod rachunkowych.

Słowo o języku programowania C++. Autorem języka programowania C++ jest Bjarne Stroustrup. C++ jest w powszechnym użyciu od początku lat osiemdziesiątych. Język C++ jest znaczącym rozwinięciem języka C, ale zachowano język C jako podzbiór C++ z dokładnością blisko stuprocentową.

Ten komentarz zilustrujemy przykładem algorytmu niekomputerowego dla problemu znanego także pod nazwą "Wieże Hanoi":


Zobacz tekst nagrania

Zadania

Na końcu każdej lekcji kursu mamy dla Ciebie zadania do samodzielnego rozwiązania. Rozwiązaniem każdego z zadań jest program (a dokładniej: kod źródłowy), który powinieneś zgłosić w serwisie MAIN 2. Programy są oceniane w pełni automatycznie. Aby program został zaakceptowany w systemie, wynik działania programu powinien być idealnie zgodny z wymaganiami z treści zadania (tolerowane są jedynie dodatkowe spacje na końcach wierszy oraz dodatkowe puste wiersze na końcu programu). Jeśli Twój program nie zadziała za pierwszym razem – nie przejmuj się, możesz przesłać jego poprawioną wersję jeszcze 99 razy! Jeśli chcesz uniknąć ciągłego wysyłania, najpierw sprawdź poprawność kompilacji i działania programu na swoim komputerze.

W tej lekcji mamy dla Ciebie wyjątkowo tylko jedno zadanie – zazwyczaj na lekcję będą przypadać po 3 zadania. Jeśli jednak lubisz wyzwania i chciałbyś już teraz dowiedzieć się więcej o myśleniu algorytmicznym, mamy dla Ciebie zestaw zadań rozgrzewkowych.

Zadania przypisane do tej lekcji:
Początek