Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ koodissa ongelmia

Sivun loppuun

blackmoor [18.11.2004 21:23:18]

#

Moi!

Koodaan tälläistä työtä:

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>

class TPerson
{
protected:
char name[15];
char surname[15];
int age;

public:
void SetName (char *n) {strcpy (name,n);};
void GetName (char *n) {strcpy (n,name);};
void SetSurName (char *s) {strcpy (surname,s);};
void GetSurName (char *s) {strcpy (s,surname);};
void SetAge(int &a){age=a;};
void GetAge(int &a){a=age;};
};

class TTeacher: virtual public TPerson
{
protected:
char dop[15];            // Date Of Appointment
char department[15];
int courses;
int salary;

public:
void TeacherDisplay(void);
void SetDop (char *d1) {strcpy (dop,d1);};
void GetDop (char *d1) {strcpy (d1,dop);};
void SetDepartment (char *d) {strcpy (department,d);};
void GetDepartment (char *d) {strcpy (d,department);};
void SetCourses(int &c){courses=c;};
void GetCourses(int &c){c=courses;};
void SetSalary(int &s){salary=s;};
void GetSalary(int &s){s=salary;};
};

void TTeacher::TeacherDisplay(void)
{
TTeacher teacher;
cout<<"\n\n     ***  Information of the teacher  ***\n\n";
cout<<"\nTeachers first name: ";
cout<<teacher.name;
cout<<"\nTeacher's last name: ";
cout<<teacher.surname;
cout<<"\nDate of Appointment: ";
cout<<teacher.dop;
cout<<"\nDepartment: ";
cout<<teacher.department;
cout<<"\nNumber of courses: ";
cout<<teacher.courses;
cout<<"\nSalary: ";
cout<<teacher.salary;
}

class TStudent: virtual public TPerson
{
protected:
char pos[15]; // Program Of Study
int studentID;
int year;

public:
void StudentDisplay(void);
void SetProgramOfStudy (char *p) {strcpy (pos,p);};
void GetProgramOfStudy (char *p) {strcpy (p,pos);};
void SetStudentId(int &id){studentID=id;};
void GetStudentId(int &id){id=studentID;};
void SetYear(int &y){year=y;};
void GetYear(int &y){y=year;};
};

void TStudent::StudentDisplay(void)
{
cout<<"\n\n     ***  Information of the Student  ***\n\n";
cout<<"\nFirst name: ";
cout<<name;
cout<<"\nLast name: ";
cout<<surname;
cout<<"\nStudentID: :";
cout<<studentID;
cout<<"\nYear in school: ";
cout<<year;
}

class TTeachingAssistant:public TStudent, public TTeacher
{
public:
void Display(void);

};

void TTeachingAssistant::Display(void)
  {
  TTeachingAssistant tta;
  clrscr();
  cout<<"    *** OK, Let's try to print your information  ***";
  tta.TeacherDisplay();
  tta.StudentDisplay();
  }

void main ()

{
TTeachingAssistant tta;
int age,courses,salary,studentID, year;
char name[15], surname[15], dop[15], department[15], pos[15];
cout<<"   *** School people's management program***   ";
cout<<"\n\n*First I'll ask information of the student*";
cout<<"\n\nInput Student's name: ";
cin>>name;
cout<<"\nInput Student's surname: ";
cin>>surname;
tta.SetName(name);
tta.SetSurName(surname);
cout<<"\nInput Student's program of study: ";
cin>>pos;
cout<<"\nInput Student's ID: ";
cin>>studentID;
cout<<"\nInput Student's year: ";
cin>>year;
tta.SetProgramOfStudy(pos);
tta.SetStudentId(studentID);
tta.SetYear(year);
cout<<"\n\n*Then I'll ask information of the teacher*";
cout<<"\n\n\nInput Teacher's name: ";
cin>>name;
cout<<"\nInput Teacher's surname: ";
cin>>surname;
tta.SetName(name);
tta.SetSurName(surname);
cout<<"\nInput Teacher's Date of appointment: ";
cin>>dop;
cout<<"\nInput Teacher's Department: ";
cin>>department;
tta.SetDop(dop);
tta.SetDepartment(department);
cout<<"\nInput Teacher's number of courses: ";
cin>>courses;
cout<<"\nInput Teacher's salary: ";
cin>>salary;
tta.SetCourses(courses);
tta.SetSalary(salary);
tta.Display();

}

Nyt ongelmana on, että tulostus funktio pitää toimia TTeacherAssistant luokan kautta, mutta kun ajan ohjelman, se kyllä kysyy kaikki, mutta tulostaa vääriä arvoja.

Luulen, että jossain kohtaa mulla on pieni "bugi". Jos voisitte ystävällisesti kertoa, missä? ja miten sen korjaisitte?

Kiitso jo etukäteen!

Metabolix [18.11.2004 21:26:39]

#

Käytä kooditagia, jotta tuosta saisi jotakin tolkkua.

Ihmettelen suuresti tätä funktiota:

void TTeachingAssistant::Display(void)
{
  TTeachingAssistant tta;
  clrscr();
  cout<<" *** OK, Let's try to print your information ***";
  tta.TeacherDisplay();
  tta.StudentDisplay();
}

Tuossahan luot uuden objektin, jonka tietoja näytät. Miksi ihmeessä?

blackmoor [19.11.2004 10:23:13]

#

Koska meidän pitää tehdä tuo noin. Se on yksi harjoitustyö.

thefox [19.11.2004 11:23:33]

#

blackmoor: Ikävä kyllä tuota ei voi tehdä noin. Tuossa on kyllä muitakin virheitä. Olet näköjään tehnyt tuon saman virheen myös TTeacher::TeacherDisplay-metodissa.

Eli korjaus tapahtuu seuraavasti. Muuta tämä:

void TTeachingAssistant::Display(void)
{
  TTeachingAssistant tta;
  clrscr();
  cout<<" *** OK, Let's try to print your information ***";
  tta.TeacherDisplay();
  tta.StudentDisplay();
}

Tähän muotoon:

void TTeachingAssistant::Display(void)
{
  clrscr();
  cout<<" *** OK, Let's try to print your information ***";
  TeacherDisplay();
  StudentDisplay();
}

Muuta myös tämä:

void TTeacher::TeacherDisplay(void)
{
TTeacher teacher;
cout<<"\n\n *** Information of the teacher ***\n\n";
cout<<"\nTeachers first name: ";
cout<<teacher.name;
cout<<"\nTeacher's last name: ";
cout<<teacher.surname;
cout<<"\nDate of Appointment: ";
cout<<teacher.dop;
cout<<"\nDepartment: ";
cout<<teacher.department;
cout<<"\nNumber of courses: ";
cout<<teacher.courses;
cout<<"\nSalary: ";
cout<<teacher.salary;
}

Tähän muotoon:

void TTeacher::TeacherDisplay(void)
{
cout<<"\n\n *** Information of the teacher ***\n\n";
cout<<"\nTeachers first name: ";
cout<<name;
cout<<"\nTeacher's last name: ";
cout<<surname;
cout<<"\nDate of Appointment: ";
cout<<dop;
cout<<"\nDepartment: ";
cout<<department;
cout<<"\nNumber of courses: ";
cout<<courses;
cout<<"\nSalary: ";
cout<<salary;
}

Tuo antamasi koodi ei ole muuten mitenkään parhaiden mahdollisten ohjelmointitapojen mukainen, joten sitä kannattaisi parannella siltäkin osin.

blackmoor [19.11.2004 16:28:02]

#

Develop a program corresponding to the following hierarchy of inheritance:

TPerson
|
Teacher and student inherits from person
|
TTeacher TStudent
|
Teaching assistant inherits from teacher AND student
|
Teaching Assistant

The class TPerson should include at least the attributes: name, surname, and age. The class TTeacher inherited from TPerson should include some additional attributes addressing, for example, the date of appointment; department, courses assigned to that teacher, and salary. The class TStudent should include additional attributes like studentID, year (1, 2, 3, or 4-th year student), and program of study (e.g., IT or Software Engineering).

Finally, the class TTeachingAssistant, inherited from TTeacher and TStudent, should have a method for displaying the values of all attributes of this class. All classes should have methods for getting and setting the values of their attributes. In the main body of the program you should define the objects of TTeacher, TStudent and TTeachingAssistant types. Ask the user enter the values from the keyboard and assign them to the classes TTeacher and TStudent. After that, assign these values to the attributes of the object of TTeachingAssistant type taking the values from the objects of TTeacher and TStudent type. Use only methods of the classes (for getting and setting the values). Finally call the Display method of TTeachingAssistant to display the values.

eli tuolanen oli tehtävä. Voiko sitä oikein muutenkaan rakentaa, kuin noin? tiedän kyllä, että on aika vaikeasti tehty, mut en kexi muutakaan.

Metabolix [19.11.2004 17:28:58]

#

Voi Jeesus. Yritä nyt lukea nuo ohjeet ajatuksella läpi, ja mieti, käsketäänkö siellä luoda jokaisen Display-metodin sisällä uusi objekti. Vastaus: ei käsketä.

blackmoor [19.11.2004 17:49:04]

#

Pyydän anteeksi tyhmyyttäni, en ole koodannut kuin kaksi kuukautta vasta.

Ja olette oikeassa, ei tarvikaan luoda. Mutta kun minulla oli tuo ohjelma samalla lailla kuin teidän korjausehdotuksissa alunperin.

Kokeilin sitä uudestaan, ja sama ongelma tulee:

Teacher:in ja Student:in name ja surname ovat samat, eli ne tiedot, jotka annan teacher kyselyn kohdalla.

Siinä on se ongelma ohjelmassa, eli miten studentin name ja surname muuttujat muutetaan/tulostetaan oikeiksi?

Jyri [20.11.2004 08:51:58]

#

En tiiä ratkaseeko tää ongelmaa, mutta mulla ei ainakaan hyväksu string kutsua, jos se on string.h, eli sen pitäs olla #include <string>
Tai, mulla ei ainakaa toimi toi C tyylinen.

thefox [20.11.2004 11:49:53]

#

blackmoor kirjoitti:

Teacher:in ja Student:in name ja surname ovat samat, eli ne tiedot, jotka annan teacher kyselyn kohdalla.

Siinä on se ongelma ohjelmassa, eli miten studentin name ja surname muuttujat muutetaan/tulostetaan oikeiksi?

Ne ovat samoja, tottakai, koska "Teaching Assistant" on sekä "Student" että "Teacher". Kysyt ensin opiskelijan etu- ja sukunimen, jonka jälkeen tökkäät ne tta-olioon. Tämän jälkeen kysyt opettajan etu- ja sukunimen, ja kun tökit nämä tta-olioon, ne tietysti korvaavat nuo aiemmat nimet.

Metabolix [20.11.2004 16:12:07]

#

Helppo homma, olisit heti kertonut, että tuo on se ongelma. Autan nyt, vaikka oikeastaan nuo tehtävät pitäisi jokaisen tehdä ihan itse.

"Finally, the class TTeachingAssistant, inherited from TTeacher and TStudent, should have a method for displaying the values of all attributes of this class."

Funktion void TTeachingAssistant::Display(void) pitäisi sisältää kaikki tuo, mikä on TTeacher ja TStudent-luokkien Display-funktioissa, ja näiden luokkien Display-funktioita ei kuulu olla. Kuten ohjeissa sanotaan. Nuo tiedot saat eriteltyä lisäämällä jokaiseen tiedon siitä, minkä luokan tietoa printataan. Aloita siis näin:

void TTeachingAssistant::Display(void)
{
  // Suosittelen muutenkin tällaista selkeämpää ohjelmointitapaa:
  clrscr();
  cout << " *** OK, Let's try to print your information ***";

  cout << "\n\n *** Information of the teacher ***\n\n";

  cout << "\nTeacher's first name: "; // Muista oikeinkirjoitus: Teacher's
  cout << TTeacher::name; // Tulostetaan TTeacher-luokalta peritty name-ominaisuus

Muista lisätä myös sinne, missä kysyt tietoja:

tta.TTeacher::SetName(name);

blackmoor [20.11.2004 16:32:43]

#

void TTeachingAssistant::Display(void)
{
  clrscr();
  cout<<" *** OK, Let's try to print your information ***";
  cout<<"\n\n *** Information of the teacher ***\n\n";
  cout<<"\nTeachers first name: ";
  cout<<TTeacher::name;
  cout<<"\nTeacher's last name: ";
  cout<<TTeacher::surname;
  cout<<"\nDate of Appointment: ";
  cout<<TTeacher::dop;
  cout<<"\nDepartment: ";
  cout<<TTeacher::department;
  cout<<"\nNumber of courses: ";
  cout<<TTeacher::courses;
  cout<<"\nSalary: ";
  cout<<TTeacher::salary;
  cout<<"\n\n     ***  Information of the Student  ***\n\n";
  cout<<"\nFirst name: ";
  cout<<TStudent::name;
  cout<<"\nLast name: ";
  cout<<TStudent::surname;
  cout<<"\nProgram of study: ";
  cout<<TStudent::pos;
  cout<<"\nStudentID: :";
  cout<<TStudent::studentID;
  cout<<"\nYear in school: ";
  cout<<TStudent::year;
}

Tein tuon display funktion noin. Mutta edelleen nimet oli samat.

sitten kokeilin tällaista:

void main ()

{
TTeacher teacher;
TStudent student;
TTeachingAssistant tta;

ja tallensin nimet näin:

cout<<"\n\nInput Student's name: ";
cin>>name;
cout<<"\nInput Student's surname: ";
cin>>surname;
student.SetName(name);
student.SetSurName(surname);

cout<<"\n\n*Then I'll ask information of the teacher*";
cout<<"\n\n\nInput Teacher's name: ";
cin>>name;
cout<<"\nInput Teacher's surname: ";
cin>>surname;
teacher.SetName(name);
teacher.SetSurName(surname);

Nyt nimissä on jotain roskaa muistista, ja edelleenkin ne ovat samat. Menee hermot tämän ohjelman kanssa :(

Metabolix [20.11.2004 16:42:07]

#

No miksi teit noin etkä niinkuin neuvoin?

Metabolix kirjoitti:

Muista lisätä myös sinne, missä kysyt tietoja:

tta.TTeacher::SetName(name);

Jos tekisit sen noin, se toimisi.

blackmoor [20.11.2004 17:33:49]

#

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>

class TPerson
{
protected:
char name[15];
char surname[15];
int age;

public:
void SetName (char *n) {strcpy (name,n);};
void GetName (char *n) {strcpy (n,name);};
void SetSurName (char *s) {strcpy (surname,s);};
void GetSurName (char *s) {strcpy (s,surname);};
void SetAge(int &a){age=a;};
void GetAge(int &a){a=age;};
};


class TTeacher: virtual public TPerson
{
protected:
char dop[15];            // Date Of Appointment
char department[15];
int courses;
int salary;

public:
void SetDop (char *d1) {strcpy (dop,d1);};
void GetDop (char *d1) {strcpy (d1,dop);};
void SetDepartment (char *d) {strcpy (department,d);};
void GetDepartment (char *d) {strcpy (d,department);};
void SetCourses(int &c){courses=c;};
void GetCourses(int &c){c=courses;};
void SetSalary(int &s){salary=s;};
void GetSalary(int &s){s=salary;};
};


class TStudent: virtual public TPerson
{
protected:
char pos[15]; // Program Of Study
int studentID;
int year;

public:
void SetProgramOfStudy (char *p) {strcpy (pos,p);};
void GetProgramOfStudy (char *p) {strcpy (p,pos);};
void SetStudentId(int &id){studentID=id;};
void GetStudentId(int &id){id=studentID;};
void SetYear(int &y){year=y;};
void GetYear(int &y){y=year;};
};


class TTeachingAssistant: public TStudent, public TTeacher
{
public:
void Display(void);
};

void TTeachingAssistant::Display(void)
{
  clrscr();
  cout<<" *** OK, Let's try to print your information ***";
  cout<<"\n\n *** Information of the teacher ***\n\n";
  cout<<"\nTeachers first name: ";
  cout<<TTeacher::name;
  cout<<"\nTeacher's last name: ";
  cout<<TTeacher::surname;
  cout<<"\nDate of Appointment: ";
  cout<<TTeacher::dop;
  cout<<"\nDepartment: ";
  cout<<TTeacher::department;
  cout<<"\nNumber of courses: ";
  cout<<TTeacher::courses;
  cout<<"\nSalary: ";
  cout<<TTeacher::salary;
  cout<<"\n\n     ***  Information of the Student  ***\n\n";
  cout<<"\nFirst name: ";
  cout<<TStudent::name;
  cout<<"\nLast name: ";
  cout<<TStudent::surname;
  cout<<"\nProgram of study: ";
  cout<<TStudent::pos;
  cout<<"\nStudentID: :";
  cout<<TStudent::studentID;
  cout<<"\nYear in school: ";
  cout<<TStudent::year;
}


void main ()

{
TTeacher teacher;
TStudent student;
TTeachingAssistant tta;
int age,courses,salary,studentID, year;
char name[15], surname[15], dop[15], department[15], pos[15];
cout<<"   *** School people's management program***   ";
cout<<"\n\n*First I'll ask information of the student*";
cout<<"\n\nInput Student's name: ";
cin>>name;
cout<<"\nInput Student's surname: ";
cin>>surname;
tta.TStudent::SetName(name);
tta.TStudent::SetSurName(surname);
cout<<"\nInput Student's program of study: ";
cin>>pos;
cout<<"\nInput Student's ID: ";
cin>>studentID;
cout<<"\nInput Student's year: ";
cin>>year;
tta.SetProgramOfStudy(pos);
tta.SetStudentId(studentID);
tta.SetYear(year);
cout<<"\n\n*Then I'll ask information of the teacher*";
cout<<"\n\n\nInput Teacher's name: ";
cin>>name;
cout<<"\nInput Teacher's surname: ";
cin>>surname;
tta.TTeacher::SetName(name);
tta.TTeacher::SetSurName(surname);
cout<<"\nInput Teacher's Date of appointment: ";
cin>>dop;
cout<<"\nInput Teacher's Department: ";
cin>>department;
tta.SetDop(dop);
tta.SetDepartment(department);
cout<<"\nInput Teacher's number of courses: ";
cin>>courses;
cout<<"\nInput Teacher's salary: ";
cin>>salary;
tta.SetCourses(courses);
tta.SetSalary(salary);
tta.Display();

}

Tässä taas koko ohjelma, jossa on nuo teidän ehdottamat muutokset. Ja edelleenkin studentin nimi on sama kuin teacherin.

Kokeilkaa kopioida tuo koodi, ja ajaa se, jospa sitten se mun virhe löytyisi.

Ja vielä tuohon, että itse pitää tehdä: olette oikeassa, mutta itsehän mä koko koodin olenkin tehnyt. Mutta jos koodia ei saa itse toimimaan, sitä vartenhan tämä teidän neuvontapalsta on,eikö vain? en pyydä, että teette ohjelman minun puolestani, pyydän vain neuvoa siihen, kun omat taidot loppuvat kesken.

Metabolix [20.11.2004 19:02:18]

#

Opettele joskus käyttämään sitä kooditagia.
Vastaus ongelmaasi: Ota nuo virtualit pois.

blackmoor [20.11.2004 20:20:49]

#

Typerä kysymys, mutta mitä se kooditagi tarkoittaa? ja kokeilin ilman virtualeja, tulee paskaa ulos. ja samat paskat molempiin. ei auta, pittää näyttää oopettajalle tuo maanantaina, ja kysyi, josko se osais ratkaissa.

Kiitos kuitenkin teille!

Latska [20.11.2004 20:25:18]

#

Tuossa vastauslaatikon yläpuolella on semmoinen pieni linkki jossa kerrotaan ohjeet. Suosittelen tutustumaan. :)

eli <koodic> </koodic> esimerkiksi tuottavat C-koodia väritettynä. Ja '<' ja '>' merkkien paikalle laitat hakasulut, niin se on siinä.

Metabolix [20.11.2004 20:36:08]

#

Kooditagin merkitys löytyy Ohjeista, joiden lukemiseen kehotetaan jo ihan keskustelun etusivulla.

Kyllä tuo minulla toimi, kun otin virtualit pois, ihan tuossa muodossa. Oletkohan varmasti muistanut kääntää ohjelmasi uudestaan muutoksen jälkeen?

Tässä vielä kaikki, mitä ruudulla näkyi (otin clrscr-komennon pois, se ei toimi kaikilla kääntäjillä):

 *** School people's management program***

*First I'll ask information of the student*

Input Student's name: 1
Input Student's surname: 2
Input Student's program of study: 3
Input Student's ID: 4
Input Student's year: 5

*Then I'll ask information of the teacher*


Input Teacher's name: 6
Input Teacher's surname: 7
Input Teacher's Date of appointment: 8
Input Teacher's Department: 9
Input Teacher's number of courses: 10
Input Teacher's salary: 11 *** OK, Let's try to print your information ***

 *** Information of the teacher ***


Teachers first name: 6
Teacher's last name: 7
Date of Appointment: 8
Department: 9
Number of courses: 10
Salary: 11

 *** Information of the Student ***


First name: 1
Last name: 2
Program of study: 3
StudentID: :4
Year in school: 5

blackmoor [20.11.2004 21:24:24]

#

Kyllä mielestäni kokeilin sitä, mutta nyt kun poistin ne, ohjelma toimi! Kiitoxia teille, hädässä koodari tunnetaan :) Kaikkea hyvää sinnepäin!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta