Return to Snippet

Revision: 35915
at November 15, 2010 06:11 by ppofuk


Initial Code
#include <iostream>
#include <cstring>

typedef struct _automobil
{
	unsigned int serijski_broj, god;
	char model [30], proizvodjac [30];
		
} automobil;

#define STACK_TYPE automobil
#include "stog_polje.h"
#include "stog_pokazivac.h"
using namespace std;

#ifdef STACK_TYPE_LIST 
/* Ispis svih elemenata na stogu - ako je stog lista 
   Ispisuje se samo model i godina proizvodnje. 
*/
static inline void ispisi_sve (stog *S)
{
	stog *C = S->next;
	while (C) {
		cout << "Model: " << C->element.model << endl
		     << "Godina: " << C->element.god << endl
		     << "Proizvodjac: " << C->element.proizvodjac << "\n\n";
		C = C->next;
	} 
} 
#endif

#ifdef STACK_TYPE_ARRAY
static inline void ispisi_sve (stog *S)
{
	for (int _i = MAXLENGTH - 2; _i >= S->cursor; --_i)
		cout << "Model: " << S->elements[_i].model << endl
		     << "Godina: " << S->elements[_i].god << endl
		     << "Proizvodjac: " << S->elements[_i].proizvodjac << "\n\n";
} 
#endif

void dodaj_na_stog 
(unsigned int serijski_broj, unsigned int god, 
 char model[], char proizvodjac[], stog *S)
{
	automobil TMP; 
	TMP.serijski_broj = serijski_broj;
	TMP.god = god;
	strcpy (TMP.model, model);
	strcpy (TMP.proizvodjac, proizvodjac);
	PushS(TMP, S);
} 

void unos_automobila (stog *S)
{
	unsigned int serijski_broj, god;
	char model[30], proizvodjac[30];
	
	cout << "Unesite serijski broj automobila: ";
	cin >> serijski_broj;
	cout << "Unesite ime modela: ";
	cin.ignore(); cin.getline(model, 29);
	cout << "Unesite ime proizvodjaca: ";
	cin.getline(proizvodjac, 29);
	cout << "Unesite godinu proizvodnje: ";
	do {
		cin >> god;
		if (god < 1995 || god > 2010)
			cout << "Mora biti u rangu 1995-2010\nGodina proizvodnje: ";
	} while (god < 1995 || god > 2010); 
	dodaj_na_stog (serijski_broj, god, model, proizvodjac, S); 
} 

void iskrcaj_2006 (stog *S)
{
	_NEW_STACK(S_temp);
	InitS(S_temp);
	cout << "Trenutno stanje na stogu: ";
	ispisi_sve(S);
	cout << "\nIskrcavanje u auto kucu:\n";

	while (!IsEmpty(S)) {
		automobil T = TopS(S);
		if (T.god > 2006 && strcmp(T.proizvodjac, "Audi"))
			cout << T.proizvodjac << " "
			     << T.model << ", " << T.god << endl
			     << T.serijski_broj << endl
			     << "-----------------\n\n";
		PushS(T, S_temp);
		PopS (S); 
	}  
	while (!IsEmpty(S_temp)) {
		PushS((TopS(S_temp)), S);
		PopS(S_temp);
	}
	delete S_temp;

	cout << "\nIspis stanja stoga:\n";
	ispisi_sve(S); 
		
} 

void iskrcaj_audi (stog *S)
{
	if (IsEmpty(S)) return;  

	automobil T = TopS(S);
	PopS(S); 

	if (strcmp(T.proizvodjac, "Audi") == 0)
		cout << T.proizvodjac << " "
		     << T.model << ", " << T.god << endl
		     << T.serijski_broj << endl
		     << "-----------------\n\n";

	iskrcaj_audi (S);
	PushS(T, S); 
} 

void iskrcavanje_audia (stog *S)
{
	cout << "Stanje na stogu:\n";
	ispisi_sve(S); 
	cout << "Iskrcavanje: \n";
	iskrcaj_audi(S);
	cout << "Stanje nakon iskrcavanja: \n";
	ispisi_sve(S); 
} 


int main (void)
{
	_NEW_STACK(S); 
	InitS(S);
	int choice; 
	
	do {
		cout << "1. Unos automobila.\n"
		     << "2. Iskrcavanje automobila proizvedenih nakon 2006.\n"
		     << "3. Iskrcavanje automobila marke Audi.\n"
		     << "4. Kontrolni ispis stoga\n"
		     << "9. Kraj rada.\n\n";
		cin >> choice;
		
		switch (choice) {
		case 1: unos_automobila(S);
			break;
			// TODO: other cases
		case 2: iskrcaj_2006(S);
			break;
			
		case 3: iskrcavanje_audia(S);
			break;
			
		case 4: ispisi_sve(S) ;
			break;
		} 
	} while (choice != 9);
	
	while (!IsEmpty(S)) 
		PopS(S);
	delete S;
	return 0;
}

Initial URL


Initial Description


Initial Title
Primjer implementacije stoga

Initial Tags


Initial Language
C++