Pagini recente » Cod sursa (job #844571) | Cod sursa (job #2150599) | Cod sursa (job #2217262) | Cod sursa (job #442230) | Cod sursa (job #1395002)
#include <stdio.h>
#include <stdlib.h>
struct fractie {
int p,q;
};
void eroare(int e) {
switch(e) {
case 1: printf("Eroare alocare dinamica a memoriei.\n"); break;
}
fflush(stdin); getchar();
exit(e);
}
int cmmdc(int a, int b) {
while (a!=b)
if (a>b) a-=b;
else b-=a;
return(a);
}
void reduce(struct fractie *z) {
int aux=cmmdc(z->p,z->q);
z->p/=aux; z->q/=aux;
}
int cauta(struct fractie z,struct fractie *a,int h) {
int i;
for (i=0; i<h; i++)
if (z.p==a[i].p && z.q==a[i].q) return(1);
return(0);
}
int main() {
FILE *f;
int n,i,j,k=1,s=sizeof(struct fractie);
struct fractie *a=(struct fractie*)malloc(s),b,*c;
if (a==NULL) eroare(1);
a->p=1; a->q=1;
f=fopen("fractii.in","r");
fscanf(f,"%d",&n);
fclose(f);
for(i=1; i<=n; i++)
for (j=1; j<=n; j++) {
b.p=i; b.q=j;
reduce(&b);
if (!cauta(b,a,k)) {
c=(struct fractie*)realloc(a,s*(k+1));
if (c==NULL) eroare(1);
else {
a=c; a[k++]=b;
}
}
}
//for (i=0; i<k; i++) printf("%d/%d ",a[i].p,a[i].q);
free(a);
f=fopen("fractii.out","w");
fprintf(f,"%d",k);
fclose(f);
return(0);
}