[ petak-13. @ 11.12.2011. 14:36 ] @
moze li neko da mi pomogne oko zadataka iz c++??
evo ucim c++ na faksu. shvatam zasad pomalo to. ali ne sve do kraja. trenutno sam dosao do preklapanja operatora.
pa ako moze da mi pomogne i da po koji savjet. hvala

jedno pitanje odmah. da li moze da se koristi string iz biblioteke string.h ili cstring????
uradio sam jedan primjer gdje moglo sad ne moze.
ovdje imam samo mali dio zadatka nekog ali nece da radi
moze pomoc???
podijelio sam projekt u tri dijela, main.cpp, dvojka.h i dvojka.cpp

Code:


#include <iostream.h>
#include "dvojka.h"
#include <cstring>

using namespace std;

int main(int argc, char *argv[])
{
    dvojka d[5];
    int a,i,n;
    cout<<"koliko parova:";
    cin>>n;
    for(i=0;i<n;i++)
    {
    cout<<(i+1)<<". par:";
    cin>>d[i];
}
    for(i=0;i<n;i++)
    {
   cout<<d[i];
}

    system("PAUSE");
    return EXIT_SUCCESS;
}




#ifndef klasa
#define klasa
#include <iostream.h>
#include <cstring>
class dvojka
{
      friend istream &operator>>(istream &, dvojka &);
             friend ostream &operator<<(ostream &o,  const dvojka & );
      private:
              int b;
              string s;
      public:
             dvojka();
             dvojka(int a, string b);
             dvojka(const dvojka&);
             ~dvojka();
             
};
#endif




#include <iostream.h>
#include <cstring>
#include "dvojka.h"

dvojka::dvojka()
{
                b=0; s='0';
                }
                
dvojka::dvojka(int a, string b)
{
                   b=a;
                   strcpy(s,b);
}
                                   
dvojka::dvojka(const dvojka &d)
{
                     b=d.b;
                     strcpy(s,d.s);
}


 istream &operator>>(istream &in, dvojka &d)
{
        int a; string b;
        in>>a>>b;
        d.b=a;
        strcpy(d.s,b);
        return in;
}

ostream &operator<<(ostream &out, const dvojka &d)
{
        out<<"("<<d.b<<" , "<<d.s<<")";
        return out;
        }
        
        
          


[ Mihajlo Cvetanović @ 11.12.2011. 15:14 ] @
Ranije je moglo, a sad ne može, lepo si rekao. C++ standard kaže da u C++ fajlovima mora da se koristi <cstring> ako hoćeš iz C++ da koristiš C-ovske funkcije. C standard kaže da u C fajlovima mora da se koristi <string.h>. To što je u nekim C++ kompajlerima ranije moglo da se koristi <string.h> je bilo neko prelazno među-rešenje, ali to se sada ukida. Ako koristiš neki zastareli kompajler (kao što je prestareli Dev-C++) onda moraš i u C++ da koristiš <string.h>, jer taj stari kompajler ne zna za novi standard. Moj ti je savet da pređeš na novi kompajler.
[ petak-13. @ 11.12.2011. 16:23 ] @
na koji onda drugi kompajler da predjem??
imam instaliran dev c++ 4.9.9.2 i njega koristim imam code blocks takodje, samo ne znam koji kompajler tamo da izaberem. pa i ne koristim.
ali i kad sam ukljucio biblioteku cstring opet program nije htio da radi. zasto to???
[ Mihajlo Cvetanović @ 11.12.2011. 17:34 ] @
Ne znam kako se koristi Code::Blocks, ali je u svakom slučaju bolji od Dev-C++, i moj ti je savet da pređeš na njega i zaboraviš na Dev-C++.

Nije mi jasno ovo što me pitaš "zašto to???" kad sam valjda sve lepo objasnio. <cstring> je nova stvar, Dev-C++ je stara stvar, i zato prvog nema u drugom.
[ petak-13. @ 11.12.2011. 23:02 ] @
aha, pardon. ja sam malo prekontao.
pokusao sam u dev-u i jedno i drugo pa nije radilo.pokusacu sad ovaj zadatak u code blocks pa cu vidjeti sta ce ispasti.
mozes li mi reci da li je dobar kod ovaj gore sto sam napisao?
[ llux @ 12.12.2011. 13:29 ] @
Nije tacno da je DEV toliko star. Kada sam ga koristio, podrzavao je najnoviji standard. Sto znaci za C biblioteke cstring a za C++ zaglavlja bez .h ekstenzije
[ petak-13. @ 12.12.2011. 23:12 ] @
ne razumijem se toliko u to. tek sam poceo da ucim C++. tako da jos ne znam koji kompajler je "najbolji"
ja mislim da je kod mene onaj GNU podrazumjevani i tako sljaka.

da li bi mi neko htio pomoci jednog zadatka sto sam ja radio. ima nekih par gresaka sto sam previdio pa nikako da skontam gdje i sta.
projekt

ima unutra i pdf gdje opisan zadatak. 2. zadatak po redu je u pitanju.
[ Mihajlo Cvetanović @ 13.12.2011. 09:19 ] @
Mrzi me da uključujem java script, bavim se rapid shareom, raspakujem rar, i sve to samo da bih došao do sorsa. Postavi ovde tekst zadatka i sors kod.
[ petak-13. @ 13.12.2011. 14:28 ] @
evo tekst zadatka

Definisati klasu Dvojka koja omogućava manipulaciju jednim uređenim parom. Prvi element para je cjelobrojni podatak, a drugi element para je string sa proizvoljnim ("neograničenim") brojem znakova.
Klasa Dvojka treba da ima:
a) podrazumijevani konstruktor koji kreira praznu dvojku, čiji je cjelobrojni podatak jednak nuli, a string prazan;
b) konstruktor koji prima jedan cijeli broj i jedan string pa inicijalizuje dvojku;
c) odgovarajući konstruktor kopije;
d) odgovarajući destruktor.
Za klasu Dvojka treba preklopiti sljedeće operatore:
a) operator>> - sa odgovarajućeg ulaza učitava jednu dvojku u obliku: broj string. Omogućiti kaskadno pozivanje.
b) operator<< - na zadatom izlazu ispisuje dvojku u obliku: (broj,string). Omogućiti kaskadno pozivanje.
c) operator= - jednom objektu klase Dvojka dodjeljuje drugi objekat iste klase, pri čemu onemogućava samododjeljivanje (tj. onemogućava dodjelu x=x).
d) operator== - vraća rezultat poređenja dvije dvojke. Za dvije dvojke možemo da kažemo da su jednake ako su im odgovarajuće cjelobrojne komponente jednake. Ako su dvojke jednake vraća istinu, inače vraća laž.
e) operator() - kao rezultat vraća string sadržan u datom uređenom paru.
Definisati klasu Mapa koja omogućava manipulaciju jednostavnom kodnom mapom. Svaka mapa sadrži neograničen niz dvojki. Osim toga, mapa ima još jedan podatak član koji sadrži trenutni broj dvojki u mapi.
Klasa Mapa treba da ima:
a) konstruktor koji kreira praznu mapu,
b) odgovarajući destruktor,
c) prijateljsku funkciju getKapacitet() koja vraća trenutni broj dvojki u mapi.
Za klasu Mapa treba preklopiti sljedeće operatore:
a) operator<< - na zadatom izlazu ispisuje sve dvojke koje se trenutno nalaze u mapi, pri čemu treba omogućiti kaskadno pozivanje.
b) operator+= - omogućava da se u mapu doda nova dvojka (mapa += novaDvojka). Ako u mapi već postoji ista dvojka (tj. dvojka sa istom cjelobrojnom komponentom), ne treba dodati novu dvojku, već postojeću zamijeniti novom.
c) operator() - vraća string iz odgovarajuće dvojke u mapi, čija je cjelobrojna komponenta jednaka argumentu funkcije, odnosno prazan string ako u mapi ne postoji dvojka sa tim cjelobrojnim kodom.
Napisati program u kojem treba:
a) formirati praznu mapu, a zatim sa standardnog ulaza učitati n (n>0) dvojki i napuniti mapu.
b) na standardnom izlazu ispisati mapu.
c) sa standardnog ulaza učitavati cijele brojeve i ispisivati odgovarajuće stringove iz mape, sve dok u mapi postoji dvojka čija je cjelobrojna komponenta jednaka učitanom cijelom broju, kao što je ilustrovano u primjeru.

primjer izvrsavanja programa
n=4
1. dvojka: 2 dva
2. dvojka: 12 dva
3. dvojka: 13 trinaest
4. dvojka: 12 dvanaest

Sadrzaj mape:
(2,dva)
(12,dvanaest)
(13,trinaest)

Unesite broj: 13
Odgovarajuci string: trinaest

Unesite broj: 2
Odgovarajuci string: dva

Unesite broj: 100
Ne postoji odgovarajuci string u mapi!
KRAJ!

Code:

#ifndef klasa
#define klasa
#include <iostream.h>
#include <cstring>

class dvojka
{
      friend istream &operator>>(istream &, dvojka &d );
      friend ostream &operator<<(ostream &,  const dvojka &d);
      private:
              int b;
              char* s;
      public:
             dvojka();
             dvojka(int , char* );
             dvojka(const dvojka&);
             ~dvojka();
             dvojka &operator=(dvojka &);
             char *operator()(int);
             //bool operator==(dvojka &);
             
};
#endif

#ifndef map
#define map
#include "dvojka.h"
#include <iostream.h>

class Mapa
{
      friend ostream &operator<<(ostream &out, const Mapa &m);
      friend int getKapacitet(Mapa &);
      
      private:
              dvojka *dvojke;
              int br;
      public:
             Mapa();
             ~Mapa();
             //char* operator()(int arg);
             Mapa &operator+=(dvojka &);
};
#endif

#include <iostream.h>
#include "dvojka.h"
#include <cstring>


dvojka::dvojka()
{
                b=0;
                s=new char[0];
                            }
                
dvojka::dvojka(int a, char* k)
{
                   b=a;
                   int i,n=0;
                   while(k[n]) n++;
                   s=new char[n+1];
                   for(i=0;i<n;i++)
                   s[i]=k[i];
}
                                   
dvojka::dvojka(const dvojka &d)
{
                     s=new char[strlen(d.s)+1];
                     strcpy(s,d.s);
                     b=d.b;
}
dvojka::~dvojka()
{
                 delete[]s;
                 }


 istream &operator>>(istream &in, dvojka &d)
{
        char* tmp; int p;
        tmp=new char[100];
        in>>p>>tmp;
        d.s=new char [strlen(tmp)+1];
        strcpy(d.s,tmp);
        d.b=p;
        delete[]tmp;
}

 ostream &operator<<(ostream &out, const dvojka &d)
{
        out<<"("<<d.b<<","<<d.s<<")";
        return out;
        }
        
dvojka &dvojka::operator=(dvojka &d)
{
       if(this==&d) return *this;
       delete[]s;
       s=new char[strlen(d.s)+1];
       strcpy(s,d.s);
       b=d.b;
       return *this;
       }
       
char *dvojka::operator()(int arg)
{
     char* rez;
     if(arg==b)
     rez=new char[strlen(s)+1];
     strcpy(rez,s);
     return rez;
     }



#include "mapa.h"
#include "dvojka.h"
#include <iostream.h>

Mapa::Mapa()
{
            br=0;
            dvojke=new dvojka[10];
}
Mapa::~Mapa()
{
              delete[]dvojke;
}

Mapa &Mapa::operator+=(dvojka &d)
{
     if(br==0)
     {
              br=1; *dvojke=d;
              return *this;
              }
     dvojka *tmp; int i;
     tmp=new dvojka[br+1];
     for(i=0;i<br;i++)
     { 
                      tmp[i]=dvojke[i];
                      tmp[i]=d;
                      delete[]dvojke;
                      dvojke=tmp;
                      
                      }
                      return *this;
                      }
int getKapacitet(Mapa &m)
{
    return m.br;
}

ostream &operator<<(ostream &out, const Mapa &m)
{
        int i;
        dvojka d[10];
        for(i=0;i<m.br;i++)
        {
          out<<d[i];
        }
        return out;
        }

