Results 1 to 12 of 12

Thread: C++ problems

  1. #1
    Join Date
    Sep 2004
    Location
    bijeli svijet
    Posts
    3,134
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    5
    Thanked in
    3 Posts

    Default C++ problems

    Pocinjem malo sa C++ pa zapinjem Ovo je dio jednog komplikovanijeg programa, trebalo mi je dosta da uocim da je greska u ovom djelu. Izvukao samo ono najpotrebnije da reprodukujem problem.

    Procedura fill na neki nacin (nije bitno koji) popunjava niz od l elemanata. Radi jednostavnosti popunio sam ga jedinicama.

    Code:
    #include <stdio.h>
    void fill(int *x, int l) {
         int a[l];
         x=a;
         int i;
         for(i=0; i<l; ++i) { *(x+i)=1; }
    }
    
    void write(int *x, int l) {
        int i;
        printf("Niz: ");
        for(i=0; i<l; ++i) { printf("%d ",*(x+i)); }
    }
    
    
    int main() {
        int *y;
        int length=10;
        int i;
        fill(y,length);
        write(y,length);
    }
    Zasto ovo ne radi? tj. zasto write ne radi?
    (a ako u okviru fill stavim for(i=0; i<l; ++i) { printf("%d ",*(x+i)); } to radi)
    Meni je potrebno da popunim y sa fill i da dalje baratam sa njim, medjutim kad pokrenem *.exe program dobijem "*.exe has encountered a problem and needs to close...."

  2. #2
    Silvester Guest

    Default

    Ovo je vise C nego li C++

    I ima dooooosta gresaka...

    U funkciji fill:
    - pokusao si da dinamicki deklarises niz sa dimenzijom koja nije konstantna vrijednost
    - sve da je niz deklarisan, "nestati" ce kad napustis tu funkciju
    (tj. njegova memorija ce biti oslobodjena...)

    Ukratko - u funkciji main nemas niz...

  3. #3
    Join Date
    Sep 2004
    Location
    bijeli svijet
    Posts
    3,134
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    5
    Thanked in
    3 Posts

    Default

    Ok, hvala sad sam shvatio

    Code:
    #include <stdio.h>
    void fill(int *x, int l) {
         int i;
         for(i=0; i<l; ++i) { *(x+i)=1; }
    }
    
    void write(int *x, int l) {
        int i;
        printf("Niz: ");
        for(i=0; i<l; ++i) { printf("%d ",*(x+i)); }
    }
    
    
    int main() {
        int *y;
        const int length=10;   /* edited */ 
        int b[length];
        y=b;
        int i;
        fill(y,length);
        write(y,length);
    }
    Last edited by RoNN|3; 18-10-07 at 23:25.

  4. #4
    Silvester Guest

    Default

    treba: "const" int lenght=10;

  5. #5
    Join Date
    Sep 2004
    Location
    bijeli svijet
    Posts
    3,134
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    5
    Thanked in
    3 Posts

    Default

    It is done

  6. #6
    Join Date
    Nov 2006
    Posts
    196
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts

    Default

    Quote Originally Posted by RoNN|3 View Post
    for(i=0; i<l; ++i) { *(x+i)=1; }
    }
    ko te je ovome ucio svega ti?

  7. #7
    Join Date
    May 2007
    Posts
    131
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts

    Default

    Quote Originally Posted by RoNN|3 View Post
    Pocinjem malo sa C++ pa zapinjem Ovo je dio jednog komplikovanijeg programa, trebalo mi je dosta da uocim da je greska u ovom djelu. Izvukao samo ono najpotrebnije da reprodukujem problem.

    Procedura fill na neki nacin (nije bitno koji) popunjava niz od l elemanata. Radi jednostavnosti popunio sam ga jedinicama.

    Code:
    #include <stdio.h>
    void fill(int *x, int l) {
         int a[l];
         x=a;
         int i;
         for(i=0; i<l; ++i) { *(x+i)=1; }
    }
     
    void write(int *x, int l) {
        int i;
        printf("Niz: ");
        for(i=0; i<l; ++i) { printf("%d ",*(x+i)); }
    }
     
     
    int main() {
        int *y;
        int length=10;
        int i;
        fill(y,length);
        write(y,length);
    }
    Zasto ovo ne radi? tj. zasto write ne radi?
    (a ako u okviru fill stavim for(i=0; i<l; ++i) { printf("%d ",*(x+i)); } to radi)
    Meni je potrebno da popunim y sa fill i da dalje baratam sa njim, medjutim kad pokrenem *.exe program dobijem "*.exe has encountered a problem and needs to close...."
    --------------------------------

    Kao prvo u main funkciji imas integer pokazivac (pointer) *y koji nisi inicializirao znaci imas pokazivac koji ima slucajnu vrijednost i mozes sa lakocom da pristupis putem njega takvoga na deo memorije na koji nemas pravo sto rezultira -> izuzetkom (Exception) odnosno pad programa.

    Tacno bi main trebao ovako da izgleda :

    int main()
    {
    const int length = 10; // definisanje konstantne vrednosti za velicinu niza
    int *y = new int[length]; // alokacija memorije za niz od 10 int vrijednosti

    fill(y,length);
    write(y,length);

    delete y; // ciscenje prvenstveno alokirane memorije
    }

    funkcija fill bi trebala ovako da izgeda

    void fill(int *x, int l)
    {
    for(int i=0; i<l; i++ )
    {
    *(x+i)=1; // alternativno mozes koristiti -> x[i] = 1;
    }
    }
    Last edited by infinity; 20-10-07 at 22:15.

  8. #8
    Join Date
    Sep 2004
    Location
    bijeli svijet
    Posts
    3,134
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    5
    Thanked in
    3 Posts

    Default

    Imam domaći iz ovoga da predam (u kome se traži da rješenje sadrži mnogo asterisk-a ), a ja nijesam ranije radio sa pointerima i sl. Sad mi je sve mnogo jasnije; uradio sam nekoliko primjera.
    Zahvaljujem.

  9. #9
    Join Date
    Jan 2004
    Location
    Neverland
    Posts
    39
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts

    Default

    #include <stdio.h>

    void fill(int *x, int l) {
    int i;
    for(i=0; i<l; i++) x[i]=1; /* treba i++, jer se nizovi broje od indexa 0*/
    }


    void write(int *x, int l) {
    int i;
    printf("Niz: ");
    for (i=0;i<l;i++) printf("%d",x[i]);
    }


    main() {
    int *x;
    int l;
    printf("Unesite duzinu niza:");
    scanf("%d", &l);
    x=(int*)malloc(l*sizeof(int)); /*dinamicko lociranje memorije za niz*/
    full(x,l);
    write(x,l);}


    Nazalost mi nije instaliran C, pa ne mogu provjeriti da li sam mozda neku sitnicu previdjela. Napravila sam malu modifikaciju, da mozes sam unijeti duzinu niza, a ne da bude fiksirana. Isto moze lako da se odradi da unosis sam elemente niza, da ne budu samo jedinice:


    void fill(int *x, int l) {
    int i;
    for(i=0; i<l; i++) {
    printf("Unesi element:");
    scanf("%d",&x[i]);
    }
    }
    All you need is faith... trust... and some pixie dust! :)

  10. #10
    Join Date
    May 2007
    Posts
    131
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts

    Default

    inace kad govorimo o konstantnoj vrijednosti koja treba u odredjenoj kolicini da bude upisana , koristi se vec postojeca funkcija memset.

    void * memset ( void * ptr, int value, size_t num );

    a source bi izgledao ovako :

    const int length = 10;

    int *y = new int[length];
    memset(ptr,1,sizeof(int) * length);

    ..
    ...
    ....

    delete y;

  11. #11
    Join Date
    Apr 2006
    Location
    Michigan, USA
    Posts
    509
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts

    Default

    @RoNN|3
    Koju knjigu koristite na tom kursu?

  12. #12
    Join Date
    Apr 2006
    Location
    Universe:/Earth/America/USA/Michigan/SterlingHts/
    Posts
    1,089
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts

    Default

    ^ovaj amer se pravi ko da zna neshto

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Yahoo! Mail problems
    By Innuendo in forum Internet
    Replies: 9
    Last Post: 10-10-07, 18:46
  2. Opomena i pouka
    By Mabus in forum Religija i filozofija
    Replies: 152
    Last Post: 23-09-07, 19:25
  3. eBookz & Tutorialz
    By Břgíńjĺ in forum Software
    Replies: 34
    Last Post: 20-06-07, 08:25
  4. Sport from Italy!
    By Fabia_Elegance! in forum Automobilizam arhiva
    Replies: 16
    Last Post: 24-02-07, 01:35
  5. Even more....
    By Fabia_Elegance! in forum Automobilizam arhiva
    Replies: 10
    Last Post: 20-06-06, 00:16

Bookmarks

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •