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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2012, 11:55   #1
buba3230
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 22
Вопрос стек

помогите найти ошибку... ну вот ума не приложу че не работает....

Код:
#include <iostream.h>
#include <string.h>
#include <conio.h>
//using namespace std;


const max_size=15;
class stack
{
	int head;   //golova steka
	int s[max_size];  //masiv dlya soxraneniya steka
public:
   stack(){head=0;}    //konstruktor bez parametrov
   void push(int var);   //dodavanya v stek
   int pop();         //return stek

};
/******************************************/


/****** obrobka metodu PUSH******/
void stack::push(int var)
{head++;           //perexodim s golovi dalwe
s[head]=var;       //dobavlenie elementa na kotoriy ukazivaet golova

}
/*******************************/


/******obrobka metodu POP******/
int stack::pop()
{
 int var= s[head]; //poluchaem element s golovi i umenwaem ee
 head--;
 return var;
}
/*******************************************************/




void main()

{
stack ob;
int ch;
clrscr();
for(int i=0;i<max_size;i++)
ob.push(i);
cout<<"\n Steck : ",ob.pop();

}
buba3230 вне форума Ответить с цитированием
Старый 21.11.2012, 12:20   #2
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

держи
Код:
#include <iostream>
#define sizeOfStack 3
using namespace std;

class Stack{
private:
	int head;
	int DATA[sizeOfStack];
public:
	Stack();
	void push(int);
	int pop();
};

Stack::Stack(){ //конструктор
	head = -1; 
}

void Stack::push(int tmp){
	DATA[++head]=tmp;
}

int Stack::pop(){
	if(head >= 0)
		return DATA[head--];
	else
		exit(1);
}

int main(){
	Stack newStack;
	newStack.push(4);
	newStack.push(3);
	newStack.push(10);
	cout << newStack.pop() << endl;
	cout << newStack.pop() << endl;
	cout << newStack.pop() << endl;
	return EXIT_SUCCESS;
}
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 21.11.2012, 13:14   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

ArmanPrestige, вы классно ищете ошибки.

buba3230, стек изначально пуст и head = 0, а значит head указывает не на вершину стека, а за вершину, на первый свободный элемент. Первый элемент стека у Вас лежит в DATA[1], а не в DATA[0], и в main последний push пишет элемент за границу массива, отсюда ошибка.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 21.11.2012, 13:51   #4
buba3230
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 22
По умолчанию

всеравно ниче не выводит (((

Код:
#include <iostream.h>
#include <string.h>
#include<stdlib.h>
#include <conio.h>
//using namespace std;


const max_size=15;
class stack
{
	int head;   //golova steka
	int s[max_size];  //masiv dlya soxraneniya steka
public:
   stack(){head=-1;}    //konstruktor bez parametrov
   void push(int var);   //dodavanya v stek
   int pop();         //return stek

};
/******************************************/


/****** obrobka metodu PUSH******/
void stack::push(int var)
{head++;           //perexodim s golovi dalwe
s[head]=var;       //dobavlenie elementa na kotoriy ukazivaet golova

}
/*******************************/


/******obrobka metodu POP******/
int stack::pop()
{ if(head>=0)
	return s[head--];
  else
	exit(1);

}

/*******************************************************/




void main()

{
stack ob;
clrscr();
for(int i=0;i<max_size;i++)
ob.push(i);
for(i=0;i<max_size;i++)
cout<<"\n Steck : ",ob.pop();
getch();
}
buba3230 вне форума Ответить с цитированием
Старый 21.11.2012, 13:56   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
cout<<"\n Steck : ",ob.pop();
Провтыкал ты <<. Это должно быть вместо запятой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2012, 14:08   #6
buba3230
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 22
По умолчанию

ОМГ )))) огромное спасибо ))))) я один раз так 4 часа искал ошибку а оказалось не > a >=
))))))))))))))
buba3230 вне форума Ответить с цитированием
Старый 21.11.2012, 14:19   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Внимательнее будь )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек Bizunov Паскаль, Turbo Pascal, PascalABC.NET 1 08.05.2011 15:52
Стек Darknes Общие вопросы C/C++ 2 11.04.2011 23:30
стек spider844360 Паскаль, Turbo Pascal, PascalABC.NET 1 19.09.2010 16:58
Стек в С++ skiffter Помощь студентам 3 26.03.2010 09:57