CLAB 7-2 2008-2009, Tematy ćwiczeń laboratoryjnych z Języka Programowania


7. Wskaźniki w języku C++

    1. Wykorzystanie wskaźników w operowaniu tablicami.

Dynamiczny przydział pamięci

Cele ćwiczenia:

Nowe zagadnienia:

Definicje nowych pojęć do przyswojenia:

Wskaźniki i tablice

W języku C++ istnieje ścisła zależność pomiędzy wskaźnikami i tablicami. Każda operacja na zmiennej indeksowanej może być wykonana za pomocą wskaźników (za pomocą wskaźników operacje są wykonywane szybciej).

Podczas kompilacji nazwa tablicy jest automatycznie przekształcana na wskaźnik jej pierwszego elementu.

tab[ ] kompilacja wtab=tab równoważne wtab=&tab[0]

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

Inkrementując wskaźnik tablicy możemy poruszać się po całej tablicy:

działanie wtab=wtab+1 zmienia wskazanie na wtab=&tab[1] itd.

Wydruk tablicy tab przy użyciu wskaźników

#include <iostream.h>

#include <conio.h>

main()

{

int tab[]={0,1,2,3,4,5,6,7,8,9},*wtab;

wtab=tab; //lub wtab=&tab[0] poniewaz tab==&tab[0];

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

0x08 graphic
cout<<"tab["<<i<<"]="<<*wtab++<<” adres: ”<<wtab<<endl;

0x08 graphic
getch();

0x08 graphic
return 0;

0x08 graphic
}

dynamiczne przydzielanie pamięci - umożliwia programiście tworzenie i usuwanie zmiennych a tym samym pełne sterowanie czasem ich istnienia. Zmienne przechowywane są w specjalnie wydzielonym obszarze pamięci zwanym stosem zmiennych dynamicznych (ang. heap). Do przydzielania i zwalniania służą słowa kluczowe new i delete. Dostęp do zmiennych dynamicznych umożliwiają wskaźniki.

new - do przydzielania pamięci dynamicznej

delete - do zwalniania pamięci dynamicznej

dynamiczny przydział pamięci zmiennej prostej

Składnia

int *w; deklaracja wskaźnika wtab

w=new int (45); alokacja pamięci dynamicznej

zainicjowanie wartości 45

delete w; zwalnianie pamięci dynamicznej

Można alokować pamięć w jednym wierszu z deklaracją wskaźnika:

int *w=new int (45);

Programowe zabezpieczenie przed brakiem przydziału pamięci

if(w==0)

{

cout<<"nie przydzielono pamieci"<<endl;

return 1;

}

dynamiczny przydział pamięci tablicy

Składnia

float *wtab; deklaracja wskaźnika wtab

wtab=new float [10]; alokacja pamięci dynamicznej

delete []wtab; zwalnianie pamięci dynamicznej

Można alokować pamięć w jednym wierszu z deklaracją wskaźnika:

float *wtab=new float [10];

Zadanie 1

Napisz program, który pobiera z klawiatury liczbę rzeczywistą, następnie oblicza i drukuje jej pierwiastek kwadratowy, logarytm naturalny i logarytm dziesiętny. Zadeklaruj zmienną dynamiczną oraz zabezpiecz program przed brakiem alokacji pamięci dynamicznej.

#include<iostream.h>

#include<math.h>

#include<conio.h>

main()

{

float *w=new float;

if(w==0) //zabezpieczenie przed brakiem alokacji pamieci

{

cout<<"nie przydzielono pamieci"<<endl;

return 1;}

cout<<"Podaj liczbe rzeczywista dodatnia: ";

cin>>*w;

cout<<"*w="<<*w<<endl;

cout<<"sqrt="<<sqrt(*w)<<endl;

cout<<"log="<<log(*w)<<endl;

cout<<"log10="<<log10(*w)<<endl;

delete w;

getch();

return 0;

}

Zadanie 2

Napisz program, który pobiera z klawiatury liczbę naturalną, następnie oblicza i wypełnia tablicę 10-cio elementową pierwiastkiem kwadratowym tej liczby. Zadeklaruj dynamicznie tablicę oraz zabezpiecz program przed brakiem alokacji pamięci dynamicznej.

#include<iostream.h>

#include<math.h>

#include<conio.h>

main()

{

int i,n;

float *wtab=new float[10];

if(wtab==0) //zabezpieczenie przed brakiem alokacji pamieci

{

cout<<"nie przydzielono pamieci"<<endl;

return 1;}

cin>>n;

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

{

*wtab=sqrt(n);

cout<<*wtab++<<endl;

}

delete []wtab;

getch();

return 0;

}

Zadania C++ - 7.2

Wykorzystanie wskaźników w operowaniu tablicami.

Dynamiczny przydział pamięci

  1. Napisz program, który pobiera z klawiatury n liczb całkowitych, zapamiętuje je w tablicy a następnie wyszuka spośród nich liczbę największą i najmniejszą. Wykorzystaj wskaźniki.

  1. Napisz program, który wstawia do tablicy n-elementowej kolejne wyrazu ciągu 0x01 graphic
    drukuje tablicę a następnie sumuje wszystkie elementy tej tablicy i pokazuje wynik. Użyj wskaźniki przy operacjach na tablicy.

  1. Napisz program, który sumuje wszystkie elementy w wierszach tablicy o 3 wierszach i 4 kolumnach i wynik umieszcza w odpowiednim wektorze. Użyj wskaźników.

  1. Napisz program, który wstawia do tablicy jednowymiarowej n-elementowej liczby całkowite, a następnie kopiuje wszystkie liczby większe od zera do innej tablicy również n-elementowej w miejsca o tych samych indeksach, a pozostałe miejsca wypełnia zerami. Wydrukuj tablicę wyjściową i wynikową. Zastosuj wskaźniki.

  1. 0x08 graphic
    0x08 graphic
    Napisz program, który obliczy i wyświetli tabliczkę mnożenia liczb całkowitych od 1 do 10 w postaci ogólnie znanej tj. 0x01 graphic

Zmiennej wynik mnożenia przydziel dynamiczną pamięć

  1. Napisz program, który oblicza i drukuje kolejne wyrazy ciągu:

0x01 graphic

oraz oblicza sumę n wyrazów ciągu. Wykorzystaj zmienne dynamiczne

  1. Pracownik dokonywał pomiaru temperatury powietrza T razy w miesiącu i ciśnienia P razy w miesiącu i wyniki zapisywał w tablicach. Napisz program do wprowadzania wyników pomiarów i obliczania średniej temperatury i ciśnienia w analizowanym miesiącu. Utwórz tablice dynamiczne.

  1. Napisz program do analizy zużycia paliwa w twoim samochodzie. Ilość zużytego paliwa oraz ilość przejechanych kilometrów mają być zapisywane w odpowiednich tablicach z dynamiczną alokacją. Skonstruuj także funkcje do sumowania elementów tablic oraz obliczania średniego zużycia paliwa na 100 km.

  1. Napisz program do obliczania ilości znaków w wprowadzonym tekście. Do wprowadzenia tekstu zastosuj metodę cin.getline(nazwa_tablicy_znaków, max_liczba znaków_do_wczytania) oraz zadeklaruj dynamiczny przydział pamięci tablicy znaków.

Ćwiczenia laboratoryjne nr 7.2

„Język Programowania” str. 4

4

wskaźnik tablicy

nazwa tablicy

równoważne z tab[i]

Pamiętaj po wykonaniu pętli wskaźnik wtab jest ustawiony na obiekt o adresie &tab[9]+1 czyli poza obszarem tablicy. Powrót wskaźnika:

wtab=wtab-10 wtedy znowu wtab=tab



Wyszukiwarka

Podobne podstrony:
CLAB 6-1 2008-2009, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 1-1 2008-2009, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 1-2 2008-2009, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 3-1 2008-2009, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 2 2009-2010, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 8 2009-2010, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 4 2009-2010, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 1 2009-2010, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 4-1 2008-2009, Ćwiczenia laboratoryjne
CLAB 3 2009-2010, Ćwiczenia laboratoryjne
CLAB 1-1 2008-2009, Język Programowania (JP)
1 FP Program W i CW dla II R W Ek K EK 2008 2009 fin, Ćwiczenia(2)
CLAB 7-1 2008-2009, Napisz program zwiększający parametry a=1 i b=1 o stałe wartości (np
Plany 2008-2009, PLan na luty, Treści programowe
CLAB 5-1 2008-2009, 5
Tematy ćwiczeń laboratoryjnych z Obróbki Ubytkowej, agh, III rok, Technologie obróbki ubytkowej, TOU
tematy ćwiczeń laboratoryjnych fizyka Cwicz 43
tematy ćwiczeń laboratoryjnych fizyka Cwicz 52
Plany 2008-2009, PLan na marzec, Treści programowe

więcej podobnych podstron