[Zadatak] Manipulacija listom na primeru karakteristika Procesora

  • 12 odgovora
  • 5.609 pregleda
[Zadatak] Manipulacija listom na primeru karakteristika Procesora 21.10.2007. u 15:22 · pre 231 meseci #1
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
Potpis
Srdjan
Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora 22.10.2007. u 10:56 · pre 231 meseci #2
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
Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora 22.10.2007. u 18:50 · pre 231 meseci #4
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 ;)
Potpis
Tape loading error
Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora 23.10.2007. u 01:36 · pre 231 meseci #7
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;
}
Potpis
HomePage http://www.eurora3d.com
Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora 23.10.2007. u 14:26 · pre 231 meseci #10
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;
}
Potpis
HomePage http://www.eurora3d.com
Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora 24.10.2007. u 13:30 · pre 231 meseci #13
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme