Calcoliamo e ordiniamo per valore crescente tutte le frazioni inferiori a 1 e con denominatore inferiore a un milione.
Quali sono le frazioni immediatamente prima e immediatamente dopo $1794/2022$ ?
(possibilmente senza chiederlo a Decimal Basic )
Problema pubblicato da Jean Moreau de Saint Martin su La Jaune et la Rouge maggio 2022
www.diophante.fr
A20415
Frazioni ordinate
Moderatori: Gianfranco, Bruno
Questo forum è una sezione del PORTALE DI BASE CINQUE
Frazioni ordinate
Franco
ENGINEER
noun. (en-juh-neer)
someone who does precision guesswork based on unreliable data provided by those of questionable knowledge.
See also wizard, magician
ENGINEER
noun. (en-juh-neer)
someone who does precision guesswork based on unreliable data provided by those of questionable knowledge.
See also wizard, magician
Re: Frazioni ordinate
$\displaystyle \frac{1794}{2022}=\frac{299}{337}=0,887240356$
Dobbiamo trovare i due numeri $x$ compresi tra 1 e 336 per cui $\displaystyle y=\frac{299x}{337}$ è il più vicino possibile ad un intero, in più e in meno
$\displaystyle \begin{cases}
x_1 = 133;\;y_1=118,00296736 \\
x_2 = 204;\;y_1=180,99703264
\end{cases}$
Andiamo a sottrarre dalla frazione uguale a 299/337 con denominatore più grande (inferiore a 1.000.000)
$\displaystyle \begin{cases}
\Large\frac{887133-118}{999879-133}=\frac{887015}{999746}=\normalsize 0,887240359\\
\Large\frac{887133-181}{999879-204}=\frac{886952}{999675}=\normalsize 0,887240353\\
\end{cases}$
Dobbiamo trovare i due numeri $x$ compresi tra 1 e 336 per cui $\displaystyle y=\frac{299x}{337}$ è il più vicino possibile ad un intero, in più e in meno
$\displaystyle \begin{cases}
x_1 = 133;\;y_1=118,00296736 \\
x_2 = 204;\;y_1=180,99703264
\end{cases}$
Andiamo a sottrarre dalla frazione uguale a 299/337 con denominatore più grande (inferiore a 1.000.000)
$\displaystyle \begin{cases}
\Large\frac{887133-118}{999879-133}=\frac{887015}{999746}=\normalsize 0,887240359\\
\Large\frac{887133-181}{999879-204}=\frac{886952}{999675}=\normalsize 0,887240353\\
\end{cases}$
[Sergio] / $17$
Re: Frazioni ordinate
Bene Sergio,
i tuoi risultati coincidono con quelli che ho trovato io con Visual Basic per Excel: Questa è la routine che ho usato:
i tuoi risultati coincidono con quelli che ho trovato io con Visual Basic per Excel: Questa è la routine che ho usato:
Codice: Seleziona tutto
Sub FrazioniOrdinate()
NumT = 1794
DenT = 2022
NumL = 1793
DenL = 2022
NumH = 1795
DenH = 2022
FracT = NumT / DenT 'target 1794/2022
FracL = NumL / DenL 'valore basso di primo tentativo 1793/2022
FracH = NumH / DenH 'valore alto di primo tentativo 1795/2022
DeltaL = FracT - FracL
DeltaH = FracH - FracT
For D = 1 To 999999 'testa tutti i denominatori sotto il milione
NL = Int(D * FracT) 'numeratore basso quello appena inferiore o uguale alla frazione target
NH = NL + 1 'numeratore alto = num basso +1
FL = NL / D
FH = NH / D
If FL <> FracT Then 'escludi dal check le frazioni equivalenti a 1794/2022
DL = FracT - FL
If DL < DeltaL Then 'se il delta verso il basso è minore del precedente usa la nuova frazione come riferimento
NumL = NL
DenL = D
FracL = NL / D
DeltaL = DL
End If
DH = FH - FracT
If DH < DeltaH Then 'se il delta verso l alto è minore del precedente usa la nuova frazione come riferimento
NumH = NH
DenH = D
FracH = NH / D
DeltaH = DH
End If
End If
Next D
'stampa i risultati sul foglio excel
Cells(1, 1) = NumL
Cells(1, 3) = DenL
Cells(2, 1) = NumT
Cells(2, 3) = DenT
Cells(3, 1) = NumH
Cells(3, 3) = DenH
End Sub
Franco
ENGINEER
noun. (en-juh-neer)
someone who does precision guesswork based on unreliable data provided by those of questionable knowledge.
See also wizard, magician
ENGINEER
noun. (en-juh-neer)
someone who does precision guesswork based on unreliable data provided by those of questionable knowledge.
See also wizard, magician
Re: Frazioni ordinate
VBA, scelta interessante
Io la controprova l'ho fatta con Python
Io la controprova l'ho fatta con Python
Codice: Seleziona tutto
a = 1794
b = 2022
g = 6
e = [0,1]
f = [1,1]
for c in range(1,10**g):
d = round(c/b*a)
if (d/c < a/b) & (a/b-d/c < a/b-e[0]/e[1]):
e[0] = d
e[1] = c
if (d/c > a/b) & (d/c-a/b < f[0]/f[1]-a/b):
f[0] = d
f[1] = c
print(a,b,a/b)
print(e, e[0]/e[1])
print(f, f[0]/f[1])
Nessuno dei due ha usato Decimal Basic1794 2022 0.887240356083086
[886952, 999675] 0.8872403531147623
[887015, 999746] 0.887240359051199
[Sergio] / $17$
Re: Frazioni ordinate
Infatti mi ero tenuto la porta aperta per il mio VBA
Non conosco Pyton ma è impressionante quante poche righe di codice siano necessarie!
So di essere stato abbastanza prolisso (i commenti e un po' di variabili potevo lasciarle fuori) ma anche ottimizzando la routine col Basic si va molto più lunghi ...
Franco
ENGINEER
noun. (en-juh-neer)
someone who does precision guesswork based on unreliable data provided by those of questionable knowledge.
See also wizard, magician
ENGINEER
noun. (en-juh-neer)
someone who does precision guesswork based on unreliable data provided by those of questionable knowledge.
See also wizard, magician
Re: Frazioni ordinate
Io ho cominciato a programmare negli anni 80 con il Basic (quello del C=64 per intenderci), poi VB/VBA, sempre da autodidatta
Negli anni 2000, dopo l'iscrizione al forum, Decimal Basic
Non ho mai affrontato i linguaggi più blasonati (Java, C++, ecc...) ma di recente ho scoperto Python e devo dire che mi trovo bene, è abbastanza facile ma comunque versatile e potente.
Negli anni 2000, dopo l'iscrizione al forum, Decimal Basic
Non ho mai affrontato i linguaggi più blasonati (Java, C++, ecc...) ma di recente ho scoperto Python e devo dire che mi trovo bene, è abbastanza facile ma comunque versatile e potente.
[Sergio] / $17$