Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2012, 14:44   #1
Actimel
 
Регистрация: 02.01.2012
Сообщений: 4
По умолчанию [C++] Написать метод!

Здравствуйте. Помогите пожалуйста. Необходимо дописать метод, который ищет студентов у которых есть неудовлетворительные оценки. Да, и оценки почему то тоже не привильно вводятся, то есть выводит что то непонятное.
Вот мой код:
Код:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Student{
public:
 Student(){
 name = "";
 firstname = "";
 age = "";
 }
 Student(string imya, string fam, string vozr){
 name = imya;
 firstname = fam;
 age = vozr;
 }
 bool Ravno(string fam){
 if(this->firstname == fam)
 return true;
 else
 return false;
 }
 void Print()
 {
 cout<<"\n name "<<name
 <<"\n firstname "<<firstname
 <<"\n age "<<age<<"\n marks";
 for (int j=0;j<5;j++)
	 cout<<marks[j];
 }
private:
 string name;
 string firstname;
 string age;
 int marks[5];
};
class Group{
public:
 Group(){
 student;
 next = NULL;
 prev = NULL;
 }
 Group* First(Student b){
 Group* pv = new Group;
 pv->student = b; 
pv->next = NULL; 
pv->prev = NULL;
 return pv;
 }
 void Add(Group** pend, Student b){
 Group* pv = new Group;
 pv->student = b;
 pv->next = NULL;
 pv->prev = *pend; 
(*pend)->next = pv;
 *pend = pv; 
}
 Group* Find(Group* const pbeg, string b)
 {
 Group* pv = pbeg;
 while (pv)
 {
 if (pv->student.Ravno(b))
 break;
 pv = pv->next;
 }
 return pv;
 }
 void Print_lib(Group* const pbeg){
 Group* pv = new Group;
 pv = pbeg;
 while (pv){
 pv->student.Print();
 pv = pv->next;
 }
 }
 void Remove(Group** pbeg, Group** pend, string b)
 {
 Group* pstudent; 
if (pstudent = Find(*pbeg, b))
 {
 if (pstudent == *pbeg)
 {
 *pbeg = (*pbeg)->next; 
(*pbeg)->prev = NULL;
 }
 else
 if (pstudent == *pend)
 {
 *pend = (*pend)->prev;
 (*pend)->next = NULL;
 }
 else
 {
 pstudent->prev->next = pstudent->next;
 pstudent->next->prev = pstudent->prev;
 }
 delete pstudent;
 }
 else
 cout<<"Student "<<b<<" ne nayden\n";
 }
private:
 Student student;
 Group* next;
 Group* prev;
};
int _tmain(int argc, _TCHAR* argv[])
{
 Group* pbeg = NULL;
 Group* pend = NULL;
 Group Gr;
 int kol_vo;
 cout<<"Vvedite kol-vo studentov: ";
 cin>>kol_vo;
 string name, fam, age, marks[5];
 for (int i = 0; i < kol_vo; i++){
 cout<<"Vvedite imya: ";
 cin>>name;
 cout<<"Vvedite familiyu: ";
 cin>>fam;
 cout<<"Vvedite vozrast: ";
 cin>>age;
 
	 cout<<"Vvedite ocenki"<<"\n";
	 {
 for (int j=0; j<5; j++)
	 cin>>marks[i];
 }
 
 Student student(name, fam, age);
 if(!pbeg){
 pbeg = Gr.First(student);
 pend = pbeg;
 }
 else
 Gr.Add(&pend, student);
 }
 int key;
 do 
{
 cout<<"\nVyberite deystvie: \n"<<
 "1. Dobavit stydenta\n"<<
 "2. Udalit stydenta\n"<<
 "3. Pokazat grypy\n"<<
 "4 Exit\n";
 cin>>key;
 if(key == 1){
 cout<<"Vvedite imya: ";
 cin>>name;
 cout<<"Vvedite familiyu: ";
 cin>>fam;
 cout<<"Vvedite vozrast: ";
 cin>>age;
 Student student(name, fam, age);
 Gr.Add(&pend, student);
 }
 else if(key == 2){
 cout<<"Vvedite familiyu: ";
 cin>>fam;
 Gr.Remove(&pbeg, &pend, fam);
 }
 else if (key == 3)
 Gr.Print_lib(pbeg);
 else if (key != 4)
 cout<<"Vyberete deystvie!\n";
 } while (key != 4);
 system("pause");
 return 0;
}
Actimel вне форума Ответить с цитированием
Старый 16.01.2012, 16:03   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Я не очень большой специалист в данных вопросах, но попытаюсь помочь.
Давайте рассмотрим Ваш класс Student. В нем есть массив int marks[5]; т.е мы предполагаем, что в студента только пять отметок. А как мы заносим эти отметки, и как конструктор этого класса знает, что они его? Из этого следует, что необходим метод, для внесения этих данных.
Я Вам советую не писать пока все задание . давайте по частям. Сначала чисто класс Student и обращение с ним. А далее постепенно все остальное.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 16.01.2012, 16:19   #3
Actimel
 
Регистрация: 02.01.2012
Сообщений: 4
По умолчанию

а не могли бы вы конкретно показать что и как должно быть. просто я не совсем разобрался во всех этих конструкторах деструкторах и т. д. а завтра надо сдать обязательно.
Actimel вне форума Ответить с цитированием
Старый 17.01.2012, 02:20   #4
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

Код:
class Student
{
public:
    Student ( const string & = "", const string & = "", const string & = "" );
    ~Student ();
    bool ravno ( const string & ) const;
    void print ( void ) const;
    void setMarks ( int *, const int );
privat:
    string firstName;
    string lastName;
    string age;
    int sizeMarks;
    int *marks;
};

Student::Student ( const string &first = "", const string &last = "", const string &a = "" )
{
    firstName = first;
    lastName = last;
    age = a;
    sizeMarks = 0;
    marks = 0;
}

Student::~Student ()
{
    if ( !marks )
        delete[] marks;
}

bool Student::ravno ( const string &last ) const
{
    return (last == lastName) ? true : false;
}

void Student::print ( void ) const
{
    cout << "Student: " << firstName << " " << lastName << "  ( age " << age << " )\n";
    cout << "Marks: ";
    if ( sizeMarks != 0 )
        for ( int  i = 0; i < sizeMarks; ++i )
            cout << marks[i] << " ";
    else
        cout << "None";
    cout << endl;
}

void Student::setMarks ( int *m, const int size )
{
    if ( size == sizeMarks )
        for ( int i = 0; i < sizeMarks; ++i )
            marks[i] = m[i];
    else{
        if ( marks )
            delete[] marks;
        sizeMarks = size;
        marks = new int [sizeMarks];
        for (int i = 0 ; i < sizeMarks; ++i )
            marks[i] = m[i];
    };
}
И необходимо перегрузить: конструктор копирования и операцию присваивания.

Последний раз редактировалось ERAGORN; 17.01.2012 в 02:31.
ERAGORN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исследовать метод квадратных корней и метод Холецкого для решения СЛАУ Vит@x@ Помощь студентам 0 22.11.2011 10:47
Задача Коммивояжера. Метод Монте-Карло и метод приращений. [Паскаль] U9110 Помощь студентам 4 06.04.2011 09:48
Написать программу в убывании,используя метод челнока Novenkaja Помощь студентам 2 29.03.2011 20:57
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 05:23