Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Magisches Quadrat ()

Schreiben Sie zunächst jeweils eine Funktion (schlussendlich insgesamt 3 Funktionen), an die man eine zweidimensionale Liste als Argument übergeben kann und die prüfen ob die Zahlen in der Zeile, Spalte oder Diagonalen des Quadrats jeweils die gleiche Summe liefern. 

Schreiben Sie eine weitere Funkton und nutzen Sie die drei Funktionen um zu prüfen, ob Zeilen, Spalten und Diagonalen ebenfalls in der Summe übereinstimmen. Wenn die Summen gleich sind, soll der Rückgabewert dieser Funktion True sein, sonst False.

Schreiben Sie anschließend ein Programm, das für je ein 3x3 und ein 4x4 Beispiel prüft, ob es ein magisches Quadrat ist.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

3 Lösung(en)

# frozen_string_literal: false

def quad?(quad)
  dim = quad.size

  quad.each do |i|
    return false if i.size != dim
  end

  true
end

def check_row(quad)
  sum = []
  quad.each do |i|
    sum.append(i.sum)
  end

  return [true, sum[0]] if sum.uniq.size <= 1

  [false, nil]
end

def check_column(quad)
  sum = []
  (0...quad.size).each do |i|
    a = 0
    quad.each do |j|
      a += j[i]
    end
    sum.append(a)
  end

  return [true, sum[0]] if sum.uniq.size <= 1

  [false, nil]
end

def check_diagonal(quad)
  a = 0
  b = 0
  (0...quad.size).each do |i|
    a += quad[i][i]
    b += quad[i][quad.size - i - 1]
  end

  return [true, a] if a == b

  [false, nil]
end

def check_all(quad)
  raise ArgumentError unless quad?(quad) # Abbrechen, wenn Array kein Quadrat

  r = check_row(quad)
  c = check_column(quad)
  d = check_diagonal(quad)

  return r if r == c && c == d # leider kein Dreiervergleich in Ruby :(

  [false, nil]
end

# a = [[2, 2], [2, 2, 3]]
# a = [[2, 2], [2, 2]] # Loesung: trivial
a = [[5, 10, 3], [4, 6, 8], [9, 2, 7]] # Loesung: 18
b = [[16, 6, 9, 3], [1, 11, 8, 14], [7, 13, 2, 12], [10, 4, 15, 5]] # Loesung: 34

# puts quad?(a)
# puts check_row(a)
# puts check_column(a)
# puts check_diagonal(a)

puts check_all(a)
puts check_all(b)

                

Lösung von: Ich Bins (tubs)

// wie oft denn noch?
// ist das widerstandsberechnung nr. 2?

https://www.programmieraufgaben.ch/aufgabe/magisches-quadrat-2/hq6groot
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

#input

n = int(input()) #<= Welche Dimension ? 3 für 3x3 4 für 4x4 
matrix = [] #<= Zahlen Pro Zeile nacheinander eintippen

for rows in range(n):
	nums = input()
	matrix.append([int(x) for x in nums.split()])

#Wir können jetzt 3 Schritte machen
# Zeilen müssen hinzugefügt werden
# Spalten müssen hinzugefügt werden
# Diagonalen müssen hinzugefügt werden

MagischesQuadrat = True

cMatrix = [[] for x in range (n)]
value = sum(matrix[0])

#Zeilen
for x, Zeilen in enumerate(matrix):
	if sum(Zeilen) != value:
		MagischesQuadrat = False
		
	for y, element in enumerate(Zeilen):
		cMatrix[y].append(element)

#Spalten
for x, Spalten in enumerate(cMatrix):
	if sum(Spalten) != value:
		MagischesQuadrat = False
	
#Diagonale
i = 0
j = 0

Diagonale = [[],[]]
for x in range(n):
	Diagonale[0].append(matrix[i][j])
	Diagonale[1].append(matrix[n-1-i][j])
	i += 1
	j += 1
	
if sum(Diagonale[0]) != value or sum(Diagonale[1]) != value:
	MagischesQuadrat = False
	
	
if MagischesQuadrat == True:
	print('Magisches Quadrat')
else:
	print('Kein Magisches Quadrat')
	
                

Lösung von: Name nicht veröffentlicht

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit:
Schwierigkeit: k.A.
Webcode: 3sxy-vfom
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen