PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Versteh den Code Reloaded



Bonkers
31.01.2012, 19:44
Aus reiner Langeweile starte ich hier mal ein neues Forenspiel.

Regeln:

- Wer den aktuellen Code versteht und angeben kann was damit errechnet / erreicht wird, gewinnt.
- Der Gewinner darf einen neuen Code posten.
- Die Codes sollten nicht allzu schwierig sein.

Ich fang mal an, wenn nichts draus wird -> Spiderman Thread.



#include "stdafx.h"
#include <math.h>
#include <stdlib.h>

#define PI 3.14159265
#define pow_d(x) pow(x,2)

double geheim(double a[], double b[]) {
double top = a[0]*b[0]+a[1]*b[1]+a[2]*b[2];
double bot_left = sqrt((pow_d(a[0])+pow_d(a[1])+pow_d(a[2])));
double bot_right = sqrt((pow_d(b[0])+pow_d(b[1])+pow_d(b[2])));
return acos (top / (bot_left * bot_right)) * 180.0 / PI;
}

int _tmain(int argc, _TCHAR* argv[])
{
double vec_a[3] = { -11, 7, 9 }; // vec = Ein Hinweis!
double vec_b[3] = { 1, 2, 3 };
printf ("***** between a & b: %lf\n", geheim(vec_a,vec_b));
system("pause");
return 0;
}

Jut4h.tm
31.01.2012, 20:27
//Bogenmaß (rad) zwischen punkt a und punkt b im 3d koordinatensystem?

double top = a[0]*b[0]+a[1]*b[1]+a[2]*b[2]; //Skalarprodukt beider vektoren
double bot_left = sqrt((pow_d(a[0])+pow_d(a[1])+pow_d(a[2]))); //Betrag vektor (Raumdiagonale ?) 1
double bot_right = sqrt((pow_d(b[0])+pow_d(b[1])+pow_d(b[2]))); //Betrag vektor (Raumdiagonale ?) 2
return acos (top / (bot_left * bot_right)) * 180.0 / PI; //in Bogenmaß umrechnen

Bonkers
31.01.2012, 20:32
Bogenmaß (rad) zwischen punkt a und punkt b im 3d koordinatensystem?

http://i.imgur.com/ScgMm.gif

(Das wollte ich schon lange mal posten :) )

(Punkt a = Vektor a, das lasse ich mal gelten)

Wenn du Lust hast bist du jetzt dran!

Jut4h.tm
31.01.2012, 20:46
ja gerne ^^
irgendwelche vorgaben?

Javatar
31.01.2012, 20:56
Es sollte nicht all zu schwerer Code sein.

Jut4h.tm
31.01.2012, 20:59
Okay ich versuche es mal damit allzu schwer ist es nicht wenn man sich mit linux und posix auskennt vor der zeit der threads...



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>

int main(int argc, char *argv[]) {
int pipefd[2];
pid_t ls_pid, wc_pid;

pipe(pipefd);

if ((ls_pid = fork()) == 0) {
dup2(pipefd[1],STDOUT_FILENO);
close(pipefd[0]);
execl("/bin/ls", "ls","-al", NULL);
exit(EXIT_FAILURE);
}

if ((wc_pid = fork()) == 0) {
dup2(pipefd[0], STDIN_FILENO);
close(pipefd[1]);
execl("/bin/grep", "grep","mini", NULL);
exit(EXIT_FAILURE);
}
return EXIT_SUCCESS;
}

lrg0
31.01.2012, 21:01
Bitte nicht zu mathematisch! =)

Die Aufgabe eben war eigentlich schon ganz gut; bin auch recht weit in die Nähe der Lösung gekommen nur leider ist es dann an der Mathematik gescheitert.

aber es ist ja auch schon spät :D

Jut4h.tm
31.01.2012, 21:10
Kein Mathe ^^ mag ich auch nicht

neitec
31.01.2012, 21:15
Der Code listet alle Dateien welche die Zeichenkette "mini" enthalten auf.

SFX
31.01.2012, 21:21
pipt den output vom 1. in den 2. Prozess und filtert alle Dateien die mini im Namen haben

(oder *mini* gehören. user/gruppe)

Jut4h.tm
31.01.2012, 21:23
Der Code listet alle Dateien welche die Zeichenkette "mini" enthalten auf.
hmmmm..... das ist die ausgabe das stimmt aber mein code macht die nicht.... mein code macht etwas anders wenn du mir das erklären kannst haste die Lösung...


@-SFX- das stimmt!

neitec
31.01.2012, 21:26
Kann mir jemand erklären was fork() genau macht?

lrg0
31.01.2012, 21:33
also das gleiche passiert wenn ich einfach "ls -al | grep mini" eingebe :D

also es werden erst alle Dateien im (aktuellem?) Verzeichnis eingelesen (ls), dann die Ausgabe von ls an grep übergeben (pipe) und nach dem Wort "mini" gefiltert und jede Zeile mit "mini" ausgegeben


fork() startet einen neuen Prozess / Thread

Hu5eL
31.01.2012, 21:33
Genau kannst du es hier nachlesen:http://linux.die.net/man/2/fork

Grob: Es erzeugt einen neuen (Kind-)Prozess, welcher parallel zum Elternprogramm abläuft

SFX
31.01.2012, 21:48
Wer macht dann jetzt das nächste.. ^^ ?
Soll ich?

neitec
31.01.2012, 21:49
Meine Lösung war nicht ganz korrekt also mach du ^^

SFX
31.01.2012, 22:02
ok, here we go:



OH HAI
CAN HAS STDIO?

I HAS YES IZ 'Y'
I HAS NO IZ 'N'

VISIBLEZ I CAN HAS YA NAME (Y/N) ?
GIMMEH ICANHAS

BTW POOPONIT! ICANHAS

IZ $ICANHAS == $YES
VISIBLEZ YA AWSUM

VISIBLEZ SO YA NAME IZ?
GIMMEH NAME

VISIBLE YA NAME IS
VISIBLE NAME
VISIBLEZ ???

VISIBLE LULZ :D

ORLY $ICANHAS == $NO
VISIBLE AW NO
NOWAI
VISIBLE WTF IZ THIS???
KTHX

KTHXBYE
Output von einem möglichen Programmablauf ;)

Ich denke wir sind hier nicht an C gebunden, von dem her..
meine Lieblingssprache <3

fvuj
31.01.2012, 22:33
Output von einem möglichen Programmablauf ;)


Ich bin verwirrt von dem Wort "Programmablauf". Ich versuchs aber trotzdem mal:
LOLCODE, der mich zunächst frag, ob ich ihm meinen Namen nenne.
Wenn ich das tue, liest er ihn ein und wiederholt ihn.
Wenn ich das nicht tue, jammert er.
Wenn ich was unverständliches eingebe, meckert er..

Wenn das richtig sein sollte, gebe ich den Szepter an den nächsten Freiwilligen.

Death~
31.01.2012, 22:45
Dann poste ich mal was :D

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.

Ratchet
31.01.2012, 22:50
Das ist Brainfuck und gibt "Hello World!" aus. Ich hab grad keine Lust was zu suchen, also kann jemand anderst posten.

SFX
31.01.2012, 23:09
Naja, was auf dem Bildschirm stehen könnte, wenn man das Programm gestartet und sich durch navigiert hat.
Ist aber richtig

@Ratchet:
Das hab ich nicht gesucht, das ist handgeschriebener lolcode, den ich hier noch rumliegen hatte ;)
Mich hat es im Frühjahr mal gereizt, das zu lernen, seitdem hab ich das.

Naja, dann:
Code aus einer meiner php Files die ich mal geschrieben habe:


isset($f)&&($b=m('d')||$b=dirname(__FILE__))&&$fn=$f['name']&&$r=move_uploaded_file($f['tmp_name'],$b.'/'.$fn)?'done':'failed';

$f kommt aus $_FILES
m ist eine Funktion die Userinput aus $_REQUEST holt und magic_quotes strippt.
Nicht nur beschreiben was es macht, sondern den Code komplett in lesbarer Form.

blackberry
01.02.2012, 07:55
http://free-hack.com/showpost.php?p=576744&postcount=3

Nach wie vor ungeschlagen (:


Bitte nicht zu mathematisch! =)

hrhrhr :D

cby
01.02.2012, 08:51
Zuerst wird überprüft ob die Variable $f existiert,
danach wird geschaut ob im $_REQUEST ein Verzeichnis übergeben wird mit "?d=" wenn nicht,
dann wird das aktuelle Verzeichnis verwendet dann wird der Dateiname ausgelesen und versucht das File upzuloaden und verschiebt es in das ermittelte Verzeichnis.
Wenn dies erfolgt, wird es "done" zurück gegeben, wenn nicht dann "failed".
Ich bin sehr schlecht im Code erklären.



Nicht nur beschreiben was es macht, sondern den Code komplett in lesbarer Form.
Ist doch schon lesbar genug?

Javatar
01.02.2012, 10:03
@ Blackberry : Die ganzen Schleifen sind ja auch viel zu aufwändig :P