background image

P

ROGRAMOWANIE I JĘZYK 

C++

  

/

  

A

NALIZA PROGRAMÓW NR 

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; 

background image

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; 

}

 

 

background image

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

 

 

background image

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; 

background image

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]; 
}

background image

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; 

background image

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