Programowanie C++
Wykład 1 - Aplikacje konsowlowe w środowisku QT
dr inż. Jakub Możaryn
Instytut Automatyki i Robotyki
Warszawa, 2014
Wstęp
Plan wykładu
Podstawowe pojęcia i proste programy. Pojęcia algorytmu, programu, kodu wykonywalnego. Kompilacja i wykonanie programu. Sieci działań.
Struktura programu. Komentarze i dokumentacja programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe.
Instrukcje: czytania, pisania, przypisania. Klasyfikacja typów. Stałe, wyrażenia i funkcje. Instrukcje: warunkowa, złożona. Instrukcje cykliczne:
pętla for, pętle sterowane warunkiem. Instrukcje przerywające wykonanie pętli. Instrukcja wielokrotnego wyboru.
Plan wykładu
Rysunek :Proces powstawania i działania progarmu.
Pojęcia podstawowe
Algorytm
Określamy tym mianem wszelkie przepisy postępowania, które doprowadzają do uzyskania pożądanego efektu – rozwiązania zadania.
Algorytm
Skończony ciąg jasno zdefiniowanych czynności, koniecznych do
wykonania pewnego rodzaju zadań. Algorytm ma przeprowadzić system z pewnego stanu początkowego do pożądanego stanu końcowego.
Badaniem algorytmów zajmuje się algorytmika. Algorytm może zostać zaimplementowany w postaci programu komputerowego.
Algorytm - (def.)
Algorytm to jednoznaczny przepis obliczenia w skończonym czasie pewnych danych wejściowych do pewnych danych wynikowych.
Pojęcia podstawowe
Kompilacja
Program służący do automatycznego tłumaczenia kodu napisanego w jednym języku (języku źródłowym) na równoważny kod w innym języku (języku wynikowym). Proces ten nazywany jest kompilacją.
Kompilator
W informatyce kompilatorem nazywa się najczęściej program do tłumaczenia kodu źródłowego w języku programowania na język maszynowy. Niektóre z nich tłumaczą najpierw do języka asemblera, a ten na język maszynowy jest tłumaczony przez asembler.
Plan wykładu
Rysunek :Proces powstawania i działania progarmu.
Pojęcia podstawowe
Język maszynowy
Zestaw rozkazów procesora, w którym zapis programu wyrażony jest w postaci liczb binarnych stanowiących rozkazy oraz ich argumenty.
Kod maszynowy
Postać programu komputerowego (zwana postacią wykonywalną lub binarną) przeznaczona do bezpośredniego lub prawie bezpośredniego wykonania przez procesor. Jest ona dopasowana do konkretnego typu procesora i wyrażona w postaci rozumianych przez niego kodów rozkazów i ich argumentów. Jest to postać trudna do analizy przez człowieka.
Konsolidator (ang. linker)
Inaczej - program konsolidujący, to jeden z programów składowych kompilatora. Konsolidator w trakcie procesu konsolidacji łączy zadane pliki obiektowe i biblioteki statyczne tworząc w ten sposób plik wykonywalny.
Oprogramowanie Qt
Qt Creator jest wygodnym środowiskiem programistycznym przeznaczonym do tworzenia projektów, czyli aplikacji zarówno konsolowych, jak i okienkowych z wykorzystaniem biblioteki Qt.
Przedmiotem zajęć są aplikacje konsolowe (część 1, 4h), oraz aplikacje okienkowe (część 2, 4h). Na zajęciach używana będzie wersja Qt 5.0.2 for Windows 32-bit (MinGW 4.7) wykorzystująca kompilator MinGW 4.7. Plik instalacyjny zajmuje 650MB.
Możliwe jest również zainstalowanie wersji wykorzystującej
kompilator Microsoft Visual Studio 2010 oraz wersje na Mac i Linux.
Pliki instalacyjne środowiska Qt dla odpowiedniego systemu i kompilatora można znaleźć pod adresem
http://qt-project.org/downloads
Qt
Qt - zestaw przenośnych bibliotek i narzędzi programistycznych dedykowanych dla języków C++, QML i Java. Ich podstawowym składnikiem są klasy służące do budowy graficznego interfejsu programów komputerowych GUI (ang. Graphic User Interface), począwszy od wersji 4.0 Qt zawiera też narzędzia do tworzenia programów konsolowych i serwerów.
Twórcą Qt jest obecnie organizacja Qt Project, do której oprócz niezależnych twórców Open Source należą m.in. firmy Digia, KDAB, ICS. Digia jest właścicelem praw do komercyjnej wersji Qt oraz do znaków towarowych.
Qt - historia
Pomysłodawcami i pierwszymi twórcami Qt byli Haavard Nord i Eirik Chambe-Eng. Projektowanie pierwszych klas biblioteki rozpoczęto w 1991 r. Rok później Chambe-Eng opracował koncepcję mechanizmu sygnałów i gniazd, który wkrótce stał się fundamentem biblioteki.
4 marca 1994 r. Nord i Chambe-Eng założyli firmę Quasar Technologies.
W 1995 firma otrzymała pierwszy kontrakt i zatrudniła pierwszego programistę.
W 1997 twórcy KDE postanowili oprzeć swój produkt na bibliotece Qt.
Dzięki temu szybko osiągnęła ona status jednej z najpopularniejszych bibliotek dla aplikacji okienkowych w C++ dla systemu Linux.
W 2008 Trolltech (d. Quasar Technologies) został przejęty przez Nokię.
W 2010 Nokia zapowiedziała użycie Qt jako głównej platformy programistycznej w Symbianie oraz systemie MeeGo.
W 2012 Digia kupiła od firmy Nokia framework Qt, zapewniając przy okazji dalsze wsparcie i rozwój darmowej licencji i współpracę z projektem KDE oraz KDE Free Qt Foundation na rzecz otwartego i wolnego oprogramowania.
Pierwsze uruchomienie Qt
Wraz ze środowiskiem Qt Creator zintegrowany jest rozbudowany system pomocy z przykładami i samouczkami (po angielsku). Zapoznanie się ze środowiskiem najlepiej zacząć od kroków widocznych na ekranie
powitalnym. Ekran taki pojawi się przy pierwszym uruchomieniu i zawsze wtedy, gdy wybrana będzie sekcja Zaczynamy nad górną poziomą kreską.
Rysunek :Ekran główny Qt
Pierwsze uruchomienie Qt
Wraz ze środowiskiem Qt Creator zintegrowany jest rozbudowany system pomocy z przykładami i samouczkami (po angielsku). Zapoznanie się ze środowiskiem najlepiej zacząć od kroków widocznych na ekranie
powitalnym. Ekran taki pojawi się przy pierwszym uruchomieniu i zawsze wtedy, gdy wybrana będzie sekcja Zaczynamy nad górną poziomą kreską.
Rysunek :Ekran główny Qt
Pierwsze uruchomienie Qt
W widoku ekranu powitalnego dostępne są sekcje:
Projekty - widok ostatnio otwartych sesji i projektów oraz opcje utworzenia sesji lub projektu
Przykłady - gotowe projekty z opisem (po angielsku) Samouczki - instrukcje krok po kroku (po angielsku)
Pierwsze uruchomienie Qt
Boczny pasek wyboru trybu pracy Powitanie
Edycja - podstawowy tryb do tworzenia kodu źródłowego programu
Design - tryb tworzenia interfejsu graficznego (nieużywany na ZAP I)
Debug - tryb debugowania programu
Projekty – ustawienia parametrów budowania i uruchamiania otwartych projektów
Analiza - tryb analizy uruchomionego
programu (analiza użycia procesora i pamięci) Pomoc
Rysunek :Pasek wyboru trybu pracy
Pierwsze uruchomienie Qt
Poniżej paska wyboru trybu znajduje się pasek uruchomienia i budowania projektu, w którym zaczynając od góry dostępne są opcje:
wybór aktywnego projektu
budowanie i uruchomienie aplikacji
budowanie i uruchomienie aplikacji w trybie debugowania
budowanie aplikacji bez uruchamiania
Rysunek :Pasek uruchomienia i budowania projektu
Prosta aplikacja konsolowa
W trybie widoku powitalnego należy wybrać sekcję Projekty, a następnie wybrać Nowy projekt.
W oknie tworzenia projektu wybieramy Projekt nieużywający Qt (oznacza to nieużywanie biblioteki Qt, a tylko samego środowiska Qt Creator) i dalej Zwykły projekt C++.
Prosta aplikacja konsolowa
Następnie należy nadać projektowi nazwę (bez spacji i polskich znaków) i wybrać katalog projektów (Utwórz w:), w którym utworzony zostanie katalog dla naszego projektu.
Najlepiej dla danego projektu tworzyć oddzielny katalog. Inaczej łatwo można wprowadzić bałagan do projektowanej aplikacji.
Uwaga
Nie tylko nazwa projektu, ale i cała ścieżka dostępu do katalogu z projektem, nie mogą zawierać polskich znaków. W przeciwnym wypadku debugger dostarczony z MinGW może nie działać poprawnie.
Prosta aplikacja konsolowa
W następnym kroku utworzone zostaną dwa katalogi, osobno dla wersji release i debug. Wersja release jest to końcowa wersja programu skompilowana z optymalizacją rozmiaru pliku wyjściowego i prędkości działania, którą dostarczamy użytkownikowi programu.
Natomiast program skompilowany w wersji debug zawiera
dodatkowe informacje umożliwiające programiście śledzenie działania programu w celu usunięcia błędów (tzw. debugowanie).
Pozostawiamy tutaj ustawienia domyślne.
Prosta aplikacja konsolowa
Dalej jest już ostatni krok tworzenia projektu: jako podsumowanie na ekranie pojawi się ścieżka do utworzonego katalogu zawierającego pliki projektu oraz nazwy domyślnie utworzonych plików: pliku main.cpp z kodem źródłowym oraz pliku z rozszerzeniem .pro zawierającego podstawowe informacje o projekcie (lista plików źródłowych oraz używanych bibliotek). Utworzony katalog będzie zawierał też plik z rozszerzeniem .user zawierający ustawienia projektu specyficzne dla konkretnego komputera (m.in. ścieżki do katalogów). Nas interesować będzie wyłącznie plik main.cpp.
Prosta aplikacja konsolowa
Po utworzeniu projektu interfejs zostanie automatycznie przełączony w tryb edycji. W trybie tym dostępne są dwa najważniejsze okna:
Projekty zawierające listę otwartych projektów okno edycji kodu źródłowego.
Dodatkowo mogą pojawić się okna:
Otwarte dokumenty z listą otwartych plików, okno komunikatów środowiska.
Prosta aplikacja konsolowa
Prosta aplikacja konsolowa
W oknie edycji kodu źródłowego ukazuje się standardowa zawartość pliku main.cpp z prostym programem wypisującym na konsoli napis „Hello World!”. Kod ten zastępujemy naszym własnym programem,
wykorzystując gotowy szkielet.
ZADANIE: napisać program, który poprosi użytkownika o wprowadzenie liczby całkowitej, a następnie wyświetli ją na konsoli.
#include <iostream>
using namespace std;
int main() {
int a;
cout << "Podaj liczbe: " << endl;
cin >> a;
cout << "Podana liczba to: " << a << endl return 0;
}
Prosta aplikacja konsolowa - debugowanie
Uruchomienie aktywnego projektu odbywa się za pomocą przycisku z zieloną strzałką Oznacza to, że projekt budowany jest w wersji debug (co oznacza, że może być potem uruchomiony w trybie debug ), ale
uruchamiany jest w „zwykłym” trybie release.
Pisząc kod łatwo popełnić błąd składniowy lub literówkę, która uniemożliwi poprawną kompilację programu. W takim przypadku kompilator zwróci informację o błędzie
W przykładzie zabrakło średnika na końcu wiersza numer 10, dlatego pojawił się komunikat expected ’;’ before ’return’. W języku C++ średnik musi pojawić się po każdej instrukcji, ale niekoniecznie w tym samym wierszu, dlatego błąd wystąpił dopiero w wierszu 12.
Prosta aplikacja konsolowa - debugowanie
Uruchomienie aktywnego projektu odbywa się za pomocą przycisku z zieloną strzałką Oznacza to, że projekt budowany jest w wersji debug (co oznacza, że może być potem uruchomiony w trybie debug ), ale
uruchamiany jest w „zwykłym” trybie release.
Pisząc kod łatwo popełnić błąd składniowy lub literówkę, która uniemożliwi poprawną kompilację programu. W takim przypadku kompilator zwróci informację o błędzie
W przykładzie zabrakło średnika na końcu wiersza numer 10, dlatego pojawił się komunikat expected ’;’ before ’return’. W języku C++ średnik musi pojawić się po każdej instrukcji, ale niekoniecznie w tym samym wierszu, dlatego błąd wystąpił dopiero w wierszu 12.
Prosta aplikacja konsolowa - debugowanie
Rysunek :Aplikacja konsolowa z informacjami o błędzie zwróconymi przez kompilator
Prosta aplikacja konsolowa - debugowanie
Oprócz błędów, które przerywają kompilację, mogą pojawić się również ostrzeżenia. Dobrze napisany program powinien kompilować się bez ostrzeżeń.
W przypadku wystąpienia krytycznego błędu w trakcie działania
programu zostaniemy o tym poinformowani odpowiednim komunikatem.
Jeżeli uruchomiliśmy program w zwykłym trybie (release) to pozostaje nam zamknięcie programu i okna konsoli.
Prosta aplikacja konsolowa - debugowanie
Nawet jeżeli kod źródłowy kompiluje się poprawnie i uruchamia bez błędów wykonania, to może zawierać błąd logiczny, który sprawi, że program nie działa tak jak chcemy. Do wyszukiwania błędów tego typu służy narzędzie zwane debuggerem, które umożliwia prześledzenie działania programu linia po linii, lub zatrzymanie w konkretnym miejscu (zaznaczonym jako tzw. breakpoint).
Punkt przerwania nazywany breakpoint ustawiamy klikając z lewej strony numeru linii, w której chcemy zatrzymać wykonanie programu.
Uruchomienie aplikacji w trybie debug odbywa się za pomocą klawisza F5 lub przycisk (rys).
Rysunek :Ustawienie punktu przerwania
Prosta aplikacja konsolowa - debugowanie
Interfejs zostanie automatycznie przełączony w tryb debugowania.
Wykonanie programu zostało zatrzymane w linii z breakpointem (żółta strzałka). W oknie po prawej stronie wypisane są zmienne dostępne w danej funkcji oraz ich wartości.
Rysunek :Interfejs Qt w trybie debugowania
Prosta aplikacja konsolowa - debugowanie
W trakcie debugowania przydatne są przyciski z panelu, który pojawił się w widoku debugowania poniżej kodu źródłowego.
Zaczynając od lewej strony przyciski to:
- kontynuacja (uruchomienie) debugowania F5 - zatrzymanie debugowania
- przejście do kolejnej linii F10 - wejście do wnętrza funkcji F11 - wyjście z aktualnej funkcji Shift+F11
Prosta aplikacja konsolowa - debugowanie
Jeżeli program uruchomiliśmy w trybie debug, to komunikat o błędzie jest bardziej szczegółowy, a miejsce, w którym działanie programu zostało przerwane, wskazane jest za pomocą żółtej strzałki.
Rysunek :Interfejs Qt w trybie debug i wyświetlonymi informacjami o błędzie