Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очередь, удалить элементы от... до... 
:(
    Опции темы
Elen123321
Дата 3.5.2012, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.11.2011
Где: Беларусь

Репутация: нет
Всего: нет



определить количество и удалить все элементы, находящиеся между минимальным и максимальным элементами
Задание нужно выполнить в билдере
Вот что я нагородила
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream.h>
#pragma hdrstop

struct Spis {
        int info;
        Spis *next, *prev;
 } *begin, *end, *t, *max, *min;   
//--------------------------------------------------------------------------------------------------------------------
void Create_Spis(Spis**, Spis**, int);
void Add_Spis(int, Spis**, Spis**, int);
void View_Spis(int, Spis*);
void Del_All(Spis**);
int Max_Min(Spis**, Spis**, int, int)

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int i, in, n, kod, kod1, r, kol, j;
char Str[2][10] = {"Begin ", "End "};
while(true){
        cout << "\n\tCreate - 1\n\tAdd - 2\n\tView - 3\n\tSolve - 4\n\tDel - 5\n\tEXIT - 0  :  " ;
        cin >> kod;
                switch(kod) {
                      case 1:
                        if(begin != NULL){
                                cout << "Clear Memory!" << endl;
                                break;
                        }
                        cout << "Begin Info = ";     cin >> in;
                        Create_Spis(&begin, &end, in);
                        cout << "Creation Began = " << begin -> info << endl;
                        break;
                      case 2:
                        cout << "Info = ";        cin >> in;
                        cout << "Add Begin - 0, Add End - 1 :  ";
                        cin >> kod1;
                        Add_Spis(kod1, &begin, &end, in);
                        if(kod1 == 0)
                                t = begin;
                        else    t = end;
                        cout << "Add to " << Str[kod1] << "  " << t -> info << endl;
                        break;
                      case 3:
                        if(!begin){
                                cout << "Stack is empty!" << endl;
                         break;
                 }
                        cout<<"View Begin-0,View End-1:";
            cin >> kod1;
                    if(kod1 == 0) {
                             t = begin;
                             cout <<"-- Begin --" << endl;
                    }
                    else {
                             t = end;
                             cout <<"--- End --" << endl;
                    }
                    View_Spis(kod1, t);
                        break;
                      case 4:
                        if(begin == NULL) {
                                cout << "\tCreate Stack!" << endl;
                                continue;
                        }
                //  Нахождение мин, мах, удаление, подсчет
                        int Max_Min(&begin, &end, in, kol);
                        cout << "\tMax = " << max->info << "\tMin = " << min->info << endl;
                        cout << "\tDelete " << kol << " units ! " << endl;
                        delete max, min;
                        break;
                        case 5:
                        Del_All(&begin);
                        cout <<"Memory Free!"<< endl;
                        break;
                        case 0:  if(begin != NULL)
            Del_All(&begin);
                        return 0;
                }
  }
  return 0;
}
// Создание
void Create_Spis(Spis **b, Spis **e, int in)  {
         t = new Spis;
         t -> info = in;
         t -> next = t -> prev = NULL;
        *b = *e = t;
}
//Добавление
void Add_Spis(int kod, Spis **b, Spis **e, int in)  {
        t = new Spis;
        t -> info = in;
        if(kod == 0){
                t -> prev = NULL;
                t -> next = *b;
                (*b) -> prev = t;
                *b = t;
        }
            else {
                t -> next = NULL;
                t -> prev = *e;
                (*e) -> next = t;
                *e = t;
        }
}
//Просмотр
void View_Spis(int kod, Spis *t)  {
        while(t != NULL) {
                cout << t->info << endl;
                if(kod == 0) t = t->next;
                else  t = t->prev;
        }
}

void Del_All(Spis **p)
{
        Spis *t;
        while( *p != NULL) {
                t = *p;
                *p = (*p) -> next;
                delete t;
        }
}

int Max_Min(Spis **b, Spis **e, int in, int k)    {   
        max = new Spis;
                max -> info = in;
         max -> next = max -> prev = NULL;
        *b = *e = max;
        min = new Spis;
                min -> info = in;
         min -> next = min -> prev = NULL;
        *b = *e = min;
        t = begin;             
        max = begin;
        min = begin;
        while (t != NULL) {
                if(t->info > max->info) {
                        max=t;
                }
                if(t->info < min->info) {
                        min=t;
                }
                t=t->next;
                k = abs(max-min-1);
        }
        while (t != NULL)  {   
                                if(max < min){
                                      if(t->info == max->info){
                                           while(t->info != min->info) {
                                                (t->next)->next;
                                                t=t->next;
                                           }
                                      }
                                }
                                if(min<max){
                                      if(t->info == min->info){
                                           while(t->info != max->info) {
                                                (t->next)->next;
                                                t=t->next;
                                           }
                                      }
                                }
                        }

        return k;
}


интересует именно удаление от мин до мах или от мах до мин. Функция int Max_Min(Spis**, Spis**, int, int), в ней что-то не так. при компиляции только  E2141 Declaration syntax error 21 строки с главной функцией.
PM MAIL WWW ICQ   Вверх
SVN74
Дата 4.5.2012, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Применяйте STL: 
"vector"  к примеру, - там уже все доступы к памяти готовы... 
PM MAIL WWW   Вверх
Elen123321
Дата 4.5.2012, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.11.2011
Где: Беларусь

Репутация: нет
Всего: нет



не прокатит, нужно именно очередь, т.к. это контрольная. со стеком я использовала матрицы для макс и мин, а в очереди они кажутся лишними. ввела указатели. а указатели  - источники ошибок! возможно их неправильно применила в очереди
PM MAIL WWW ICQ   Вверх
SVN74
Дата 4.5.2012, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Цитата(Elen123321 @  4.5.2012,  21:41 Найти цитируемый пост)
не прокатит, нужно именно очередь

Вот очередь (Первым вошел, Первым вышел):
Код

queue <int> myInt;

for(int i = 0; i < 100; i++)
myInt.push(i);// Помещаем в очередь

for(int i = 0; i < 100; i++)
{
     cout << myInt.front() << "\n"; // Извлекаем из очереди (тут сравниваем Min/Max делаем выводы...)
     myInt.pop(); // Удаляем из памяти
}

Цитата(Elen123321 @  4.5.2012,  21:41 Найти цитируемый пост)
а в очереди они кажутся лишними. ввела указатели. а указатели  - источники ошибок

Можно использовать указатели:
queue <int*> myPtrInt; 
// Далее все тоже...

Это сообщение отредактировал(а) SVN74 - 4.5.2012, 22:15
PM MAIL WWW   Вверх
disputant
Дата 5.5.2012, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



Замечание на по коду, по алгоритму. По сути вам надо оставить в очереди минимальный и максимальный элементы, так?
Ну так заведите две переменные для них, присвойте им первые два элеиментв из очереди, и вытаскивайте из очереди ВСЕ. Вынули элемент, сравними с двумя. Новый минимум/максимум? Запомнили, нет - увеличили счетчик удаленных, и пошли за следующим элементом.

В конце запихнули эти два элемента назад в очередь, вывели счетчик. Просто и в ОДИН проход, без отдельной беготни по очереди в поисках минимума-максимума.
PM MAIL   Вверх
Elen123321
Дата 8.5.2012, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.11.2011
Где: Беларусь

Репутация: нет
Всего: нет



мелкую ошибку я нашла (стало обидно). 
пробовала переменные, ошибки почти те же, что и при указателях:

[C++ Error] Unit1.cpp(72): E2034 Cannot convert 'Spis * *' to 'int'
[C++ Error] Unit1.cpp(72): E2293 ) expected
[C++ Error] Unit1.cpp(73): E2015 Ambiguity between 'max' and '_STL::max<_Tp>(const _Tp &,const _Tp &)'
[C++ Error] Unit1.cpp(73): E2015 Ambiguity between 'min' and '_STL::min<_Tp>(const _Tp &,const _Tp &)'
[C++ Error] Unit1.cpp(77): E2126 Case bypasses initialization of a local variable
[C++ Warning] Unit1.cpp(84): W8004 'Max_Min' is assigned a value that is never used
[C++ Warning] Unit1.cpp(86): W8066 Unreachable code
[C++ Error] Unit1.cpp(132): E2015 Ambiguity between 'max' and '_STL::max<_Tp>(const _Tp &,const _Tp &)'
[C++ Error] Unit1.cpp(136): E2015 Ambiguity between 'min' and '_STL::min<_Tp>(const _Tp &,const _Tp &)'
[C++ Error] Unit1.cpp(154): E2228 Too many error or warning messages

вот еще попробую использовать 2 списка...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.