#include <iostream.h>
#include "dvojka.h"
#include "mapa.h"


using namespace std;

int main(int argc, char *argv[])
{
    Mapa m;
    dvojka *d;
    int a,i,n;
   do
   {
        cout<<"n=";
        cin>>n;
} while (n<1);
d=new dvojka[10];
for(i=0;i<n;i++)
{
    
    cout<<"\t"<<i+1<<". dvojka: ";
    cin>>d[i];
    m+=d[i];
}
cout<<endl<<"Sadrzaj mape:"<<endl;
cout<<m;

                

    system("PAUSE");
    return EXIT_SUCCESS;
}






[ Mihajlo Cvetanović @ 13.12.2011. 14:39 ] @
I u čemu je problem?
[ petak-13. @ 13.12.2011. 15:53 ] @
nece da ispise te dvojek koje sam unio.
ispise nesto u zagradama, neke znakove i to je to.
nisam nekakav strucnjak ali se meni ono cini ok.
[ Mihajlo Cvetanović @ 13.12.2011. 16:08 ] @
Operator << za mapu ispisuje sadržaj lokalnog niza dvojka d[10] umesto da ispiše sadržaj mape m i internog niza m.dvojke.
[ petak-13. @ 13.12.2011. 16:40 ] @
mozes li reci kako da prepravim to? pokusao sam samo da stavim m.dvojke ali ne moze.
[ Mihajlo Cvetanović @ 13.12.2011. 16:52 ] @
Umesto d[i ] treba m.dvojke[i ].
[ petak-13. @ 13.12.2011. 17:54 ] @
uradio sam tako, ali opet mi prijavi neku gresku. kaze mi da klasa mapa m ne sadrzi dvojku d.
[ Mihajlo Cvetanović @ 14.12.2011. 08:32 ] @
A u kojoj liniji je geška? Ako si tu lepo zamenio d[i ] sa m.dvojke[i ] onda greška ne bi trebalo da bude tu nego negde drugde. Napominjem da nije dovoljno samo da kažeš broj linije, nego nam treba i ime fajla. Greške koje kompajler prikazuje su obično u obliku:

<putanja fajla sa greškom>(<broj reda sa greškom>): <opis greške>

Umesto da prepričaš šta tu piše najbolje je da prekopiraš i postaviš ovde.
[ petak-13. @ 14.12.2011. 13:06 ] @
evo dve slike pa ce biti lakse nego da pricam.






[ Mihajlo Cvetanović @ 14.12.2011. 13:40 ] @
Da, sve je savršeno jasno, mada je meni bilo jasno i ranije. Dva puta sam napisao šta treba da uradiš i evo sad treći put: zameni m.d[i ] sa m.dvojke[i ]. Kad to budeš zamenio nestaće ta greška koju kompajler javlja.
[ petak-13. @ 14.12.2011. 16:48 ] @
joj jesam glup. nisam dobro citao sta si ti pisao. izvinjavam se.
ne prijavljuje sada kompajler nikakvu gresku. hvala na pomoci. i izvini ako sam te smarao.
uskoro cu ja imati jos koji primjer pa cu se javiti :D hehe
[ petak-13. @ 21.12.2011. 18:27 ] @
opet imam neki problem. pomoc bi dobro dosla

u ovom programu za unesemo K ili k nece da izadje iz programa, dok za isti program samo kraci hoce da izadje.
u cemu je problem??


Code:

#include <cstdlib>
#include <iostream>
#include <string.h>
#include "zaglavlje.h"
using namespace std;


