2011 mitp1 02id 27495


Metodyki i technki programowania 1 2011
Metodyki i techniki
Metodyki i techniki
programowania 1
programowania 1
" Kierunek: elektronika i telekomunikacja
" Kierunek: elektronika i telekomunikacja
" Studia: I stopnia
" Studia: I stopnia
Programowanie
Programowanie
C++
C++
B. Butryło 1
Metodyki i technki programowania 1 2011
Języki programowania 3
3
Klasyfikacja
Klasyfikacja języków
języków
maszynowe
maszynowe
asemblery
asemblery
niskiego poziomu
niskiego poziomu
makroasemblery
makroasemblery
potokowe
interpretowane
potokowe
interpretowane
proceduralne
kompilowane
proceduralne
kompilowane
wysokiego poziomu
wysokiego poziomu
Języki
blokowo-strukturalne
Języki
blokowo-strukturalne
obiektowe
obiektowe
do przetwarzania danych (Cobol, PL/1)
do przetwarzania danych (Cobol, PL/1)
do symulacji obiektów (Simula, GPSS, CSL)
do symulacji obiektów (Simula, GPSS, CSL)
specjalistyczne
specjalistyczne
konwersacyjne (Forcon, Jean)
konwersacyjne (Forcon, Jean)
inne
inne
C ... C++ ... Java 4
4
Ewolucja
Ewolucja języków: porównanie C i C++
języków: porównanie C i C++
C C++
C C++
" Programowanie proceduralne, imperatywne.
" Programowanie proceduralne, imperatywne.
" Instrukcje strukturalne: podejmowanie decyzji (if), wybór jednego z wielu przypadków (switch),
" Instrukcje strukturalne: podejmowanie decyzji (if), wybór jednego z wielu przypadków (switch),
instrukcje iteracyjne (for, while, do ... while).
instrukcje iteracyjne (for, while, do ... while).
" Zbiór typów podstawowych: całkowitoliczbowe, zmiennopozycyjne, znakowe.
" Zbiór typów podstawowych: całkowitoliczbowe, zmiennopozycyjne, znakowe.
" Mo\liwość tworzenia i wykorzystania typów pochodnych: tablice, struktury, unie.
" Mo\liwość tworzenia i wykorzystania typów pochodnych: tablice, struktury, unie.
" Identyczne: zestaw podstawowych słów kluczowych, kolejność operatorów,
" Identyczne: zestaw podstawowych słów kluczowych, kolejność operatorów,
operowanie na wskaznikach, ...
operowanie na wskaznikach, ...
Programowanie Programowanie proceduralne i
Programowanie proceduralne Programowanie proceduralne i
proceduralne
programowanie obiektowo
programowanie obiektowo
zorientowane
zorientowane
" " Grupowanie instrukcji (funkcje).
Grupowanie instrukcji (funkcje). " " Program jako zbiór obiektów.
Program jako zbiór obiektów.
" " Program jako zbiór funkcji.
Program jako zbiór funkcji. " " Obiekt składa się z:
Obiekt składa się z:
" " Funkcja: zbiór instrukcji wykonujących operacje
Funkcja: zbiór instrukcji wykonujących operacje " " atrybutów/dane/pola - zestawów danych,
atrybutów/dane/pola - zestawów danych,
na lokalnym i/lub ogólnym zestawie danych.
na lokalnym i/lub ogólnym zestawie danych.
" " usług/metod jednej lub kilku funkcji,
usług/metod jednej lub kilku funkcji,
" " Funkcje komunikują się między sobą przez
Funkcje komunikują się między sobą przez które mogą przetwarzać atrybuty.
które mogą przetwarzać atrybuty.
przekazywanie danych (argumentów).
przekazywanie danych (argumentów).
" " Struktura klas ma postać hierarchiczną.
Struktura klas ma postać hierarchiczną.
" " Obiekty komunikują się przez metody/
Obiekty komunikują się przez metody/
komunikaty.
komunikaty.
B. Butryło 2
Metodyki i technki programowania 1 2011
C ... C++ ... Java 5
5
Ewolucja
Ewolucja języków
języków
C++ Java
C++ Java
" Język ogólnego stosowania.
" Język ogólnego stosowania.
" Programowanie proceduralne lub
" Programowanie obiektowe.
programowanie obiektowo-zorientowane.
" Język kompilowany.
" Język kompilowano-interpretowany.
" Język niezale\ny od architektury
" Język niezale\ny od architektury
(wysokiego poziomu).
(wysokiego poziomu).
" Zmienna / zró\nicowana reprezentacja
" Stała reprezentacja danych.
danych.
Wbudowany Unicode.
" Język o słabo określonych typach danych,
" Ścisła kontrola typów zmiennych i ich
ale o ścisłej kontroli tych typów.
inicjowania przed u\yciem.
" Brak automatycznego zarządzania
" Bezpieczeństwo (wirtualna maszyna,
pamięcią.
automatyczna obsługa pamięci).
" Programowanie z u\yciem wątków.
" Wbudowane narzędzia pracy w sieci.
" Przenaszalność kodów zródłowych.
" Przenaszalność kodu wynikowego (!?).
" Język programowania systemowego (np.
" Język internetu.
Unix, interfejs MS Windows).
" Wydajność (ok. 50  100% C++).
Ogólna charakterystyka C++, Java 6
6
C/C++:
C/C++: kompilowany
kompilowany
Plik Plik Plik
zródłowy 1 zródłowy 2 zródłowy N
*.C *.C *.C
*.CPP *.CPP *.CPP Pliki Pliki Pliki
*.CXX *.CXX *.CXX
nagłówkowe nagłówkowe nagłówkowe
*.obj - niewykonywalny plik,
*.obj - niewykonywalny plik,
zawierający instrukcje
zawierający instrukcje
maszynowe specyficzne dla danej
maszynowe specyficzne dla danej
Kompilator (compiler)
Kompilator (compiler)
Kompilator (compiler)
platformy sprzętowej (odwołania
platformy sprzętowej (odwołania
do funkcji CPU) i OS (np.
do funkcji CPU) i OS (np.
odwołania do API). Powstaje kod
odwołania do API). Powstaje kod
Plik Plik Plik
maszynowy niezale\ny od języka
maszynowy niezale\ny od języka
obiektowy obiektowy obiektowy
programowania ale zawierający
programowania ale zawierający
1 2 N
odwołania do zastosowanego
odwołania do zastosowanego
*.OBJ *.OBJ *.OBJ
środowiska.
środowiska.
Standardowa biblioteka A
Standardowa biblioteka B
Konsolidator tworzy wykonywalny
Konsolidator tworzy wykonywalny
Konsolidator (linker)
Konsolidator (linker)
Konsolidator (linker)
Standardowa biblioteka C
plik (do uruchomienia), przez
plik (do uruchomienia), przez
połączenie plików *.obj. Pliki *.obj
połączenie plików *.obj. Pliki *.obj
...
mogą być z ró\nych środowisk.
mogą być z ró\nych środowisk.
Plik wykonywalny, np.:
Plik wykonywalny, np.:
Powstaje kod maszynowy zale\ny
Powstaje kod maszynowy zale\ny
*.EXE *.*
*.EXE *.*
od platformy.
od platformy.
B. Butryło 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
C
C
+
+
C
C
C
C
C
C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
C
C
+
+
C
C
C
C
C
C
Metodyki i technki programowania 1 2011
Ogólna charakterystyka C++, Java 7
7
Java:
Java: kompilowany+interpretowany
kompilowany+interpretowany
public class test
{
Plik Plik double alfa, beta;
...
zródłowy 1 zródłowy 2
metoda_test()
{
alfa = 3.14;
*.java *.java
beta = 1;
...
bytecode, b-code: kod binarny
bytecode, b-code: kod binarny
dla wirtualnej maszyny javy
dla wirtualnej maszyny javy
javac (kompilator)
javac (kompilator)
javac (kompilator) (JVM). Mo\liwe tworzenie b-kody
(JVM). Mo\liwe tworzenie b-kody
z innych języków i uruchomienie
z innych języków i uruchomienie
przez JVM.
przez JVM.
Kod binarny interpretowany W przypadku Javy realizowane
Kod binarny interpretowany W przypadku Javy realizowane
pliki mają zwykle rozszerzenia
pliki mają zwykle rozszerzenia
*.class
*.class
*.class lub *.jar
*.class lub *.jar
Super-
PC
komp.
Mac
Java Java Java
Virtual Virtual Virtual
Machine Machine Machine
Słowa kluczowe
Słowa kluczowe
w
w
C++
C++
B. Butryło 4
Metodyki i technki programowania 1 2011
C ... C++ ... Java 9
9
słowa kluczowe
słowa kluczowe
=
=
Słowa
Słowa zarezerwowane nazwy
zarezerwowane
nazwy
zabronione
zabronione
C: proceduralnie C++: proceduralnie / OOP
C: proceduralnie C++: proceduralnie / OOP
asm float short asm float short
auto for signed auto for signed
bool friend sizeof bool friend sizeof
break goto static break goto static
case if static_cast case if static_cast
catch inline struct catch inline struct
char int switch char int switch
class long template class long template
const mutable this const mutable this
const_cast namespace throw const_cast namespace throw
continue new true continue new true
default operator try default operator try
delete private typedef delete private typedef
do protected typeid do protected typeid
double public typename double public typename
dynamic_cast register union dynamic_cast register union
reinterpret_cast
else reinterpret_cast unsigned else unsigned
return
enum return using enum using
explicit virtual explicit virtual
extern void extern void
false volatile false volatile
wchar_t wchar_t
while while
C ... C++ ... Java 10
10
Słowa
Słowa zarezerwowane
zarezerwowane
C++: proceduralnie / OOP Java: obiektowo
C++: proceduralnie / OOP Java: obiektowo
asm float short abstract float short
auto for signed boolean for static
bool friend sizeof break goto(*) super
break goto static byte if switch
case if static_cast case implements synchronized
catch inline struct catch import this
char int switch char instanceof throw
class long template class int throws
const mutable this const(*) interface transient(*)
const_cast namespace throw continue long try
continue new true default native void
default operator try do new volatile
delete private typedef double package while
do protected typeid else private
double public typename extends protected
dynamic_cast register union final public
reinterpret_cast
else unsigned finally return
return
enum using
explicit virtual
extern void
false volatile
Nie są słowami kluczowymi, ale są zastrze\one:
wchar_t
null, true, false
while
B. Butryło 5
Metodyki i technki programowania 1 2011
C ... C++ ... Java 11
11
słowa kluczowe
słowa kluczowe
=
=
Słowa
Słowa zarezerwowane nazwy
zarezerwowane
nazwy
zabronione
zabronione
C++: proceduralnie / OOP Java: obiektowo
C++: proceduralnie / OOP Java: obiektowo
asm float short abstract float short
auto for signed boolean for static
bool friend sizeof break goto(*) super
break goto static byte if switch
case if static_cast case implements synchronized
catch inline struct catch import this
char int switch char instanceof throw
class long template class int throws
const mutable this const(*) interface transient(*)
const_cast namespace throw continue long try
continue new true default native void
default operator try do new volatile
delete private typedef double package while
do protected typeid else private
double public typename extends protected
dynamic_cast register union final public
reinterpret_cast
else unsigned finally return
return
enum using
explicit virtual
extern void
false volatile
Nie są słowami kluczowymi, ale są zastrze\one:
wchar_t
null, true, false
while
Struktura programu w C++
Struktura programu w C++
(programowanie
(programowanie
blokowo - strukturalne)
blokowo - strukturalne)
B. Butryło 6
Metodyki i technki programowania 1 2011
Paradygmaty 13
13
Programowanie
Programowanie blokowo-strukturalne
blokowo-strukturalne
żGrupowanie instrukcji.
żPodejmowanie decyzji.
{{
{{
żWybór jednego z wielu mo\liwych przypadków.
}}
żPowtarzanie rozkazów ze sprawdzeniem
}}
warunku na początku lub końcu.
żWykorzystanie funkcji.
żBudowa programu z wielu plików zródłowych.
żMo\liwość tworzenia i wykorzystania typów
pochodnych.
Struktura programu w C++ (programowanie strukturalne) 14
14
Najprostszy
Najprostszy program w C++
program w C++
void main( void )
{
funkcja główna (definicja): main
}
B. Butryło 7
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 15
15
Program
Program z przetwarzaniem (1)
z przetwarzaniem (1)
void main( void )
{
funkcja główna (definicja): main
int a;
int b = 20;
a = 30;
a=a+b;
}
Struktura programu w C++ (programowanie strukturalne) 16
16
Program
Program z przetwarzaniem (2)
z przetwarzaniem (2)
deklaracja plików nagłówkowych
#include
funkcja główna (definicja): main
void main( void )
{
Im
double radiany, stopnie;
int a = 30; // re
int b = 20; // im
b
radiany = atan2( b; a );
stopnie = radiany * 180 / 3.14;
Re
}
a
Komentarze:
Komentarze: radiany
stopnie
/* komentarz
/* komentarz
wieloliniowy
wieloliniowy*/
*/
// komentarz w 1 linii
// komentarz w 1 linii
B. Butryło 8
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 17
17
Program
Program z przetwarzaniem (3) i komunikacją
z przetwarzaniem (3) i komunikacją
deklaracja plików nagłówkowych
#include
#include
funkcja główna (definicja): main
using namespace std;
Standardowe
Standardowe
void main( void )
funkcje przed
funkcje przed
{
u\yciem musza być
u\yciem musza być
double radiany, stopnie;
zdefiniowane
zdefiniowane
int a = 30; // re
przez u\ycie
przez u\ycie
int b = 20; // im
plików
plików
nagłówkowych.
nagłówkowych.
radiany = atan2( b; a );
stopnie = radiany * 180 / 3.14;
U\ycie zmiennych
cout << "Wynik obliczen: " << endl; U\ycie zmiennych
cout << stopnie << endl;
środowiskowych, nazw typów
środowiskowych, nazw typów
}
pochodnych i zło\onych
pochodnych i zło\onych
wymaga wskazania jaką
wymaga wskazania jaką
przestrzeń nazw u\ytkujemy.
przestrzeń nazw u\ytkujemy.
Mo\na wskazać raz:
Mo\na wskazać raz:
using namespace std;
using namespace std;
Struktura programu w C++ (programowanie strukturalne) 18
18
Program
Program z własnymi funkcjami (1)
z własnymi funkcjami (1)
#include deklaracja plików nagłówkowych
#include
funkcja pomocnicza (definicja):
using namespace std; licz_stopnie
/*******************/
double licz_stopnie( double wart_radian)
{
funkcja główna (definicja): main
stopnie = wart_radiany * 180 / 3.14;
return stopnie;
} Własne funkcje nale\y
definiować przed ich
/*******************/
u\yciem.
void main( void )
Sposób najprostszy ale
{
utrudnia analizę programu.
double radiany, stopnie;
int a = 30; // re
int b = 20; // im
radiany = atan2( b; a );
stopnie = licz_stopnie( radiany );
cout << "Wynik obliczen: " << stopnie << endl;
}
B. Butryło 9
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 19
19
Program
Program z własnymi funkcjami (2)
z własnymi funkcjami (2)
#include deklaracja plików nagłówkowych
#include
funkcja pomocnicza (deklaracja):
using namespace std;
licz_stopnie
double licz_stopnie( double); //deklaracja
/*******************/
funkcja główna (definicja): main
void main( void )
{
double radiany, stopnie;
funkcja pomocnicza (definicja):
int a = 30; // re
licz_stopnie
int b = 20; // im
radiany = atan2( b; a );
stopnie = licz_stopnie( radiany );
cout << "Wynik obliczen: " << endl;
cout << stopnie << endl;
Własne funkcje
}
mo\na
/*******************/ zadeklarować a
double licz_stopnie( double wart_radian)
potem dopiero
{
definiować.
stopnie = wart_radiany * 180 / 3.14;
return stopnie;
}
Struktura programu w C++ (programowanie strukturalne) 20
20
Program
Program z własnymi funkcjami (3)
z własnymi funkcjami (3)
Zalecane
tworzenie
deklaracja plików
deklaracja plików
programów wielo-
nagłówkowych
nagłówkowych
modułowych,
funkcja główna
funkcja pomocnicza zło\onych z wielu
(definicja): (definicja):
plików.
licz_stopnie
main
#include
#include
Plik: moje_funkcje
#include "moje_funkcje"
#include
using namespace std;
#include
/*******************/
using namespace std;
void main( void )
{
double licz_stopnie( double);
double radiany, stopnie;
int a = 30; // re
/*******************/
int b = 20; // im
double licz_stopnie( double
wart_radian)
radiany = atan2( b; a );
{
stopnie = licz_stopnie( radiany );
stopnie = wart_radiany * 180 / 3.14;
cout << "Wynik obliczen: " << endl;
return stopnie;
cout << stopnie << endl;
}
}
B. Butryło 10
Metodyki i technki programowania 1 2011
Paradygmaty 21
21
C++:
C++: struktura pliku zródłowego
struktura pliku zródłowego
pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji
deklaracja i definicja funkcji A
deklaracja i definicja funkcji A
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
Paradygmaty 22
22
C++:
C++: struktura pliku zródłowego
struktura pliku zródłowego
pliki nagłówkowe dołączane w trakcie kompilacji pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji pliki nagłówkowe dołączane w trakcie kompilacji
stałe deklarowane w programie stałe deklarowane w programie
stałe deklarowane w programie stałe deklarowane w programie
zmienne globalne dostępne w programie zmienne globalne dostępne w programie
zmienne globalne dostępne w programie zmienne globalne dostępne w programie
deklaracja funkcji A
deklaracja funkcji A
deklaracja i definicja funkcji E
deklaracja i definicja funkcji E
deklaracja i definicja funkcji D
deklaracja i definicja funkcji D
deklaracja i definicja funkcji D
deklaracja i definicja funkcji D
deklaracja funkcji E
deklaracja funkcji E
deklaracja i definicja funkcji A
deklaracja i definicja funkcji A
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
definicja funkcji E
definicja funkcji E
definicja funkcji A
definicja funkcji A
B. Butryło 11
Metodyki i technki programowania 1 2011
Paradygmaty 23
23
C++:
C++: zbiór plików tworzących kod zródłowy
zbiór plików tworzących kod zródłowy
pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji
pliki nagłówkowe dołączane w trakcie kompilacji
stałe deklarowane w programie
stałe deklarowane w programie
stałe deklarowane w programie
stałe deklarowane w programie
zmienne globalne dostępne w programie
zmienne globalne dostępne w programie
deklaracja funkcji A
deklaracja funkcji A
deklaracja i definicja funkcji main
deklaracja i definicja funkcji main
deklaracja i definicja funkcji D
deklaracja i definicja funkcji D
deklaracja funkcji E
deklaracja funkcji E
deklaracja i definicja funkcji B
deklaracja i definicja funkcji B
deklaracja i definicja funkcji A1
deklaracja i definicja funkcji A1
definicja funkcji E
definicja funkcji E
deklaracja i definicja funkcji A2
deklaracja i definicja funkcji A2
definicja funkcji A
definicja funkcji A
deklaracja i definicja funkcji A3
deklaracja i definicja funkcji A3
deklaracja i definicja funkcji A4
deklaracja i definicja funkcji A4
Paradygmaty 24
24
C++:
C++: struktura programu
struktura programu
Enter
Program
Funkcja A
Funkcja E
Funkcja E
Wyra\enia,
zmienne
instrukcje
wykonywanie wyra\enia
Funkcja main
Funkcja main
operacji na
instrukcje
zmiennych
zmienne
wyra\enia
Funkcja S1
Funkcja S1
instrukcje
zmienne
wyra\enia
Funkcja D
Funkcja D
instrukcje
zmienne
Funkcja B wyra\enia
Funkcja B
instrukcje
zmienne
wyra\enia Funkcja S2
Funkcja S2
instrukcje
zmienne
wyra\enia
instrukcje
B. Butryło 12
Metodyki i technki programowania 1 2011
Paradygmaty 25
25
C:
C: struktura pliku zródłowego *.C
struktura pliku zródłowego *.C
#include
#include
#include
#include " Średnik.
Enter " Średnik.
float funkcja( float w_x )
{ " Instrukcja
" Instrukcja grupująca.
grupująca.
float w_y;
w_y = 3 * w_x * w_x * w_x + 2 * w_x * w_x - 40 * w_x + 10;
return( w_y );
" Komentarz.
" Komentarz.
}
int main (void)
" Wartość
" Wartość logiczna (?!).
logiczna (?!).
{
int i, j;
float a, f_a, b, f_b, x, y, epsilon;
printf( "\na = ");
scanf( "%f", &a);
printf( "\nb = ");
scanf( "%f", &b);
epsilon = 1e-5;
f_a = funkcja( a );
f_b = funkcja( b );
if ( f_a * f_b < 0 )
{
i = 0;
x = a;
y = f_a;
while ( fabs( y ) > epsilon )
{
x = a - f_a * ( b - a ) / ( f_b - f_a );
y = funkcja( x );
if ( f_a * y > 0 ) f_a = y;
else f_b = y;
i = i + 1;
}
printf( "Wynik x = %f, y(x) = %f po %d krokach. \n", x, y, i );
}
else
printf( "Nie ma miejsca zerowego w podanym przedziale.\n" );
getch();
}
C++:
C++:
standardowe
standardowe
elementy
elementy
środowiska programowania
środowiska programowania
B. Butryło 13
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 27
27
Pliki
Pliki nagłówkowe (header files)
nagłówkowe (header files)


Dołączanie plików nagłówkowych




#include






>
















#include "nazwa_pliku"








Nale\y unikać
Nale\y unikać

stosowania starych
stosowania starych

nazw plików
nazw plików

nagłówkowych z
nagłówkowych z


języka C.
języka C.


Struktura programu w C++ (programowanie strukturalne) 28
28
Pliki
Pliki nagłówkowe (header files)
nagłówkowe (header files)
...
#include
...
Funkcje trygonometryczne: acos, asin, atan, atan2, cos, sin, tan.
Funkcje hiperboliczne: cosh, sinh, tanh.
Funkcje wykładnicze i logarytmiczne: exp, frexp, ldexp, log, log10, modf.
Funkcje potęgowe: pow, sqrt.
Funkcje zaokrąglenia: ceil, fabs, floor, fmod.
...
#include
...
Klasa complex do reprezentacji i operacji na liczbach zespolonych (Re+jIM).
Funkcje dotyczące liczb zespolonych: abs, arg, conj, imag, norm, polar, real.
Funkcje przecią\one dla liczb zespolonych:
cos, sin.
cosh, sinh.
exp, log.
pow, sqrt.
Operatory przecią\one dla liczb zespolonych:
+ - * / == != += -= *= /=
B. Butryło 14
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 29
29
Pliki
Pliki nagłówkowe (header files)
nagłówkowe (header files)
...
#include
...
Klasy, m.in..: istream, ostream, iostream, ifstream,
ofstream.
Obiekty (standardowe strumienie): cin, cout, cerr, clog.
Funkcje do formatowania, przetwarzania i manipulowania strumieniami, np.:
fixed, scientific,
left, right, fmod,
setw, setprecision,
uppercase, nouppercase,
endl, ends.
...
#include
...
Typy danych właściwe do zapisu czasu, m.in.:
clock_t, time_t, size_t, struct tm.
Funkcje do konwersji: asctime, ctime, gmtime, localtime, strftime.
Funkcje do przetwarzania danych w formatach właściwych dla czasu, np.:
clock, difftime, mktime, time.
C++:
C++:
przestrzeń nazw
przestrzeń nazw
B. Butryło 15
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 31
31
Przestrzeń
Przestrzeń nazw  widoczność, dostęp
nazw  widoczność, dostęp
Deklaracja przestrzeni
Deklaracja przestrzeni
namespace nazwa_przestrzeni
{
nazwy / zmienne / funkcje / klasy
}
Włączenie / aktywacja przestrzeni
Włączenie / aktywacja przestrzeni
using namespace nazwa_przestrzeni;
Program
namespace std namespace moje namespace bibl
namespace std namespace moje namespace bibl
specjalne
standardowe
biblioteki
Struktura programu w C++ (programowanie strukturalne) 32
32
Przestrzeń
Przestrzeń nazw  widoczność, dostęp
nazw  widoczność, dostęp
namespace kal_julianski
#include &
{
int dzien;
using namespace std;
int miesiac;
int rok;
main()
}
{
&
namespace kal_aaaa
using namespace kal_julianski;
{
&
int dzien;
int miesiac;
using namespace kal_aaaa;
int rok;
}
&
}
B. Butryło 16
Metodyki i technki programowania 1 2011
Nowe zagadnienie ... 33
33
Dodatek:
Dodatek:
klasa (!) complex
klasa (!) complex
Klasy standardowe 34
34
Liczby
Liczby zespolone
zespolone
#include
#include
Dostępne
Dostępne operatory
operatory
#include
#include
#include
#include
* /
* /
#include
#include
+ --
+
*= /=
complex cmp_1, cmp_2, *= /=
complex cmp_1, cmp_2,cmp_3;
cmp_3;
double d1, d2, d3; += -=
double d1, d2, d3; += -=
=
=
...
...
>> <<
>> <<
complex jedynka_rzeczyw;
complex jedynka_rzeczyw;
jedynka_rzeczyw = complex( 1.0, 0.0);
jedynka_rzeczyw = complex( 1.0, 0.0);
Dostępne
Dostępne funkcje
funkcje
complex
complex zero_zespolone = complex( 0.0, 0.0);
zero_zespolone = complex( 0.0, 0.0);
complex jedynka_urojona = complex( 0.0, 1.0);
complex jedynka_urojona = complex( 0.0, 1.0);
sqrt pow
sqrt pow
exp log
exp log
complex zespolony_wektor;
complex * zespolony_wektor;
*
sin cos
sin cos
zespolony_wektor = new
zespolony_wektor = new complex dlugosc ];
complex [[ dlugosc ];
sinh cosh
sinh cosh
atan2
cmp_1 = complex( 2.0, 3.0); atan2
cmp_1 = complex( 2.0, 3.0);
cmp_2 = complex( dane1*dane_pi, mnoznik*dane2);
cmp_2 = complex( dane1*dane_pi, mnoznik*dane2);
zespolony_wektor[0] = cmp_1 * cmp_2;
zespolony_wektor[0] = cmp_1 * cmp_2;
d1 = real( zespolony_wektor[0]);
d1 = real( zespolony_wektor[0]);
d2 = imag( zespolony_wektor[0]);
d2 = imag( zespolony_wektor[0]);
cout << real( zespolony_wektor[1]) << endl;
cout << real( zespolony_wektor[1]) << endl;
cout << imag( zespolony_wektor[1]) << endl;
cout << imag( zespolony_wektor[1]) << endl;
cout << sqrt( d1 * d1 + d2 * d2 ) << " " << atan2( d2, d1 ) << endl;
cout << sqrt( d1 * d1 + d2 * d2 ) << " " << atan2( d2, d1 ) << endl;
B. Butryło 17
Metodyki i technki programowania 1 2011
35
35
Funkcje
Funkcje
deklarowanie i definiowanie
deklarowanie i definiowanie
własnych funkcji
własnych funkcji
Funkcje 36
36
C++:
C++: funkcja, definicja funkcji
funkcja, definicja funkcji
typ nazwa deklaracja
nazwa deklaracja
Przykład 1:
( )
wyniku funkcji argumentów
funkcji argumentów
void pusta()
void pusta()
{{
{ }}
wewnętrzna część funkcji:
" deklaracje zmiennych;
" wyra\enia;
Przykład 2:
" przetwarzanie danych;
pusta()
pusta()
{{
}}
}
B. Butryło 18
Metodyki i technki programowania 1 2011
Funkcje 37
37
C++:
C++: funkcja, definicja funkcji
funkcja, definicja funkcji
typ nazwa deklaracja
nazwa deklaracja
( )
wyniku funkcji argumentów Przykład 1:
funkcji argumentów
int jedynka()
int jedynka()
{{
{
int a;
int a;
a= 1;
a= 1;
wewnętrzna część funkcji:
return (a);
return (a);
" deklaracje zmiennych;
}}
" wyra\enia;
" przetwarzanie danych;
Przykład 2:
int jedynka()
int jedynka()
{{
return (1);
return (1);
}}
}
Funkcje 38
38
C++:
C++: funkcja, definicja funkcji
funkcja, definicja funkcji
typ nazwa deklaracja
nazwa deklaracja
Przykład 1:
( )
wyniku funkcji argumentów
funkcji argumentów
float modul_liczby( float a, float b)
float modul_liczby( float a, float b)
{{
float wynik;
float wynik;
{
wynik= sqrt( a*a + b*b);
wynik= sqrt( a*a + b*b);
return (wynik);
return (wynik);
wewnętrzna część funkcji:
}}
" deklaracje zmiennych;
" wyra\enia;
" przetwarzanie danych;
Przykład 2:
float suma( int a, float b)
float suma( int a, float b)
{{
return (b+a);
return (b+a);
}}
}
B. Butryło 19
Metodyki i technki programowania 1 2011
Funkcje 39
39
C++:
C++: funkcja, definicja funkcji
funkcja, definicja funkcji
typ nazwa deklaracja
nazwa deklaracja
( )
wyniku funkcji argumentów
funkcji argumentów Przykład 1:
float funkcja( float w_x )
float funkcja( float w_x )
{{
{
float w_y;
float w_y;
wewnętrzna część funkcji:
" deklaracje zmiennych;
w_y = 3 * w_x * w_x * w_x +
w_y = 3 * w_x * w_x * w_x +
" wyra\enia;
2 * w_x * w_x 
2 * w_x * w_x 
" przetwarzanie danych;
40 * w_x + 10;
40 * w_x + 10;
return( w_y );
return( w_y );
}}
}
Funkcje 40
40
C++:
C++: funkcja, definicja funkcji
funkcja, definicja funkcji
int main (void)
int main (void)
Przykład 1
{{
int i, j;
int i, j;
float a, f_a, b, f_b, x, y, epsilon;
float a, f_a, b, f_b, x, y, epsilon;
typ nazwa deklaracja
nazwa deklaracja
( )
wyniku funkcji argumentów
funkcji argumentów
printf( "\na = ");
printf( "\na = ");
scanf( "%f", &a);
scanf( "%f", &a);
printf( "\nb = ");
printf( "\nb = ");
scanf( "%f", &b);
scanf( "%f", &b);
{
epsilon = 1e-5;
epsilon = 1e-5;
f_a = funkcja( a );
f_a = funkcja( a );
wewnętrzna część funkcji:
f_b = funkcja( b );
f_b = funkcja( b );
" deklaracje zmiennych;
if ( f_a * f_b < 0 )
if ( f_a * f_b < 0 )
" wyra\enia;
{{
" przetwarzanie danych; i = 0;
i = 0;
x = a;
x = a;
y = f_a;
y = f_a;
while (( fabs( y ) > epsilon )
while fabs( y ) > epsilon )
{{
x = a - f_a * ( b - a ) / ( f_b - f_a );
x = a - f_a * ( b - a ) / ( f_b - f_a );
y = funkcja( x );
y = funkcja( x );
if ( f_a * y > 0 ) f_a = y;
if ( f_a * y > 0 ) f_a = y;
else f_b = y;
else f_b = y;
}
i = i + 1;
i = i + 1;
}}
printf( "x = %f, y(x) = %f.\n", x, y);
printf( "x = %f, y(x) = %f.\n", x, y);
}}
else
else
printf( "Nie ma miejsca zerowego w przedziale.\n" );
printf( "Nie ma miejsca zerowego w przedziale.\n" );
getch();
getch();
}}
B. Butryło 20
Metodyki i technki programowania 1 2011
Funkcje 41
41
Przekazywanie
Przekazywanie argumentów
argumentów
przez referencję
typ nazwa deklaracja
nazwa deklaracja
( )
wyniku funkcji argumentów
funkcji argumentów
double oblicz_kat( double &x, int flaga )
double oblicz_kat( double &x, int flaga )
{
{
double z;
double z;
{
if (flaga == 1) z=x*2*M_PI/360;
wewnętrzna część funkcji: if (flaga == 1) z=x*2*M_PI/360;
else if (flaga == 2) z=x*100/360;
" deklaracje zmiennych; else if (flaga == 2) z=x*100/360;
" wyra\enia;
x=0;
" przetwarzanie danych; x=0;
return( z );
return( z );
}
}
}
double argument = 1.2;
wynik = oblicz_kat( argument, 1 );
przez wartość przez wskaznik
double oblicz_kat( double x, int flaga ) double oblicz_kat( double * x, int flaga )
double oblicz_kat( double x, int flaga ) double oblicz_kat( double * x, int flaga )
{ {
{ {
double z; double z;
double z; double z;
if (flaga == 1) z=x*2*M_PI/360; if (flaga == 1) z=*x*2*M_PI/360;
if (flaga == 1) z=x*2*M_PI/360; if (flaga == 1) z=*x*2*M_PI/360;
else if (flaga == 2) z=x*100/360; else if (flaga == 2) z=*x*100/360;
else if (flaga == 2) z=x*100/360; else if (flaga == 2) z=*x*100/360;
x=0; *x = 0;
x=0; *x = 0;
return( z ); return( z );
return( z ); return( z );
} }
} }
double argument = 1.2; double argument = 1.2;
wynik = oblicz_kat( argument, 1 ); wynik = oblicz_kat( &argument, 1 );
Nowe zagadnienie ... 42
42
Typy podstawowe
Typy podstawowe
B. Butryło 21
Metodyki i technki programowania 1 2011
Nowe zagadnienie ... 43
43
Zmienne
Zmienne
" Sposób deklarowania zmiennych.
" Definiowanie zmiennych.
" Propozycje notacji.
" Charakterystyka modyfikatorów.
" Dynamiczna alokacja zmiennych.
" Zakres \ycia zmiennych.
" Zakres widoczności zmiennych.
" Przestrzenie nazw.
Zmienne 44
44
Typy
Typy podstawowe
podstawowe
C++ Java
C++ Java
Zakres dopuszczalnych Wartość Typ Zakres dopuszczalnych Wartość
Typ zmiennej Rozmiar Rozmiar
wartości domyślna zmiennej wartości domyślna
bool true | false false 1 B boolean true | false false 1 B
znak, -128 : 127 znak Unicode
char 0 1 B char \u0000 2 B
short byte -128 : 127
0 1 B
-32768 : 32767
0 2 B
short int
short -32768 : 32767
0 2 B
-2 147 483 648 :
-2 147 483 648 :
int 0 4 B
int 0 4 B
2 147 483 647
2 147 483 647
long int -2 147 483 648 : long -1264-1 : 264-1-1
0 8 B
0 4 B
2 147 483 647
long
IEEE 754
float 0.0 4 B
IEEE 754
float 0.0 4 B
IEEE 754
double 0.0 8 B
IEEE 754
double 0.0 8 B
Programy są przenośne poniewa\ rozmiar
IEEE 754
long double 0.0 10 B ka\dego typu jest niezmienny.
Programy (kody wynikowe) nie są przenośne
poniewa\ rozmiary niektórych typów zale\ą
od implementacji.
void = (pusty)
void = (pusty)
B. Butryło 22
Metodyki i technki programowania 1 2011
Wstęp 45
45
C++
C++ typy zmiennych
typy zmiennych
char -128 127
znakowy
znakowy
unsigned char 0 255
short -32768 32767
int -32768 32767
unsigned int 0 65635
całkowity
Proste, całkowity
Proste,
long -2147483648 2147483647
podstawowe
podstawowe
unsigned long 0 429467295
enum
float 3.4e-38 3.4e+38
Zmienne
Zmienne
zmienno-
zmienno-
double 1.7e-308 1.7e+308
pozycyjny
pozycyjny
long double 3.4e-4932 1.1e+4932
tablice
tablice
struktury
struktury
Pochodne
Pochodne
unie
unie
wskazniki
wskazniki
Pusty void
Pusty
Zmienne 46
46
C++
C++ i Java: definicja zmiennych
i Java: definicja zmiennych
modyfikator/ wartość
modyfikator/ wartość
typ zmiennej identyfikator
typ zmiennej identyfikator
;
modyfikatory początkowa
modyfikatory początkowa
Opcjonalny ciąg
Jeden z typów Lista identyfikatorów Po identyfikatorze
modyfikatorów w dowolnej
dostępnych w języku, zmiennych mo\e być określona
kolejności. Typy
określa dozwolone
oddzielanych wartość początkowa
modyfikatorów: dostępu,
wartości przecinkami zamiennej
zachowania wartości,
zakresu wartości, poprzedzona znakiem
synchronizacji.
równości.
C++ Java C++ Java
C++ Java C++ Java
public public
public public
private private
private private " podstawowe, " reguły (!),
protected protected
protected protected
" wyliczeniowy, " zalecenia (?),
" pochodne, " przyzwyczajenia (??),
auto const(*)
auto const(*)
" własne. " zasady (???)
const final
const final
extern static
extern static
register synchronized
register synchronized
static transient
static transient
volatile volatile
volatile volatile
signed
signed
unsigned
unsigned
const double zm_1, zm2 = 0 ;
static long i_licznik ;
float pi a1=0, zm2=5= 3.14 ;
int ;
const double zm_1, zm2 = 0 ;
static long i_licznik ;
float pi a1=0, zm2=5= 3.14 ;
int ;
B. Butryło 23
Metodyki i technki programowania 1 2011
Zmienne 47
47
Identyfikatory
Identyfikatory zmiennych / pól / metod
zmiennych / pól / metod
C++ Java
C++ Java
" Dowolna długość (kompilator " Dowolna długość.
identyfikuje zwykle pierwsze 16/32 " Musi zaczynać się literą,
znaki). podkreśleniem _, znakiem $.
" Musi zaczynać się literą, " Kombinacja znaków (litery, cyfry, _).
podkreśleniem _, znakiem $. " Obowiązuje Unicode (szeroki zbiór
" Kombinacja znaków (litery, cyfry, _). liter i znaków).
" Obowiązuje ASCII. " Rozró\niane są małe i du\e litery.
" Rozró\niane są małe i du\e litery.
/* identyfikatory zmiennych */
/* identyfikatory zmiennych */
int a, ą, ą, , ć;
int a, a1, a2, aa, a_b;
char znak, Zażółć, _to_jest_to;
char znak, Zazolc, _to_jest_to;
double Ą = 3.15;
Ą
Ą
Ą
double pi = 3.15;
float $b1=0.5f;
float $b1=0.5f;
słowa kluczowe = nazwy zabronione
słowa kluczowe = nazwy zabronione
Zmienne 48
48
Propozycja
Identyfikatory:
Identyfikatory: notacja węgierska
notacja węgierska Propozycja
" Sposób nazewnictwa zmiennych, polegający na poprzedzaniu właściwej
nazwy zmiennej małą literą (literami) określającą rodzaj tej zmiennej.
" Jeden ze sposobów oznaczania zmiennych. Nie do końca
sformalizowany, np.
i_calkowita
icalkowita
iCalkowita
" Wada: problemy przy zmianie typu zmiennej. Zmiana typu zmiennej
wymaga poprawienia nazwy zmiennej w całym programie. Z tego powodu
nie zalecana dla początkujących programistów.
" Zalety:
" przejrzysta zasada nazewnictwa,
" ułatwione kontrolowanie operacji na zmiennych w programie,
" kontrola algorytmu (swoiste debugowanie) na etapie pisania
programu.
B. Butryło 24
Metodyki i technki programowania 1 2011
Zmienne 49
49
Propozycja
Identyfikatory:
Identyfikatory: notacja węgierska
notacja węgierska Propozycja
przedrostek opis symbolu w notacji
s string (łańcuch znaków)
sz string (łańcuch znaków zakończony bajtem zerowym - null'em)
1. char (jeden znak),
c
2. const - wartość stała
by byte, unsigned char
n short
i integer, int
x, y integer, zmienne określające współrzędne
cx, cy integer, zmienne określające rozmiar, długość
i integer, int
l long
Zmienne 50
50
Propozycja
Identyfikatory:
Identyfikatory: notacja węgierska
notacja węgierska Propozycja
przedrostek opis symbolu w notacji
b boolean (wartość logiczna: prawda lub fałsz)
f flaga
fn funkcja
h handle (uchwyt)
p pointer (wskaznik)
" Mo\liwe jest łączenie przedrostków, np. pf, pi.
B. Butryło 25
Metodyki i technki programowania 1 2011
Zmienne 51
51
Propozycja
Propozycja
Identyfikatory:
Identyfikatory: klasy i pola
klasy i pola
Klasy:
" nazwy rozpoczynają się du\ą literą,
" kolejne wyrazy w identyfikatorze te\ z du\ej litery.
Przykłądy: KlasaDanychOsobowych
InputFromDataAcquisitionCard
Zmienne, pola, metody (w ramach klasy):
" nazwy rozpoczynają się małą literą,
" kolejne wyrazy w identyfikatorze te\ z du\ej litery.
Przykłądy: nazwiskoOsoby
osoba_Rok_Urodzenia
inputFromChannel_5
Nowe zagadnienie ... 52
52
Modyfikatory
Modyfikatory
B. Butryło 26
Metodyki i technki programowania 1 2011
Zmienne 53
53
Modyfikatory:
Modyfikatory: zakres wartości
zakres wartości
C++
C++
W nie
W Javie nie
Javie
ma
ma
signed unsigned
modyfikatorów
modyfikatorów
zakresu!
zakresu!
Zakres dopuszczalnych Wartość Zakres dopuszczalnych Wartość
Typ zmiennej Rozmiar Typ zmiennej Rozmiar
wartości domyślna wartości domyślna
bool true | false false 1 B bool true | false false 1 B
znak, -128 : 127 znak, 0 : 255
char 0 1 B char 0 1 B
short short
-32768 : 32767 0 : 65536
0 2 B 0 2 B
short int short int
-2 147 483 648 : 0 :
int 0 4 B int 0 4 B
2 147 483 647 4 294 967 296
long int -2 147 483 648 : 0 :
long int
0 4 B 0 4 B
2 147 483 647 4 294 967 296
long long
IEEE 754 IEEE 754
float 0.0 4 B float 0.0 4 B
IEEE 754 IEEE 754
double 0.0 8 B double 0.0 8 B
IEEE 754 IEEE 754
long double 0.0 10 B long double 0.0 10 B
/* identyfikatory zakresu wartości */ /* identyfikatory zakresu wartości */
signed int roznica_wieku = -10; unsigned int wiek_osoby = 25;
signed char przesuniecie_kodu = -32; unsigned char red, green = 0, blue=255;
Zmienne 54
54
Modyfikatory:
Modyfikatory: register
register
C++
Komputer C++
Komputer
Procesor
ALU, Procesor
ALU, rejestry
rejestry
register  modyfikator zmiennej
ukł.
ukł.
ster.
ster.
stos umieszczanej w rejestrze.
stos
Oznacza bezpośredni dostęp do
cache
cache
rejestrów z poziomu programu.
pamięć operacyjna stała
pamięć operacyjna stała
Nie wszystkie kompilatory zrealizują
pamięć operacyjna o dostępie przetwarzanie zmiennej przez jej
pamięć operacyjna o dostępie
swobodnym
swobodnym umieszczenie w rejestrze.
Zmienne rejestrowe mogą być
wewnętrzna pamięć dyskowa
wewnętrzna pamięć dyskowa
u\yteczne przy du\ej liczbie
pamięci dyskowe
pamięci dyskowe
obliczeń.
pamięci taśmowe
pamięci taśmowe
/* identyfikatory zmiennych */
register double pi = 3.15;
Rejestry
" Grupa przerzutników słu\ąca do przechowywania informacji.
register int rok = 2008;
Rejestry są szybsze ni\ typowe układy pamięci. W porównaniu z
liczbą komórek pamięci operacyjnej ich liczba jest niewielka. W
rok = rok + 1;
części adresowej rozkazu potrzebna jest niewielka liczba bitów do
wskazania rejestru.
W nie
" Główne u\ycie rejestrów polega na przechowywaniu adresów lub
W Javie nie ma
Javie ma
danych przed lub w trakcie ich przetwarzania.
modyfikatora
modyfikatora
" Rejestry mogą być u\ywane do modyfikacji adresów, do
bezpośredniego
bezpośredniego
zapamiętania adresów powrotu z podprogramu, jako liczniki
dostępu
dostępu do
do
rozkazów, jako akumulatory pomocnicze lub jako małe pamięci
rejestrów!
rejestrów!
notatnikowe. Sposób ich u\ycia zale\y od architektury
mikroprocesora.
B. Butryło 27
Rosnąca wielkość pamięci
Rosnąca szybkość dostępu
Metodyki i technki programowania 1 2011
Zmienne 55
55
Modyfikatory:
Modyfikatory: deklaracja, def. zmiennej
deklaracja, def. zmiennej
C++ Java
C++ Java
... ...
/* deklaracja zmiennej nie rezerwuje /* deklaracja zmiennej nie rezerwuje
miejsca w pamięci, miejsca w pamięci,
deklaracji mo\e być wiele, byle identyczne */ deklaracji mo\e być wiele, byle identyczne */
extern int licznik; extern int licznik;
extern int licznik_drugi; extern int licznik_drugi;
extern int licznik; // może być extern int licznik; // może być
/* definicja zmiennej rezerwuje /* definicja zmiennej rezerwuje
miejsce w pamięci, miejsce w pamięci,
* tworzy opis zmiennej / pola, * tworzy opis zmiennej / pola,
* definicja to więcej ni\ deklaracja, * definicja to więcej ni\ deklaracja,
* jedna definicja w danym zakresie */ * jedna definicja w danym zakresie */
int a, b, i_c, to_jest_liczba; int a, b, i_c, to_jest_liczba;
char znak, c_znak_z_konsoli; char znak, c_znak_z_konsoli;
double pi = 3.15; double pi = 3.15;
float b1=0.5f; float b1=0.5f;
int i_c, znak; // błąd int i_c, znak; // błąd
Zmienne 56
56
Modyfikatory:
Modyfikatory: wartości stałe
wartości stałe
C++ Java
C++ Java
... ...
/* definicja zmiennej która nie mo\e /* Definicja zmiennej która nie mo\e
ulec zmianie ulec zmianie
w trakcie działania programu */ w trakcie działania programu.
Modyfikator const jest dopuszczalny
ale nie jest zalecany */
const float pi = 3.15;
final float pi = 3.15;
const double eps_zero = 8.85e-12;
final double eps_zero = 8.85e-12;
const int mnoznik = 4;
final int mnożnik = 4;
B. Butryło 28
Metodyki i technki programowania 1 2011
Zmienne 57
57
Modyfikatory:
Modyfikatory: wartości  ulotne
wartości  ulotne
Komputer
Komputer
Procesor Karta pomiarowa
ALU, Procesor Karta pomiarowa
ALU,
rejestry
rejestry
ukł.
ukł.
ster.
ster.
stos
stos
cache
cache Stan czujników
Stan czujników
pamięć operacyjna stała
pamięć operacyjna stała
pamięć operacyjna o dostępie
pamięć operacyjna o dostępie
Dane z interentu
Dane z interentu
swobodnym
swobodnym
wewnętrzna pamięć dyskowa
wewnętrzna pamięć dyskowa
Układy
Układy
pamięci dyskowe
pamięci dyskowe
...
...
I/O
I/O
pamięci taśmowe
pamięci taśmowe
C++ Java
C++ Java
... ...
/* definicja zmiennej która mo\e /* definicja zmiennej która mo\e
ulec zmianie ulec zmianie
i nie jest zsynchronizowana i nie jest zsynchronizowana
ze środowiskiem */ ze środowiskiem */
volatile float temperatura = 0.0; volatile float temperatura = 0.0;
volatile double kurs_waluty = 0.0; volatile double kurs_waluty = 0.0;
volatile int stan_czujnika_drzwi = 0; volatile int stan_czujnika_drzwi = 0;
Nowe zagadnienie ... 58
58
Zakres zmiennych
Zakres zmiennych
Widoczność zmiennych
Widoczność zmiennych
B. Butryło 29
Rosnąca wielkość pamięci
Rosnąca szybkość dostępu
Metodyki i technki programowania 1 2011
Zmienne 59
59
Zmienne
Zmienne w programie: sterta i stos
w programie: sterta i stos
Komputer
Komputer
Procesor
ALU, Procesor
ALU, rejestry
rejestry
ukł.
ukł.
ster.
ster.
stos
stos
cache
cache
pamięć operacyjna stała
pamięć operacyjna stała
pamięć operacyjna o dostępie
pamięć operacyjna o dostępie
swobodnym
swobodnym
wewnętrzna pamięć dyskowa
wewnętrzna pamięć dyskowa
pamięci dyskowe
pamięci dyskowe
pamięci taśmowe
pamięci taśmowe
Sterta (ang. heap) Stos (ang. stack)
" Część pamięci elektronicznej (RAM Cache) " Uporządkowana lista komórek pamięci, w której dostęp
przydzielana dla programu dla przechowywania jest zawsze do wierzchołka stosu.
zmiennych. " Stos = lista spychania, kolejka LIFO (last in first out).
" Zarządzanie stertą nie jest mo\liwe w językach " Ułatwia zarządzanie wywołaniami i powrotami z
wysokiego poziomu. Mo\liwe jest jedynie podprogramów.
zarezerwowanie fragmentu pamięci (sterty) na " Wykonywane operacje odnoszą się do wierzchołka stosu.
zachowanie zmiennych lub zwolnienie obszaru Ze względu na jednoznaczną lokację nie jest konieczne
pamięci. podawanie adresu argumentu do zrealizowanego rozkazu.
" Przydział sterty dla programu oznacza, \e ten " W niektórych procesorach (w celu przyspieszenia
obszar pamięci jest zerowany w momencie przetwarzania) dwa wierzchołkowe elementy stosu są
przydzielenia. przechowywane w rejestrach procesora.
" Zmienne wewnątrz funkcji (do umieszczenia na stosie) nie
są automatycznie inicjowanie.
Zmienne 60
60
Zmienne
Zmienne w programie: sterta i stos
w programie: sterta i stos
Komputer
Komputer #include
Procesor
ALU, Procesor
ALU, rejestry #include
rejestry
ukł
ukł. .
ster. using namespace std;
ster. stos
stos
cache
cache
int red=255, green=255, blue=0;
pamięć operacyjna stała
pamięć operacyjna stała float wektor_x, wektor_y, wektor_modul, wektor_faza;
pamięć operacyjna o dostępie
pamięć operacyjna o dostępie
swobodnym
swobodnym void ustaw_kolory( int, int, int,int );
void dlugosc_wektora( float, float );
wewnętrzna pamięć dyskowa
wewnętrzna pamięć dyskowa
pamięci dyskowe
pamięci dyskowe
void main ( void )
pamięci taśmowe
pamięci taśmowe
{
int liczba_wektorow = 1;
void ustaw_kolory( int red, int green, int blue, int nas )
float * wektor_x, * wektor_y;
{ static int licznik;
int biezace_nasycenie = nas;
wektor_x = new float [3];
set_color( red, green, blue );
set_shading( nas );
dlugosc_wektora( 3.0, -4.0 );
licznik++;
ustaw_kolory( 0, 255, 0, 0); // ustaw zielony
cout<< "Zmiana koloru " << licznik << "raz. <dlugosc_wektora( 0.0, 1.0 );
}
ustaw_kolory( 255, 255, 0, 10); // ustaw zolty
Modyfikator
Modyfikator
void dlugosc_wektora( float wsp_x, float wsp_y )
dlugosc_wektora( 3.0, -4.0 );
static
{ static float point_x = 0.0; static
ustaw_kolory( 255, 0, 128, 0); // ustaw purpurowy
static float point_y;
}
Zmienne
float dlugosc =
Zmienne
dynamicznie
sqrt( pwd(wsp_x  point_x, 2)+pwd(wsp_y  point_y, 2) );
dynamicznie
alokowane
point_x = wsp_x;
alokowane
point_y = wsp_y;
cout << "Przemieszczenie " << dlugosc << endl;
}
B. Butryło 30
Rosnąca wielkość pamięci
Rosnąca szybkość dostępu
Rosnąca wielkość pamięci
Rosnąca szybkość dostępu
Metodyki i technki programowania 1 2011
Zmienne 61
61
Zakres
Zakres zmiennej, obiektu
zmiennej, obiektu
Zakres wa\ności zmiennej , obiektu:
" dostęp do wymaganych danych w wybranym miejscu programu,
" dotyczy przypadków gdy dane istnieją, są zadeklarowane w programie ale
mogą być niewidoczne, niedostępne, przysłonięte w danym miejscu.
Czas \ycia zmiennej, obiektu:
" czas od zadeklarowania i zainicjowania zmiennej do jej usunięcia z pamięci
(bezpośrednego wymazania, utraty informacji przechowywanych w zmiennej,
obiekcie).
" ma wpływ na rozmiar pamięci zajmowanej przez dane, a zatem efektywność,
wymagania programu.
W OOP
W OOP
jest
jest
Zakres zmiennej, obiektu
Zakres zmiennej, obiektu
zakres klasy
zakres klasy
lokalny funkcja (metoda)
lokalny funkcja (metoda)
plik
Z wykorzystaniem instrukcji Dotyczy etykiet i zmiennych. plik
Z wykorzystaniem instrukcji Dotyczy etykiet i zmiennych.
grupującej { } Nie dotyczy wskazników, tablic (new).
grupującej { } Nie dotyczy wskazników, tablic (new).
Zmienne 62
62
Zakres
Zakres zmiennej, obiektu
zmiennej, obiektu
void moc( float u, float i, float kat )
lokalny
lokalny {
Z wykorzystaniem instrukcji
Z wykorzystaniem instrukcji
float modul = 0.0;
grupującej { }
grupującej { }
float faza = 0.0;
float re, im;
float f_p; // czynna
f_p = u * i * cos( kat );
{
float f_s; // pozorna
float f_p; // przysloniencie
f_p = u * i * sin( kat );
f_s = u * i;
Przysłanianie cout << "Q = " << f_p << endl;
Przysłanianie
zmiennych.
cout << "S = " << f_s << endl;
zmiennych.
}
Operator ::
Operator :: cout <<  P = " << f_p << endl;
cout << "S = " << f_s << endl; // blad
}
B. Butryło 31
Metodyki i technki programowania 1 2011
Zmienne 63
63
Zakres
Zakres zmiennej, obiektu
zmiennej, obiektu
float moc(float u, float i, float kat)
funkcja (metoda)
funkcja (metoda) { float modul = 0.0;
Dotyczy etykiet i zmiennych.
Dotyczy etykiet i zmiennych.
float faza = 0.0;
Nie dotyczy wskazników, tablic (new).
Nie dotyczy wskazników, tablic (new).
float re, im;
float f_p; // czynna
f_p = u * i * cos( kat );
goto komunikat;
modul = u * i;
faza = kat;
return ( modul );
komunikat:
cout <<  P = " << f_p << endl;
double * wyniki;
wyniki = new double [ 100 ];
return ( f_p );
}
Zmienne 64
64
Zakres
Zakres zmiennej, obiektu
zmiennej, obiektu
#include
using namespace std;
plik
plik
int red=255, green=0, blue=0;
float wektor_x, wektor_y,
float wektor_modul, wektor_faza;
int resetuj_kolory( void );
void main ( void ) // funkcja main
{
int liczba_wektorow = 1;
red = 255;
green = 123;
}
int resetuj_kolory ( void ) // funkcja resetuj_kolory
{
int status = 1;
red = 0;
green = 0;
blue = 0;
return( status );
}
B. Butryło 32
Metodyki i technki programowania 1 2011
Struktura programu w C++ (programowanie strukturalne) 65
65
Przestrzeń
Przestrzeń nazw  widoczność, dostęp
nazw  widoczność, dostęp
namespace nazwa_przestrzeni
{
}
namespace std namespace moje namespace demo
namespace std namespace moje namespace demo
using namespace nazwa_przestrzeni
Wstęp 66
66
C:
C: deklaracje zmiennych
deklaracje zmiennych
Przykłady:
RAM
-128 127
char
char znak;
char a, ten, k = 64;
0 255
unsigned char
short -32768 32767
short liczba;
int liczba_w = 2006;
int -32768 32767
unsigned int nowa_wartosc;
unsigned int 0 65635
unsigned int new_value = 45000;
long -2147483648 2147483647 long d;
unsigned long e, f, g;
unsigned long 0 429467295
enum
3.4e-38 3.4e+38
float
float pi = 3.41;
float alfa, beta = 1.46e+10, gamma = 1.4E-4;
1.7e-308 1.7e+308
double
double zmienna;
3.4e-4932 1.1e+4932
long double
double nowa_wartosc_liczby = 1.0;
B. Butryło 33
Metodyki i technki programowania 1 2011
Wstęp 67
67
C:
C: wyra\enia i operatory
wyra\enia i operatory
proste
proste
proste
proste
arytmetyczne
arytmetyczne
relacyjne
relacyjne
arytmetyczne
arytmetyczne
logiczne
logiczne
wyra\enie
wyra\enie
operatory
operatory
bitowe
bitowe
relacyjne
relacyjne
adresowania
adresowania
rzutowania
rzutowania
logiczne
logiczne
...
...
Wstęp 68
68
C:
C: wyra\enia i operatory (hierarchia)
wyra\enia i operatory (hierarchia)
odwołanie do, wywołanie ( ) [ ] . funkcja
logiczne !
bitowe ~
jednoargumentowe
arytmetyczne ++ -- + -
rzutowania (typ) sizeof
iloczyn, iloraz, reszta * / %
arytmetyczne
dwuargumentowe
suma, ró\nica + -
bitowe przesunięcia << >>
relacyjne < <= > >=
relacyjne i logiczne
dwuargumentowe
relacyjne / logiczne == !=
bitowe dwuargumentowe & | ^
koniunkcja &&
logiczne
dwuargumentowe
alternatywa ||
warunkowy ?:
arytmetyczne = += -= *= /= %=
przypisania
bitowe &= ^= |= <<= >>=
przecinkowy ,
B. Butryło 34
Metodyki i technki programowania 1 2011
Wstęp 69
69
C:
C: wyra\enia i operatory (przykłady)
wyra\enia i operatory (przykłady)
int ia, ib, ic;
iw = ia == ib; /* 0 */
float fa, fb, fc;
int iw;
iw = ia > ib; /* 1 */
float fw;
iw = ia && ib; /* 1 */
ia = 10;
ib = 5;
iw = ia || ib; /* 1 */
ic = -8;
iw = ia * ib; /* 50 */
fa = 1.5;
fb = 5.4321E-10;
fc = -.78;
fw = fa < fb + fa < fc; /* 0.0 */
fw = fa < fb + fa > fc; /* 1.0 */
fw = (fa < fb) + (fa < fc); /* 0.0 */
fw = (fa > fb) + (fa > fc); /* 2.0 */
fw = fa + fb * fc / (ia + ib ); /* 1.5 */
fw == iw; /* brak skutku */
Instrukcje 70
70
Najprostsze
Najprostsze instrukcje
instrukcje
C++: proceduralnie Java: obiektowo
C++: proceduralnie Java: obiektowo
Instrukcja / wyra\enie proste Instrukcja grupująca
Instrukcja / wyra\enie proste Instrukcja grupująca
B. Butryło 35
Metodyki i technki programowania 1 2011
Wstęp 71
71
C:
C: instrukcja warunkowa if ... else
instrukcja warunkowa if ... else
wyra\enie wyra\enie `" 0 wyra\enie = 0
wyra\enie
if ( )
TAK NIE
(prawda) (fałsz)
wyra\enie
wyra\enie
instrukcja (instrukcje) A
instrukcja (instrukcje) A
instrukcja instrukcja
instrukcja instrukcja
(instrukcje) A (instrukcje) B
(instrukcje) A (instrukcje) B
else
instrukcja (instrukcje) B
instrukcja (instrukcje) B
int
int a, b; /* wartości muszą być wpisane*/
a, b; /* wartości muszą być wpisane*/
Przykłady:
if (a + b == 10 )
if (a + b == 10 )
wynik = 100;
wynik = 100;
else
else
wynik = 0;
wynik = 0;
int
int a, b; /* wartości muszą być wpisane*/
a, b; /* wartości muszą być wpisane*/
if (a == b )
if (a == b )
a = 0;
a = 0;
Wstęp 72
72
C:
C: wersja wielowariantowa if-else-if
wersja wielowariantowa if-else-if
( wyra\enie 1) `" 0 (wyra\enie 1) = 0
TAK NIE
(prawda) (fałsz)
wyra\enie 1
wyra\enie 1
( wyra\enie 2) = 0
NIE
( wyra\enie 2) `" 0
(fałsz)
instrukcja
instrukcja
TAK
wyra\enie 2
wyra\enie 2
(instrukcje) A (prawda)
(instrukcje) A
instrukcja instrukcja
instrukcja instrukcja
(instrukcje) B (instrukcje) B
(instrukcje) B (instrukcje) B
int
int punkty, ocena; /* wartość zmiennej punkty musi być znana */
punkty, ocena; /* wartość zmiennej punkty musi być znana */
Przykłady:
if (punkty > 36 )
if (punkty > 36 )
ocena = 5;
ocena = 5;
else
else if (punkty >= 34)
if (punkty >= 34)
ocena = 4.5;
ocena = 4.5;
else (punkty >= 31)
else if (punkty >= 31)
if
ocena = 4;
ocena = 4;
else (punkty >= 25)
else if (punkty >= 25)
if
ocena = 3.5;
ocena = 3.5;
else (punkty >= 20)
else if (punkty >= 20)
if
ocena = 3.5;
ocena = 3.5;
else
else
ocena = 2.0;
ocena = 2.0;
B. Butryło 36
Metodyki i technki programowania 1 2011
Wstęp 73
73
C:
C: instrukcja iteracyjna for
instrukcja iteracyjna for
wyra\enie 1 wyra\enie 2 wyra\enie 3
wyra\enie 1 wyra\enie 2 wyra\enie 3
for ( ; ; )
instrukcja (instrukcje) A
instrukcja (instrukcje) A
int
int i, wynik = 0;
i, wynik = 0;
Przykłady:
wyra\enie 1
wyra\enie 1
for
for (i=10; i < 20; i=i+3 )
(i=10; i < 20; i=i+3 )
(inicjujące)
(inicjujące)
wynik = wynik + i;
wynik = wynik + i;
wyra\enie 3
wyra\enie 3
(przyrostowe)
(przyrostowe)
float i, potega;
float i, potega;
wyra\enie 2 `" 0
wyra\enie 2 wyra\enie 2 = 0 for
wyra\enie 2 for (i=200; i >= 10; i=i-3 )
(i=200; i >= 10; i=i-3 )
TAK NIE
(sterujące) potega = i * i;
(sterujące) potega = i * i;
(prawda) (fałsz)
for
for (;;)
(;;)
instrukcja
instrukcja
;;
(instrukcje) A
(instrukcje) A
Wstęp 74
74
C:
C: instrukcja iteracyjna for
instrukcja iteracyjna for
wyra\enie 1 wyra\enie 2 wyra\enie 3
wyra\enie 1 wyra\enie 2 wyra\enie 3
for ( ; ; )
instrukcja (instrukcje) A
instrukcja (instrukcje) A
float i, wynik = 0;
float i, wynik = 0;
Przykłady:
wyra\enie 1
wyra\enie 1
for
for (i=0; i < 100; i=i+1)
(i=0; i < 100; i=i+1)
(inicjujące)
(inicjujące)
printf(  %f %f\n , i, i*i);
printf(  %f %f\n , i, i*i);
wyra\enie 3
wyra\enie 3
float odsetki = 0;
float odsetki = 0;
(przyrostowe)
(przyrostowe)
float oprocentowanie = 0,08;
float oprocentowanie = 0,08;
float kapital = 100;
float kapital = 100;
wyra\enie 2 `" 0
wyra\enie 2 wyra\enie 2 = 0
wyra\enie 2 int rok, lata;
int rok, lata;
TAK NIE
(sterujące)
(sterujące)
(prawda) (fałsz)
lata = 4;
lata = 4;
for
for (rok=0; rok < lata; rok=rok+1)
(rok=0; rok < lata; rok=rok+1)
{{
odsetki = kapital * oprocentowanie;
odsetki = kapital * oprocentowanie;
instrukcja
instrukcja
kapital = kapital + odsetki;
kapital = kapital + odsetki;
(instrukcje) A
(instrukcje) A
}}
printf(  Kapital po %d latach wynosi %f zl.\n ,
printf(  Kapital po %d latach wynosi %f zl.\n ,
lata, kapital);
lata, kapital);
B. Butryło 37
Metodyki i technki programowania 1 2011
Wstęp 75
75
C:
C: instrukcja iteracyjna while
instrukcja iteracyjna while
wyra\enie
wyra\enie
while ( )
int
int i, wynik = 0;
i, wynik = 0;
Przykłady:
i=10;
i=10;
instrukcja (instrukcje) A
instrukcja (instrukcje) A
while (i < 20)
while (i < 20)
{{
wynik = wynik + i;
wynik = wynik + i;
i=i+3;
i=i+3;
}}
float i, potega;
float i, potega;
wyra\enie `" 0
wyra\enie wyra\enie = 0 i=200;
wyra\enie i=200;
TAK
NIE
(sterujące) while (i >= 10)
(sterujące) while (i >= 10)
(prawda)
(fałsz)
{{
potega = i * i;
potega = i * i;
i=i-3;
i=i-3;
instrukcja
instrukcja
}}
(instrukcje) A
(instrukcje) A
while (1)
while (1)
;;
Wstęp 76
76
C:
C: instrukcja iteracyjna while
instrukcja iteracyjna while
wyra\enie
wyra\enie float i, wynik = 0;
while ( ) float i, wynik = 0;
Przykłady:
i=0;
i=0;
while (i < 100)
while (i < 100)
instrukcja (instrukcje) A
instrukcja (instrukcje) A
{{
printf(  %f %f\n , i, i*i);
printf(  %f %f\n , i, i*i);
i=i+1;
i=i+1;
}}
float odsetki = 0;
float odsetki = 0;
float oprocentowanie = 0,08;
float oprocentowanie = 0,08;
float kapital = 100;
float kapital = 100;
wyra\enie `" 0
wyra\enie wyra\enie = 0
wyra\enie
int rok, lata;
TAK int rok, lata;
NIE
(sterujące)
(sterujące)
(prawda)
(fałsz)
lata = 4;
lata = 4;
rok = 0;
rok = 0;
instrukcja while (rok < lata)
instrukcja while (rok < lata)
{{
(instrukcje) A
(instrukcje) A
odsetki = kapital * oprocentowanie;
odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;
kapital = kapital + odsetki;
rok=rok+1;
rok=rok+1;
}}
printf(  Kapital po %d latach wynosi %f zl.\n ,
printf(  Kapital po %d latach wynosi %f zl.\n ,
lata, kapital);
lata, kapital);
B. Butryło 38
Metodyki i technki programowania 1 2011
Wstęp 77
77
C:
C: instrukcja iteracyjna do ... while
instrukcja iteracyjna do ... while
int
int i, wynik = 0;
i, wynik = 0;
Przykłady:
do
i=10;
i=10;
do
do
{{
instrukcja (instrukcje) A
instrukcja (instrukcje) A
wynik = wynik + i;
wynik = wynik + i;
i=i+3;
i=i+3;
}}
wyra\enie
wyra\enie
while ( );
while (i < 20);
while (i < 20);
float i, potega;
float i, potega;
i=200;
i=200;
do
do
{{
instrukcja
instrukcja
potega = i * i;
potega = i * i;
(instrukcje) A
(instrukcje) A
i=i-3;
i=i-3;
}}
wyra\enie `" 0 wyra\enie = 0 while (i >= 10);
while (i >= 10);
TAK NIE
(prawda) wyra\enie (fałsz)
wyra\enie
(sterujące)
(sterujące)
do
do
;;
while (1);
while (1);
Wstęp 78
78
C:
C: instrukcja iteracyjna while
instrukcja iteracyjna while
float i, wynik = 0;
float i, wynik = 0;
Przykłady:
do
i=0;
i=0;
do
do
{{
printf(  %f %f\n , i, i*i);
printf(  %f %f\n , i, i*i);
instrukcja (instrukcje) A
instrukcja (instrukcje) A
i=i+1;
i=i+1;
}}
while (i < 100);
while (i < 100);
wyra\enie
wyra\enie
while ( );
float odsetki = 0;
float odsetki = 0;
float oprocentowanie = 0,08;
float oprocentowanie = 0,08;
float kapital = 100;
float kapital = 100;
int rok, lata;
int rok, lata;
lata = 4;
lata = 4;
rok = 0;
rok = 0;
instrukcja
instrukcja
(instrukcje) A
(instrukcje) A
do
do
{{
odsetki = kapital * oprocentowanie;
odsetki = kapital * oprocentowanie;
wyra\enie `" 0 wyra\enie = 0
kapital = kapital + odsetki;
kapital = kapital + odsetki;
TAK NIE
rok=rok+1;
(prawda) wyra\enie (fałsz) rok=rok+1;
wyra\enie
}}
(sterujące)
(sterujące)
while (rok < lata);
while (rok < lata);
printf(  Kapital po %d latach wynosi %f zl.\n ,
printf(  Kapital po %d latach wynosi %f zl.\n ,
lata, kapital);
lata, kapital);
B. Butryło 39
Metodyki i technki programowania 1 2011
Instrukcje 79
79
Przykład:
Przykład: funkcje / instrukcje
funkcje / instrukcje
Numeryczne obliczanie całki metodą prostokątów.
Zało\enia:
" dana/znana postać funkcji podcałkowej.
" znany, ograniczony przedział całkowania.
Właściwości:
" nie wymaga obliczania funkcji
pierwotnej.
" zbie\na je\eli funkcja ciągła i
ograniczona w przedziale całkowania.
" poprawna realizacja wymaga podwójnej
procedura iteracyjnej.
Przykłady zastosowań: AVG, RMS, P.
" " "
I0 łzmniejszł I1 łzmniejszł I2 ł łzmniejszł In ł
łłłx łłłx łK łłłx łK
Obliczaj
In I H" IE
N
n = 0, 1, 2, K, N
Instrukcje 80
80
Przykład:
Przykład: funkcje / instrukcje
funkcje / instrukcje
f(v)
v
v0 v1 v2 v3 v4 vN
g
d
N -1
ńł
(vi )"(vi+1 - vi )+ c
"
łI H" f
g
i=0
ł
ł
I = f (v)dv + c
ł
+"
d ł N -1
g - d
ł
I H" f (vi )" "v + c
" "v =
ł
N
ół i=0
vi = d + i " "v
B. Butryło 40
Metodyki i technki programowania 1 2011
Instrukcje 81
81
Przykład:
Przykład: funkcje / instrukcje
funkcje / instrukcje
#include
double licz_calke( double dolna, double gorna,
#include
double krok )
using namespace std;
{
double wart_x;
double licz_calke(double, double, double);
double wynik = 0.0;
double funkcja( double, double);
int main(int argc, char** argv)
wart_x = dolna;
{
while ( wart_x < gorna )
double epsilon = 1.0e-6;
{
double g_dolna = 0.1;
wynik = wynik + krok * funkcja( wart_x, 0.0 );
double g_gorna = 10.5;
int liczba_punktow = 10; wart_x = wart_x + krok;
double krok_x = (g_gorna - g_dolna) / liczba_punktow;
}
double w_calki = 0.0;
return( wynik );
double po_w_calki = 0.0;
}
do
{
po_w_calki = w_calki;
double funkcja( double x_1, double x_2 )
w_calki = licz_calke( g_dolna, g_gorna, krok_x ); double funkcja( double x_1, double x_2 )
krok_x = krok_x * 0.5; {{
}
double wynik;
double wynik;
while (fabs( (w_calki - po_w_calki) /po_w_calki ) > epsilon);
wynik = 10 * exp( -0.072 * x_1 ) *
wynik = 10 * exp( -0.072 * x_1 ) *
cout << "Calka w przedziale [" << g_dolna << ";" << g_gorna << "]
sin( 2 * 3.14159265 * 0.1 * x_1 );
sin( 2 * 3.14159265 * 0.1 * x_1 );
wynosi " << w_calki << endl;
return( wynik );
cout << "Koniec liczenia" << endl; return( wynik );
return( 0 ); }}
}
Instrukcje 82
82
Przykład:
Przykład: funkcje / instrukcje
funkcje / instrukcje
10
8 f(x)
2Ą
6
f (x) = 10e-0,072x sinł xł
ł ł
4
10
ł łł
2
x
0
d = 0,1
-2
0 5 10 15 20 25 30 35
g = 10,5
-4
-6
-8
9
I
8,40166 8,8
10,5
8,6
2Ą
I = 10e-0,072x sinł xłdx
ł ł
+"
8,4
10
ł łł
0,1
8,2
8
7,8
7,6
"x
7,4
1,E-06 1,E-05 1,E-04 1,E-03 1,E-02 1,E-01 1,E+00 1,E+01
B. Butryło 41
Metodyki i technki programowania 1 2011
Instrukcje 83
83
C++:
C++: instrukcja iteracyjna for
instrukcja iteracyjna for
wyra\enie 1 wyra\enie 2 wyra\enie 3
wyra\enie 1 wyra\enie 2 wyra\enie 3
for ( ; ; )
instrukcja (instrukcje) A
instrukcja (instrukcje) A
int
int i, wynik = 0;
i, wynik = 0;
Przykład 1:
wyra\enie 1
wyra\enie 1
for
for (i=10; i < 20; i=i+3 )
(i=10; i < 20; i=i+3 )
(inicjujące)
(inicjujące)
wynik = wynik + i;
wynik = wynik + i;
wyra\enie 3
wyra\enie 3
(przyrostowe)
(przyrostowe)
float i, potega;
float i, potega;
Przykład 2:
wyra\enie 2 `" 0
wyra\enie 2 wyra\enie 2 = 0 for 10; i=i-1 )
wyra\enie 2 for (i=200; i - 10; i=i-1 )
(i=200; i -
TAK NIE
(sterujące) potega = i * i;
(sterujące) potega = i * i;
(prawda) (fałsz)
for
for (;;)
(;;)
instrukcja Przykład 3:
instrukcja
;;
(instrukcje) A
(instrukcje) A
Instrukcje 84
84
C++:
C++: instrukcja iteracyjna for
instrukcja iteracyjna for
wyra\enie 1 wyra\enie 2 wyra\enie 3
wyra\enie 1 wyra\enie 2 wyra\enie 3
for ( ; ; )
instrukcja (instrukcje) A
instrukcja (instrukcje) A
float i, wynik = 0;
float i, wynik = 0;
Przykład 1:
wyra\enie 1
wyra\enie 1
for
for (i=0; i < 100; i=i+1)
(i=0; i < 100; i=i+1)
(inicjujące)
(inicjujące)
printf(  %f %f\n , i, i*i);
printf(  %f %f\n , i, i*i);
wyra\enie 3
wyra\enie 3
float odsetki = 0;
float odsetki = 0;
(przyrostowe)
(przyrostowe) Przykład 2:
float oprocentowanie = 0,08;
float oprocentowanie = 0,08;
float kapital = 100;
float kapital = 100;
wyra\enie 2 `" 0
wyra\enie 2 wyra\enie 2 = 0
wyra\enie 2 int rok, lata;
int rok, lata;
TAK NIE
(sterujące)
(sterujące)
(prawda) (fałsz)
lata = 4;
lata = 4;
for
for (rok=0; rok < lata; rok=rok+1)
(rok=0; rok < lata; rok=rok+1)
{{
odsetki = kapital * oprocentowanie;
odsetki = kapital * oprocentowanie;
instrukcja
instrukcja
kapital = kapital + odsetki;
kapital = kapital + odsetki;
(instrukcje) A
(instrukcje) A
}}
printf(  Kapital po %d latach wynosi %f zl.\n ,
printf(  Kapital po %d latach wynosi %f zl.\n ,
lata, kapital);
lata, kapital);
B. Butryło 42
Metodyki i technki programowania 1 2011
Instrukcje 85
85
Przykład:
Przykład: funkcje / instrukcje
funkcje / instrukcje
Cyfrowe przetwarzanie sygnału w oscyloskopie cyfrowym.
Kilka informacji:
" długość rekordu pamięci 4kS.
" szybkość próbkowania w czasie rzeczywistym 250 MS/s.
" szybkość próbkowania w czasie ekwiwalentnym 50 GS/s.
Instrukcje 86
86
Przykład:
Przykład: funkcje / instrukcje
funkcje / instrukcje
Filtr cyfrowy
SOI (ang. FIR) NOI (ang. IIR)
b
-
xn = sn ą nn DF yn xn = sn ą nn + DF yn
N M
N
yn = xn-k - yn-k
yn = xn-k
k k
"a "b
k
"a
k =0 k =1
k =0
B. Butryło 43
Metodyki i technki programowania 1 2011
Instrukcje 87
87
Przykład:
Przykład: funkcje / instrukcje
funkcje / instrukcje
yn = a0xn + a1xn+1 + a2xn+2
Instrukcje 88
88
Przykład:
Przykład: funkcje / instrukcje
funkcje / instrukcje
void filtr( float * dane, float * wyniki )
void filtr( float * dane, float * wyniki )
#include
{
{
#include
extern int okno_start;
using namespace std; extern int okno_start;
extern int liczba_probek;
extern int liczba_probek;
double licz_calke(double, double, double);
double funkcja( double, double);
extern int filtr_rzad;
extern int filtr_rzad;
extern float filtr[3];
extern float filtr[3];
int filtrowanie(int okno_start , int
liczba_probek)
float sygnal_n, sygnal_n_1, sygnal_n_2;
{ float sygnal_n, sygnal_n_1, sygnal_n_2;
extern float * kanal_A; int sam;
int sam;
extern float * kanal_B;
sygnal_n = dane[okno_start];
sygnal_n = dane[okno_start];
float * out_A_filter;
sygnal_n_1 = dane[okno_start + 1];
sygnal_n_1 = dane[okno_start + 1];
float * out_B_filter;
for ( sam = 0; sam < liczba_probek; sam = sam + 1 )
out_A_filter = new float [liczba_probek]; for ( sam = 0; sam < liczba_probek; sam = sam + 1 )
out_B_filter = new float [liczba_probek]; {
{
sygnal_n_2 = dane[okno_start + 2 + sam];
sygnal_n_2 = dane[okno_start + 2 + sam];
if (filtr_A_on == 1)
filtr( kanal_A, out_A_filter );
wyniki[sam] = filtr[0] * sygnal_n + filtr[1] * sygnal_n_1
wyniki[sam] = filtr[0] * sygnal_n + filtr[1] * sygnal_n_1
+ filtr[2] * sygnal_n_2;
+ filtr[2] * sygnal_n_2;
if (filtr_B_on == 1)
filtr( kanal_B, out_B_filter );
} sygnal_n = sygnal_n_1;
sygnal_n = sygnal_n_1;
sygnal_n_1 = sygnal_n_2;
sygnal_n_1 = sygnal_n_2;
}
}
}
yn = a0xn + a1xn+1 + a2xn+2 }
B. Butryło 44
Metodyki i technki programowania 1 2011
Pierwszy program ... 89
89
Jak
Jak to wygląda  banalny program
to wygląda  banalny program
C: proceduralnie C++: proceduralnie
C: proceduralnie C++: proceduralnie
#include #include
using namespace std;
void main ( void ) void main ( void )
{ {
int stawka_vat = 0; int stawka_vat = 0;
float cena_brutto; float cena_brutto;
float cena_netto = 10.0f; float cena_netto = 10.0f;
stawka_vat = 22; stawka_vat = 22;
cena_brutto = cena_netto * cena_brutto = cena_netto *
(1.0 + stawka_vat / 100.0 ); (1.0 + stawka_vat / 100.0 );
printf("Cena brutto= %f \n , cena_brutto ); cout << "Cena brutto= " << cena_brutto <} }
Uwaga na
błędy obliczeń
(zastosowano
float)!
B. Butryło 45


Wyszukiwarka

Podobne podstrony:
2011 05 P
BHP styczeń 2011 odpowiedzi wersja x
ZARZĄDZANIE WARTOŚCIĄ PRZEDSIĘBIORSTWA Z DNIA 26 MARZEC 2011 WYKŁAD NR 3
Fakty nieznane , bo niebyłe Nasz Dziennik, 2011 03 16
Kalendarz roku szkolnego na lata 2011 2029
test zawodowy 7 06 2011
2011 experimental problems
Mirota 1 2011
2011 kwiecień
Środowa Audiencja Generalna Radio Maryja, 2011 03 09
Am J Epidemiol 2011 Shaman 127 35
TEST 2011 2012 Wojewodzki Konkurs Fizyczny etap rejonowy
Fizyka Wsp 2011

więcej podobnych podstron