Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 00:15   #1
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
Восклицание Двунаправленный спискок. Не работает программа!

Доброго время суток! Вот такая проблем. Нужно разработать программу работы с двунаправленным списком, которая включает:
- создание списка (информационное поле - строка);
- добавление элемента;
- поиск строки с максимальной и минимальной длиной.
Вот то, что я как-бы набросал=) Но у меня оно даже не компилит..Куча ошибок..И первая из них пишет, что конструктор должен возвращать тип Это абсурд вроде.. Посмотрите и подскажите бедному студенту=(
Заранее благодарен

Код:
# include <iosteam>
using namespace std;
struct node
{
       string dani;
       node *next;
       node *prev;
}
class List
{
      public:
             node*Current;
             node*ListHead;
             node*ListEnd;
             List();
             int Create (int amounts);
             void Show ();
             char Add(char elem);
             void CurrentElementAtLast ();
             int Min_Max ();
}
List::List()
{
            Current=ListHead=ListEnd=NULL;
}
int List::Create(int amounts)
{
    node*buf;
    if(amounts==0)
    return 1;
    else
    {
           buf->next=NULL;
           buf->prev=NULL;
           cout<<"Enter data"<<endl;
           cin>>buf->dani;
           if(ListHead==NULL)
           {
                             ListEnd=buf;
                             ListHead=Current=buf;
           }
           else
           {
               Current->next=buf;
               buf->prev=Current;
               Current=buf;
               ListEnd=buf;
           }
           return 1;
    }
}
void List::CurrentElementAtlast()
{
     Current=ListEnd;
}
void List::Show()
{
     if(ListHead==NULL)
     return 0;
     Current=ListHead;
     while (Current->next!=NULL)
     {
           cout<<Current->dani<<endl;
           Current=Current->next;
           Current=Current->prev;
     }
     cout<<Current->dani<<endl;
}
char List::Add(char elem)
{
     node*buf;
     buf=new node;
     if (buf==0)
     cout<<"Few memory"<<endl;
     cout<<"Enter elements"<<endl;
     cin>>elem;
     buf->dani=elem;
     if(ListHead==NULL)
     ListHead=Current=buf;
     else
     {
         Current->next=buf;
         Current->prev=buf;
         Current=buf;
     }
}
int Min_Max()
{
    int count, Max=0, Min=256, i=0;
    string bufMin,bufMax;
    Current=ListHead;
    while (Current!=NULL)
    {
          count=i=0;
          while (dani[i]='\0')
          {
                count++;
                i++;
          }
          if(Max<count)
          {
                       Max=count;
                       bufMax=Current->dani;
          }
          if(Min>count)
          {
                       Min=count;
                       bufMin=Current->dani;
          }
    }
    cout<<"Min string"<<endl;
    cout<<bufMin<<endl;
    cout<<"Max strind"<<endl;
    cout<<bufMax<<endl;
};
int main ()
{
    List Obj;
    int amounts;
    char elem;
    int key;
    cout<<"Enter 1 - for Create List,\n 2 - for Show List,\n 3 - for add"<<endl;
    if (Key==1)
    {
               cout<<"Input amounts of strings"<endl;
               cin>>amounts;
               Obj.Create(amounts);
    }
    if (key==2)
    {
               i=Obj.Show();
               if(i==0)
               cout<<"List empty"<<endl;
    }
    if (key==3)
    {
               Obj.CurrentElementAtLast();
               cout<<"Input amounts of string"<<endl;
               cin>>amounts;
               Obj.Create (amounts);
    }
    while (key!=0);
    return 0;
}
sabaton вне форума Ответить с цитированием
Старый 27.10.2010, 16:42   #2
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

Не знаю сделал что смог!!! сами можете сравнить!!!! но вам надо поокуратнее очен много не обязательных ошибок!! в main() е тоже
И ещё одна ошибка в Min_Max() есть логическая хотя бы обясните что вы там хотите сделат?
Код:
# include <iostream>
using namespace std;
struct node
{
       string dani;
       node *next;
       node *prev;
};

class List
{
      public:
             node* Current;
             node* ListHead;
             node* ListEnd;
             List();
             int Create (int amounts);
             void Show();
             char Add(char elem);
             void CurrentElementAtLast();
             int Min_Max();
};

List::List()
{
            Current=ListHead=ListEnd=NULL;
}

int List::Create(int amounts)
{
    node*buf;
    if(amounts==0)
    return 1;
    else
    {
           buf->next=NULL;
           buf->prev=NULL;
           cout<<"Enter data"<<endl;
           cin>>buf->dani;
           if(ListHead==NULL)
           {
                             ListEnd=buf;
                             ListHead=Current=buf;
           }
           else
           {
               Current->next=buf;
               buf->prev=Current;
               Current=buf;
               ListEnd=buf;
           }
           return 1;
    }
}

void List::CurrentElementAtLast()
{
     Current=ListEnd;
}

void List::Show()
{
     if(ListHead==NULL)
     return ;
     Current=ListHead;
     while (Current->next!=NULL)
     {
           cout<<Current->dani<<endl;
           Current=Current->next;
           Current=Current->prev;
     }
     cout<<Current->dani<<endl;
}

char List::Add(char elem)
{
     node*buf;
     buf=new node;
     if (buf==0)
     cout<<"Few memory"<<endl;
     cout<<"Enter elements"<<endl;
     cin>>elem;
     buf->dani=elem;
     if(ListHead==NULL)
     ListHead=Current=buf;
     else
     {
         Current->next=buf;
         Current->prev=buf;
         Current=buf;
     }
}

int List::Min_Max()
{
    int count, Max=0, Min=256, i=0;
    string bufMin,bufMax;
    Current = ListHead;
    while (Current!=NULL)
    {
          count=i=0;
          while ( dani[i] = '\0' )
          {
                count++;
                i++;
          }
          if(Max<count)
          {
                       Max=count;
                       bufMax=Current->dani;
          }
          if(Min>count)
          {
                       Min=count;
                       bufMin=Current->dani;
          }
    }
    cout<<"Min string"<<endl;
    cout<<bufMin<<endl;
    cout<<"Max strind"<<endl;
    cout<<bufMax<<endl;
}

int main ()
{
    List Obj;
    int amounts;
    char elem;
    int key;
    return 0;
}
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
artush1984 вне форума Ответить с цитированием
Старый 27.10.2010, 21:47   #3
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

держи прогу, которая обрабатывает некоторые функции по работе с двунаправленным списком...правда, с наследованием я тупанул в свое время, но не суть важно...

Код:
#include <iostream>
#include <conio.h>
using namespace std;

class List
{
	friend class Potomok;
private:
	int a;
	List *next;
	List *prev;
public:
	List () {a=0;}
	void Postroenie(int v);
	void Vivod ();
	void NewEl (int v, int f);
	void Del (int v);
	void DelSp ();

}*start, *last, *p, *pl;

void List::Postroenie(int v)
{
 if (start==NULL ) {
  start=new List;
  start->a=v;
  start->prev=NULL;
  start->next=NULL;
  last=start;
 }
 else{
  p=new List;
  p->a=v;
  p->next=NULL;
  p->prev=last;
  last->next=p;
  last=p;
 }
}

void List::NewEl(int v, int f)
{
	p=start;
	do { p=p->next;
	v--;
	} while (v!=1);

		List *q;
		q=new List;
		q->a=f;
		q->next=(p->prev)->next;
		q->prev=p->prev;
		(p->prev)->next=q;
		p->prev=q;
	}

void List::Del(int v)
{
	p=start;
	do { p=p->next;
	v--;
	} while (v!=1);

  if (p->next!=NULL)
    { 
		(p->next)->prev = p->prev;
      (p->prev)->next = p->next; delete p;
  }
  else
    { 
		(p->prev)->next = NULL; last = last->prev; delete p;}
}


void List::DelSp()
{
	List *q,*q1;
  q  = start; q1 = q->next;
  while  (q1!=NULL)
  {
    q = q1; q1 = q1->next; delete q;
  }
  delete start; start = last = NULL;
}


void List::Vivod()
{
	if (start==NULL){
		cout<<"Список пуст\n";
	}
	else{
    p=start;
	cout<<"Список: ";
	do {
	cout<<" "<<p->a;
	p=p->next;
	} while (p!=0);
  cout<<endl;
	}
}
		
class Potomok: public List//-----------------> НАСЛЕДОВАНИЕ
{
public:
	void Sort ();
	void SortPol ();
	void SortOtr ();
};


void Potomok::Sort()
	{
    List *p,*s; 
	int min;
	int count=0;
	s=start;
	
	while (s->next!=NULL) {
		if (s->a<0) {
			++count;
		}
					s=s->next;
	}
	    s=start;
		p=last;
		if (s->a>0){
		for (int i=0;i<count/2; i++) 
		{
				do {
				p=p->prev;
			} while (p->a>0);
				min=s->a;
				s->a=p->a;
				p->a=min;
				do {
					s=s->next;
				} while (s->a>0);
						
		}} else {
for (int i=0;i<count/2; i++) 
{
			do {
				p=p->prev;
			} while (p->a>0);
            
				do {
					s=s->next;
				} while (s->a<0);
				
				        min=s->a;
						s->a=p->a;
						p->a=min;
			
				
}}}

void Potomok::SortOtr()      
{
    List *p,*s; 
	int min;
	int count=0;
	s=start;
	
	while (s->next!=NULL) {
		if (s->a<0) {
			++count;
		}
					s=s->next;
	}
	    s=start;
		p=last;
		if (s->a<0){
		for (int i=0;i<count/2; i++) 
		{
				do {
				p=p->prev;
			} while (p->a>0);
				min=s->a;
				s->a=p->a;
				p->a=min;
				do {
					s=s->next;
				} while (s->a>0);
						
		}} else {
for (int i=0;i<count/2; i++) 
{
			do {
				p=p->prev;
			} while (p->a>0);
            
				do {
					s=s->next;
				} while (s->a>0);
				
				        min=s->a;
						s->a=p->a;
						p->a=min;
			
				
}}}

void Potomok::SortPol ()
{
    List *p,*s; 
	int min;
	int count=0;
	s=start;
	
	while (s->next!=NULL) {
		if (s->a>=0) {
			++count;
		}
					s=s->next;
	}
	    s=start;
		p=last;
		if (s->a>0){
		for (int i=0;i<count/2; i++) 
		{
				do {
				p=p->prev;
			} while (p->a<0);
				min=s->a;
				s->a=p->a;
				p->a=min;
				do {
					s=s->next;
				} while (s->a<0);
						
		}} else {
for (int i=0;i<count/2; i++) 
{
			do {
				p=p->prev;
			} while (p->a<0);
            
				do {
					s=s->next;
				} while (s->a<0);
				
				        min=s->a;
						s->a=p->a;
						p->a=min;
			
				
}}}
		
void main ()
{
	setlocale (0,"");
	cout<<"1 - Создание списка\n";
    cout<<"2 - Просмотр списка\n";
    cout<<"3 - Добавление нового элемента\n";
    cout<<"4 - Удаление определенного элемента\n";
    cout<<"5 - Обратный порядок отрицательных членов\n";
    cout<<"6 - Обратный порядок положительных членов\n";
    cout<<"7 - Удаление списка\n";
	cout<<"8 - Сортировка\n\n";
    cout<<"9 - Выход\n\n";
	
	int n, count=0;
	int poz, punkt;
	Potomok B;
	
	do{
	cout<<"\nВыберите необходимый пункт меню\n";
	cin>>punkt;
	switch (punkt){
		case 1: cout<<"Введите значения элементов\n";
	            do {
                cin>>n;
	            B.Postroenie(n);
				count++;
	            } while (n!=0);
				break;

		case 2: B.Vivod();
			    break;
		
		case 3: do {
	            cout<<"\nВведите позицию вхождения нового элемента\n";
	            cin>>poz;
	            } while (poz>count);
	            cout<<"\nВведите новый элемент\n";
	            cin>>n;
	            B.NewEl(poz,n);
				break;
		case 4: do{
	            cout<<"\nВыберети позицию удаляемого объекта\n";
	            cin>>poz;
	            } while (poz>count);
                B.Del(poz);
				break;

		case 5: cout<<"Порядок отрицательных членов изменен\n";
			B.SortOtr();
			B.Vivod();
			break;

		case 6: cout<<"Порядок положительных членов изменен\n";
			B.SortPol();
			B.Vivod();
			break;

		case 7: B.DelSp();
			    break;

		case 8: B.Sort();
			B.Vivod();
			break;

		case 9: cout<<"Выход\n";
			break;
		default: cout<<"Не верно введен номер пункта\n";
	}}while (punkt!=9);
	
	getch();
}
JeyKip вне форума Ответить с цитированием
Старый 28.10.2010, 00:55   #4
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
По умолчанию

Цитата:
artush1984 И ещё одна ошибка в Min_Max() есть логическая хотя бы обясните что вы там хотите сделат?
там должен быть поиск строки с минимальной и максимальной длинной..(посчитать количество символом в строчках, а потом определить, какая больше и меньше всех)
sabaton вне форума Ответить с цитированием
Старый 28.10.2010, 09:38   #5
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

ну для етого есть функция strlen()
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
artush1984 вне форума Ответить с цитированием
Старый 28.10.2010, 22:18   #6
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
По умолчанию

Вот немного изменил(в плане меню) У меня не работает функция создания списка Create . при передачи ей параметра amounts (указывает количество строк, которые будут введены) программа завершается и просит отправить отчет об ошибке...Вызвать ее нужно нажать 1 в уже откомпилированной программе..Я не знаю в чем ошибка..подскажите

Код:
# include <iostream>
using namespace std;
struct node
{
       string dani;
       node *next;
       node *prev;
};

class List
{
      public:
             node* Current;
             node* ListHead;
             node* ListEnd;
             List();
             int Create (int amounts);
             void Show();
             char Add(char elem);
             void CurrentElementAtLast();
             int Min_Max();
};

List::List()
{
            Current=ListHead=ListEnd=NULL;
}

int List::Create(int amounts)
{
    node*buf;
    if(amounts==0)
    return 1;
    else
    {
           buf->next=NULL;
           buf->prev=NULL;
           cout<<"Enter data"<<endl;
           cin>>buf->dani;
           if(ListHead==NULL)
           {
                             ListEnd=buf;
                             ListHead=Current=buf;
           }
           else
           {
               Current->next=buf;
               buf->prev=Current;
               Current=buf;
               ListEnd=buf;
           }
           return 1;
    }
}

void List::CurrentElementAtLast()
{
     Current=ListEnd;
}

void List::Show()
{
     if(ListHead==NULL)
     return ;
     Current=ListHead;
     while (Current->next!=NULL)
     {
           cout<<Current->dani<<endl;
           Current=Current->next;
           Current=Current->prev;
     }
     cout<<Current->dani<<endl;
}

char List::Add(char elem)
{
     node*buf;
     buf=new node;
     if (buf==0)
     cout<<"Few memory"<<endl;
     cout<<"Enter elements"<<endl;
     cin>>elem;
     buf->dani=elem;
     if(ListHead==NULL)
     ListHead=Current=buf;
     else
     {
         Current->next=buf;
         Current->prev=buf;
         Current=buf;
     }
}

int List::Min_Max()
{
    int count, Max=0, Min=256, i=0; string dani;
    string bufMin,bufMax;
    Current = ListHead;
    while (Current!=NULL)
    {
          count=i=0;
          while ( dani[i] = '\0' )
          {
                count++;
                i++;
          }
          if(Max<count)
          {
                       Max=count;
                       bufMax=Current->dani;
          }
          if(Min>count)
          {
                       Min=count;
                       bufMin=Current->dani;
          }
    }
    cout<<"Min string"<<endl;
    cout<<bufMin<<endl;
    cout<<"Max strind"<<endl;
    cout<<bufMax<<endl;
}

int main ()
{
    
    List Obj;
    int amounts;
    char elem;
    int key;
    cout<<"Enter 1 - for Create List,\n 2 - for Show List,\n 3 - for add,\n 0 - exit"<<endl;
    do
    {
                 cout<<"-- >";
                 cin>>key;
                 while ((key!=1)&&(key!=2)&&(key!=3)&&(key!=0))
                 {
                       cout << "Wrong Input! Enter Again" << endl; 
                       cin >> key;
                 }
                 if (key==1)
                 {
                            cout<<"Input amounts of strings"<<endl;
                            cin>>amounts;
                            Obj.Create(amounts);
                 }
                 if (key==2)
                 {
                            Obj.Show();
                 }
                 if (key==3)
                 {
                            Obj.CurrentElementAtLast();
                            cout<<"Input amounts of string"<<endl;
                            cin>>amounts;
                            Obj.Create (amounts);
                 }
    }
    while (key!=0);
    return 0;
}
sabaton вне форума Ответить с цитированием
Старый 04.11.2010, 20:32   #7
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
По умолчанию

У меня вылетает программа при вызове функции создания списка Create ..В чем проблема?

Уже все работает..Спасибо всем кто пытался помочь..

Вот если кому-то интересно...
Код:
# include <iostream>
using namespace std;
struct node
{
       string dani;
       node *next;
       node *prev;
};

class List
{
      public:
             node* Current;
             node* ListHead;
             node* ListEnd;
             List();
             int Create ();
             void Show();
             char Add(char elem);
             void CurrentElementAtLast();
             int Min_Max();
};

List::List()
{
            Current=ListHead=ListEnd=NULL;
}

int List::Create()
{
    node*buf;
    
           buf = new node;
           buf->next=NULL;
           buf->prev=NULL;
           cout<<"Enter data"<<endl;
           cin>>buf->dani;
           if(ListHead==NULL)
           {
                             ListEnd=buf;
                             ListHead=Current=buf;
           }
           else
           {
               Current->next=buf;
               buf->prev=Current;
               Current=buf;
               ListEnd=buf;
           }
           return 1;
    
}

void List::CurrentElementAtLast()
{
     Current=ListEnd;
}

void List::Show()
{
     if(ListHead==NULL)
     return ;
     Current=ListHead;
     while (Current->next!=NULL)
     {
           cout<<Current->dani<<endl;
           Current=Current->next;
         
     }
     cout<<Current->dani<<endl;
}

char List::Add(char elem)
{
     node*buf;
     buf=new node;
     if (buf==0)
     cout<<"Few memory"<<endl;
     cout<<"Enter elements"<<endl;
     cin>>elem;
     buf->dani=elem;
     if(ListHead==NULL)
     ListHead=Current=buf;
     else
     {
         Current->next=buf;
         Current->prev=buf;
         Current=buf;
     }
}

int List::Min_Max()
{
    int count, Max=0, Min=256, i=0;;
    string bufMin,bufMax;
    Current = ListHead;
    while (Current!=NULL)
    {
          count=i=0;
          while ( Current->dani[i] != '\0' )
          {
                count++;
                i++;
          }
          if(Max<count)
          {
                       Max=count;
                       bufMax=Current->dani;
          }
          if(Min>count)
          {
                       Min=count;
                       bufMin=Current->dani;
          }
          Current=Current->next;
    }
    cout<<"Min string"<<endl;
    cout<<bufMin<<endl;
    cout<<"Max strind"<<endl;
    cout<<bufMax<<endl;
}

int main ()
{
    
    List Obj;
    int amounts;
    char elem;
    int key,i;
    cout<<"Enter 1 - for Create List,\n 2 - for Show List,\n 3 - for add,\n 4 - for Min and Max\n 0 - exit"<<endl;
    do
    {
                 cout<<"-- >";
                 cin>>key;
                 while ((key!=1)&&(key!=2)&&(key!=3)&&(key!=4)&&(key!=0))
                 {
                       cout << "Wrong Input! Enter Again" << endl; 
                       cin >> key;
                 }
                 if (key==1)
                 {
                            cout<<"Input amounts of strings"<<endl;
                            cin>>amounts;
                            for(i=0;i<amounts;i++)
                            Obj.Create();
                 }
                 if (key==2)
                 {
                            Obj.Show();
                 }
                 if (key==3)
                 {
                            Obj.CurrentElementAtLast();
                            cout<<"Input amounts of string"<<endl;
                            cin>>amounts;
                            for(i=0;i<amounts;i++)
                            Obj.Create ();
                 }
                 if(key==4)
                 {
                        Obj.Min_Max();   
                 }
    }
    while (key!=0);
    return 0;
}

Последний раз редактировалось Stilet; 05.11.2010 в 09:10.
sabaton вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает программа looloo Помощь студентам 0 27.05.2010 21:53
не работает программа Rusic Общие вопросы C/C++ 2 19.05.2010 23:16
Не работает программа ddr9225 Общие вопросы C/C++ 21 14.01.2010 14:06
Программа не работает ZYRGiX Помощь студентам 2 22.07.2008 21:44
Программа не работает Михаил Юрьевич Общие вопросы Delphi 2 19.04.2008 23:27