int main(int argc, char *argv[])
{
    int n1,n2,i=1,j=1,br1,br2,i1,i2;
    string ime,prezime,jmb,predmet;
    char g,k,k1;
    Nastavnik n[10];
    Student s[10];
    do
    {
    cout<<"Uclanjenje (u)"<<endl;
    cout<<"Brisanje clana (b)"<<endl;
    cout<<"Ispis svih clanova (i)"<<endl;
    cout<<"Prekid programa (k):";
    cin>>k;
    
    if(k=='U'||k=='u')
    {
    cout<<endl<<"========================UCLANJENJE=============================";
    cout<<endl<<"Uclanjenje profesora (p) ili studenta (s): ";
    cin>>k1;
    
    if(k1=='p'||k=='P')
    {
        cout<<"Unesite podatke za "<<i<<". nastavnika: ";
        cout<<endl<<"Ime: ";cin>>ime;
        cout<<"Prezime: ";cin>>prezime;
        cout<<"JMB: ";cin>>jmb;
        cout<<"Naziv predmeta koji predaje: ";cin>>predmet;
        n[i].JMB=jmb;
        n[i].prezime=prezime;
        n[i].ime=ime;
        n[i].predmet=predmet;
        n[i].kontrola=1;
        br1=i;
        i++;
    }
    
    if(k1=='s'||k=='S')
    {
        cout<<"Unesite podatke za "<<i<<". studenta: ";
        cout<<endl<<"Ime: ";cin>>ime;
        cout<<"Prezime: ";cin>>prezime;
        cout<<"JMB: ";cin>>jmb;
        cout<<"Koja godina: ";cin>>g;
        s[j].JMB=jmb;
        s[j].prezime=prezime;
        s[j].ime=ime;s[j].godina=g;
        s[j].kontrola=1;
        br2=j;
        j++;
    }}
    
    if(k=='B'||k=='b')
    {
        cout<<endl<<"========================BRISANJE==================================";
        cout<<endl<<"Unesite JMB clana kojeg zelite obrisati: ";
        cin>>jmb;
        for(i1=1;i1<=br1;i1++)if(n[i1].JMB==jmb)n[i1].kontrola=0;
        for(i2=1;i2<=br2;i2++)if(s[i2].JMB==jmb)s[i2].kontrola=0;
    }
    
    if(k=='I'||k=='i')
    {
        cout<<endl<<"========================ISPIS==================================";
        for(i1=1;i1<=br1;i1++)if(n[i1].kontrola==1)n[i1].pisi();
        for(i2=1;i2<=br2;i2++)if(s[i2].kontrola==1)s[i2].pisi();
    }
    
    cout<<endl<<"======================================================="<<endl;
    }
    while (k!='K'||k!='k');
    system("PAUSE");
    return EXIT_SUCCESS;
}


#ifndef ZAGLAVLJE
#define ZAGLAVLJE

using namespace std;



class Clan
{
      public:
             void pisi()
             {
                  cout<<"Ime: "<<ime;
                  cout<<endl<<"Prezime: "<<prezime;
                  cout<<endl<<"JMB: "<<JMB;
             };
             string JMB,prezime,ime;
};

class Nastavnik: public Clan
{
      public:
              void pisi()
             {
                 cout <<endl<<"Podaci o nastavniku: "<<endl;
                 Clan::pisi(); 
                 cout <<endl<<"Naziv predmeta: "<<predmet<<endl;
             };
             string predmet;
             int kontrola;
};

class Student: public Clan
{
      public:
             void pisi()
             {
                  cout <<endl<<"Podaci o studentu: "<<endl;
                  Clan::pisi(); 
                  cout <<endl<<"Godina studija: "<<godina<<endl;
             };
             char godina;
             int kontrola;
};
#endif

[ Mihajlo Cvetanović @ 22.12.2011. 09:26 ] @
Uslov while petlje ti je trenutno k!='K' || k!='k'. Taj uslov će uvek biti zadovoljen, čak i za 'k' i 'K', jer će k biti različito od onog drugog. Treba da stoji && umesto ||.
[ petak-13. @ 27.12.2011. 11:15 ] @
na koji nacin bi mogao u ovom programu da izdvojim, tj. da napisem osobe cije ime je sadrzano u prezimenu??
npr. marko markovic bi odgovarao, dok marko jankovic ne bi.
neka ideja ili nesto bi bilo dobro. trazio sam funkcije iz biblioteke string.h ali ne postoji takva neka slicna.


Code:

#ifndef KLASE   
#define KLASE
using namespace std;

class Clan
{
      public:
      void pisi()
      {
           cout<<ime<<" "<<prezime;
           }
      string ime,prezime,jmbg;
      char pol;
};

