Задача на динамические структуры данных, вариант 8 — про гаражную стоянку

О задаче:

По книге:C/C++ Программирование на языке высокого уровня: Учебник для вузов
Автор книги: Павловская Татьяна Александровна
Задача на тему: Динамические структуры данных — (на странице 165)
Вариант задачи: 8 — (на странице 168)’ style=’default’ collapse_link=’true’]

Условия задачи:
[свернуть]

Гаражная стоянка имеет одну стояночную полосу, причем въезд и выезд находятся в одном конце полосы. Если владелец автомашины приходит забрать свой автомобиль, который не является ближайшим к выходу, то все автомашины, загораживающие проезд, удаляются, машина данного владельца выводится со стоянки, а другие машины возвращаются на стоянку в исходном порядке . Написать программу, которая моделирует процесс прибытия и отъезда машин. Прибытие или отъезд автомашины задается командной строкой, которая содержит признак прибытия или отъезда и номер машины. Программа должна выводить сообщение при прибытии или выезде любой машины. При выезде автомашины со стоянки сообщение должно содержать число раз, которое машина удалялась со стоянки для обеспечения выезда других автомобилей .
‘ style=’default’ collapse_link=’true’]

Примечание к исходнику программы
[свернуть]

Измените набор символов используемый для компилятора с набора символов Юникод(если она у вас стояла) на многобайтовую кодировку. Иначе у вас программа от компилируется и в консоли вы не увидите букв.
‘ style=’default’ collapse_link=’true’]

Листинг(исходник) программы:
[свернуть]

main.cpp
[свернуть]

	#include <iostream>
	#include <windows.h>
	#include <string.h>
	using namespace std;
	HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
	struct Avto
	{
	char marka[10];
	};
	struct Stek
	{
	Avto a;
	Stek *next;
	};
	char bufer [255];
	char*rus (char*s)
	{
	CharToOem (s,bufer);
	return bufer;
	}
	void vvod(Avto &x)
	{
	cin>>x.marka;
	}
	void Print(Stek *u)
	{
	int k=0;
	Stek *p = u;
	if(p==0)
	{
	cout<<rus("\\nВ Гараже НЕТ машин!!!")<<endl;
	return;
	}
	while(p)
	{
	p->a.marka;
	p = p->next;
	k++;
	}
	cout<<rus("\\n\\tВ гараже ");
	if(k<5) cout<<k<<rus(" машины")<<endl;
	else cout<<k<<rus(" машин")<<endl;
	p = u;
	SetConsoleTextAttribute(hConsole, 11);
	cout<<rus("\\n ГАРАЖ:")<<endl;
	while(p)
	{
	cout<<"\\t* ";
	cout << p->a.marka<<endl;
	p = p->next;
	}
	
	cout<<"\\t********"<<endl;
	SetConsoleTextAttribute(hConsole, 7);
	}
	
	void dobavlenie(Stek **u, Avto &x)
	{
	Stek *t=new Stek;
	strcpy(t->a.marka,x.marka);
	t->next=*u;
	*u=t;
	}
	
	bool Zabiraem(Stek**u, Avto &x)
	{
	if(*u==NULL)
	{
	return false;
	}
	Stek*t=*u;
	strcpy(x.marka, t->a.marka);
	*u=t->next;
	delete t;
	return true;
	}
	
	void vyezjaet_iz_garaja(Stek**u)
	{
	Stek *v=NULL;
	Avto x;
	char n[7];
	cout<< rus("\\n\\t Введите машину, которая выезжает:");
	cin>>n;
	while(*u)
	{
	if(Zabiraem(u,x))
	{
	if(strcmp(n, x.marka)==0)
	{
	cout<< rus(" машина ") << n; cout<<rus(" уехала!!!");
	while(Zabiraem(&v, x)) /// возвращаем элементы из стека V в стек U
	dobavlenie(u, x);
	return;
	}
	else
	{
	dobavlenie(&v, x);
	}
	}
	else break;
	}
	SetConsoleTextAttribute(hConsole, 12);
	cout <<rus(" В гараже НЕТ машины ")<<n<<endl;
	SetConsoleTextAttribute(hConsole, 7);
	while(Zabiraem(&v,x))
	dobavlenie (u,x);
	}
	void Clear(Stek **u)
	{
	if(*u == 0) return;
	Stek *p = *u;
	Stek *t;
	while(p)
	{
	t = p;
	p = p->next;
	delete t;
	}
	*u = 0;
	}
	
	int main()
	{
	SetConsoleTextAttribute(hConsole, 7);
	cout << "\\n" << endl;
	Stek *u=NULL;
	int n;
	Avto x; //переменная x типа avto
	do{
	SetConsoleTextAttribute(hConsole, 14);
	
	cout<<rus(" ***********************\\n * \\tМеню:")<<endl;
	
	cout<<rus(" * 1. Приехала новая машина")<<endl;
	
	cout<<rus(" * 2. Печатать гараж")<<endl;
	
	cout<<rus(" * 3. Машина выезжает")<<endl;
	
	cout<<rus(" * 0. Выход")<<endl;
	
	cout<<rus(" ***********************")<<endl;
	
	cout<<rus("\\n\\tЗадайте действие: ");
	
	cin>>n;
	
	SetConsoleTextAttribute(hConsole, 7);
	
	switch (n)
	{
	case 1: cout<<rus("Введите новое авто: ");vvod(x);
	dobavlenie(&u, x); cout<<rus("\\nАвто Добавлено!\\a\\n"); break;
	case 2: Print(u); break;
	case 3: Print(u); vyezjaet_iz_garaja(&u); break;
	case 0: Clear(&u); break;
	default: SetConsoleTextAttribute(hConsole, 12);
	cout<<rus("Нет такого ЧИСЛА!!!")<<endl;
	SetConsoleTextAttribute(hConsole, 7);
	}
	cout<<endl;
	}while (n!=0);
	return 0;
	}
	

[свернуть]

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *