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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2010, 15:45   #1
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
Радость Реализация класса на С++

Ребят, вообщем-то проблема в следующем... Есть задача - описать класс, который реализует основные операции над стеком... я описал подобный - на Паскале. Может кто нить в С++ перевести? А то ради одного зачета лезть в эти дебри времени нет. Собственно наработки:
Код:
type
  ptr:=^stack;
  stack=record
    val:real;
    pnt:ptr;
var r, l:ptr;

procedure push (x:real;var r:ptr);{включение элемента}
var p: ptr;
begin
new (p);
p^.val:=x;
p^.pnt:=r;
r:=p;
end;

function pop (var r:ptr):real; {Снять с вершины}
var 
p:ptr;
begin
if r:=nill then writeln('... ')
else
begin
p:=r;
pop:=p^.val;
r:=p^.pnt;
dispose (p);
end;
end;

function empty (r:ptr):boolean;{выработка на пустоту}
begin
empty:=r=nill;
end;

procedure clear(var r:ptr);{очистка стека}
var p:pnt;
begin
while p<>nil do
begin
p:=r;
r:=r^.pnt;
dispose(p);
end;
end;
Если кто нить поможет хоть чем - буду очень благодарен
danekne вне форума Ответить с цитированием
Старый 12.01.2010, 17:38   #2
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

Код:
class Node{
public:
			double val;
			Node *prev;
};
class stack{
	Node *node;
	public:
	stack(){
		Node *p = new Node;
		p->val = 0.0;
		p->prev = node;
		node = p;
	}
	stack(double d){
		Node *p = new Node;
		p->val = d;
		p->prev = node;
		node = p;
	}
	void push(double d){
		Node *p = new Node;
		p->val = d;
		p->prev = node;
		node = p;
	}
	double pop(){
		if (node==NULL) cout <<'... ';
		else{
			register double vl = node->val;
			node = node->prev;
			return vl;
		}
	}
	int empty(){
		return (node==NULL);
	}
	void clear(){
		Node *p = node;
		while (p){
			delete p;
			p=p->prev;
		}
	}
};
Namolem вне форума Ответить с цитированием
Старый 12.01.2010, 17:40   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сотрите пост
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.01.2010, 18:16   #4
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

Спасибо большое! Проверим)
danekne вне форума Ответить с цитированием
Старый 12.01.2010, 18:44   #5
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Код:
struct stack
{
	stack *top;
	float val;
};
typedef stack *sptr;

bool empty(const sptr S)
{
	return S == NULL;
}

void push(const float x, sptr &S)
{
	sptr t = new stack;
	t -> top = S;
	t -> val = x;
	S = t;
}

float pop(sptr &S)
{
	if (S == NULL)
	{
		puts("underflow");
		return -1;
	}
	float r = S -> val;
	sptr t = S;
	S = S -> top;
	delete(t);
	return r;
}

void clear(sptr &S)
{
	sptr t;
	while (S)
	{
		t = S -> top;
		delete S;
		S = t;
	}
}

Последний раз редактировалось Alex_FF; 12.01.2010 в 18:50.
Alex_FF вне форума Ответить с цитированием
Старый 14.01.2010, 18:32   #6
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

В итоге:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <memory>
#include <string>
#include <stdexcept>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 class stack{
 class node{
 public:
        int d;
        node *next;
        node (int dat=0){d=dat;next=0;}
 };
 node *_root;
 public:
 stack(){_root=0;}
 ~stack();
 void push(int d);
 int pop();
 bool isempty() const;
 };

   stack::~stack()
{
    while (!isempty()) {
        pop();
    }
}

  void stack::push(int d)
 {
 node *pv=new node (d);
 if (_root==0)
 _root=pv;
 else
 {
 pv->next= _root;
 _root=pv;
 }
 }

 int stack::pop()
 {
 int temp=_root->d;
 node *pv = _root;
 _root=(_root)->next;
 delete pv;
 return temp;
 }

 bool stack::isempty() const {
    return _root == 0;
}

TForm1 *Form1;
 __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
stack L;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//stack L;
L.push(StrToInt(Edit1->Text));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
stack L;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
stack L;
Edit2->Text=IntToStr(L.pop());
}
//---------------------------------------------------------------------------
Система ругается на L.push(StrToInt(Edit1->Text));
Говорит, что не знает, что такое L. Но мне нужно, чтобы при нажатии на кнопку - просто добавлялись данные в стек уже созданный... что делать? Среда - билдер 6.0

Последний раз редактировалось danekne; 14.01.2010 в 19:33.
danekne вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Реализация класса с методом поиска записи по файлу (используя компонент Memo) Dem.IG Общие вопросы Delphi 2 05.11.2009 16:02
Реализация программы Lemo Общие вопросы Delphi 2 30.05.2009 14:31