class Nastavnik:virtual public Clan
{
      public:
      void pisi()
      {
           Clan::pisi();
           cout<<"  Predmet: "<<predmet<<endl;
           }
           string predmet;
};

class Student:virtual public Clan
{
      public:
              void pisi()
      {
             Clan::pisi();
             cout<<"  Godina: "<<godina<<endl;
             }
      string godina;
};

class Demonstrator:public Nastavnik,public Student
{
      public:
      void pisi()
      {
           Clan::pisi();
           cout<<predmet<<" "<<godina<<endl;
           }
};
#endif

#include <cstdlib>
#include <iostream>
#include <string.h>
#include "zaglavlje.h"

using namespace std;

int main(int argc, char *argv[])
{
    Nastavnik n[10];
    Student s[10];
    Demonstrator d[10];
    int n1,n2=0,n3=0,n4=0,p1,p2,p3,p4,i;
    string ime, prezime, godina, jmbg, predmet;
    char pol,m;
    static int j=0;
    cout<<"n=";
    cin>>n1;
    cout<<"----------------------------------"<<endl;
    for(p1=0,p2=0,p3=0,i=0;i<n1;i++)
    {
                    cout<<"Podaci o "<<(i+1)<<". clanu:"<<endl;
                    cout<<"prezime:";
                    cin>>prezime;
                    cout<<"ime:";
                    cin>>ime;
                    cout<<"jmbg:";
                    cin>>jmbg;
                    cout<<"pol:";
                    cin>>pol;
                    cout<<"status (N/S/D):";
                    cin>>m;
                    if(m=='n'&&'N')
                    {
                                   n2++;
                                   n[p1].ime=ime;
                                   n[p1].prezime=prezime;
                                   n[p1].jmbg=jmbg;
                                   n[p1].pol=pol;
                                   cout<<"predmet:";
                                   cin>>predmet;
                                   n[p1].predmet=predmet;
                                   p1++;
                                   }
                    if(m=='s'&&'S')
                    {
                                   n3++;
                                   s[p2].ime=ime;
                                   s[p2].prezime=prezime;
                                   s[p2].jmbg=jmbg;
                                   s[p2].pol=pol;
                                   cout<<"godina:";
                                   cin>>godina;
                                   s[p2].godina=godina;
                                   p2++;
                                   }
                    if(m=='d'&&'D')
                    {
                                   n4++;
                                   d[p3].ime=ime;
                                   d[p3].prezime=prezime;
                                   d[p3].jmbg=jmbg;
                                   d[p3].pol=pol;
                                   p3++;
                                   }
                                   cout<<"----------------------------------"<<endl;
                                   }
                                   
    cout<<"spisak clanova:"<<endl;
    for(p1=0,p2=0,p3=0,i=0;i<n1;i++,j++)
    {
         if(n2!=0)
         {
                  cout<<(j+1)<<". nastavnik  "; n[p1].pisi(); cout<<endl; n2--; p1++;
                  }
                  
         else if(n3!=0)
         {
                  cout<<(j+1)<<". student  "; s[p2].pisi(); cout<<endl; n3--; p2++;
                  }
                  
         else if(n4!=0)
         {
                  cout<<(j+1)<<". demonstrator  "; d[p3].pisi(); cout<<endl; n4--; p3++;
                  }
                  
                  }
                                   
                    
    system("PAUSE");
    return EXIT_SUCCESS;
}

[ Mihajlo Cvetanović @ 27.12.2011. 12:34 ] @
Nije mi jasno kakve veze ima postavljeni kod sa postavljenim pitanjem, al nema veze. Funkcija koju tražiš zove se strstr i nalazi se u <string.h>. Evo objašnjenja: http://www.cplusplus.com/reference/clibrary/cstring/strstr/
[ petak-13. @ 27.12.2011. 18:36 ] @
to je jos jedan dio zadatka, samo ga nisam napisao jer nisam znao kako. zato nisam napisao jos koda.
nesto sam ja koristio strlen i memcmp, ali bezuspjesno.
hvala na pomoci. pokusacu sa ovim