Notifiche
Cancella tutti

[Risolto] Riportare gradi < 0 o > 360 tra 0 e 360 con formula algoritmica

  

0

G = gradi = 769°

G = G - int(G/30)×30 se >= 360

Ma se G < 0 come si modifica la formula sopra ?

Autore
1 Risposta



2

L'operazione si chiama "Riduzione al primo giro" ed è algoritmica (non una formula) in quanto si esprime o con espressioni condizionali della forma
* se <condizione1> allora <risultato1> altrimentiSe <condizione2> allora <risultato2> ... [altrimenti <risultatoDiDefault>]
o con comandi guardati della forma
* se <condizione> allora <azione>
NOTA
La clausola fra quadratelli [] è facoltativa, se occorre.
---------------
Hai commesso un errore scrivendo "G = gradi = 769°" invece di "G = 769": l'aritmetica opera sui soli valori, non sulle unità di misura.
---------------
Dal momento che le sottrazioni ripetute si abbreviano come divisione euclidea e le addizioni ripetute come moltiplicazioni, la riduzione (al primo {giro, quadrante, ottante}) si fa su numeri interi di gradi, trattando le eventuali frazioni dopo la riduzione.
---------------
La divisione euclidea, fra un dividendo intero N e un divisore naturale D, che produce un resto R e un quoziente Q (che, se R = 0, si chiama quoto) è definita dalle relazioni
* (N = Q*D + R) & (0 <= R < D)
e su ciò ci sono tre notazioni abbreviate che si usano nel descrivere algoritmi
* Q = N div D
* R = N mod D
* (Q, R) = divmod(N, D)
-----------------------------
Problema
Dato un numero "N" che esprime in gradi l'ampiezza di un angolo si cerca un numero "n" tale che
* (sin(n) = sin(N)) & (sin(n) = sin(N)) & (0 <= n < M)
dove
* M = se <giro> allora <360> altrimentiSe <quadrante> allora <90> altrimentiSe <ottante> allora <45>
---------------
Algoritmo risolutivo
1) Se N > M sottrarre M ripetutamente fino a ottenere meno di M
(semplice: n = N mod M).
2) Se N < 0 aggiungere M ripetutamente fino a raggiungere o superare lo zero
(meno semplice: k >= |N|/M; n = k*M + N).
-----------------------------
ESEMPI
---------------
* N = 769 > 0
* M = 360
* n = N mod M = 769 mod 360 = 49 ∈ [0, M)
---------------
* N = - 769 < 0
* M = 360
* |N|/M = 769/360 = 769/360 ~= 2.136
* k >= |N|/M ≡ k = 3
* n = k*M + N = 3*360 - 769 = 311 ∈ [0, M)
-----------------------------
Matematica a parte, ti mostro una possibile
PROCEDURA RISOLUTIVA
Se N ∈ [0, M) allora TERMINARE.
Se N < 0 allora
* calcolare |N|/M
* porre k = minimo numero naturale >= |N|/M
* porre n = k*M + N
* TERMINARE
Se N >= M allora
* porre n = N mod M
* TERMINARE

 



Risposta
SOS Matematica

4.6
SCARICA