diff --git a/aufgabengenerator_brueche_addieren_ungleichnamig_v6.py b/aufgabengenerator_brueche_addieren_ungleichnamig_v6.py
new file mode 100644
index 0000000..14463cf
--- /dev/null
+++ b/aufgabengenerator_brueche_addieren_ungleichnamig_v6.py
@@ -0,0 +1,168 @@
+import xml.etree.ElementTree as ET
+import random
+from math import gcd
+
+def create_cloze_question(name, questiontext, correct_answers, wrong_answers, feedback, tags):
+ question = ET.Element('question', attrib={'type': 'cloze'})
+
+ name_elem = ET.SubElement(question, 'name')
+ text_elem = ET.SubElement(name_elem, 'text')
+ text_elem.text = name
+
+ questiontext_elem = ET.SubElement(question, 'questiontext', attrib={'format': 'html'})
+ text_elem = ET.SubElement(questiontext_elem, 'text')
+
+ # Erstelle die Tabelle für die Lücken
+ cloze_text = "
"
+ cloze_text += ""
+ cloze_text += f"Zähler: {{1:SHORTANSWER:={correct_answers[0]}~%0%{wrong_answers[0][0]}#{wrong_answers[0][1]}}} | "
+ cloze_text += "
"
+ cloze_text += ""
+ cloze_text += f"Nenner: {{1:SHORTANSWER:={correct_answers[1]}~%0%{wrong_answers[1][0]}#{wrong_answers[1][1]}}} | "
+ cloze_text += "
"
+
+ # Prüfe, ob der Bruch gekürzt werden kann
+ if gcd(correct_answers[0], correct_answers[1]) > 1:
+ common_divisor = gcd(correct_answers[0], correct_answers[1])
+ reduced_numerator = correct_answers[0] // common_divisor
+ reduced_denominator = correct_answers[1] // common_divisor
+
+ cloze_text += ""
+ cloze_text += f"Gekürzter Zähler: {{1:SHORTANSWER:={reduced_numerator}~%0%{wrong_answers[2][0]}#{wrong_answers[2][1]}}} | "
+ cloze_text += "
"
+ cloze_text += ""
+ cloze_text += f"Gekürzter Nenner: {{1:SHORTANSWER:={reduced_denominator}~%0%{wrong_answers[3][0]}#{wrong_answers[3][1]}}} | "
+ cloze_text += "
"
+
+ cloze_text += "
"
+
+ # Füge die Frage hinzu
+ text_elem.text = questiontext + " " + cloze_text
+
+ generalfeedback_elem = ET.SubElement(question, 'generalfeedback', attrib={'format': 'html'})
+ text_elem = ET.SubElement(generalfeedback_elem, 'text')
+
+ # Musterlösung im LaTeX-Format
+ if gcd(correct_answers[0], correct_answers[1]) > 1:
+ solution = f"Die Musterlösung ist: \\( \\Large \\displaystyle \\frac{{{reduced_numerator}}}{{{reduced_denominator}}} \\)."
+ else:
+ solution = f"Die Musterlösung ist: \\( \\Large \\displaystyle \\frac{{{correct_answers[0]}}}{{{correct_answers[1]}}} \\)."
+
+ text_elem.text = solution
+
+ defaultgrade_elem = ET.SubElement(question, 'defaultgrade')
+ defaultgrade_elem.text = '1.0000000'
+
+ penalty_elem = ET.SubElement(question, 'penalty')
+ penalty_elem.text = '0.3333333'
+
+ hidden_elem = ET.SubElement(question, 'hidden')
+ hidden_elem.text = '0'
+
+ # Tags hinzufügen
+ tags_elem = ET.SubElement(question, 'tags')
+ for tag in tags:
+ tag_elem = ET.SubElement(tags_elem, 'tag')
+ text_elem = ET.SubElement(tag_elem, 'text')
+ text_elem.text = tag
+
+ return question
+
+def lcm(a, b):
+ return abs(a * b) // gcd(a, b)
+
+def create_quiz(questions):
+ quiz = ET.Element('quiz')
+ for q in questions:
+ quiz.append(q)
+ return quiz
+
+def save_to_file(xml_element, filename):
+ tree = ET.ElementTree(xml_element)
+ with open(filename, 'wb') as f:
+ tree.write(f, encoding='utf-8', xml_declaration=True)
+
+questions = []
+
+# Generiere n Aufgaben zur Addition und Subtraktion von Brüchen mit verschiedenen Nennern
+n = 20
+for i in range(1, (n+1)):
+ # Zähler und Nenner generieren
+ numerator1 = random.randint(1, 20) # Zähler zwischen 1 und 20
+ numerator2 = random.randint(1, 20) # Zähler zwischen 1 und 20
+ numerator3 = random.randint(1, 20) # Zähler zwischen 1 und 20
+ denominator1 = random.randint(2, 10) # Nenner zwischen 2 und 10
+ denominator2 = random.randint(2, 10) # Nenner zwischen 2 und 10
+ denominator3 = random.randint(2, 10) # Nenner zwischen 2 und 10
+
+ # Berechne den gemeinsamen Nenner, der kleiner als 30 sein muss
+ common_denominator = lcm(denominator1, lcm(denominator2, denominator3))
+ while common_denominator >= 30:
+ denominator1 = random.randint(2, 10)
+ denominator2 = random.randint(2, 10)
+ denominator3 = random.randint(2, 10)
+ common_denominator = lcm(denominator1, lcm(denominator2, denominator3))
+
+ # Berechne die äquivalenten Zähler
+ equivalent_numerator1 = numerator1 * (common_denominator // denominator1)
+ equivalent_numerator2 = numerator2 * (common_denominator // denominator2)
+ equivalent_numerator3 = numerator3 * (common_denominator // denominator3)
+
+ operations = random.choice(["+ +", "+ -", "- +", "- -"]) # Zufällige Operationen
+ if operations == "+ +":
+ result_numerator = equivalent_numerator1 + (equivalent_numerator2 + equivalent_numerator3)
+ elif operations == "+ -":
+ result_numerator = equivalent_numerator1 + (equivalent_numerator2 - equivalent_numerator3)
+ elif operations == "- +":
+ result_numerator = equivalent_numerator1 - (equivalent_numerator2 + equivalent_numerator3)
+ else:
+ result_numerator = equivalent_numerator1 - (equivalent_numerator2 - equivalent_numerator3)
+
+ # Prüfe, ob der Bruch gekürzt werden kann
+ needs_reduction = gcd(result_numerator, common_denominator) > 1
+
+ # Frage im LaTeX-Format
+ questiontext = (f"Berechne und kürze das Ergebnis, wenn möglich:
"
+ f" \\( \\Large \\displaystyle \\frac{{{numerator1}}}{{{denominator1}}} {operations[0]} "
+ f"\\left(\\frac{{{numerator2}}}{{{denominator2}}} {operations[2]} \\frac{{{numerator3}}}{{{denominator3}}}\\right) = \\)
")
+
+ # Antworten
+ correct_answers = [result_numerator, common_denominator]
+ if needs_reduction:
+ common_divisor = gcd(result_numerator, common_denominator)
+ reduced_numerator = result_numerator // common_divisor
+ reduced_denominator = common_denominator // common_divisor
+
+ correct_answers.extend([reduced_numerator, reduced_denominator]) # Füge gekürzte Antworten hinzu
+
+ wrong_answers = [
+ (result_numerator + random.randint(1, 5), "Dieser Zähler ist zu hoch."), # Falscher Zähler
+ (result_numerator - random.randint(1, 5), "Dieser Zähler ist zu niedrig."), # Falscher Zähler
+ (reduced_numerator + random.randint(1, 3), "Dieser gekürzte Zähler ist nicht korrekt."), # Falscher gekürzter Zähler
+ (reduced_denominator - random.randint(1, 3), "Dieser gekürzte Nenner ist nicht korrekt.") # Falscher gekürzter Nenner
+ ]
+ else:
+ wrong_answers = [
+ (result_numerator + random.randint(1, 5), "Dieser Zähler ist zu hoch."), # Falscher Zähler
+ (result_numerator - random.randint(1, 5), "Dieser Zähler ist zu niedrig.") # Falscher Zähler
+ ]
+
+ feedback = "Richtig! Die Lösung ist korrekt."
+
+ # Frage erstellen und hinzufügen
+ questions.append(create_cloze_question(
+ f"Addition/Subtraktion von 3 ungleichnamigen Brüchen {i}",
+ questiontext,
+ correct_answers,
+ wrong_answers,
+ feedback,
+ ["Mathematik", "Brüche", "Addition", "Subtraktion"]
+ ))
+
+# Erstelle das Quiz
+quiz = create_quiz(questions)
+
+# Speichere die XML-Datei
+save_to_file(quiz, 'cloze_fraction_addition_subtraction_quiz.xml')
+
+print("Moodle-XML-Datei 'cloze_fraction_addition_subtraction_quiz.xml' erfolgreich erstellt.")
\ No newline at end of file