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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2012, 00:34   #1
ZavriK
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 12
По умолчанию Стэк C++

Доброго времени суток.
Возникла проблема с задачей:
Гаражная стоянка имеет одну стояночную полосу,причём въезд и выезд находятся в одном конце полосы.Если владелец автомобиля приходит забрать свой автомобиль,который не является ближайшим к выходу,то все автомашины,загораживающие проезд удаляются,машина данного владельца выводится со стоянки ,а другие машины возвращаются на стоянку в исходном порядке.
Написать программу,которая моделирует процесс прибытия и отъезда машин.Прибытие или отъезд автомашины задаётся командной строкой,которая содержит признак прибытия или отъезда и номер машины.Программа должна выводить сообщение при прибытии или выезде любой машины.При выезде автомашины со стоянки сообщение должно содержать число раз,которое машина удалялась со стоянки для обеспечения выезда других автомобилей.


Код:
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <clocale>
struct Node {
	int number;
	int info;
	Node *p;
};
void add_car(Node **top,int number);
void delete_car(Node **top,int number,Node **top2);
int main(){
	setlocale(LC_ALL,"Russian");
	int number;
	Node *top1 = 0;
	Node *top2 = 0;
	int menu = 0;
	do{
		cout <<"1.Добавить машину"<<endl;
		cout <<"2.Удалить машину"<<endl;
		cout <<"3.Выход"<<endl;
		cin >> menu;
		switch (menu) {
			case 1:
				cout <<"Введите номер машины"<<endl;
				cin>>number;
				add_car(&top1,number);
				break;
			case 2:
				cout <<"Введите номер машины"<<endl;
				cin >>number;
				delete_car(&top1,number,&top2);
				break;
		}
		}while(menu!=3);
		return 0;
}
void add_car(Node **top,int number){
	Node *pv = new Node;
	pv->p = 0;
	pv->number = number;
	cout <<"Машина с номером "<<' '<<pv->number<<' '<<"въехала на стоянку"<<endl;
	pv->info = 0;
	if (*top ==0)
	{
		*top = pv;
	}
	else
	{
		pv->p=*top;
		*top = pv;
	}
}
void delete_car(Node **top,int number,Node **top2){
	while (*top!=0)
	{
		if((*top)->number ==number)
		{
			break;
		}
		if (*top2==0)
		{
			*top2 = *top;
		}
		else
		{
			(*top2)->p = *top2;
			*top2 = *top;
		}
			Node *pk = *top;
			*top = (*top)->p;
			delete pk;
	}
	if   (*top ==0)
	{
		cout <<"Машины с данным номером нет на стоянке"<<endl;
	}
	else
	{
		cout<<"Машина с номером"<<' '<<(*top)->number<<' '<<"выезжала со стоянки"<<' '<<((*top)->info ++)<<' '<<"раз"<<endl;
			Node *q = *top;
			*top = (*top)->p;
			delete q;
	}
	while (*top2!=0){
		if (*top == 0)
		{
			*top = *top2;
			Node *z = *top2;
			*top2 = (*top2)->p;
			delete z;
		}
		else
		{
			(*top)->p = *top;
			*top = *top2;
			Node *x = *top2;
			*top2 = (*top2)->p;
			delete x;
		}
	}
}
Вылетает с ошибкой
_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Line:52.
Что не так в лайн 52 ?
ZavriK вне форума Ответить с цитированием
Старый 09.04.2012, 01:11   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Попробуйте:
Код:
//#include "stdafx.h"
#include <iostream>
using namespace std;
#include <clocale>
struct Node
{
    int number;
    int info;
    Node *p;
};
void add_car(Node **top,int number);
void delete_car(Node **top,int number);
int main()
{
    setlocale(LC_ALL,"Russian");
    int number;
    Node *top1 = 0;
    int menu = 0;
    do
    {
        cout <<"1.Добавить машину"<<endl;
        cout <<"2.Удалить машину"<<endl;
        cout <<"3.Выход"<<endl;
        cin >> menu;
        switch (menu)
        {
        case 1:
            cout <<"Введите номер машины"<<endl;
            cin>>number;
            add_car(&top1,number);
            break;
        case 2:
            cout <<"Введите номер машины"<<endl;
            cin >>number;
            delete_car(&top1,number);
            break;
        }
    }
    while(menu!=3);
    return 0;
}
void add_car(Node **top,int number)
{
    Node *pv = new Node;
    pv->p = 0;
    pv->number = number;
    cout <<"Машина с номером "<<' '<<pv->number<<' '<<"въехала на стоянку"<<endl;
    pv->info = 0;
    if (*top ==0)
    {
        *top = pv;
    }
    else
    {
        pv->p=*top;
        *top = pv;
    }
}
void delete_car(Node **top,int number)
{
    Node *tmp=*top;
    Node *tmp2=*top;
    Node *pr=0;
    while ((tmp!=0)&&(tmp->number!=number))
    {
        pr=tmp;
        tmp=tmp->p;
    }
    if   (tmp==0)
    {
        cout <<"Машины с данным номером нет на стоянке"<<endl;
    }
    else
    {
        cout<<"Машина с номером"<<' '<<tmp->number<<' '<<"выезжала со стоянки"<<' '<<tmp->info++<<' '<<"раз"<<endl;
        while (tmp2!=tmp)
        {
            tmp2->info++;
            tmp2=tmp2->p;
        }
        if (pr!=0)
            pr->p=tmp->p;
        if (tmp==*top)
            *top=(*top)->p;
        delete tmp;
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.04.2012, 07:42   #3
ZavriK
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 12
По умолчанию

Спасибо,а можно пояснить,что в моём коде было не так ?
ZavriK вне форума Ответить с цитированием
Старый 09.04.2012, 12:54   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Честно говоря, не смогу
Поэтому я и написал свой код, а не исправил ваш (имею ввиду процедуру удаления).
В чужом коде сложно разбираться)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Стэк. Главная программа Zoxa Помощь студентам 1 12.11.2011 17:16
СТЭК cop08 Общие вопросы C/C++ 1 21.02.2011 11:12
Стэк. прорисовка в Memo Nostalgia Помощь студентам 0 19.03.2010 21:10
Стэк КсенияСергеевна Общие вопросы C/C++ 4 09.11.2009 18:51
Инвертировать стэк в C++ Drozvd Помощь студентам 0 09.04.2009 03:58