Problem sa zadatkom u C++

1

Problem sa zadatkom u C++

offline
  • Pridružio: 31 Dec 2011
  • Poruke: 109
  • Gde živiš: Novi Pazar

Napisano: 24 Apr 2012 17:54

Napisati klasu Student i klasu Predmet.
Klasa Student sadrzi atribute:
Ime -string[10]
prezime -string[15]
indeks -ceo broj
Realizovati
Konstruktor bez argumenata
Konstruktor sa argumentima (ime,prezime,indeks)
set i get metode
predstavi se metoda koja ispisuje podatke o studentu

Klasa Predmet sadrzi atribute:
ime_prof -string[10]
prezime_prof -string[15]
broj_studenata -ceo broj
studenti -dinamicki niz studenata koji slusaju predmet
ocene -dinamicki niz ocena za svakog gore navedenog studenta

Realizovati:
Konstruktor bez argumenata (postavlja broj studenata na 10)
Konstruktor sa jednim argumentom broj studenata n
Kopi konstruktor
void ucitaj_studente (int n) //metoda za ucitavanje prvih n studenata tako sto see navodi njihovo ime prezime i broj indeksa
void ucitaj_ocene(int n) //metoda koja ucitava ocene prvih n studenata
void setStudent(int k,Student s,int ocena)
set i get metoda za ime i prezime profesora

Konkretno imam problem da realizujem metode VOID UCITAJ_STUDENTE i VOID UCITAJ_OCENE jer ne znam kako da pristupim privatnim podacima klase STUDENT. Pocetnik sam u C++ tako da ce mi svako objasnjenje dobro doci. Probao sam da uradim sam ovaj zadatak i zapelo mi je kod ove dve metode. Probao sam da uradim metodu UCITAJ_STUDENTE :
void Predmet::ucitaj_studente(int n){
int i;
cout<<"Unesite elemente niza";
for(i=1;i<n;i++){
cout<<"x["<<i<<"]="<<endl;
cin>>studenti[i];}
}
ali je resenje daleko od onog sto se trazi.

Dopuna: 24 Apr 2012 17:56

Ovo je ono sto sam dosad uradio od zadatka.
#include<iostream.h>
#include<string.h>

class Student
{
char ime[10];
char prezime[15];
int br_indeksa;
public:
Student(){ strcpy(ime,0); strcpy(prezime,0); br_indeksa=0; }
Student(char* i,char* p,int b);
char *setIme(char* im);
char *setPrezime(char* pr);
int setBr_indeksa(int br_i);
char *getIme();
char *getPrezime();
int getBr_indeksa();
void ispis();
};
class Predmet {

int br_studenata;
char ime_prof[10];
char prezime_prof[15];
char *studenti;
int *ocene;


public:
Predmet(){ this->br_studenata=20;
cout<<"Broj studenata na predmetu Programiranje: "<<br_studenata<<endl; }
Predmet(int n){ this->br_studenata=n;
cout<<"Broj studenata na predmetu Programski jezici: "<<n<<endl; }
Predmet(const Predmet &pa);
char *setIme_prof(char* im){ char* ime=im;}
char *setPrezime_prof(char* pr){ char* prezime=pr;}
char *getIme_prof(){ return ime_prof; }
char *getPrezime_prof(){ return prezime_prof; }
void ucitaj_studente(int n);
};
Student::Student(char* i,char* p,int b){
strcpy(ime,i);
strcpy(prezime,p);
br_indeksa=b;

}
void Student::ispis(){
cout<<ime<<" "<<prezime<<" "<<br_indeksa<<endl;

}

char *Student::setPrezime(char* pr)
{ char* prezime=pr;

}
char *Student::setIme(char* im)
{ char* ime=im;

}
int Student::setBr_indeksa(int br_i){
br_indeksa=br_i;

}
char *Student::getPrezime()
{ return prezime;
}
char *Student::getIme()
{ return ime;
}
int Student::getBr_indeksa(){
return br_indeksa;

}
Predmet::Predmet(const Predmet &pa){

br_studenata=pa.br_studenata; }

void Predmet::ucitaj_studente(int n){
int i;
cout<<"Unesite elemente niza";
for(i=1;i<n;i++){
cout<<"x["<<i<<"]="<<endl;
cin>>studenti[i];}
}


void main(){
Student s("Denis","Bogucanin",507);
s.ispis();
Predmet programiranje,programski_jezik(25);
Predmet programiranje1=programiranje;
programiranje.ucitaj_studente(5);


}



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Pa imas metode set, koje bi trebalo da budu public i samo radis ovo:

Student student; char *ime, *prezime; int index; scanf("%s %s %d", ime, prezime, &index); student.setIme( ime ); student.setPrezime( prezime ); student.setIndex( index );

To je jedan nacin, drugi nacin bi bio preko konstruktora:
// podrazumjevamo da smo vec unijeli podatke ime, prezime i index Student student( ime, prezime, index );

A ako zelis da dobijes vrijednosti promenljivih ime, prezime i index koje se nalaze unutar klase Student radis sledece
char *ime = student.getIme(); char *prezime = student.getPrezime(); int index = student.getIndex();

Edit
I koliko vidim pogresno si napisao metode set. na primer kod Student::setIme( char* im ) ti pises char* ime = im; sa cime ti kreiras novu promenljivu ime a ne koristis onu koju si deklarisao u privatnom polju klase student.

void Student::setIme( char* im ) {     ime = im; // ili mozda da koristis strcpy ? }



offline
  • Pridružio: 31 Dec 2011
  • Poruke: 109
  • Gde živiš: Novi Pazar

mycity.rs/must-login.png

Prepravio sam set metodu i ispravio jos poneke greske, ali opet program ne radi. Iznad sam postavio ono sto sam dosad uradio. Ako ti nije problem da mi pomognes oko ovoga je ne mogu da nastavimdalje sa zadatkom bez ove metode. Smile ps. jbg znam da sam naporan.

offline
  • Pridružio: 27 Nov 2010
  • Poruke: 37

mycity.rs/must-login.png

E ovako, tu imas odradjenu klasu CStudent i CPredmet (nisam mogao da se snadjem kroz kod i kad sam se snasao bilo mi je tesko da ga debagujem). Napisao sam ti komentare za neke stvari da bi se lakse snasao.. Napravio sam ti metode ucitajStudente i ucitajOcene, ali me malo bune posto ne znam kako je to profesor zamislio, ja u opste ne bih to tako radio, ali napisao sam onako kako mislim da one trebaju, ti svakako prepravi onako kako trebe odgovara.
Pogledaj malo ovde o klasama cplusplus.com/doc/tutorial/classes/
Pozdrav.

offline
  • Pridružio: 31 Dec 2011
  • Poruke: 109
  • Gde živiš: Novi Pazar

Druze hvala ti za ovaj zadatak posebno za komentare u zadatku koji mi mnogo znace jer sam pocetnik u ovome i bez tih komentara iskreno ne bih razumeo sve ovo sto si odradio. Za ovu metodu setStudent ona treba za unos k-tog studenta gde ocena ima podrazumevanu vrednost 5 ako se ne navede. Tu cu metodu sam da uradim i ostatak zadatka cu sam to jest vec sam uradio samo da prilagodim ovome sto si mi ti poslao Smile . Inace mi kad radimo zadatke na vezbama, sve klase pa i main funkciju radimo u jednom prozoru, svakako cu odsad raditi posebno klase, a ne sve zajedno jer je veoma ne pregledno.
Pozdrav i svako dobro! Ziveli

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

@Clzola20
Pokazivaci na niz se brisu sa delete [] ptr a ne delete ptr !!!

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Ja sam vazda mislio da se brise samo delete ptr i cao Smile
Al nisi morao da stavljas tri uzvicnika xD

offline
  • Pridružio: 04 Maj 2012
  • Poruke: 3

#include<iostream.h>
class Tacka {
//atributi klase koji su privatni
int x;
int y;
//metode klase
public:
void inic(int a,int b);
void pozicija();
void translacija(int dx,int dy);
int getX(){return x;}
int getY(){return y;}
void setX(int x){this->x=x;}
void setY(int y){this->y=y;}
};
void inicf(int a,int b,Tacka &t) {
t.setX(a);
t.setY(b);

}
void inicfp(int a,int b,Tacka *pt) {
pt->setX(a);
pt->setY(b);

}
void Tacka::inic(int a,int b)//Automatski se prosledjuje adresa objekta
// na kome je metoda pozvana (int a,int b,Tacka *this)
{
this->x=a; //x=a;
this->y=b; //y=b

}
void Tacka::pozicija(){
cout<<"Tacka t ima kordinate x="<<x<<" y=" <<y<<endl;
}
void Tacka::translacija(int dx,int dy){
x+=dx;//x=x+dx
y+=dy;//y=y+dy

}
int main(){
Tacka t,t1,t2;
t.inic(3,5);
t.translacija(4,5);
t.pozicija();
inicfp(2,3,&t2);
t2.pozicija();
inicf(4,6,t2);
t2.pozicija();
//cout<<"Tacka t ima vrednost"<<t.getX();
}

Pozdrav!

Može li objašnjenje za dve ove dve metode, ne ide mi *od ruke* da ih skontam:

void inicf(int a,int b,Tacka &t) {
t.setX(a);
t.setY(b);

}
void inicfp(int a,int b,Tacka *pt) {
pt->setX(a);
pt->setY(b);
}

Unapred zahvalan !!!

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Kod prve metode, objekat predajes po referenci, sto znaci da se objekat ne kopira. Unutar nje pozivas metode klase Tacka koje postavljaju atribute Tacka:Mad i Tacka::y na vrijednosti a i b.

Kod druge metode, predajes adresu objekta (odnosno pokazivac na objekat). U ovom slucaju da bi pristupio metodama setX i setY koristis operator ->. I opet ista stvar kao u prvoj metodi, postavljas vrijednosti za Tacka:Mad i Tacka::y atribute.

(Neka me neko ispravi ako grijesim xD)

offline
  • Pridružio: 04 Maj 2012
  • Poruke: 3

Pozdrav!

Zadatak ispod ispisuje razliku datuma (npr. današnjeg datuma i datuma ispita) i to samo za dan i mesec.
Treba da odradim razliku još i za godinu (znači dan, mesec, godina).
Npr.
31.11.2014 (prvi datum)
12.6.2012 (drugi datum)
prvi - drugi
----------------------------

Može li pomoć xD !!! Unapred zahvalan !!!



#include<iostream.h>
class Datum
{
int mesec,dan;
public:
Datum();
Datum(int mesec,int dan);
void setDan(int d);
int getDan();
void setMesec(int m);
int getMesec();
void ispisi();
void izracunajDana(Datum d);
};
Datum::Datum(){
mesec=1;dan=1;
}

Datum::Datum(int mesec,int dan){
this->mesec=mesec;
this->dan=dan;
}
void Datum::setDan(int d){
dan=d;
}
int Datum::getDan(){
return dan;
}
void Datum::setMesec(int m){
mesec=m;
}
int Datum::getMesec(){
return mesec;
}
void Datum::ispisi(){
cout<<"Datum je: "<<dan<<"."<<mesec<<endl;
}
void Datum::izracunajDana(Datum d){
int i,s1,s2;
s1=dan;
s2=d.getDan();
for(i=1;i<mesec;i++)
switch(i){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
s1+=31;
break;
case 2:
s1+=28;
break;
case 4: case 6: case 9: case 11:
s1+=30;
break;
default:
break;
}
for(i=1;i<d.getMesec();i++)
switch(i){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
s2+=31;
break;
case 2:
s2+=28;
break;
case 4: case 6: case 9: case 11:
s2+=30;
break;
default:
break;
}
cout<<"Broj dana izmedju "<<dan<<"."<<mesec<<" i "<<d.getDan()<<"."<<d.getMesec()<<" iznosi:"<<s2-s1<<endl;
}

class Ispit
{
int mesec,dan,sat,predmet;
public:
Ispit();
Ispit(int dan,int mesec,int sat,int predmet);
Ispit(Datum d,int sat,int predmet);
void Ispisi();
};

Ispit::Ispit(){
mesec=1;
dan=1;
sat=9;
predmet=1;
}
Ispit::Ispit(int dan,int mesec,int sat,int predmet){
this->dan=dan;
this->mesec=mesec;
this->sat=sat;
this->predmet=predmet;
}
Ispit::Ispit(Datum d,int sat,int predmet){
dan=d.getDan();
mesec=d.getMesec();
this->sat=sat;
this->predmet=predmet;
}
void Ispit::Ispisi(){
switch(mesec){
case 1:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".januara "<<" u "<<sat<<" sati"<<endl;
break;
case 2:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".februara "<<" u "<<sat<<" sati"<<endl;;
break;
case 3:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".marta "<<" u "<<sat<<" sati"<<endl;;
break;
case 4:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".aprila "<<" u "<<sat<<" sati"<<endl;
break;
case 5:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".maja "<<" u "<<sat<<" sati"<<endl;
break;
case 6:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".juna "<<" u "<<sat<<" sati"<<endl;
break;
case 7:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".jula "<<" u "<<sat<<" sati"<<endl;
break;
case 8:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".avgusta "<<" u "<<sat<<" sati"<<endl;
break;
case 9:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".septembra "<<" u "<<sat<<" sati"<<endl;
break;
case 10:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".oktobra "<<" u "<<sat<<" sati"<<endl;
break;
case 11:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".novembra "<<" u "<<sat<<" sati"<<endl;
break;
case 12:
cout<<"Ispit "<<predmet<<" ce se odrzati "<<dan<<".decembra "<<" u "<<sat<<" sati"<<endl;
break;
default:
break;
}
}

main()
{
Datum d1,d2(1,3),d3(3,28);
Ispit i1,i2(30,7,12,2),i3(d3,9,3);
d2.izracunajDana(d3);
d1.ispisi();
i1.Ispisi();
i2.Ispisi();
i3.Ispisi();
return 0;
}

Ko je trenutno na forumu
 

Ukupno su 833 korisnika na forumu :: 6 registrovanih, 0 sakrivenih i 827 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: DragoslavS, mrav pesadinac, Nobunaga, sokojet, Srle993, 125