2011 mitp1 02id 27495 Nieznany

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

w

C++

Słowa kluczowe

w

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

i

powrotami

z

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( int, int, int

,

int );

void

dlugosc_wektora( float, float );

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


Wyszukiwarka

Podobne podstrony:
2011 mitp1 01id 27494 Nieznany (2)
PPS 2011 W7 id 381592 Nieznany
Calki, IB i IS, 2011 12 id 1073 Nieznany
Egzamin 2011 algebra id 151848 Nieznany
6 25 11 2011 la grammaire desc Nieznany (2)
BAL 2011 cwicz6 id 78938 Nieznany (2)
AMB ME 2011 wyklad01 id 58945 Nieznany (2)
2011 chemia maturaid 27413 Nieznany (2)
4OS 2011 w5 id 39385 Nieznany
2 21 10 2011 la grammaire desc Nieznany (2)
marzec 2011 wybrane id 281154 Nieznany
BAL 2011 cwicz 3 id 78934 Nieznany (2)
19 07 2011 ucho(1)id 18427 Nieznany
2010 11 02 WIL Wyklad 02id 2717 Nieznany (2)
22 01 2011 TEST A 2id 29465 Nieznany
04 pods inf I 02id 5143 Nieznany (2)
2011 pierwszy termin Ekonometri Nieznany (2)
chemia proz maj 2011 cke id 112 Nieznany

więcej podobnych podstron