Laboratoria nr 12 program nr 1

Funkcje, ogólna struktura funkcji. Umieszczanie definicji funkcji w programie. Zmienne lokalne i globalne. Zasięg i widzialność identyfikatorów.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "stdafx.h"
#include <iostream>
 
// Funkcja inline
inline double square(double x) { return x*x;};
 
// Funkcja zachowujaca wartosc na ktora wskazuje wskaznik i zwracajaca nowy wynik
float square(float const * x);
 
// Modyfikacja wartosci pod adresem wskazywanym przez wskaznik i zwrocenie dodatkowo adresu modyfikowanej wartosci
float *psquare(float * x);
 
// Alternatywne do wskaznikow przekazywanie przez referencje
void square(float &x);
 
float psquare(float const &x);
 
/**
* Funkcje inline wystepuja w C++, C tej funckji nie posiada.
* Program demonstrujacy tworzenie, wywolywanie i dzialanie funkcji inline, jak i pozostalych funkcji
* @author Marcin Mironczuk
*/
int main()
{
    double a = 0;
 
    std::cout << "Podaj wartosc a: " << std::endl;
    std::cin >> a;
    std::cout << "Kwadrat liczby to: " << square(a) << std::endl;
 
    double *p1 = &a;
 
    std::cout << "Wartosc p1: " << *p1 << std::endl;
    std::cout << "Adres p1: " << p1 << std::endl;
    std::cout << "Adres a: " << &a << std::endl;
 
    float k = 2;
    float *p2 = &k;
 
    std::cout << "Wartosc k: " << square(p2) << std::endl;
    std::cout << "Wartosc k: " << *psquare(p2) << std::endl;
    std::cout << "Wartosc k po modyfikacji przez *psquare(): " << k << std::endl;
     
    square(k);
    std::cout << "Wartosc k po modyfikacji przez square(float &x): " << k << std::endl;
    std::cout << "Modyfikacja k poprzez psquare(float const &x): " << psquare(k) << std::endl;
    std::cout << "Wartosc k po modyfikacji przez psquare(float const &x): " << k << std::endl;
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
 
// zabezpiecznie przed modyfikacja wartosci wskazanej
float square(float const * x) {
    return (*x)*(*x);
};
 
float *psquare(float * x) {
    *x = (*x)*(*x);
    return x;
};
 
// Troche niebezpiecznie modyfikujemy przekazywana wartosc
void square(float &x) {
    x = x*x;
};
 
// Bardziej bezpieczny sposob
float psquare(float const &x) {
    return x*x;
}

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Ta strona używa Akismet do redukcji spamu. Dowiedz się, w jaki sposób przetwarzane są dane Twoich komentarzy.