@franc-esca
RISPOSTA ACCESSORIA, dopo aver visto il quesito accessorio «lo svolgimento/risoluzione che mi state dando, vale anche per determinare quale tra determinate frazioni sia quella maggiore o minore?».
------------------------------
Se le "determinate frazioni" sono più di due la minore e la maggiore sono i due estremi dell'ordinamento (e la loro ricerca è la mossa base di almeno un paio di algoritmi); se invece le "determinate frazioni" sono solo due allora stiamo parlando di quello che, nella mia risposta primaria di ieri chiamai «la capacità di confrontare due elementi (a, b) dell'insieme da riordinare e di ottenere un risultato booleano (Falso/Vero)
* "a non deve precedere b" oppure "a deve precedere b".»
Ti dò qui di seguito i particolari di quest'ultimo algoritmo di confronto.
------------------------------
Frazione = rapporto fra un numeratore n intero e un denominatore d naturale.
Rappresentata dalla coppia ordinata (n, d).
Criterio = uno di {ascendente, discendente}.
Rappresentato da uno dei caratteri ('A', 'D').
CriterioInverso = quello di {ascendente, discendente} diverso da Criterio.
Calcolato dalla funzione
* inverso(C) = if C = 'A' then 'D' else 'A'
---------------
Posto
* a = (p, q)
* b = (u, v)
* c = uno di ('A', 'D')
la funzione "confronto(a, b, c)" deve valere
* FALSO se "a non deve precedere b"
* VERO se "a deve precedere b"
nell'ordinamento specificato da "c".
La logica del confronto dipende dalla configurazione dei segni dei numeratori
0) (p < 0) & (u < 0): invertire "c"; cambiare segno a (p, u); proseguire da 8.
1) (p < 0) & (u = 0): terminare con VERO
2) (p < 0) & (u > 0): terminare con VERO
3) (p = 0) & (u < 0): terminare con FALSO
4) (p = 0) & (u = 0): terminare con FALSO
5) (p = 0) & (u > 0): terminare con VERO
6) (p > 0) & (u < 0): terminare con FALSO
7) (p > 0) & (u = 0): terminare con FALSO
8) (p > 0) & (u > 0): se p*v < q*u terminare con VERO, se no con FALSO