PR1 04b

background image



Funkcje (procedury)



deklaracja i definicja funkcji



zasięg zmiennych



przekazywanie parametrów (wartość, adres)



Modułowa budowa programu



Struktury

Wyk

Wyk

ł

ł

ad

ad

:

:

Modu

Modu

ł

ł

owa struktura. Funkcje

owa struktura. Funkcje

programu. Struktury

programu. Struktury

background image

Funkcje

Funkcje



Funkcja definiuje czynność (procedurę) do wykonania



Deklaracja funkcji podaje się typ wartości przekazywanej z
funkcji (o ile jest ona przekazywana), nazwę funkcji oraz
argumenty formalne (wraz z ich typem), które należy
dostarczyć podczas jej wywołania



Definicja funkcji zawiera instrukcje składające się na
wykonywaną przez funkcję operację



W języku C# definicja funkcji jest połączoną z jej
deklaracją

Funkcje (procedury) to nazwane fragmenty programu

(ciągi instrukcji komunikujące się z otoczeniem)

background image

Sk

Sk

ł

ł

adnia funkcji

adnia funkcji

public int Suma

(int liczba1, double liczba2)

{ }

modyfikator

dostępu

typ zwracanej

wartości

nazwa

funkcji

lista parametrów

(typ parametru

oraz nazwa

parametru)

definicja funkcji, czyli jej

treść (ciało funkcji)

operator

wołania

funkcji

( )

sygnatura funkcji = nazwa funkcji oraz lista parametrów

background image

Deklaracja funkcji (1)

Deklaracja funkcji (1)



Funkcja jest identyfikowana poprzez swoją sygnaturę
(nazwa i lista parametrów), która musi być unikalna



Funkcje posiadają typ zwracanej wartości. Brak
zwracania wartości (procedura) określa się poprzez
słowo kluczowe

void

(pusty).



Funkcje posiadają modyfikatory dostępu, które
określają widoczność funkcji w module, programie. Są
to modyfikatory

public

,

private

,

protected

public int Suma(int liczba1, int liczba2)
{

int s = liczba1 + liczba2;
return s;

}

background image

Deklaracja funkcji (2)

Deklaracja funkcji (2)

public void Wypisz(string s)

{

Console.WriteLine("Wynik = " + s);

}

private void Hello()

{

Console.WriteLine("Hello!");

}

funkcja nie zwraca wartości

funkcja nie posiada

parametrów

background image

Zwracanie warto

Zwracanie warto

ś

ś

ci przez funkcj

ci przez funkcj

ę

ę



Funkcja, której typ jest różny od

void

(odpowiednik procedury w

języku Pascal), musi przekazać na zewnątrz wartość. Wartość tą
określa się instrukcją return



Wartość zwracana przez instrukcję return musi być tego samego
typu, co zadeklarowany typ zwracany przez funkcję



Instrukcja

return

może w definicji funkcji pojawiać się

wielokrotnie:

public double Funkcja(int X, double Y)

{

if (X > 1) return X*Math.Log(Y);

else return X * Y;

}

background image

Deklaracja funkcji (3)

Deklaracja funkcji (3)

-

-

polimorfizm

polimorfizm

public int Fun(int liczba)

{

return liczba + 1;

}

public int Fun(double liczba)

{

int x = (int)liczba;
return x * 10;

}

public int Fun(int liczba1, liczba2)

{

return liczba1 + liczba2;

}
public double Fun(int liczba) {

/* … */

}

tak nie wolno! funkcja nie

zmoże zwracać wartości

innego typu

Wolno nazwać funkcje tak

samo, ale muszą mieć różne

sygnatury

background image

Zwracanie warto

Zwracanie warto

ś

ś

ci w

ci w

funkcjach w j

funkcjach w j

ę

ę

zyku

zyku

C#

C#

public int Funkcja1(int arg)
{ int a;

if (arg > 10) a = 1; else a = -1;
if (arg > 5) return 10;
else {

if (a < 0) return 100;

}

}
public int Funkcja2(int arg)
{ int a;

if (arg > 10) a = 1; else a = -1;
if (arg > 5) return 10;
else if (a < 0) return 100;
return 0;

/* sterowanie i tak tutaj nie dostanie

się, ale... */

}

Kompilator nie jest

kompetentny, aby znać
logikę funkcji i nie wie

czy przypadkiem nie

nastąpi sytuacja, w której

funkcja „pójdzie takim

torem”, że nie zwróci

wartości

background image

Zasi

Zasi

ę

ę

g zmiennych

g zmiennych



Zasięgiem zmiennej jest blok, w którym została zadeklarowana

public void Main()
{

int x = 5;
int y = Funk(x);
Console.WriteLine("Suma {0}", y);

}

public int Funk(int a)
{

double x;
if (a < 10) x = a*a; else x = a * 5;
return x;

}

zmienna x w funkcji

Funk

jest innego typu (double)

niż w programie głównym i istnieje aż do natrafienia

na klamrę zamykającą ciało funkcji

Funk

.

background image

Przekazywanie parametr

Przekazywanie parametr

ó

ó

w do funkcji

w do funkcji



Dla typów prostych parametry funkcji są domyślnie
przekazywane przez wartość



Dla typów referencyjnych domyślnym sposobem
przekazywania parametrów do funkcji jest
przekazywanie przez adres



Dla typów prostych istnieje możliwość jawnego
określenia, że parametr przekazywany jest przez
referencję (operatory

ref

i

out

).

background image

Przekazywanie parametr

Przekazywanie parametr

ó

ó

w przez warto

w przez warto

ść

ść

Dla typów prostych parametry funkcji są domyślnie przekazywane przez

wartość, czyli do funkcji trafia sporządzona w momencie wywołania
kopia zmiennej (parametru), a zmiana dokonana na zmiennej nie będzie
miała wpływu na oryginalny parametr.

public int Fun(int param)
{

param++;
return param;

}
public void Abc()
{

int liczba = 7;
int razem = Fun(liczba) + liczba;
Console.WriteLine("Dla {0} funkcja = {1}", liczba, razem);

}

Fun = 8

liczba = 7

background image

Przekazywanie parametr

Przekazywanie parametr

ó

ó

w przez referencj

w przez referencj

ę

ę

public void Main()
{

int[] Tab = new int[4] = { 1, 3, 4, 2};
int suma1 = Sumuj(Tab);
int suma2 = Sumuj(Tab);
Console.WriteLine("Suma wynosi {0}", suma1);
Console.WriteLine("Suma wynosi {0}", suma2);

}

public int Sumuj(int[] T)
{ int suma = 0;

for (int i = 0; i < T.Length; i++)

{ suma += T[i];

T[i] = T[i] + 1;

}

return suma;

}

suma1 = 10
suma2 = 14

typy referencyjne: tablice, kolekcje, obiekty różnych klas i ich złożenia

background image

Przekazywanie parametr

Przekazywanie parametr

ó

ó

w typ

w typ

ó

ó

w prostych przez

w prostych przez

referencj

referencj

ę

ę

Dla typów prostych parametry funkcji mogą być przekazywane

przez referencję dzięki operatorom ref i out.

public int Fun(ref int x, out int y)
{ x++;

y = 5;
int a = x + y;
return a;

}
public void Abc()
{ int licz1 = 7;

int licz2;
int r = Fun(ref licz1, out licz2);

Console.WriteLine("Dla {0},{1} funkcja = {2}", licz1, licz2, r);

}

razem = 13

liczba1 = 8

liczba1 = 5

background image

Przekazywanie przez referencj

Przekazywanie przez referencj

ę

ę

w j

w j

ę

ę

zyku C#

zyku C#

(

(

2)

2)



Do przekazywania wartości do funkcji służy słowo kluczowe

ref

. Parametr

przekazywany do funkcji ze słowem

ref

musi mieć zainicjowaną wartość.



Do przekazywania wartości do funkcji służy również słowo kluczowe

out

.

Parametr przekazywany do funkcji ze słowem

out

nie musi mieć

zainicjowanej wartości.

public int Fun1(ref int a, ref int b) {

/* ... */

}

public int Fun2(out int a, out int b) {

/* ... */

}

int a, b;

int c, d;

int x = Fun1(a,b);

int z = Fun2(out c, out d);

int e = 0, f = 1;

Int y = Fun1(ref e, ref f);

błąd

tak może być

tak może być

background image

Kod spaghetti

Kod spaghetti

etyk1:

if (…) goto etyk3;
if (…) goto etyk2;
// …

etyk4:

if (…) goto etyk5;

etyk3:

// …

etyk5:

// …
if (…) goto etyk1;
if (…) goto etyk4;

etyk2:

// …

Stosowanie (nadmierne)

instrukcji

goto

prowadzi

do nieczytelności kodu i

niemożności jego sensownej

analizy

Idea programowania

strukturalnego i

proceduralnego polega na

rozbijaniu programu na
prostsze, autonomiczne

fragmenty (np.

procedury)

problem

background image

Modu

Modu

ł

ł

owa budowa programu

owa budowa programu

void Main()

{

PobierzDane();

WykonajObliczenia();

WypiszRezultaty();

}

private void PobierzDane()

{

// … coś tu się wykonuje

}

private void WykonajObliczenia() {

/* … */

}

private void WypiszRezultaty() {

/* … */

}

Zasada modułowości i

programowania strukturalnego

zakłada, że należy stosować

tylko takie konstrukcje sterujące

wykonaniem programu, żeby

mieć zawsze jeden punkt

wejściowy i jeden punkt

wyjściowy (funkcje, instrukcje

pętli (for, do-while), switch itp.

problem

background image

Struktury (jako typ danych)

Struktury (jako typ danych)

struct Motyl
{ string Nazwa;

string nazwaŁacińska;

int rozmiarSkrzydeł;

};

public void Main()
{
Motyl M1, M2;
M1.Nazwa = „Bielinek rzepnik”;
M1.nazwaŁacińska = "

Pieris rapae";

M1.rozmiarSkrzydeł = 130;
M2.Nazwa = „Paź królowej”;

M2.rozmiarSkrzydeł = 50;
M2.rozmiarSkrzydeł++;
}

Deklaracja struktury

Motyl

background image

Struktury (cechy)

Struktury (cechy)



Struktury określa się mianem "klas wagi lekkiej"



Struktura może zawierać pola, metody (funkcje),
właściwości, zdarzenia, konstruktory



Struktura może dziedziczyć po interfejsach



Struktury różnią się zasadniczo od klas tym, że



Struktura jest typem wartościowym (każda struktura
dziedziczy po klasie

System.ValueType

)



Struktura nie może dziedziczyć po klasach



Struktura nie może być przedmiotem dziedziczenia



Bezpośrednio deklarowany konstruktor struktury musi mieć
przynajmniej jeden parametr



Składowe struktury nie mogą być inicjowane w momencie
deklarowania

background image

Konstruktory

Konstruktory

w strukturach

w strukturach

public struct Student {

public string imię;
public string nazwisko;
public string kierunek;

public Student(string i, string n, string k)
{ imi
ę = i;

nazwisko = n;
kierunek = k;

}

}

// i użycie struktury Student w programie

public void Main()
{

Student s = new Student("jan", "kowalski",

"informatyka");

}

Konstruktor struktury

Motyl

jawny konstruktor

struktury musi zawierać

wszystkie pola struktury !


Wyszukiwarka

Podobne podstrony:
PR1 04b
Matematyka PG PP kl2 MPZ sprawdzian 04B arkusz
PR1 04a
elektro wyklad 04b
Pr1 cyw - zestawy Justynski, Prawo Cywilne
Pr1 cyw zestawy Justynski
04b RACHUNEK ZYSKÓW I STRAT
PR1 Nieznany
04b BUDOWA CIALA STALEGOid 53 Nieznany (2)
037 LS pr1
084 SO pr1
0656PWsrTz1 Rysunek 04b
113 SL pr1
PR1 01
FIG-04B
MT PR1 dane gr7 (1)
miernictwo 04b oscyloskop ox 800

więcej podobnych podstron