Форум программистов, компьютерный форум CyberForum.ru

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

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

Классы - C++

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

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

C++ классы
C++ Классы на с++
C++ Классы на с++
Классы C++
C++ Классы в С++
классы C++
C++ Классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
02.11.2011, 11:35     Классы #2
с использованием property
Ну нету в С++ свойств. Нету.
Нать
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 5
02.11.2011, 11:43  [ТС]     Классы #3
а не могли бы вы написать примерный код этой программы??
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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/32d87e...3b0c19c4d3b573
Нать
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
Регистрация: 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;
					}
				}
			}
		}
};
и еще необходимо написать объединение данных множеств!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2011, 18:24     Классы
Еще ссылки по теме:

C++ Классы в c++
C++ Классы
Классы C++
Классы С++ C++

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

Или воспользуйтесь поиском по форуму:
Нать
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();
}
Yandex
Объявления
09.11.2011, 18:24     Классы
Ответ Создать тему
Опции темы

Текущее время: 02:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru