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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2009, 20:11   #11
DOJ
Пользователь
 
Регистрация: 11.06.2009
Сообщений: 19
По умолчанию

Огромное спасибо за объяснение, и пояснение моих ошибок.
DOJ вне форума Ответить с цитированием
Старый 22.10.2009, 17:55   #12
DOJ
Пользователь
 
Регистрация: 11.06.2009
Сообщений: 19
По умолчанию

Внесла исправление, но к сожалению вылетает. Не могли бы подсказать мне, дорогие форумчане, в чем моя ошибка, чего я не учла?

Код:
#include<Stack.h>
#include<iostream.h>
#include<cstdlib.h>
using namespace std;

const int max_size=15;
class Stack
{
public:
int var;//значение элементов стека
int top;//вершина стека, счетчик
int max_stack[max_size];//массив
void push();//добавление элементов
int pop();//удаление
};

void Stack::push()
{
  if (top==0)
  {
   while(!top==max_size)
   max_stack[top++]=var;
   }
   }
   int Stack::pop()
   {
   if (!top==0){
   return max_stack[top--];
   }
   }
   void main()
   {
   Stack s; //создание объекта класса
   cout<<"Введите элементы стека"<<endl;
   cin>>s.max_stack[max_size];
   s.push();
   s.pop();
   }
DOJ вне форума Ответить с цитированием
Старый 22.10.2009, 19:17   #13
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Мне вот этот кусок не понятен:
Код:
!top==max_size
Так вообще можно?
Если тут проверка пока топ не равно макс_сайз, я бы написал так:
Код:
top!=max_size
psycho-coder вне форума Ответить с цитированием
Старый 22.10.2009, 19:29   #14
DOJ
Пользователь
 
Регистрация: 11.06.2009
Сообщений: 19
По умолчанию

Спасибо конечно за ваше замечание. Но меняется ли от этого смысл!? Может конечно я не права.
DOJ вне форума Ответить с цитированием
Старый 22.10.2009, 19:44   #15
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от DOJ Посмотреть сообщение
Спасибо конечно за ваше замечание. Но меняется ли от этого смысл!? Может конечно я не права.
Я точно не знаю, поэтому и спросил.
Вот, что у меня получилось:
Код:
//#include<Stack.h> // я хз зачем это
#include<iostream>
//#include<cstdlib.h> // я хз зачем это
using namespace std;

const int max_size = 15;
class Stack
{
public:
	int var;//значение элементов стека
	int top;//вершина стека, счетчик
	int max_stack[max_size];//массив
	Stack(); // конструктор класса
	void push();//добавление элементов
	int pop();//удаление
};
Stack::Stack()
{
	top = 0; // инициализируем переменные
	var = 0; // для корректной работы
}

void Stack::push()
{
	if (top <= max_size) 
		max_stack[top++] = var; // заносим в стек
}
int Stack::pop()
{
	if (top > 0)
		return max_stack[--top]; // вытаскиваем из стека
}
void main()
{
	Stack s; //создание объекта класса
	cout << "Введите элементы стека" << endl;
	cin >> s.var;
	s.push();
	cout << s.pop() << endl; // выводим последний элемент.
}
P.S. у меня VS 2005
psycho-coder вне форума Ответить с цитированием
Старый 22.10.2009, 19:56   #16
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Судя по всему, смысл и впрямь меняется. Приоритет оператора ! выше, нежели ==. Так что
Код:
!top==max_size
имеет смысл
Код:
(!top)==max_size
Все-таки это немного разные вещи. Можно, конечно, явно расставить скобки, но зачем использовать два оператора, когда можно все необходимое выразить одним? Во-первых, будет четкое и непосредственное выражение мысли, во-вторых, это эффективнее (вот на такую вот фитюлечку, но тем не менее!)
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 22.10.2009, 19:57   #17
DOJ
Пользователь
 
Регистрация: 11.06.2009
Сообщений: 19
По умолчанию

Спасибо за некоторые уточнения моего кода и за комментарий конечно. Пользуюсь Builder 2003. Но откомпилила и все равно вылетает.
Попробовала добавить:

system("PAUSE");
return;
ну пока тоже не особо. выводит первый элемент и выходит из программы. Только не судите строго я только учусь.

Последний раз редактировалось DOJ; 22.10.2009 в 20:00.
DOJ вне форума Ответить с цитированием
Старый 22.10.2009, 20:01   #18
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Судя по всему, смысл и впрямь меняется. Приоритет оператора ! выше, нежели ==. Так что
Код:
!top==max_size
имеет смысл
Код:
(!top)==max_size
Вот... Объясните мне пожалуйста, что происходит в этих двух случаях. Спс.

Цитата:
Спасибо за некоторые уточнения моего кода и за комментарий конечно. Пользуюсь Builder 2003. Но откомпилила и все равно вылетает.
Попробовала добавить:

system("PAUSE");
return;
ну пока тоже не особо. выводит первый элемент и выходит из программы.
Какую ошибку выдает и где?
psycho-coder вне форума Ответить с цитированием
Старый 22.10.2009, 20:05   #19
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Вот... Объясните мне пожалуйста, что происходит в этих двух случаях. Спс.
!top == max_size
top будет приведён к логическому типу и над ним будет произведена операция НЕ. Если top 0, то он станет 1, если top не 0, то станет 0 и уже это значение будет сравниваться с max_size
netrino вне форума Ответить с цитированием
Старый 22.10.2009, 20:08   #20
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от DOJ Посмотреть сообщение
Спасибо за некоторые уточнения моего кода и за комментарий конечно. Пользуюсь Builder 2003. Но откомпилила и все равно вылетает.
Попробовала добавить:

system("PAUSE");
return;
ну пока тоже не особо. выводит первый элемент и выходит из программы. Только не судите строго я только учусь.
Так ведь он и должен только один элемент выводить, в коде именно это и записано )
Так можно будет ввести несколько элементов и все они потом будут выведены:
Код:
void main()
{
	Stack s; //создание объекта класса
	cout << "Введите элементы стека" << endl;
	cin >> s.var;
	s.push();
	cin >> s.var;
	s.push();
	cin >> s.var;
	s.push();
	while(s.top)
		cout << s.pop() << endl; // выводим последний элемент.
}
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация стека в виде массива DOJ Общие вопросы C/C++ 0 29.09.2009 18:37
Реализация Стека MjRed Общие вопросы C/C++ 3 13.05.2009 12:18