Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 75

Разработать класс «Очередь»

21.03.2013, 19:51. Показов 2190. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста с задачей. Разработать класс «Очередь» на основе массива с полной системой функций. Используя очередь как временную структуру, решить прикладную задачу. В строке текста выполнить удаление из текста данных, которые заключены в скобки. Не знаю как решить. Надо сделать на форме.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
ref class My_Queue
{
static array <int> ^A = gcnew array <int> (10);
// 1. Ограниченный размер - Resize для А
int head, tail;
public:
    My_Queue(void)
    {
       head=tail=0; // Очередь пуста.
    }
    bool Is_Empty()
    {
       return head==tail;
    }
bool Is_Full()
    {  
      return head==new_ind(tail);
//    return abs(tail-head)==1; // в начале head<tail, в кольце  head>tail
    }
// Поставить в конец
void Pop(int a)         // 3. Должны быть логическими
{                       // возвращать свидетельство операции.
if (!Is_Full())
   A[tail++]=a;
else
return ;    // Логики нет.
}
int Push(void)          //  Вернуть значение через параметры.
{
if (!Is_Empty())
   return A[head++];
else
return -1;  // Логики нет - такое, которого нет в данных стека.
}
int new_ind(int old_head)   // head
{
if (old_head<8)
   return old_head+1;
else 
   return 0;
}
};
И что на форме в кнопке прописать и что в классе очередь дописать надо, буду очень признателен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2013, 19:51
Ответы с готовыми решениями:

Разработать класс PriorityQueue - очередь с приоритетами
Прошу помочь с задачей на языке С#.Работаю в Visual Studio2017 . Консольное приложение С# Разработать класс PriorityQueue -...

Разработать класс "Очередь"
Перепишите мой код с C# на C++, пожалуйста using System; using System.Collections.Generic; namespace Queue { class MyQueue ...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... Разработать абстрактный класс класс...

10
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.03.2013, 18:15
Михаил94, то что я предлагаю, нужно доработать. Классы можно реализовать и на cli::array, пример такого символьного массива, - в форме. Такой сам удалится. Можно дописать конструктор с аргументом String^ , добавить обработку исключений и пр. Сам код просто заготовка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//не уверен, что понял Вше задание, но если что не так - переделайте)
//Файлы очереди
//-------------------------------------
//My_QueuClass.h
using namespace System;
using namespace System::Windows::Forms;
ref class My_QueuClass{
wchar_t *q; 
int sloc, rloc;
int length;
public:
My_QueuClass(int size);
//My_QueuClass(My_QueuClass^ orig); //раскоментируйте если потребуется
~My_QueuClass(){delete []q;}
void qstore(wchar_t i);
wchar_t qretrieve();
};
//----------------------------
//My_QueuClass.Cpp
//----------------------------
#include "stdafx.h"
#include "My_QueuClass.h"
My_QueuClass::My_QueuClass(int size){
size++;
q=new wchar_t[size];
if(!q){
MessageBox::Show("Impossible to create the queu!");
Application::Exit();
}else{
length=size;
sloc=rloc=0;
}
}
/*этот конструктор не пригодился, если что - работает так: My_QueuClass^ copyObj = gcnew My_QueuClass(originObj);
My_QueuClass::My_QueuClass(My_QueuClass^ orig){
q=new wchar_t[orig->length];
if(!q){
MessageBox::Show("Impossible to create the copy of the queu!");
Application::Exit();
}else{
length=orig->length;
 
for(int i=0; i<length; i++)q[i]=orig->q[i];
sloc=orig->sloc;
rloc=orig->rloc;
    }
}
*/
void My_QueuClass::qstore(wchar_t i){
    if(sloc+1 == length){
MessageBox::Show("There is no math room in queu!");
Application::Exit();
    }
sloc++;
q[sloc]=i;
}
wchar_t My_QueuClass::qretrieve(){
    if(sloc==rloc){
MessageBox::Show("The queu is empty!");
return L'\0';
    }
rloc++;
return q[rloc];
}
//-------------------------------------------------------------------------
//хэдер-файл формы
//Form1.h
#pragma once
#include "My_QueuClass.h"
//***************************определение формы********************************
//нужна кнопка button1 и событие button1_Click для неё, а также richTextBox1 в 
//который вводится строка со скобкам и туда же выводится результат
//****************************************************************************
#pragma endregion
 
//--------------------------------------------------------------------
bool checkPairs(String^ inStr,wchar_t frst, wchar_t scnd){//проверка на соответствие порядка и количества скобок
int f;
for(int i=0; i<inStr->Length; i++){
if(inStr[i]==frst) f++;
if(inStr[i]==scnd) f--;
if(f<0)break;
}
if(f==0)return true;
return false;
}
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
String^ sorceStr=this->richTextBox1->Text;
if(checkPairs(sorceStr, '(',')')){
if(sorceStr!=""){
My_QueuClass^ quOrigin=gcnew My_QueuClass(sorceStr->Length);
for(int i=0; i<sorceStr->Length; ++i)quOrigin->qstore(sorceStr[i]);
My_QueuClass^ quResult=gcnew My_QueuClass(sorceStr->Length);
int parencesCount=0;
int resultCount=0;
wchar_t sumb;
for(int i=0; i<sorceStr->Length; ++i){
sumb=quOrigin->qretrieve();
if(sumb=='(')parencesCount++;
if(sumb==')')parencesCount--;
if(parencesCount==0&&sumb!=')'){
    quResult->qstore(sumb);
resultCount++;
}
}
this->richTextBox1->Text+="\n";
array<wchar_t>^ dlyaConstrSroki=gcnew array<wchar_t>(resultCount);
for(int i=0; i<resultCount; ++i)
dlyaConstrSroki[i]=quResult->qretrieve();
String^ resultStr=gcnew String(dlyaConstrSroki);
this->richTextBox1->Text+=resultStr;
}
}else{
MessageBox::Show(L"Problem with a number or sequence of sumbols \"(\" and \")\"\n"+
                 "Check that the number of \"(\" is equal the number of \")\", \nIf it is:\n"+
                 "check that the every sumbol \")\" has one sumbol \"(\" before it!");
}
         }
//-----------------------------------------------
1
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 75
23.03.2013, 18:40  [ТС]
Спасибо за помощь

Добавлено через 20 минут
#pragma once
using namespace System;
#include <math.h>
ref class My_Stack
{
static array <int> ^A = gcnew array <int> (10);
// 1. Ограниченный размер - Resize для А
int top;
public:
My_Stack(void)
{
top=0;
}
bool Is_Empty()
{
return top==0;
}
bool Is_Full()
{
return top==9; // 2. Размер-должен быть переменной.
}
// Положить на стек.
void Pop(int a) // 3. Должны быть логическими
{ // возвращать свидетельство операции.
if (!Is_Full())
A[top++]=a;
else
return ; // Логики нет.
}
// Извлечь из стека.
int Push(void) // Вернуть значение через параметры.
{
if (!Is_Empty())
return A[--top];
else
return -1; // Логики нет - такое, которого нет в данных стека.
}
}; // Типа все, с погрешностями.

ref class My_Queue
{
array <String^> ^A ;
// 1. Ограниченный размер - Resize для А

public: int head, tail;
int n;
public:
My_Queue(void)
{
head = 0;
tail = 0;
n = 200;
A = gcnew array <String^> (n);
}
My_Queue(int N)
{
head = 0;
tail = 0;
n = N;
A = gcnew array <String^> (n);
}
bool Is_Empty()
{
return head == tail;
}

bool Is_Full()
{
return head == new_ind(tail);
//return abs(tail-head)==1; // в начале head<tail, в кольце head>tail
}

// Поставить в конец
void Pop(String^ a) // 3. Должны быть логическими
{ // возвращать свидетельство операции.
if (!Is_Full())
A[tail++]=a;
else
return ; // Логики нет.
}
String^ Push(void) // Вернуть значение через параметры.
{
if (!Is_Empty())
return A[head++];
//else
//return -1; // Логики нет - такое, которого нет в данных стека.
}
int new_ind(int old) // head
{
int y;
if (old < n-2)
{
y = old+1;
return y;
}
else
return 0;
}

String ^ operator [] (int a)
{
return this->A[a];
}

property int T
{
int get()
{
return tail;
}
void set(int X)
{
tail = X;
}
};
};



ref class My_Set
{
static array <int> ^A = gcnew array <int> (10);
int count;
public:
My_Set(void)
{
count=0;
}
bool Is_Empty()
{
return count==0;
}
bool Is_Full()
{
return count==9; // 2. Размер-должен быть переменной.
}
bool Add(int a)
{
if (!Is_Full())
{
A[count++]=a;
return true;
}
else
return false;
}
// Перегрузить операцию +, добавление во множество.
My_Set ^ operator+(int a)
{
this->A[count++]=a;
return this;
}
};
Скажите в чём моя ошибка?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.03.2013, 18:45
Михаил94, прежде всего в том, что не копируете в пост сообщение компилятора. Проверять сложнее, чем написать сначала. Покажите, на что ругается.
0
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 75
23.03.2013, 18:46  [ТС]
return head == new_ind(tail); на эту строчку
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.03.2013, 19:05
Цитата Сообщение от Михаил94 Посмотреть сообщение
bool Is_Full()
{
return head = = new_ind(tail);//одинарное =
//return abs(tail-head)==1; // в начале head<tail, в кольце head>tail
}
не лучше ли:
C++
1
2
3
4
5
6
7
8
9
bool isGood=true;
try{
 head = new_ind(tail);
}
catch(Exception^ e){
MessageBox::Show(e);
isGood=false;
}
return isGood;
Не уверен что nullptr приводится к false автоматически, можете написать еще так
if( head) //тра-ля-ля
ps кстати: head == new_ind(tail);//вообще неправильно, нужно сначала выделить...
не бойтесь писать больше строк.
0
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 75
23.03.2013, 19:18  [ТС]
Это какой язык?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.03.2013, 20:35
Цитата Сообщение от Михаил94 Посмотреть сообщение
Это какой язык?

Как говорят у нас в Одессе: - "А какой Вам надо?"
Исходя из этого:
Цитата Сообщение от Михаил94 Посмотреть сообщение
Надо сделать на форме.
и того, что раздел С++/NET
вывод может быть о том, что С++/clr -> WFA, а что Вы имеете ввиду?
0
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 75
23.03.2013, 21:07  [ТС]
С++, просто у нас не используются catch, try
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.03.2013, 22:16
Цитата Сообщение от Михаил94 Посмотреть сообщение
С++, просто у нас не используются catch, try
Почему не используются? Не учили ещё? Тогда проверьте указатель, после выделения но используя прямое сравнение с nullPtr:
C++
1
2
3
4
5
6
7
8
bool isGood=true;
 
 head = new_ind(tail);
if(head==nullptr){
//MessageBox::Show(e);//может и не надо сообщения
isGood=false;
}
return isGood;
0
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 75
28.03.2013, 18:05  [ТС]
Скажите что неправильного в индексации строки происходит.

int y=0, a, i = 0;
String ^ str, ^S;
S = gcnew String ("");
str = gcnew String(textBox1->Text);
if(str[i] != '(' && y == 0)
{
Q->Pop(str[i].ToString());
this->dataGridView2->Rows->Add(str[i].ToString());
i++;
}
else if(str[i] == '(' && y == 0 )
{
y = 1;
i++;
}
else if(str[i] != '(' && y == 1) i++;

for(int k=0; k < Q->T; k++)
S = S + Q[i];
//
}
Надо чтобы был процесс сканирования массива

Добавлено через 5 минут
Скажите что неправильного в индексации строки происходит.

int y=0, a, i = 0;
String ^ str, ^S;
S = gcnew String ("");
str = gcnew String(textBox1->Text);
if(str[i] != '(' && y == 0)
{
Q->Pop(str[i].ToString());
this->dataGridView2->Rows->Add(str[i].ToString());
i++;
}
else if(str[i] == '(' && y == 0 )
{
y = 1;
i++;
}
else if(str[i] != '(' && y == 1) i++;

for(int k=0; k < Q->T; k++)
S = S + Q[i];
//
}
Процесс пошел, но без сканирования массива. Как исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2013, 18:05
Помогаю со студенческими работами здесь

Создайте класс, в котором есть ostream& operator<<. Класс должен содержать очередь с приоритетом
Создайте класс, в котором есть ostream&amp; operator&lt;&lt;. Класс должен содержать очередь с приоритетом. Создайте генератор — заполнитель очереди...

Разработать тип данных очередь
Разработать тип данных очередь (struct Queue) динамически растущий для хранения символьных значений. Структура данных очереди хранит...

Создать класс СПИСОК целых чисел. Разработать класс СТЕК
&quot;Создать класс СПИСОК целых чисел. Разработать класс СТЕК, который вмещает объект класса СПИСОК. Определить необходимые конструкторы,...

Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты
Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты.

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru