/* zadatak 7, Milan Ruzic 394/2000 */ #include #define _brNiski 27 typedef struct { char *slovima; int broj;} Talpha_broj; Talpha_broj abr[_brNiski] = {"devedeset",90, "osamdeset",80, "sedamdeset",70, "sezdeset",60, "pedeset",50, "cetrdeset",40,"trideset",30, "dvadeset",20, "devetnaest",19, "osamnaest",18, "sedamnaest",17, "sesnaest",16, "petnaest",15, "cetrnaest",14, "trinaest",13, "dvanaest",12, "jedanaest",11, "deset",10, "devet",9, "osam",8, "sedam",7, "sest",6, "pet",5, "cetri",4, "tri",3, "dva",2, "jedan",1}; /***************************************************************************/ char toLowCase(char c) { if (c>=65 && c<=90) return c+32; else return c; } int strcmp1(char *s1,char *s2) { for (;toLowCase(*s1)==*s2 && *s2; s1++, s2++); if (!*s2) return 0; else if (toLowCase(*s1)<*s2) return -1; else return 1; } int alpha2broj(char *s) /*vraca vrednost broja zapisanog slovima */ {int l=0,r=_brNiski-1,mid,broj; char *pom; while (l>1; if (strcmp1(s,abr[mid].slovima)>=0) r=mid; else l=mid+1; } if (!strcmp1(s,abr[l].slovima)) broj=abr[l].broj; else return -1; for(pom=abr[l].slovima; *pom; pom++, s++); for (;*s==' ' || *s=='\n';s++); if (*s!=']' && *s) { l=0; r=_brNiski-1; while (l>1; if (strcmp1(s,abr[mid].slovima)>=0) r=mid; else l=mid+1; } if (!strcmp1(s,abr[l].slovima)) broj+=abr[l].broj; else return -1; } return broj; } /***************************************************************************/ int prevodA(char *naslov) /*konverzija u arapske cifre */ {int result; char *p,*q; for(p=naslov; *p!='[' && *p ; p++); if (!*p) return -1; result=alpha2broj(++p); for (q=p; *q!=']' && *q; q++); if (!*q) return -1; sprintf(p-1,"%d.%s",result,q+1); return result; } /***************************************************************************/ int prevodR(char *naslov) /* u rimske cifcre */ {int result; char *dekade[10] = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}, *jedinice[10]={"","I","II","III","IV","V","VI","VII","VIII","IX"}; char *p,*q; for(p=naslov; *p!='[' && *p ; p++); if (!*p) return -1; result=alpha2broj(++p); for (q=p; *q!=']' && *q; q++); if (!*q) return -1; sprintf(p-1,"%s%s%s",dekade[result/10],jedinice[result%10],q+1); return result; } /***************************************************************************/ int prevodD(char *naslov) /*doslovni prenos */ {int result; char *p; for(p=naslov; *p!='[' && *p ; p++); if (!*p) return -1; result=alpha2broj(++p); for (;*p!=']' && *p; *(p-1)=*p, p++); *(p-1)='#'; for (; *p; *p=*(p+1), p++); return result; } /***************************************************************************/ int prevodilac(char opcija,char *naslov) /* string naslov se modifikuje -- rezultat se ne stavlja u drugi string */ { switch (toLowCase(opcija)) {case 'a' : return prevodA(naslov); case 'r' : return prevodR(naslov); case 'd' : return prevodD(naslov); } } /***************************************************************************/ int strcmp(char *s1,char *s2) { for (;*s1==*s2 && *s1; s1++,s2++); if (*s1==*s2) return 0; else if (*s1<*s2) return -1; else return 1; } void sort_abr(void) /*selection sort abr niza*/ {int i,j,maxelem; Talpha_broj temp; for (i=0; i<_brNiski-1; i++) { maxelem=i; for (j=i+1;j<_brNiski; j++) if (strcmp(abr[maxelem].slovima, abr[j].slovima)<0) maxelem=j; temp=abr[i]; abr[i]=abr[maxelem]; abr[maxelem]=temp; } } /***************************************************************************/ main() {char naslov[100]="

[osamdESET oSam] vugla

"; sort_abr(); prevodilac('A',naslov); puts(naslov); }