[ xunpehpa @ 11.12.2006. 17:05 ] @
Treba niz koji je prikazan prebaciti u dinamicki a da program radi...nikako mi neuspijeva:(

Code:


#include<iostream.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
int main(){
     int a[20]={7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1};
     int b[20];
     int j=0;
     int k; 
     for (int i=0; i<20; i++) {
         b[j]=a[i];
         j++; }
         for (int j=0; j<3; j++) {
             cout<<"\nUpisan je element: "<<b[j]; }
             for (int j=3; j<20; j++) {
                 for (int i=0; i<3; i++) {
                     if (b[j]==a[0]) { 
                     cout<<"\nElement: "<<b[j]<<" je naden na poziciji: 0!"; 
                     a[0]=a[1];
                     a[1]=a[2];
                     a[2]=b[j]; break; }
                     if (b[j]==a[1]) { 
                     cout<<"\nElement: "<<b[j]<<" je naden na poziciji: 1!"; 
                     a[1]=a[2];
                     a[2]=b[j]; break; }
                     if (b[j]==a[2]) { 
                     cout<<"\nElement: "<<b[j]<<" je naden na poziciji: 2!"; break; }
                                   if (b[j]!=a[0] && b[j]!=a[1] && b[j]!=a[2] ) {
                                        cout<<"\nElement: "<<b[j]<<" nije naden te se zato smijesta poziciju: 2!";
                                        a[0]=a[1];
                                        a[1]=a[2];
                                        a[2]=b[j]; } break; } }
                                        getch ();
                                        return 0;
                                        }   


[Ovu poruku je menjao X Files dana 11.12.2006. u 18:51 GMT+1]
[ Mali Misha @ 11.12.2006. 17:49 ] @
Hajde pojasni malo sta podrazumevaš pod "statičkim" i "dinamičkim" nizom (vidim da gore radiš neka premeštanja..). U principu "statičkom" nizu je veličina definisana pre kompajliranja:
Code:
int a[20];

Dok je "dinamičkom" u toku izvršenja programa:
Code:
void f(int k)
{
  int *a = new int[k];

  // ...
Pri čemu se ovako zauzeta memorija treba i osloboditi:
Code:
  // ...

  delete [] a;
}
[ n1tr0 @ 12.12.2006. 09:02 ] @
Ako imas npr. u main-u niz a i iz njega pravis niz b potrebno je uraditi sledece:
Code:
int a[20]={7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1};
int br_el=20;
int *b=new int[br_el];
for(int i=0;i<br_el;i++) b[i]=a[i];

Kada ti je potrebno u nekoj f-ji napraviti din niz od nekog niza prosledis pokazivac na taj niz(npr. zelis od niza a u main napraviti niz b u nekoj f-ji):
Code:
void neka_f-ja(int *niz,int br_el){
int *b=new int[br_el];
for(int i=0;i<br_el;i++) b[i]=niz[i];
}
//a iz main-a gde ti je niz a pozoves sa
neka_f-ja(a,20);

...naravno ne zaboravi unistiti niz b tu gde si ga alocirao kada ti vise ne bude trebao sa:
Code:
delete [] b;
[ SuPeR_MaSteR @ 15.12.2006. 01:03 ] @
I posle dealociranja memorije:
Code:

b = NULL;

sigurnosti radi :P
[ codebreaker @ 19.12.2006. 20:42 ] @
ako mislish na jednostruko spregnutu
....
typedef struct element
{
int info;
struct element *link;
}Element;
main(void)
{
....
Element *head,*p;
....
glava=NULL;
for(i=1;i<=20;i++)
{
p=(Element*)malloc(sizeof(Element));
p->link=glava;
glava=p;
p->info=a;
}
....
[ SuPeR_MaSteR @ 20.12.2006. 22:12 ] @
Ne, mislio sam na postavljanje pointera na NULL posle oslobadjanja memorije na koju je prethodno pokazivao. (jer nista se ne desava ako se greskom ponovo pozove delete iliti u c-u free funkcjia).