С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Нать
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 5
#1

Классы - C++

02.11.2011, 11:33. Просмотров 504. Ответов 6
Метки нет (Все метки)

Добрый день!
Как создать код программы:
В текстовом файле (создается самостоятельно по заданному ниже образцу, можно скопировать образец) дана информация о студентах одной группы:
• Фамилия
• Имя
• Отчество
• Оценка по программированию
• Оценка по мат. анализу
• Оценка по алгебре
Написать программу, реализующую работу контейнера для хранения и обработки этой информации. Необходимо:
1. Создать контейнер (класс для хранения и обработки даных в виде динамического массива) и загрузить в него данные о студентах ( реализацию TStudent, реализацию TGroup,чтение из файла)
2. Вывести на экран список студентов группы и средний балл для каждого ( за вывод Ф.И.О.,вывод среднего балла, реализацию выводов с использованием property)
3. Вывести список студентов, имеющих высший балл по программированию (т.е. с максимальным баллом в группе, и это может быть не обязательно пятёрка)
4. Вывести список студентов, фамилии которых начинаются с заданного шаблона (например, для шаблона «Ива» получаем список: Иванов, Иванчиков, Ивахов, Иващенко и т.п.)
В программе реализовать классы TStudent и TGroup. В классе TStudent обязательно реализовать метод для вывода информации о студенте на экран и метод для подсчета среднего балла студента.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 11:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы (C++):

Непонятна тема (Классы содержащие другие классы, как данные члены ) - C++
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include <iostream> class Point { public: void SetX(int...

Программа по классам, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы - C++
Нужно написать программу, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы. Реализовать её нужно в трех...

Наследование, базовые классы и производные классы - C++
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) - C++
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Классы, включающие другие классы - C++
Столкнулся вот с таким кодом: #include <iostream> class Point { public: void SetX(int x) {itsX = x;} void SetY(int y) ...

Классы возможностей(Mixin классы) - C++
Не могу понять смысла использования mixin классов( это класс в котором есть только методы и нет членов-данных) Т.е. к примеру у нас...

6
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
02.11.2011, 11:35 #2
с использованием property
Ну нету в С++ свойств. Нету.
0
Нать
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 5
02.11.2011, 11:43  [ТС] #3
а не могли бы вы написать примерный код этой программы??
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
02.11.2011, 12:23 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <numeric>
#include <array>
 
class TStudent
{
public:
   static const size_t notes_numb = 3;
   typedef std::array<short, notes_numb> notes_holder;
 
   TStudent(const std::string& sur_, const std::string& f_name, const std::string& l_name,
            const notes_holder& arr):
      surname(sur_), first_name(f_name), last_name(l_name), notes(arr)
   {
   }
   const std::string get_surname() const
   {
      return surname;
   }
   const std::string get_first_name() const
   {
      return first_name;
   }
   const std::string get_last_name() const
   {
      return last_name;
   }
   const notes_holder get_notes() const
   {
      return notes;
   }
   double get_middle_note() const
   {
      return static_cast<double>(std::accumulate(notes.begin(), notes.end(), 0)) / notes_numb;
   }
private:
   std::string surname;
   std::string first_name;
   std::string last_name;
   notes_holder notes;
};
 
std::ostream& operator << (std::ostream& os, const TStudent& stud)
{
   os << "First name: " << stud.get_first_name() << " Surname: " << 
   stud.get_surname() << " Last name: " << stud.get_last_name() << std::endl;
   os << "Notes: ";
   TStudent::notes_holder notes = stud.get_notes();
   std::copy(notes.begin(), notes.end(), std::ostream_iterator<short>(os, ","));
   os << std::endl;
   os << "Middle note: " << stud.get_middle_note() << std::endl;
   return os;
}
 
class TGroup
{
public:
   typedef std::vector<TStudent> students_holder;
   TGroup(const students_holder& hold):
      students(hold)
   {
   }
   const students_holder get_students() const
   {
      return students;
   }
   const students_holder find_by_surname(const std::string& pattern) const
   {
      students_holder result;
      std::for_each(students.begin(), students.end(), [&result, pattern](const TStudent& stud)
      {
         if (stud.get_surname().find(pattern) != std::string::npos)
         {
            result.push_back(stud);
         }
      });
      return result;
   }
   const students_holder find_by_max() const
   {
      students_holder result;
      short max_prog = std::max_element(students.begin(), students.end(), [](const TStudent& first, const TStudent& second)
      {
         return first.get_notes()[0] < second.get_notes()[0];
      })->get_notes()[0];
      std::for_each(students.begin(), students.end(), [&result, max_prog](const TStudent& stud)
      {
         if (stud.get_notes()[0] == max_prog)
         {
            result.push_back(stud);
         }
      });
      return result;
   }
private:
   students_holder students;
};
 
std::ostream& operator << (std::ostream& os, const TGroup& gr)
{
   TGroup::students_holder students = gr.get_students();
   std::for_each(students.begin(), students.end(), [&os](const TStudent& stud)
   {
      os << stud << std::endl;
   });
   return os;
}
 
int main()
{
   TStudent::notes_holder first_notes;
   first_notes.fill(5);
   TStudent::notes_holder second_notes;
   second_notes.fill(4);
   TStudent::notes_holder third_notes;
   third_notes.fill(5);
   TGroup::students_holder students = 
   {
      (TStudent("Ivanov", "Ivan", "Ivanovich", first_notes)),
      (TStudent("Vasilied", "Vasilii", "Vasilievich", second_notes)),
      (TStudent("Ivanova", "Maria", "Sidorovna", third_notes))
   };
   TGroup gr(students);
   std::cout << gr << std::endl;
   TGroup::students_holder finded_by_surname = gr.find_by_surname("Iva");
   std::cout << finded_by_surname << std::endl;
   TGroup::students_holder finded_by_prog_max = gr.find_by_max();
   std::cout << finded_by_prog_max << std::endl;
}
Правда std::array не слишком удачно я использовал, но переписывать лень.

http://liveworkspace.org/code/32d87e30ca0192d5263b0c19c4d3b573
0
Нать
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 5
02.11.2011, 16:27  [ТС] #5
А не удачно,это как???))

Добавлено через 2 часа 27 минут
прокомментируйте,пожалуйста,код задачи,очень сложно разобраться в программе:
Код
# include <iostream>
using namespace std;
class node 
{
public:
	int a;
	node * next;
	node (int _a)
{
	a=_a;
	next=NULL;
}
};
class stack
{
	node * top;
public:
	stack() {top=NULL;}
	~stack ()
{
	while (top)
	delete top;
	top=top->next;
}

void print_stack()
{
	node * temp = new node (0);
	temp=top;
	while (temp) {cout<<temp->a<<" "; temp=temp->next;} 
}
void add_stack (int a)
{
	node * temp = new node (a);
	if (!top) top=temp;
	else {temp->next=top; top=temp;} 
}
void del_node (int a)
{
	node * temp = new node (a);
	node * t = new node (a);
	t=top;
	temp=top->next;
	if (top->a==a) {top=top->next; return;}
		while (temp)
		{
			if (temp->a==a)
			{			
				t->next=temp->next;
				delete temp;
				return;
			}
		temp=temp->next;
		t=t->next;
		}
}
bool poisk (int a)
{
	bool f=false;
	node * temp = new node (0);
	temp=top;
while (temp) 
{ 
	if (temp->a==a) f=true;
	temp=temp->next;
}
return f;
}
stack * peresechenie_stack (stack * S)
{
	stack *result = new stack ();
	node * temp = new node (0);
	temp=top;
while (temp)
{
	if (S->poisk(temp->a)) result->add_stack(temp->a);
	temp=temp->next;
}
return result;
}
stack * obedinenie_stack (stack * S)
{
	stack *result = new stack ();
	result=this;
	node * temp = new node (0);
	temp=S->top;
while (temp)
{
	if (!this->poisk(temp->a)) result->add_stack(temp->a);
	temp=temp->next;
}
	return result;
}
stack * dopolnenie_stack (stack * S) //из первого стека удаляем второй
{
	stack *result = new stack ();
	result=this;
	stack *p = new stack ();
	p=this->peresechenie_stack(S);
	node * temp = new node (0);
	temp=p->top;
while (temp)
{
	this->del_node(temp->a);
	temp=temp->next;
}
	return result;

}

};
void main ()
{
	setlocale(LC_ALL, "Russian");
	int a=1;
	stack * A= new stack ();
while (a)
{ 
	cin>>a; 
	if (!a)break;
	A->add_stack(a);
}
cout<<"стек"<<endl;
A->print_stack();
stack * B= new stack ();
a=1;
while (a)
{ 
	cin>>a; 
	if (!a) break;
	B->add_stack(a);}
	cout<<"\nстек"<<endl;
	B->print_stack();
	cout<<"\nпересечение"<<endl;
	(A->peresechenie_stack(B))->print_stack();
	cout<<"\nобъединение"<<endl;
	(A->obedinenie_stack(B))->print_stack();
	cout<<"\nдополнение"<<endl;
	(A->dopolnenie_stack(B))->print_stack();
	system ("pause");

}
0
Нать
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 5
06.11.2011, 09:46  [ТС] #6
Не могу написать главную функцию main для программы о создании множества по принципу стека,пресечение множеств.
Код
#include<iostream>
#include <conio.h>
#include <stdio.h>
class set
{
	class element
	{
		public:
			const int a;
			element *next;
			element(int _a):a(_a), next(NULL) { }
			void draw()
			{
				printf("%d ",a);
			};
	} *e;
	
	int count;
	public:
		set():e(NULL), count(0) { }
		
		~set()
		{
			element *temp;
			while (e != NULL) 
			{
				temp = e;
				e = e->next;
				delete temp;
			}
			count = 0;
		}
		
		void set::add(int b)
		{	
			element*i=e;
			if(!i)
			{
				i=new element(b);
				count++;
				return;
			}
			if (b>=i->a)
			{
				if (i->a==b) return;
				else
				{
					while (!(i->next==NULL)&&(b>=i->next->a))
					i=i->next;
					element*temp=new element(b);
					temp->next=i->next;
					i->next=temp;
					count++;
					return;
				}
			}
			else
			{
				element*temp=new element(b);
				temp->next=e;
				e=temp;
				return;
			}
		}
		set*set::operator && (const set B)
		{
			set C;
			element*ia=this->e;
			element*ib=B.e;
			while (ia!=NULL)
			{
				while (ib!=NULL)
				{
					if(ia->a==ib->a)
						{C.add(ia->a);
					ia=ia->next; }
					else 
					{
						if (ia->a>ib->a)
							ib=ib->next;
						else
							ia=ia->next;
					}
				}
			}
		}
};
и еще необходимо написать объединение данных множеств!
0
Нать
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 5
09.11.2011, 18:24  [ТС] #7
Программа на множества: пересечение, объединение,дополнение..не могу найти и исправить ошибки.
Код
#include <conio.h>
#include <stdio.h>
# include <iostream>
using namespace std;
class set
{
class element
{
public:
	const int a;
	element *next;
	element(int _a):a(_a), next(NULL) { }
} *e;

int count;
public:
	set():e(NULL), count(0) { }
	~set()
	{
		element *temp;
		while (e != NULL) 
		{
			temp = e;
			e = e->next;
			delete temp;
		}
		count = 0;
	}

void set::add(int b)
{ 
	element*i=e;
	if(!i)
	{
		i=new element(b);
		count++;
		return;
	}
	if (b>=i->a)
	{
		if (i->a==b) return;
		else
		{
			while (!(i->next==NULL)&&(b>=i->next->a))
				i=i->next;
			element*temp=new element(b);
			temp->next=i->next;
			i->next=temp;
			count++;
			return;
		}
	}
	else
	{
		element*temp=new element(b);
		temp->next=e;
		e=temp;
		return;
	}
}
void draw()
{
	element *temp=e;
	while(e!=NULL)
	{
		cout<<e->a;
		e=e->next;
	}
	e=temp;
	cout<<"колличество:"<<count;
}
void set::del(int a)//удаление
{
	element * temp = new element (a);
	element  * t = new element  (a);
	t=e;//доп.переменную
	temp=e->next;
	if (e->a==a) {e=e->next; return;}//по всему списку идем и удаляем
	while (temp)
	{
		if (temp->a==a)
		{
			t->next=temp->next;
			delete temp;
			return;
		}
		temp=temp->next;
		t=t->next;
	}
}


set*set::operator && (const set B)
{
	set C;
	element*ia=this->e;
	element*ib=B.e;
	while (ia!=NULL)
	{
		while (ib!=NULL)
		{
			if(ia->a==ib->a)
			{
				C.add(ia->a);
				ia=ia->next;
			}
			else 
			{
				if (ia->a>ib->a)
					ib=ib->next;
				else

					ia=ia->next;
			}
		}
	}
}
set*set::operator || (const set B)
{
	set D;
	element*ia=this->e;
	element*ib=B.e;
	while (ia!=NULL)
	{
		while (ib!=NULL)
		{
			if(ia->a==ib->a)
			{
				D.add(ia->a);
				ia=ia->next; 
			}
			else 
				ia=ia->next;

		}
	}
}
set * operator / (const set B) 
{
	element*ia=this->e;
	element*ib=B.e;
	while (ia!=NULL)
	{\
	while (ib!=NULL)
	{
		if(ia->a==ib->a)
			while (e)
			{
				this->del.set(e->a);
				e=e->next;
			}
	}
	}
}
};
void main()
{
	setlocale(LC_ALL, "Russian");
	set A,B,C;
	int a;
	a=1;
	cout<<"введите первое множество"<<"\n";
	while (a)
	{ 
		cin>>a;
		A.add(a);
	}
	a=1;
	cout<<"введите второе множество"<<"\n"; 
	while(a)
	{
		cin>>a;
		B.add(a);
	}
	cout<<"\n-----------------\n";
	A.draw();
	cout<<"\n-----------------\n";
	B.draw();
	set *C=A&&B;
	cout<<"объединение(&&)";
	C.draw();
	set *C=A||B;
	cout<<"пересечение(||)";
	C.draw();
	set *C=A/B;
	cout<<"дополнение(/)";
	C.draw();
	getch();
}
0
09.11.2011, 18:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2011, 18:24
Привет! Вот еще темы с ответами:

классы/дочерние классы/методы - C++
помогите пожалуйста! надо что выводились только учебеники. чтоб былo через GetTip. h файл class Book { protected: char...

Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур. - C++
Здраствуйте.Помогите с практичкой мое задание 4.3. Строка таблицы данных содержит следующую информацию о владельцах авто: ф.и.о....

классы - C++
Нужно написать программу с помощью класса Пожалуйста нужна ваша помощь

Классы - C++
Только недавно начал разбираться с классами. Тут же появилась проблема с заданием. Реализовать класс TClass1, содержащий в качестве...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.