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

[Zadatak] Manipulacija listom na primeru karakteristika Procesora

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Manipulacija listom na primeru karakteristika Procesora

[ Pregleda: 3767 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jamaican83
Beograd

Član broj: 103242
Poruke: 55
*.adsl.beotel.net.



Profil

icon [Zadatak] Manipulacija listom na primeru karakteristika Procesora21.10.2007. u 15:22 - pre 200 meseci
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
Srdjan
 
Odgovor na temu

Sisko.Marcetic
Skobalj

Član broj: 153060
Poruke: 31
212.200.175.*



Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora22.10.2007. u 10:56 - pre 200 meseci
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
 
Odgovor na temu

jamaican83
Beograd

Član broj: 103242
Poruke: 55
*.adsl.beotel.net.



Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora22.10.2007. u 11:09 - pre 200 meseci
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....

Srdjan
 
Odgovor na temu

Duke Nukem
Miroslav Mitic
dipl.mas.ing - tehnolog za hidrauliku/
REL, MAG panciranje i zavarivanje bla
bla...
Lazarevac

Član broj: 38933
Poruke: 143
*.eunet.yu.



+1 Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora22.10.2007. u 18:50 - pre 200 meseci
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 ;)

Tape loading error
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora22.10.2007. u 19:01 - pre 200 meseci
@Eurora3D Team
Kako se uništava dinamički kreiran char niz ? ;)
 
Odgovor na temu

jamaican83
Beograd

Član broj: 103242
Poruke: 55
*.adsl.beotel.net.



Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora22.10.2007. u 19:41 - pre 200 meseci
Hvala puno momci ....ovo bi trebalo da mi bude dovoljno...
Srdjan
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.113.*



+7 Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora23.10.2007. u 01:36 - pre 200 meseci
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;
}

Prikačeni fajlovi
 
Odgovor na temu

jamaican83
Beograd

Član broj: 103242
Poruke: 55
*.adsl.beotel.net.



Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora23.10.2007. u 02:10 - pre 200 meseci
Da...samo jel moze to nekako da bude preko liste??
Srdjan
 
Odgovor na temu

Sisko.Marcetic
Skobalj

Član broj: 153060
Poruke: 31
212.200.175.*



Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora23.10.2007. u 13:02 - pre 200 meseci
Jednostavno: koristi list iz STL a
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.114.*



+7 Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora23.10.2007. u 14:26 - pre 200 meseci
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;
}

Prikačeni fajlovi
 
Odgovor na temu

jamaican83
Beograd

Član broj: 103242
Poruke: 55
*.com
Via: [es] mailing liste



Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora23.10.2007. u 15:00 - pre 200 meseci
Hvala puno al izgleda da ce biti problem zbog toga sto mi je potrebna
lissta...
Srdjan
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.114.*



+7 Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora23.10.2007. u 16:24 - pre 200 meseci
Ne radim puno sa STL om. Mozda ti jos neko napravi primer, vise bi ti znacio kod nego teoretisanje ...
Pozdrav
 
Odgovor na temu

Sisko.Marcetic
Skobalj

Član broj: 153060
Poruke: 31
212.200.175.*



Profil

icon Re: [Zadatak] Manipulacija listom na primeru karakteristika Procesora24.10.2007. u 13:30 - pre 200 meseci
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
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Manipulacija listom na primeru karakteristika Procesora

[ Pregleda: 3767 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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