C++ w dwunastu długich krokach

Wielkość: px
Rozpocząć pokaz od strony:

Download "C++ w dwunastu długich krokach"

Transkrypt

1 Uniwersytet Wrocławski Wydział Fizyki i Astronomii Zbigniew Koza C++ w dwunastu długich krokach Wrocław 2006

2 Redakcja techniczna, opracowanie tekstu i skład: Zbigniew Koza Copyright c 2006 by Zbigniew Koza and Uniwersytet Wrocławski Drukarnia Uniwersytetu Wrocławskiego Plac Solny 12, Wrocław tel , , fax

3 Wszystkim Kózkom dużym i małym

4

5 Spis treści 1 Pierwszy program w C Dla kogo jest ta książka? Rys historyczny Dlaczego C++? C++ a C Aktualny standard języka Zanim napiszemy swój pierwszy program Środowisko programistyczne Pierwszy program Kompilacja kodu źródłowego Błędy kompilacji Uruchamianie programu w środowisku Dev-C Struktura prostego programu w C Obiekt std::cout i literały Definiowanie obiektów Identyfikatory, słowa kluczowe i dyrektywy Zapis programu Cztery działania matematyczne i typ double Jeszcze więcej matematyki Upraszczanie zapisu obiektów i funkcji biblioteki standardowej Źródła informacji Q & A Quiz Problemy Wyrażenia i instrukcje Instrukcje sterujące Instrukcja if... else Pętle Pętla for Pętle while i do Instrukcje break i continue Typy wbudowane Typy całkowite Typy zmiennopozycyjne Typ logiczny Zapis literałów całkowitych i zmiennopozycyjnych

6 6 Spis treści 2.4 Wyrażenia arytmetyczne, promocje i konwersje standardowe Tworzenie obiektów stałych Modyfikator const Popularne typy standardowe Strumienie Napisy Wektory Słowniki Obiekty lokalne i globalne. Zasięg. Przesłanianie Operatory Priorytet operatorów Łączność operatorów Wartość operatorów Opis wybranych operatorów Operatorowe patologie Wyrażenia i instrukcje Q & A Quiz Problemy Funkcje Referencje Funkcje swobodne Po co są funkcje? Funkcje składowe wprowadzenie Argumenty funkcji Przekazywanie argumentów przez wartość Przekazywanie argumentów przez referencję Przekazywanie argumentów przez stałą referencję Funkcje zwracające referencję Operatory jako funkcje swobodne Stos funkcji Funkcje otwarte (inline) Funkcje jako argumenty innych funkcji Rekurencja Argumenty domyślne Lokalne obiekty statyczne Funkcja main Argumenty funkcji main Wartość funkcji main Polimorfizm nazw funkcji Deklaracja a definicja funkcji Q & A Quiz Problemy

7 Spis treści 7 4 Tablice i wskaźniki Wskaźniki Definiowanie wskaźników Wskaźniki typu void*, czyli wycieczka w stronę C Wskaźnik zerowy Czym grozi nieumiejętne użycie wskaźników? Wskaźniki stałe i wskaźniki na stałe Wskaźniki na wskaźniki Tablice Tablice wielowymiarowe Inicjalizacja tablic Zastosowanie operatora sizeof do tablic Tablice a wskaźniki Tablice wskaźników i wskaźniki na tablice Tablice jako argumenty funkcji Teksty literalne i tablice znaków Porównanie tablic i wektorów Pamięć wolna (sterta) Q & A Quiz Problemy Klasy i obiekty Struktury Podstawowe zasady definiowania i używania struktur Inicjalizacja struktur Dostęp do składowych poprzez wskaźnik Co to są klasy? Definiowanie klas Klasa jako zmodyfikowana struktura Konstruktory Destruktor Funkcje składowe (metody) Metody i metody stałe Przeciążanie operatorów w klasie Konstruktor kopiujący i operator = Wskaźnik this Udostępnianie składowych Sekcje public i private Funkcje i klasy zaprzyjaźnione Interfejs i implementacja Podział definicji klasy na interfejs i implementację Kontrakty, niezmienniki i asercje Kontrakty Niezmienniki Hermetyzacja danych Różnice między klasami i strukturami Dygresja: składowe statyczne Quiz

8 8 Spis treści 5.12 Problemy Dynamiczne struktury danych Stos na bazie tablicy dynamicznej Interfejs stosu Implementacja stosu Test stosu Stos na bazie listy pojedynczo wiązanej Rekurencyjne struktury danych Interfejs klasy Implementacja Dygresja: przestrzenie nazw i zagnieżdżanie definicji klas Q & A Quiz Problemy Dziedziczenie i polimorfizm Dziedziczenie Do czego służy dziedziczenie? Definiowanie klasy pochodnej Inicjalizacja klasy bazowej Relacje X ma Y, X jest Y oraz X zarządza Y Kolejność inicjalizacji i destrukcji obiektu Sekcja protected Zastępowanie (overridnig) funkcji składowych Polimorfizm Niedoskonałości zwykłego dziedziczenia Definiowanie metod polimorficznych vtable Dygresja: klasy abstrakcyjne Jak to się robi w Qt? Q & A Quiz Problemy Strumienie Strumienie buforowane i niebuforowane Klawiatura, konsola, plik, strumień napisowy Stan strumienia Manipulatory i formatowanie strumienia Manipulator std::setw Manipulator std::setprecision Strumienie wyjścia Strumienie wejścia Funkcje składowe get i getline Inne funkcje operujące na strumieniach wejściowych Przykład Quiz Problemy

9 Spis treści 9 9 Biblioteki Podział programu na pliki Zasady kompilacji programów podzielonych na pliki Przygotowanie plików źródłowych i nagłówkowych Kompilacja przy pomocy wiersza poleceń Kompilacja przy pomocy programu make Kompilacja przy pomocy projektów Automatyzacja tworzenia pliku Makefile Używanie gotowych bibliotek Dekorowanie nazw i deklaracja extern "C" Przykłady Kompilacja i instalacja bibliotek z plików źródłowych Przykłady Systemy kontroli wersji Quiz Problemy Preprocesor i szablony Preprocesor Rola preprocesora w C Dyrektywy preprocesora Przykład Podsumowanie Szablony Szablony klas Szablony funkcji składowych Szablony funkcji swobodnych Specjalizacja szablonu Używanie szablonów funkcji do upraszczania pracy z szablonami klas Gdzie umieszczać definicje szablonów? Szablony a programowanie generyczne Dygresja: konstrukcja typedef Quiz Problemy Wprowadzenie do STL Co to jest STL? Pojemniki Iteratory Co to są iteratory? Przykład użycia iteratorów Rodzaje iteratorów Algorytmy Co to są algorytmy? Funktory Obiekty funkcyjne Wartości pobierane i zwracane przez algorytmy Obiekty funkcyjne a efektywność szablonów funkcji

10 10 Spis treści 11.5 Wektory (std::vector) Opis szablonu std::vector<t> Przykłady Liczby zespolone Napisy (std::string) Q & A Quiz Problemy Pojemniki i algorytmy Przegląd pojemników STL Słowniki Zbiory Wielosłowniki i wielozbiory Słowniki i zbiory mieszające Kolejki o dwóch końcach Listy Stosy, kolejki i kolejki priorytetowe Wektory i zbiory bitów Wektory numeryczne (std::valarray<t>) Przegląd algorytmów swobodnych Algorytmy niemodyfikujące Algorytmy modyfikujące Sortowanie Algorytmy numeryczne Inne algorytmy Kontrola poprawności użycia STL Składniki dodatkowe Q & A Problemy Co dalej? 247 A Wybrane opcje kompilatora g B Dodatkowe elementy języka 251 B.1 Instrukcja goto B.2 Instrukcja switch

