Erste Schritte wife husband

Dodi.Hudori

Mitglied
Hallo erstmal an alle die schon Java programmieren können :)

mal wieder gibts hier jemanden der sich mit Java beschäftigen soll fürs Studium. ICh WEISS das hier niemand hausaufgaben macht, sollt ihr auch nicht ;)

ich habe nur ein paar Fragen bzw. brauch nen Denkanstoß:

Das hier ist die Aufgabe:

Gegeben seien die beiden folgenden rekursiven Algorithmen (n sei dabei eine natürliche Zahl von 0 an gerechnet):
Algorithm: wife(n)
Input: n ganzzahlig, n>=0
Output: ?
if n = 0 then 1
else n - husband(wife(n - 1))
fi

Algorithm: husband(n)
Input: n ganzzahlig, n>=0
Output: ?
if n = 0 then 0
else n - wife(husband(n - 1))
fi
Jetzt kommt noch die Funktion fight hinzu, die ermittelt, ob am Hochzeitstag gestritten wird:
Algorithm: fight(n)
Input: n ganzzahlig, n>=0
Output: ?
not(wife(n) = husband(n))
hinzu.
Programmieren Sie die obigen Algorithmen als Java-Methoden

public static int wife(int n)

public static int husband(int n)

public static boolean fight(int n)

Wie entwickelt sich die Differenz der Streits an den Hochzeitstagen? Am nullten und am ersten Hochzeitstag gibt es Streit. Demzufolge ist die erste Differenz zwischen den Streitereien 1 (nämlich ein Jahr). Schreiben Sie die Methode

public static int[] differenceFights(int n)

zur Bestimmung der ersten n Differenzen zwischen den Streits an den Hochzeitstagen. Erkennen Sie eine Gesetzmäßigkeit bzw. Zahlenfolge?
Schreiben Sie innerhalb der main-Methode einen geeigneten Testrahmen, damit Sie folgende Fragen beantworten können:
Finden dann die Kupferne (nach 7 Jahren)- und die Silberne Hochzeit in Frieden oder im Streit statt?
Verstehen sich husband und wife über die Jahre hinweg besser oder schlechter?

Das Hier ist mein bisheriger Quellcode:
[Java]

import java.util.*;

public class Conflict {
public static int wife(int n) {
// TODO: source code
if(n<=0){
return 0;
}else {
return n - husband(wife(n - 1));
}
}

public static int husband(int n) {
// TODO: source code
if(n <= 0){
return 1;
}else {
return n - wife(husband(n - 1));
}
}

public static boolean fight(int n) {
// TODO: source code
int z;

return false;
}

/* public static int[] differenceFights(int n) {
// TODO: source code

}*/

public static void main(String args[]) {
// TODO: test data
System.out.println(wife(121)); //Ergebnis 75
System.out.println(husband(121)); //Ergebnis 75
}
}

[/Java]

Die wichtigste Fragefür mich währe zuerst einmal: wieso kommen in der Main für beide Funktionen die selben Werte raus? So macht diese Aufgabe doch keinen Sinn? Oder täusche ich mich?
 
Zuletzt bearbeitet von einem Moderator:

Dodi.Hudori

Mitglied
also ich habe den Code jetzt umgeschrieben, funktioniert auch soweit aber ich bin mir immer noch nicht sicher ob der Algorithmus so richtig ist? :/ Wäre nett wenn jemand nochmal drüber schauen könnte?

Java:
import java.util.*;

public class Conflict {
   public static int wife(int n) {
	// TODO: source code 
	   if(n<=0){
		   return 0;
	   }else {
		  return n - husband(wife(n - 1));  
	   }
   }

   public static int husband(int n) {
	// TODO: source code	
	   if(n <= 0){
		   return 1;
	   }else {   
		  return n - wife(husband(n - 1));  
	   }
   }

   public static boolean fight(int n) {
	// TODO: source code
	   int z;
	   if (husband(n) - wife(n) == 0){
		  return true; 
	   }
	return false;
  
	   }
   

   public static int[] differenceFights(int n) {
	// TODO: source code
	   
	   int[] differenceFights = new int[10];
	   
	   for(int i=0;i<differenceFights.length;i++){
		   
		   
		   differenceFights[i] = husband(n) - wife(n);

	   }
	   return differenceFights;
	   
   }

