Форум программистов, компьютерный форум CyberForum.ru

Циклический буфер. Проблема с удалением элемента. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++: pointers, clases http://www.cyberforum.ru/cpp-beginners/thread18286.html
Помогите, пожалуйста написать код для задачки Создать программу на языке С++, используя объектно-ориентированные средства програмирования. Хэдер класс обязательно поместить в отдельный файл хэдера (*.h). Данные класса, по-умолчанию, скрыты (private), а методы - открыты (public). Создать класс "комлексное число", в котором хранятся числа двух видов, которые определяют комплексное число. Для...
C++ Как подсчитать количество одинаковых символов?(C++) Вот сама задача: Написать программу, которая проверяет, сколько каждый символ встречается во введённой с клавиатуры строке. Вот то не многое что смог сделать: #include <iostream> #include <stdio.h> #include <string.h> void main() { const int n=100; http://www.cyberforum.ru/cpp-beginners/thread18285.html
Разбиение массива C++
Допустим имеем массив (3x3) |1 2 3| |4 9 6| |7 8 3| Написать програмку которая разобьёт этот массив по столбцам, |1|---|2|---|3| |4|---|9|---|6| |7|---|8|---|3| в каждом столбце найдёт максимальное число, и просумирует все максимальные числа каждого столбца 7+9+6=22
Вычисление выражения, введенного с клавиатуры C++
Мне нужно написать программу на Си, представляющую собой калькулятор....Типа: Вводим с клавиатуры арифметическое выражение типа 1+45*(4-7)... На выходе нужен ответ...Я не представляю, как это сделать!
C++ Инициализация массива http://www.cyberforum.ru/cpp-beginners/thread18246.html
Нужно объявить несколько статических строк, содержащих байты со значениями в диапазоне от 1 до 255 Пытаюсь что-то в этом духе: unsigned char arrays = { {'A', 'B', 'C', 175, 216, 0}, {'G', 'H', 168, 234, 0}, {'K', 'L', 'M', 'N', 0}, };
C++ вырез из строки как из всего файла вырезать &nbsp содержащийся в строках.? заранее большое спасибо. подробнее

Показать сообщение отдельно
Людмилка
Сообщений: n/a

Циклический буфер. Проблема с удалением элемента. - C++

13.12.2008, 14:27. Просмотров 1527. Ответов 1
Метки (Все метки)

В общем, у меня такая проблема.. Не могу исправить ошибку в процедуре удаления... Элемент удаляет, но при выводе буфера программа зацикливается. Помогите, пожалуйста!) И еще не выходит перегрузить оператор вывода буфера...
Циклический буфер типа очередь. Последний элемент ссылается на первый. Удаление первого элемента, добавление в конец буфера.
Код
/*
     Циклический буфер
*/
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>

#define box 10                //Максимальный размер буфера

int cursize;
class elem
{
      friend class spisok;
  //    friend ostream &operator<<(ostream &ostream, elem* ssil);
      int tt;
      elem *next;
      public:
	  void put_tt(int x) {tt=x;}
};
class spisok
{
      elem *p;     //adress nachala spiska
      int size;        //размер буфера
      public:
	 spisok();           // Є®*бвагЄв®а
	// ~spisok();          //¤ҐбвагЄв®а
	 void create(int nn);
	 void output();
	 spisok dell();
	 int get_size() {return size;}
	 spisok spisok::operator+(int n);
	 spisok spisok::operator-(int n);
	 friend ostream &operator<<(ostream& os,const spisok& obj);
	 spisok spisok::operator*(int n);
};

spisok::spisok()
{
   p=NULL;
   size = box;
}
void spisok::create(int nn)
{
     elem *q;
     if (nn>0)
     {
	p=new elem;
	p -> put_tt (random(100));
	q=p;
	for (int i=1;i<nn;i++)
	{
	     q -> next=new elem;
	     q=q->next;
	     q->put_tt(random(100));
	 }
	 q->next=p;
     }
     else p=NULL;
}

void spisok::output()
{
     elem *q;
     q=p;
     cout << "\nroot -> ";
     cout<<q->tt<<" -> ";
     q=q->next;
     while (q!=p)
     {
	cout<<q->tt<<" -> ";
	q=q->next;
     }
     cout << p->tt;
}
/*ostream &operator<<(ostream& os,const spisok &obj)
{
     elem *q;
     q=obj.p;
     os << "\nroot -> ";
     os <<q->tt<<" -> ";
     q=q->next;
     while (q!=obj.p)
     {
	os<<q->tt<<" -> ";
	q=q->next;
     }
     os << obj.p->tt;
     return os;
}     */

spisok spisok::operator+(int n)
{
     spisok summa;
     elem *q;
     elem *q1;
     q=p;
     q1=q;
     q=q->next;
     while (q!=p)
     {
	q1=q;
	q=q->next;
     }
     q=q1;
     q -> next=new elem;
     q=q->next;
     q->tt=n;
     q->next=p;
     summa.p=p;
     cursize++;
     return summa;
}

//udalenie

/*spisok spisok::operator-(int n)
{
     spisok summa;
     elem *q;//ssilka na next elem
     elem *q1;//ssilka,ukazivaet na predidushiy elem
     q=p->next;
     summa.p=p;
     while (q!=p)
     {
    // for (int i=1;i<=n;i++)
   //  {
//     if (q->tt==n)
//     {
	q=q->next;
//	summa.p=p;
//	delete q;
 //	return summa;
     }
//   while (q!=p)

	q1=q;
	q=q->next;
      //	if (q->tt==n)
	//{
	   q1->next=q->next;
	   p=q;
	   summa.p=p;
	   delete q;
	   return summa;
	   cursize--;
  //	}
    // }
 //    cout<<"Takogo elementa v spiske net\n";
     return summa;
} */
spisok spisok:: dell()
{
    spisok summa;
    elem *q;
    elem *r;
    summa.p=p;
    if (p!=NULL)
    {
       q=p;
       r=q->next;
       while (r!=p)
	  r=r->next;
       r->next=p->next;
       p=p->next;
       q=q->next;
       delete(q);
       cursize--;
       cout << "crs = " << cursize;
       summa.p=p;
    }
    return summa;
}

spisok spisok::operator*(int n)
{
     spisok summa;
     elem *q;
     elem *q1;
     q=p;
     while (q!=NULL)
     {
	if (q->tt==n)
	{
	   cout <<"Takoi element v spiske suchestvuet\n";
	   summa.p=p;
	   return summa;
	}
	q1=q;
	q=q->next;
     }
     if (q->tt==n)
     {
	q1->next=q->next;
	delete q;
	return summa;
     }
     cout<<"Takogo elementa v spiske net\n";
     return summa;
}


//q->next=NULL;
//} else p=NULL;

int main()
{
    clrscr();
    spisok a,b,c,buf;
    char ch;
    int kol,new_el;
    do
    {
	cout << "\n Выберите вариант:"
	<< "\n1. Информация о буфере;"
	<< "\n2. Создание буфера;"
	<< "\n3. Вывод элементов буфера;"
	<< "\n4. Добавление элемента в буфер;"
	<< "\n5. Удаление элемента из буфера;"
	<< "\n6. Выход\n";
	cin >> ch;
	switch(ch)
	{
	    case '1':
		cout << "\nРазмер буфера: " << buf.get_size()
		<< "\nСвободного места: " << buf.get_size()-cursize;
		getch();
		clrscr();
		break;
	    case '2':
		cout << "\nВведите кол-во элементов* : ";
		cin >> cursize;
		if ((cursize<=box)&&(cursize>0))
		{
		    buf.create(cursize);
		}
		else cout << "Ошибка!";
		getch();
		clrscr();
		break;
	    case '3':
	      //	cout<<buf;
		buf.output();
		getch();
		clrscr();
		break;
	    case '4':
		if (cursize!=box)
		{
		   cout << "Введите новый элемент: ";
		   cin >> new_el;
		   buf=buf+new_el;
		}
		else cout << "Буфер переполнен! Добавление невозможно!";
		getch();
		clrscr();
		break;
	    case '5':
	      /*	cout << "Введите кол-во удаляемых элементов: ";
		cin >> kol;
		if ((kol>0) && (kol<=cursize))
		   for (int j=1;j<=kol;j++)    */
		   buf=buf.dell();
		getch();
		clrscr();
		break;
	}
    } while (ch!='6');
   // getch();
    return 0;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru