#include /* R(a,b,c,d) denota il rettangolo formato dai punti interi (x,y) tali che a<=x<=c e b<=y<=d */ /* Calcola l'area di R(a,b,c,d) */ int areaRett(int a, int b, int c, int d){ int base, altezza; base = c-a; altezza = d-b; return base * altezza; } /* Restituisce 1 se (x,y) appartiene a R(a,b,c,d), 0 altrimenti */ int appartiene(int x, int y, int a, int b, int c, int d){ if(a<=x && x<= c && b<=y && y<= d) return 1; else return 0; } /* Restituisce 1 se R(a1,b1,c1,d1) e' contenuto in R(a2,b2,c2,d2), 0 altrimenti */ int contenuto(int a1, int b1, int c1, int d1, int a2, int b2, int c2, int d2){ if(appartiene(a1,b1,a2,b2,c2,d2) && appartiene(c1,d1,a2,b2,c2,d2)) return 1; else return 0; } /* Restituisce 1 se gli intervalli [s1,s2] e [t1,t2] si sovrappongono (ossia, esiste n tale che s1 <= n <= s2 e t1 <= n <= t2) 0 altrimenti */ //int sovrapposti(int s1, int s2, int t1, int t2) /* Restituisce 1 se i rettangoli R(a1,b1,c1,d1) e R(a2,b2,c2,d2) si intersecano, 0 altrimenti */ int intersezione(int a1, int b1, int c1, int d1, int a2, int b2, int c2, int d2){ // completare return 0; } /* Restituisce min(x,y) */ int min(int x, int y){ if(xy) return x; else return y; } /* Dati due rettangoli R(a1,b1,c1,d1) e R(a2,b2,c2,d2), calcola l'area dell'intersezione */ int areaInt(int a1, int b1, int c1, int d1, int a2, int b2, int c2, int d2){ int a,b,c,d, area; if(intersezione(a1,b1,c1,d1,a2,b2,c2,d2)) {/* i rettangoli si intersecano */ a=max(a1,a2); b=max(b1,b2); c=min(c1,c2); d=min(d1,d2); area = areaRett(a,b,c,d); } else /* i rettangoli non si intersecano */ area=0; return area; } int main(){ int a1,b1,c1,d1,a2,b2,c2,d2,area; printf("Inserire a1, b1, c1, d1, a2, b2, c2, d2 ---> "); scanf("%d%d%d%d%d%d%d%d", &a1,&b1,&c1,&d1,&a2,&b2,&c2,&d2); area = areaRett(a1,b1,c1,d1); printf("Area rettangolo R(%d,%d,%d,%d): %d\n", a1,b1,c1,d1,area); area = areaRett(a2,b2,c2,d2); printf("Area rettangolo R(%d,%d,%d,%d): %d\n", a2,b2,c2,d2,area); if(contenuto(a1,b1,c1,d1,a2,b2,c2,d2)) printf("R(%d,%d,%d,%d) e' contenuto in R(%d,%d,%d,%d)\n", a1,b1,c1,d1,a2,b2,c2,d2); else printf("R(%d,%d,%d,%d) non e' contenuto in R(%d,%d,%d,%d)\n", a1,b1,c1,d1,a2,b2,c2,d2); if(intersezione(a1,b1,c1,d1,a2,b2,c2,d2)) printf("R(%d,%d,%d,%d) si interseca con R(%d,%d,%d,%d)\n", a1,b1,c1,d1,a2,b2,c2,d2); else printf("R(%d,%d,%d,%d) non si interseca con R(%d,%d,%d,%d)\n", a1,b1,c1,d1,a2,b2,c2,d2); area = areaInt(a1,b1,c1,d1,a2,b2,c2,d2); printf("Area intersezione: %d\n", area); return 0; }