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

[Zadatak] Klase Pitanja i Odgovori

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Klase Pitanja i Odgovori

[ Pregleda: 2627 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ahbo

Član broj: 154890
Poruke: 5
89.146.172.*



Profil

icon [Zadatak] Klase Pitanja i Odgovori22.08.2007. u 17:16 - pre 202 meseci
Evo pokusavam da rijesim jedan zadatak i zapeo sam. Zadatak sadrzava dvije klase, jednu za kreiranje objekta: odgovor i drugu za kreiranje objekta: pitanje. Svaki objekt tipa pitanje moze da sadrzi najvise do 10 odgovora. Problem je u tom sto ne znam kako da implementiram klasu pitanje da mi omoguci kreiranje objekta i u isto vrijeme link na vise objekta tipa odgovor i njihovu definiciju.
Sta sam uradio do sada:
Code:

#include <iostream>
#include <string>
using namespace std;

class cOdgovor
{
private:
    char textOdgovora[20];
    int idOdgovora;
    int tacnost;
public:
    cOdgovor (char *text, int ID, int tacno);
    void setOdgovor(char *text){strcpy(this->textOdgovora,text);}
    char *getOdgovor() {return textOdgovora;}
    void setID (int ID) {this->idOdgovora = ID;}
    int getID() {return idOdgovora;}
    void setTacnost (int tacno) {this->tacnost = tacno;}
    void ispisiOdgovor() {cout<<"Id odgovora: "<<idOdgovora<<" Text Odgovora: "<<textOdgovora;}
};

cOdgovor::cOdgovor(char *text, int ID, int tacno)
{
    strcpy(this->textOdgovora, text);
    this->idOdgovora = ID;
    this->tacnost = tacno;
};

class cPitanje:public cOdgovor
{
private:
    char textPitanja[50];
    int idPitanja;
    cOdgovor *niz[10];
    int brojOdgovora;
public:
//Problem s konstruktorom, kako da u isto vrijeme pozovem konstruktor iz klase cOdgovor
    cPitanje();
    cPitanje(char *textP,int ID,int bOdg);
    void setPitanje (char *textP) {strcpy(this->textPitanja, textP);}
    char *getPitanje() {return textPitanja;}
    void setID(int ID) {idPitanja = ID;}
    int getID() {return idPitanja;}
    void setBrojOdgovora (int bOdg) {brojOdgovora = bOdg;}
    int getBrojOdgovora () {return brojOdgovora;}

};
cPitanje::cPitanje(char *textP,int ID,int bOdg )
{
strcpy(this->textPitanja,textP);
this->idPitanja = ID;
this->brojOdgovora = bOdg;
};

void main()
{

//// Samo da se program ne bi prekinuo
int xa;
cin>>xa;
}


EDIT: X Files : Molim Vas da zbog preglednosti, kod upisujete između tag-ova predviđenih za to:

[code]
int main ( int argc, char *argv[] )
{
// ...
return 0;
}
[/code]


[Ovu poruku je menjao X Files dana 23.08.2007. u 07:15 GMT+1]
 
Odgovor na temu

idb
Ivan Bulic
Beograd

Član broj: 4436
Poruke: 402



Profil

icon Re: [Zadatak] Klase Pitanja i Odgovori22.08.2007. u 18:33 - pre 202 meseci
NIJE TESTIRANO, ali trebalo bi da tadi ...
Code:

//  file.h
#include <iostream>
#include <string>
#include <vector>
//using namespace std;
class cOdgovor {
  private:
    std::string text;
    int id;
    int tacnost;
  public:
    cOdgovor (const std::string &txt = "", const int &i = 0, const int &t = 0);
    //!  mutator member functions 
    inline void Text(const std::string &txt) {text = txt;}
    inline void Id(const int &i)             { id = i;}
    inline void Tacnost(const int &t)        { tacnost = t; }
    //!  inspector member functions 
    inline std::string Text() const { return text; }
    inline int Id()           const { return id;}
    inline int Tacnost()      const { return tacnost; }
};

class cPitanje {
  private:
    std::string text;
    int id;
    std::vector<cOdgovor> odgovori;
  public:
    cPitanje(const std::string &txt = "", const int &i = 0);
    //!  mutator member functions 
    inline void Text(const std::string &txt) {text = txt;}
    inline void Id(const int &i)             { id = i;}
    inline void DodajOdgovor(const cOdgovor &odg) { odgovori.push_back(odg); }
    //!  inspector member functions 
    inline std::string Text() const { return text; }
    inline int Id()           const { return id;}
    inline cOdgovor GetOdgovor(const unsigned int &i) const { return odgovori[i];}
    // ili
    inline voidGetOdgovor(const unsigned int &i, cOdgovor &odg) const { odg = odgovori[i];}
    inline unsigned int Count() const { return odgovori.size(); }
};


Code:

//file.cpp
#include "file.h"
cOdgovor::cOdgovor(const std::string &txt, const int &i, const int &t){
    text    = txt;
    id      = i;
    tacnost = t;
}
cOdgovor::setOdgovor(const std::string &txt){
    text    = txt;
    id      = i;
    tacnost = t;
}

cPitanje::cPitanje(const std::string &txt, const int &i){
    text    = txt;
    id      = i;
}

pozdrav idb

 
Odgovor na temu

Ahbo

Član broj: 154890
Poruke: 5
89.146.172.*



Profil

icon Re: [Zadatak] Klase Pitanja i Odgovori22.08.2007. u 18:39 - pre 202 meseci
Hvala, testirat cu!
 
Odgovor na temu

1jedini
Dejan Milosavljevic
BG

Član broj: 102721
Poruke: 74
*.dynamic.sbb.co.yu.



Profil

icon Re: [Zadatak] Klase Pitanja i Odgovori23.08.2007. u 10:06 - pre 202 meseci
Mala digresija:

Citat:
idb:
Code:

inline void Text(const std::string &txt) {text = txt;}



Prema 7.1.2.3 kljucna rec inline moze biti izostavljena.

AKA DDMM
 
Odgovor na temu

Ahbo

Član broj: 154890
Poruke: 5
89.146.191.*



Profil

icon Re: [Zadatak] Klase Pitanja i Odgovori23.08.2007. u 12:08 - pre 202 meseci
Da, naravno da moze bit izostavljena ali covjeku je ocigledno stalo da sve bude pregledno i fino :)
 
Odgovor na temu

Ahbo

Član broj: 154890
Poruke: 5
*.PPPoE-3084.sa.bih.net.ba.



Profil

icon Re: [Zadatak] Klase Pitanja i Odgovori23.08.2007. u 18:11 - pre 202 meseci
Evo rijesio sam problem na nacin kako se od mene trazilo u zadatku /bez koristenja vektora/, imam 2 problema:
Code:

#include <iostream>
#include <string>
using namespace std;

class cStudent {
public:
    int brojIndexa;
    char *imePrezime;
    int godinaStudija;


    cStudent() {}
    cStudent(int Index, char *iP, int gS) {
        this->brojIndexa = Index;
        this->imePrezime = new char[strlen(iP)+1];
        strcpy (this->imePrezime, iP);
        this->godinaStudija = gS;
    }
        //Copy constructor

    cStudent (cStudent &orginal) {
        this->brojIndexa = orginal.brojIndexa;
        this->imePrezime = new char [strlen(orginal.imePrezime)+1];
        this->imePrezime = orginal.imePrezime;
        this->godinaStudija = orginal.godinaStudija;
    }

    inline int const getIndex() {
    return this->brojIndexa;
}
    inline char const *getimePrezime() {
    return this->imePrezime;
    }

    inline int const getgodinaStudija() {
    return this->godinaStudija;
    }


};

class cDLstudent :public cStudent {

public:
    char *Grad;


    cDLstudent() {
        this->brojIndexa = 693;
        this->imePrezime = new char[strlen("Jasmin Begic")+1];
        strcpy (this->imePrezime, "Jasmin Begic");
        this->godinaStudija = 2;
        this->Grad = new char [strlen("Cazin")+1];
        this->Grad = "Cazin";
    }

    cDLstudent (int Index, char *iP, int gS, char *gR) {
        this->brojIndexa = Index;
        this->imePrezime = new char[strlen(iP)+1];
        strcpy (this->imePrezime, iP);
        this->godinaStudija = gS;
        this->Grad = new char [strlen(gR)+1];
        strcpy(this->Grad,gR); 
    }

    ~cDLstudent() {
    delete [] imePrezime;
    delete [] Grad;
    }


    inline const char *getGrad () {
    return this->Grad;
    }

    cStudent operator = (cDLstudent objekt) {
        this->brojIndexa = objekt.brojIndexa;
        this->imePrezime = new char[strlen(objekt.imePrezime)+1];
        strcpy(this->imePrezime,objekt.imePrezime);
        this->godinaStudija = objekt.godinaStudija;
        this->Grad = new char [strlen(objekt.Grad)+1];
        strcpy(this->Grad,objekt.Grad);
    }
};

class cIspit {
public:
    char *nazivIspita;
    char *datumOdrzavanja;
    cDLstudent **prijavljeni;
    int brojac;


    cIspit (char *Naziv, char *Datum) {
        this->nazivIspita = new char [strlen(Naziv)+1];
        strcpy(this->nazivIspita,Naziv);
        this->datumOdrzavanja = new char [strlen(Datum)+1];
        strcpy(this->datumOdrzavanja, Datum);
        prijavljeni = new cDLstudent *[50];
        brojac = 0;
    }
    ~cIspit() {
    delete [] nazivIspita;
    delete [] datumOdrzavanja;
    for (int i = 0;i<brojac;i++) {
    delete [] prijavljeni[i];
    }
    delete [] prijavljeni;
    }
    void dodajPrijavu (cDLstudent &student) {
        if (brojac < 50)
        {
            if (brojac>0){
                int noviBrojac = brojac;
                for(int i=0; i<noviBrojac; i++)
                {
                    cout<<prijavljeni[i]->brojIndexa<<" "<<student.brojIndexa<<endl;
                    if (prijavljeni[i]->brojIndexa != student.brojIndexa)
                    {
                        //prijavljeni[i] = new DLStudent;
                    prijavljeni[brojac]=&student ;  // pokazivac prijavljen i pokazuje na referencu damir 
                    brojac++;
                    }else {cout<<"Isti broj indexa";}
                }
            }else{
                prijavljeni[brojac]=&student ;  // pokazivac prijavljen i pokazuje na referencu damir 
                brojac++;
            }

        }else{
    cout<<" ne moze se pijaviti vise studenata\n";}
    }

friend ostream& operator<< (ostream& os, cIspit Juni)
    {
        cout<<"uso"<<endl;
        os<<"naziv ispita je: "<< Juni.nazivIspita << " datum: "<< Juni.datumOdrzavanja<<endl;

        for(int i=0; i<Juni.brojac; i++)
        {
        os<< Juni.prijavljeni[i]->brojIndexa << Juni.prijavljeni[i]->imePrezime <<endl;
        }
        return os;

    }
};

void main()
{
    char naziv [100];
    char datum [11];
    int broj;
    int index;
    char ime[100];
    char grad[59];
    cIspit *Juni;

    cout<<"Unesite naziv ispita \n";
    cin>> naziv;

    cout<<"UNesite datum \n";
    cin>> datum;

    Juni = new cIspit(naziv, datum);

    cout<<" Koliko studenata zelite prijaviti: \n";
    cin>> broj;

    cDLstudent **Studenti;
    Studenti = new cDLstudent*[broj];

    for (int i=0; i < broj; i++)
    {
        cout<<"UNesite broj indexa, ime i prezim, grad\n";
        cin>>index >> ime >> grad;
        
        Studenti[i] = new cDLstudent(index, ime, 2, grad);
        
        Juni->dodajPrijavu(*Studenti[i]);
    }

    cout<< *Juni;
    int xxx;
    cin>>xxx;
};


Prvi problem jeste, kako da uredim klasu cIspit, da funkcije iz iste mogu pristupiti protected clanovima klasa cStudent i cDLStudent da bih izbjegao deklaraciju svih clanova svih klasa kao public (napomena nije problem s kalasama cStudent i cDLstudent jer njih znam urediti tako da rade sa protected clanovima).

Drugi problem:

Posto sam ovaj code uzeo iz jednog drugog zadatka, nije mi jasno bas kako funkcionise pa ako moze neko da se baci u detalje :)

Code:

void dodajPrijavu (cDLstudent &student) {
        if (brojac < 50)
        {
            if (brojac>0){
                int noviBrojac = brojac;
                for(int i=0; i<noviBrojac; i++)
                {
                    cout<<prijavljeni[i]->brojIndexa<<" "<<student.brojIndexa<<endl;
                    if (prijavljeni[i]->brojIndexa != student.brojIndexa)
                    {
                        //prijavljeni[i] = new DLStudent;
                    prijavljeni[brojac]=&student ;  // pokazivac prijavljen i pokazuje na referencu damir 
                    brojac++;
                    }else {cout<<"Isti broj indexa";}
                }
            }else{
                prijavljeni[brojac]=&student ;  // pokazivac prijavljen i pokazuje na referencu damir 
                brojac++;
            }

        }else{
    cout<<" ne moze se pijaviti vise studenata\n";}
    }

 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Klase Pitanja i Odgovori

[ Pregleda: 2627 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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