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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 20:56   #1
Fiert
 
Регистрация: 17.05.2012
Сообщений: 3
По умолчанию Односвязанные списки (С++)

Здравствуйте, проблема заключается в том что не работает поиск, точнее просто выключается программа после попытка поиска.


Задание:
Картотека в бюро обмена квартир организована как линейный список. Сведения о каждой квартире содержат:
*количество комнат
*этаж
*площадь
*адрес
Составить программу, которая обеспечивает
*начальное формирование картотеки
*ввод заявки на обмен
*поиск в картотеке подходящего варианта: при равенстве количества комнат и этажа и различии площадей в пределах 10% выводится соответствующая карточка и удаляется из списка. в противном случае поступившая заявка включается в список
*выывод всего списка


Код:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;

struct node
{
int n,l,m;
char add[50];
node *next;
node *prev;
};

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

void add_node (node **pend, int n,int l,int m, char *add);
node *find (node *pbeg, int n,int l,int m);
void zayavka (node **pbeg, node **pend, int n,int l,int m, char *add);
void remove (node ***pbeg, node ***pend, node **pkey);
void show_all (node *p);
void show_menu ();

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

int _tmain(int argc, _TCHAR* argv[])
{
node *pbeg, *pend;
pbeg=pend=0;

show_menu ();

int n,l,m;
char add[50];

int key=1;

while (key)
{
cout << "Enter: "; cin >> key;
switch (key)
{
// add
case 1:
cout << "Enter number of rooms: "; cin >> n;
cout << "Enter the floor: "; cin >> l;
cout << "Enter square: "; cin >> m;
cout << "Enter addres: "; cin >> add;
if (pbeg==0)
{
pbeg = new node;
pbeg->n=n;
pbeg->l=l;
pbeg->m=m;
strcpy(pbeg->add,add);
pbeg->prev=0;
pbeg->next=0;
pend=pbeg;
}
else add_node (&pend,n,l,m,add);
break;

// show all
case 2:
show_all (pbeg);
break;

// find
case 3:
cout << "Enter number of rooms: "; cin >> n;
cout << "Enter the floor: "; cin >> l;
cout << "Enter square: "; cin >> m;
cout << "Enter addres: "; cin >> add;
zayavka (&pbeg,&pend,n,l,m,add);
break;

// exit
default:
key = 0;
}
}
return 0;
}


// функции

void add_node (node **pend, int n,int l,int m, char *add)
{
node *p = new node;
p->n=n;
p->l=l;
p->m=m;
strcpy(p->add,add);
(*pend)->next=p;
p->next=0;
p->prev=*pend;
*pend=p;
}

node *find (node *pbeg, int n,int l,int m)
{
node *p=pbeg;
while (p){
if (p->n==n && p->l==l)
return p;
p=p->next;
}
return 0;
}
void remove (node ***pbeg, node ***pend, node **pkey)
{
if ((*pkey)==**pbeg){
**pbeg=(**pbeg)->next;
(**pbeg)->prev=0;
}
if ((*pkey)==**pend){
**pend=(**pend)->prev;
(**pend)->next=0;
}
else {
((*pkey)->prev)->next = (*pkey)->next;
((*pkey)->next)->prev = (*pkey)->prev;
}
delete pkey;
}

void zayavka (node **pbeg, node **pend, int n,int l,int m, char *add)
{
if (node *pkey=find(*pbeg,n,l,m))
{
cout << pkey;
cout << "Podxodjawaja zayavka:";
cout << "Number of rooms: " << pkey->n;
cout << "Floor: " << pkey->l;
cout << "Square: " << pkey->m;
remove(&pbeg, &pend, &pkey);
}
else {
cout << pkey;
add_node (pend,n,l,m,add);
}
}

void show_all (node *p)
{
if (p == 0) return;
cout << "Number of rooms: " << p->n << " ";
cout << "Floor: " << p->l << " ";
cout << "Square: " << p->m << " ";
cout << "Addres: " << p->add << " " << endl;
show_all (p->next);
}

void show_menu ()
{
cout << "Press any of this keys..." << endl;
cout << setiosflags (ios::left)
<< setw (15) << "[ 1 - Add ] "
<< setw (15) << "[ 2 - Show all ] "
<< setw (15) << "[ 3 - Find ] "
<< setw (15) << "[ 4 - Exit ]"
<< endl << endl;
}
Fiert вне форума Ответить с цитированием
Старый 22.05.2012, 21:53   #2
Fiert
 
Регистрация: 17.05.2012
Сообщений: 3
По умолчанию

Подскажите скорее, курсовую скоро сдавать =(
Fiert вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки С++ Klausms Общие вопросы C/C++ 0 01.03.2012 22:09
Списки в С Nitriyc Помощь студентам 1 31.05.2010 00:55
односвязанные списки в си J-lo Помощь студентам 0 05.05.2010 23:31
Списки? Chainic Microsoft Office Excel 13 06.05.2009 22:53