Revision: 60742
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 12, 2012 08:38 by Dhorvat
Initial Code
//IMPLEMENTACIJA POMO�U POKAZIVA�A
using namespace std;
int sifra=1;
struct zivotinja {
int Sifra;
char Vrsta[30], Naziv[30];
float Cijena;
tm Datum;
zivotinja *sljedeci;
};
zivotinja *lista = new zivotinja;
void InitL(zivotinja *lista){
lista -> sljedeci = NULL;
}
int EndL(zivotinja *lista){
zivotinja *tekuci = lista;
int b = 1;
while(tekuci -> sljedeci)
{
tekuci = tekuci -> sljedeci;
b++;
}
return b;
}
int FirstL (zivotinja *lista)
{
if(lista -> sljedeci == NULL)
return EndL (lista);
else
return 0;
}
int PreviousL (int pozicija, zivotinja *lista){
if(pozicija == FirstL(lista))
return -1;
else
return pozicija - 1;
}
zivotinja RetrieveL(int pozicija, zivotinja *lista){
zivotinja *tekuci = lista -> sljedeci;
for(int i = 0; i < pozicija; i++)
tekuci = tekuci -> sljedeci;
return *tekuci;
}
int LocateL(int v, zivotinja *lista){
zivotinja *tekuci = lista -> sljedeci;
int br = 0;
while(tekuci)
{
br++;
tekuci = tekuci -> sljedeci;
}
return br;
}
zivotinja * NextL(int pozicija, zivotinja *lista){
if(pozicija == EndL (lista))
return NULL;
else
{
zivotinja tekuci = RetrieveL (pozicija, lista);
return tekuci.sljedeci;
}
}
void Vrati(zivotinja element,int pozicija, zivotinja* lista) {
zivotinja *tekuci = lista -> sljedeci;
for(int i = 0;i < pozicija; i++)
tekuci = tekuci -> sljedeci;
tekuci -> Sifra = element.Sifra;
tekuci -> Cijena = element.Cijena;
strcpy (tekuci -> Naziv, element.Naziv);
strcpy (tekuci -> Vrsta, element.Vrsta);
tekuci -> Datum = element.Datum;
}
void Reverse (zivotinja *lista)
{
if(lista -> sljedeci == NULL)
return;
zivotinja *prosli = NULL, *trenutni = NULL, *sljedeci = NULL;
trenutni = lista -> sljedeci;
while(trenutni != NULL){
sljedeci = trenutni -> sljedeci;
trenutni -> sljedeci = prosli;
prosli = trenutni;
trenutni = sljedeci;
}
lista -> sljedeci = prosli;
}
int InsertL (zivotinja *novi, int pozicija, zivotinja *lista){
zivotinja *tekuci = lista;
for(int i = 1; i < pozicija; i++)
tekuci = tekuci -> sljedeci;
novi -> sljedeci = tekuci -> sljedeci;
tekuci -> sljedeci = novi;
sifra++;
if((tekuci -> sljedeci) -> Sifra == novi -> Sifra)
return 1;
else
return 0;
}
void DeleteL (int pozicija, zivotinja *lista){
zivotinja *tekuci = lista->sljedeci;
zivotinja *prethodni = lista;
for(int i = 0;i < pozicija; i++)
{
tekuci = tekuci -> sljedeci;
prethodni = prethodni -> sljedeci;
}
prethodni -> sljedeci = tekuci -> sljedeci;
delete tekuci;
}
void DeleteAllL (zivotinja *lista)
{
zivotinja *trenutni;
while (lista -> sljedeci != NULL)
{
trenutni = lista -> sljedeci;
lista -> sljedeci = lista -> sljedeci -> sljedeci;
delete trenutni;
}
}
//IMPLEMENTACIJA POMO�U POLJA
using namespace std;
int sifra=1;
int kursor;
struct zivotinja {
int Sifra;
char Vrsta[50], Naziv[50];
float Cijena;
tm Datum;
};
zivotinja lista[1000];
void InitL (zivotinja *lista)
{
kursor = 1;
}
int EndL(zivotinja *lista)
{
return kursor;
}
int FirstL (zivotinja *lista)
{
return 0;
}
zivotinja * NextL(int pozicija, zivotinja *lista)
{
if(pozicija == EndL (lista))
return lista;
else
return &lista[pozicija + 1];
}
int PreviousL (int pozicija, zivotinja *lista)
{
if(pozicija == FirstL (lista))
return -1;
else
return pozicija - 1;
}
zivotinja RetrieveL(int pozicija, zivotinja *lista)
{
return *(lista + pozicija);
}
int InsertL(zivotinja *novi, int pozicija, zivotinja *lista)
{
--pozicija;
(lista + pozicija) -> Sifra = novi -> Sifra;
strcpy ((lista + pozicija) -> Naziv, novi -> Naziv);
strcpy ((lista + pozicija) -> Vrsta, novi -> Vrsta);
(lista + pozicija) -> Cijena = novi -> Cijena;
(lista + pozicija) -> Datum.tm_mday = novi -> Datum.tm_mday;
(lista + pozicija) -> Datum.tm_mon = novi -> Datum.tm_mon;
(lista + pozicija) -> Datum.tm_year = novi -> Datum.tm_year;
sifra++;
kursor++;
return((lista+pozicija) -> Sifra == novi -> Sifra);
}
void Vrati(zivotinja element, int pozicija, zivotinja *lista)
{
lista[pozicija] = element;
}
void Reverse (zivotinja * lista){
int broj_elemenata = EndL (lista) - 1;
for(int i=0;i<=broj_elemenata/2;i++)
swap (lista[i], lista[broj_elemenata - i - 1]);
}
void DeleteL(int pozicija, zivotinja *lista){
for(int i = pozicija; i < EndL (lista); i++)
{
lista[i].Sifra = lista[i + 1].Sifra;
strcpy((lista + i) -> Naziv, (lista + i + 1) -> Naziv);
strcpy((lista + i) -> Vrsta, (lista + i + 1) -> Vrsta);
lista[i].Cijena = lista[i + 1].Cijena;
(lista + i) -> Datum.tm_mday = (lista + i + 1) -> Datum.tm_mday;
(lista + i) -> Datum.tm_mon = (lista + i + 1) -> Datum.tm_mon;
(lista + i) -> Datum.tm_year = (lista + i + 1) -> Datum.tm_year;
}
kursor--;
}
void DeleteAllL (zivotinja *lista)
{
kursor = 0;
}
//GLAVNI PROGRAM
#include <iostream>
//#include "lista_polje.h"
#include "lista_pokazivac.h"
#include "time.h"
using namespace std;
void unos(char *znakovni_niz)
{
cin.getline(znakovni_niz, 30);
if (cin.gcount()==1)
cin.getline (znakovni_niz,30);
};
int dodaj()
{
zivotinja *novi = new zivotinja;
cout << "Sifra: " << sifra << endl;
novi -> Sifra = sifra;
cout << "Naziv: ";
unos (novi -> Naziv);
cout << "Vrsta: ";
unos (novi -> Vrsta);
cout << "Cijena: ";
cin >> novi -> Cijena;
cout << "Datum dostave: " << endl;
cout << endl;
do
{
cout << "Mjesec: ";
cin >> novi -> Datum.tm_mon;
if (!(novi -> Datum.tm_mon < 1 || novi -> Datum.tm_mon > 12))
break;
cout << "Pogresan unos!" << endl;
}while(1);
do
{
cout << "Dan: ";
cin >> novi -> Datum.tm_mday;
if (novi -> Datum.tm_mon == 1 || novi -> Datum.tm_mon == 3 || novi -> Datum.tm_mon == 5 ||
novi -> Datum.tm_mon == 7 || novi -> Datum.tm_mon == 8 || novi -> Datum.tm_mon == 10 || novi -> Datum.tm_mon == 12)
if (!(novi -> Datum.tm_mday < 0 || novi -> Datum.tm_mday > 31))
break;
if (novi -> Datum.tm_mon == 4 || novi -> Datum.tm_mon == 6 || novi -> Datum.tm_mon == 9 || novi -> Datum.tm_mon == 11)
if (!(novi -> Datum.tm_mday < 0 || novi -> Datum.tm_mday > 30))
break;
if (novi -> Datum.tm_mon == 2)
if (!(novi -> Datum.tm_mday < 0 || novi -> Datum.tm_mday > 29))
break;
cout << "Pogresan unos!" << endl;
} while(1);
cout << "Godina: ";
do
{
cout << "Godina: (2000. - 2050.) ";
cin >> novi -> Datum.tm_year;
if (!(novi -> Datum.tm_year <= 2000 || novi -> Datum.tm_year >= 2050))
break;
cout << "Pogresan unos." << endl;
}while(1);
return (InsertL (novi, EndL (lista), lista));
}
void ispisi_listu()
{
zivotinja tekuci;
for(int i = EndL(lista) - 1; i > 0; i--)
{
tekuci = RetrieveL (PreviousL (i, lista), lista);
cout << "Sifra:\t" << tekuci.Sifra << endl;
cout << "Naziv:\t" << tekuci.Naziv << endl;
cout << "Vrsta:\t" << tekuci.Vrsta << endl;
cout << "Cijena:\t" << tekuci.Cijena << endl;
cout << "Datum dostave:\t" << tekuci.Datum.tm_mday << "." << tekuci.Datum.tm_mon << "." << tekuci.Datum.tm_year << "." << endl << endl;
cout << "-------------------------------------------" << endl;
}
}
void pretrazi_listu() {
zivotinja tekuci;
int br=0;
for(int i = EndL (lista) - 1; i > 0; i--)
{
tekuci = RetrieveL (PreviousL (i, lista), lista);
if(!((tekuci.Datum.tm_year < 2012 && (tekuci.Datum.tm_mon + 1) < 9) && tekuci.Datum.tm_mday <= 23))
{
cout << "Sifra :" << tekuci.Sifra << endl;
cout << "Naziv :" << tekuci.Naziv << endl;
cout << "Vrsta :" << tekuci.Vrsta << endl;
cout << "Cijena:" << tekuci.Cijena << endl;
cout << "Datum :" << tekuci.Datum.tm_mday << "." << tekuci.Datum.tm_mon + 1 << "." << tekuci.Datum.tm_year << "." << endl << endl;
cout << "-----------------" << endl;
br++;
}
}
cout << "Zapisa s datumom poslije 23.9.2012.: " << br << endl;
}
int obrisi_prema_nazivu(){
zivotinja tekuci;
cout << "--- Svi Zapisi ---" << endl;
ispisi_listu ();
cout << "Unesite naziv zivotinje za brisanje: ";
char naziv[30];
bool nadjeno = false;
unos (naziv);
for(int i = EndL (lista) - 1; i > 0 && !nadjeno; i--)
{
tekuci = RetrieveL (PreviousL (i,lista), lista);
if(strcmp(naziv,tekuci.Naziv)==0){
cout << "--------------------------------" << endl << endl;
cout << "Sifra:\t" << tekuci.Sifra << endl;
cout << "Naziv:\t" << tekuci.Naziv << endl;
cout << "Vrsta:\t" << tekuci.Vrsta << endl;
cout << "Cijena:\t" << tekuci.Cijena << endl;
cout << "Datum dostave:\t" << tekuci.Datum.tm_mday << "." << tekuci.Datum.tm_mon + 1 << "." << tekuci.Datum.tm_year << "." << endl << endl;
nadjeno = true;
char izbor;
cout << "Jeste li sigurni da zelite obrisati ovja zapis? (d/n)";
do
{
cin >>izbor;
} while(izbor != 'd' && izbor != 'n');
if(izbor == 'd')
DeleteL (i-1, lista);
else
return 0;
}
}
return nadjeno;
}
int obrisi_prema_vrsti(){
zivotinja tekuci;
cout << "--- Svi Zapisi ---" << endl;
ispisi_listu ();
cout << endl;
cout << "Unesite vrstu: ";
char vrsta[30];
bool nadjeno = false;
unos(vrsta);
for(int i = EndL (lista) - 1; i > 0; i--){
tekuci = RetrieveL (PreviousL (i,lista), lista);
if(strcmp (vrsta, tekuci.Vrsta) == 0)
{
char izbor;
if(!nadjeno)
{
cout << "Zelite li obrisati sve zapise ove vrste: (d/n)" << vrsta << endl;
do
{
cin >>izbor;
} while(izbor != 'd' && izbor != 'n');
}
if(izbor == 'd')
DeleteL (i - 1, lista);
nadjeno = true;
}
}
return nadjeno;
}
void spoji(int i, int k, int j) {
int I = i, J = k + 1, K = 0;
zivotinja *b = new zivotinja [j - i + 1];
zivotinja prvi, drugi;
while(I <= k && J <= j)
{
prvi = RetrieveL (I, lista);
drugi = RetrieveL (J, lista);
if(prvi.Cijena > drugi.Cijena)
{
b[K++] = prvi;
I++;
}
else if
(prvi.Cijena < drugi.Cijena)
{
b[K++] = drugi;
J++;
}
else if(strcmp (prvi.Naziv, drugi.Naziv) < 0)
{
b[K++] = drugi;
J++;
}
else
{
b[K++] = prvi;
I++;
}
}
if(I > k) while(J <= j) {
drugi = RetrieveL (J, lista);
b[K++] = drugi;
J++;
}
else while(I <= k) {
prvi = RetrieveL (I, lista);
b[K++] = prvi;
I++;
}
for(int I = 0;I <= j - i; I++)
Vrati (b[I], i + I, lista);
delete [] b;
}
void MSort(int i, int j)
{
if(i < j)
{
int k = (i + j) / 2;
MSort(i, k);
MSort(k + 1, j);
spoji(i, k, j);
}
}
void sortiraj() {
int br_elem = EndL(lista)-1;
MSort(0,br_elem-1);
Reverse(lista);
}
int main()
{
InitL (lista);
int izbor = 0;
do
{
system ("cls");
cout << "--- I Z B O R ---" << endl;
cout << "1) Dodaj zapis." << endl;
cout << "2) Ispisi listu." << endl;
cout << "3) Ispisi sve zapise nakon 23.9.2012." << endl;
cout << "4) Brisanje pojedinacnog zapisa prema nazivu." << endl;
cout << "5) Brisanje svih zapisa prema vrsti." << endl;
cout << "6) Sortiraj listu." << endl;
cout << "7) Obrisi sve zapise." << endl;
cout << "9) Izlaz iz programa." << endl;
cin >> izbor;
cout << "--------------------" << endl;
switch(izbor)
{
case 1:
cout << (dodaj()? "Zapis uspjesno dodan!\n" : "Zapis nije dodan\n");
system ("pause");
break;
case 2:
ispisi_listu();
system ("pause");
break;
case 3:
pretrazi_listu();
system ("pause");
break;
case 4:
if(obrisi_prema_nazivu())
cout << "Zapis izbrisan."<<endl<<endl;
else cout << "Trazeni zapis ne postoji!" << endl;
system ("pause");
break;
case 5:
if(obrisi_prema_vrsti())
cout << "Trazena vrsta je obrisana." << endl;
else cout << "Trazena vrsta ne postoji!" << endl;
system ("pause");
break;
case 6:
sortiraj ();
cout << "Lista sortirana." << endl;
system ("pause");
break;
case 7:
DeleteAllL (lista);
cout << "Lista je obrisana." << endl;
system ("pause");
break;
case 9:
cout << "Izlaz iz programa." << endl;
system ("pause");
break;
default:
cout << "Pogresan unos!" << endl;
system ("pause");
}
}while (izbor != 9);
return 0;
}
Initial URL
Initial Description
Prvi zadatak; biblioteke (lista_poazivac.h, lista_polje.h), glavni program
Initial Title
SP_zadatak1_Davorin_Horvat
Initial Tags
podataka
Initial Language
C++