Algorithmus für kart. Produkt: als int [] Feld repräsentiert

easyJAVA?

Mitglied
Hallo!

hier die Aufgabenstellung, die wir bekommen haben:

Geben Sie einen Algorithmus (Java od. Pseudocode) zur Bestimmung des kartesischen Produkts zweier Mengen A und B an. Die beiden Mengen seien jeweils als int[]-Feld repräsentiert.
Hinweis: Das kartesische Produkt kombiniert jedes Element der einen Menge mit jedem Element der anderen Menge, d.h für A={a,b} und B={c,d,e} gilt:

A x B={(a,c),(a,d),(a,e),(b,c),(b,d),(b,e)}

das verursacht mir mehr kopfzerbrechen, als man denkt. Mein Ansatz sieht so aus:7

Java:
class Zeichenkette{ 
private char []z; //<- hier Zeichenkette rein, oder? 

public int laenge (){ 
int l=0; 
while (z[l]!= '\0'){
l++;
}
return l;
}
}

was meint ihr, ist das die richtige Richtung? mein Eclipse, zeigt mir wie so immer an, dass das Mist ist..
schreibe in 2Tagen eine Klausur und das war eine Übungsaufgabe, glaube zwar nicht, dass die drankommt, aber sicher ist sicher 😉 So interessant ich das Gebiet auch finde, die Programmieraufgaben machen uns alle zu schaffen und wir setzen auf die Wissenfragen um die Klausur zu bestehen 😀

habe im Netz eine Möglichkeit gefunden, dass mit einem Array zu machen:

Java:
public class Example {

    public static <T> List<Tuple<T>> cartesianProduct(List<Set<T>> sets) {
        List<Tuple<T>> tuples = new ArrayList<Tuple<T>>();

        for (Set<T> set : sets) {            
            if (tuples.isEmpty()) {
                for (T t : set) {
                    Tuple<T> tuple = new Tuple<T>();
                    tuple.add(t);    
                    tuples.add(tuple);
                }                
            } else {
                List<Tuple<T>> newTuples = new ArrayList<Tuple<T>>();

                for (Tuple<T> subTuple : tuples) {
                    for (T t : set) {
                        Tuple<T> tuple = new Tuple<T>();
                        tuple.addAll(subTuple);
                        tuple.add(t);
                        newTuples.add(tuple);
                    }
                }                

                tuples = newTuples;
            }
        }

        return tuples;
    }
}

wie könnte man das umschreiben, das man das als int[]-Feld schreiben kann?

Vielen Dank für eure Hilfe.
 
das verursacht mir mehr kopfzerbrechen, als man denkt. Mein Ansatz sieht so aus:7

Java:
class Zeichenkette{ 
private char []z; //<- hier Zeichenkette rein, oder? 

public int laenge (){ 
int l=0; 
while (z[l]!= '\0'){
l++;
}
return l;
}
}
Keine Ahnung was das mit der Aufgabenstellung zu tun hat aber die Länge eines Arrays lässt sich direkt mit
Code:
myArray.length
ermitteln.
habe im Netz eine Möglichkeit gefunden, dass mit einem Array zu machen:
Java:
public class Example {

    public static <T> List<Tuple<T>> cartesianProduct(List<Set<T>> sets) {
        List<Tuple<T>> tuples = new ArrayList<Tuple<T>>();

        for (Set<T> set : sets) {            
            if (tuples.isEmpty()) {
                for (T t : set) {
                    Tuple<T> tuple = new Tuple<T>();
                    tuple.add(t);    
                    tuples.add(tuple);
                }                
            } else {
                List<Tuple<T>> newTuples = new ArrayList<Tuple<T>>();

                for (Tuple<T> subTuple : tuples) {
                    for (T t : set) {
                        Tuple<T> tuple = new Tuple<T>();
                        tuple.addAll(subTuple);
                        tuple.add(t);
                        newTuples.add(tuple);
                    }
                }                

                tuples = newTuples;
            }
        }

        return tuples;
    }
}

wie könnte man das umschreiben, das man das als int[]-Feld schreiben kann?
?? Hab mir den Code nciht angeschaut, aber der ist doch viel zu komplex für die Aufgabenstellung. Die Aufgabe lässt sich doch mit einer simplen Verschachtelung zweier for-Schleifen lösen.
 
?? Hab mir den Code nciht angeschaut, aber der ist doch viel zu komplex für die Aufgabenstellung. Die Aufgabe lässt sich doch mit einer simplen Verschachtelung zweier for-Schleifen lösen.

Habe hier die Definition einer For-Schleife vor mir liegen:
"Die for-Schleife wiederholt einer Anweisung solange, wie eine Bedingung zutrifft."

Java:
//von der Struktur her:

for (Startwert(e); Abbruchbedingung;Aktualisierung(en))
{
Anweisungen
}

hmm ok, für dich scheint das einfach zu sein, aber ich habe keine Ahnung, wie mir das weiterhelfen kann?
und wie ich das int-Feld einbinden kann.

evtl in die Richtung:

Java:
for(int a, int b, int c, int d, int e; ??; a*c, a*d, a*e, b*c, b*d, b*e)
{
??
}

Ich hab da echt nicht viel Ahnung von. Muss irgendwas ganz simples sein, da unsere Programmierkenntnisse nicht sehr fortgeschritten sind...
 
