Wskazniki, Informatyka HELP


Powtórzenie

1. Do czego służy funkcja, kiedy stosujemy funkcje w programach

2. Korzyści wynikające z stosowania funkcji

3. Ogólna definicja postać funkcji

4. Co to są zmienne lokalne

5. Analiza programu w którym zawarto funkcję wypisującą komunikat na ekranie monitora:

// Pierwszy program zawierajacy funkcje

#include <iostream.h>

#include <conio.h>

void wypisz_komunikat(void)

{

cout << " To jest funkcja, ktora wypisuje komunikat na ekranie" << endl ;

cout << "To jest komunikat" << endl ;

} //

void main (void)

{

clrscr( ) ;

cout << "Przed wywolaniem funkcji" << endl ;

wypisz_komunikat( );

cout << "Po wywolaniu funkcji" << endl ;

getch( ) ;

}

6. Podać prototypy funkcji wykorzystujące słowo void informujące, że lista parametrów jest pusta lub że funkcja nie podaje wartości.

7. Sposoby przekazywania argumentów funkcjom (przekazywanie parametrów)

8. Na czym polega przekazywanie parametrów przez wartość

******************************************************************************

Przekazywanie parametrów przez wartość

// Przekazywanie parametrow przez wartosc

#include <iostream.h>

#include <conio.h>

void wypisz_liczbe(int liczba) //liczba jest typu int

{

cout << "Wartosc parametru wynosi " << liczba << endl;

}

void main (void)

{

clrscr( ) ;

wypisz_liczbe(10) ;

wypisz_liczbe(100) ;

getch( ) ;

}

Jeśli tworzymy funkcję realizującą jakieś obliczenia, to musimy poinformować kompilator o typie zwracanej wartości, np. int, float, char itd. W tym celu nazwę funkcji należy poprzedzić nazwą określonego typu.

Przykład

Funkcja dodaj_liczby dodającą wartości dwóch parametrów typu całkowitego i zwracająca wynik operacji typu int do programu, w którym została ona wywołana.

//Funkcja dodaje dwie liczby - Plik Funksum.CPP

#include <iostream.h>

#include <conio.h>

int dodaj_liczby (int x, int y) // definiowanie funkcji

{

0x08 graphic
int suma;

suma = x + y // …………………………

return (suma) ;

}

void main (void)

{

clrscr( ) ;

cout << " Program dodaje dwie liczby wykozystując funkcje " << endl ;

cout << "10 + 20 = " << dodaj_liczby(10, 20) << endl ;

getch( ) ;

}

//Funkcja dodaje dwie liczby - Plik Funksum.CPP

#include <iostream.h>

#include <conio.h>

int dodaj_liczby (int x, int y) // definiowanie funkcji

{

0x08 graphic
int suma;

suma = x + y // …………………………

return (suma) ;

}

void main (void)

{

clrscr( ) ;

int x, y;

cout << " Program dodaje dwie liczby wykożystując funkcje " << endl ;

cout <<”podaj x”<<endl;

cin>>x;

cout <<”podaj y”<<endl;

cin>>y;

cout<< x +y=”<< dodaj_liczby (x, y)<<endl;

cout<<”koniec”<<endl;

getch( ) ;

}

Zmienne globalne i lokalne

Przykład

#include <iostream.h>

#include <cenio.h>

int Zmiana(void) ; //

int a ; // zmienna globalna

void main(void)

{

clrscr ( ) ;

a = 1 ; // zmienna globalna

cout << "Wartość zmiennej a = " << a << endl ;

a = Zmiana( ) ;

cout << "Wartość zmiennej a = " << a << endl ;

getch ( ) ;

}

int Zmiana(void)

{

int b ;

a = 10 ; // zmienna globalna

b = 100 ;

return b ;

}

W programie zmienna globalna to a. Jest ona dostępna zarówno w funkcji main( ) jak i
Zmiana( ).

Określanie domyślnych wartości parametrów

