Страница 1 из 1
Подкорректируйте пожалуйста мои наработки / C++ Builder
Добавлено: 29 апр 2014, 15:56
Fanta_MaCka
Код: Выделить всё
//---------------------------------------------------------------------------
#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, заполнить его случайными числами. Создать два стека, в один занести все четные, в другой – все нечетные числа. Напечатать содержимое обоих стеков (описав в стеке вспомогательную функцию для чтения элементов стека без их уничтожения).
Re: Подкорректируйте пожалуйста мои наработки / C++ Builder
Добавлено: 29 апр 2014, 18:16
Romeo
Класс Stack уже есть, и, судя по всему, рабочий. Создание динамического массива тоже не должно вызывать проблем, если предоставленный код написан тобой. В чём именно сложность реализации задания, собственно? Проверка на чётность? Она делается так:
Re: Подкорректируйте пожалуйста мои наработки / C++ Builder
Добавлено: 29 апр 2014, 18:28
Fanta_MaCka
Создать динамический массив размерности n, заполнить его случайными числами. Это я сделала
Создать два стека, в один занести все четные, в другой – все нечетные числа. У меня создан 1 стек, а вот пример с двумя...куда это вставить? и еще нужно будет проводить изменения в кнопках я понимаю примерно какие, но не могу сделать
Код: Выделить всё
Stack one(100), two(100);
for (int i=1; i<StringGrid1->ColCount; i++)
{
if(StrToInt(StringGrid1->Cells[i][1]) % 2 == 0)
{
one.push(StrToInt(StringGrid1->Cells[i][1]));
} else
two.push(StrToInt(StringGrid1->Cells[i][1]));
}
Напечатать содержимое обоих стеков (описав в стеке вспомогательную функцию для чтения элементов стека без их уничтожения). наверное печатать в лейбл...вообще не представляю как все сделать вообщем(
Re: Подкорректируйте пожалуйста мои наработки / C++ Builder
Добавлено: 29 апр 2014, 20:21
Romeo
Ну с изменениями "в кнопках" я точно не помогу, так как Билдер сам сгенерирует код, когда ты в редакторе ресурсов подправишь форму и назначишь обработчик события.
А по поводу печати, я думаю, что позразумевалось, что задание будет оформлено не в качестве оконного приложения, а в качестве консольного. В случае консольного приложения, печать можно было бы реализовать через обычный printf или std::cout.
Re: Подкорректируйте пожалуйста мои наработки / C++ Builder
Добавлено: 29 апр 2014, 20:38
Fanta_MaCka
Код: Выделить всё
//---------------------------------------------------------------------------
#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());
}
//----------------------------------------------------------
вот этот код должен работать но нет( не сортирует(*
и не выводит стэки
Re: Подкорректируйте пожалуйста мои наработки / C++ Builder
Добавлено: 30 апр 2014, 14:38
Romeo
Это тот же самый код, что и в первом сообщении. Я не вижу отличия. Как может неисправленный код работать? Мы ведь вроде договорились, что нужно сделать ещё один стек, а так же что нужно проверять чётность/нечётность с помощью остатка от деления на 2.