background image

Metodyki i technki programowania 1

2011

B. Butryło

1

Metodyki i techniki

programowania 1

Metodyki i techniki

programowania 1

•Kierunek:

elektronika i telekomunikacja

•Studia:

I stopnia

•Kierunek:

elektronika i telekomunikacja

•Studia:

I stopnia

Programowanie

C++

Programowanie

C++

background image

Metodyki i technki programowania 1

2011

B. Butryło

2

Języki programowania

3

3

Języki

Języki

Klasyfikacja języków

Klasyfikacja języków

niskiego poziomu

niskiego poziomu

specjalistyczne

specjalistyczne

maszynowe

maszynowe

wysokiego poziomu

wysokiego poziomu

interpretowane

interpretowane

kompilowane

kompilowane

potokowe

potokowe

blokowo-strukturalne

blokowo-strukturalne

proceduralne

proceduralne

obiektowe

obiektowe

asemblery

asemblery

makroasemblery

makroasemblery

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)

konwersacyjne (Forcon, Jean)

konwersacyjne (Forcon, Jean)

inne

inne

C ... C++ ... Java

4

4

Ewolucja języków: porównanie C i C++

Ewolucja języków: porównanie C i C++

Programowanie proceduralne

• Grupowanie instrukcji (funkcje).
• Program jako zbiór funkcji.
• Funkcja: zbiór instrukcji wykonujących operacje 

na lokalnym i/lub ogólnym zestawie danych.

• Funkcje komunikują się między sobą przez 

przekazywanie danych (argumentów).

Programowanie proceduralne

• Grupowanie instrukcji (funkcje).
• Program jako zbiór funkcji.
• Funkcja: zbiór instrukcji wykonujących operacje 

na lokalnym i/lub ogólnym zestawie danych.

• Funkcje komunikują się między sobą przez 

przekazywanie danych (argumentów).

Programowanie proceduralne i 

programowanie obiektowo 

zorientowane

• Program jako zbiór obiektów.
• Obiekt składa się z:

• atrybutów/dane/pola - zestawów danych,
• usług/metod– jednej lub kilku funkcji, 

które mogą przetwarzać atrybuty.

• Struktura klas ma postać hierarchiczną.
• Obiekty komunikują się przez metody/ 

komunikaty.

Programowanie proceduralne i 

programowanie obiektowo 

zorientowane

• Program jako zbiór obiektów.
• Obiekt składa się z:

• atrybutów/dane/pola - zestawów danych,
• usług/metod– jednej lub kilku funkcji, 

które mogą przetwarzać atrybuty.

• Struktura klas ma postać hierarchiczną.
• Obiekty komunikują się przez metody/ 

komunikaty.

• Programowanie proceduralne, imperatywne.
• Instrukcje strukturalne:

podejmowanie decyzji (if), wybór jednego z wielu przypadków (switch), 

instrukcje iteracyjne (for, while, do ... while).

• Zbiór typów podstawowych: c

ałkowitoliczbowe, zmiennopozycyjne, znakowe.

• MoŜliwość tworzenia i wykorzystania typów pochodnych: 

tablice, struktury, unie.

• Identyczne: zestaw podstawowych słów kluczowych, kolejność operatorów, 

operowanie na wskaźnikach, ...  

• Programowanie proceduralne, imperatywne.
• Instrukcje strukturalne:

podejmowanie decyzji (if), wybór jednego z wielu przypadków (switch), 

instrukcje iteracyjne (for, while, do ... while).

• Zbiór typów podstawowych: c

ałkowitoliczbowe, zmiennopozycyjne, znakowe.

• MoŜliwość tworzenia i wykorzystania typów pochodnych: 

tablice, struktury, unie.

• Identyczne: zestaw podstawowych słów kluczowych, kolejność operatorów, 

operowanie na wskaźnikach, ...  

C

C

C++

C++

background image

Metodyki i technki programowania 1

2011

B. Butryło

3

C ... C++ ... Java

5

5

Ewolucja języków

Ewolucja języków

• Język ogólnego stosowania.
• Programowanie proceduralne lub 

programowanie obiektowo-zorientowane.

• Język kompilowany.
• Język niezaleŜny od architektury 

(wysokiego poziomu). 

• Zmienna / zróŜnicowana reprezentacja 

danych. 

• Język o słabo określonych typach danych, 

ale o ścisłej kontroli tych typów.

• Brak automatycznego zarządzania 

pamięcią.

• Przenaszalność kodów źródłowych.
• Język programowania systemowego (np. 

Unix, interfejs MS Windows).

C++

C++

Java

Java

• Język ogólnego stosowania.
• Programowanie obiektowe.

• Język kompilowano-interpretowany. 
• Język niezaleŜny od architektury 

(wysokiego poziomu).

• Stała reprezentacja danych. 

Wbudowany Unicode.

• Ścisła kontrola typów zmiennych i ich 

inicjowania przed uŜyciem.

• Bezpieczeństwo (wirtualna maszyna, 

automatyczna obsługa pamięci).

• Programowanie  z uŜyciem wątków.
• Wbudowane narzędzia pracy w sieci. 

• Przenaszalność kodu wynikowego (!?).
• Język internetu. 

• Wydajność (ok. 50 – 100% C++).

C++

C++

C++

C++

C++

C++

C++

C++

Ogólna charakterystyka C++,  Java

6

6

C/C++: kompilowany

C/C++: kompilowany

Kompilator (compiler)

Kompilator (

Kompilator (

compiler

compiler

)

)

Plik 

obiektowy 

1

*.OBJ

Plik 

obiektowy 

2

*.OBJ

Plik 

obiektowy 

N

*.OBJ

Plik wykonywalny, np.: 

*.EXE

*.*

Plik wykonywalny, np.: 

*.EXE

*.*

C++

C++

C++

C++

C++

C++

C++

C++

Konsolidator (linker)

Konsolidator (linker)

Konsolidator (linker)

Standardowa biblioteka A

Standardowa biblioteka B

Standardowa biblioteka C

...

Pliki 

nagłówkowe

Pliki 

nagłówkowe

Pliki 

nagłówkowe

Plik 

źródłowy 1

*.C

*.CPP

*.CXX

Plik 

źródłowy 2

*.C

*.CPP

*.CXX

Plik 

źródłowy N

*.C

*.CPP

*.CXX

*.obj  - niewykonywalny plik, 

zawierający instrukcje 

maszynowe specyficzne dla danej 

platformy sprzętowej (odwołania 

do funkcji CPU) i OS (np. 

odwołania do API). Powstaje kod 
maszynowy niezaleŜny od języka 

programowania ale zawierający 

odwołania do zastosowanego 

środowiska.

*.obj  - niewykonywalny plik, 

zawierający instrukcje 

maszynowe specyficzne dla danej 

platformy sprzętowej (odwołania 

do funkcji CPU) i OS (np. 

odwołania do API). Powstaje kod 
maszynowy niezaleŜny od języka 

programowania ale zawierający 

odwołania do zastosowanego 

środowiska.

Konsolidator tworzy wykonywalny 

plik (do uruchomienia), przez 

połączenie plików *.obj. Pliki *.obj

mogą być z róŜnych środowisk. 

Powstaje kod maszynowy zaleŜny 

od platformy.

Konsolidator tworzy wykonywalny 

plik (do uruchomienia), przez 

połączenie plików *.obj. Pliki *.obj

mogą być z róŜnych środowisk. 

Powstaje kod maszynowy zaleŜny 

od platformy.

background image

Metodyki i technki programowania 1

2011

B. Butryło

4

Ogólna charakterystyka C++,  Java

7

7

Java: kompilowany+interpretowany

Java: kompilowany+interpretowany

Plik 

źródłowy 1

*.java

Plik 

źródłowy 2

*.java

