1
Informatyka 1
Informatyka 1
zaj
zaj
ę
ę
cia nr 13
cia nr 13
Elektrotechnika, semestr II
Elektrotechnika, semestr II
rok akademicki 2008/2009
rok akademicki 2008/2009
mgr in
mgr in
ż
ż
. Pawe
. Pawe
ł
ł
Myszkowski
Myszkowski
Plan dzisiejszych zaj
Plan dzisiejszych zaj
ęć
ęć
1.
1.
Funkcje
Funkcje
–
–
przypomnienie podstaw
przypomnienie podstaw
2.
2.
Sposoby przekazywania parametr
Sposoby przekazywania parametr
ó
ó
w do
w do
funkcji
funkcji
a)
a)
przez warto
przez warto
ść
ść
b)
b)
przez wska
przez wska
ź
ź
nik
nik
c)
c)
przez referencj
przez referencj
ę
ę
3.
3.
Tablice jako parametry funkcji
Tablice jako parametry funkcji
4.
4.
Zadania do zrobienia
Zadania do zrobienia
2
1. Funkcje
1. Funkcje
–
–
przypomnienie podstaw
przypomnienie podstaw
System
operacyjny
Funkcja
main()
Funkcja
biblioteczna
lub
użytkownika
Uruchomienie
programu,
przekazanie
parametrów
Wywołanie
funkcji,
przekazanie
parametrów
Zwrócenie
wartości
Zwrócenie
wartości
Schemat:
Schemat:
typ_zwracanego_wyniku
typ_zwracanego_wyniku
nazwa_funkcji
nazwa_funkcji
(
(
parametry_funkcji
parametry_funkcji
)
)
{
{
//cia
//cia
ł
ł
o funkcji, czyli deklaracje zmiennych, instrukcje
o funkcji, czyli deklaracje zmiennych, instrukcje
return
return
warto
warto
ść
ść
_zwracana_przez_funkcj
_zwracana_przez_funkcj
ę
ę
;
;
}
}
Lini
Lini
ę
ę
typ_zwracanego_wyniku
typ_zwracanego_wyniku
nazwa_funkcji
nazwa_funkcji
(
(
parametry_funkcji
parametry_funkcji
)
)
nazywamy nag
nazywamy nag
ł
ł
ó
ó
wkiem funkcji.
wkiem funkcji.
1. Funkcje
1. Funkcje
–
–
przypomnienie podstaw
przypomnienie podstaw
3
Funkcja z parametrami
Funkcja z parametrami
Definicja:
Definicja:
int
int
sumuj(int
sumuj(int
a,
a,
int
int
b)
b)
lub pro
lub pro
ś
ś
ciej
ciej
int
int
sumuj(int
sumuj(int
a,
a,
int
int
b)
b)
{
{
{
{
int
int
c=a+b
c=a+b
;
;
return (
return (
a+b
a+b
);
);
return c;
return c;
}
}
}
}
Wywo
Wywo
ł
ł
anie:
anie:
int
int
x1, x2, wynik;
x1, x2, wynik;
printf("Podaj
printf("Podaj
dwie liczby ca
dwie liczby ca
ł
ł
kowite: ");
kowite: ");
scanf("%d%d",&x1,&x2);
scanf("%d%d",&x1,&x2);
wynik=sumuj(x1,x2);
wynik=sumuj(x1,x2);
//inne wywo
//inne wywo
ł
ł
anie by
anie by
ł
ł
oby b
oby b
łę
łę
dne!
dne!
1. Funkcje
1. Funkcje
–
–
przypomnienie podstaw
przypomnienie podstaw
a) przez warto
a) przez warto
ść
ść
Przekazywanie przez warto
Przekazywanie przez warto
ść
ść
przedstawione zosta
przedstawione zosta
ł
ł
o na poprzednim
o na poprzednim
slajdzie. Sprawd
slajdzie. Sprawd
ź
ź
my nast
my nast
ę
ę
puj
puj
ą
ą
cy przyk
cy przyk
ł
ł
ad:
ad:
void
void
podwoj_parametr(int
podwoj_parametr(int
a)
a)
{
{
a=a*2;
a=a*2;
return;
return;
}
}
Wywo
Wywo
ł
ł
anie:
anie:
int
int
liczba=10;
liczba=10;
podwoj_parametr(liczba
podwoj_parametr(liczba
);
);
printf("Liczba
printf("Liczba
po podwojeniu = %
po podwojeniu = %
d",liczba
d",liczba
);
);
2. Sposoby przekazywania parametr
2. Sposoby przekazywania parametr
ó
ó
w
w
Gdy parametr przekazujemy przez
wartość, przy wejściu do funkcji
kompilator tworzy jego kopię.
Wszelkie operacje wewnątrz funkcji
wykonywane są na tej kopii, ale jest
ona usuwana przy wyjściu z funkcji.
Zatem zmiana nie jest widoczna na
zewnątrz.
4
b) przez wska
b) przez wska
ź
ź
nik
nik
void
void
podwoj_parametr(int
podwoj_parametr(int
*a)
*a)
{
{
*a=*a*2;
*a=*a*2;
return;
return;
}
}
Wywo
Wywo
ł
ł
anie:
anie:
int
int
liczba=10;
liczba=10;
podwoj_parametr(&liczba
podwoj_parametr(&liczba
);
);
printf("Liczba
printf("Liczba
po podwojeniu = %
po podwojeniu = %
d",liczba
d",liczba
);
);
2. Sposoby przekazywania parametr
2. Sposoby przekazywania parametr
ó
ó
w
w
W tym przypadku do funkcji trafia
adres obszaru w pamięci.
Operacje wykonywane są
na zawartości tego obszaru,
zatem zmiana widoczna
jest na zewnątrz.
c) przez referencj
c) przez referencj
ę
ę
void
void
podwoj_parametr(int
podwoj_parametr(int
&a)
&a)
{
{
a=a*2;
a=a*2;
return;
return;
}
}
Wywo
Wywo
ł
ł
anie:
anie:
int
int
liczba=10;
liczba=10;
podwoj_parametr(liczba
podwoj_parametr(liczba
);
);
printf("Liczba
printf("Liczba
po podwojeniu = %
po podwojeniu = %
d",liczba
d",liczba
);
);
//wywo
//wywo
ł
ł
anie nie r
anie nie r
ó
ó
ż
ż
ni si
ni si
ę
ę
od tego, gdy przekazujemy przez warto
od tego, gdy przekazujemy przez warto
ść
ść
2. Sposoby przekazywania parametr
2. Sposoby przekazywania parametr
ó
ó
w
w
Zasada taka sama
jak w poprzednim przypadku,
ale nieco inny mechanizm.
Zmiana także widoczna
jest na zewnątrz.
5
void
void
zeruj(int
zeruj(int
tablica[10])
tablica[10])
{
{
int
int
i;
i;
for (i=0;i<10;i++)
for (i=0;i<10;i++)
tablica[i]=0;
tablica[i]=0;
}
}
Wywo
Wywo
ł
ł
anie:
anie:
int
int
tab[10];
tab[10];
…
…
zeruj(tab
zeruj(tab
); //przy wywo
); //przy wywo
ł
ł
aniu nie podajemy rozmiaru, a tylko nazw
aniu nie podajemy rozmiaru, a tylko nazw
ę
ę
3. Tablice jako parametry funkcji
3. Tablice jako parametry funkcji
Nazwa tablicy jest adresem
jej pierwszego elementu
(początku obszaru, w którym się mieści).
Zatem choć przekazanie wygląda jak
przez wartość, ale tylko tak wygląda.
Tak naprawdę jest to przekazanie
przez referencję i zmiana zachodzi.
Je
Je
ż
ż
eli chcemy zablokowa
eli chcemy zablokowa
ć
ć
tablic
tablic
ę
ę
przed zmian
przed zmian
ą
ą
w funkcji, dodajemy
w funkcji, dodajemy
modyfikator
modyfikator
const
const
.
.
void
void
zeruj(
zeruj(
const
const
int
int
tablica[10])
tablica[10])
{
{
int
int
i;
i;
for (i=0;i<10;i++)
for (i=0;i<10;i++)
tablica[i]=0;
tablica[i]=0;
}
}
Wywo
Wywo
ł
ł
anie:
anie:
int
int
tab[10];
tab[10];
…
…
zeruj(tab
zeruj(tab
); //i tu kompilator b
); //i tu kompilator b
ę
ę
dzie krzycza
dzie krzycza
ł
ł
,
,
ż
ż
e tak nie wolno
e tak nie wolno
3. Tablice jako parametry funkcji
3. Tablice jako parametry funkcji
6
Dzi
Dzi
ę
ę
kuj
kuj
ę
ę
za uwag
za uwag
ę
ę