Język C++ umożliwia nadawanie domyślnych wartości parametrów. Wystarczy w tym celu przypisać pewne wartości parametrom formalnym tak jak np. w poniższej deklaracji funkcji.

void Pewna( int a=10, int b=20, int c=30, int d=40 )

Wywołanie tej funkcji może mieć postać:

Pewna( l , 2 );

W powyższym wywołaniu dwa pierwsze parametry mają określone wartości, a dwa następne są pobierane z deklaracji funkcji. A zatem omawiane wywołanie jest równoważne następującemu:

Pewna( l, 2, 30, 40 ) ;

W momencie wywołania funkcji nie można pomijać wybranych parametrów, lecz tylko ich część poczynając od dowolnego parametru aż do końca.

Wskaźniki

Zmienne wskaźnikowe deklarujemy:

int *wa ; // została zadeklarowana zmienna wskaźnikowa wa , która może wskazywać obiekty typu int.

Symbol „* ” jest operatorem wyłuskania i musi występować przed nazwą zmiennej np.

int *wa , a=10 , b=20 ; // zadeklarowano zmienną wskaźnikową wa oraz dwie zmienne a i b typu int (zmienne a i b mają przypisane wartości początkowe).

wa = &a ; // użyto symbol „&”operatora adresu za pomocą którego zmienna wskaźnikowa podaje adres konkretnego obiektu ( zmiennej a ).

Aby uzyskać dostęp do wartości zmiennej a za pomocą wskaźnika wa, należy posłużyć się operatorem wyłuskania.

b = * wa ; // wykonanie powyższej instrukcji przypisania spowoduje, że zmienna b otrzyma wartość przechowywaną w zmiennej a.

Powyższe dwie instrukcje są równoważne przypisaniu: b = a ;

b = *wa + 1 ; // zmiennej b zostanie teraz przypisana wartość ......

Operatory wyłuskania „* ” oraz adresu „&” wiążą silniej niż operatory arytmetyczne.

( *wa ) + + ; // zwiększa o l wartość zmiennej wskazywaną przez wa

Powyższa instrukcja zapisana bez nawiasów *wa + + ; nie zadziała zgodnie z oczekiwaniem, ponieważ zostanie zmieniona wartość wskaźnika wa.

Wykorzystanie wskaźników przy przetwarzaniu tablic

W języku C++ operacje na tablicach można wykonywać przy pomocy wskaźników np.:.

- dla tablicy zadeklarowanej: int tab[10] ;

- wskaźnikowi wtab zadeklarowanemu w postaci int *wtab;

Adres pierwszego elementu tablicy można przypisać na dwa sposoby:

wtab = & tab[0] ; // przypisanie adresu pierwszego elementu tablicy

wtab = tab ; // przypisanie adresu pierwszego elementu tablicy

Aby wykonać pewną operację na wszystkich elementach tablicy, na przykład przypisać im wartość 0, można zastosować pętlę for (wykorzystujemy tablicę tab zadeklarowaną powyżej).

for (int i = 0 ; i <10; i + + )

tab [ i ] = 0 ;

lub

for ( int i = 0 ; i <10 , i + + ) // Ponieważ wyrażenie tab + i podaje adres i-tego

*( tab +i ) = 0 ; // elementu tablicy

tab += i ; // konstrukcja błędna ! gdyż nazwa tablicy zawsze podaje adres jej pierwszego elementu i adres ten nie może być zmieniany

Zmienne dynamiczne

W celu utworzenia zmiennej dynamicznej należy:

1. Zadeklarować wskaźnik np.

int *wd ;

2. Użyć operator new w następujący sposób (przydzielenie pamięci dla zmiennej ):

wd = new int ;

Usunięcie zmiennej dynamicznej w podanym przykładzie ma postać:

delete wd ;

Zmienną dynamiczną można również utworzyć razem z deklaracją wskaźnika np.

int *wd = new int ;

Na zmiennej dynamicznej można wykonywać wszystkie operacje dopuszczalne dla zmiennych statycznych, np:

*wd = 10 ;

*wd += 5 ;

x = ( *wd ) + + ;

Powinno się zawsze sprawdzać, czy zmienna dynamiczna istnieje, tzn. czy wskaźnik podający adres tej zmiennej ma niezerową wartość .

int *wd = new int ;

if ( wd = = 0 ) // zmienna dynamiczna nie istnieje !

Przykład 1

Napisać program który oblicza sumę kolejnych liczb od 1 do 100 wykorzystując zmienne dynamiczne (wg schematu ).

// program który oblicza sumę kolejnych liczb od 1 do 100

#include <iostream.h>

#include <conio.h>

void main(void)

{

int i;

int *suma; //deklaracja zmiennej wskaźnikowej

clrscr();

suma = new int; //przydzielenie pamięci dla zmiennej

*suma=0;

cout << " program który oblicza sumę kolejnych liczb od 1 do 100 wykorzystując zmienne dynamiczne " << endl ;

for(i=0; i<=100; i++)

{

*suma=*suma +i;

} //

cout << "suma=" <<*suma;

delete suma; //zwolnienie przydzielonej pamięci

getch();

}

Przykład przekształcony

// program który oblicza sumę kolejnych liczb od 1 do n

#include <iostream.h>

#include <conio.h>

void main(void)

{

int i,n;

int *suma; //deklaracja zmiennej wskaźnikowej

clrscr();

suma = new int; //przydzielenie pamięci dla zmiennej

*suma=0;

cout << " program który oblicza sumę kolejnych liczb od 1 do n wykorzystując zmienne dynamiczne " << endl ;

cout<<”wprowadź liczbe n”;

cin>>n;

for(i=0; i<=n; i++)

{

*suma=*suma +i;

} //

cout << "suma=" <<*suma;

delete suma; //zwolnienie przydzielonej pamięci

getch();

}

Przy pomocy operatora new można tworzyć również tablice dynamiczne np.:

int *wtab = new int [10] ;

Dostęp do elementów tak utworzonej tablicy odbywa się w ten sposób, że:

wtab [0] - określa pierwszy element tablicy,

wtab [1] - drugi element itd.

Przykład 2

// Program Dynamiczna tablica

#include <iostream.h>

#include <conio.h>

void main (void)

{

float *tablica = new float [100] ; // Przydzielenie pamięci dla zmiennej

clrscr( ) ;

if ( tablica ! = 0 )

cout << " Udana alokacja pamieci " << endl ;

else

cout << " Nie mozna przydzielic pamieci " << endl ;

delete tablica ; // Zwolnienie przydzielonej pamięci

getch( ) ;

}

Słuchacze Wskażniki

8



Wyszukiwarka

Podobne podstrony:
OPERACJE NA TEKSTACH, Informatyka HELP
Projekt realizacji prac, Informatyka HELP
Grafika trójwymiarowa, Informatyka HELP
Wykorzystać tablice do wczytania dziesięciu lic, Informatyka HELP
Funkcje, Informatyka HELP
przeprowadzenie analizy bazy danych uslugi AD, Informatyka HELP
Generowanie wynikowego zestawu zasad Active Directory, Informatyka HELP
Windows XP Profesional ĆWiCZENIA1, Informatyka HELP
Windows XP Profesional ĆWiCZENIA(1), Informatyka HELP
Projektsieci , Informatyka HELP
help i workshop do AI, dziennikarstwo i komunikacja społeczna, technologie informacyjne
C & C++ Wyklady Politechnika Wroclawska 1 rok informatyki, W10 wskazniki na tablice wielowymiarowe i
Informator płacowy Wskaźniki i stawki aktualne od 1 kwietnia 2015 r ebook demo
Wskaźniki DRUKOWANIE, Informatyka
C & C++ Wyklady Politechnika Wroclawska 1 rok informatyki, W05 wskazniki, 3 Wykład: Język C
Informa, Wskaźniki tablice

więcej podobnych podstron