Zgrade

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

#include <stdio.

h>
#include <string.h>
#include <ctype.h>

typedef struct
{char naziv[100];
int god;
char godina[40];
}Zgrade;

int konvertuj(char *s)


{char god[40];
strcpy(god,s);
char r[13][3]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int v[13]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
int n=strlen(s);
int g=0,i=0;
while(strlen(god)>0)
{char *pok=strstr(god,r[i]);
if((pok!=NULL)&&(pok-god==0))//da li se i-ta rimska cifra(pr M) nalazi na 1.poz na pr MCM ili CM
{g=g+v[i];
strcpy(god,god+strlen(r[i]));//uklanjamo rimsku cifru koju smo obracunali
}
else
i++;
}
return g;
}

int citaj(FILE*f,Zgrade x[])


{int i=0;
while( fgets(x[i].naziv,100,f)!=NULL)
{
fgets(x[i].godina,40,f);
int p=strlen(x[i].godina);//uklanjaju se zavrsne praznine
p--;
while(isalpha(x[i].godina[p])!=1)p--;
x[i].godina[p+1]='\0';
x[i].god=konvertuj(x[i].godina);
i++;
}
return i;
}
void sortiraj(int n,Zgrade x[])
{int i,j;
Zgrade pom;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(x[i].god>x[j].god)
{pom=x[i];
x[i]=x[j];
x[j]=pom;
}
}

void stampaj(int n,Zgrade x[])


{for(int i=0;i<n;i++)
printf("%s%s %d\n",x[i].naziv,x[i].godina,x[i].god);
}
main()
{int n;
Zgrade a[100];
FILE *f;
f=fopen("gradjevine.txt","r");
n=citaj(f,a);
fclose(f);
sortiraj(n,a);
stampaj(n,a);

You might also like