P
ROGRAMOWANIE I JĘZYK
C++
/
A
NALIZA PROGRAMÓW NR
3
Temat: Funkcje języka C++
Zadanie
Wykonać analizę poniższych programów. Nie używając komputera obliczyć wartości zmiennych określonych
jako OUTPUT przy danych wejściowych INPUT oraz wypisać kolejne wartości drukowane przez program
w konsoli. Sprawdzić wyniki uruchamiając odpowiedni kod programu na komputerze.
Cześć 1: Przekazywanie parametrów do funkcji przez wartość.
1.
// INPUT : -
// OUTPUT : liczba
int
WybierzLiczbe (
int
a,
int
b,
int
c);
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
p = 10, q = 3, r = 16;
int
liczba = WybierzLiczbe(p,q,r);
cout <<
"Dane liczby to ..."
<< endl;
cout <<
"p = "
<< p << endl;
cout <<
"q = "
<< q << endl;
cout <<
"r = "
<< r << endl << endl;
cout <<
"Wybrana liczba ma wartosc = "
<< liczba << endl;
_getch();
return
0;
}
int
WybierzLiczbe (
int
a,
int
b,
int
c)
{
int
w;
if
(a > b)
w = a;
else
w = b;
if
(c > w)
w = c;
return
w;
}
2.
// INPUT : -
// OUTPUT : liczba
int
Funkcja1 (
int
x,
int
y);
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
z = 3, q = 12, liczba;
cout <<
"Wartosci zmiennych przed wykonaniem funkcji 'Funkcja1' ..."
<< endl;
cout <<
"z = "
<< z << endl;
cout <<
"q = "
<< q << endl;
liczba = Funkcja1(z,q);
cout <<
"Wartosci zmiennych po wykonaniu funkcji 'Funkcja1' ..."
<< endl;
cout <<
"z = "
<< z << endl;
cout <<
"q = "
<< q << endl;
cout <<
"Wybrana liczba ma wartosc = "
<< liczba << endl;
_getch();
return
0;
}
int
Funkcja1 (
int
x,
int
y)
{
int
a = 4,b = -8,u;
x = (a++) * (--b);
y = (--x) + 10;
u = x + y;
return
u;
}
Cześć 2: Przekazywanie parametrów do funkcji przez wskaźnik.
1.
// INPUT : -
// OUTPUT : liczba
void
Funkcja1 (
int
x,
int
* y,
int
* u);
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
z = 3, q = 12, liczba;
cout <<
"Wartosci zmiennych przed wykonaniem funkcji 'Funkcja1' ..."
<< endl;
cout <<
"z = "
<< z << endl;
cout <<
"q = "
<< q << endl;
Funkcja1(z,&q,&liczba);
cout <<
"Wartosci zmiennych po wykonaniu funkcji 'Funkcja1' ..."
<< endl;
cout <<
"z = "
<< z << endl;
cout <<
"q = "
<< q << endl;
cout <<
"Wybrana liczba ma wartosc = "
<< liczba << endl;
_getch();
return
0;
}
void
Funkcja1 (
int
x,
int
* y,
int
* u)
{
int
a = 6,b = -3;
x = (a++) * (--b);
*y = (--x) + 10;
*u = x - *y;
}
2.
// INPUT : -
// OUTPUT : a[i], i = 0,1,...,5; k
int
Zliczanie (
int
n,
double
a[],
double
w);
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
i,k;
double
tab[6] = {-4.5, 2.1, 6.7, 12.2, 13.8, 7.0};
double
w = 10;
cout <<
"Kolejne elementy tablicy przed wykonaniem funkcji 'Zliczanie' ...";
cout << endl;
for
(i=0; i<=5; i++)
cout <<
"tab["
<< i <<
"] = "
<< tab[i] << endl;
k = Zliczanie (6,tab,w);
cout <<
"Kolejne elementy tablicy przed wykonaniem funkcji 'Zliczanie' ...";
cout << endl;
for
(i=0; i<=5; i++)
cout <<
"tab["
<< i <<
"] = "
<< tab[i] << endl;
cout <<
"Wartosc zwrocona przez funkcje to "
<< k << endl;
_getch();
return
0;
}
int
Zliczanie (
int
n,
double
a[],
double
w)
{
int
i,s = 0;
for
(i=0; i<=n-1; i++)
{
if
(a[i] < 5)
a[i] = a[i] - w;
else
if
(a[i] > 5)
{
s = s + 1;
a[i] = a[i] + 2*w;
}
}
return
s;
}
Cześć 3: Przekazywanie parametrów do funkcji przez referencję.
1.
// INPUT : -
// OUTPUT : B[i], i = 0,1,...,4; iloczyn_elem; iloczyn_elem
void
ZliczenieElementowUjemnych (
int
n,
double
* pB,
int
& liczba);
void
PrzeksztalcenieTablicy (
int
n,
double
* pB);
void
ObliczenieIloczynuLiczb (
int
n,
double
* pB,
double
& iloczyn);
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
i,m,liczba_elem;
double
iloczyn_elem;
m = 5;
double
B[5] = {-1.0, -2.0, -4.0, 13.0, 2.0};
cout <<
"Kolejne elementy tablicy przed wykonaniem funkcji ..."
<< endl;
for
(i=0; i<=4; i++)
cout <<
"B["
<< i <<
"] = "
<< B[i] << endl;
ZliczenieElementowUjemnych(m,&B[0],liczba_elem);
PrzeksztalcenieTablicy(m,B);
ObliczenieIloczynuLiczb(m,B,iloczyn_elem);
cout <<
"Kolejne elementy tablicy po wykonaniu funkcji ..."
<< endl;
for
(i=0; i<=4; i++)
cout <<
"B["
<< i <<
"] = "
<< B[i] << endl;
cout <<
"Liczba elementow ujemnych = "
<< liczba_elem << endl;
cout <<
"Iloczyn elementow tablicy = "
<< iloczyn_elem << endl;
_getch();
return
0;
}
void
ZliczenieElementowUjemnych (
int
n,
double
* pB,
int
& liczba)
{
int
i;
liczba = 0;
i = 0;
do
{
if
(pB[i] < 0)
liczba = liczba + 1;
i = i + 1;
}
while
(i < n);
}
void
PrzeksztalcenieTablicy (
int
n,
double
* pB)
{
int
i = 0;
do
{
if
(pB[i] < 0)
pB[i] = -1.0 * pB[i];
else
pB[i] = pB[i] + 2.0;
i = i + 1;
}
while
(i < n);
}
void
ObliczenieIloczynuLiczb (
int
n,
double
* pB,
double
& iloczyn)
{
int
i;
iloczyn = 1.0;
for
(i=0; i<=n-1; i++)
iloczyn = iloczyn*pB[i];
}
Cześć 4: Przekazywanie parametrów do funkcji przez wartość, wskaźnik lub referencję
(zadania mieszane).
1.
// INPUT : adres zmiennej a = 1000, adres zmiennej b = 2000,
// adres zmiennej c = 3000
// OUTPUT : podac wartosci, ktore wypisze program
int
Funkcja1 (
int
* x,
int
* y);
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
a = 2,b = -5,c = 15;
int
* ptr1 = &a, * ptr2 = &b;
cout <<
"a = "
<< a << endl;
cout <<
"b = "
<< b << endl;
cout <<
"c = "
<< c << endl;
cout <<
"ptr1 = "
<< ptr1 << endl;
cout <<
"ptr2 = "
<< ptr2 << endl;
cout <<
"*ptr1 = "
<< *ptr1 << endl;
cout <<
"*ptr2 = "
<< *ptr2 << endl;
c = Funkcja1 (ptr1,ptr2);
cout <<
"c = "
<< c << endl;
cout <<
"*ptr1 = "
<< *ptr1 << endl;
cout <<
"*ptr2 = "
<< *ptr2 << endl;
cout <<
"a = "
<< a << endl;
cout <<
"b = "
<< b << endl;
cout <<
"c = "
<< c << endl;
_getch();
return
0;
}
int
Funkcja1 (
int
* x,
int
* y)
{
int
q = 5;
*x = (*x)++;
*y = (*y) + 10;
q = *x + *y;
return
q;
}
2.
// INPUT : adres zmiennej a = 1000
// OUTPUT : podac wartosci, ktore wypisze program
void
Funkcja1 (
int
x,
int
* y,
int
& z);
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
a = -3,b = 10,c = 5;
int
* ptr1 = &a;
cout <<
"a = "
<< a << endl;
cout <<
"b = "
<< b << endl;
cout <<
"c = "
<< c << endl;
cout <<
"ptr1 = "
<< ptr1 << endl;
cout <<
"*ptr1 = "
<< *ptr1 << endl;
Funkcja1 (c,&a,b);
cout <<
"a = "
<< a << endl;
cout <<
"b = "
<< b << endl;
cout <<
"c = "
<< c << endl;
cout <<
"ptr1 = "
<< ptr1 << endl;
cout <<
"*ptr1 = "
<< *ptr1 << endl;
_getch();
return
0;
}
void
Funkcja1 (
int
x,
int
* y,
int
& z)
{
x = (++x) - ((*y)--);
z = x + (*y) + 10;
}