[Archiv!] Reine Mathematik, Physik, Chemie usw.: Gehirntrainingsprobleme, die in keiner Weise mit dem Handel zusammenhängen - Seite 233

 

Generell, nichts gegen die Entwickler von MQL, aber die Anzahl der mathematischen Funktionen https://docs.mql4.com/ru/math

ist meiner Meinung nach beschämend klein, wie es auch in VB der Fall ist. Und die Definitionen einiger von ihnen, wie MathFloor, sind undurchsichtig.

-

Nehmen Sie die Funktion MathMax, sie hat nur 2 Argumente. Und wenn ich 10 oder 20 brauche, was wird dann daraus?

So sieht es in VB mit meinem Modul aus:

-

x=max(x1...x20) 'findet den maximalen Wert von 20 Variablen;

x=max(x1, y, z, p) 'findet den maximalen Wert von 4 Variablen;

 
MaStak >>:

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

Im Griechischen muss es 22/7 heißen (dasselbe wie 66/21).

Eine genauere Angabe wäre 355/113 (die Genauigkeit beträgt 3*10^(-7) ).

Der nächstbeste Bruch ist bereits 103993/ 33102 (Genauigkeit in der Größenordnung von 6*10^(-10) ).

2 Richie: Na ja, du musstest ja auch noch die VB beenden. Warum sind Sie dann hinter den Metacquotes her?

 
Meine Herren, werden Sie endlich kreativ! Es geht nicht darum, dieses Programm zu benutzen, um Pi zu finden, sondern zu entschlüsseln, wie das Programm das gemacht hat. Lesen Sie das Thema: "...Probleme mit dem Gehirntraining...". Dieses Programm ist aus der Reihe "Spaß mit C". Es gibt einen Wettbewerb um die obskursten und geheimnisvollsten C-Algorithmen. Sie haben den Quellcode und das Ergebnis, aber Sie müssen das Funktionsprinzip herausfinden. Der Algorithmus selbst ist die Aufgabe, die es zu lösen gilt. Sie muss "geknackt" werden. Dazu müssen Sie Ihr Gehirn "brechen".
 

Mach einen Witz


 
Mischek писал(а) >>

Mach einen Witz

Mischek, wir sind ehemalige Postgraduierte, wir lösen Probleme der 8. Klasse, nicht der 11 :)

Die armen Kinder.

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

Siehst du, ich habe schon vermutet, dass es ein Problem ist...

Okay, schauen wir mal.

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);
}

Kümmern wir uns um die erste Schleife,

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

Die Schleife wird so lange ausgeführt, wie der Ausdruck b - c als wahr ausgewertet wird. Was ist in C wahr? Alles, was nicht Null ist, so scheint es. Die Schleife, die b von Null erhöht und das Array f[] füllt, wird so lange ausgeführt, bis b gleich c ist, d. h. bis 2800. Das Array f[] wird mit denselben Zahlen gefüllt: 10000/5 = 2000.

Bis jetzt nicht viel falsch gemacht?

 

Es gibt sowieso nur eine Möglichkeit, Pi zu berechnen, und der Rest ist ein Mashka in einem anderen Rock, oder ein Teil eines Mashka :)

 
Mathemat >>:

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

ОК, смотрим.

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

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

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

Versuchen wir es mal.

Bis jetzt stimmt das. Lasst uns weiter beobachten.

 

Aber weiter ist es nicht klar. Die Bedingung d=0 in der ersten Kopfzeile (äußere Schleife) stört mich irgendwie. Stimmt das immer?

 

Als nächstes folgt eine verschachtelte Schleife. Wir schreiben es um:

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;
}
Die Reihenfolge ist hier besonders wichtig.  Überprüfen Sie, ob ich noch nicht gelogen habe? 
Dann machen wir weiter.

// Eigentlich würde for(; g=c*2; ) in dieser Ausgabe viel besser aussehen: for( g=c*2; g !=0; )