du hast doch selber schon etwas in der Richtung
Java:
                for (Tuple<T> subTuple : tuples) {
                    for (T t : set) {
                        Tuple<T> tuple = new Tuple<T>();
                        tuple.addAll(subTuple);
                        tuple.add(t);
                        newTuples.add(tuple);
                    }
                }

eine Schleife geht über a, b,
die innere zweite Schleife über c, d, e

beim ersten äußeren Durchlauf wird demnach a erst mit c, dann mit d und schließlich e kombiniert,
danach dasselbe mit b


------

bevor du jetzt wieder "for(int c, int d, int e" postest löse wohl lieber erstmal folgende andere Aufgabe:
"füge drei Elemente c, d, e in eine Liste oder ein Array ein und gib sie mithilfe einer Schleife aus"
kannst du das?
wenn nicht dann erübrigt sich eh vorerst, über viel komplizierteres kartesisches Produkt zu reden
 
Zuletzt bearbeitet von einem Moderator:
du hast doch selber schon etwas in der Richtung

hab ich ja aus dem Netz 😱 deswegen verstehe ich es ja auch nicht...

bevor du jetzt wieder "for(int c, int d, int e" postest löse wohl lieber erstmal folgende andere Aufgabe:
"füge drei Elemente c, d, e in eine Liste oder ein Array ein und gib sie mithilfe einer Schleife aus"
kannst du das?
wenn nicht dann erübrigt sich eh vorerst, über viel komplizierteres kartesisches Produkt zu reden

hmm, aber wir sollen das doch mit einem int[]-Feld lösen und nicht mit einem Array?

aber um ehrlich zu sein, nein ich kann das nicht.

Könntest du nicht mir aufzeigen, wie du das mit einem int[]-Feld lösen würdest?

Ich weiß ist absolut nicht Sinn der Sache hier, aber wir haben Programmieren nur im 1.Semester und es ist auch nur ein Fach und danach haben wir mit nichts dergleichen zu tun. Deswegen versuchen wir Studenten, dank des tollen Profs den wir haben, die Klausur mit Wissenfragen (2/3 der Klausur) zu bestehen und typische Aufgaben, wie diese hier lernen wir halt auswendig, falls sie drankommen sollten. Wie ich oben schon erwähnt habe, an für sich ist Programmieren total interessant, aber so wie das unser Prof vermittelt, sinkt das Interesse rapide. Und innerhalb kurzer Zeit das lernen ist nicht drin. Java ist wie eine Sprache, man muss Stück für Stück fortschritte machen.

Deshalb versuche ich nun Crashkurs, lerne die Theorie und mögl. Programme einfach auswendig. :autsch:
 
> Könntest du nicht mir aufzeigen, wie du das mit einem int[]-Feld lösen würdest?

Galileo Computing :: Java ist auch eine Insel - 3 Klassen und Objekte
3.8 Arrays
(das ist kein Thema für 15 Min.)
(vielleicht lieber auch alle Kapitel davor von 2.2 angefangen..)

> Deshalb versuche ich nun Crashkurs, lerne die Theorie und mögl. Programme einfach auswendig.

immerhin ehrlich, besser als Wulff, aber ich zumindest mache nicht deine Aufgaben
 
> Könntest du nicht mir aufzeigen, wie du das mit einem int[]-Feld lösen würdest?

Galileo Computing :: Java ist auch eine Insel - 3 Klassen und Objekte
3.8 Arrays
(das ist kein Thema für 15 Min.)
(vielleicht lieber auch alle Kapitel davor von 2.2 angefangen..)

> Deshalb versuche ich nun Crashkurs, lerne die Theorie und mögl. Programme einfach auswendig.

immerhin ehrlich, besser als Wulff, aber ich zumindest mache nicht deine Aufgaben

Das Problem ist nicht die Java Programmierung sondern das die Indexe eines Array nur ints sind. Angenommen die Zahl 6 kommt in der ersten und zweiten Menge vor, z.B. int a=6 und int d = 6. Mit welchem Index sollen das kart. Produkt von a und d gespeichert werden?
 
Das Problem ist nicht die Java Programmierung sondern das die Indexe eines Array nur ints sind. Angenommen die Zahl 6 kommt in der ersten und zweiten Menge vor, z.B. int a=6 und int d = 6. Mit welchem Index sollen das kart. Produkt von a und d gespeichert werden?
:bahnhof:
Es geht hier doch nur um das kartesische Produkt zweier Mengen? Also die Kombination jedes Elements aus Menge A mit jedem Element aus Menge B. Was hat das mit "die Indexe eines Array nur ints sind" zu tun. Zumal hier ja auch Pseudo Code erlaubt ist.
 
Oben ist ja ein Beispiel angegeben, du musst FÜR JEDES Element aus der ersten Menge, ÜBER ALLE Elemente der zweiten Menge iterieren und das "Tupel/geordnete Paar" in das Ergebnis eintragen. Klingt bisschen abstrakt, aber in Pseudocode wären das einfach zwei ineinander geschachtelte Schleifen. Das Ergebnis kann z.B. int[][]-Array sein.
 
Code:
		int[] a = { 1, 2, 3, 4 };
		int[] b = { 5, 6, 7 };
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < b.length; j++) {
				System.out
						.println("AxB=" + a[i] + "x" + b[j] + "=" + (a[i]*b[j]));
			}
		}
 

Zurück
Oben