Listing comert.PAS
#include <stdio.h>
#include <mem.h>
struct planet_t {
char p,f; double val; char a[26];
} a[26];
int read_data(FILE *f){
int i,k,n; double x;
char s[40],*p;
if (fscanf(f,"%d",&n) != 1) return -1;
memset(a,0,26 * sizeof(struct planet_t));
for (i=0;i<n;i++) {
fscanf(f,"%s %lf",s,&x);
k=*s-'A';a[k].val=x;a[k].f=k;
fgets(s,40,f);
for(p=s;*p;p++) {
if ((*p >= 'A') && (*p <= 'Z'))
a[k].a[*p-'A']=1;
else if (*p == '*') a[k].p=1;
}
}
return 0;
}
void solve(void){
int i,j,k,m;
do {
m=0;
for (i=0;i<26;i++)
for (j=0;j<26;j++)
if (a[i].a[j] && (a[i].val*0.95-
a[j].val > 0.00001)) {
m=1;
a[j].val=a[i].val*0.95;
a[j].f=a[i].f;
}
} while(m);
}
void write_res(FILE *f){
int i,from; double max=-1.0;
for(i=0;i<26;i++)
if (a[i].p)
if(max<a[i].val)
max=a[i].val,from=a[i].f;
fprintf(f,"Import din %c\n",from+'A');
}
void main(void){
FILE *f=fopen("IMPORT.IN","rt");
FILE *fw=fopen("IMPORT.OUT","wt");
while(!read_data(f)){
solve();
write_res(fw);
}
fclose(f);
fclose(fw);
}