POLITECHNIKA WARSZAWSKA
Instytut Automatyki i Robotyki
ZASADY PROGRAMOWANIA STRUKTURALNEGO
( ZAP )
prof. nzw. dr hab. inż. Barbara Putz
pok. 306
Pierwszy wykład: dr inż. Marcin Stachura
Język programowania: C/C++
Środowisko programowania: Qt Creator
Wykład 1 : Podstawowe pojęcia, proste programy,
instrukcje warunkowe.
Informacje organizacyjne
2
ZASADY PROGRAMOWANIA STRUKTURALNEGO
TYGODNIOWY WYMIAR ZAJĆ
Rok ak. Semestr W L P ECTS
2011/2012 I 1E 2 - 5
2011/2012 II - - 1 3
Program, regulamin i harmonogram zajęć, literatura, prezentacje do
wykładu:
na witrynie przedmiotu ZAP w systemie komunikacji ze studentami (SKS) -
tam też będą zamieszczane oceny z zajęć laboratoryjnych i egzaminu:
https://iair.mchtr.pw.edu.pl/studenci
(wejście przez login i hasło, które każdy student otrzyma w mailu).
Tymczasowo niniejsza prezentacja jest pod adresem:
https://iair.mchtr.pw.edu.pl/bputz/ZAP2013
Programowanie
3
PROBLEM ALGORYTM PROGRAM
Algorytmizacja Kodowanie
Założony cel zajęć:
" Nabycie umiejętności algorytmizacji różnorodnych problemów
" Nabycie umiejętności kodowania algorytmów z wykorzystaniem języka
wysokiego poziomu
Kompilacja i wykonanie programu
4
" Błędy kompilacji jeśli kompilator nie rozumie programu zródłowego.
" Błędy wykonania programu jeśli program po kompilacji nie daje się wykonać.
" Błędy logiczne jeśli program wykonuje się nieprawidłowo.
Konsolidacja programu (linkowanie)
5
Prezentacja algorytmu w postaci sieci działań
6
Algorytmy przedstawiane są z różnym stopniem szczegółowości. Najczęściej
stosuje się: opis słowny lub sieci działań (schematy blokowe).
Symbole graficzne do budowy sieci działań
Przykład:
Koniec
Początek
Oznaczenie początku, końca sieci działań
Aączniki dzielące sieć działań na fragmenty
5 5
Opis realizowanej w algorytmie
Realizacja operacji
czynności
Tak Nie
Rozgałęzienie - przejście do części
Warunek
prawdziwy ?
algorytmu wynikającej ze spełnienia warunku
Odpowiednio: wczytanie lub wydrukowanie
czytaj a, b, c pisz a, b, c
wartości: a, b, c
Program w C/C++
7
STRUKTURA PROGRAMU
# include
dołączanie plików nagłówkowych bibliotek
.....
using namespace std; udostępnienie nazw ze standardowych bibliotek
int main ( )
{
definicje, deklaracje funkcja main (główna) - musi być w programie
i instrukcje
return 0;
}
..... inne funkcje - niekonieczne
Przykłady programów
8
2) Wydrukować większą wartość spośród dwóch wczytanych:
1) Najprostszy program:
# include // dołączamy bibliotekę wejścia-wyjścia
int main ( )
using namespace std;
{
int main ( )
{
return 0;
double x, y; // definicje zmiennych
}
cin >> x >> y; // wczytywanie zmiennych
if (x>y) // jeśli x>y
To samo w innej konwencji
cout << x << endl; // wydrukuj x
zapisu nawiasów klamrowych:
else // w przeciwnym razie
int main ( ) {
cout << y << endl; // wydrukuj y
return 0;
return 0;
}
}
3) Wczytać promień koła, a następnie obliczyć i wydrukować jego obwód i pole:
#include
using namespace std;
int main ( ) {
const double pi=3.14159; // definicja stałej
double r, obwod, pole; // definicje zmiennych
cout << "Podaj promien kola" << endl; // drukowanie napisu zapraszającego do pisania
cin >> r; // wczytywanie wartości napisanej przez użytkownika
obwod = 2*pi*r; // obliczenia
pole = pi*r*r; // obliczenia
cout << "Obwod = " << obwod << " Pole = " << pole << endl; // drukowanie wyników
return 0;
}
Środowisko programowania
9
Na zajęciach laboratoryjnych obowiązuje:
środowisko programowania Qt Creator (wersja 5.0.2) -
wieloplatformowe, bezpłatne, typu open source, z kompilatorem
MinGW4.7, do ściągnięcia ze strony:
http://download.qt-project.org/archive/qt/5.0/5.0.2/qt-windows-
opensource-5.0.2-mingw47_32-x86-offline.exe
Zmiana wersji językowej: Narzędzia>Opcje>Środowisko>Język
Tworzymy tylko aplikacje konsolowe:
Sesje i projekty > Utwórz projekt > Projekt nieużywający Qt > Zwykły projekt C++
Tymczasowo wprowadzenie do obsługi Qt Creator jest pod adresem:
https://iair.mchtr.pw.edu.pl/bputz/ZAP2013
10
Szkielety aplikacji konsolowych w Qt Creator
Szkielet nowego programu po wykonaniu
Utwórz projekt > Projekt nieużywający Qt > Zwykły projekt C++
Tu dołączamy ew. inne
biblioteki
Tę linię możemy usunąć
A tu wpisujemy własne
definicje i instrukcje
Okno wynikowe - po wykonaniu Uruchom : Ctrt-R albo
Wynik działania programu
(Naci w polskiej wersji
językowej skrót od:
Naciśnij Enter, aby
zamknąć to okno)
11
Zmienne, ich typy, deklaracje i definicje
" Zmienną nazywa się daną mogącą przyjmować różne wartości.
" Każda zmienna występująca w programie ma swoją nazwę i przyjmuje
wartości z określonego zbioru ( zdefiniowanego przez typ zmiennej )
Najprostsze typy zmiennych:
" całkowite (int) 10 -243 +78
" rzeczywiste (double) 1.5 3.14 -2450.138
" znakowe (char) 'a' 'A' '?'
" napisowe (string) "Wcisnij jakis klawisz" "Napisz swoje imie"
Nazwa zmiennej
Dowolny ciąg liter i cyfr zaczynający się od litery. Znak podkreślenia też jest
literą. Małe i duże litery są rozróżniane.
Definicja zmiennej
Informuje o typie zmiennej i przydziela na nią pamięć.
Wszystkie zmienne występujące w programie muszą być zdefiniowane przed
ich pierwszym użyciem.
12
Definiowanie zmiennych
Definicje zmiennych
" Najpierw podaje się typ, a potem wymienia nazwy wszystkich zmiennych tego
typu.
" Zmienne tego samego typu można zgrupować w listę, oddzielając je
przecinkami.
Definicja zmiennych
typ zmienna1, zmienna2, ....;
Zmienne mogą być definiowane w dowolnym miejscu, jak tylko zajdzie potrzeba
ich wykorzystania.
Definicja zmiennej może być nawet wpleciona w instrukcje, np. połączona z
instrukcją przypisania wartości początkowej (to jest zalecane - przykłady dalej).
Przykład definicji zmiennych prostych :
zalecany styl
int i,j,k;
nazwy zmiennych zaczynać z małej litery
double x1,x2,y1,y2 ;
char znak_wczytany, znakWczytany;
string nazwa_pliku, nazwaPliku, fileName;
Przykładowy zalecany styl programowania:
styl1 styl2
http://geosoft.no/development/cppstyle.html
Definiowanie stałych
13
STAAE definiujemy, jeśli chcemy je nazwać i używać ich nazw w programie.
Definicja stałych
const typ nazwa = wyrażenie;
Definicja stałej musi zawierać jej inicjalizację, bo stałych nie można już
potem zmieniać.
zalecany styl
Przykłady definicji stałych:
nazwy stałych - tylko wielkie litery i znaki _
const int N = 5;
const int K = 2*(N+1);
const double XMIN = 0.001;
const char ESC = ' \33'; // znak zapisany za pomocą kodu o tym będzie w wykładzie 3
const string PYTANIE_KONCOWE = "Czy wykonac ponownie - t/n";
zalecany styl
Należy definiować jako stałe wszystkie liczby w programie różne od 0 i 1
14
Wyrażenia
Wyrażenia - zapis tworzony z wykorzystaniem stałych, zmiennych, funkcji i
łączących je operatorów i nawiasów ( okrągłych )
OPERATORY ARYTMETYCZNE
+ - * / %
dodawanie odejmowanie mnożenie dzielenie reszta z dzielenia (modulo)
Resztę z dzielenia można wyznaczyć tylko dla argumentów całkowitych:
5%2 czyli 1 (reszta z dzielenia 5 przez 2=1) 6%3 czyli 0
OPERATORY RELACJI
> >= (większy równy) < <= == (równy) != (nierówny)
OPERATORY LOGICZNE
|| (suma logiczna) && (iloczyn logiczny) ! (negacja)
15
Konwersja typów
Dzielenie można wykonać dla różnych typów argumentów. W
razie potrzeby kompilator dokonuje niejawnej konwersji typów,
np. zamienia znak na jego kod ASCII.
Ale: dzielenie dwóch liczb całkowitych daje wynik całkowity (!!)
powstały przez obcięcie części ułamkowej wyniku dzielenia:
8/3 = 2 8.0 /3 = 2.6667
-8/3 = -2 -8.0/3 = -2.6667
Operatory rzutowania postaci:
typ (nazwa zmiennej)
lub: (typ) nazwa zmiennej
służą do jawnej konwersji typów, np. double(x) zamienia dowolny typ
zmiennej x na typ double. To samo wykona się dla (double)x .
Dzięki temu np. możemy policzyć dokładnie iloraz x/y w przypadku,
gdy x i y są typu int, pisząc: double(x)/y albo (double)x/y
ale uwaga: nie wolno napisać tak: double(x/y), to niczego nie
zmienia!
16
Wyrażenia - priorytet operatorów
PRIORYTET OPERATORÓW - wewnątrz jednej pary nawiasów okrągłych
1. ! (negacja)
2. * / %
3. + -
4. operatory relacji nierównościowych: > >= < <=
5. operatory relacji równy nierówny: == !=
5. && (iloczyn logiczny)
UWAGA: W sytuacjach wątpliwych
6. || (suma logiczna)
najpewniejszym sposobem jest
Przykłady:
używanie nawiasów okrągłych.
- b
a
- b
-b / 2*a czyli -b / (2*a)
2
-b / 2 / a
2a
x >= a && x <= b // x leży w przedziale
x < a || x > b // x nie leży w przedziale
// nawiasy powyżej są niekonieczne, bo operatory relacji są silniejsze niż operatory logiczne && i ||
zn >= 'a' && zn <= 'z' || zn >= 'A' && zn <= 'Z // można dodać nawiasy, ale nie są konieczne:
albo:
(zn >= 'a' && zn <= 'z') || (zn >= 'A' && zn <= 'Z )
// zn jest małą lub dużą literą
(zn < 'a' || zn > 'z' ) && (zn < 'A' || zn > 'Z ) // tu nawiasy są konieczne, bo && jest silniejsze niż ||
// zn nie jest małą i nie jest też dużą literą
17
Wybrane standardowe funkcje matematyczne
M_PI - stała p
Wymagają dołączenia biblioteki cmath: #include
M_E - stała e
Wyniki działania wszystkich funkcji są typu double
Opis
Nazwa Argumenty
arcus cosinus z X (wynik w radianach)
acos X
arcus sinus z X (wynik w radianach)
asin X
arcus tangens z X (wynik w radianach)
atan X
kąt (od -pi do pi) , którego tangens = Y/X
atan2 Y, X
wartość X zaokrąglona w górę, czyli do najbliższej liczby
całkowitej nie mniejszej niż wartość X
ceil (-4.3) = -4.0
ceil X
cosinus kąta X
cos X - wartość kąta w radianach
wartość e podniesiona do potęgi X
exp X
wartość bezwzględna liczby X
fabs X
logarytm naturalny z X
log X - wartość dodatnia
logarytm o podstawie 10 z X
log10 X - wartość dodatnia
X podniesione do potęgi Y
pow (27, 1.0/3)=3.0
pow X - podstawa, Y - wykładnik
wartość X zaokrąglona w dół, czyli do najbliższej liczby
całkowitej nie większej niż X
floor X floor (-4.3) = -5.0
sinus kąta X
sin X - wartość kąta w radianach
pierwiastek kwadratowy z X
sqrt X - wartość nieujemna
tangens kąta X
tan X - wartość kąta w radianach
UWAGA: Funkcje matematyczne mogą też pochodzić z innych bibliotek, np.
w cstdlib mamy m. in. funkcję abs (dla argumentu całkowitego) oraz div
(dzielenie całkowite).
18
Instrukcje
INSTRUKCJE - polecenia dla komputera - zmuszają go do
przetwarzania danych podczas procesu obliczeniowego.
UWAGA: w C++ każda instrukcja kończy się średnikiem.
Na początek:
" instrukcja pisania
" instrukcja czytania
" instrukcja przypisania
" instrukcja złożona
" instrukcja warunkowa
19
Instrukcja pisania (drukowania)
Instrukcja drukowania wyników
Służy do wyprowadzania wyników (wartości wyrażeń) na standardowe
urządzenia wyjściowe komputera (domyślnie na konsolę, czyli monitor ).
Wymaga dołączenia pliku nagłówkowego biblioteki iostream.
#include
.......
cout << wyrażenie1 << wyrażenie2 ...;
W rzeczywistości cout jest obiektem tzw. klas strumieni wejścia-wyjścia, zaś
<< operatorem, ale dla uproszczenia będziemy mówili o instrukcji drukowania.
Funkcja endl oznacza przejście do nowej linii i jest
równoważna wstawieniu \n do napisu:
cout << " napisz swoje imie " << endl;
cout << " napisz swoje imie \n" ;
Np.: cout <<34 < cout << endl;
cout << " Wynik = " << x+2*y <20
Instrukcja czytania
Instrukcja czytania danych
Służy do wprowadzania danych (nadawania wartości zmiennym) ze
standardowego urządzenia wejściowego komputera (domyślnie z konsoli, czyli
klawiatury ).
#include
// .....
cin >> zmienna1 >>zmienna2 ...;
// UWAGA:
// Tu muszą być pojedyncze zmienne, a nie całe wyrażenia !
Np.:
cin >> x; cin >> y; równoważne
cin >> x >> y;
cin >> znak;
21
Instrukcja przypisania
INSTRUKCJA PRZYPISANIA ( podstawienia )
Służy do nadawania zmiennej nowej wartości:
ZMIENNA = WYRAŻENIE ; // ta zmienna powinna być wcześniej zdefiniowana
lub:
typ ZMIENNA = WYRAŻENIE ; // a tu definiujemy zmienną i nadajemy wartość początkową
Typ zmiennej i wyrażenia nie muszą się zgadzać. Np. w przypadku
podstawienia wartości rzeczywistej pod zmienną całkowitą następuje obcięcie
części ułamkowej - jest to niejawna konwersja typów (niezalecane!)
int k = -10.6; // k będzie równe -10
zalecany styl
jawna konwersja typów
int k = int (-10.6); // k będzie równe -10
Przykłady instrukcji przypisania:
k = 3;
x = k-4.5;
k = k+1; // zwiększ wartość k o 1
double y = 2.5*(x+3)/2;
z = a ;
imie = "Witold ";
22
Instrukcja złożona
INSTRUKCJA ZAOŻONA (inaczej: blokowa, grupująca)
Tworzy z ciągu instrukcji jedną. Można używać jej wszędzie tam,
gdzie wolno zastosować tylko jedną instrukcję.
{
ciąg instrukcji
}
" ciąg instrukcji - instrukcje zakończone średnikami, wykonywane
w kolejności zapisania.
Przykład instrukcji złożonej:
{
suma=suma+x;
ile=ile+1;
}
UWAGA: Instrukcja złożona kończy się klamrą, dodatkowy
średnik za klamrą nie jest konieczny (ale nie jest błędem).
23
Instrukcje warunkowe - wprowadzenie
Instrukcja if
Instrukcja if-else
if (serce)
na_niebiesko ;
else
if (serce)
na_czerwono ;
na_niebiesko ;
if (a<0)
cout << ujemna ;
if (a<0)
else
cout << ujemna ;
cout << nieujemna ;
24
Instrukcja warunkowa if
Instrukcja warunkowa
Uzależnia wykonanie instrukcji w programie od spełnienia lub
niespełnienia warunku.
if (warunek)
Przykład:
instrukcja
if (liczba>0)
zalecany styl
suma = suma+liczba;
Uwaga: tu musi być jedna (!) instrukcja; w
szczególności może to być instrukcja złożona:
if (warunek) {
Przykład:
ciąg instrukcji
if (a>0) {
}
s = s+a;
zalecany styl
k = k+1;
}
25
Instrukcja warunkowa if-else
Przykład:
if (warunek)
if (liczba>0)
instrukcja1
s_dod = s_dod+liczba;
else
else
instrukcja2
s_niedod = s_niedod+liczba;
zalecany styl
Uwaga: Każda z powyższych instrukcji musi być
jedną (!) instrukcją; w szczególności może to
być instrukcja złożona:
Przykład:
if (a>0) {
if (warunek) {
sd = sd+a;
ciag_instrukcji_1
kd = kd+1;
}
}
else {
else {
ciag_instrukcji_2
snd = snd+a;
}
knd = knd+1;
zalecany styl
}
26
Instrukcje warunkowe zagnieżdżone (1)
if (...)... else if (...)...
if (serce)
na_niebiesko ;
else
if (trojkat)
na_czerowno ;
if (a<0)
cout << ujemna ;
else
if (a>0)
cout << dodatnia ;
27
Instrukcje warunkowe zagnieżdżone (2)
if (a<0)
cout << ujemna ;
else
if (a>0)
cout << dodatnia ;
else
cout << zero ;
if (a<0)
cout << ujemna ;
if (a>0)
Błąd logiczny !!!
cout << dodatnia ;
else
cout << zero ;
28
Instrukcje warunkowe zagnieżdżone (3)
Przykłady konstrukcji instrukcji warunkowych zagnieżdżonych:
if (w1) if (w1)
i1 if (w2)
else i1
if (w2) else
i2 i2;
else
i3;
Obowiązuje zasada:
else przyporządkowane jest najbliższemu wstecz if
W sytuacjach wymagających zmiany tej zasady konieczne jest ujęcie
instrukcji if w klamry {.....} :
if (w1)
{ if (w2)
i1 }
else
i2;
UWAGA: Również w sytuacjach wątpliwych najpewniejszym sposobem jest
tworzenie instrukcji złożonych za pomocą klamer.
Wyszukiwarka
Podobne podstrony:
wyklad 3 zap i,! 10 2013
wyklad 2 zap i, 10 2013
wyklad 4 zap i,( 10 2013 poprawiony
wyklad 7 zap i, 11 2013
wyklad 8 zap i, 11 2013
Wykład HGOL 10 2013
wyklad zap i, 12 2013
wyklad zap i, 12 2013
wyklad 5 zap i, 4 11 2013
wyklad 9 zap i, 2 12 2013
wyklad 6 zap i, 11 2013
30 10 2013 POCZĄTKI PAŃSTWOWOŚCI EGIPSKIEJ wykład
23 10 2013 KSZTAŁTOWANIE PAŃSTWA PRZESTRZENNEGO NA TERENIE MIĘDZYRZECZA wykład
wyklad 10 2013
Mikroekonomia wykład 10 2013
Podstawy prawoznawstwa 22 10 2013 Wykład 3
więcej podobnych podstron