Dinamička dodela memorije omogućava rad sa nizovima čiji broj elemenata se definiše u toku izvršavanja programa. To je moguće zato što pokazivač na neki tip podataka može da pokazuje ne samo na memorijski prostor veličine jednog takvog podatka, već i na prostor proizvoljne veličine.
Pr. Napišite program koji:
- kreira dinamički niz čiji broj elemenata specificira korisnik?
- elemente niza unosite preko tastature?
- koliko je broj elemenata niza koji su negativni?
- kreirajte novi niz čiji elementi su negativni elementi prvog niza?
Rešenje:
#include
#include
using namespace std;
/* funkcija unos unosi elemente prvog niza*/
int unos (int *pok, int vrednost)// funkcija vraca vrednost, prebrojava koliko elemenata je negativno
{
int br=0, i;
for (i=0;i<vrednost;i++) { cin>> pok[i];
if (pok[i]<0)
{
br++;
}
}
return br;
}
/* funkcija ispis ispisuje elemente niza*/
void ispis (int *pok, int vrednost)
{
int i=0;
cout<<„elementi niza“<<endl;
for (i=0;i<vrednost;i++)
{
cout<<pok[i]<<endl;
}
return;
}
/* funkcija koji kreira novi niz ciji broj elemenata zavisi od broja negativnih elemenata prvog niza*/
void noviniz (int *pok1, int *pok2, int vrednost)
{
int i, j;
i=0;
j=0;
for (i=0;i<vrednost;i++)
{
if (pok1[i]<0)
{
pok2[j]=pok1[i];
j++;
}
}
return ;
}
int main(int argc, char *argv[])
{
int n1, n2;
cout<<„Unesi velicinu prvog niza?“<<endl; cin>>n1;
int *pokazivac1=new int (n1);//alociranje prvog niza
n2=unos(pokazivac1,n1);// pozivom funkcije unos dobija se broj elemenata drugog niza
cout <<„U prvom nizu koji ima „<<n1<<“ elemenata, negativni su „<<n2<<“ elementi“<<endl;
cout<<“ „<<endl;
cout <<“ Prikaz elemenata prvog niza“<<endl;
ispis(pokazivac1,n1);// elemeni prvog niza
delete []pokazivac1;
int *pokazivac2= new int(n2);// alokacija drugog niza
noviniz(pokazivac1, pokazivac2, n1);//kreiranje drugog niza
cout <<“ Prikaz elemenata drugog niza“<<endl;
ispis (pokazivac2,n2);
delete [] pokazivac2;
pokazivac1=0;
pokazivac2=NULL;
system(„PAUSE“);
return EXIT_SUCCESS;
}
Izvor: