Return to Snippet

Revision: 60612
at November 12, 2012 02:57 by sabramov1


Initial Code
#include <iostream>
//#include "lista_polje.h"
#include "lista_pokazivac.h"

using namespace std;

bool Unos_Elemenata(Lista*);
void Ispis_Elemenata(Lista*);
void Trazi(Lista*);
bool Brisi_Vrsta(Lista*);
bool Brisati_Element(Lista*);
void Sortiranje(Lista*);


int main() {

	int Izbor;

	Lista* Element=new Lista;

	InitL(Element);

	do{
		system("cls");
		cout<<"1: za unos zivotinja"<<endl;
		cout<<"2: za ispis zivotinja "<<endl;
		cout<<"3: za pretrazivanje"<<endl;
		cout<<"4: za brisanje po nazivu"<<endl;
		cout<<"5: za brisanje po vrsti"<<endl;
		cout<<"6: za sortiranje"<<endl;
		cout<<"0: izlaz iz programa "<<endl;
		cout<<endl;

		cout<< endl << "\nIzaberi: ";
		cin >> Izbor;

		if(Izbor==1)
			if (Unos_Elemenata(Element)) cout << "Zapis dodan." << endl;

		if(Izbor==2)
			Ispis_Elemenata(Element);

		if(Izbor==3)
			Trazi(Element);

		if(Izbor==4)
			Brisati_Element(Element);

		if(Izbor==5)
			Brisi_Vrsta(Element);

		if(Izbor==6)
			Sortiranje(Element);
	
	}while (Izbor!=0);
	
	return 0;
}

bool Unos_Elemenata(Lista* Glava) {
	static int Sifra=100;
	zivotinja* Novi=new zivotinja;
	
	cout << endl << "Naziv zivotinje: ";
	cin.ignore();
	cin.getline(Novi->Naziv, 50);
	cout << "Vrsta: ";
	cin.getline(Novi->Vrsta, 50);
	cout << "Datum (DD MM YYYY): ";
	cin >> Novi->datum_dostave.Dan >> Novi->datum_dostave.Mjesec >> Novi->datum_dostave.Godina;

	cout << "Cijena: ";
	cin >> Novi->Cijena;
	Novi->Sifra=Sifra++;
	return InsertL(*Novi, EndL(Glava), Glava);
}

bool Usporedi( char* Prvi, char* Drugi, int Broj_1, int Broj_2) {
	if(Broj_1!=Broj_2) return false;
	for (int i=0; i<Broj_1; i++)
		if(Prvi[i]!=Drugi[i]) return false;
	return true;
}

bool Brisati_Element(Lista* L) {
	cout << endl << "Naziv: ";
	char Naziv[50];
	cin.ignore();
	cin.getline(Naziv, 50);

	zivotinja Zivotinja_1;

	for(el Trenutni=FirstL(L); Trenutni!=EndL(L); Trenutni=NextL(Trenutni, L)) {
		Zivotinja_1=RetrieveL(Trenutni, L);

		if(Usporedi(Naziv, Zivotinja_1.Naziv, strlen(Naziv), strlen(Zivotinja_1.Naziv))) {
			if(DeleteL(LocateL(Zivotinja_1, L), L)==-1) return 0;
			else return 1;
		}
	}
	return 0;
}

bool Brisi_Vrsta(Lista* L) {
	int Brojac=0;
	cout << endl << "Vrsta: ";
	char Vrsta[50];
	cin.ignore();
	cin.getline(Vrsta, 50);

	zivotinja Zivoinja_1;
	for(el Trenutni=FirstL(L); Trenutni!=EndL(L); ) {
		Zivoinja_1=RetrieveL(Trenutni, L);

		if(Usporedi(Vrsta, Zivoinja_1.Vrsta, strlen(Vrsta), strlen(Zivoinja_1.Vrsta)))
			if(DeleteL(LocateL(Zivoinja_1, L), L)) {
				Brojac++;
				continue;
			}
			Trenutni=NextL(Trenutni, L);
	}
	if(Brojac)
		return 1;
	else return 0;
}

int Broj_Elemenata(Lista* L) {
	int Broj=0;
	for(el Trenutni=FirstL(L); Trenutni!=EndL(L); Trenutni=NextL(Trenutni, L)) Broj++;
	return Broj;
}

bool usporedi(zivotinja Element_1, zivotinja Element_2) {
	if(Element_1.Cijena<Element_2.Cijena) return true;

	if(Element_1.Cijena==Element_2.Cijena) {
		int temp=(strlen(Element_1.Naziv)<strlen(Element_2.Naziv)) ? strlen(Element_1.Naziv) : strlen(Element_2.Naziv);
		for(int I=0; I<temp; I++)
			if(Element_1.Naziv[I]>Element_2.Naziv[I]) return false;
			else if(Element_1.Naziv[I]<Element_2.Naziv[I]) return true;
	}
	return false;
}

void Merge(zivotinja Polje[], int I, int K, int J) {
	int Pol_1=I;
	int Pol_2=K+1;
	int temp=0;
	zivotinja* Drugo_polje=new zivotinja[J-I+1];

	while(Pol_1<=K && Pol_2<=J)
		if(usporedi(Polje[Pol_1], Polje[Pol_2])) Drugo_polje[temp++]=Polje[Pol_1++];
		else Drugo_polje[temp++]=Polje[Pol_2++];

		if(Pol_1>K)
			while(Pol_2<=J) Drugo_polje[temp++]=Polje[Pol_2++];
		else
			while(Pol_1<=K) Drugo_polje[temp++]=Polje[Pol_1++];

		for(int X=I; X<=J; X++) Polje[X]=Drugo_polje[X-I];

		delete[] Drugo_polje;
}

void Merge_Sort(zivotinja Novo_polje[], int I, int J) {
	if(I<J) {
		int K=(I+J)/2;
		Merge_Sort(Novo_polje, I, K);
		Merge_Sort(Novo_polje, K+1, J);
		Merge(Novo_polje, I, K, J);
	}
}

void Merge_Sort(zivotinja Novo_polje[], int Broj) {
	Merge_Sort(Novo_polje, 0, Broj-1);
}

void Sortiranje(Lista* L){
	int Broj_elemenata=Broj_Elemenata(L), I=0;

	zivotinja* Novi=new zivotinja[Broj_elemenata];
	for(el Novo=FirstL(L); Novo!=EndL(L); Novo=NextL(Novo, L))
		Novi[I++]=RetrieveL(Novo, L);

	DeleteAllL(L);

	Merge_Sort(Novi, Broj_elemenata);

	for(int I=0; I<Broj_elemenata; I++)
		InsertL(Novi[I], FirstL(L), L);

	delete[] Novi;
}

void Ispis_Elemenata(Lista* L) {

	cout << "Ispis: " << endl;
	for (el Trenutni=EndL(L); (Trenutni=PreviousL(Trenutni, L))!=NULL; )
		cout << RetrieveL(Trenutni, L) << endl;
	cin.ignore();
	cout << "\n Pritisni bilo sto za dalje.";
	cin.get();
}

void Trazi(Lista* L) {
	zivotinja Zivotinja;
	int Brojac=0;

	for (el Trenutni=FirstL(L); Trenutni!=EndL(L); Trenutni=NextL(Trenutni, L)) {
		Zivotinja=RetrieveL(Trenutni, L);
		int Datum=(Zivotinja.datum_dostave.Godina*10000)+(Zivotinja.datum_dostave.Mjesec*100)+Zivotinja.datum_dostave.Dan;

		if (Datum>20120923){
			cout << Zivotinja << endl;
			Brojac++;
		}
	}
	cout << "Ukupno zivotinja koje su dostavljenje poslije 23. rujna 2012: " << Brojac;
	cin.ignore();
	cout << "Pritisni bilo sto za dalje.";
	cin.get();
}

Initial URL


Initial Description
Kod je vrlo jednostavan. U izborniku mozemo vidjeti zaglavlje lista_polje.h i lista_pokazivac.h. Ovisno kako zelimo da program radi, stavljamo jedan od headera u komenat posto obje implementacije koriste iste funkcije.

Initial Title
Zadatak 1: main_ Abramov_Suzana

Initial Tags


Initial Language
C++