Definicja
Rozdział 3.
PROGRAMOWANIE W JĘZYKU C++
Rozdział ten omawia podstawy języka programowania C++ niezbędne do realizacji zagadnień algorytmicznych zawartych w podręczniku. Sta nowi on uzupełnienie rozdziałów 1., „Wprowadzenie do algorytmiki", i 2., „Algorytmy i ich zastosowanie", w których stosowany jest język C++.
Zgromadzenie w jednym miejscu wszystkich informacji na temat języka programowania na pewno ułatwi pracę z podręcznikiem i stanowić bę
dzie skuteczną pomoc przy pisaniu programów.
Napisanie programu w języku programowania wysokiego poziomu stanowi jeden ze sposobów przedstawiania algorytmów (patrz podrozdział 1.3,
„Sposoby reprezentowania algorytmów"). Ta reprezentacja wymaga jed
nak znajomości języka programowania. Rozdział ten powinien więc mieć charakter pomocniczy. Należy się do niego odwoływać wtedy, gdy zaist
nieje zapotrzebowanie na kolejne narzędzia programistyczne.
3.1. Języki programowania
— pojęcia, klasyfikacja, przykłady
Języki programowania to specjalne języki przeznaczone do formułowania algoryt
mów w taki sposób, aby były one zrozumiałe dla komputera. Możemy je podzielić na dwie grupy:
. języki wewnętrzne — języki ściśle związane ze sprzętem, stanowią jedyny zro
zum iały przez m aszynę język poleceń, każde słowo zapisywane jest w postaci ciągu 0 i 1 o ustalonej długości, słowo może być interpretowane jako liczba lub rozkaz, liczby reprezentow ane są w postaci stałopozycyjnej lub zm iennopozy
cyjnej, co zostało opisane w punkcie 2.3.6, „Reprezentacja danych liczbowych w komputerze”;
. języki zewnętrzne — języki stworzone z myślą o zapisywaniu algorytmów przez człowieka w sposób zrozum iały dla kom putera; dzielimy je na języki niskiego i wysokiego poziomu.
Informatyka
Europejczyka 3.1. Języki programowania — pojęcia, klasyfikacja, przykłady 203
Konieczność pow stania języków zew nętrznych została podyktow ana tym , że zapisy
wanie algorytm ów bezpośrednio w języku w ew nętrznym z wykorzystaniem systemu binarnego jest uciążliwe. Dlatego program ista zapisuje algorytm w postaci program u w wybranym języku zewnętrznym, który następnie jest tłumaczony na język wewnętrzny komputera.
Do języków zewnętrznych niskiego poziomu zaliczamy języki zorientowane maszynowo, czyli ściśle związane z określonym typem procesora, a więc również językiem wewnętrz
nym komputera. Należą do nich asemblery, których używa się zwykle do konstruowania
„wstawek” w programach pisanych w językach wysokiego poziomu.
Języki zewnętrzne wysokiego poziomu są językami, które służą do pisania programów przez programistów. Ich struktura jest czytelna dla człowieka i pozwala w prosty spo
sób zapisywać konstrukcje algorytmiczne pojawiające się w rozwiązywanym problemie.
Najbardziej znane języki należące do tej grupy przedstawiono w tabeli 3.1.
Tabela 3.1. Przykłady języków wysokiego poziomu Język
programowania wysokiego poziomu
Cechy języka
Algol 60
• Pierwszy język wysokiego poziomu, powstał na przełomie lat pięćdziesiątych i sześćdziesiątych
• Przeznaczony do obliczeń numerycznych (realizacja złożonych obliczeń matematycznych przy niewielkiej liczbie danych)
• Obecnie nie jest używany
Fortran
• Wykorzystywany do obliczeń numerycznych
• Istnieje biblioteka programów o charakterze numerycznym napisanych w tym języku
• Obecnie wychodzi z użycia
Cobol
• Przeznaczony do przetwarzania danych (realizacja prostych obliczeń matematycznych przy dużej liczbie danych)
• Wykorzystywany w zarządzaniu i informacji w bankach, ad
ministracji itp.
• Obecnie wychodzi z użycia
Pascal
• Twórcą języka jest Niklaus Wirth (1969)
• Dodano nowe struktury danych: rekordy, pliki, zbiory, obiekty, co wpłynęło na uniwersalność jego stosowania
• Stworzony dla celów naukowych i dydaktycznych
• Uważany za wzorcowy („pierwszy”) język programowania
• Obecnie stosowany przede wszystkim w dydaktyce C/C++, C#, Java, Python, PHP • Profesjonalne języki programowania
Kolejnym etapem rozwoju języków jest pojawienie się narzędzi nazywanych generatorami aplikacji, które umożliwiają konstruowanie prostych aplikacji przez złożenie ich z gotowych elementów (czyli komponentów). Programy te bazują na istniejących językach program o
wania, jednak wzbogacają je o biblioteki gotowych narzędzi i elementów. Przykładem może być Delphi dla języka Pascal czy też Visual Basic dla języka Basic.
Definicja
Translacja to proces tłumaczenia programu z języka źródłowego (na przykład języka zewnętrznego wysokiego poziomu) na język wynikowy (na przykład język wewnętrzny) zrozumiały przez procesor.
Istnieją dwa typy program ów realizujących tłumaczenie:
• kompilatory — najpierw cały program napisany w języku programowania jest tłum a
czony na język wewnętrzny, a następnie wykonywany;
• interpretery — każde polecenie jest kolejno tłumaczone na język wewnętrzny i wy
konywane przez komputer.
W początkowym okresie rozwoju języków program owania korzystano zarówno z kom pilatorów, jak i interpreterów. Obecnie najczęściej stosuje się kompilatory. Przykładem m oże być język Basic, dla którego powstało wiele interpreterów, co spowodowało n ie
stabilność tego języka. Polegała ona na różnej interpretacji jego poleceń.
Przedstawione powyżej języki program ow ania zaliczane są do języków statycznych (czyli imperatywnych). Pisanie programów w tych językach polega na podawaniu ciągu instrukcji, które są wykonywane w odpowiedniej kolejności. Istnieją również języki p ro gramowania, w których program y składają się ze zbioru form uł logicznych. Realizacja program ów zapisanych w takich językach, zwanych językami logicznymi (czyli dekla
ratywnymi), polega na znalezieniu elementów spełniających formuły zawarte w progra
mie. Przykładem takiego języka jest Prolog, którego twórcą jest Robert Kowalski (1974).
Języki te wykorzystywane są przede wszystkim w zakresie sztucznej inteligencji, syste
mów eksperckich i innych pokrewnych dziedzin.
3.2. Wprowadzenie do programowania
Rozwój projektowania i program owania w kierunku obiektowym spowodował zmiany w zakresie języka C. Rozszerzono go o elem enty umożliwiające program ow anie zo rientow ane obiektowo. C++ stanowi więc nadzbiór języka C. Różnica pom iędzy tym i językami jest znacząca, jednak wszystkie popraw ne program y napisane w języku C są również poprawne w C++.
W podręczniku będziemy korzystać z międzynarodowego standardu języka C++ stwo
rzonego przez kom itet ASC (Accredited Standards Committee), który działa w ram ach ANSI (American National Standards Institute). Standard ten określany jest najczęściej m ianem ANSI/ISO.
Standard ANSI C++ stara się zapewnić przenośność tego języka. Oznacza to, że kod pro
gramu powinien być poprawny dla różnego typu kom puterów pracujących w wielu sy
stemach. Ponadto standard ten powinien być czytelny dla różnych kompilatorów.
Informatyka
i Europejczyka 3.2. Wprowadzenie do programowania 205
Rozdział 3., „Programowanie w języku C ++”, poświęcony jest elem entom języka C++.
Nie jest to szczegółowy opis języka, zawiera jedynie charakterystykę tych jego elem en
tów, które są niezbędne do konstruowania program ów zawartych w podręczniku.
3.2.1. Struktura programu
Program w języku C++ zbudowany jest z dwóch części:
• część deklaracyjna,
• część operacyjna.
Część deklaracyjna obejmuje wszystkie deklarowane elementy programu, które mogą zostać wykorzystane w części operacyjnej. Ta część służy do definiowania bądź dekla
rowania różnych elementów, jednak nie można ich w tym miejscu uruchomić. Do tego wykorzystuje się część operacyjną.
Część operacyjna to program główny, który w tym języku jest funkcją o nazwie main().
Po uruchom ieniu programu wykonywane są wszystkie polecenia zawarte w funkcji main ( ) . W tej części program u korzystamy ze zdefiniowanych lub zadeklarowanych przez nas ele
mentów znajdujących się w części deklaracyjnej.
W początkowym etapie nauki języka C++ będziemy korzystać z uproszczonej budowy pro gramu. W następnych podrozdziałach poznasz bardziej zaawansowane możliwości kon
struowania programu.
Przykład 3.1.'>
Przyjrzyjmy się konstrukcji pierwszego programu (prog3_ l.cpp), który został przedstawiony w tabeli 3.2. Komentarze umieszczone z prawej strony wyjaśniają znaczenie poszczegól
nych elementów implementacji. W języku C++ rozróżniane są małe i wielkie litery, kod program u należy więc zapisywać dokładnie tak, jak podano w podręczniku.
Tabela 3.2. Pierwszy program w języku C++
Kod programu Komentarz
CZĘŚĆ DEKLARACYJNA
# in c lu d e <iostream >
Dyrektywa preprocesora — preprocesor to pro
gram dokonujący wstępnego przeglądu kodu źródłowego programu
Deklaracja bibliotek (czyli plików nagłówko
wych), z których korzystamy w programie Biblioteka io stre a m zawiera definicje stan
dardowego strumienia wejścia c in i standar
dowego strumienia wyjścia cout
u sin g namespace s td j
Deklaracja korzystania z przestrzeni nazw standardowych std (czyli biblioteki standar
dowej)
Rozdział 3. Programowanie w języku C++
Wskaż
CZĘŚĆ OPERACYJNA
in t m ain() Nagłówek funkcji głównej
{
in t a, b, c; Deklaracja zmiennych lokalnych a, b, c
a = 2; Przypisanie zmiennej a wartości 2
cout<<"podaj w artość zm iennej b :" j Komunikat wypisany na ekranie „podaj war
tość zmiennej b:”
cin > >b ; Wczytanie z klawiatury wartości zmiennej b
c = a + bj Przypisanie zmiennej c sumy zmiennych a i b
cout<<a<<" + "<<b<<" = "<<c<<endl; Wypisanie wyniku na ekranie
re tu rn 0; Przypisanie funkcji m ain() wartości 0
}
Nagłówek funkcji głównej in t m ain() w pełnej postaci zapisywany jest następująco:
int main (void), gdzie:
• in t oznacza, że typ wartości zwracanej z funkcji m ain() jest całkowity, funkcji tej przypisywana jest więc wartość typu in t , pominięcie typu w nazwie funkcji ozna
cza, że jest ona typu in t ;
• main to nazwa funkcji;
• v o id oznacza „pusty”, a w tym przypadku brak parametrów, które wpisuje się w n a
wiasie, pusty nawias jest równoważny void.
Program y przedstaw ione w tym podręczniku napisane zostały w trybie konsolowym (czyli tekstowym). Z tego wynika, że po uruchom ieniu program u w środowisku Windows, otwarte zostanie okienko konsoli, w którym wykonywany jest program. Aby okienko kon
soli nie zamknęło się zaraz po zakończeniu programu, musimy zastosować odpowiednie działania. Poniżej podano polecenia, które w tej sytuacji m ożna wykorzystać.
Jeśli pracujemy w systemie Windows, wystarczy w funkcji m ain () przed zakończeniem program u wpisać polecenie sy ste m ("p au se "), co spowoduje uruchom ienie funkcji sy
stemowej pause. Program będzie wyglądał wówczas następująco (prog3_2.cpp):
# in c lu d e <iostream >
# in c lu d e < c s t d lib >
u sin g namespace s td ; in t m ain()
{
in t a, b, c;
a = 2;
cout<<"podaj w artość zm iennej b :" ; cin > >b ;
Informatyka
; Europejczyka 3.2. Wprowadzenie do programowania 207
c = a + b;
cout<<a<<" + "<<b<<" = "<<c<<endl;
sy ste m ("p a u se ");
return 0;
}
Można skorzystać również z polecenia c i n . g e t () (patrz tabela 3.5). Jednak aby ta funkcja działała poprawnie, należy wcześniej zignorować znaki znajdujące się w strum ieniu wej
ściowym poleceniem c in .ig n o r e Q (patrz tabela 3.5). Przedstawiony program m a więc następującą postać (prog3_3.cpp):
# in c lu d e <iostream >
using namespace std ; int m ain()
{
int a, b, c;
3 = 2;
cout<<"podaj w artość zm iennej b :" j cin > >b ;
c = a + b;
cout<<a<<" + "<<b<<" = "<<c<<endl;
- c in . ig n o r e ( ) j c i n . g e t ( ) ; return 0;
}
W przypadku pominięcia deklaracji przestrzeni nazw standardowych s td operacje wej
ścia i wyjścia dostępne są dopiero po podaniu nazwy klasy std , czyli s t d :: cout, s t d : : cin.
Program z takim i zmianami przedstawiono poniżej (prog3_4.cpp):
# in c lu d e <iostream >
int m ain() {
int a, b, c j a = 2;
s t d : : cout<<"podaj w artość zm iennej b :" j s t d : : cin > > b j
c = a + b;
std : :cout<<a<<" + "<<b<<" = "< < c < < std : : e n d lj return 0;
}