Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с программой содержащей классы

7.3K
11 января 2007 года
vova_b
49 / / 24.09.2006
Вот программа
#include <conio.h>
#include <iostream.h>
class school
{
int *HisGrade, *HisShool;
public:
void base();
// void ident();
void age();
void subjects();
virtual void function(),ident();
~school();
char *f,*name, *otch;
//private:
//int *HisGrade, *HisShool;

};


school::~school()
{
delete f;
delete name;
delete otch;
delete HisGrade;
delete HisShool;
}

void school::subjects()
{
cout<<"\nЋб*®ў*лҐ ЇаҐ¤¬Ґвл, Ё§гз Ґ¬лҐ * ¤ **®¬ нв ЇҐ:\n";
cout<<"¬ ⥬ вЁЄ , агббЄЁ©, «ЁвҐа вга , Ё*. п§;";
if(*HisGrade>=5) cout<<" Ёбв®аЁп; ";
if(*HisGrade>=7) cout<<" дЁ§ЁЄ , еЁ¬Ёп, ЎЁ®«®ЈЁп";
else
cout<<" ЇаЁа®¤®ўҐ¤Ґ*ЁҐ";
cout<<'\n';
}

void school::age()
{
cout<<"\n…Ј® ў®§а бв ®в "<<(*HisGrade+5)<<" ¤® "<<(*HisGrade+7)<<" «Ґв\n\n";

}


void school::ident()
{ int i;

HisGrade=new int;
HisShool=new int;
f=new char[20];
name=new char[20];
otch=new char[20];
cout<<"\n‚ўҐ¤ЁвҐ д ¬Ё«Ёо\n";
cin>>f;
cout<<"‚ўҐ¤ЁвҐ Ё¬п\n";
cin>>name;
cout<<"‚ўҐ¤ЁвҐ ®взҐбвў®\n";
cin>>otch;
cout<<"\n‚ўҐ¤ЁвҐ Є« бб, ў Є®в®а®¬ ®* гзЁвбп\n";
cin>>*HisGrade;
cout<<"\n‚ўҐ¤ЁвҐ *®¬Ґа иЄ®«л, ў Є®в®а®© ®* гзЁвбп\n";
cin>>*HisShool;

int ident=1;

while(ident==1)
{
cout<<"\n choose the function:\n-1- ‚뢥бвЁ ¤ **лҐ ® 祫®ўҐЄҐ\n-2- ЏаЁ¬Ґа*®Ґ ®Їа¤Ґ«Ґ*ЁҐ ў®§а бв 祫®ўҐЄ \n-3- ‚뢥бвЁ ЇаҐ¤¬Ґвл, Є®в®алҐ ®* ¤®«¦Ґ* Ё§гз вм";
cout<<"\n-4- ЏҐаҐўҐб⨠祫®ўҐЄ Ё§ а §ап¤ иЄ®«м*ЁЄ ў а §ап¤ бв㤥*в\n";
cin>>i;
clrscr();
switch(i)
{
case 1 :
base();
cout<<"\nЄ« бб, ў Є®в®а®¬ ®* гзЁвбп\n";
cout<<*HisGrade;
cout<<"\n*®¬Ґа иЄ®«л, ў Є®в®а®© ®* гзЁвбп\n";
cout<<*HisShool;
break;
case 2 : age();
break;
case 3 : subjects();
break;
case 4 : ident=0;
break;
default: cout<<"\nWrong number of tne function\n";
}
}
}

void school::function()
{
cout<<"ЏаЁ¬Ґа*л© ў®§а бв தЁвҐ«Ґ© г иЄ®«м*ЁЄ "<<(*HisGrade+27)<<"«Ґв (Ј®¤ )";
};

void school::base()
{ cout<<"\n\n„ **лҐ ®Ў ®ЎкҐЄвҐ:\n";
cout<<f<<" "<<name<<" "<<otch<<"\n";
}

class student: public school
{
public:
~student();
virtual void function()
{
cout<<"ЏаЁ¬Ґа*л© ў®§а бв தЁвҐ«Ґ© г cв㤥*в "<<(*curs+40)<<"«Ґв (Ј®¤ )";
}
void nasledovanie(school *);
void ageStudent();
void stipendia();
void ident2(school *);
int *curs;
private:
int *reiting;
};

void student::nasledovanie(school *t)
{ f=t->f;
name=t->name;
otch=t->otch;
}

void student::ident2(school *t)
{
nasledovanie(t);

reiting=new int;
curs=new int;
cout<<"‚ўҐ¤ЁвҐ *®ўлҐ ¤ **лҐ:\n";
cout<<"ђҐ©вЁ*Ј\n";
cin>>*reiting;
cout<<"Љгаб\n";
cin>>*curs;

int i, ident=1;
while(ident==1)
{
textattr(2);
cout<<"\n choose the function:\n-1- ‚뢥бвЁ ¤ **лҐ ® 祫®ўҐЄҐ\n-2- ЏаЁ¬Ґа*®Ґ ®Їа¤Ґ«Ґ*ЁҐ ў®§а бв 祫®ўҐЄ \n-3- ‚뢥бвЁ а §¬Ґа ҐЈ® бвЁЇҐ*¤ЁЁ";
cout<<"\n-4- ЏҐаҐўҐб⨠祫®ўҐЄ Ё§ а §ап¤ бв㤥*в ў а §ап¤ бЇЁа *в\n";

cin>>i;
clrscr();
textattr(5);
switch(i)
{
case 1 :{ base(); cout<<"\nђҐ©вЁ*Ј\n"<<*reiting<<"\nЉгаб\n"<<*curs;
break; }
case 2 :{ ageStudent(); break; }
case 3 :{ stipendia(); break; }
case 4 :{ ident=0; break; }

default: cout<<"\nWrong number of tne function\n";
}
}
}

void student:: ageStudent()
{ cout<<"‘в㤥*вг ®Є®«®"<<(*curs+20)<<" «Ґв(Ј®¤ )";
}
void student:: stipendia()
{ if(*reiting>=7)
{ if(*reiting>=8)
{ if(*reiting>=9)
{ if(*reiting>=10)
{ if(*reiting>=11)
{ if(*reiting>=12)
cout<<" ®Є®«® 139\n";
else {cout<<" ®Є®«® 139\n"; }
}
else cout<<"®Є®«® 139\n";
}
else cout<<"®Є®«® 139\n";
}
else cout<<"®Є®«® 139\n";
}
else cout<<"®Є®«® 139\n";
}
else cout<<"‘вЁЇҐ*¤ЁЁ г бв㤥*в *Ґв\n";

}


student:: ~student()
{
delete curs;
delete reiting;
}


class aspirant:public student{
public:
virtual void function();
void ident3(student *);
void ageAspirant();
void zarplata();
};
void aspirant:: zarplata()
{ cout<<"‡ аЇ« в ЇаЁ¬Ґа*® б®бв ў«пҐв "<<*curs<<"000";
}
void aspirant:: ident3(student *t)
{ nasledovanie(t);
curs=new int;
cout<<"‚ўҐ¤ЁвҐ *®ўлҐ ¤ **лҐ:\n";
cout<<"‘в ¦ а Ў®вл";
cin>>*curs;
int i, ident=1;
while(ident==1)
{
textattr(2);
cout<<"\n choose the function:\n-1- ‚뢥бвЁ ¤ **лҐ ® 祫®ўҐЄҐ\n-2- ЏаЁ¬Ґа*®Ґ ®Їа¤Ґ«Ґ*ЁҐ ў®§а бв 祫®ўҐЄ \n-3- ‚뢥бвЁ а §¬Ґа ҐЈ® § аЇ« вл(ЇаЁ¬Ґа*®)";
cout<<"\n-4- ЏҐаҐўҐб⨠祫®ўҐЄ Ё§ а §ап¤ бЇЁа *в ў а §ап¤ ЇаҐЇ®¤ ў ⥫м\n";

cin>>i;
clrscr();
textattr(8);
switch(i)
{
case 1 :{ base(); cout<<"‘в ¦ а Ў®вл"<<*curs;
break; }
case 2 :{ ageAspirant(); break; }
case 3 :{ zarplata(); break; }
case 4 :{ ident=0; break; }

default: cout<<"\nWrong number of tne function\n";
}
}
}

void aspirant:: ageAspirant()
{ cout<<"‚®§а бв нв®Ј® 祫®ўҐЄ ЇаЁ¬Ґа*® "<<(*curs+21)<<"+-5«Ґв";
}
void aspirant:: function()
{ cout<<"ЏаЁ¬Ґа*л© ў®§а бв தЁвҐ«Ґ© г бЇЁа *в "<<(*curs+50)<<"«Ґв (Ј®¤ )";
}

class prepod: public aspirant{
public:
virtual void function();
void ident4(aspirant *);
};

void prepod::function()
{
cout<<"ЏаЁ¬Ґа*л© ў®§а бв தЁвҐ«Ґ© 㠯९®¤ ў ⥫п"<<(*curs+55)<<"«Ґв (Ј®¤ )";
}

void prepod:: ident4(aspirant *t)
{ nasledovanie(t);
cout<<"‚ўҐ¤ЁвҐ *®ўлҐ ¤ **лҐ:\n";
cout<<"‘в ¦ а Ў®вл ЇаҐЇ®¤ ў ⥫Ґ¬";
cin>>*curs;
int i, ident=1;
while(ident==1)
{
textattr(2);
cout<<"\n choose the function:\n-1- ‚뢥бвЁ ¤ **лҐ ® 祫®ўҐЄҐ\n-2- ЏаЁ¬Ґа*®Ґ ®Їа¤Ґ«Ґ*ЁҐ ў®§а бв 祫®ўҐЄ \n-3- ‚뢥бвЁ а §¬Ґа ҐЈ® § аЇ« вл(ЇаЁ¬Ґа*®)";
cout<<"\n-4- ‚л室 Ё§ ў ўЁавг «м*го дг*ЄжЁо\n";
cin>>i;
clrscr();
textattr(5);
switch(i)
{
case 1 : base();
cout<<"‘в ¦ а Ў®вл ЇаҐЇ®¤ ў ⥫Ґ¬"<<*curs;
break;

case 2 : cout<<"ЋЄ®«® 30-50 «Ґв\n";
break;

case 3 : zarplata(); cout<<"0\n";
break;

case 4 : ident=0;
break;

default: cout<<"\nWrong number of tne function\n";
}
}

}


void virt(school *t,school *d,school *a,school *p )
{
clrscr();
cout<<"‚л * 室ЁвҐбм ў бдҐаҐ а Ў®вл ўЁавг «м*®© дг*ЄжЁЁ, Є®в®а п ¤«п «оЎ®Ј® ®ЎкҐЄв ўлбзЁвлў Ґв ЇаЁ¬Ґа*л© ў®§а бв ҐЈ® தЁвҐ«Ґ©\n";
int i, ident=1;
while(ident==1)
{
textattr(3);
cout<<"\n choose the function:\n‡ ЇгбвЁвм ўЁавг «м*го дг*ЄжЁо ¤«п\n-0- иЄ®«м*ЁЄ \n-1- cв㤥*в \n-2- бЇЁа *в \n-3- ЇаҐЇ®¤ ў ⥫п";
cout<<"\n-4- ‚л室 Ё§ Їа®Ја ¬¬л\n";

cin>>i;
clrscr();


switch(i)
{ case 0 : t->function(); break;
case 1 : d->function(); break;
case 2 : a->function(); break;
case 3 : p->function(); break;
case 4 : ident=0; break;

default: cout<<"\nWrong number of tne function\n";
}
}
}


void main()
{
clrscr();
cout<<"Ќ ¤ **®¬ нв *Ґ ®ЎмҐЄв пў«пҐвбп иЄ®«м*ЁЄ®¬\n"
<<"‚ўҐ¤ЁвҐ ҐЈ® * з «м*лҐ ¤ **лҐ";
school *t=new school;
t->ident();
student *d=new student;
d->ident2(t);
aspirant *a=new aspirant;
a->ident3(d);
prepod *p=new prepod;
p->ident4(a);
virt(t, d, a, p);
delete t, d, a, p;
}
она рабочая но препад сказал что некоректно написана, помогите переписать!
242
11 января 2007 года
Оlga
2.2K / / 04.02.2006
[COLOR=red][COLOR=black]vova_b[/COLOR], не хочу вас обидеть, но подумайте сами, кто захочет читать ваш код, который вы даже не отформатировали(в расширенном режиме отключи смайлы, и пользуйся тегом код - читаем правила раздела Студентам), для того чтобы для начала понять само задание, а затем ещё и написать вам новое решение? может и найдутся герои, но лучше нормально оформлять вопросы. также давайте информативное название теме, которое отражает суть вопроса + пишите в названии язык.[/COLOR]
и вообще, код такого размера надо оформлять как вложение.
1.9K
11 января 2007 года
InterWen
331 / / 16.09.2006
Некорректно? Так и сказал? И все?
Это не пояснение, как псих.-домушник могу сказать - все еще зависит и от того, что за чел. ваш препАд :)

Единственное к чему придрался бы лично я в таком невоспринимаемом количестве и представлении кода (копировалось судя по всему прямо с Билдера, вот ещё и кодировки "поехали") - имена методов: nasledovanie(), zarplata(), prepod()
Возможно мои взгляды и убеждения по отношению к эталону эстетически написанного кода чрезмерно консервативны [COLOR="Gray"](шо я несу, сам ржу сижу)[/COLOR], но все же...


+ мы, поверив на слово, и не сомневаемся в работоспособности приведенного фрагмента (хотя на самом деле отсутствие ошибок от компилятора и линковщика можно принимать лишь как подтверждение синтаксической корректности, не более), но логические ошибки без ознакомления с САМИМ ЗАДАНИЕМ понять нереально. Так каково же было задание? Возможно вы просто неверно его поняли, или препод невнятно сформулировал?
63
11 января 2007 года
Zorkus
2.6K / / 04.11.2006
Автор, для интереса и проверки твоих слов, что программа рабочая, попробовал собрать. MinGW. И позволю себе усомниться в справедливости твоей. 37 ошибок и 4 варнинга - это, имхо, многовато для рабочей программы. Бегло просмотрел список их - если некоторые безобидные (особенности компилера), то ошибки типа
 
Код:
main.cxx:254: error: expected `,' or `;' before '{' token
исправлять должен ты, полагаю.
Скажи, в какой среде пишешь, чтоб не было разногласий по варнингам.. И советую:
- переписать, исправив синтаксические ошибки,
- отформатировать нормально,
- написать краткие комменты
Тогда думаю, тебе с большей охотой / эффективностью помогут.
P.S. Твой препод - воплощение толерантности:) Не обижайся:)
3
11 января 2007 года
Green
4.8K / / 20.01.2000
Программа, действительно, написана некорректно.
По поводу структурированности и аккуратности тебе уже сказали.
Я же скажу, что программа содержит множество некорректных с т.з. функциональности мест. Например:
 
Код:
void student::nasledovanie(school *t)
{ f=t->f;
   name=t->name;
   otch=t->otch;
}

Это потенциальный (и очень вероятный) баг.
Вот ещё потенциальный баг:
 
Код:
f=new char[20];
....
cin>>f;

Мне вообще не понятно зачем было использовать указатели
char *f,*name, *otch;
а тем более
int *HisGrade, *HisShool;

Ну и архитектурно программа совершенно некорректна. Класс данных сам занимается получением инф. от пользователя и выводом на экран.

Вот это тоже дурно пахнет:
Код:
void student:: stipendia()
{ if(*reiting>=7)
{ if(*reiting>=8)
{ if(*reiting>=9)
{ if(*reiting>=10)
{ if(*reiting>=11)
{ if(*reiting>=12)
cout<<" &#174;Є&#174;&#171;&#174; 139\n";
else {cout<<" &#174;Є&#174;&#171;&#174; 139\n"; }
}
else cout<<"&#174;Є&#174;&#171;&#174; 139\n";
}
else cout<<"&#174;Є&#174;&#171;&#174; 139\n";
}
else cout<<"&#174;Є&#174;&#171;&#174; 139\n";
}
else cout<<"&#174;Є&#174;&#171;&#174; 139\n";
}
else cout<<"‘вЁЇҐ*&#164;ЁЁ г бвг&#164;Ґ*в *Ґв\n";

}


Вот это очень странный метод (по параметрам, названию и пр.):
void virt(school *t,school *d,school *a,school *p )

Вот это очень некрасиво и нерационально:
 
Код:
school *t=new school;
t->ident();
student *d=new student;
d->ident2(t);
aspirant *a=new aspirant;
a->ident3(d);
prepod *p=new prepod;
p->ident4(a);
virt(t, d, a, p);
delete t, d, a, p;


Это только то, что сразу бросается в глаза.
Если ипользовать (действительно использовать) С++, твоя программа сокращается и упрощается раза в 3-4.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог