[Matematica pura, fisica, chimica, ecc.: problemi di allenamento del cervello non legati in alcun modo al commercio - pagina 233

 

In generale, senza offesa per gli sviluppatori di MQL, ma il numero di funzioni matematiche https://docs.mql4.com/ru/math

è vergognosamente piccolo a mio parere, come lo è in VB. E le definizioni di alcuni di essi, come MathFloor, sono oscure.

-

Prendete la funzione MathMax, ci sono solo 2 argomenti. E se ho bisogno di 10 o 20, allora in cosa consiste?

Questo è ciò che appare in VB con il mio modulo:

-

x=max(x1...x20) 'trova il valore massimo di 20 variabili;

x=max(x1, y, z, p) 'trova il valore massimo di 4 variabili;

 
MaStak >>:

А вобще, какой то грек сказал что Pi=66/21

Il greco deve aver detto 22/7 (lo stesso che 66/21).

Più preciso sarebbe 355/113 (la precisione è 3*10^(-7) ).

La prossima frazione migliore è già 103993/ 33102 (precisione dell'ordine di 6*10^(-10) ).

2 Richie: Beh, hai dovuto fare anche il VB. E allora, perché va a caccia delle Metacquote?

 
Signori, diventate finalmente creativi! Il punto non è usare questo programma per trovare pi greco, ma decifrare come il programma l'ha fatto. Leggi l'argomento: "...problemi di allenamento del cervello...". Questo programma fa parte della serie "Fun with C". C'è un concorso per comporre gli algoritmi C più oscuri e misteriosi. Avete il codice sorgente e il risultato, ma dovete capire il principio di funzionamento. L'algoritmo stesso è il compito da risolvere. Ha bisogno di essere "incrinato". Questo richiede che tu "rompa" il tuo cervello.
 

Prendete uno scherzo


 
Mischek писал(а) >>

Umorismo

Mischek, siamo ex specializzandi, stiamo risolvendo problemi di 8° grado, non di 11° :)

Poveri bambini.

 
C-4 >>: Сам алгоритм - это и ест задача для решения. Его надо "взломать". Для этого требуется "поломать" свой мозг.

Ecco, sospettavo che fosse un problema...

Ok, vediamo.

int a=10000, b, c=2800, d, e, f[2801], g;
int main(void){
   for(; b- c;) f[ b++]= a/5;
   for(; d=0, g= c*2; c-=14,printf("%.4d", e+ d/ a), e= d% a)
      for( b= c; d+= f[ b]* a, f[ b]= d%-- g, d/= g--,-- b; d*= b);
}

Affrontiamo il primo ciclo,

   for(; b- c;) f[ b++]= a/5;

Il ciclo viene eseguito finché l'espressione b - c viene valutata come vera. Cosa è vero in C? Tutto ciò che non è zero, credo. Quindi, il ciclo che aumenta b da zero e riempie l'array f[] viene eseguito fino a quando b è uguale a c, cioè fino a 2800. La matrice f[] è riempita con gli stessi numeri 10000/5 = 2000.

Non c'è molto di sbagliato finora?

 

C'è solo un modo per calcolare pi greco comunque, e il resto è una mashka in una gonna diversa, o parte di una mashka :)

 
Mathemat >>:

Ну вот, подозревал ведь, что это задачка...

ОК, смотрим.

Разбираемся с первым циклом,

Цикл выполняется до тех пор, пока b - c = true. Что такое true в Си? Кажись, любой не нуль. Значит, цикл увеличения b от нуля и заполнения массива f[] выполняется до тех пор, пока b не сравняется с с, т.е. до 2800. Массив f[] заполняется одинаковыми числами 10000/5 = 2000.

Пока не сильно ошибся?

Facciamo un tentativo.

Finora giusto. Continuiamo a guardare.

 

Ma più avanti non è chiaro. La condizione d=0 nella prima intestazione (ciclo esterno) mi dà fastidio in qualche modo. È sempre vero?

 

Poi, un ciclo annidato. Lo riscriviamo:

for( ; g= c*2; )
{
d=0;
   for( b= c; -- b; d*= b)
{
d += f[ b] * a;
g
--;
 f[ b] = d % g;
 d /= g;
g--;
}
c-=14;
printf("%.4d", e+ d/ a);
e= d% a;
}
L'ordine è particolarmente importante qui.  Controllare che non abbia ancora mentito? 
Poi si va avanti.

// in realtà parlando for(; g=c*2; ) sta rebbe molto meglio in questa edizione: for( g=c*2; g !=0; )