11 Wstęp Niniejszy podręcznik stanowi zapis wykładu prowadzonego w 2006 r. w Instytucie Fizyki Uniwersytetu Wrocławskiego w ramach finansowanego ze środków Unii Europejskiej projektu Technologie Informatyczne od Podstaw. Wykład adresowany jest do osób pracujących, które znają już jakiś język programowania (np. Pascal, Basic, PHP) i chciałyby poznać język C++ w celu podniesienia swoich kwalifikacji. Dlaczego C++? Odpowiedź jest prosta w ciągu blisko dwudziestu lat swego istnienia C++ osiągnął status języka programowania najczęściej używanego w zastosowaniach komercyjnych. Co więcej, każdy kto pozna C++, niejako mimochodem nauczy się rozumieć drugi podstawowy język programowania język C i będzie miał znacznie ułatwioną drogę do opanowania wielu innych języków (np. Java, C#, bash). Decydujący wpływ na zakres zawartego tu materiału ma długość kursu 12 dwugodzinnych wykładów i tyleż ćwiczeń w laboratorium komputerowym. Odpowiada to zaledwie 80% typowego jednosemetralnego kursu uniwersyteckiego. Z własnego doświadczenia wykładowcy języka C++ wiem jednak, że w praktyce nawet dwa semestry nie starczają, by w pełni omówić wszystkie ważne aspekty programowania w C++. Dlatego w swoim wykładzie skoncentrowałem się na najważniejszych cechach języka. Mam nadzieję, że to ograniczenie wpłynie pozytywnie na jakość wykładu większość książek dostępnych obecnie w księgarniach jest bowiem bardzo rozwlekła, gdyż ich autorzy usiłują przedstawić kompletny opis języka, włącznie z tymi jego elementami, których sami nigdy w życiu nie używali. Natomiast mój podręcznik z założenia stawia sobie znacznie skromniejszy cel: rzetelne nauczenie Czytelnika podstawowych zasad programowania we współczesnym C++. Po zakończeniu kursu jego uczestnicy powinni móc uczestniczyć w typowym projekcie programistycznym i samodzielnie rozwijać swoje umiejętności w zakresie programowania, np. studiując odpowiednie biblioteki C lub C++ potrzebne do realizacji danego zadania. Język C++ jest trudny zarówno do nauczania, jak i uczenia się. Nie powstał bowiem (jak np. Pascal) w wyniku teoretycznych rozważań nad metodologią programowania; przeciwnie, C++ został zaprojektowany przez praktyków (a konkretnie przez Bjarne a Stroustrupa) jako narzędzie mające pomóc w rozwiązaniu problemów praktycznych. Problemów, dodajmy, które zazwyczaj objawiają się dopiero w dużych projektach i mają związek z wydajnością i kosztami pracy programistów. Tu właśnie tkwi źródło trudności związanych z dydaktyką C++: niemal wszystkie charakterystyczne elementy tego języka, które odróżniają go od takich języków, jak C czy Pascal, znajdują zastosowanie (i uzasadnienie) dopiero 11

12 12 Wstęp w dużych projektach. Tymczasem kurs poświęcony podstawom języka musi ograniczać się do omawiania krótkich programów; analogicznie ćwiczenia laboratoryjne muszą bazować na niewielkich projektach, które można zrealizować w ciągu kilku godzin. Ale jak osobę, która pisze wyłącznie programy liczące wierszy i uparła się, by wszystkie zmienne (włącznie ze zmiennymi sterującymi pętli) umieszczać w przestrzeni globalnej ( bo tak szybciej ) przekonać, że popełnia grzech główny? Jak przekonać ją o użyteczności klas czy wyjątków? Jak wyjaśnić zasady dzielenia programów na osobne pliki bez sprawiania wrażenia, że są to jakieś kosmiczne wymysły mające tylko utrudniać ludziom życie? Mając na względzie powyższe trudności oraz fakt, że moim celem jest nauczenie C++ od podstaw w 12 wykładach, podręcznik podzieliłem na 12 rozdziałów, przy czym stopień zaawansowania kilku początkowych dostosowany jest do potrzeb (i poziomu) osób piszących nie tyle nawet programy, ile krótkie wprawki. Pierwszy rozdział zawiera krótki opis języka, kilka przykładowych programów oraz informacje niezbędne do ich kompilacji. Kolejne 3 rozdziały zawierają zwięzły opis nieobiektowych cech języka, a więc m.in. konstrukcji wyrażeń i instrukcji, definiowania zmiennych i tablic oraz posługiwania się funkcjami swobodnymi. Cztery pierwsze rozdziały wprowadzają więc Czytelnika w świat programowania proceduralnego w C++ lub, innymi słowy, w świat C++ traktowanego jako ulepszona wersja języka C. Kolejne cztery rozdziały poświęcone są programowaniu obiektowemu w C++. Znajdziemy więc tu m.in. objaśnienie tak fundamentalnych pojęć, jak obiekty i klasy (z metodami, konstruktorami i destruktorami), dziedziczenie, hermetyzacja danych i polimorfizm. Rozdział 9 przedstawia sposoby wykorzystywania bibliotek zewnętrznych (napisanych w C lub C++) oraz metody dzielenia własnego projektu na wiele plików źródłowych. Trzy ostatnie rozdziały poświęcone są omówieniu programowania generycznego, co obejmuje wprowadzenie w takie zagadnienia, jak szablony i biblioteka STL. Układ książki może sugerować, iż wykład rozpoczyna się od prezentacji języka C, po czym przechodzi do omawiania C++ jako rozszerzenia języka C. W rzeczywistości jednak nie zamierzam opisywać tu samego języka C, który mimo że de facto jest podzbiorem języka C++ zbytnio ustępuje swemu następcy, by warto było poświęcać mu oddzielnie uwagę. Układ podręcznika odzwierciedla natomiast fakt, że język C++ jest tworem eklektycznym, umożliwiającym programowanie w co najmniej trzech godnych polecenia stylach (proceduralnym, obiektowym, generycznym) lub ich kombinacji. Niniejszy podręcznik powstał w oparciu o moje wieloletnie doświadczenie w nauczaniu C++. Wiele jego rozdziałów zostało zainspirowanych książkami B. Stroustrupa [1], B. Milewskiego [2] i J. Liberty ego [3]. Pierwsza z nich jest lekturą obowiązkową każdego programisty C++. Na tę jedyną książkę nie warto żałować pieniędzy po prostu trzeba ją mieć i sięgać po nią możliwie często. Niestety, nie jest to lektura łatwa, nie jest też pomyślana jako podręcznik dla początkujących. Dwie pozostałe cenię za oryginalne podejście pedagogiczne do tematu. Żadna z nich nie stara się zastąpić książki Stroustrupa; usiłują natomiast z dość dobrym skutkiem przedstawić język C++ od podstaw w sposób zrozumiały dla przeciętnego entuzjasty programowania. Na zakończenie pozwolę sobie jeszcze podziękować Bartoszowi Milewskiemu mojemu pierwszemu nauczycielowi C++.

13 Rozdział 1 Pierwszy program w C++ Dla kogo jest ta książka? Rys historyczny. Pierwszy program. Środowisko programistyczne. Kompilator i kompilacja. Błędy kompilacji. Typy int i double, obiekty std::cin i std::cout. Instrukcja using namespace std. 1.1 Dla kogo jest ta książka? Podręcznik napisałem z myślą o osobie pragnącej nauczyć się języka C++ od podstaw. Zakładam, że Czytelnik biegle posługuje się komputerem (np. potrafi zainstalować program lub odstrzelić zawieszoną aplikację), ma dostęp do Internetu i zna już jakiś język programowania. Oczywiście niezbędna jest też przyzwoita znajomość języka angielskiego co najmniej w stopniu pozwalającym swobodnie rozumieć komunikaty diagnostyczne kompilatora, a najlepiej na poziomie pozwalającym rozumieć oryginalną dokumentację bibliotek. 1.2 Rys historyczny Dawno, dawno temu, czyli w połowie XX-go wieku komputery były bardzo kosztownymi urządzeniami, które wymagały niezwykle pracochłonnej obsługi. W tych zamierzchłych czasach to ludzie dostosowywali się do możliwości maszyn cyfrowych i obsługiwali je, wpisując programy jako ciągi zer i jedynek poprzez ręczne ustawienie przekaźników; wyniki obliczeń również otrzymywano jako sekwencje zer i jedynek odczytywanych ze stanu lampek. Nieco później pojawiły się asemblery specjalne programy, które pozwalały obsłudze komputerów pisać programy w nieco bardziej dla ludzi zrozumiałych kategoriach rozkazów, liczb, zmiennych; programy te były następnie tłumaczone przez specjalny program na kod maszynowy człowiek mógł wreszcie zapomnieć o zerach i jedynkach. Następnie pojawiły się języki proceduralne, np. FORTRAN; programy w nich napisane przypominały już wzory matematyczne, były więc już całkiem dobrze dostosowane do rozwiązywania wielu zagadnień technicznych. Wciąż jednak koszt komputerów był ogromny, a ich moc szczególnie z dzisiejszej perspektywy była bardzo ograniczona. W tych czasach komputery były obsługiwane wyłącznie przez wysoko wykwalifikowany personel, a główną troską programistów było pisanie programów działających możliwie jak najszybciej i zajmujących jak najmniej 13

14 14 Rozdział 1. Pierwszy program w C++ zasobów maszyny (głównie pamięci operacyjnej). W tych warunkach nie martwiono się specjalnie kwestią wygody obsługi komputerów łatwiej i taniej było wyszkolić ludzi do obsługi stosunkowo prymitywnych komputerów niż odwrotnie. Dziś komputery są jednocześnie i bardzo szybkie, i tanie, a przez to powszechnie dostępne; co więcej, dysponują zasobami sprzętowymi i mocą obliczeniową tysiące lub nawet miliony razy przewyższającymi te dostępne jeszcze 30 lat temu. Typowymi użytkownikami komputerów nie są już wyłącznie błyskotliwi i wszechstronnie wykształceni fachowcy obecnie komputerami posługują się już nawet przedszkolacy. Ci nowi, nierzadko niepiśmienni użytkownicy wymagają, by komputery wyposażone były w zupełnie inny rodzaj programów niezawodnych i łatwych w obsłudze. Takie programy są jednak z natury bardzo złożone 1. Ich wytworzenie wymaga zaangażowania dziesiątek, setek, a czasami tysięcy ludzi. Masowy rynek oznacza potencjalnie wielkie zyski, ale też i ogromne koszty oraz ryzyko utraty rynku na rzecz konkurencji. Stąd wynika potrzeba ograniczenia kosztów. Te z kolei najefektywniej jest redukować już podczas pisania programów, co oznacza konieczność wyposażenia programistów w możliwe jak najlepsze narzędzia produkcji : edytory (do wprowadzania tekstu), debuggery (do wyszukiwania błędów), systemy kontroli wersji (do zarządzania poprawkami w programach) i przede wszystkim język programowania z możliwie najlepszym kompilatorem, czyli programem tłumaczącym programy napisane przez ludzi na zrozumiały dla komputera kod maszynowy Dlaczego C++? W tej sytuacji pod koniec lat osiemdziesiątych na scenę wkracza C++. Język ten, zaprojektowany jako obiektowe rozszerzenie języka C, szybko osiągnął status najpopularniejszego niespecjalistycznego języka programowania. Stało się tak dlatego, że pozwala on na zwiększenie wydajności programistów. Szacuje się, że jeden programista stosujący C++ może sobie poradzić z kilkukrotnie większą (w sensie funkcjonalnym) porcją kodu niż jego kolega posługujący się C. Ponadto kod napisany w C++ jest łatwiejszy w utrzymaniu, rozwoju i ponownym wykorzystaniu w innym projekcie; nie ustępuje przy tym wcale prędkością programom napisanym w C, natomiast w zakresie tym bije na głowę takie popularne języki, jak Java, C# czy Lisp. Jakie są główne zalety C++? C++ umożliwia stosowanie wielu stylów programowania i pracę na wielu poziomach abstrakcji. Można w nim stosować wstawki asemblerowe, a więc programować w języku maszyny; można też programować proceduralnie w stylu takich języków, jak Pascal czy C; można też programować obiektowo, a więc na wysokim poziomie abstrakcji, ułatwiającym programistom myślenie w kategoriach rozwiązywanego przez nich zadania, a nie abstrakcyjnych zer i jedynek, rozkazów maszynowych, adresów czy rejestrów. C++ zawiera mechanizmy ułatwiające wielokrotne wykorzystywanie tego samego kodu. Jest to najważniejsza cecha języka. Programy w C++ (tak jak w C) można dzielić na osobne części ( moduły ); części 1 Na przykład projekt KDE to ponad 4 miliony wierszy kodu nad którym pracuje ponad 800 programistów; tylko w maju 2002 roku dokonano zmian w kodzie źródłowym [4].

15 Rys historyczny 15 te można następnie wykorzystywać w dowolnym innym programie C++, przy czym taki moduł wystarczy raz skompilować, a następnie tylko dołączać do nowych programów (w ten sposób otrzymuje się biblioteki ). Ponadto w C++ takie moduły można w bardziej naturalny sposób niż w C odseparować od siebie (dzięki hermetyzacji danych i interfejsom), tworząc z nich prawdziwe czarne skrzynki. Dzięki tzw. wyjątkom twórcy bibliotek mogą precyzyjnie określić zachowanie się ich kodu w wypadku sytuacji nadzwyczajnych i nawet wymusić określone zachowanie na użytkownikach tych bibliotek. Tak jak w innych językach programowania, w C++ można uniknąć powielania tego samego kodu poprzez zastosowanie funkcji. Ale C++ oferuje dużo więcej szablony, dzięki którym ten sam kod można stosować do obiektów różnych typów, a także przestrzenie nazw, dzięki którym łatwo jest zarządzać nazwami używanymi w różnych bibliotekach. C++ jest rozszerzeniem najpopularniejszego języka lat 80-tych języka C. Dlatego programy napisane w C++ mają pełny dostęp do wszystkich niezliczonych bibliotek kiedykolwiek napisanych w C. Kompilator C++ przejmuje na siebie wiele zadań, za realizację których jeszcze niedawno całkowitą odpowiedzialność ponosił programista. Kompilator sprawdza na przykład, czy użycie zmiennych lub funkcji jest zgodne z ich deklaracją. Możemy też poinstruować go, że pewne zmienne mogą być wykorzystywane tylko w określonych partiach programu albo że ich wartości nie mogą być tam modyfikowane, albo że muszą być zainicjalizowane. W związku z tym, że kompilator C++ z definicji znacznie dokładniej analizuje kod źródłowy, zaleca się nawet, by programy napisane w czystym C kompilować kompilatorem C++. C++ posiada konstrukcje ułatwiające zarządzanie zasobami komputera. Należą do nich m.in. konstruktory, destruktory i wyjątki. Stosując je systematycznie, można zagwarantować np., że z naszego programu nie będzie wyciekać pamięć operacyjna. Programy napisane w C++ są co najmniej równie szybkie, jak te napisane w C. A niekiedy szybsze (np. dzięki szablonom sortowanie jest nieco szybsze w C++ niż w C). Biblioteki standardowe C++ są o wiele bardziej funkcjonalne od ich odpowiedników ze standardowej biblioteki C. Standardowa biblioteka C++ zawiera m.in. wysokopoziomowy typ napisów std::string, który całkowicie zwalnia programistę od troski o to, w jaki sposób napisy są faktycznie interpretowane przez procesor. Podobnie klasa std::vector jest dużo bardziej elastyczna od standardowych tablic języka C, a o czymś takim jak słownik (std::map) możemy w C tylko pomarzyć. Oczywiście C++ ma też wady: C++ jest trudny zarówno do nauczania, jak i uczenia się; C++ stanowi niezwykle trudne wyzwanie dla twórców kompilatorów. O ile mi wiadomo, żaden powszechnie używany kompilator (tj. gcc i MS Visual C++) nie jest jeszcze w 100% zgodny ze standardem ISO z 1998 r. Ze względu na swój olbrzymi potencjał, w rękach niedouczonego programisty C++ jest jak przysłowiowa zapałka w ręku dziecka.

16 16 Rozdział 1. Pierwszy program w C C++ a C Jak już wspomniałem, C++ jest rozszerzeniem C. Wiele osób wyciąga stąd wniosek, że aby nauczyć się trudnego C++, dobrze jest rozpocząć od łatwego C. Wniosek ten jest jednak równie fałszywy jak teza, że przed nauką jazdy samochodem należy nauczyć się jeździć rowerem (bo także ma kierownicę, hamulce i koła). Język C wymaga stosowania od samego początku dość karkołomnych konstrukcji, których niemal nie używa się w C++ (np. funkcji printf/scanf czy nieustannej żonglerki wskaźnikami). Dlatego programiści obeznani w języku C, aby dobrze opanować C++ muszą oduczyć się wielu nawyków nabytych podczas pracy w C. Jeżeli ostatecznym celem jest C++, nauka C jest marnowaniem czasu! Aktualny standard języka Na przestrzeni lat język C++ podlegał ciągłej ewolucji. Większość zmian polegała na dodawaniu nowych cech rozszerzających możliwości języka. Kilka istotnych modyfikacji doprowadziło jednak do niezgodności nowszych wersji języka z wersjami starszymi. Dlatego programy napisane 10 lat temu mogą nie spełniać wymagań aktualnego standardu. W niniejszym podręczniku za standard w wymiarze teoretycznym uznaje się standard ISO C++ opisany w piątym wydaniu książki Bjarne a Stroustrupa Język C++. Z kolei w wymiarze praktycznym za standardowe uznaje się tu programy kompilowane szeroko dostępnym kompilatorem GNU g++ w wersji z opcjami -ansi -pedantic. Oba te warunki powinny zapewnić całkowitą zgodność prezentowanych tu konstrukcji języka z aktualnie obowiązującym standardem ISO C++ z 1998 roku, a więc w efekcie uniezależnić przedstawiane tu informacje od platformy czy konkretnej implementacji kompilatora. 1.3 Zanim napiszemy swój pierwszy program Środowisko programistyczne Programista, jak każdy zawodowiec, potrzebuje specjalistycznego warsztatu pracy. Nie mam tu oczywiście na myśli samego komputera, lecz specjalnych programów służących do tworzenia nowych lub ulepszania starych programów. Takie zastaw programów nazywa się środowiskiem programistycznym. Istnieją dwa podstawowe rodzaje środowisk. Pierwsze, typowe dla systemu Unix i jego pochodnych, to po prostu kolekcja oddzielnych programów uruchamianych z powłoki systemowej; do tej grupy należy m.in. używany w tym podręczniku kompilator gcc. Drugi rodzaj środowisk to tzw. zintegrowane środowiska programistyczne (IDE, ang. Integrated Development Environments), w których programista do wszystkich potrzebnych narzędzi ma dostęp z jednego programu sterującego zintegrowanego ze specjalistycznym edytorem; do tej kategorii należą m.in. kompilatory firm Microsoft (Visual Studio) i Borland (C++ Builder). Zaletą pierwszego rozwiązania jest to, że daje użytkownikom pełną swobodę w sposobie posługiwania się kompilatorem. W szczególności kompilator gcc można łatwo i ściśle zintegrować z wieloma dostępnymi edytorami tekstu (np. emacs czy vim) lub istniejącymi środowiskami zintegrowanymi (np. C++ Builder), można też na jego podstawie zbudować od podstaw zupełnie nowe środowisko typu

17 Zanim napiszemy swój pierwszy program 17 Menu Paski narzędzi Okno widoku projektu, klasy lub zmiennych Okienko edycji programu Zakładki okna raportu Pasek stanu Rysunek 1.1: Główne elementy okna programu Dev-C++. IDE (np. KDeveloper i Anjuta w systemie Linux). Podczas zajęć laboratoryjnych towarzyszących bieżącemu kursowi korzystać będziemy z programu Dev-C++, który jest (darmowym) zintegrowanym środowiskiem programistycznym opartym na kompilatorach serii gcc i pracującym w systemie Windows. Program ten można pobrać z Sieci ze strony 2. Wybraliśmy go, gdyż (i) jego używanie nie jest obwarowane licencjami komercyjnymi; (ii) oparty jest na bardzo dobrym zestawie kompilatorów gcc/mingw; (iii) zajmuje niewiele miejsca, jest szybki i łatwy w instalacji i obsłudze; (iv) towarzyszy mu ogromna liczba opcjonalnych bibliotek; (v) jest programem dobrze nam znanym, od kilku lat używanym (z wyboru) przez naszych studentów. Typowy wygląd okna programu Dev-C++ przedstawia Rys Głównymi elementami interfejsu użytkownika w tym programie są: Okno edytora tekstu. Jest dostosowane do pisania programów w C lub C++, a wiele jego właściwości może być swobodnie konfigurowanych przez użytkownika. Paski narzędzi. Ułatwiają dostęp do często wykonywanych czynności, np. kompilacji programu, obsługi projektów, wyszukiwania tekstu. Menu. Udostępnia wszystkie funkcje programu. Okno widoku projektu. Ułatwia orientację w dużych programach. Okna raportu. Zawierają dodatkowe informacje, np. pełny komunikat kompilatora o przebiegu kompilacji. Pasek stanu. Podaje podstawowe informacje o edytowanym pliku. 2 Jeśli Czytelnik zdecyduje się zainstalować u siebie środowisko Dev-C++, warto rozszerzyć je o najnowszą wersję środowiska MSYS ( które zwiera programy niezbędne do kompilowania programów i bibliotek dostępnych na licencji GNU. Jeszcze większe możliwości daje instalacja systemu CygWin (

18 18 Rozdział 1. Pierwszy program w C Pierwszy program Oto nasz pierwszy, najprostszy program w C++. Jego celem jest wyświetlenie na ekranie napisu Pierwszy program w C++. #include <iostream> Wydruk 1.1: Pierwszy program w C++. int main() { std :: cout << Pierwszy program w C++ << \n ; } Tekst programu należy zapisać w pliku o odpowiednim rozszerzeniu. W przypadku kompilatora gcc za standardowe rozszerzenia nazw plików zawierających programy w C++ uznaje się plik.cc, plik.cp, plik.cxx, plik.cpp, plik.cpp, plik.c++ oraz plik.c. W niniejszym kursie stosować będę bodaj najpopularniejsze rozszerzenie plik.cpp Kompilacja kodu źródłowego Programy pisze się w postaci możliwie jak najbardziej zrozumiałej dla ludzi, po czym przy pomocy specjalnych programów tłumaczy się je na ciąg instrukcji przeznaczonych bezpośrednio dla komputera. Obie te wersje zwyczajowo zwie się programem. Aby uniknąć ewentualnych nieporozumień, program w postaci zrozumiałej dla ludzi zwie się kodem źródłowym, a w postaci przeznaczonej dla komputera kodem maszynowym lub wynikowym 3. Program tłumaczący kod źródłowy na maszynowy zwany jest kompilatorem, a sam proces tłumaczenia kompilacją. Słowa kompilator i kompilacja są jednak wieloznaczne. Jeszcze nie tak dawno temu proces tłumaczenia kodu źródłowego na maszynowy składał się z wielu kroków wykonywanych przez osobne programy. W wypadku języka C były to m.in. preprocesor, kompilator, asembler, konsolidator. Najważniejszym instrumentem w tej orkiestrze był (i jest) kompilator od jego jakości w największym stopniu zależy jakość kodu maszynowego. Stąd po pewnym czasie cały proces translacji kodu źródłowego zaczęto nazywać kompilacją; analogicznie cały zestaw programów zaangażowanych w tak rozumianą kompilację zwie się kompilatorem. Z biegiem czasu pojawiła się tendencja, by możliwie jak najbardziej uprościć obsługę procesu tłumaczenia programów. Obecnie w zintegrowanych środowiskach programistycznych translację programu można wykonać po prostu za naciśnięciem myszą odpowiedniego przycisku. Z kolei twórcy kompilatora gcc przyjęli zasadę, że wszystkie etapy translacji można (jawnie lub nie) wykonać przy pomocy polecenia gcc, przy czym szczegółami samego procesu translacji steruje się tu przy pomocy rozlicznych opcji podawanych w wierszu poleceń. Wśród profesjonalistów żelazną regułą jest, by duże programy dzielić na stosunkowo małe fragmenty umieszczane w osobnych plikach źródłowych. W tym 3 Słowo program ma jeszcze trzecie znaczenie informatyczne kod znajdujący się w fazie realizacji przez maszynę ; aby uniknąć dwuznaczności, zwie się go procesem.

19 Pierwszy program 19 wypadku translację kodu źródłowego dzieli się na kompilację poszczególnych plików, w wyniku czego otrzymuje się tzw. pliki obiektowe, i łączenie (zwane też konsolidacją lub linkowaniem) plików obiektowych z plikami bibliotecznymi w jeden plik wykonywalny. W środowisku kompilatora gcc proces ten zazwyczaj sterowany jest specjalnym programem make, natomiast w zintegrowanych środowiskach programistycznych efektywna praca z programem podzielonym na wiele plików wymaga utworzenia tzw. projektu. Z początku będziemy pisać wyłącznie małe programy mieszczące się w jednym pliku i ani szczegółami obsługi programu make, ani sposobami tworzenie projektów nie musimy się jeszcze zajmować; ważne jest jednak, by zdawać sobie sprawę z pewnego zamieszania pojęciowego panującego w zintegrowanych środowiskach programistycznych. Wiele z nich, np. Visual C++ czy Anjuta, pod nazwą compile rozumie wyłącznie pierwszą fazę translacji, czyli tłumaczenie bieżącego pliku źródłowego na kod obiektowy. Z kolei Dev-C++ pod nazwą compile (lub kompiluj ) rozumie cały proces translacji aż do utworzenia pliku wykonywalnego 4. Pora na małe podsumowanie tego przydługiego wywodu. Aby przetłumaczyć plik źródłowy plik.cpp na plik wykonywalny plik.exe należy Kompilator gcc: Wydać polecenie g++ plik.cpp -o plik.exe Środowisko Dev-C++: Przycisnąć kombinację Ctrl+F9. Zwróćmy uwagę na to, że polecenie wywołujące kompilator C++ nazywa się g++ a nie gcc. W gruncie rzeczy g++ i gcc to ten sam kompilator; wywołanie go jako g++ (lub c++) powoduje jedynie automatyczne połączenie kompilowangeo programu ze standardowymi bibliotekami C++ (zamiast C). Kompilator gcc posiada mnóstwo opcji. Opis najważniejszych z nich znajduje się w dodatku A Błędy kompilacji Dość rzadko zdarza się, by już pierwsza wersja programu była całkowicie poprawna. Zazwyczaj kody źródłowe zawierają różnego rodzaju naruszenia składni języka. Typowy błąd to literówka, pominięcie nawiasu lub definicji zmiennej. Dobry kompilator powinien nie tylko wskazać miejsce wystąpienia błędu, ale także zasugerować sposób usunięcia go. W praktyce bywa z tym różnie, a do prawidłowego rozszyfrowania komunikatów kompilatora potrzebna jest wieloletnia wprawa. Rozpatrzmy prosty przykład. Załóżmy, że w programie 1.1 ze str. 18 zapomniano zakończyć średnikiem instrukcję cout <<.... Po skompilowaniu takiego błędnego programu w środowisku Dev-C++ uzyskamy efekt jak na Rys Brązowy pasek i krzyżyk na lewym marginesie wskazują wiersz, w którym kompilator wykrył błąd. Komunikat o błędzie wyświetlany jest na dole w okienku komunikatów. Zawiera on numer wiersza (tu: 6), nazwę pliku (tu: 1.cpp) oraz komunikat diagnostyczny (expected ; before \} token). Gdyby błędów było więcej, moglibyśmy łatwo dotrzeć do miejsca detekcji każdego z nich w tym celu wystarczyłoby kliknąć odpowiedni wiersz w okienku komunikatów. Miejsce detekcji błędu często różni się od jego rzeczywistej lokalizacji. W naszym przypadku różnica jest niewielka tylko jeden wiersz ale czasami może nawet dojść do sytuacji, gdy kompilator odkryje błąd w innym pliku niż ten, 4 Ta sama czynność w języku Visual C++ zwie się budowaniem (ang. build ).

20 20 Rozdział 1. Pierwszy program w C++ Tu brakuje średnika Tu wykryto błąd Lista komunikatów kompilatora Rysunek 1.2: Wygląd okna programu Dev-C++ w przypadku wykrycia przez kompilator błędu w kodzie źródłowym. w którym błąd faktycznie popełniono. Sam komunikat również nie jest klarowny nawet dla osób biegle władających językiem angielskim. Nie narzekajmy jednak zbytnio: gdyby kompilator mógł sam poprawiać nasze błędy, mógłby też sam pisać programy, a więc my nie bylibyśmy już do niczego potrzebni Uruchamianie programu w środowisku Dev-C++ Aby uruchomić w środowisku Dev-C++ skompilowany program, wystarczy wybrać z menu pozycję Uruchom/Uruchom lub wcisnąć kombinację Ctrl+F10. Jeśli jednak w ten sposób uruchomimy program 1.1, spotka nas przykra niespodzianka: Dev-C++ otworzy okienko konsoli, uruchomi w niej nasz program, po czym natychmiast zamknie okno wraz z konsolą! Całość ledwie mignie nam przed oczami. Aby uchronić okno programu przed natychmiastowym zamknięciem, zazwyczaj na samym końcu funkcji main umieszcza się instrukcję system( pause ); Struktura prostego programu w C++ Króciutkie (a więc też, niestety, raczej trywialne) programy w C++ mają następującą strukturę: Wydruk 1.2: Ogólna struktura prostych programów w C++. #include <iostream> int main() {... } przy czym wielokropek należy zastąpić tu instrukcjami programu. Na razie to nie do końca prawdziwe stwierdzenie proszę przyjąć jak dogmat. Wyjaśnienie roli i znaczenia poszczególnych konstrukcji użytych w powyższym schemacie zostanie przedstawione w kolejnych rozdziałach.

21 1.5 Obiekt std::cout i literały Obiekt std::cout i literały 21 Nasz pierwszy program (wydruk 1.1 na str. 18) zawiera tylko jedną instrukcję: std :: cout << Pierwszy program w C++ << \n ; Jej znaczenie jest następujące. std::cout oznacza strumień danych związany z bieżącym okienkiem. Do strumienia tego przesyłane są dane przy pomocy operatora <<. Najpierw przesyłany jest napis Pierwszy program w C++. Następnie do obiektu std::cout trafia kolejny, dość tajemniczy napis \n jednak tak naprawdę nie jest to zwyczajny napis, lecz specjalny znak sterujący, którego przesłanie na konsolę powoduje przemieszczenie kursora na początek kolejnego wiersza. Spójrzmy teraz na tę samą instrukcję z bardziej ogólnego punktu widzenia: std:: w nazwie obiektu std::cout oznacza, że mamy do czynienia z obiektem z biblioteki standardowej; std jest tu nazwą przestrzeni nazw, a :: tzw. operatorem zasięgu. Zapis std::cout oznacza, że używamy obiektu cout z przestrzeni nazw std. Nazwa obiektu cout to skrót od angielskiego console output (wyjście na konsolę). Przed pierwszym użyciem strumienia std::cout należy zastosować makrodefinicję #include <iostream> Zwyczajne napisy w C++ umieszcza się między znakami cudzysłowu. Dalej takie napisy będę nazywał tekstami. Znaki sterujące (zwane też znakami specjalnymi) zapisuje się jako ciąg dwóch liter, z których pierwsza jest ukośnikiem (\). Zapis << oznacza specjalny operator. Służy on m.in. do przesyłania danych na konsolę. Wywołania operatora << można łączyć ze sobą w ciąg; odpowiada to kierowaniu na konsolę kolejnych tekstów lub obiektów. Dwa kolejne teksty (ujęte w cudzysłów) można ze sobą łączyć w jeden. Dlatego zamiast std::cout << "Pierwszy program w C++"<< "\n" można napisać std :: cout << Pierwszy program w C++\n ; Każda instrukcja (prosta) musi kończyć się średnikiem. Liczby wyświetla się na konsoli równie łatwo, jak napisy. Jedyna komplikacja polega na tym, że komputery rozróżniają wiele rodzajów liczb. W szczególności starannie rozróżniają liczby całkowite od rzeczywistych. Spójrzmy na wydruk 1.3: #include <iostream> Wydruk 1.3: Program wyświetlający liczby i napisy. int main() { std :: cout << Mam << 40 << lat\nliczba pi = << 3.14 <<...\n ; }

22 22 Rozdział 1. Pierwszy program w C++ Program ten wyświetla dwie linijki tekstu: Mam 40 lat Liczba pi = Jak widać, obiekt std::cout w taki sam sposób operatorem << wyświetla teksty, liczby całkowite i liczby rzeczywiste (oczywiście te ostatnie zapisujemy z kropką, a nie przecinkiem dziesiętnym!). Warto też zwrócić uwagę na stosowanie odstępów w napisach występujących przed lub po liczbach. Liczby wyświetlane są bowiem bez żadnych odstępów. 1.6 Definiowanie obiektów Nasze dotychczasowe programy mają pewną ułomność: ograniczają się do wyświetlania liczb lub tekstów umieszczonych dosłownie ( literalnie ) w tekście programu. W fachowym żargonie mówi się, że te programy wyświetlają wartości literałów. Wartość literału jest znana już podczas kompilacji i nie może ulec zmianie podczas wykonywania programu. Naturalne pytanie brzmi: w jaki sposób zdefiniować obiekty, których wartość mogłaby ulegać zmianie podczas pracy programu? Odpowiedź przynosi program 1.4: 1 #include <iostream> #include <string> Wydruk 1.4: Program modyfikujący wartości zmiennych. int main() 5 { std :: cout << Jak masz na imie? ; std :: string imie; std :: cin >> imie; 10 std :: cout << ile masz lat? ; int wiek; std :: cin >> wiek; std :: cout << Witaj, << imie 15 <<! Nie wiedzialem, ze masz << wiek << lat!\n ; } Definicja funkcji main składa się z siedmiu instrukcji 5 ułożonych w trzech grupach. W wierszach 6-8 program wczytuje imię użytkownika, w wierszach prosi go o podanie wieku, po czym w długiej instrukcji zajmującej wiersze 14 i 15 wyświetla komunikat zawierający zarówno imię jak i wiek użytkownika. Przyjrzyjmy się teraz szczegółowo sposobowi realizacji tych zadań. Znaczenie wierszy 6, 10 i powinno już być jasne: program wyświetla w nich komunikaty dla użytkownika. Natomiast w wierszach 7 i 11 mamy przykłady zastosowania nowej konstrukcji języka definicji obiektu. Obiekt definiuje się w bardzo prosty sposób: najpierw podajemy nazwę klasy obiektu, a po niej 5 Liczba instrukcji równa jest liczbie średników.

23 Definiowanie obiektów 23 nazwę definiowanego obiektu 6. Definicja obiektu jest traktowana jak instrukcja, dlatego należy zakończyć ją średnikiem. Co więcej, w C++ obowiązuje Reguła 1.1 Definicje mogą przeplatać się ze zwykłymi instrukcjami Dlatego obiekty można (i należy!) definiować dopiero tam, gdzie są naprawdę potrzebne. W naszym przykładzie zdefiniowano dwa obiekty: imie, (klasy std::string) oraz wiek (klasy int). Klasa std::string służy do obsługi wszelkiego rodzaju tekstów, natomiast int to klasa liczb całkowitych (int to skrót od angielskiego słowa integer oznaczającego właśnie liczbę całkowitą). Po zdefiniowaniu obiekty są gotowe do użycia. W wierszach 8 i 12 zmienia się ich wartości na te, które zostaną wprowadzone przez użytkownika przy pomocy klawiatury. Służy do tego obiekt std::cin (jego nazwa pochodzi od angielskiego zwrotu console input, czyli wejście z konsoli ) oraz operator >>. W przeciwieństwie do wielu innych języków programowania, w C++ nie czyni się żadnych niejawnych założeń co do klasy niezadeklarownych obiektów. Proszę zapamiętać następującą zasadę: Reguła 1.2 Każdy obiekt musi mieć jawnie zadeklarowaną klasę (tj. typ) Po przeczytaniu powyższej reguły uważnemu Czytelnikowi mogą przyjść do głowy dwa pytania. Po pierwsze, gdzie w programie 1.4 znajdują się wymagane przez nią definicje obiektów std::cout i std::cin? Odpowiedź brzmi: za deklarację tych obiektów odpowiedzialna jest dyrektywa #include <iostream>. Jej działanie polega na dołączeniu do kodu programu wszystkich deklaracji związanych z działaniem standardowych strumieni wejścia i wyjścia. Bez tej dyrektywy kompilator nie wiedziałby, jaka jest klasa tych obiektów, a w związku z tym uznałby program za błędny. Drugie pytanie brzmi: skoro tak stanowczo wymaga się, by przed użyciem jakiegokolwiek obiektu zdefiniować jego klasę, jak rozwiązano w C++ zagadnienie definiowania samych klas? W szczególności skąd kompilator wie, jakie jest znaczenie słówek int oraz std::string użytych w programie na oznaczenie klas obiektów? Otóż kilka klas podstawowych, m.in. int, jest zdefiniowanych w samym języku C++; wszystkie inne muszą być jawnie zdefiniowane przed pierwszym użyciem. W szczególności definicja klasy std::string włączana jest do programu dyrektywą #include <string>. Odpowiedź na powyższe pytania zawiera jednocześnie wyjaśnienie znaczenia dwóch pierwszych wierszy programu 1.4. Znajdujące się w nich dyrektywy 7 #include służą do dosłownego wstawienia w miejscu ich wystąpienia treści plików o nazwach podanych w nawiasach ostrokątnych. Takie pliki zwie się plikami nagłówkowymi. Użyte w programie pliki iostream i string wchodzą w skład każdej instalacji kompilatora C++, gdyż stanowią część biblioteki standardowej tego języka. Dodatkowo każda niestandardowa biblioteka instaluje w kompilatorze dodatkowe pliki nagłówkowe (w moim kompilatorze jest ich bagatela około 1270). Zasadniczo pliki nagłówkowe służą do informowania kompilatora o możliwościach danej biblioteki (tj. stanowią jej interfejs). 6 Wiele podręczników C++ w użytym tu kontekście zastosowałoby terminy zmienna (zamiast obiekt ) i typ (zamiast klasa ). Ja uważam takie rozróżnianie za zbędne i niepedagogiczne; prowadzi ono bowiem do sytuacji, gdy słowa obiekt i klasa pojawiają się w połowie kursu, co sugeruje, że obiekty i klasy to coś niesamowicie skomplikowanego. 7 Dyrektywy zostaną szczegółowo omówione w Rozdziale 10.

24 24 Rozdział 1. Pierwszy program w C++ Plik nagłówkowe bardzo często same także zawierają dyrektywy #include włączające kolejne pliki nagłówkowe. Wiąże się z tym następująca ciekawostka: dwie niewinnie wyglądające w programie 1.4 dyrektywy #include w rzeczywistości włączają do jego tekstu zawartość nie dwóch, lecz 98 plików nagłówkowych, a po ich włączeniu całkowita liczba wierszy programu wynosi nie 17, lecz (dane dla kompilatora gcc cygming special). 1.7 Identyfikatory, słowa kluczowe i dyrektywy Definiując obiekty, musimy nadać im nazwy. Jak się wkrótce przekonamy, w C++ można (i zazwyczaj trzeba) definiować też inne byty : funkcje, klasy, wyliczenia itp. Wszystkie one muszą mieć nazwy. W żargonie C/C++ nie używa się jednak w tym kontekście słowa nazwa, lecz identyfikator. Identyfikatory mogą składać się wyłącznie liter, cyfr i znaku podkreślenia (_), przy czym pierwszym znakiem nie może być cyfra (gdyż cyframi rozpoczynać się mogą wyłącznie liczby). Ilość znaków w identyfikatorze (we współczesnych kompilatorach) jest praktycznie nieograniczona. We wszystkich identyfikatorach litery małe uważa się za różne od wielkich. Poprawnymi (i wzajemnie różnymi) identyfikatorami są więc np. rozmiar, Rozmiar, rozmiar_tablic, s00, M_PI. W punkcie 1.6 wspomniałem już, że pewne identyfikatory, np. int, zdefiniowane są w samym języku. Są to tak zwane słowa kluczowe. Słowa kluczowe mają ściśle określone, niezmienne znaczenie. Nie można więc używać ich jak zwykłych identyfikatorów (np. jako nazw zmiennych lub typów). W C++ istnieją aż 73 słowa kluczowe (w praktyce używa się ok. 50). W niniejszym podręczniku słowa kluczowe wyróżniono pogrubieniem. Oprócz słów kluczowych specjalną rolę w programie odgrywają tzw. dyrektywy preprocesora. Są to specjalne identyfikatory poprzedzone znakiem #. Jest ich w sumie kilkanaście, z czego w praktyce używa się ok. 6. W podręczniku dyrektywy preprocesora również wyróżniam pogrubieniem (tak jak słowa kluczowe). Regułę 1.2 można teraz rozszerzyć następująco: Reguła 1.3 Każdy identyfikator, który nie jest słowem kluczowym lub dyrektywą preprocesora, najpierw musi być zadeklarowany, a dopiero potem może zostać użyty. Jak już wiemy, do deklarowania identyfikatorów bibliotecznych służy dyrektywa #include<...>; z kolei najczęściej spotykaną metodą deklaracji własnych identyfikatorów jest podanie ich definicji (tj., definicji obiektu, funkcji, etc.). 1.8 Zapis programu Wróćmy jeszcze raz do programu 1.4 (str. 22) i przyjrzyjmy się jego zapisowi. Mam nadzieję, że Czytelnik zwrócił uwagę na jego czytelność. Aby ją osiągnąć, zastosowałem następujące zasady: Dyrektywy #include rozpoczynają się od pierwszej kolumny i poprzedzają wszelkie inne fragmenty programu. Definicja funkcji rozpoczyna się od pierwszej kolumny, natomiast jej treść jest (równomiernie) wcięta.

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

Wstęp do programowania. Wykład 1 Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Programowanie w języku C++ Grażyna Koba

Programowanie w języku C++ Grażyna Koba Programowanie w języku C++ Grażyna Koba Kilka definicji: Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i zasad

Bardziej szczegółowo

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania Monika Wrzosek Instytut Matematyki Uniwersytet Gdański Matematyka 2017/18 Monika Wrzosek (IM UG) Podstawy Programowania 1 / 119 Sprawy organizacyjne E-mail: mwrzosek@mat.ug.edu.pl

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++ Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga! Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...)

Bardziej szczegółowo

Programowanie w C. dr inż. Stanisław Wszelak

Programowanie w C. dr inż. Stanisław Wszelak Programowanie w C dr inż. Stanisław Wszelak Przeszłość i przyszłość składni programowania w C Ken Thompson Denis Ritchie Bjarne Stoustrup Zespoły programistów B C C++ C# 1969 rok Do SO UNIX 1972 rok C++

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy Programowanie w C++ 1.Czym jest programowanie Pisanie programów to wcale nie czarna magia, tylko bardzo logiczna rozmowa z komputerem. Oczywiście w jednym ze specjalnie stworzonych do tego celu języków.

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski dr Dariusz Wardowski, Instytut Matematyki i Informatyki PWSZ w Płocku 1 O mnie prowadzący wykład i laboratoria: Dariusz Wardowski pokój: 102

Bardziej szczegółowo

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

Bardziej szczegółowo

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28 Programowanie w C++ Wykład 1 Katarzyna Grzelak 26 luty 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28 Dlaczego programowanie? K.Grzelak (Wykład 1) Programowanie w C++ 2 / 28 Umiejętność, która otwiera

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Instrukcja do pracowni specjalistycznej z przedmiotu Obiektowe programowanie aplikacji Kod przedmiotu: TS1C410201

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Laboratorium 1 Wprowadzenie, środowisko programistyczne, pierwsze programy 1 CEL ZAJĘĆ LABORATORYJNYCH: Wprowadzenie do programowania w języku C++ oraz

Bardziej szczegółowo

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop. 2017 Spis treści O autorach 11 Podziękowania 12 Wprowadzenie 13 CZĘŚĆ I ZACZNIJ PROGRAMOWAĆ JUŻ DZIŚ Godzina 1. Praktyczne

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Utworzenie pliku. Dowiesz się:

Utworzenie pliku. Dowiesz się: Dowiesz się: 1. Jak rozpocząć pisanie programu 2. Jak wygląda szkielet programu, co to są biblioteki i funkcja main() 3. Jak wyświetlić ciąg znaków w programie 4. Jak uruchamiać (kompilować) napisany program

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 2. Przygotowanie środowiska pracy

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy.

Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy. Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy. Niniejsza publikacja, ani żadna jej część, nie może być kopiowana, ani

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 04 X 2011 Wszelkie uwagi, poprawki, braki czy sugestie najlepiej wysyłać na maila. 1. wprowadzenie do Linuksa: kompilacja

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania Przemysław Kobylański Wprowadzenie Każdy program w C musi zawierać przynajmniej funkcję o nazwie main(): Aby możliwe

Bardziej szczegółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO Rozdział 1. Wybór i instalacja kompilatora języka Pascal 1.1. Współczesne wersje kompilatorów Pascala 1.2. Jak zainstalować

Bardziej szczegółowo

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD Języki C i C++ Wykład: 2 Wstęp Instrukcje sterujące 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA I. KARTA PRZEDMIOTU 1. Nazwa przedmiotu: PODSTAWY PROGRAMOWANIA. Kod przedmiotu: Ovi1 3. Jednostka prowadząca: Wydział Mechaniczno-Elektryczny 4. Kierunek: Mechatronika 5. Specjalność: Eksploatacja Systemów

Bardziej szczegółowo

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38 Programowanie w C++ Wykład 1 Katarzyna Grzelak 25 luty 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38 Dlaczego programowanie? K.Grzelak (Wykład 1) Programowanie w C++ 2 / 38 Umiejętność, która otwiera

Bardziej szczegółowo

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski Informatyka- wykład Podstawy programowania w Pythonie dr Marcin Ziółkowski Instytut Matematyki i Informatyki Akademia im. Jana Długosza w Częstochowie 23 listopada 2015 r. JĘZYK PYTHON Język Python jest

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16 M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

Programowanie proceduralne w języku C++ Pojęcia podstawowe - kod źródłowy

Programowanie proceduralne w języku C++ Pojęcia podstawowe - kod źródłowy Programowanie proceduralne w języku C++ Pojęcia podstawowe - kod źródłowy Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 1 Literatura Literatura podstawowa: Prata Stephen. Szkoła programowania. Język C++. Wydanie V. Helion,

Bardziej szczegółowo

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop. 2010 Spis treści Wstęp 11 Część I PASCAL - wprowadzenie do programowania strukturalnego

Bardziej szczegółowo

Programowanie (C++) NI 5

Programowanie (C++) NI 5 Forma kształcenia i sposób weryfikacji efektów kształcenia Efekty kształcenia WYDZIAŁ FIZYKI UwB kierunek studiów: FIZYKA specjalność: FIZYKA KOD USOS: 0900 FS1 2 PRO Karta przedmiotu Przedmiot moduł ECTS

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Studia podyplomowe dla nauczycieli INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Przedmiot JĘZYKI PROGRAMOWANIA DEFINICJE I PODSTAWOWE POJĘCIA Autor mgr Sławomir Ciernicki 1/7 Aby

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Programowanie komputerów

Programowanie komputerów Programowanie komputerów Wykład 1-2. Podstawowe pojęcia Plan wykładu Omówienie programu wykładów, laboratoriów oraz egzaminu Etapy rozwiązywania problemów dr Helena Dudycz Katedra Technologii Informacyjnych

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Algorytmy i programowanie Algorithms and Programming Kierunek: Zarządzanie i Inżynieria Produkcji Rodzaj przedmiotu: kierunkowy Poziom studiów: studia I stopnia forma studiów: studia

Bardziej szczegółowo

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop. 2016 Spis treści Spis rysunków 11 Spis tabel 13 Przedmowa 15 Wprowadzenie 17 Podziękowania 27 O autorach 29 1 Wprowadzenie

Bardziej szczegółowo

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania Wykład: 5 Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania w C++ Instrukcje sterujące 2 dr Artur Bartoszewski

Bardziej szczegółowo

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska im. Tadeusza Kościuszki Karta przedmiotu obowiązuje w roku akademickim 01/013 Kierunek studiów: Informatyka Forma studiów: Stacjonarne Profil:

Bardziej szczegółowo

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013 Politechnika Krakowska im. Tadeusza Kościuszki Karta przedmiotu obowiązuje studentów rozpoczynających studia w roku akademickim 01/013 Wydział Fizyki, Matematyki i Informatyki Kierunek studiów: Informatyka

Bardziej szczegółowo

Czym są właściwości. Poprawne projektowanie klas

Czym są właściwości. Poprawne projektowanie klas Z akcesorów get i set korzysta każdy kto programuje w C#. Stanowią one duże udogodnienie w programowaniu obiektowym. Zapewniają wygodę, bezpieczeństwo i znacząco skracają kod. Akcesory są ściśle związane

Bardziej szczegółowo

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki Wykład 2 - podstawy języka C++ Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe. Instrukcje:

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 1

Programowanie komputerowe. Zajęcia 1 Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program

Bardziej szczegółowo

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - S t r o n a 2 SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - Copyright by Artur Niewiarowski 2013 ISBN: 978-83-937802-0-4 - Artur Niewiarowski Self-Publishing - All rights reserved. Wszelkie prawa

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Podstawy programowania komputerów Computer programming basics Kierunek: Mechatronika Rodzaj przedmiotu: obowiązkowy Rodzaj zajęć: wykład, laboratorium Forma studiów: stacjonarne Poziom

Bardziej szczegółowo

Programowanie i techniki algorytmiczne

Programowanie i techniki algorytmiczne Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

Podstawy programowania - 1

Podstawy programowania - 1 Podstawy programowania - 1 doc. dr inż. Tadeusz Jeleniewski Wykład: sobota B, godz. 10.30 12.55 sala 12 Laboratorium: sobota B, godz. 13.00 15.25 sala 2 sobota B, godz. 15.30-17.55 sala 2 e-mail: tadeusz.jeleniewski@pwr.wroc.pl

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Dziedziczenie Przestrzenie nazw Na podstawie: A.

Bardziej szczegółowo

Wprowadzenie do programowania

Wprowadzenie do programowania do programowania ITA-104 Wersja 1 Warszawa, Wrzesień 2009 ITA-104 do programowania Informacje o kursie Zakres tematyczny kursu Opis kursu Kurs przeznaczony jest do prowadzenia przedmiotu do programowania

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 9: Polimorfizm i klasy wirtualne Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Programowanie obiektowe i metody wirtualne 2 W programowaniu obiektowym polimorfizm

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia

Bardziej szczegółowo

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

1 Wskaźniki. 1.1 Główne zastosowania wskaźników 1 Wskaźniki Wskaźnik (ang. pointer) jest obiektem (zmienną) przechowującym adres pamięci. Definiowanie wskaźników: typ *nazwa wskaznika; np.: int *wsk na x;, double *xxx;, char *znak;. Aby można było pracować

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Część pierwsza Od języka symbolicznego do języka wysokiego poziomu Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++ Jednostka prowadząca: Wydział Techniczny Kierunek studiów: Elektronika i telekomunikacja Nazwa przedmiotu: Język programowania C++ Charakter przedmiotu: podstawowy, obowiązkowy Typ studiów: inŝynierskie

Bardziej szczegółowo

Algorytmika i programowanie usystematyzowanie wiadomości

Algorytmika i programowanie usystematyzowanie wiadomości Temat 1. Algorytmika i programowanie usystematyzowanie wiadomości Cele edukacyjne Usystematyzowanie podstawowych pojęć: algorytm, program, specyfikacja zadania, lista kroków, schemat blokowy, algorytm

Bardziej szczegółowo

Spis treści. Wprowadzenie 15

Spis treści. Wprowadzenie 15 Spis treści Wprowadzenie 15 1. Mechanizmy języka C++ 19 1.1. Struktura programu jednostki translacji.................. 21 1.1.1. Składnia tekstu źródłowego...................... 22 1.1.2. Preprocesor...

Bardziej szczegółowo

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

Zakres tematyczny dotyczący podstaw programowania Microsoft Office Excel za pomocą VBA

Zakres tematyczny dotyczący podstaw programowania Microsoft Office Excel za pomocą VBA Zakres tematyczny dotyczący podstaw programowania Microsoft Office Excel za pomocą VBA 1 Rozdział 1 Praca z makropoleceniami Opis: W tym rozdziale kursanci przechodzą przez wprowadzenie do programowania

Bardziej szczegółowo

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy

Bardziej szczegółowo

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

Bardziej szczegółowo

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 1 Podstawy programowania dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Ramowy program warsztatów 1. Pierwsze: Podstawy programowania 2. Drugie:

Bardziej szczegółowo

Podstawy programowania w C++

Podstawy programowania w C++ Podstawy programowania w C++ Strumienie wejścia cin>> i wyjścia cout

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki Studia Podyplomowe INFORMATYKA Podstawy Informatyki Wykład V Rzut okiem na języki programowania 1 Kompilacja vs. interpretacja KOMPILACJA Proces, który przetwarza program zapisany w języku programowania,

Bardziej szczegółowo