public class test
{
double alfa, beta;
...
metoda_test()

alfa = 3.14;
beta = 1;
...

javac (kompilator)

javac

javac

(kompilator)

(kompilator)

Kod binarny interpretowany

*.class

Kod binarny interpretowany

*.class

Java 

Virtual 

Machine

PC

Java 

Virtual 

Machine

Mac

Java 

Virtual 

Machine

Super-

komp.

bytecode, b-code: kod binarny 

dla wirtualnej maszyny javy 

(JVM). MoŜliwe tworzenie b-kody 

z innych języków i uruchomienie 

przez JVM.

W przypadku Javy realizowane 

pliki mają zwykle rozszerzenia 

*.class lub *.jar

bytecode, b-code: kod binarny 

dla wirtualnej maszyny javy 

(JVM). MoŜliwe tworzenie b-kody 

z innych języków i uruchomienie 

przez JVM.

W przypadku Javy realizowane 

pliki mają zwykle rozszerzenia 

*.class lub *.jar

Słowa kluczowe

C++

Słowa kluczowe

C++

background image

Metodyki i technki programowania 1

2011

B. Butryło

5

C ... C++ ... Java

9

9

Słowa zarezerwowane

Słowa zarezerwowane

C: proceduralnie

C: proceduralnie

asm

auto

bool

break
case

catch

char

class

const

const_cast

continue
default

delete

do
double

dynamic_cast

else
enum

explicit

extern

false

float
for

friend

goto
if

inline

int
long

mutable
namespace
new
operator
private
protected
public

register

reinterpret_cast

return

short
signed
sizeof
static

static_cast

struct
switch

template
this
throw
true
try

typedef

typeid
typename

union
unsigned

using
virtual

void
volatile

wchar_t

while

asm

auto

bool

break
case

catch

char

class

const

const_cast

continue
default

delete

do
double

dynamic_cast

else
enum

explicit

extern

false

float
for

friend

goto
if

inline

int
long

mutable
namespace
new
operator
private
protected
public

register

reinterpret_cast

return

short
signed
sizeof
static

static_cast

struct
switch

template
this
throw
true
try

typedef

typeid
typename

union
unsigned

using
virtual

void
volatile

wchar_t

while

C++: proceduralnie / OOP

C++: proceduralnie / OOP

słowa kluczowe  

nazwy 

zabronione

słowa kluczowe  

nazwy 

zabronione

C ... C++ ... Java

10

10

Słowa zarezerwowane

Słowa zarezerwowane

Java: obiektowo

Java: obiektowo

abstract
boolean
break 
byte
case 
catch
char
class
const

(*)

continue
default
do
double
else
extends
final
finally

float
for
goto

(*)

if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return

short
static
super
switch
synchronized
this
throw
throws
transient

(*)

try
void
volatile
while

Nie są słowami kluczowymi, ale są zastrzeŜone:
null, true, false

asm
auto
bool
break
case
catch
char
class
const
const_cast
continue
default
delete
do
double
dynamic_cast
else
enum
explicit
extern
false

float
for
friend
goto
if 
inline
int
long
mutable
namespace
new
operator
private
protected
public
register

reinterpret_cast

return

short
signed
sizeof
static
static_cast
struct
switch
template
this
throw
true
try
typedef
typeid
typename
union
unsigned
using
virtual
void
volatile
wchar_t
while

C++: proceduralnie / OOP

C++: proceduralnie / OOP

background image

Metodyki i technki programowania 1

2011

B. Butryło

6

C ... C++ ... Java

11

11

Słowa zarezerwowane

Słowa zarezerwowane

Java: obiektowo

Java: obiektowo

abstract

boolean

break

byte

case
catch
char
class

const

(*)

continue
default
do
double
else

extends
final
finally

float
for

goto

(*)

if

implements
import
instanceof

int

interface

long

native

new

package

private
protected
public
return

short
static

super

switch

synchronized

this
throw

throws
transient

(*)

try
void
volatile
while

Nie są słowami kluczowymi, ale są zastrzeŜone:
null, true, false

asm
auto

bool

break
case
catch
char
class
const

const_cast

continue
default

delete

do
double

dynamic_cast

else

enum
explicit
extern
false

float
for

friend

goto
if

inline

int
long

mutable
namespace

new

operator

private
protected
public

register

reinterpret_cast

return

short

signed
sizeof

static

static_cast
struct

switch

template

this
throw

true

try

typedef
typeid
typename
union
unsigned
using
virtual

void
volatile

wchar_t

while

C++: proceduralnie / OOP

C++: proceduralnie / OOP

słowa kluczowe  

nazwy 

zabronione

słowa kluczowe  

nazwy 

zabronione

Struktura programu w C++

(programowanie 

blokowo - strukturalne)

Struktura programu w C++

(programowanie 

blokowo - strukturalne)

background image

Metodyki i technki programowania 1

2011

B. Butryło

7

Paradygmaty

13

13

{

{

}

}

{

{

}

}

§

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 źródłowych.

§

MoŜliwość tworzenia  i  wykorzystania  typów 
pochodnych.

Programowanie blokowo-strukturalne

Programowanie blokowo-strukturalne

Struktura programu w C++ (programowanie strukturalne)

14

14

Najprostszy program w C++

Najprostszy program w C++

void main( void )
{
}

funkcja główna (definicja):

main

background image

Metodyki i technki programowania 1

2011

B. Butryło

8

Struktura programu w C++ (programowanie strukturalne)

15

15

Program z przetwarzaniem (1)

Program z przetwarzaniem (1)

void main( void )
{
int a;
int b = 20;

a = 30;
a=a+b;
}

funkcja główna (definicja):

main

Struktura programu w C++ (programowanie strukturalne)

16

16

Program z przetwarzaniem (2)

Program z przetwarzaniem (2)

#include <cmath>

void main( void )
{
double radiany, stopnie;
int a = 30; 

// re

int b = 20;

// im

radiany = atan2( b; a );
stopnie = radiany * 180 / 3.14;
}

funkcja główna (definicja):

main

deklaracja plików nagłówkowych

Re

Im

a

b

radiany
stopnie

Komentarze:

/* komentarz 
wieloliniowy */

// komentarz w 1 linii

Komentarze:

/* komentarz 
wieloliniowy */

// komentarz w 1 linii

background image

Metodyki i technki programowania 1

2011

B. Butryło

9

Struktura programu w C++ (programowanie strukturalne)

17

17

Program z przetwarzaniem (3) i komunikacją

Program z przetwarzaniem (3) i komunikacją

#include <cmath>
#include <iostream>

using namespace std;

void main( void )
{
double radiany, stopnie;
int a = 30; 

// re

int b = 20;

// im

radiany = atan2( b; a );
stopnie = radiany * 180 / 3.14;
cout << "Wynik obliczen: " << endl;
cout << stopnie << endl;
}

funkcja główna (definicja):

main

deklaracja plików nagłówkowych

UŜycie zmiennych 

środowiskowych, nazw typów 

pochodnych i złoŜonych 

wymaga wskazania jaką 

przestrzeń nazw uŜytkujemy. 

MoŜna wskazać raz:

using namespace std;

UŜycie zmiennych 

środowiskowych, nazw typów 

pochodnych i złoŜonych 

wymaga wskazania jaką 

przestrzeń nazw uŜytkujemy. 

MoŜna wskazać raz:

using namespace std;

Standardowe 

funkcje przed 

uŜyciem musza być 

zdefiniowane 

przez uŜycie 

plików 

nagłówkowych.

Standardowe 

funkcje przed 

uŜyciem musza być 

zdefiniowane 

przez uŜycie 

plików 

nagłówkowych.

Struktura programu w C++ (programowanie strukturalne)

18

18

Program z własnymi funkcjami (1)

Program z własnymi funkcjami (1)

#include <cmath>
#include <iostream>

using namespace std;

/*******************/

double licz_stopnie( double wart_radian)
{
stopnie = wart_radiany * 180 / 3.14;
return stopnie;
}

/*******************/

void main( void )
{
double radiany, stopnie;
int a = 30; 

// re

int b = 20;

// im

radiany = atan2( b; a );
stopnie = licz_stopnie( radiany );

cout << "Wynik obliczen: " << stopnie << endl;
}

funkcja główna (definicja):

main

deklaracja plików nagłówkowych

Własne funkcje naleŜy 

definiować przed ich 

uŜyciem.

Sposób najprostszy ale 

utrudnia analizę programu.

funkcja pomocnicza (definicja):

licz_stopnie

background image

Metodyki i technki programowania 1

2011

B. Butryło

10

Struktura programu w C++ (programowanie strukturalne)

19

19

Program z własnymi funkcjami (2)

Program z własnymi funkcjami (2)

#include <cmath>
#include <iostream>
using namespace std;

double licz_stopnie( double);

//deklaracja

/*******************/

void main( void )
{
double radiany, stopnie;
int a = 30; 

// re

int b = 20;

// im

radiany = atan2( b; a );
stopnie = licz_stopnie( radiany );
cout << "Wynik obliczen: " << endl;
cout << stopnie << endl;
}

/*******************/

double licz_stopnie( double wart_radian)
{
stopnie = wart_radiany * 180 / 3.14;
return stopnie;
}

funkcja główna (definicja):

main

deklaracja plików nagłówkowych

Własne funkcje 

moŜna 

zadeklarować a 

potem dopiero 

definiować.

funkcja pomocnicza (deklaracja):

licz_stopnie

funkcja pomocnicza (definicja):

licz_stopnie

Struktura programu w C++ (programowanie strukturalne)

20

20

Program z własnymi funkcjami (3)

Program z własnymi funkcjami (3)

#include <cmath>
#include <iostream>
#include "moje_funkcje"
using namespace std;

/*******************/

void main( void )
{
double radiany, stopnie;
int a = 30; 

// re

int b = 20;

// im

radiany = atan2( b; a );
stopnie = licz_stopnie( radiany );
cout << "Wynik obliczen: " << endl;
cout << stopnie << endl;
}

Zalecane 

tworzenie 

programów wielo-

modułowych, 

złoŜonych z wielu 

plików. 

funkcja główna 
(definicja):

main

deklaracja plików 

nagłówkowych

funkcja pomocnicza 
(definicja):
licz_stopnie

deklaracja plików 

nagłówkowych

#include <cmath>
#include <iostream>
using namespace std;

double licz_stopnie( double);

/*******************/

double licz_stopnie( double
wart_radian)
{
stopnie = wart_radiany * 180 / 3.14;
return stopnie;
}

Plik: moje_funkcje

background image

Metodyki i technki programowania 1

2011

B. Butryło

11

Paradygmaty

21

21

C++: struktura pliku źródłowego

C++: struktura pliku źródłowego

pliki nagłówkowe dołączane w trakcie kompilacji

pliki nagłówkowe dołączane w trakcie kompilacji

deklaracja i definicja funkcji B

deklaracja i definicja funkcji B

deklaracja i definicja funkcji main

deklaracja i definicja funkcji main

deklaracja i definicja funkcji A

deklaracja i definicja funkcji A

Paradygmaty

22

22

C++: struktura pliku źródłowego

C++: struktura pliku źródłowego

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

zmienne globalne dostępne w programie

zmienne globalne dostępne w programie

deklaracja i definicja funkcji D

deklaracja i definicja funkcji D

deklaracja i definicja funkcji B

deklaracja i definicja funkcji B

deklaracja i definicja funkcji main

deklaracja i definicja funkcji main

deklaracja i definicja funkcji A

deklaracja i definicja funkcji A

deklaracja i definicja funkcji E

deklaracja i definicja funkcji E

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

zmienne globalne dostępne w programie

zmienne globalne dostępne w programie

deklaracja i definicja funkcji D

deklaracja i definicja funkcji D

deklaracja i definicja funkcji B

deklaracja i definicja funkcji B

deklaracja i definicja funkcji main

deklaracja i definicja funkcji main

definicja funkcji E

definicja funkcji E

definicja funkcji A

definicja funkcji A

deklaracja funkcji A

deklaracja funkcji A

deklaracja funkcji E

deklaracja funkcji E

background image

Metodyki i technki programowania 1

2011

B. Butryło

12

Paradygmaty

23

23

C++: zbiór plików tworzących kod źródłowy

C++: zbiór plików tworzących kod źródłowy

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

deklaracja i definicja funkcji main

deklaracja i definicja funkcji main

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

zmienne globalne dostępne w programie

zmienne globalne dostępne w programie

deklaracja i definicja funkcji D

deklaracja i definicja funkcji D

deklaracja i definicja funkcji B

deklaracja i definicja funkcji B

definicja funkcji E

definicja funkcji E

definicja funkcji A

definicja funkcji A

deklaracja funkcji A

deklaracja funkcji A

deklaracja funkcji E

deklaracja funkcji E

deklaracja i definicja funkcji A1

deklaracja i definicja funkcji A1

deklaracja i definicja funkcji A2

deklaracja i definicja funkcji A2

deklaracja i definicja funkcji A3

deklaracja i definicja funkcji A3

deklaracja i definicja funkcji A4

deklaracja i definicja funkcji A4

Paradygmaty

24

24

C++: struktura programu

C++: struktura programu

Program

Funkcja

A

WyraŜenia, 

instrukcje 

wykonywanie 

operacji na 

zmiennych

Funkcja

E

Funkcja

E

zmienne

instrukcje

wyraŜenia

Funkcja

B

Funkcja

B

zmienne

instrukcje

wyraŜenia

Funkcja

D

Funkcja

D

zmienne

instrukcje

wyraŜenia

Funkcja main

Funkcja main

zmienne

instrukcje

wyraŜenia

Funkcja

S2

Funkcja

S2

zmienne

instrukcje

wyraŜenia

Funkcja

S1

Funkcja

S1

zmienne

instrukcje

wyraŜenia

Enter

background image

Metodyki i technki programowania 1

2011

B. Butryło

13

Paradygmaty

25

25

C: struktura pliku źródłowego *.C

C: struktura pliku źródłowego *.C

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>

float funkcja( float w_x )
{
float w_y;
w_y = 3 * w_x * w_x * w_x + 2 * w_x * w_x - 40 * w_x + 10;
return( w_y );
}

int main (void)
{
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();
}

Enter

•Średnik.

•Instrukcja grupująca.

•Komentarz.

•Wartość logiczna (?!).

•Średnik.

•Instrukcja grupująca.

•Komentarz.

•Wartość logiczna (?!).

C++:

standardowe 

elementy 

środowiska programowania

C++:

standardowe 

elementy 

środowiska programowania

background image

Metodyki i technki programowania 1

2011

B. Butryło

14

Struktura programu w C++ (programowanie strukturalne)

27

27

Pliki nagłówkowe (header files)

Pliki nagłówkowe (header files)

Dołączanie plików nagłówkowych
#include <

nazwa_pliku

>

#include "nazwa_pliku"

<algorithm>
<bitset>
<complex>
<deque>
<exception>
<fstream>
<functional>
<iomanip>
<ios>
<iosfwd>
<iostream>
<istream>
<iterator>
<limits>
<list>
<locale>
<map>
<memory>
<new>
<numeric>
<ostream>
<queue>
<set>
<sstream>
<stack>

<algorithm>
<bitset>
<complex>
<deque>
<exception>
<fstream>
<functional>
<iomanip>
<ios>
<iosfwd>
<iostream>
<istream>
<iterator>
<limits>
<list>
<locale>
<map>
<memory>
<new>
<numeric>
<ostream>
<queue>
<set>
<sstream>
<stack>

<stdexcept>
<streambuf>
<string>
<typeinfo>
<utility>
<valarray>
<vector>

<cassert>
<cctype>
<cerrno>
<cfloat>
<ciso646>
<climits>
<clocale>
<cmath>
<csetjmp>
<csignal>
<cstdarg>
<cstddef>
<cstdio>
<cstdlib>
<cstring>
<ctime>
<cwchar>
<cwtype>

NaleŜy unikać 

stosowania starych 

nazw plików 

nagłówkowych z 

języka C. 

NaleŜy unikać 

stosowania starych 

nazw plików 

nagłówkowych z 

języka C. 

Struktura programu w C++ (programowanie strukturalne)

28

28

Pliki nagłówkowe (header files)

Pliki nagłówkowe (header files)

...
#include <cmath>
...

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 <complex>
...

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:

+  - *  /  ==  !=  +=  -=  *=  /=

background image

Metodyki i technki programowania 1

2011

B. Butryło

15

Struktura programu w C++ (programowanie strukturalne)

29

29

Pliki nagłówkowe (header files)

Pliki nagłówkowe (header files)

...
#include <iostream>
...

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 <ctime>
...

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++:

przestrzeń nazw

C++:

przestrzeń nazw

background image

Metodyki i technki programowania 1

2011

B. Butryło

16

Struktura programu w C++ (programowanie strukturalne)

31

31

Włączenie / aktywacja przestrzeni

Włączenie / aktywacja przestrzeni

Deklaracja przestrzeni

Deklaracja przestrzeni

Program

Przestrzeń nazw – widoczność, dostęp

Przestrzeń nazw – widoczność, dostęp

namespace

nazwa_przestrzeni

{

nazwy / zmienne / funkcje / klasy

}

using namespace

nazwa_przestrzeni

;

namespace std

namespace std

namespace moje

namespace moje

namespace bibl

namespace bibl

standardowe

specjalne 
biblioteki

Struktura programu w C++ (programowanie strukturalne)

32

32

Przestrzeń nazw – widoczność, dostęp

Przestrzeń nazw – widoczność, dostęp

namespace kal_julianski
{
int dzien;
int miesiac;
int rok;
}

#include …

using namespace std;

main()
{

using namespace kal_julianski;

using namespace kal_aaaa;

}

namespace kal_aaaa
{
int dzien;
int miesiac;
int rok;
}

background image

Metodyki i technki programowania 1

2011

B. Butryło

17

Nowe zagadnienie ...

33

33

Dodatek:

klasa (!) complex

Dodatek:

klasa (!) complex

Klasy standardowe

34

34

Liczby zespolone

Liczby zespolone

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <complex>

complex<double> cmp_1, cmp_2, cmp_3;
double d1, d2, d3;

...

complex<double> jedynka_rzeczyw;
jedynka_rzeczyw = complex<double>( 1.0, 0.0);

complex<double> zero_zespolone = complex<double>( 0.0, 0.0);
complex<double> jedynka_urojona = complex<double>( 0.0, 1.0);

complex<double> * zespolony_wektor;
zespolony_wektor = new complex<double> [ dlugosc ];

cmp_1 = complex<double>( 2.0, 3.0);
cmp_2 = complex<double>( dane1*dane_pi, mnoznik*dane2);

zespolony_wektor[0] = cmp_1 * cmp_2;
d1 = real( zespolony_wektor[0]);
d2 = imag( zespolony_wektor[0]);

cout << real( zespolony_wektor[1]) << endl;
cout << imag( zespolony_wektor[1]) << endl;
cout << sqrt( d1 * d1 + d2 * d2 ) << "   "  << atan2( d2, d1 ) << endl; 

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <complex>

complex<double> cmp_1, cmp_2, cmp_3;
double d1, d2, d3;

...

complex<double> jedynka_rzeczyw;
jedynka_rzeczyw = complex<double>( 1.0, 0.0);

complex<double> zero_zespolone = complex<double>( 0.0, 0.0);
complex<double> jedynka_urojona = complex<double>( 0.0, 1.0);

complex<double> * zespolony_wektor;
zespolony_wektor = new complex<double> [ dlugosc ];

cmp_1 = complex<double>( 2.0, 3.0);
cmp_2 = complex<double>( dane1*dane_pi, mnoznik*dane2);

zespolony_wektor[0] = cmp_1 * cmp_2;
d1 = real( zespolony_wektor[0]);
d2 = imag( zespolony_wektor[0]);

cout << real( zespolony_wektor[1]) << endl;
cout << imag( zespolony_wektor[1]) << endl;
cout << sqrt( d1 * d1 + d2 * d2 ) << "   "  << atan2( d2, d1 ) << endl; 

Dostępne operatory

-

*= 

/=

+= 

-=

=
>>

<<

Dostępne operatory

-

*= 

/=

+= 

-=

=
>>

<<

Dostępne funkcje

sqrt

pow

exp

log

sin

cos

sinh

cosh

atan2

Dostępne funkcje

sqrt

pow

exp

log

sin

cos

sinh

cosh

atan2

background image

Metodyki i technki programowania 1

2011

B. Butryło

18

35

35

Funkcje

deklarowanie i definiowanie 

własnych funkcji

Funkcje

deklarowanie i definiowanie 

własnych funkcji

Funkcje

36

36

C++: funkcja, definicja funkcji

C++: funkcja, definicja funkcji

typ 

wyniku

nazwa 

funkcji

nazwa 

funkcji

(

)

deklaracja 

argumentów

deklaracja 

argumentów

{

}

wewnętrzna część funkcji:
• deklaracje zmiennych;
• wyraŜenia;
• przetwarzanie danych;

void pusta()
{
}

void pusta()
{
}

pusta()
{
}

pusta()
{
}

Przykład 1:

Przykład 2:

background image

Metodyki i technki programowania 1

2011

B. Butryło

19

Funkcje

37

37

C++: funkcja, definicja funkcji

C++: funkcja, definicja funkcji

typ 

wyniku

nazwa 

funkcji

nazwa 

funkcji

(

)

deklaracja 

argumentów

deklaracja 

argumentów

{

}

wewnętrzna część funkcji:
• deklaracje zmiennych;
• wyraŜenia;
• przetwarzanie danych;

int jedynka()
{
int a;
a= 1;
return (a);
}

int jedynka()
{
int a;
a= 1;
return (a);
}

int jedynka()
{
return (1);
}

int jedynka()
{
return (1);
}

Przykład 1:

Przykład 2:

Funkcje

38

38

C++: funkcja, definicja funkcji

C++: funkcja, definicja funkcji

typ 

wyniku

nazwa 

funkcji

nazwa 

funkcji

(

)

deklaracja 

argumentów

deklaracja 

argumentów

{

}

wewnętrzna część funkcji:
• deklaracje zmiennych;
• wyraŜenia;
• przetwarzanie danych;

float modul_liczby( float a, float b)
{
float wynik;
wynik= sqrt( a*a + b*b);
return (wynik);
}

float modul_liczby( float a, float b)
{
float wynik;
wynik= sqrt( a*a + b*b);
return (wynik);
}

float suma( int a, float b)
{
return (b+a);
}

float suma( int a, float b)
{
return (b+a);
}

Przykład 1:

Przykład 2:

background image

Metodyki i technki programowania 1

2011

B. Butryło

20

Funkcje

39

39

C++: funkcja, definicja funkcji

C++: funkcja, definicja funkcji

typ 

wyniku

nazwa 

funkcji

nazwa 

funkcji

(

)

deklaracja 

argumentów

deklaracja 

argumentów

{

}

wewnętrzna część funkcji:
• deklaracje zmiennych;
• wyraŜenia;
• przetwarzanie danych;

float funkcja( float w_x )
{
float w_y;

w_y = 

3 * w_x * w_x * w_x + 
2 * w_x * w_x –
40 * w_x + 10;

return( w_y );
}

float funkcja( float w_x )
{
float w_y;

w_y = 

3 * w_x * w_x * w_x + 
2 * w_x * w_x –
40 * w_x + 10;

return( w_y );
}

Przykład 1:

Funkcje

40

40

C++: funkcja, definicja funkcji

C++: funkcja, definicja funkcji

typ 

wyniku

nazwa 

funkcji

nazwa 

funkcji

(

)

deklaracja 

argumentów

deklaracja 

argumentów

{

}

wewnętrzna część funkcji:
• deklaracje zmiennych;
• wyraŜenia;
• przetwarzanie danych;

int main (void)
{
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( "x = %f, y(x) = %f.\n", x, y);
}

else

printf( "Nie ma miejsca zerowego w przedziale.\n" );

getch();
}

int main (void)
{
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( "x = %f, y(x) = %f.\n", x, y);
}

else

printf( "Nie ma miejsca zerowego w przedziale.\n" );

getch();
}

Przykład 1

background image

Metodyki i technki programowania 1

2011

B. Butryło

21

Funkcje

41

41

Przekazywanie argumentów

Przekazywanie argumentów

typ 

wyniku

nazwa 

funkcji

nazwa 

funkcji

(

)

deklaracja 

argumentów

deklaracja 

argumentów

{

}

wewnętrzna część funkcji:
• deklaracje zmiennych;
• wyraŜenia;
• przetwarzanie danych;

przez wartość

double oblicz_kat( double x, int flaga )
{
double z;

if (flaga == 1)

z=x*2*M_PI/360;

else if (flaga == 2)  z=x*100/360;

x=0;
return( z );
}

double oblicz_kat( double x, int flaga )
{
double z;

if (flaga == 1)

z=x*2*M_PI/360;

else if (flaga == 2)  z=x*100/360;

x=0;
return( z );
}

przez referencję

double oblicz_kat( double &x, int flaga )
{
double z;

if (flaga == 1) 

z=x*2*M_PI/360;

else if (flaga == 2)  z=x*100/360;

x=0;
return( z );
}

double oblicz_kat( double &x, int flaga )
{
double z;

if (flaga == 1) 

z=x*2*M_PI/360;

else if (flaga == 2)  z=x*100/360;

x=0;
return( z );
}

przez wskaźnik

double oblicz_kat( double * x, int flaga )
{
double z;

if (flaga == 1)

z=*x*2*M_PI/360;

else if (flaga == 2)  z=*x*100/360;

*x = 0;
return( z );
}

double oblicz_kat( double * x, int flaga )
{
double z;

if (flaga == 1)

z=*x*2*M_PI/360;

else if (flaga == 2)  z=*x*100/360;

*x = 0;
return( z );
}

double argument = 1.2;
wynik = oblicz_kat( argument, 1 );

double argument = 1.2;
wynik = oblicz_kat( argument, 1 );

double argument = 1.2;
wynik = oblicz_kat( &argument, 1 );

Nowe zagadnienie ...

42

42

Typy podstawowe

Typy podstawowe

background image

Metodyki i technki programowania 1

2011

B. Butryło

22

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 podstawowe

Typy podstawowe

C++

C++

Java

Java

8 B

0.0

IEEE 754

double

4 B

0.0

IEEE 754

float

8 B

0

-1·2

64-1 : 

2

64-1

-1

long

4 B

0

-2 147 483 648 : 

2 147 483 647

int

2 B

0

-32768 : 32767

short

1 B

0

-128 : 127

byte

2 B

\u0000

znak Unicode

char

1 B

false

true false

boolean

Rozmiar

Wartość 

domyślna

Zakres dopuszczalnych 

wartości

Typ 

zmiennej

Programy są przenośne poniewaŜ rozmiar 

kaŜdego typu jest niezmienny.

8 B

0.0

IEEE 754

double

10 B

0.0

IEEE 754

long double

4 B

0.0

IEEE 754

float

4 B

0

-2 147 483 648 : 

2 147 483 647

long int

long

4 B

0

-2 147 483 648 : 

2 147 483 647

int

2 B

0

-32768 : 32767

short

short int

1 B

0

znak, -128 : 127

char

1 B

false

true false

bool

Rozmiar

Wartość 

domyślna

Zakres dopuszczalnych 

wartości

Typ zmiennej

Programy (kody wynikowe) nie są przenośne 
poniewaŜ rozmiary niektórych typów zaleŜą 

od implementacji.

void = (pusty)

void = (pusty)

background image

Metodyki i technki programowania 1

2011

B. Butryło

23

Wstęp

45

45

C++ typy zmiennych

C++ typy zmiennych

Zmienne

Zmienne

-128

0

-32768

-32768

0

-2147483648

0

3.4e-38

1.7e-308

3.4e-4932

127

255

32767

32767

65635

2147483647

429467295

3.4e+38

1.7e+308

1.1e+4932

Proste, 

podstawowe

Proste, 

podstawowe

Pochodne

Pochodne

Pusty

Pusty

znakowy

znakowy

całkowity

całkowity

zmienno-

pozycyjny

zmienno-

pozycyjny

tablice

tablice

struktury

struktury

unie

unie

wskaźniki

wskaźniki

void

char

unsigned char

short

int

unsigned int

long

unsigned long

enum

float

double

long double

Zmienne

46

46

C++ i Java: definicja zmiennych

C++ i Java: definicja zmiennych

;

modyfikator/ 
modyfikatory

modyfikator/ 
modyfikatory

typ zmiennej

typ zmiennej

identyfikator

identyfikator

wartość 

początkowa

wartość 

początkowa

Po identyfikatorze 

moŜe być określona 

wartość początkowa 

zamiennej 

poprzedzona znakiem 

równości.

Opcjonalny ciąg 

modyfikatorów w dowolnej 

kolejności. Typy 

modyfikatorów: dostępu, 

zachowania wartości, 

zakresu wartości, 

synchronizacji. 

C++

C++

Java

Java

public
private
protected

auto
const
extern
register
static
volatile

signed
unsigned

public
private
protected

auto
const
extern
register
static
volatile

signed
unsigned

public
private
protected

const

(*)

final
static
synchronized
transient
volatile

public
private
protected

const

(*)

final
static
synchronized
transient
volatile

const

const

double

double

pi

pi

= 3.14

= 3.14

;

;

static

static

int

int

i_licznik

i_licznik

= 0

= 0

;

;

float

float

zm_1, zm2

zm_1, zm2

;

;

long

long

a1=0, zm2=5

a1=0, zm2=5

;

;

Jeden z typów 

dostępnych w języku, 

określa dozwolone 

wartości

C++

C++

Java

Java

• podstawowe,
• wyliczeniowy,
• pochodne,
• własne.

Lista identyfikatorów 

zmiennych 

oddzielanych 

przecinkami

reguły (!),

• zalecenia (?), 
• przyzwyczajenia (??),
• zasady (???)

background image

Metodyki i technki programowania 1

2011

B. Butryło

24

Zmienne

47

47

Identyfikatory zmiennych / pól / metod

Identyfikatory zmiennych / pól / metod

C++ 

C++ 

Java

Java

• Dowolna długość.
• Musi zaczynać się literą, 

podkreśleniem _, znakiem $.

• Kombinacja znaków (litery, cyfry, _). 
• Obowiązuje Unicode (szeroki zbiór 

liter i znaków).

• RozróŜniane są małe i duŜe litery.

/* 

identyfikatory zmiennych */

int

a, ą, à, á, ã;

char 

znak, Zażółć, _to_jest_to;

double 

ππππ

= 3.15;

float $b1=0.5f;

• Dowolna długość (kompilator 

identyfikuje zwykle pierwsze 16/32 
znaki).

• Musi zaczynać się literą, 

podkreśleniem _, znakiem $.

• Kombinacja znaków (litery, cyfry, _). 
• Obowiązuje ASCII.
• RozróŜniane są małe i duŜe litery.

/* 

identyfikatory zmiennych */

int

a, a1, a2, aa, a_b;

char 

znak, Zazolc, _to_jest_to;

double  pi = 3.15;
float $b1=0.5f;

słowa kluczowe  =  nazwy zabronione

słowa kluczowe  =  nazwy zabronione

Zmienne

48

48

Identyfikatory: notacja węgierska

Identyfikatory: notacja węgierska

• 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.

Propozycja

Propozycja

background image

Metodyki i technki programowania 1

2011

B. Butryło

25

Zmienne

49

49

Identyfikatory: notacja węgierska

