Duale Eingabe in C-Programm
-
fricky schrieb:
deine hammingdistanz-funktion sieht seltsam aus. wenn sie mit strings arbeiten soll (und es sieht so aus), dann hat das XOR dort doch nichts verloren. vorschlag (ungetestet):
// geht davon aus, dass beide strings gleich lang sind int HammingDistance (char Code[],char Code2[]) { int Hamming; for (Hamming=0; *Code; Code++, Code2++) if (*Code != *Code2) Hamming++; return Hamming; }
Wenn ich das richtig erkenne würde dann allerdings deine Funktion nur überprüfen ob die beiden Codewörter unterschidlich sind. Ich muss allerdings die enthaltenen 1 aus dem XOR Produkt der beiden Codwörter zählen.
fricky schrieb:
bei der ausgabe z.b. kannste ja vorn nullen anhängen soviel du willst.
Ich brauche die aber nicht bei der Ausgabe sondern bei der Übergabe an die Hamming Distance.
Bsp.:
0101
1111
----
1010 Hamming Distance von 2Da der Rechner aber die 0 abschneidet kommt das raus:
101
1111
----
010 HD von 1
-
Ok hab gerade deine Funktion getestet, die funktioniert einwandfrei, ich verstehe allerdings nicht wieso.
-
fricky schrieb:
es gibt eine programmiersprache, die mit 'axiomen' arbeitet? wie geht das? oder bedeutet der begriff da was anderes?
Das ist ein lustiger Sport in funktionalen Sprachen, nämlich möglichst alle Funktionen durch andere definieren, und zwar solange, bis nur mehr eine Handvoll überbleibt. Die werden dann gerne Axiome ganannt, wahrscheinlich um damit anzugeben, dass es nur so wenige sind. Mit Sprachen die nur bei Bedarf auswerten, geht das echt wunderbar, weil zB ein
if
eine ganz normale Funktion sein kann.Chris12 schrieb:
Wenn ja habe ich das deshalb gemacht das ich die 1 aus dem XOR Produkt zählen kann.
Aber eine Lösung für int's zu finden, wäre nicht wirklich schwer gewesen:
http://en.wikipedia.org/wiki/Hamming_distance#Algorithm_example
-
Chris12 schrieb:
Wenn ich das richtig erkenne würde dann allerdings deine Funktion nur überprüfen ob die beiden Codewörter unterschidlich sind. Ich muss allerdings die enthaltenen 1 aus dem XOR Produkt der beiden Codwörter zählen.
XOR kannst nehmen, wenn die codewörter binär vorliegen (die summe der 1-bits ist dann die hamming-distanz). aber wenn du strings (0 und 1 als ascii-zeichen) verwendest, dann musste eigentlich nur die unterschiede zählen.
Chris12 schrieb:
fricky schrieb:
bei der ausgabe z.b. kannste ja vorn nullen anhängen soviel du willst.
Ich brauche die aber nicht bei der Ausgabe sondern bei der Übergabe an die Hamming Distance.
klar, dafür müssen die strings gleich lang sein. also, den kürzeren vorn mit nullen auffüllen, bis er so lang ist, wie der längere.
Chris12 schrieb:
Ok hab gerade deine Funktion getestet, die funktioniert einwandfrei, ich verstehe allerdings nicht wieso.
na, die zählt einfach nur ungleiche zeichen. so ist doch die hamming-distanz definiert, oder verwechsle ich das jetzt mit irgendwas?
-
[/quote]
na, die zählt einfach nur ungleiche zeichen. so ist doch die hamming-distanz definiert, oder verwechsle ich das jetzt mit irgendwas?
:)[/quote]Ne ne das stimmt schon so, habs beim Debuggen auch gecheckt, ich verstehe nur nicht wie die for schleife funktioniert.
Ich habe bisher die for schleife nur so kennengelernt for(i=0; i<=x ;i++)
Ich verstehe die Schleifenbedingung nicht so ganz weil du sagst ja, wenn ich das richtig verstehe, das die schleife solange laufen soll wie der Zeiger auf Code ist und zählst dann Code und Code2 hoch.
-
na, die zählt einfach nur ungleiche zeichen. so ist doch die hamming-distanz definiert, oder verwechsle ich das jetzt mit irgendwas?
Könnte man meinen, weil's Wikipedia in dem Python-Beispiel genauso macht. Aber ich glaub auch, dass das so stimmt.
Ich verstehe die Schleifenbedingung nicht so ganz weil du sagst ja, wenn ich das richtig verstehe, das die schleife solange laufen soll wie der Zeiger auf Code ist und zählst dann Code und Code2 hoch.
while (*Code != '\0') // Solange der Zeiger auf ein Byte zeigt, das kein "Nullzeichen" ist // "Nullzeichen" sind einfach nur Null, deshalb ist das gleiche das wie while (*Code != 0) // und weil ein != entweder Null oder Eins ergibt, ist das das gleiche wie while (*Code)
Man gewöhnt sich gerne dran.
-
Chris12 schrieb:
Ich habe bisher die for schleife nur so kennengelernt for(i=0; i<=x ;i++)
Ich verstehe die Schleifenbedingung nicht so ganz weil du sagst ja, wenn ich das richtig verstehe, das die schleife solange laufen soll wie der Zeiger auf Code ist und zählst dann Code und Code2 hoch.in for-schleifenköpfe kannste alles mögliche einbauen, for (a;b;c) heisst
a - initialisierung, geschieht nur vor dem ersten schleifendurchlauf (kann auch vor die for-anweisung gesetzt werden).
b - abbruchbedingung, wenn b==0 dann ist schluss.
c - was nach jedem schleifendurchlauf gemacht werden soll (kann auch ganz unten in der schleife stehen).
-
µngbd schrieb:
na, die zählt einfach nur ungleiche zeichen. so ist doch die hamming-distanz definiert, oder verwechsle ich das jetzt mit irgendwas?
Könnte man meinen, weil's Wikipedia in dem Python-Beispiel genauso macht. Aber ich glaub auch, dass das so stimmt.
ja, hier: http://de.wikipedia.org/wiki/Hammingdistanz#Definition
diese summenformel da addiert einsen, wenn x(i) != y(i), passt schon.
-
Ok habs verstanden,
die Funktion von Wiki funktioniert einwandfrei. Das macht des Programm um einiges Kompakter. Danke an euch zwei. Damit ist die erste Teil aufgabe fertig ^^.
Werd für heute Pause machen und morgen die Hamming Funktion fertig schreiben. Danach muss ich noch Paritätsbits erstellen, bin mal gespannt ob das wenigstens reibungslos von statten geht.Ansonst weis ich ja wo man mir evtl helfen kann
Also danke nochmal und gute Nacht.ψ
-
Ok habs verstanden,
die Funktion von Wiki funktioniert einwandfrei. Das macht des Programm um einiges Kompakter. Danke an euch zwei. Damit ist die erste Teil aufgabe fertig ^^.
Werd für heute Pause machen und morgen die Hamming Funktion fertig schreiben. Danach muss ich noch Paritätsbits erstellen, bin mal gespannt ob das wenigstens reibungslos von statten geht.Ansonst weis ich ja wo man mir evtl helfen kann
Also danke nochmal und gute Nacht.
-
ich weiss ja nicht, ob haskell schnellen ... Glaub ich nicht. Das Ding ist lazy.
Ja, Haskell kann. Und Glauben braucht man fuer Religionen nicht zum Programmieren.
vorschlag (ungetestet):
Dem geuebten Auge fallen sofort einige Sachen auf. Was, wenn Strings nicht gleichlang sind?
-
knivil schrieb:
ich weiss ja nicht, ob haskell schnellen ... Glaub ich nicht. Das Ding ist lazy.
Ja, Haskell kann.
Echt? Wie? Weil den Code nur durch den GHC jagen reicht ja nicht.