Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
pub:labprog:20181022 [2018/10/23 00:20]
lucafavalli
pub:labprog:20181022 [2018/10/24 13:02] (current)
lucafavalli
Line 629: Line 629:
 (ogni coppia di punti identifica i vertici opposti di un rettangolo),​ (ogni coppia di punti identifica i vertici opposti di un rettangolo),​
 restituisca in output l'area della sovrapposizione tra i due rettangoli. restituisca in output l'area della sovrapposizione tra i due rettangoli.
- 
-(NOTA: la funzione between è inserita solo per comodità di lettura: 
-ogni istanza del tipo: 
- 
-between(x, y, z) 
- 
-può essere sostituita dallo statement 
- 
-y <= x && x <= z 
- 
-L'​utilizzo delle funzioni non è quindi propedeutico allo svolgimento dell'​esercizio) 
 */ */
  
Line 658: Line 647:
     var ax, ay, cx, cy float64     var ax, ay, cx, cy float64
     var a1x, a1y, c1x, c1y float64     var a1x, a1y, c1x, c1y float64
- 
-    var a, b, c, d bool 
-    var a1, b1, c1, d1 bool 
  
     var area float64     var area float64
Line 666: Line 652:
     fmt.Scan(&​ax,​ &ay, &cx, &cy, &a1x, &a1y, &c1x, &c1y)     fmt.Scan(&​ax,​ &ay, &cx, &cy, &a1x, &a1y, &c1x, &c1y)
  
-    //Punto A in A1 B1 C1 D1 +    //Se i due rettangoli non si sovrappongono l'area è 0 
-    ​a = between(ax, a1x, c1x) && between(ay, a1y, c1y) +    ​if cx <= a1x || ax >= c1x || cy <= a1y || ay >= c1y { 
-    //Punto B in A1 B1 C1 D1 +        area = 0 
-    b = between(cx, a1x, c1x) && between(ay, a1y, c1y) +    } else { 
-    //Punto C in A1 B1 C1 D1 +        //Esiste almeno una sovrapposizione e tale sovrapposizione corrisponde ai due valori centrali 
-    c between(cx, ​a1x, c1x) && between(cy, a1y, c1y) +        ​var x1, x2, y1, y2 float64 
-    //Punto D in A1 B1 C1 D1 +        ​x1 = ax 
-    d between(ax, a1x, c1x) && between(cy, a1y, c1y) +        x2 = cx 
- +        if a1x > ax 
- +            ​x1 = a1x 
-    //Punto A1 in A B C D +        
-    a1 between(a1x,​ ax, cx) && between(a1yay, cy) +        if c1x < cx 
-    //Punto B1 in A B C D +            ​x2 c1x 
-    b1 between(c1x,​ ax, cx) && between(a1y,​ ay, cy) +        }
-    //Punto C1 in A B C D +
-    c1 = between(c1x,​ ax, cx) && between(c1y, ay, cy) +
-    //Punto D1 in A B C D +
-    d1 = between(a1x,​ ax, cx) && between(c1y,​ ay, cy) +
- +
-    if (a || b || c || d) +
-        ​if a { +
-            if c { +
-                /* +
-                  D1-----------C1 +
-                  |    D-----C ​ | +
-                  |    |     ​| ​ | +
-                  |    A-----B ​ | +
-                  A1-----------B1 +
- +
-                  Copre i casi: +
-                  - a & c +
-                  - b & d +
-                */ +
-                ​area = (cx - ax) * (cy - ay) +
-            } else if b { +
-                /* +
-                       ​D-----C +
-                       ​| ​    | +
-                  D1---+-----+-C1 +
-                  |    |     ​| ​ | +
-                  |    |     ​| ​ | +
-                  |    A-----B ​ | +
-                  A1-----------B1 +
- +
-                  Copre i casi: +
-                  - a & b +
-                */ +
-                area = (cx - ax) * (c1y - ay) +
-            ​} else if d +
-                /* +
-                  D1-----------C1 +
-                  |    D--------+--C +
-                  |    |        |  | +
-                  |    A--------+--B +
-                  A1-----------B1 +
- +
-                  Copre i casi: +
-                  - a & d +
- +
-                */ +
-                area = (c1x - ax) * (cy - ay) +
-            } else { +
-                ​/* +
-                       D-----------C +
-                  D1---+-------C1 ​ | +
-                  |    |        |  | +
-                  ​| ​   |        |  | +
-                  |    A--------+--B +
-                  A1-----------B1 +
-                  Copre i casi: +
-                  - a +
-                  - c1 +
-                */ +
-                area (c1x - ax) * (c1y - ay) +
-            } +
-        ​} else if +
-            ​//b & d e b & a sono già coperti +
-            if c { +
-                /* +
-                  D1-----------C1 +
-               ​D--+---------C ​ | +
-               ​| ​ |         ​| ​ | +
-               ​A--+---------B ​ | +
-                  A1-----------B1 +
- +
-                  Copre i casi: +
-                  - b & c +
-                */ +
-                area (cx - a1x) * (cy - ay) +
-            } else { +
-                /* +
-                D------------C +
-                | D1---------+-C1 +
-                |  |         ​| ​ | +
-                |  |         ​| ​ | +
-                A--+---------B ​ | +
-                  A1-----------B1 +
- +
-                  Copre i casi: +
-                  - b +
-                  - d1 +
-                */ +
-                area = (cx - a1x) * (c1y - ay) +
-            ​+
-        ​} else if +
-            ​//a & c e b & c sono già coperti +
-            if d { +
-                /* +
-                  D1-----------C1 +
-                  |             | +
-                  |             | +
-                  |    D-----C ​ | +
-                  A1---+-----+-B1 +
-                       ​| ​    | +
-                       ​| ​    | +
-                       ​A-----B +
-                   Copre i casi: +
-                   - c & d +
-                */ +
-                area (cx - ax) * (cy - a1y) +
-            } else { +
-                /* +
-                  D1-----------C1 +
-                  |             | +
-                  |             | +
-                D-+---C ​        | +
-                | A1--+--------B1 +
-                |     | +
-                |     | +
-                A-----B +
-                   Copre i casi: +
-                   - c +
-                   - a1 +
-                */ +
-                area = (cx - a1x) * (cy - a1y) +
-            } +
-        } else { +
-            /* +
-              D1---+-----+-C1 +
-              |             | +
-              |             | +
-              |    D--------+--C +
-              A1---+-------B1 ​ | +
-                   ​| ​          | +
-                   ​| ​          | +
-                   ​A-----------B+
  
-               Copre i casi: +        y1 = ay 
-               - d +        y2 = cy 
-               - b1 +        if a1y > ay { 
-            ​*/ +            ​y1 = a1y
-            area (c1x - ax) * (cy - a1y)+
         }         }
-    } else if (a1 || b1 || c1 || d1) { +        ​if c1ycy { 
-        //Analogo scambiando i rettangoli +            ​y2 = c1y
-        if a1 { +
-            if c1 { +
-                area = (c1x - a1x) * (c1y - a1y) +
-            } else if b1 { +
-                area = (c1x - a1x) * (cy - a1y) +
-            } else if d1 { +
-                area = (cx - a1x) * (c1y - a1y) +
-            ​+
-            //a1 è già coperto +
-        } else if b1 && c1 { +
-            area (c1x - ax) * (c1y - a1y) +
-            //b1 è già coperto +
-        } else if c1 && d1 { +
-            area = (c1x - a1x) * (c1y - ay) +
-            //c1 è già coperto+
         }         }
-    } else if ( +        ​area = (x2 x1) * (y2 y1)
-        between(ax, a1x, c1x) &&​ +
-        between(cx, a1x, c1x) &&​ +
-        a1x < ax && c1x > cx &&​ +
-        between(a1y,​ ay, cy) &&​ +
-        between(c1y,​ ay, cy) &&​ +
-        ay < a1y && cy > c1y) { +
-        /* +
-               ​D-----C +
-               ​| ​    | +
-          D1---+-----+---C1 +
-          |    |     ​| ​   | +
-          |    |     ​| ​   | +
-          |    |     ​| ​   | +
-          A1---+-----+---B1 +
-               ​| ​    | +
-               ​A-----B +
-        */ +
-        ​area = (cx ax) * (c1y a1y) +
-    } else if ( //Inverso +
-        between(a1x,​ ax, cx) &&​ +
-        between(c1x,​ ax, cx) &&​ +
-        ax < a1x && cx > c1x &&​ +
-        between(ay, a1y, c1y) &&​ +
-        between(cy, a1y, c1y) &&​ +
-        a1y < ay && c1y > cy){ +
-        area = (c1x - a1x) * (cy - ay) +
-    } else {    //Nessuna sovrapposizione +
-        area = 0+
     }     }
     fmt.Println("​La sovrapposizione è", area)     fmt.Println("​La sovrapposizione è", area)
 } }
  
-func between (intValue, lowerLimit, upperLimit float64) ​ bool { 
-    return lowerLimit <= intValue && intValue <= upperLimit 
-} 
 </​code>​ </​code>​
pub/labprog/20181022.txt · Last modified: 2018/10/24 13:02 by lucafavalli
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0