Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko ispravke koda. Problem oko poziva f-ja klase

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc oko ispravke koda. Problem oko poziva f-ja klase

[ Pregleda: 2341 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

milkinizz
Milka Aleksic
Kragujevac

Član broj: 70242
Poruke: 18
*.dynamic.sbb.rs.



Profil

icon Pomoc oko ispravke koda. Problem oko poziva f-ja klase11.08.2009. u 18:09 - pre 178 meseci
Cao drustvo, ne bih vas davila da mi nije hitno. Spremam ispit i zakocila sam,citala sam skripte,knjige ali i dalje mi neke stvari nisu jasne. Ovaj zadatak je bio na ispitu i data je okosnica klase niz kao i deo main funkcije. Metodom slucajnog izbora bira se niz, koji se zatim sortira i na njega se primeni marge-metoda ciji je princip takodje dat. Problem mi pravi funkcija void Sort koju sam ja dodala jer nisam znala kako drugacije da uradim.
Zna li neko kako da ispravim ovaj deo koda ili kako drugacije da uradim.
Unapred hvala i MOLIM VAS DA MI NEKO POMOGNE jer vec 5 dana se vracam na ovaj zadatak ali nista novo ne mogu da smislim. :-(


Code:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

class niz;

void ShowRandom(niz x);
void ShowSorted(niz x);

class niz{
public:
       niz(int n=10);
       niz &Merged(niz &x);
private:
       int n;
       int *Random;
       int *Sorted;
       friend void ShowRandom(niz);
       friend void ShowSorted(niz);
       void Sort();
}


niz::void Sort()
{
  int i,j,t;
  for (i=0;i<(this->n -1);i++)
    for (j=i+1;j<this->n;j++)
    if (this->Sorted[i]>this->Sorted[j])
    {
       t=this->Sorted[i];
       this->Sorted[i]=this->Sorted[j];
       this->Sorted[j]=t;
    }
  return;
}

niz &niz::Merged(niz &x)
{
  int i=0;
  int j=0;
  int k=0;
  niz *novi=new niz(this->n+x.n);
  for (i=0;i<this->n;i++)
    novi->Random[i]=this->Random[i];
  for (j=0;j<x.n;j++)
    novi->Random[i+j]=x.Random[j];
  i=0;
  j=0;
  k=0;
  while ((i<this->n)||(j<x.n))
  {
     if ((i<this->n)&&(j<x.n))

     {
    if (this->Sorted[i]<x.Sorted[j])
    {
       novi->Sorted[k]=this->Sorted[i];
       i++;
       k++;
    }
    else
    {
       novi->Sorted[k]=x.Sorted[j];
       j++;
       k++;
    }
     }

     else
     {
    if (i==this->n)
    {
      while (j<x.n)
      {
         novi->Sorted[k]=x.Sorted[j];
         j++;
         k++;
      }
      break;
    }
    else
    {
      while (i<this->n)
      {
         novi->Sorted[k]=this->Sorted[i];
         i++;
         k++;
      }
      break;
    }
     }
  }
  return *novi;
}

niz::niz(int n)
{
  int i,j,t;
  this->n=n;
  Random=new int[10];
  for(i=0;i<n;i++)
  Random[i]=random[10];
  Sorted=new int[10];
  for(i=0;i<n;i++)
  Sorted[i]=Random[i];
  this->Sort();
}
void ShowRandom(niz x)
{
   printf("\n");
   for(int i=0;i<x.n;i++)
   printf("%d ",x.Random[i]);
   return;
}

void ShowSorted(niz x)
{
   printf("\n");
   for(int i=0;i<x.n;i++)
   printf("%d ",x.Sorted[i]);
   return;
}

int main(int argc,char *argv[])
{
   randomize;
   niz x=(!strcmp(argv[1],"0")?0:atoi(argv[1])),y=atoi(argv[2]);
   niz z;

   printf("\nX==========================================================\n");
   ShowRandom(x);
   printf("\n\nSortirani je :\n");
   ShowSorted(x);  //elemente x.Sorted prikazati na ekranu

   printf("\nY==========================================================\n");
   ShowRandom(y);
   printf("\n\nSortirani je :\n");
   ShowSorted(y);  //elemente y.Sorted prikazati na ekranu

   printf("\nZ==========================================================\n");
   z=x.Merged(y);
   ShowRandom(z);
   printf("\n\nSortirani je :\n");
   ShowSorted(z);  //elemente z.Sorted prikazati na ekranu
   printf("\n==========================================================\n");
   system("PAUSE");
   return 0;
}
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
93.86.59.*



+9 Profil

icon Re: Pomoc oko ispravke koda. Problem oko poziva f-ja klase12.08.2009. u 00:22 - pre 178 meseci
Nisam se osvrtao na ostatak koda, ali definicija funkcije Sort treba da počne ovako..:

Code:

void niz::Sort()
{
  // tvoj kod...
}


Čitaj šta ti za početak kompajler javlja, a i pošto si već imala f-ju Merged, tamo si mogla da primetiš kako treba da se definiše funkcija.
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
*.dynamic.sbb.rs.



+7 Profil

icon Re: Pomoc oko ispravke koda. Problem oko poziva f-ja klase12.08.2009. u 10:06 - pre 178 meseci
Ovako ce da radi (na GNU GCC kompajleru) ... promenio sam nekoliko linija
Code:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

class niz;

void ShowRandom(niz x);
void ShowSorted(niz x);

class niz
{
public:
    niz(int n=10);
    ~niz(); //destuktor
    niz &Merged(niz &x);

private:
    int n;
    int *Random;
    int *Sorted;
    friend void ShowRandom(niz);
    friend void ShowSorted(niz);
    void Sort();
};


void niz::Sort()
{
    int i,j,t;
    for (i=0;i<(this->n -1);i++)
        for (j=i+1;j<this->n;j++)
            if (this->Sorted[i]>this->Sorted[j])
            {
                t = this->Sorted[i];
                this->Sorted[i] = this->Sorted[j];
                this->Sorted[j] = t;
            }
    return;
}

niz& niz::Merged(niz &x)
{
    int i=0;
    int j=0;
    int k=0;
    niz *novi = new niz(this->n+x.n);
    for (i=0;i<this->n;i++)
        novi->Random[i] = this->Random[i];
    for (j=0;j<x.n;j++)
        novi->Random[i+j] = x.Random[j];
    i=0;
    j=0;
    k=0;

    while ((i<this->n)||(j<x.n))
    {
        if ((i<this->n)&&(j<x.n))

        {
            if (this->Sorted[i]<x.Sorted[j])
            {
                novi->Sorted[k]=this->Sorted[i];
                i++;
                k++;
            }
            else
            {
                novi->Sorted[k]=x.Sorted[j];
                j++;
                k++;
            }
        }

        else
        {
            if (i==this->n)
            {
                while (j<x.n)
                {
                    novi->Sorted[k]=x.Sorted[j];
                    j++;
                    k++;
                }
                break;
            }
            else
            {
                while (i<this->n)
                {
                    novi->Sorted[k]=this->Sorted[i];
                    i++;
                    k++;
                }
                break;
            }
        }
    }
    return *novi;
}

niz::niz(int n)
{
    int i,j,t;
    if (n < 1)  //
        n =20;
    this->n=n;
    Random = new int[n]; //
    for(i=0;i<n;i++)
        Random[i] = rand();// rand() funkcija
    Sorted = new int[n]; //
    for(i=0;i<n;i++)
        Sorted[i] = Random[i];
    this->Sort();
}

niz::~niz() //destuktor
{
    delete[] Random;
    delete[] Sorted;
}

void ShowRandom(niz x)
{
    printf("\n");
    for(int i=0;i<x.n;i++)
        printf("%d ",x.Random[i]);
    return;
}

void ShowSorted(niz x)
{
    printf("\n");
    for(int i=0;i<x.n;i++)
        printf("%d ",x.Sorted[i]);
    return;
}

int main(int argc,char *argv[])
{
    //    randomize;
    //    niz x= (!strcmp(argv[1],"0")?0:atoi(argv[1])),y=atoi(argv[2]);

    int a = 0, b = 0;
    while(a < 1 || a > 10)
    {
        printf ("Unesite broj elemenata prvog niza (1 - 10): ");
        scanf("%d",&a);
    }
    while(b < 1 || b > 10)
    {
        printf ("\nUnesite broj elemenata drugog niza (1 - 10): ");
        scanf("%d",&b);
        printf("\n");
    }

    srand( (unsigned)time( NULL ) ); // inicijalizujemo random number generator
    niz x = a;
    niz y = b;
    // niz z; // = 10

    printf("\nX==========================================================\n");
    ShowRandom(x);
    printf("\n\nSortirani je :\n");
    ShowSorted(x);  //elemente x.Sorted prikazati na ekranu

    printf("\nY==========================================================\n");
    ShowRandom(y);
    printf("\n\nSortirani je :\n");
    ShowSorted(y);  //elemente y.Sorted prikazati na ekranu

    printf("\nZ==========================================================\n");
    niz z = x.Merged(y); // objekat z
    ShowRandom(z);
    printf("\n\nSortirani je :\n");
    ShowSorted(z);  //elemente z.Sorted prikazati na ekranu
    printf("\n==========================================================\n");

    system("PAUSE");
    return 0;
}


[Ovu poruku je menjao Eurora3D Team dana 12.08.2009. u 23:16 GMT+1]
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Pomoc oko ispravke koda. Problem oko poziva f-ja klase12.08.2009. u 10:17 - pre 178 meseci
Šta znači "randomize;", bez "()"? I gde se inicijalizuje objekat niz? Pretpostavljam da su neke stvari ovde izostavljene ali da kod tebe postoje, jer ga ovde nema ni destruktor ni kopi konstruktor. Takođe, funkcija Merged vraća referencu na objekat niz, ali taj objekat kreira sa new. To nije dobra ideja, jer tu negde sad nedostaje jedno delete. Uzgred, funkcija Merged može elegantije da se napravi, jer imaš ponavljanje koda. Dovoljna je samo jedna while petlja i jedan if unutra:

Code:

  ...
  while (i < this->n || j < x.n)
  {
    if (j == x.n || this->Sorted[i] < x.Sorted[j])
    {
      novi->Sorted[k] = this->Sorted[i];
      i++;
      k++;
    }
    else
    {
      novi->Sorted[k] = x.Sorted[j];
      j++;
      k++;
    }
  }
 
Odgovor na temu

milkinizz
Milka Aleksic
Kragujevac

Član broj: 70242
Poruke: 18
*.dynamic.sbb.rs.



Profil

icon Re: Pomoc oko ispravke koda. Problem oko poziva f-ja klase14.08.2009. u 20:00 - pre 178 meseci
Hvala svima na odgovorima ali ja opet imama jedno pitanjce :-) .

I kod mene radi ovako s tim da zadatak zahteva da se dimenzija niza n i elementi niza Random biraju metodom slucajnog izbora. Probala sam na 2-3 nacina i nece.
Code:

int a = 0, b = 0;
    while(a < 1 || a > 10)
    {
        printf ("Unesite broj elemenata prvog niza (1 - 10): ");
        scanf("%d",&a);
    }
    while(b < 1 || b > 10)
    {
        printf ("\nUnesite broj elemenata drugog niza (1 - 10): ");
        scanf("%d",&b);
        printf("\n");
    }


Imate li neku ideju? I da sta to znaci kada u main f-ji stavimo (sto je u mom zadatku slucaj)
Code:
... niz y=20;

Da li to znaci da je njegova dimenzija 20 ili nesto drugo?
Hvala unapred
Pozdrav Milka
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Pomoc oko ispravke koda. Problem oko poziva f-ja klase15.08.2009. u 18:43 - pre 178 meseci
"niz y=20;" je isto što i "niz y(20);" to jest stvara se objekat y klase niz pomoću konstruktora koji prima jedan parametar int. Taj parametar je dimenzija niza jer u konstruktoru imamo this->n=n; a posle i stvaranje dva elementarna niza s tim 'n'.

Ako i dimenzija treba da bude slučajan broj onda možeš da staviš "niz y=rand();". Druga opcija bi bila da konstruktor nema ni jedan parametar, ali da imaš liniju "this->n=rand();".
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
*.dynamic.sbb.rs.



+7 Profil

icon Re: Pomoc oko ispravke koda. Problem oko poziva f-ja klase16.08.2009. u 00:21 - pre 178 meseci

Kao sto je @Mihajlo Cvetanović vec objasnio dimenzije nizova se odredjuju brojem koji se prosledjuje kontruktor funkciji.
Ja bi naglasio da klasa niz nije niz (samo se tako zove)... ona u sebi sadrzi 2 niza ... posto se iz pitanje stice utisak da ne razlikujes klasu niz od c++ niza
Ako ti treba slucajan (random) broj elemenata stavi ovako na pocetku main umesto dve while petlje
Code:

srand( (unsigned)time( NULL ) ); // inicijalizujemo random number generator
niz x = rand();
niz y = rand();

ali imaj u vidu da rand() daje sve vrednosti int sto znaci da mozes da imas nizove od npr. 10000 elemenata
Drugo, elementi Random niza sa biraju metodom slucajnog izbora
Code:

for(i=0;i<n;i++)
        Random[i] = rand(); // rand() funkcija

Pozdrav
 
Odgovor na temu

milkinizz
Milka Aleksic
Kragujevac

Član broj: 70242
Poruke: 18
*.dynamic.sbb.rs.



Profil

icon Re: Pomoc oko ispravke koda. Problem oko poziva f-ja klase17.08.2009. u 10:01 - pre 178 meseci
Hvala svima.
Mnogo ste mi pomogli.
Veliki pozdrav svima

 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc oko ispravke koda. Problem oko poziva f-ja klase

[ Pregleda: 2341 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.