Identyfikatory: notacja węgierska

s

string (łańcuch znaków)

sz

string (łańcuch znaków zakończony bajtem zerowym - null'em)

c

1. char (jeden znak), 
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

przedrostek

opis symbolu w notacji

Propozycja

Propozycja

Zmienne

50

50

Identyfikatory: notacja węgierska

Identyfikatory: notacja węgierska

b

boolean (wartość logiczna: prawda lub fałsz)

f

flaga

fn

funkcja

h

handle (uchwyt)

p

pointer (wskaźnik)

• MoŜliwe jest łączenie przedrostków, np. 

pf

pi

.

przedrostek

opis symbolu w notacji

Propozycja

Propozycja

background image

Metodyki i technki programowania 1

2011

B. Butryło

26

Zmienne

51

51

Identyfikatory: klasy i pola

Identyfikatory: 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

Propozycja

Propozycja

Nowe zagadnienie ...

52

52

Modyfikatory

Modyfikatory

background image

Metodyki i technki programowania 1

2011

B. Butryło

27

Zmienne

53

53

Modyfikatory: zakres wartości

Modyfikatory: zakres wartości

C++

C++

signed

8 B

0.0

IEEE 754

double

10 B

0.0

IEEE 754

long double

4 B

0.0

IEEE 754

float

4 B

0

-2 147 483 648 : 

2 147 483 647

long int

long

4 B

0

-2 147 483 648 : 

2 147 483 647

int

2 B

0

-32768 : 32767

short

short int

1 B

0

znak, -128 : 127

char

1 B

false

true false

bool

Rozmiar

Wartość 

domyślna

Zakres dopuszczalnych 

wartości

Typ zmiennej

8 B

0.0

IEEE 754

double

10 B

0.0

IEEE 754

long double

4 B

0.0

IEEE 754

float

4 B

0

0 :

4 294 967 296

long int

long

4 B

0

0 : 

4 294 967 296

int

2 B

0

0 : 65536

short

short int

1 B

0

znak, 0 : 255

char

1 B

false

true false

bool

Rozmiar

Wartość 

domyślna

Zakres dopuszczalnych 

wartości

Typ zmiennej

unsigned

W Javie nie 

ma 

modyfikatorów 

zakresu!

W Javie nie 

ma 

modyfikatorów 

zakresu!

/* 

identyfikatory zakresu wartości */

signed int roznica_wieku = -10;
signed char przesuniecie_kodu = -32;

/* 

identyfikatory zakresu wartości */

unsigned int wiek_osoby = 25;
unsigned char red, green = 0, blue=255;

Zmienne

54

54

Modyfikatory: register

Modyfikatory: register

Komputer

Komputer

Procesor

Procesor

ALU,

ukł. 

ster.

ALU,

ukł. 

ster.

rejestry

rejestry

stos

stos

cache

cache

pamięć operacyjna o dostępie 

swobodnym

pamięć operacyjna o dostępie 

swobodnym

pamięć operacyjna stała

pamięć operacyjna stała

pamięci taśmowe

pamięci taśmowe

wewnętrzna pamięć dyskowa

wewnętrzna pamięć dyskowa

pamięci dyskowe

pamięci dyskowe

R

os

ca

 s

zy

b

ko

ść

 d

os

pu

R

os

ca

 w

ie

lk

ć 

pa

m

ci

Rejestry

• Grupa  przerzutników  słuŜąca  do  przechowywania  informacji. 

Rejestry  są  szybsze  niŜ  typowe  układy  pamięci.  W  porównaniu  z 
liczbą  komórek  pamięci  operacyjnej  ich  liczba  jest  niewielka.  W 
części adresowej rozkazu potrzebna jest niewielka liczba bitów do 
wskazania rejestru. 

• Główne  uŜycie  rejestrów  polega  na  przechowywaniu  adresów  lub 

danych przed lub w trakcie ich przetwarzania. 

• Rejestry  mogą  być  uŜywane  do  modyfikacji  adresów,  do 

zapamiętania  adresów  powrotu  z  podprogramu,  jako  liczniki 
rozkazów,  jako  akumulatory  pomocnicze  lub  jako  małe  pamięci 
notatnikowe.  Sposób  ich  uŜycia  zaleŜy  od  architektury 
mikroprocesora.

C++

C++

W Javie nie ma 

modyfikatora 

bezpośredniego 

dostępu do 

rejestrów!

W Javie nie ma 

modyfikatora 

bezpośredniego 

dostępu do 

rejestrów!

register

– modyfikator  zmiennej 

umieszczanej w rejestrze. 
Oznacza  bezpośredni  dostęp  do 
rejestrów z poziomu programu.
Nie wszystkie kompilatory zrealizują 
przetwarzanie  zmiennej  przez  jej 
umieszczenie w rejestrze.
Zmienne 

rejestrowe 

mogą  być 

uŜyteczne 

przy 

duŜej 

liczbie 

obliczeń. 

/* 

identyfikatory zmiennych */

register double pi = 3.15;
register int rok = 2008;

rok = rok + 1;

background image

Metodyki i technki programowania 1

2011

B. Butryło

28

Zmienne

55

55

Modyfikatory: deklaracja, def. zmiennej

Modyfikatory: deklaracja, def. zmiennej

C++ 

C++ 

...

/* 

deklaracja zmiennej nie rezerwuje 

miejsca w pamięci,
deklaracji moŜe być wiele, byle identyczne */

extern int

licznik;

extern int

licznik_drugi;

extern int

licznik;

// może być

/* 

definicja zmiennej rezerwuje 

miejsce w pamięci, 
* tworzy opis zmiennej / pola,
* definicja to więcej niŜ deklaracja,
* jedna definicja w danym zakresie */

int

a, b, i_c, to_jest_liczba;

char 

znak, c_znak_z_konsoli;

double  pi = 3.15;
float b1=0.5f;
int

i_c, znak;

// błąd

Java

Java

...
/* 

deklaracja zmiennej nie rezerwuje 

miejsca w pamięci,
deklaracji moŜe być wiele, byle identyczne */

extern int

licznik;

extern int

licznik_drugi;

extern int

licznik;

// może być

/* 

definicja zmiennej rezerwuje 

miejsce w pamięci, 
* tworzy opis zmiennej / pola,
* definicja to więcej niŜ deklaracja,
* jedna definicja w danym zakresie */

int

a, b, i_c, to_jest_liczba;

char 

znak, c_znak_z_konsoli;

double  pi = 3.15;
float b1=0.5f;
int

i_c, znak;

// błąd

Zmienne

56

56

Modyfikatory: wartości stałe

Modyfikatory: wartości stałe

C++ 

C++ 

...

/* 

definicja zmiennej która nie moŜe
ulec zmianie  
w trakcie działania programu */

const float  pi = 3.15;
const double eps_zero = 8.85e-12;
const int mnoznik = 4;

Java

Java

...

/* 

Definicja zmiennej która nie moŜe
ulec zmianie  
w trakcie działania programu.
Modyfikator const jest dopuszczalny 
ale nie jest zalecany */

final float 

pi = 3.15;

final double eps_zero = 8.85e-12;
final int mnożnik = 4;

background image

Metodyki i technki programowania 1

2011

B. Butryło

29

Zmienne

57

57

Modyfikatory: wartości „ulotne”

Modyfikatory: wartości „ulotne”

C++ 

C++ 

...

/* 

definicja zmiennej która moŜe
ulec zmianie  
i nie jest zsynchronizowana 
ze środowiskiem */

volatile float 

temperatura = 0.0;

volatile double kurs_waluty = 0.0;
volatile int stan_czujnika_drzwi = 0;

Java

Java

...

/* 

definicja zmiennej która moŜe
ulec zmianie  
i nie jest zsynchronizowana 
ze środowiskiem */

volatile float 

temperatura = 0.0;

volatile double kurs_waluty = 0.0;
volatile int stan_czujnika_drzwi = 0;

Komputer

Komputer

Procesor

Procesor

ALU,

ukł. 

ster.

ALU,

ukł. 

ster.

rejestry

rejestry

stos

stos

cache

cache

pamięć operacyjna o dostępie 

swobodnym

pamięć operacyjna o dostępie 

swobodnym

pamięć operacyjna stała

pamięć operacyjna stała

pamięci taśmowe

pamięci taśmowe

wewnętrzna pamięć dyskowa

wewnętrzna pamięć dyskowa

pamięci dyskowe

pamięci dyskowe

R

os

ca

 s

zy

b

ko

ść

 d

os

pu

R

os

ca

 w

ie

lk

ć 

pa

m

ci

Karta pomiarowa

Karta pomiarowa

Stan czujników

Stan czujników

Dane z interentu

Dane z interentu

...

...

Układy

I/O

Układy

I/O

Nowe zagadnienie ...

58

58

Zakres zmiennych

Widoczność zmiennych

Zakres zmiennych

Widoczność zmiennych

background image

Metodyki i technki programowania 1

2011

B. Butryło

30

Zmienne

59

59

Zmienne w programie: sterta i stos

Zmienne w programie: sterta i stos

Komputer

Komputer

Procesor

Procesor

ALU,

ukł. 

ster.

ALU,

ukł. 

ster.

rejestry

rejestry

stos

stos

cache

cache

pamięć operacyjna o dostępie 

swobodnym

pamięć operacyjna o dostępie 

swobodnym

pamięć operacyjna stała

pamięć operacyjna stała

pamięci taśmowe

pamięci taśmowe

wewnętrzna pamięć dyskowa

wewnętrzna pamięć dyskowa

pamięci dyskowe

pamięci dyskowe

R

os

ca

 s

zy

b

ko

ść

 d

os

pu

R

os

ca

 w

ie

lk

ć 

pa

m

ci

Sterta (ang. heap) 

• Część  pamięci  elektronicznej  (RAM 

Cache) 

przydzielana  dla  programu  dla  przechowywania 
zmiennych. 

• Zarządzanie  stertą  nie  jest  moŜliwe  w  językach 

wysokiego 

poziomu. 

MoŜliwe 

jest 

jedynie 

zarezerwowanie  fragmentu  pamięci  (sterty)  na 
zachowanie  zmiennych  lub  zwolnienie  obszaru 
pamięci.

• Przydział  sterty  dla  programu  oznacza,  Ŝe  ten 

obszar  pamięci  jest  zerowany  w  momencie 
przydzielenia. 

Stos (ang. stack)

• Uporządkowana  lista  komórek  pamięci,  w  której  dostęp 

jest zawsze do wierzchołka stosu.

• Stos = lista spychania, kolejka LIFO (last in first out).
• Ułatwia 

zarządzanie 

wywołaniami 

powrotami 

podprogramów.

• Wykonywane  operacje  odnoszą  się  do  wierzchołka  stosu. 

Ze  względu  na  jednoznaczną  lokację  nie  jest  konieczne 
podawanie adresu argumentu do zrealizowanego rozkazu.

• W  niektórych  procesorach  (w  celu  przyspieszenia 

przetwarzania)  dwa  wierzchołkowe  elementy  stosu  są 
przechowywane w rejestrach procesora.

• Zmienne wewnątrz funkcji (do umieszczenia na stosie) nie 

są automatycznie inicjowanie.

Zmienne

60

60

Zmienne w programie: sterta i stos

Zmienne w programie: sterta i stos

Komputer

Komputer

Procesor

Procesor

ALU,

ukł. 

ster.

ALU,

ukł. 

ster.

rejestry

rejestry

stos

stos

cache

cache

pamięć operacyjna o dostępie 

swobodnym

pamięć operacyjna o dostępie 

swobodnym

pamięć operacyjna stała

pamięć operacyjna stała

pamięci taśmowe

pamięci taśmowe

wewnętrzna pamięć dyskowa

wewnętrzna pamięć dyskowa

pamięci dyskowe

pamięci dyskowe

R

os

ca

 s

zyb

ko

ść

 d

os

pu

R

os

ca

 w

ie

lko

ść

 p

am

ci

#include 

<iostream>

#include

<dodatek.h>

using namespace std;

int 

red=255, green=255, blue=0;

float 

wektor_x, wektor_y, wektor_modul, wektor_faza;

void 

ustaw_kolory( intintint

,

int );

void

dlugosc_wektora( floatfloat );

void main ( void 
{
int

liczba_wektorow = 1;

float

* wektor_x, * wektor_y;

wektor_x = new float [3];

dlugosc_wektora( 3.0, -4.0 );
ustaw_kolory( 0, 255, 0, 0);

// ustaw zielony

dlugosc_wektora( 0.0, 1.0 );
ustaw_kolory( 255, 255, 0, 10);

// ustaw zolty

dlugosc_wektora( 3.0, -4.0 );
ustaw_kolory( 255, 0, 128, 0);

// ustaw purpurowy

}

void ustaw_kolory( int red, int green, int blue, int nas )
static int licznik;

int biezace_nasycenie = nas;
set_color( red, green, blue );
set_shading( nas ); 
licznik++; 
cout<< "Zmiana koloru " << licznik << "raz.”<<endl;

}
void dlugosc_wektora( float wsp_x, float wsp_y )
static float point_x = 0.0;

static float point_y;
float  

dlugosc = 

sqrt( pwd(wsp_x – point_x, 2)+pwd(wsp_y – point_y, 2) );
point_x = wsp_x;
point_y = wsp_y;
cout << "Przemieszczenie " << dlugosc << endl;
}

Modyfikator
static

Zmienne 
dynamicznie 
alokowane

Modyfikator
static

Zmienne 
dynamicznie 
alokowane

background image

Metodyki i technki programowania 1

2011

B. Butryło

31

Zmienne

61

61

Zakres zmiennej, obiektu

Zakres 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.

Zakres zmiennej, obiektu

Zakres zmiennej, obiektu

W OOP 

jest 

zakres klasy

W OOP 

jest 

zakres klasy

lokalny

Z wykorzystaniem instrukcji 

grupującej { }

lokalny

Z wykorzystaniem instrukcji 

grupującej { }

funkcja (metoda)

Dotyczy etykiet i zmiennych.

Nie dotyczy wskaźników, tablic (new).

funkcja (metoda)

Dotyczy etykiet i zmiennych.

Nie dotyczy wskaźników, tablic (new).

plik

plik

Zmienne

62

62

Zakres zmiennej, obiektu

Zakres zmiennej, obiektu

void moc( float u, float i, float kat )
{

float modul = 0.0;
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;
cout << "Q = " << f_p << endl;
cout << "S = " << f_s << endl;

}
cout << „P = " << f_p << endl;
cout << "S = " << f_s << endl;  

// blad

}

Przysłanianie 

zmiennych.

Operator ::

Przysłanianie 

zmiennych.

Operator ::

lokalny

Z wykorzystaniem instrukcji 

grupującej { }

lokalny

Z wykorzystaniem instrukcji 

grupującej { }

background image

Metodyki i technki programowania 1

2011

B. Butryło

32

Zmienne

63

63

Zakres zmiennej, obiektu

Zakres zmiennej, obiektu

float moc(float u, float i, float kat)
float modul = 0.0;

float faza = 0.0;
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 );

}

funkcja (metoda)

Dotyczy etykiet i zmiennych.

Nie dotyczy wskaźników, tablic (new).

funkcja (metoda)

Dotyczy etykiet i zmiennych.

Nie dotyczy wskaźników, tablic (new).

Zmienne

64

64

plik

plik

Zakres zmiennej, obiektu

Zakres zmiennej, obiektu

#include 

<iostream>

using namespace std;

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 );

}

background image

Metodyki i technki programowania 1

2011

B. Butryło

33

Struktura programu w C++ (programowanie strukturalne)

65

65

Przestrzeń nazw – widoczność, dostęp

Przestrzeń nazw – widoczność, dostęp

namespace

nazwa_przestrzeni

{
}

using namespace

nazwa_przestrzeni

namespace std

namespace std

namespace moje

namespace moje

namespace demo

namespace demo

Wstęp

66

66

C: deklaracje zmiennych

C: deklaracje zmiennych

-128

0

-32768

-32768

0

-2147483648

0

3.4e-38

1.7e-308

3.4e-4932

127

255

32767

32767

65635

2147483647

429467295

3.4e+38

1.7e+308

1.1e+4932

char

unsigned char

short

int

unsigned int

long

unsigned long

enum

float

double

long double

RAM

char znak;
char a, ten, k = 64;

short liczba;
int liczba_w = 2006;
unsigned int nowa_wartosc;
unsigned int new_value = 45000;
long d;
unsigned long e, f, g;

float pi = 3.41;
float alfa, beta = 1.46e+10, gamma = 1.4E-4;
double zmienna;
double nowa_wartosc_liczby = 1.0;

Przykłady:

background image

Metodyki i technki programowania 1

2011

B. Butryło

34

Wstęp

67

67

C: wyraŜenia i operatory

C: wyraŜenia i operatory

wyraŜenie

wyraŜenie

proste

proste

arytmetyczne

arytmetyczne

relacyjne

relacyjne

logiczne

logiczne

operatory

operatory

proste

proste

arytmetyczne

arytmetyczne

relacyjne

relacyjne

logiczne

logiczne

bitowe

bitowe

adresowania

adresowania

rzutowania

rzutowania

...

...

Wstęp

68

68

C: wyraŜenia i operatory (hierarchia)

C: wyraŜenia i operatory (hierarchia)

( )  [ ]  .   

funkcja 

!

~

++  -- +  -

(

typ

)   sizeof

*  /  %

+  -

<<   >> 

<  <=  >  >=

==  !=

&   |   ^

&&

||

?:

=  +=  -=  *=  /=  %=

&=  ^=  |=  <<=  >>=

odwołanie do, wywołanie

jednoargumentowe

arytmetyczne 
dwuargumentowe

bitowe przesunięcia

relacyjne i logiczne
dwuargumentowe

bitowe dwuargumentowe

logiczne
dwuargumentowe

warunkowy

przypisania

przecinkowy

,

logiczne

bitowe

arytmetyczne

rzutowania

iloczyn, iloraz, reszta

suma, róŜnica

relacyjne

relacyjne / logiczne

koniunkcja

alternatywa

arytmetyczne

bitowe

background image

Metodyki i technki programowania 1

2011

B. Butryło

35

Wstęp

69

69

C: wyraŜenia i operatory (przykłady)

C: wyraŜenia i operatory (przykłady)

int 

ia, ib, ic;

float  fa, fb, fc;
int    iw;
float fw;

ia = 10;
ib = 5;
ic = -8;

fa = 1.5;
fb = 5.4321E-10;
fc = -.78;

iw = ia == ib;

/* 0 */

iw = ia > ib;

/* 1 */

iw = ia && ib;          

/* 1 */

iw = ia || ib;

/* 1 */

iw = ia * ib;           

/* 50 */

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 instrukcje

Najprostsze instrukcje

Instrukcja / wyraŜenie proste

Instrukcja / wyraŜenie proste

Instrukcja grupująca

Instrukcja grupująca

C++: proceduralnie

C++: proceduralnie

Java: obiektowo

Java: obiektowo

background image

Metodyki i technki programowania 1

2011

B. Butryło

36

Wstęp

71

71

C: instrukcja warunkowa if ... else

C: instrukcja warunkowa if ... else

if

(

)

wyraŜenie

wyraŜenie

instrukcja (instrukcje) A

instrukcja (instrukcje) A

else

instrukcja (instrukcje) B

instrukcja (instrukcje) B

wyraŜenie

wyraŜenie

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie 

0

TAK

(prawda)

instrukcja 

(instrukcje) B

instrukcja 

(instrukcje) B

wyraŜenie = 0

NIE

(fałsz)

int a, b;

/* wartości muszą być wpisane*/

if (a + b == 10 )

wynik = 100;

else

wynik = 0;

int a, b;

/* wartości muszą być wpisane*/

if (a + b == 10 )

wynik = 100;

else

wynik = 0;

int a, b;

/* wartości muszą być wpisane*/

if (a  ==  b )

a = 0;

int a, b;

/* wartości muszą być wpisane*/

if (a  ==  b )

a = 0;

Przykłady:

Wstęp

72

72

C: wersja wielowariantowa if-else-if

C: wersja wielowariantowa if-else-if

wyraŜenie 1

wyraŜenie 1

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

( wyraŜenie 1) 

0

TAK

(prawda)

int punkty, ocena;

/* wartość zmiennej punkty musi być znana */

if (punkty > 36 )

ocena = 5;

else if (punkty >= 34)

ocena = 4.5;

else if (punkty >= 31)

ocena = 4;

else if (punkty >= 25)

ocena = 3.5;

else if (punkty >= 20)

ocena = 3.5;

else 

ocena = 2.0;

int punkty, ocena;

/* wartość zmiennej punkty musi być znana */

if (punkty > 36 )

ocena = 5;

else if (punkty >= 34)

ocena = 4.5;

else if (punkty >= 31)

ocena = 4;

else if (punkty >= 25)

ocena = 3.5;

else if (punkty >= 20)

ocena = 3.5;

else 

ocena = 2.0;

Przykłady:

(wyraŜenie 1)  = 0

NIE

(fałsz)

wyraŜenie 2

wyraŜenie 2

instrukcja 

(instrukcje) B

instrukcja 

(instrukcje) B

( wyraŜenie 2) 

0

TAK

(prawda)

( wyraŜenie 2) = 0

NIE

(fałsz)

instrukcja 

(instrukcje) B

instrukcja 

(instrukcje) B

background image

Metodyki i technki programowania 1

2011

B. Butryło

37

Wstęp

73

73

C: instrukcja iteracyjna for

C: instrukcja iteracyjna for

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie 2 

0

TAK

(prawda)

for (

wyraŜenie 1

wyraŜenie 1

instrukcja (instrukcje) A

instrukcja (instrukcje) A

;

wyraŜenie 2

wyraŜenie 2

;

wyraŜenie 3

wyraŜenie 3

)

wyraŜenie 1

(inicjujące)

wyraŜenie 1

(inicjujące)

wyraŜenie 2 = 0

NIE

(fałsz)

wyraŜenie 2

(sterujące)

wyraŜenie 2

(sterujące)

wyraŜenie 3

(przyrostowe)

wyraŜenie 3

(przyrostowe)

int i, wynik = 0;

for (i=10; i < 20; i=i+3 )

wynik = wynik + i;

int i, wynik = 0;

for (i=10; i < 20; i=i+3 )

wynik = wynik + i;

for (;;)
;

for (;;)
;

Przykłady:

float i, potega;

for (i=200; i >= 10; i=i-3 )

potega = i * i;

float i, potega;

for (i=200; i >= 10; i=i-3 )

potega = i * i;

Wstęp

74

74

C: instrukcja iteracyjna for

C: instrukcja iteracyjna for

for (

wyraŜenie 1

wyraŜenie 1

instrukcja (instrukcje) A

instrukcja (instrukcje) A

;

wyraŜenie 2

wyraŜenie 2

;

wyraŜenie 3

wyraŜenie 3

)

wyraŜenie 2 = 0

NIE

(fałsz)

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie 2 

0

TAK

(prawda)

wyraŜenie 1

(inicjujące)

wyraŜenie 1

(inicjujące)

wyraŜenie 2

(sterujące)

wyraŜenie 2

(sterujące)

wyraŜenie 3

(przyrostowe)

wyraŜenie 3

(przyrostowe)

float i, wynik = 0;

for (i=0; i < 100; i=i+1)

printf( ”%f  %f\n”, i, i*i);

float i, wynik = 0;

for (i=0; i < 100; i=i+1)

printf( ”%f  %f\n”, i, i*i);

Przykłady:

float odsetki = 0;
float oprocentowanie = 0,08;
float kapital = 100;
int   rok, lata;

lata = 4;
for (rok=0; rok < lata; rok=rok+1)
{

odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;

}
printf( ”Kapital po %d latach wynosi %f zl.\n”, 

lata, kapital);

float odsetki = 0;
float oprocentowanie = 0,08;
float kapital = 100;
int   rok, lata;

lata = 4;
for (rok=0; rok < lata; rok=rok+1)
{

odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;

}
printf( ”Kapital po %d latach wynosi %f zl.\n”, 

lata, kapital);

background image

Metodyki i technki programowania 1

2011

B. Butryło

38

Wstęp

75

75

C: instrukcja iteracyjna while

C: instrukcja iteracyjna while

while (

wyraŜenie

wyraŜenie

instrukcja (instrukcje) A

instrukcja (instrukcje) A

)

wyraŜenie = 0

NIE

(fałsz)

wyraŜenie

(sterujące)

wyraŜenie

(sterujące)

int i, wynik = 0;

i=10;
while (i < 20)
{

wynik = wynik + i;
i=i+3;

}

int i, wynik = 0;

i=10;
while (i < 20)
{

wynik = wynik + i;
i=i+3;

}

while (1)
;

while (1)
;

Przykłady:

float i, potega;

i=200;
while (i >= 10)
{

potega = i * i;
i=i-3;

}

float i, potega;

i=200;
while (i >= 10)
{

potega = i * i;
i=i-3;

}

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie 

0

TAK

(prawda)

Wstęp

76

76

C: instrukcja iteracyjna while

C: instrukcja iteracyjna while

while (

wyraŜenie

wyraŜenie

instrukcja (instrukcje) A

instrukcja (instrukcje) A

)

wyraŜenie = 0

NIE

(fałsz)

wyraŜenie

(sterujące)

wyraŜenie

(sterujące)

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie 

0

TAK

(prawda)

float i, wynik = 0;

i=0;
while (i < 100)
{

printf( ”%f  %f\n”, i, i*i);
i=i+1;

}

float i, wynik = 0;

i=0;
while (i < 100)
{

printf( ”%f  %f\n”, i, i*i);
i=i+1;

}

Przykłady:

float odsetki = 0;
float oprocentowanie = 0,08;
float kapital = 100;
int   rok, lata;

lata = 4;
rok = 0;

while (rok < lata)
{

odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;
rok=rok+1;

}
printf( ”Kapital po %d latach wynosi %f zl.\n”, 

lata, kapital);

float odsetki = 0;
float oprocentowanie = 0,08;
float kapital = 100;
int   rok, lata;

lata = 4;
rok = 0;

while (rok < lata)
{

odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;
rok=rok+1;

}
printf( ”Kapital po %d latach wynosi %f zl.\n”, 

lata, kapital);

background image

Metodyki i technki programowania 1

2011

B. Butryło

39

Wstęp

77

77

C: instrukcja iteracyjna do ... while

C: instrukcja iteracyjna do ... while

int i, wynik = 0;

i=10;
do
{

wynik = wynik + i;
i=i+3;

}
while (i < 20);

int i, wynik = 0;

i=10;
do
{

wynik = wynik + i;
i=i+3;

}
while (i < 20);

do
;
while (1);

do
;
while (1);

Przykłady:

float i, potega;

i=200;
do
{

potega = i * i;
i=i-3;

}
while (i >= 10);

float i, potega;

i=200;
do
{

potega = i * i;
i=i-3;

}
while (i >= 10);

wyraŜenie 

0

TAK

(prawda)

do

instrukcja (instrukcje) A

instrukcja (instrukcje) A

while (

wyraŜenie

wyraŜenie

);

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie

(sterujące)

wyraŜenie

(sterujące)

wyraŜenie = 0

NIE

(fałsz)

Wstęp

78

78

C: instrukcja iteracyjna while

C: instrukcja iteracyjna while

float i, wynik = 0;

i=0;
do
{

printf( ”%f  %f\n”, i, i*i);
i=i+1;

}
while (i < 100);

float i, wynik = 0;

i=0;
do
{

printf( ”%f  %f\n”, i, i*i);
i=i+1;

}
while (i < 100);

Przykłady:

float odsetki = 0;
float oprocentowanie = 0,08;
float kapital = 100;
int   rok, lata;

lata = 4;
rok = 0;

do
{

odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;
rok=rok+1;

}
while (rok < lata);

printf( ”Kapital po %d latach wynosi %f zl.\n”, 

lata, kapital);

float odsetki = 0;
float oprocentowanie = 0,08;
float kapital = 100;
int   rok, lata;

lata = 4;
rok = 0;

do
{

odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;
rok=rok+1;

}
while (rok < lata);

printf( ”Kapital po %d latach wynosi %f zl.\n”, 

lata, kapital);

wyraŜenie 

0

TAK

(prawda)

do

instrukcja (instrukcje) A

instrukcja (instrukcje) A

while (

wyraŜenie

wyraŜenie

);

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie

(sterujące)

wyraŜenie

(sterujące)

wyraŜenie = 0

NIE

(fałsz)

background image

Metodyki i technki programowania 1

2011

B. Butryło

40

Instrukcje

79

79

Przykład: funkcje / instrukcje

Przykład: funkcje / instrukcje

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.

Numeryczne obliczanie całki metodą prostokątów.

K

K

→

→

n

x

x

x

I

I

I

I

 

zmniejsz

2

 

zmniejsz

1

 

zmniejsz

0

E

N

I

I

N

n

,

,

2

,

1

,

0

K

=

n

I

Obliczaj

Instrukcje

80

80

Przykład: funkcje / instrukcje

Przykład: funkcje / instrukcje

( )

( ) (

)

( )



+

+

+

=

=

=

+

g

d

N

i

i

N

i

i

i

i

c

v

v

f

I

c

v

v

v

f

I

c

dv

v

f

I

1

0

1

0

1

v

i

d

v

N

d

g

v

i

+

=

=

v

f(v)

v

0

v

1

v

2

v

3

v

4

v

N

d

g

background image

Metodyki i technki programowania 1

2011

B. Butryło

41

Instrukcje

81

81

#include <iostream>
#include <cmath>
using namespace std;

double licz_calke(double, double, double);
double funkcja( double, double);

int main(int argc, char** argv)
{

double epsilon 

= 1.0e-6;

double g_dolna 

= 0.1;

double g_gorna  

= 10.5;

int    liczba_punktow 

= 10;

double krok_x = (g_gorna - g_dolna) / liczba_punktow;

double w_calki   

= 0.0;

double po_w_calki = 0.0;

do
{

po_w_calki = w_calki;
w_calki = licz_calke( g_dolna, g_gorna, krok_x );
krok_x = krok_x * 0.5;

}
while (fabs( (w_calki - po_w_calki) /po_w_calki ) > epsilon);

cout << "Calka w przedziale [" << g_dolna << ";" << g_gorna << "] 
wynosi " << w_calki << endl;
cout << "Koniec liczenia" << endl;
return( 0 );
}

Przykład: funkcje / instrukcje

Przykład: funkcje / instrukcje

double funkcja( double x_1, double x_2 )
{
double wynik;

wynik = 10 * exp( -0.072 * x_1 ) * 

sin( 2 * 3.14159265 * 0.1 * x_1 );

return( wynik );
}

double funkcja( double x_1, double x_2 )
{
double wynik;

wynik = 10 * exp( -0.072 * x_1 ) * 

sin( 2 * 3.14159265 * 0.1 * x_1 );

return( wynik );
}

double licz_calke( double dolna, double gorna, 

double krok )

{
double wart_x;
double wynik = 0.0;

wart_x = dolna;
while ( wart_x < gorna )
{

wynik = wynik + krok * funkcja( wart_x, 0.0 );
wart_x = wart_x + krok;

}

return( wynik );
}

Instrukcje

82

82

Przykład: funkcje / instrukcje

Przykład: funkcje / instrukcje

-8

-6

-4

-2

0

2

4

6

8

10

0

5

10

15

20

25

30

35

x

f(x)

( )

=

x

e

x

f

x

10

2

sin

10

072

,

0

π

5

,

10

1

,

0

=

=

g

d

dx

x

e

I

x

=

5

,

10

1

,

0

072

,

0

10

2

sin

10

π

7,4

7,6

7,8

8

8,2

8,4

8,6

8,8

9

1,E-06

1,E-05

1,E-04

1,E-03

1,E-02

1,E-01

1,E+00

1,E+01

8,40166

I

x

background image

Metodyki i technki programowania 1

2011

B. Butryło

42

Instrukcje

83

83

C++: instrukcja iteracyjna for

C++: instrukcja iteracyjna for

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie 2 

0

TAK

(prawda)

for (

wyraŜenie 1

wyraŜenie 1

instrukcja (instrukcje) A

instrukcja (instrukcje) A

;

wyraŜenie 2

wyraŜenie 2

;

wyraŜenie 3

wyraŜenie 3

)

wyraŜenie 1

(inicjujące)

wyraŜenie 1

(inicjujące)

wyraŜenie 2 = 0

NIE

(fałsz)

wyraŜenie 2

(sterujące)

wyraŜenie 2

(sterujące)

wyraŜenie 3

(przyrostowe)

wyraŜenie 3

(przyrostowe)

int i, wynik = 0;

for (i=10; i < 20; i=i+3 )

wynik = wynik + i;

int i, wynik = 0;

for (i=10; i < 20; i=i+3 )

wynik = wynik + i;

for (;;)
;

for (;;)
;

Przykład 1:

float i, potega;

for (i=200; i - 10; i=i-1 )

potega = i * i;

float i, potega;

for (i=200; i - 10; i=i-1 )

potega = i * i;

Przykład 2:

Przykład 3:

Instrukcje

84

84

C++: instrukcja iteracyjna for

C++: instrukcja iteracyjna for

for (

wyraŜenie 1

wyraŜenie 1

instrukcja (instrukcje) A

instrukcja (instrukcje) A

;

wyraŜenie 2

wyraŜenie 2

;

wyraŜenie 3

wyraŜenie 3

)

wyraŜenie 2 = 0

NIE

(fałsz)

instrukcja 

(instrukcje) A

instrukcja 

(instrukcje) A

wyraŜenie 2 

0

TAK

(prawda)

wyraŜenie 1

(inicjujące)

wyraŜenie 1

(inicjujące)

wyraŜenie 2

(sterujące)

wyraŜenie 2

(sterujące)

wyraŜenie 3

(przyrostowe)

wyraŜenie 3

(przyrostowe)

float i, wynik = 0;

for (i=0; i < 100; i=i+1)

printf( ”%f  %f\n”, i, i*i);

float i, wynik = 0;

for (i=0; i < 100; i=i+1)

printf( ”%f  %f\n”, i, i*i);

Przykład 1:

float

odsetki = 0;

float

oprocentowanie = 0,08;

float

kapital = 100;

int  

rok, lata;

lata = 4;

for 

(rok=0; rok < lata; rok=rok+1)

{

odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;

}
printf( ”Kapital po %d latach wynosi %f zl.\n”, 

lata, kapital);

float

odsetki = 0;

float

oprocentowanie = 0,08;

float

kapital = 100;

int  

rok, lata;

lata = 4;

for 

(rok=0; rok < lata; rok=rok+1)

{

odsetki = kapital * oprocentowanie;
kapital = kapital + odsetki;

}
printf( ”Kapital po %d latach wynosi %f zl.\n”, 

lata, kapital);

Przykład 2:

background image

Metodyki i technki programowania 1

2011

B. Butryło

43

Instrukcje

85

85

Przykład: funkcje / instrukcje

Przykład: funkcje / instrukcje

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.

Cyfrowe przetwarzanie sygnału w oscyloskopie cyfrowym.

Instrukcje

86

86

Przykład: funkcje / instrukcje

Przykład: funkcje / instrukcje

Filtr cyfrowy 

NOI (ang. IIR)

SOI (ang. FIR)

=

=

N

k

k

n

k

n

x

a

y

0

n

y

n

n

n

n

s

x

±

=

DF

=

=

=

M

k

k

n

k

N

k

k

n

k

n

y

b

x

a

y

1

0

n

y

n

n

n

n

s

x

±

=

DF

b

-

+

background image

Metodyki i technki programowania 1

2011

B. Butryło

44

Instrukcje

87

87

Przykład: funkcje / instrukcje

Przykład: funkcje / instrukcje

2

2

1

1

0

+

+

+

+

=

n

n

n

n

x

a

x

a

x

a

y

Instrukcje

88

88

Przykład: funkcje / instrukcje

Przykład: funkcje / instrukcje

#include <iostream>
#include <cmath>
using namespace std;

double licz_calke(double, double, double);
double funkcja( double, double);

int filtrowanie(int okno_start , int 
liczba_probek)
{

extern float * kanal_A;
extern float * kanal_B;

float * out_A_filter;
float * out_B_filter;

out_A_filter = new float [liczba_probek];
out_B_filter = new float [liczba_probek];

if (filtr_A_on == 1)

filtr( kanal_A, out_A_filter );

if (filtr_B_on == 1)

filtr( kanal_B, out_B_filter );

}

2

2

1

1

0

+

+

+

+

=

n

n

n

n

x

a

x

a

x

a

y

void filtr( float * dane, float * wyniki )
{
extern int okno_start;
extern int liczba_probek;

extern int filtr_rzad;
extern float filtr[3];

float sygnal_n, sygnal_n_1, sygnal_n_2;
int sam;

sygnal_n 

= dane[okno_start];

sygnal_n_1

= dane[okno_start + 1];

for ( sam = 0; sam < liczba_probek; sam = sam + 1 )

{
sygnal_n_2 = dane[okno_start + 2 + sam];

wyniki[sam] = 

filtr[0] * sygnal_n + filtr[1] * sygnal_n_1 
+ filtr[2] * sygnal_n_2;

sygnal_n  

= sygnal_n_1;

sygnal_n_1  = sygnal_n_2;

}

void filtr( float * dane, float * wyniki )
{
extern int okno_start;
extern int liczba_probek;

extern int filtr_rzad;
extern float filtr[3];

float sygnal_n, sygnal_n_1, sygnal_n_2;
int sam;

sygnal_n 

= dane[okno_start];

sygnal_n_1

= dane[okno_start + 1];

for ( sam = 0; sam < liczba_probek; sam = sam + 1 )

{
sygnal_n_2 = dane[okno_start + 2 + sam];

wyniki[sam] = 

filtr[0] * sygnal_n + filtr[1] * sygnal_n_1 
+ filtr[2] * sygnal_n_2;

sygnal_n  

= sygnal_n_1;

sygnal_n_1  = sygnal_n_2;

}

background image

Metodyki i technki programowania 1

2011

B. Butryło

45

Pierwszy program ...

89

89

Jak to wygląda – banalny program

Jak to wygląda – banalny program

C: proceduralnie

C: proceduralnie

C++: proceduralnie

C++: proceduralnie

#include <stdio.h>

void main ( void 
{
int stawka_vat = 0;
float cena_brutto;
float cena_netto = 10.0f;

stawka_vat = 22;
cena_brutto = cena_netto * 

(1.0 + stawka_vat / 100.0 );

printf("Cena brutto= %f  \n”, cena_brutto );
}

#include <iostream>

using namespace std; 

void main ( void 
{
int stawka_vat = 0;
float cena_brutto;
float cena_netto = 10.0f;

stawka_vat = 22;
cena_brutto = cena_netto * 

(1.0 + stawka_vat / 100.0 );

cout << "Cena brutto= " << cena_brutto <<endl;
}

Uwaga na

błędy obliczeń 

(zastosowano

float)!