Qualificatore di triangoli

ITI – Esame di Stato – Seconda prova di Informatica – 1987

Il candidato deve ideare, orientandosi verso un linguaggio di programmazione a sua scelta, uno o più programmi che permettano di gestire la situazione descritta di seguito.

Si vuole un “qualificatore” di triangoli che qualifichi secondo la geometria elementare triangoli per conto, e con la collaborazione attiva, di un utente che non conosce la terminologia relativa a queste figure (ad esempio un bambino), ma è tuttavia in grado di confrontare segmenti e di riconoscere angoli retti, acuti e ottusi.

Il programma dovrà rivolgere domande che, nell’ambito di competenza dell’utente richiedano risposte di tipo SI/NO, VERO/FALSO o simili.
La forma e il numero di tali domande sono lasciati al candidato.

Quando riterrà di avere avuto informazioni sufficienti il programma produrrà la qualifica richiesta nella forma di un messaggio che dice “il tuo triangolo è” seguito da una delle qualifiche: “equilatero”, “isoscele rettangolo”, “isoscele ottusangolo”, “isoscele acutangolo”, “scaleno rettangolo”, “scaleno ottusangolo”, “scaleno acutangolo”.

La classificazione dei triangoli può essere schematizzata con l’albero qui a lato sotto:

Produrre:

  • analisi e documentazione del progetto ideato comprese le eventuali ipotesi aggiuntive poste dal candidato;
  • le dichiarazioni di tutti i tipi, le variabili e le costanti necessarie alla scrittura dei programmi che realizzeranno il progetto documentato;
  • la codifica degli algoritmi e/o dei segmenti di programma che si ritengono maggiormente utili ad illustrare le idee guida del progetto.

triangoli2

Lo schema di soluzione seguente differisce dalla consegna e si basa sulla richiesta delle dimensioni dei tre lati del triangolo

Considera per ogni domanda l’espressione logica corrispondente

  1. equilatero?
    • (a=b)\wedge(b=c)
    • BASIC: (a = b) AND (a = c)
    • CALC: =E(a = b; a = c)
    • PYTHON: (a == b) and (a == c)
  2. scaleno?
    • (a\ \neq \ b)\wedge (a\ \neq \ c)\wedge(b\ \neq \ c)
    • BASIC: (a <> b) AND (a <> c) AND (b <> c)
    • CALC: =E(a <> b; a <> c; b <> c)
    • PYTHON: (a != b) and (a != c) and (b != c)
  3. isoscele?
    • (a=b)\vee(a=c)\vee(b=c)
    • BASIC: (a = b) OR (a = c) OR (b = c)
    • CALC: O(a = b; a = c; b = c)
    • PYTHON: (a == b) or (a == c) or (b == c)
    • quali lati sono uguali?
  4. isoscele ma non equilatero?
    • (a=b)\wedge(a \ne c)\vee(a=c)\wedge(a \ne b)\vee(b=c)\wedge(a \ne b)
    • BASIC: (a = b) AND (a <> c) OR (a = c) AND (a <> b) OR (b = c) AND (a <> b)
    • CALC: O(E(a = b; a <> c); (E(a = c; a <> b); E(b = c; a <> b))
    • PYTHON: (a == b) and (a != c) or (a == c) and (a != b) or (b == c) and (a != b)
    • quali lati sono uguali?
  5. rettangolo?
    • (a^2=b^2+c^2)\vee(b^2=a^2+c^2)\vee(c^2=a^2+b^2)
    • quali lati sono i cateti?
    • in quale vertice c’è l’angolo retto?
  6. ottusangolo?
    • (a^2\ > \ b^2+c^2)\vee(b^2\ > \ a^2+c^2)\vee(c^2\ > \ a^2+b^2)
    • quale angolo è ottuso?
  7. acutangolo?
    • (a^2\ < \ b^2+c^2)\wedge(b^2\ < \ a^2+c^2)\wedge(c^2\ < \ a^2+b^2)

Osserva

  1. Forse è opportuno controllare prima di tutto se si tratta di un vero triangolo: (a\ \lt \ b+c)\wedge (b\ \lt \ a+c)\wedge (c\ \lt \ a+b)
  2. Le espressioni logiche precedenti non sono indipendenti tra loro quindi non sarà necessario valutarle tutte.

Codifica: Calc, Javascript, Small Basic

Wikipedia: Triangolo, Triangolo rettangolo, teorema dei seni, teorema del coseno, …