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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2015, 18:01   #1
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
Сообщение Односвязные списки - C++

Создать класс "Студент" односвязного списка.

А так же в этот класс добавить:

- удаление первого елемента списка;
- удаление элемента списка по одному из параметру;
- сделать метод клонирования списка;
- сделать перегрузку оператора сложения (+) и умножения (*).

Помогите только начали учить.
Андрей Иванов вне форума Ответить с цитированием
Старый 13.10.2015, 18:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Твои попытки увидеть можно?
Хоть что нибудь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2015, 18:19   #3
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Твои попытки увидеть можно?
Хоть что нибудь.
Код:
#include <iostream>
using namespace std;

class student																		
{
	char ima[20];																	
	int ozenka;																	
public:
	student *next;																	

	student(char *i, int o)														
	{
		next = NULL;
		strcpy(ima, i);
		ozenka = o;
	}

	friend ostream& operator << (ostream& stream, student &s)						
	{
		stream << s.ima << s.ozenka;
		return stream;
	}

	friend class Group;																
};

class group																			
{
	Student* head;																	
	Student* tail;																	
	int count;																		
public:
	group()																			
	{
		head = NULL;
		tail = NULL;
		count = 0;
	}
	
	void AddStudent(char *name, int am)												
	{
		Student* tmp = new Student(name, am);

		if (head == NULL)															
		{
			head = tail = tmp;
		}
		else
		{
			tail->next = tmp;
			tail = tmp;
		}

		count++;
	}

	int Size()
	{
		return count;
	}

	void DeleteHead()																
	{
		if (head !=NULL)
		{
			Student* tmp = head;
			head = head->next;
			delete tmp;
			count--;
		}
		else
		{
			tail = head;
		}
	}

	void DeleteStudent_For_Criterion(char *name)
	{
		Student* tmp = new Student(name, am);
		Student *cur = head;

		while (cur != NULL && strcmp(cur->name, after_student) != 0)	
		{
			cur = cur->next;
		}

		if (cur != NULL)
		{
			tmp->next = cur->next;
			cur->next = tmp;
		}
		else
		{
			AddStudent(name, am);
		}

		count--;
	}	
};

Последний раз редактировалось Stilet; 13.10.2015 в 18:35.
Андрей Иванов вне форума Ответить с цитированием
Старый 13.10.2015, 18:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну, внушительно.
Теперь можно и разговор держать.
Итак: Чем сей код не устраивает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2015, 18:40   #5
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну, внушительно.
Теперь можно и разговор держать.
Итак: Чем сей код не устраивает?
1) удаление первого елемента списка - я сделал.
2) удаление элемента списка по одному из параметру - не работает.
3) сделать метод клонирования списка;
сделать перегрузку оператора сложения (+) и умножения (*) - нету.
Андрей Иванов вне форума Ответить с цитированием
Старый 13.10.2015, 19:16   #6
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
По умолчанию

Stilet, так поможете?
Андрей Иванов вне форума Ответить с цитированием
Старый 13.10.2015, 19:18   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
удаление элемента списка по одному из параметру - не работает.
Дык у тебя его и нет )
В общем ты походу скоммуниздил код и не пытался в нем разбираться.
Код:
	void DeleteStudent_For_Criterion(char *name)
	{
		Student* tmp;
		Student *cur = head;

		while (cur != NULL && strcmp(cur->name, after_student) != 0)	
		{
                        tmp=cur;
			cur = cur->next;
		}

		if (cur != NULL && cur!=tmp)
		{
			tmp->next = cur->next;
			delete cur; count--;
		}
	}
Цитата:
сделать метод клонирования списка;
Код:
	group* AttacOfClones()
	{
		group* g=new group();
                Student* i=this->head;
		for(;i;i=i->next)	
		{
                        g->AddStudent(i->name, am);
		}
             return g;
	}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2015, 20:38   #8
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Дык у тебя его и нет )
В общем ты походу скоммуниздил код и не пытался в нем разбираться.
Код:
	void DeleteStudent_For_Criterion(char *name)
	{
		Student* tmp;
		Student *cur = head;

		while (cur != NULL && strcmp(cur->name, after_student) != 0)	
		{
                        tmp=cur;
			cur = cur->next;
		}

		if (cur != NULL && cur!=tmp)
		{
			tmp->next = cur->next;
			delete cur; count--;
		}
	}
Код:
	group* AttacOfClones()
	{
		group* g=new group();
                Student* i=this->head;
		for(;i;i=i->next)	
		{
                        g->AddStudent(i->name, am);
		}
             return g;
	}
А как сделать перегрузку оператора сложения (+) и умножения (*)?
Андрей Иванов вне форума Ответить с цитированием
Старый 13.10.2015, 20:43   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну, внушительно.
И бестолково. Ну,как обычно у новичков. Кода много, толку = 0 или около того.
Андрей Иванов, хотите, приведу Вам отрывки своих кодов? Вот только в какую Ж.. они свяжутся?
//---------------------------------------------------------------------------

Код:
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
//#pragma resource "res.res"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define FNAME "~r.rgn"
TRect Coord;
TRect NewCoord;
//int X0, Y0;
//AnsiString FName;// = "~r.rgn";
//bool LMove = false;

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
randomize();
Coord.Left = 0;
Coord.Top = Screen->Height-32;//735;
Application->OnIdle = IdleLoop;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdleLoop(TObject*, bool &done)
{
done = false;
TPoint cPt;
GetCursorPos(&cPt);
if((cPt.x >= Coord.Left && cPt.y >= Coord.Top)
   && (cPt.x <= Coord.Left + 98 && cPt.y <= Coord.Top + 32))
   {
   NewCoord.Left = random(Screen->Width-196)+98;
   //NewCoord.Top = random(Screen->Height-64)+32;

   HWND hWnd = FindWindow("Shell_TrayWnd", NULL);
   HWND hWndBt = FindWindowEx(hWnd, NULL, "Button", NULL);
   MoveWindow(hWndBt, NewCoord.Left, 0, 98, 32, TRUE);

   Coord.Left = NewCoord.Left;
   //Coord.Top = NewCoord.Top;
//   Label1->Caption = Coord.Left;
//   Label2->Caption = Coord.Top;
   }
}
//---------------------------------------------------------------------------
/*HWND hWnd = FindWindow("Shell_TrayWnd", NULL);
HWND hWndBt = FindWindowEx(hWnd, NULL, "Button", NULL);
MoveWindow(hWndBt, 100, -5, 98, 32, TRUE);*/

/*HWND hWnd = FindWindow("Shell_TrayWnd", NULL);
HWND hWndBt = FindWindowEx(hWnd, NULL, "Button", NULL);
MoveWindow(hWndBt, 0, 0, 98, 32, TRUE); */
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
HWND hWnd = FindWindow("Shell_TrayWnd", NULL);
HWND hWndBt = FindWindowEx(hWnd, NULL, "Button", NULL);
MoveWindow(hWndBt, 0, 0, 98, 32, TRUE);
DeleteFile(FNAME);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClick(TObject *Sender)
{
Close();        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
AnsiString FName = FNAME;
if(Timer1->Tag > 7)Timer1->Tag = 0;
SetWindowLong(Application->Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
TResourceStream *Rgn = new TResourceStream(0,"Reg"+IntToStr(Timer1->Tag),RT_RCDATA);
Rgn->SaveToFile(FName);
FILE *F;
DWORD N;
F = fopen(FName.c_str(),"rb");
fread(&N,sizeof(DWORD),1,F);
LPRGNDATA P = (_RGNDATA *)malloc(N);
fread(P,N,1,F);
fclose(F);
HRGN MR = ExtCreateRegion(NULL,N,P);
free(P);
SetWindowRgn(Handle, MR, true);
Image1->Picture->Bitmap->LoadFromResourceName(0,"Bmp"+IntToStr(Timer1->Tag));
Timer1->Tag++;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
SetWindowLong(Application->Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{
ShellExecute(Handle, "open", "http://www.biz-for.ru/index.php",
NULL,NULL, SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 13.10.2015 в 20:56. Причина: Братва, ошибок здесь нет. Так, для нравоучения.
Smitt&Wesson вне форума Ответить с цитированием
Старый 13.10.2015, 20:46   #10
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
И бестолково. Ну,как обычно у новичков. Кода много, толку = 0 или около того.
Можете помочь новичку написать нормальный код. А конкретнее сделать перегрузку оператора сложения (+) и умножения (*).
Андрей Иванов вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязные списки SsAn Visual C++ 0 15.05.2014 17:09
Односвязные списки в с++ fuzzyduzzy Помощь студентам 8 19.01.2013 00:10
[C] Односвязные списки acmilanfan Помощь студентам 0 17.05.2012 23:22
Односвязные списки. Killspamers Помощь студентам 7 19.03.2012 18:59
Односвязные списки art_stalker Общие вопросы C/C++ 5 21.04.2010 22:49