[ jamaican83 @ 21.10.2007. 15:22 ] @
Potrebno mi je resenje ovog zadatka iz C ++ a ako neko zna bio bi mu zahvalan...

a) Napraviti aplikaciju koja omogucava unos, pregled, brisanje I pamcenje elemenata liste. Elementi su tipa klasa Procesor koja ima podatke naziv (karakterski niz), brzina (int) I cena (reala broj).

b) Dodati funkciju za pregled po brzini procesora
[ Sisko.Marcetic @ 22.10.2007. 10:56 ] @
To je bar jednostavno:

1.) Napravi klasku procesor sa svim potrebnim podacima i funkcijama clanicama daj mu i neki operator tek da izgleda smekerski i ne zaboravi copy konstruktor.
2.) Uz pomoc STL a : vector ili stack ce da resi problem sa listama (listanje, brisanje, insertovanje i problem pod b tj.pretrazivanje po kriterijumu ). Iteratori relativno lako izlaze na kraj sa svim time.

To bi bilo ukratko to
[ jamaican83 @ 22.10.2007. 11:09 ] @
Drago mi je da je jednostavno :) ali ja ne znam ni to da uradim ...mislim trebalo bi mi resenje kako se to radi da bi mogao da ga proucim....
[ Duke Nukem @ 22.10.2007. 18:50 ] @
Bravo majstore, odavno nisam video goto naredbu :)
Lepo je prkositi predasudama- to je pomalo buntovnicki
Ispalo je prava jeres koristiti goto naredbu.

Resenje je dosta jednostavno koristiti samo niz pointera klase procesor .
Mislim da je jamaican83 sad sve shvatio ;)
[ X Files @ 22.10.2007. 19:01 ] @
@Eurora3D Team
Kako se uništava dinamički kreiran char niz ? ;)
[ jamaican83 @ 22.10.2007. 19:41 ] @
Hvala puno momci ....ovo bi trebalo da mi bude dovoljno...
[ Eurora3D Team @ 23.10.2007. 01:36 ] @
Moze i ovako. Isto radi samo bez goto
Code:


#pragma warning (disable : 4786)
#include <iostream>
using namespace std;


class Procesor
{
public:
    Procesor(Procesor* p){pP=p;pN=0;naziv=new char[256];brzina=0;cena=0;if(!p) My();};
    Procesor* Procesor::MP(){if(pN) return pN->MP();else pN=new Procesor(this);return pN;};
    long Procesor::DeleteProcesor(long n){Procesor* tmp;if(n==0 || pP!=0) return n;if(pN) tmp=pN->DP(1,n);if (tmp)delete tmp;return 1;}
    Procesor* Procesor::DP(long no,long what)
    {
        if(no==what)
        {
            if(pN)
                pN->pP=pP;
            if(pP)
                pP->pN=pN;
            return this;
        }
        else
        {
            if(pN)
                return pN->DP(no+1,what);
            else
                return 0;
        }

    };
    long Procesor::WL(long no){if(pP) cout << "NO: " << no << " | " << "Naziv procesora: " << naziv << " | " << "Brzina procesora: " << brzina << " | " << "Cena procesora: " << cena << endl;if(pN) return pN->WL(no+1);else return no;};
    int Procesor::My()
    {
        Procesor*p;
        long n;
        int ret=1;
        while (ret)
        {
            cout << "Izaberite opciju (unesite slovo i pritisnite ENTER)" << endl << endl;
            cout << "(a) Unos" << endl;
            cout << "(b) Pregled" << endl;
            cout << "(c) Brisanje" << endl;
            cout << "(d) Pregled po brzini procesora" << endl;
            cout << "(e) Izlaz" << endl;
            cout << endl;
            char in;
            cin >> in;
            switch(in)
            {
                case 'a':
                p = MP();
                if(p)
                {
                    cout << "Unesite ime" << endl;
                    cin >> p->naziv;
                    cout << "Unesite brzinu" << endl;
                    cin >> p->brzina;
                    cout << "Unesite cenu (ceo ili decimalan broj)" << endl;
                    cin >> p->cena;
                }
                cout << endl;
                break;
                case 'b':
                WL(0);
                cout << endl;
                break;
                case 'c':
                cout << "Unesite redni broj" << endl;
                cin >> n;
                DeleteProcesor(n);
                cout << endl;
                break;
                case 'd' :
                cout << "Nije implementirano" << endl;
                case 'e':
                ret=0;
                break;
                default:
                ret=0;
            }
        }
        return ret;
    }
    Procesor* pP;
    Procesor* pN;
    char* naziv;
    int brzina;
    float cena;
};


int main()
{
    Procesor* ta=new Procesor(0);
    return 0;
}
[ jamaican83 @ 23.10.2007. 02:10 ] @
Da...samo jel moze to nekako da bude preko liste??
[ Sisko.Marcetic @ 23.10.2007. 13:02 ] @
Jednostavno: koristi list iz STL a
[ Eurora3D Team @ 23.10.2007. 14:26 ] @
Evo dodao sam ti i f za sortiranje. Nisam mnogo isprobavao (radim , nemam vremena) al otpilike sve radi.
Ovo je zamisljeno kao lanac objekata klase Procesor. Svaki element zna koji mu je predhodni i sledeci.
Imas i neke sture komentare
Code:


#pragma warning (disable : 4786)
#include <iostream>
using namespace std;

class Procesor
{
public:
    struct Max                      // ovo sluzi za redjanje pointera na klase preme vrednosti brzine
    {
        Procesor* pr[1024];
        int cur;
        int max;
        long no;
    };
    Procesor(Procesor* p) // Konstruktor
    {
        pP=p;
        pN=0;
        ArrMax=0;
        naziv=new char[256];
        brzina=0;
        cena=0;
        if(!p)
            My();                  // Pozvali smo ovde My funkciju . Moze i iz main proc posle konstrukcije objekta
    };
    Procesor* Procesor::MakeProcesor()
    {
        if(pP)
            return 0;    //Ako nije glavni ne radi
        Procesor* tmp=0;
        if(pN)
            tmp=pN->MP();
        else
        {
            tmp=new Procesor(this);
            if(tmp)
                pN=tmp;
        }
        if (tmp)
            ArrMax++;     //Ovde pamtimo broj klasa + ova glavna
        return tmp;
    }
    Procesor* Procesor::MP()  // Ova f pravi novu klasu ali samo iz zadnje u nizu (pravi sledecu)
    {
        if(pN)
            return pN->MP();
        else
            pN=new Procesor(this);
        return pN;                   // I vraca pointer
    };
    long Procesor::DeleteProcesor(long n) // Ova radi iz glavne
    {
        Procesor* tmp;
        if(n==0 || pP!=0)
            return n;
        if(pN)
            tmp=pN->DP(1,n);
        if (tmp)
        {
            delete tmp;
            if(pP==0)
                ArrMax--;                         // I smanjuje broj klasa
        }
        return 1;
    }
    Procesor* Procesor::DP(long no,long what) // Brise objekat prema rednom broju 1 je prvi posle glavne itd...
    {                                                                  // Glavnu ne brisemo
        if(no==what)
        {
            if(pN)
                pN->pP=pP;
            if(pP)
                pP->pN=pN;
            return this;
        }
        else
        {
            if(pN)
                return pN->DP(no+1,what);
            else
                return 0;
        }

    };
    long Procesor::WL(long no)         //Ova ide kroz lanac i ispisuje podatke (paramerar je redni broj)
    {
        if(pP)
            cout << "NO: " << no << " | " << "Naziv procesora: " << naziv << " | " << "Brzina procesora: " << brzina << " | " << "Cena procesora: " << cena << endl;
        if(pN)
            return pN->WL(no+1);
        else
            return no;
    };
    int Procesor::ListBySpeed()            // Ova lista po brzini
    {                                                    // Malo je komplikovana na prvi pogled
        if(pP || !pN)
            return 0;
        if (ArrMax >=1024)
            return 0;    // U strukturi je ogranicen niz na 1024
        m.cur=0;                                    // Spremamo strukturu
        m.max=0xffff;
        m.pr[0]=0;                                 // Index 0 ce da bude povratna vrednost pointera
        m.no=1;
        while (m.no<ArrMax+1)             // Prolazimo ArrMax puta
        {                                                 // U svakom krugu smo dobili najveci broj za mesto m.no
            pN->GM(&m,ArrMax);
            if(m.pr[0])
                m.pr[m.no]= m.pr[0];
            m.max=m.cur;
            m.cur=0;
            m.no++;
        }
        for(int cu=1;cu<m.no;cu++)        //ispisujemo
        {
            if (m.pr[cu])
            {
                cout << "NO: " << cu << " | " << "Naziv procesora: " << m.pr[cu]->naziv << " | " << "Brzina procesora: " << m.pr[cu]->brzina << " | " << "Cena procesora: " << m.pr[cu]->cena << endl;
            }
        }
        return 1;
    }
    int Procesor::GM(Max* mm,long MArrMax) //ova prolazi kroz sve i trazi sledeci najveci borj
    {
        bool W=false;
        for(int i=1;i<MArrMax+1;i++)
        {
            if(mm->pr[i]==this)
                W=true;
        }
        if (mm->cur<=brzina && brzina<=mm->max && W==false)
        {
            mm->pr[0]=this;
            mm->cur=brzina;
        }
        if (pN)
            return pN->GM(mm,MArrMax);
        else
            return 0;
    }
    int Procesor::My()                      //Ova je za interface
    {
        Procesor*p;
        long n;
        int ret=1;
        while (ret)
        {
            cout << "Izaberite opciju (unesite slovo i pritisnite ENTER)" << endl << endl;
            cout << "(a) Unos" << endl;
            cout << "(b) Pregled" << endl;
            cout << "(c) Brisanje" << endl;
            cout << "(d) Pregled po brzini procesora" << endl;
            cout << "(e) Izlaz" << endl;
            cout << endl;
            char in;
            cin >> in;
            switch(in)
            {
                case 'a':
                p = MakeProcesor();
                if(p)
                {
                    cout << "Unesite ime" << endl;
                    cin >> p->naziv;
                    cout << "Unesite brzinu" << endl;
                    cin >> p->brzina;
                    cout << "Unesite cenu (ceo ili decimalan broj)" << endl;
                    cin >> p->cena;
                }
                cout << endl;
                break;
                case 'b':
                WL(0);
                cout << endl;
                break;
                case 'c':
                cout << "Unesite redni broj" << endl;
                cin >> n;
                DeleteProcesor(n);
                cout << endl;
                break;
                case 'd' :
                ListBySpeed();
                cout << endl;
                break;
                case 'e':
                ret=0;
                break;
                default:
                ret=0;
            }
        }
        return ret;
    };

    Max m;              // Struktura Max
    long ArrMax;      // trenutni broj klasa
    Procesor* pP;     // Predhodna u nizu (prva nema predhodnu)
    Procesor* pN;      // Sledeca u lancu (zadnja nema sledecu)
    char* naziv;        //
    int brzina;
    float cena;
};


int main()
{
    Procesor* ta=new Procesor(0);//
    return 0;
}
[ jamaican83 @ 23.10.2007. 15:00 ] @
Hvala puno al izgleda da ce biti problem zbog toga sto mi je potrebna
lissta...
[ Eurora3D Team @ 23.10.2007. 16:24 ] @
Ne radim puno sa STL om. Mozda ti jos neko napravi primer, vise bi ti znacio kod nego teoretisanje ...
Pozdrav
[ Sisko.Marcetic @ 24.10.2007. 13:30 ] @
Ovo je malo uprosceno koristimo STL, sklepno je na brzinu izvinjavamo se zbog neurednog koda



Code:

//---------------------------------------------------------------------------

#include <vcl.h>
#include <list.h>
#include <iostream.h>
#include <algorithm>
#include <iterator>


#pragma hdrstop

using namespace std;
//---------------------------------------------------------------------------

#pragma argsused

class Procesor
  {
  public:
        char Ime[255];
        long brzina;
        long cena;
      Procesor(){}; // default konstruktor
      Procesor(char*, long, long);
   inline  bool operator < (const Procesor* prc)   // zbog sortiranja
     {
       return (cena < prc->cena);
     }

   } ;

list<Procesor*> lista;
list<Procesor*> Sort_lista;

typedef list<Procesor*>::iterator Iter; // iterator

void Dodaj();
void listajSve(list<Procesor*>);
void Brisi();
void Sortiraj();


int main(int argc, char* argv[])
{

 char c;
  do
   {
   system("CLS");
   cout<< " 1 ....  Unos novog procesora " << endl;
   cout<< " 2 ....  lista svih procesora " << endl;
   cout<< " 3 ....  Brisanje procesora " << endl;
   cout<< " 4 ....  Sortiranje procesora po ceni " << endl;
   cout<< " q ....  RAZLAZ " << endl;
        c= getchar();
   switch (c)
    {
     case '1': Dodaj(); break;
     case '2': listajSve(lista); break;
     case '3': Brisi(); break;
     case '4': Sortiraj(); break;
    }
   } while (c!= 'q');
Iter i;
Procesor *p;
for(i = lista.begin(); i!= lista.end(); i++) // kill 1 
 {
     p= (Procesor*)(*i);
     delete p;  
 }
   lista.clear();  // kill 2
for(i = Sort_lista.begin(); i!= Sort_lista.end(); i++) // kill 1 
 {
     p= (Procesor*)(*i);
     delete p;  
 }
   Sort_lista.clear();  // kill 2  
   
        return 0;
}
//---------------------------------------------------------------------------
Procesor:: Procesor(char * _naziv, long _brzina, long _cena)
 {
   strcpy( Ime, _naziv);
   brzina = _brzina;
   cena = _cena;
 }
//--------------------------------------------------------
void Dodaj()
 {
  char naziv[256];
  long brzina, cena;
  cout<< "Unos novog procesora " << endl;
   cout << " Naziv procesora : ";
   cin>> naziv; cout << endl;
   cout<< "Brzina: ";
   cin>> brzina ; cout << endl;
   cout<< "Cena: ";
   cin>> cena ; cout << endl;
Procesor *p  = new Procesor ( naziv,brzina,cena);
lista.push_back(p);
 }
//--------------------------------------------------------
void listajSve(list<Procesor*> _lista)
{

 Procesor *p;
 cout << "  Stampanje svih procesora " << endl ;
 int counter =1;
 Iter i;
 for(i = _lista.begin(); i!= _lista.end(); i++)
  {
   p= (Procesor*)(*i);
   cout << counter++ <<":" << p->Ime << " : " << p->brzina << " Hz " << p->cena << " din " << endl;
  }
system("PAUSE");

}
//--------------------------------------------------------
void Brisi()
{
  int j,index = 0;
  Iter  i ;
  int max = lista.size(); // broj elemenata liste
cout << " Brisanje nekog iz liste najpre sama lista" << endl;
listajSve(lista);
cout << " Unesi redni broj procesora za brisanje " << endl;
  cin>> index;
  if(index > max) return;
  for( j=1, i= lista.begin(); j<index ; i++ );   // jednostavnije je sa find
    lista.erase(i);
system("PAUSE");
}
//--------------------------------------------------------

void Sortiraj()
{

 Iter i;
 Sort_lista.clear();
 for(i= lista.begin(); i != lista.end(); i++)
  Sort_lista.push_back(*i);
  Sort_lista.sort();
  listajSve(Sort_lista);


}
//---------------------------------------------------


Jos jednom se izivinjavam ako je kod malo neuredan pisao sam na brzinu i nisam mnogo estirao ali vazan je princip. Mislim da je za pocetnike najbolje da rade preko nizova ili korisnicki definisanih povezanih listi verovatno tako trazi nj. profesor