//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int n; // Глобальная переменная
class Stack
{
protected:
int *stck; // Динамический массив
int tos; // Текущий номер элемента
int length;// Размер стека = размер динамического массива
public:
Stack(int size); // Конструктор
~Stack(){delete [] stck;} //Деструктор
void push(int item); // Поместить в стек
int pop(); //Извлечь из стека
int GetLen(){return length;} // Получить значение размера стека
int GetCurrent() {return tos;} // Получить текущую позицию в стеке
};
Stack a(10); // Создание объекта класса стека размером 10 элементов
// Конструктор стека
Stack :: Stack(int size)
{
stck = new int [size]; // Создание динамического массива
if(!stck) // Если не выделена память под массив
{
ShowMessage("Unable to create STACK");
return;
}
length=size;
tos=0; // Текущая позиция в стеке при его создании равна 0
}
// Помещение объека в стек
void Stack:: push(int item)
{
if(tos==length) // Если текущий номер равен длине стеке
{
ShowMessage("Стек полон");
return;
}
stck[tos] = item; // Поместить значение в стек
tos++; // Инкремент номера
}
int Stack :: pop() // Извлечение объекта из стека
{
if(tos==0) // Если текущая позиция =0, стек пуст
{
ShowMessage("STACK is empty");
return 0;
}
tos--;
return stck[tos]; // Извлечь последнее значение
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int chislo=Edit1->Text.ToIntDef(5)+1;
AnsiString s;
int *prov1;
prov1 = new int [100];
StringGrid1->ColCount=chislo;
for(int i=0; i<chislo; i++){
prov1[i] = random(200)-100;
StringGrid1->Cells[i+1][1]=prov1[i];
}
if(!prov1[0]=='\0'){
delete []prov1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int num=StrToInt(Edit1->Text);
a.push(num); // Поместить в стек
lPush->Caption="Введенный элемент "+ IntToStr(num);
lCurrent->Caption="Текущий номер = "+ IntToStr(a.GetCurrent());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int num=a.pop();// Извлечь число из стека
lPop->Caption="Считанный элемент "+IntToStr(num);
lCurrent->Caption="Текущий номер = "+ IntToStr(a.GetCurrent());
}
//---------------------------------------------------------------------------
Стек. Создать динамический массив размерности n, заполнить его случайными числами. Создать два стека, в один занести все четные, в другой – все нечетные числа. Напечатать содержимое обоих стеков (описав в стеке вспомогательную функцию для чтения элементов стека без их уничтожения).
Класс Stack уже есть, и, судя по всему, рабочий. Создание динамического массива тоже не должно вызывать проблем, если предоставленный код написан тобой. В чём именно сложность реализации задания, собственно? Проверка на чётность? Она делается так:
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Создать динамический массив размерности n, заполнить его случайными числами. Это я сделала
Создать два стека, в один занести все четные, в другой – все нечетные числа. У меня создан 1 стек, а вот пример с двумя...куда это вставить? и еще нужно будет проводить изменения в кнопках я понимаю примерно какие, но не могу сделать
Напечатать содержимое обоих стеков (описав в стеке вспомогательную функцию для чтения элементов стека без их уничтожения). наверное печатать в лейбл...вообще не представляю как все сделать вообщем(
Ну с изменениями "в кнопках" я точно не помогу, так как Билдер сам сгенерирует код, когда ты в редакторе ресурсов подправишь форму и назначишь обработчик события.
А по поводу печати, я думаю, что позразумевалось, что задание будет оформлено не в качестве оконного приложения, а в качестве консольного. В случае консольного приложения, печать можно было бы реализовать через обычный printf или std::cout.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int n; // Глобальная переменная
class Stack
{
protected:
int *stck; // Динамический массив
int tos; // Текущий номер элемента
int length;// Размер стека = размер динамического массива
public:
Stack(int size); // Конструктор
~Stack(){delete [] stck;} //Деструктор
void push(int item); // Поместить в стек
int pop(); //Извлечь из стека
int GetLen(){return length;} // Получить значение размера стека
int GetCurrent() {return tos;} // Получить текущую позицию в стеке
};
Stack a(10); // Создание объекта класса стека размером 10 элементов
// Конструктор стека
Stack :: Stack(int size)
{
stck = new int [size]; // Создание динамического массива
if(!stck) // Если не выделена память под массив
{
ShowMessage("Unable to create STACK");
return;
}
length=size;
tos=0; // Текущая позиция в стеке при его создании равна 0
}
// Помещение объека в стек
void Stack:: push(int item)
{
if(tos==length) // Если текущий номер равен длине стеке
{
ShowMessage("Стек полон");
return;
}
stck[tos] = item; // Поместить значение в стек
tos++; // Инкремент номера
}
int Stack :: pop() // Извлечение объекта из стека
{
if(tos==0) // Если текущая позиция =0, стек пуст
{
ShowMessage("STACK is empty");
return 0;
}
tos--;
return stck[tos]; // Извлечь последнее значение
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int chislo=Edit1->Text.ToIntDef(5)+1;
AnsiString s;
int *prov1;
prov1 = new int [100];
StringGrid1->ColCount=chislo;
for(int i=0; i<chislo; i++){
prov1[i] = random(200)-100;
StringGrid1->Cells[i+1][1]=prov1[i];
}
if(!prov1[0]=='\0'){
delete []prov1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int num=StrToInt(Edit1->Text);
a.push(num); // Поместить в стек
lPush->Caption="Введенный элемент "+ IntToStr(num);
lCurrent->Caption="Текущий номер = "+ IntToStr(a.GetCurrent());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int num=a.pop();// Извлечь число из стека
lPop->Caption="Считанный элемент "+IntToStr(num);
lCurrent->Caption="Текущий номер = "+ IntToStr(a.GetCurrent());
}
//----------------------------------------------------------
вот этот код должен работать но нет( не сортирует(*
и не выводит стэки
Это тот же самый код, что и в первом сообщении. Я не вижу отличия. Как может неисправленный код работать? Мы ведь вроде договорились, что нужно сделать ещё один стек, а так же что нужно проверять чётность/нечётность с помощью остатка от деления на 2.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.