   public static void main(String args[]) {
	// TODO: test data	
	   
	   //Ausgabe der Jahrestage inklusive der Werte für den Tag
	   int i;
	   for(i=0;i<100;i++){
	   System.out.println("Jahrestag " +i);
	   System.out.println(wife(i));
   	   System.out.println(husband(i));
   	   
   	   if(fight(i)==true){
   		   System.out.println(" ");
   	   }else{
   		   System.out.println("STREIT");
   	   }
 	   //System.out.println(fight(i));

   }   
   }
}

Das hier wird ausgegeben:

Jahrestag 1
0
1
STREIT
Jahrestag 2
1
2
STREIT
Jahrestag 3
2
2

Jahrestag 4
2
3
STREIT
Jahrestag 5
3
3

Jahrestag 6
4
4

Jahrestag 7
4
5
STREIT
Jahrestag 8
5
5

Jahrestag 9
6
6

Jahrestag 10
6
6

Jahrestag 11
7
7

Jahrestag 12
7
8
STREIT
Jahrestag 13
8
8

Jahrestag 14
9
9

Jahrestag 15
9
9

Jahrestag 16
10
10

Jahrestag 17
11
11

Jahrestag 18
11
11

Jahrestag 19
12
12

Jahrestag 20
12
13
STREIT
Jahrestag 21
13
13

Jahrestag 22
14
14

Jahrestag 23
14
14

Jahrestag 24
15
15
 
H

hüteüberhüte

Gast
Hab deinen source mal etwa angepasst:
Java:
public class Conflict {

    public static int wife(int n) {
        if (n <= 0) {
            return 0;
        } else {
            return n - husband(wife(n - 1));
        }
    }

    public static int husband(int n) {
        if (n <= 0) {
            return 1;
        } else {
            return n - wife(husband(n - 1));
        }
    }

    public static boolean fight(int n) {
        return wife(n) != husband(n);
    }

    public static int[] differenceFights(int n) {
        int[] differenceFights = new int[n];
        for (int i = 0; i < differenceFights.length; i++) {
            differenceFights[i] = wife(i) - husband(i);
        }
        return differenceFights;
    }

    public static void main(String args[]) {
        for (int i = 0; i <= 25; i++) {
            System.out.println(i + ": " + (fight(i) ? "Stress" : ""));
        }

        int[] differenceFights = differenceFights(26);
        for (int i = 0; i < differenceFights.length; i++) {
            System.out.print("(" + i + " " + differenceFights[i] + "), ");
        }
        System.out.println();
    }
}
Code:
0: Stress
1: Stress
2: Stress
3: 
4: Stress
5: 
6: 
7: Stress
8: 
9: 
10: 
11: 
12: Stress
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: Stress
21: 
22: 
23: 
24: 
25: 
(0 -1), (1 -1), (2 -1), (3 0), (4 -1), (5 0), (6 0), (7 -1), (8 0), (9 0), (10 0), (11 0), (12 -1), (13 0), (14 0), (15 0), (16 0), (17 0), (18 0), (19 0), (20 -1), (21 0), (22 0), (23 0), (24 0), (25 0),
Bin net sicher, ob differenceFights das richtige berechnet oder net. Ist damit der Abstand zwischen den Fights gemeint?

Die Fragen sollten sich aber alle anhand der Ausgabe beantworten lassen.

Grüßle!
 

Dodi.Hudori

Mitglied
okay danke :) ich werd mal schauen was du geändert hast, die Aufgabe einreichen und schauen was mein Übungsleiter dazu sagt :)

bis dahin werd mich noch mit drei anderen aufgaben beschäftigen zu denen ich bestimmt auch noch Fragen hab, aller Anfang ist schwer :(

EDIT: mit differenceFights ist der Abstand zwischen den Ergebnissen gemeint genau! Das Ergebnis stimmt soweit auch, allerdings bin ich mir nicht sicher ob ich wife() und husband() richtig vom Pseudocode in Java übersetzt habe (auch wenn man "eigentlich" nicht viel verkehrt machen kann).
 
Zuletzt bearbeitet:

D4rkscr43m

Bekanntes Mitglied
da ist übrigens ein "Zahlendreher" drin, der zwar den Ausgang nicht beeinflusst aber die einzelnen Werte beeinflussen dürfte.

In der Beschreibung soll der Algorithmus wife 1 zurückgeben wenn 0 rein kommt und husband 0 wenn 0 rein kommt. Du hast es aber anders rum implementiert.

Wenn du dich nicht gerade in der Beschreibung verschrieben hast solltest du das vielleicht auch im Code wieder anpassen. Wie gesagt, es macht nicht wirklich einen Unterschied, ist aber falsch, wenn man annimmt, dass die Methode
Code:
wife(int)
den wife-Algorithmus implementieren soll.
 

Neue Themen


Oben