Ćwiczenia 12 VI 2012
Zadanie 10.3:
Napisać program, który odwołując się do funkcji potega (zdefiniowanej przed programem) dla liczb
całkowitych z określonego przedziału, policzy wszystkie potęgi od 2 do 5.
Zadanie 10.4:
Napisać program, który odwołując się do funkcji silnia (zdefiniowanej przed programem) dla wczytanej
liczby naturalnej policzy silnię.
Uwaga: W bloku funkcji mo\e wystąpić więcej ni\ jedna instrukcja return (np. przy u\yciu instrukcji
warunkowych)
ZMIENNE GLOBALNE
Parametr zadeklarowany na zewnątrz wszystkich funkcji występujących w danym pliku jest dostępny
wewnątrz wszystkich tych funkcji (oczywiście od linijki, w której nastąpi deklaracja).
Przykład:
#include
#include
using namespace std;
int liczba;
void f1(void) {
int x;
x = 10;
liczba ++;
cout << " w sumie = " << (x + liczba);
}
int main()
{int i;
liczba = 20;
i = 5;
cout << "Wartosci: liczba = " << liczba<< " niezmieniane i = " << i< f1();
cout << " a teraz liczba = " < f1();
cout << " a teraz liczba = " < system("PAUSE");
return EXIT_SUCCESS;
}
PRZESYAANIE ARGUMENTÓW PRZEZ REFERENCJE
Przekazywanie argumentów przez wartość jest tu domyślnym mechanizmem. Przy jego braku ka\da zmiana
wartości argumentu formalnego nie poprzedzonego modyfikatorem const wywołałaby taką samą zmianę
argumentu aktualnego. Zało\enie to zostało podyktowane tym, \e ewentualne zmiany wartości argumentów
aktualnych, będące wynikiem wykonania jakiejś funkcji, są na ogół traktowane jako niepo\ądane efekty.
Natomiast w przypadku tablic jest stosowany mechanizm, który nakazuje kompilatorowi przekazanie
argumentów aktualnych w postaci adresu pierwszego elementu tablicy zamiast kopii całej tablicy.
Argumenty do funkcji mo\emy przesyłać nie tylko przez wartość (tak jak widzieliśmy wcześniej), ale
równie\ przez referencje. Pozwala to funkcji na modyfikację zmiennych (nawet lokalnych) znajdujących się
poza tą funkcją.
Przykład
#include
#include
using namespace std;
void zmiana(int wartosc, int &referencja)
{
cout << "\n W funkcji 'zmiana' przed jej dokonaniem \n" ;
cout << "\n wartosc = " << wartosc << ", referencja = "
<< referencja << endl;
wartosc = -1;
referencja = -1;
cout << "\n W funkcji 'zmiana' po zmianie \n";
cout << "\n wartosc = " << wartosc << ", referencja = "
<< referencja << endl;
return;
}
int main()
{ int a = 13, b = 17;
cout << "Przed wywolaniem funkcji: 'zmiana' \n";
cout << "a = " << a << ", b = " << b << endl;
zmiana(a, b);
cout << "Po wyjsciu z funkcji: 'zmiana' \n";
cout << "a = " << a << ", b = " << b << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
W przykładzie zmienna a nie uległa modyfikacji, poniewa\ była przekazywana do funkcji przez wartość,
natomiast b przez referencje, zatem została zmieniona.
UWAGA: Jeśli w trakcie programu została wywołana funkcja, w ciele której znajduje się odwołanie do
kolejnej funkcji, wówczas wywołanie funkcji zawiesza wykonanie funkcji wołającej i powoduje
zapamiętanie adresu następnej instrukcji do wykonania po powrocie z funkcji wołanej. Adres ten, nazywany
adresem powrotnym, zostaje umieszczony w pamięci na stosie programu (run-time stack). Wywołana
funkcja otrzymuje wydzielony obszar pamięci na stosie programu, nazywany rekordem aktywacji lub stosem
funkcji. W rekordzie aktywacji zostają umieszczone argumenty formalne, inicjowane jawnie w deklaracji
funkcji, lub niejawnie przez wartości argumentów aktualnych.
Zadanie 10.5:
Napisać program, który pozwoli u\ytkownikowi na policzenie pola podstawy, pola powierzchni bocznej
oraz objętości (ka\da z wartości za pomocą oddzielnej funkcji) jednej z następujący brył (u\ytkownik musi
mieć mo\liwość wyboru, dla której z wymienionych brył chce wykonać obliczenia): 1. sto\ek, 2.
prostopadłościan z kwadratem w podstawie, 3. czworościan prawidłowy. Przy czym o podanie
odpowiednich wymiarów u\ytkownik musi być poproszony, aby wyprowadził je z klawiatury.
WSKAyNIKI DO FUNKCJI
Tak jak nazwa tablicy, nazwa funkcji jest stałym wskaznikiem.
Zatem: int f(int); oznacza deklarację funkcji f
Natomiast int (*pf) (int); oznacza deklarację wskaznika do funkcji typu int funkcja(int)
Zaś pf = &f; oznacza, \e adres f przypisany jest do pf.
Przykład
#include
#include
#include
using namespace std;
void wypisywanie(int tab[10], int &n)
{
cout<<"podaj ilosc elementow tablicy "; cin>>n;
for (int i=1; i<=n; i++)
{
cout <<"element tablicy nr "<>tab[i];
}
}
void wariancja(int tab[10], int &n, float &war)
{
float sr=0;
for (int i=1; i<=n; i++)
sr+=tab[i];
sr/=n;
war=0;
for (int i=1; i<=n; i++)
war=war+(tab[i]-sr)*(tab[i]-sr);
war=sqrt(war/n);
}
int main()
{int n,tab[10];
float war;
wypisywanie(tab,n);
wariancja(tab,n,war);
cout <<"wariancja dla podanej tablicy= "< system("PAUSE");
return EXIT_SUCCESS;
}
Klasy w C++
Klasa jest kluczową koncepcją języka C++, realizującą abstrakcję danych na bardzo wysokim poziomie.
Odpowiednio zdefiniowane klasy stawiają do dyspozycji u\ytkownika wszystkie istotne mechanizmy
programowania obiektowego: ukrywanie informacji, dziedziczenie, polimorfizm z wiązaniem póznym, a
tak\e szablony klas i funkcji. Klasa jest deklarowana i definiowana z jednym z trzech słów kluczowych:
class, struct i union.
Elementami składowymi klasy mogą być struktury danych ró\nych typów, zarówno podstawowych, jak i
zdefiniowanych przez u\ytkownika, a tak\e funkcje dla operowania na tych strukturach. Dostęp do
elementów klasy określa zbiór reguł dostępu.
Klasa jest typem definiowanym przez u\ytkownika. Deklaracja klasy składa się z nagłówka, po którym
następuje ciało klasy, ujęte w parę nawiasów klamrowych; po zamykającym nawiasie klamrowym musi
wystąpić średnik, ewentualnie poprzedzony listą zmiennych. W nagłówku klasy umieszcza się słowo
kluczowe class (lub struct albo union), a po nim nazwę klasy, która od tej chwili staje się nazwą nowego
typu.
Klasa mo\e być deklarowana:
-Na zewnątrz wszystkich funkcji programu. Zakres widzialności takiej klasy rozciąga się na wszystkie pliki
programu.
-Wewnątrz definicji funkcji. Klasę taką nazywa się lokalną, poniewa\ jej zakres widzialności nie wykracza
poza zasięg funkcji.
-Wewnątrz innej klasy. Klasę taką nazywa się zagnie\d\oną, poniewa\ jej zakres widzialności nie wykracza
poza zasięg klasy zewnętrznej.
Deklaracji klas nie wolno poprzedzać słowem kluczowym static.
Przykładowe deklaracje klas mogą mieć postać:
class Pusta {};
class Komentarz { /* Komentarz */};
class Niewielka { int n; };" Wystąpienia klasy deklaruje się tak samo, jak zmienne innych
typów, np.
Pusta pusta1, pusta2;
Niewielka nw1, nw2;
Niewielka* wsk = &nw1;
Zmienne pusta1, pusta2, nw1, nw2 nazywają się obiektami, zaś wsk jest wskaznikiem do typu
Niewielka, zainicjowanym adresem obiektu nw1.
Klasy w rodzaju Pusta i Komentarz u\ywa się często jako klasy-makiety podczas opracowywania
programu.
Deklaracje elementów składowych klasy mo\na poprzedzić etykietą public:, protected:, lub private:. Je\eli
sekwencja deklaracji elementów składowych nie jest poprzedzona \adną z tych etykiet, to kompilator
przyjmuje domyślną etykietę private:. Oznacza to, \e dana składowa mo\e być dostępna jedynie dla funkcji
składowych i tzw. funkcji zaprzyjaznionych klasy, w której jest zadeklarowana. Wystąpienie etykiety
public: oznacza, \e występujące po niej nazwy deklarowanych składowych mogą być u\ywane przez
dowolne funkcje, a więc równie\ takie, które nie są związane z deklaracją danej klasy. Znaczenie etykiety
protected: - pózniej.
Ze względu na sterowanie dostępem do składowych klasy, słowa kluczowe public, protected i private
nazywa się specyfikatorami dostępu.
#include
#include
using namespace std;
class Pierwsza_klasa {
public:
int n;
};
int main()
{
Pierwsza_klasa nw1, nw2, *wsk;
nw1.n = 5;
nw2.n = 10;
wsk = &nw1;
cout << nw1.n << endl; //do zmiennej obiektowej
cout << wsk->n << endl; //do zmiennej wskaznikowej
wsk = &nw2;
cout << (*wsk).n << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Wyszukiwarka
Podobne podstrony:
o organizacjach pracodawców 12 06 2012
egzamin 26 06 2012
informatyka klucz 06
KRISPOL BRAMY GARAZ 06 2012
12 06 10
Informatyka 15 05 2012
03 12 06 pra
18 12 06
19 12 06
Informatyka 13 03 2012
Test z ZS rozwiązywany z dr 12 06
egzamin próbny 06 2012
Informatyka 20 03 2012
kolos pytania 12 06
informatyka test 06
więcej podobnych podstron