Kombinatorik: Widerstände zu Tetraeder verlötet

Dieses Thema im Forum "Schule, Studium, Ausbildung" wurde erstellt von cable, 18. Mai 2010 .

Schlagworte:
  1. 18. Mai 2010
    Hoi!

    Ich hab ein kleines Problem mit einer Aufgabe. Entweder ist sie so einfach, dass ich den Wald vor lauter Bäumen nicht sehe, oder ich verstehe es einfach nicht.

    Aufgabe:
    Die 6 Widerstände 10 Ω, 12 Ω, 15 Ω, 18 Ω, 22 Ω und 27 Ω werden zu einem Tetraeder verlötet.

    Bild
    (an jeder Kante ein Widerstand, jede Ecke ist ein Knoten)

    Schreiben Sie ein Python-Programm, das folgendes ausgibt:

    a) Die Anzahl unterschiedlicher möglicher Widerstände zwischen zwei Ecken eines solchen Tetraeders,
    b) den niedrigsten und den höchsten dieser Widerstände,
    c) den größten prozentualen Sprung zwischen zwei aufeinanderfolgenden sortierten Widerständen.

    Mir geht es hier nicht um das Python Programm, noch um eine perfekte Lösung. Das Programm bekomme ich schon noch alleine hin, aber erstmal logisch gedacht: Eigentlich kann es zwischen zwei Knoten in einem Tetraeder nur 6 verschiedene Verbindungsstücke (Widerstände) geben, da diese alle verschieden sind. Ist es denn so einfach? Zwischen zwei Knoten befindet sich nur ein Widerstand, nicht mehrere.
    Bei der b) erkennt man ja einfach, dass es 10 und 27 sind, oder?
    Die c) könnte ich mir auch einfach ausrechnen lassen.

    Es reicht, wenn mir Jemand schon bei der a) helfen kann. Ich möchte wissen, was die Lösung ist, nicht das Programm, was hier verlangt ist. Will halt vermeiden, dass es an einem Verständnisproblem scheitert.

    greez
     
  2. 18. Mai 2010
    AW: Kombinatorik

    Würde das genau sehen wie du.
    Vielleicht liegt die Schwierugkeit der Aufgabe in der Programmumsetzung, damit kenn ih mich nciht aus wie komplex dieser Teil ist.
     
  3. 18. Mai 2010
    AW: Kombinatorik

    a) und b) seh ich ganz klar genau so wie du.
    c) ist meiner Meinung nach komisch gestellt, da verstehe ich dieses "aufeinanderfolgenden _sortierten_ Widerständen" nicht so ganz. Die Widerstände sind ja nicht in Reihe geschaltet, demnach gibt es in dem Sinne keine aufeinander folgenden Widerstände, da immer 3 verschiedene an einem der 4 Knoten hängen.
     
  4. 18. Mai 2010
    AW: Kombinatorik

    Hab die b und c nun so gelöst:

    Code:
    l = [10, 12, 15, 18, 22, 27]
    
    #b
    print("Aufgabe b)")
    l.sort()
    print(l[0], "= kleinster Widerstand,", l[len(l) - 1], "= groesster Widerstand")
    
    #c
    print("Aufgabe c)")
    l.sort()
    biggest = (0, 0, 0)
    for i in range(len(l)):
     if i + 1 <= len(l) - 1:
     if l[i+1] / l[i] > biggest[2]:
     biggest = (l[i], l[i+1], l[i+1] / l[i])
     
    print("Groesster prozentualer Sprung zwischen:", biggest[0], "und", biggest[1], "-> ", str((biggest[2]-1)*100) + "%")
    Damit bekomme ich den kleinsten und größten Widerstand bei b) (wenn die Liste sortiert ist) und bei c) bekomme ich die Zahlen 12 und 15, da der prozentuale Sprung dazwischen 25% beträgt und damit am größten ist. Vielleicht fällt noch wem was nettes für die a) ein

    Danke schonmal, BWs sind raus!

    greez

    //edit: @Kurdish: ich glaube, dass er mit "aufeinanderfolgend" nur meint, dass sie in aufsteigender Reihenfolge in einer Liste sortiert sind.
     
  5. 18. Mai 2010
    AW: Kombinatorik

    Oh bei den Aufgaben kann Python richtig seine Stärken zeigen, das will ich auch nicht vorenthalten:

    Code:
    # enable floating point division: 1/2 = 0.5, 1//2 = 0
    from __future__ import division 
    import operator
    
    
    def faculty(n):
     """returns the faculty of n for an integer n > 0"""
     return reduce(operator.mul, range(1, n+1))
    
    def main():
     l = sorted((10, 12, 15, 18, 22, 27))
     
     print 'a) %s' % faculty(len(l))
     
     print 'b) smallest: %s, biggest: %s' % (l[0], l[-1])
     
     print 'c) %.f%%' % sorted((a/b-1)*100 for a, b in zip(l[1:], l[:-1]))[-1]
    
    
    if __name__ == '__main__':
     main()
     
  6. 18. Mai 2010
    AW: Kombinatorik

    Oh man, List comprehensions, wie ich sie total vergessen habe. Habe sie nun auch eingebaut und damit ist es viel eleganter. Aber sicher, dass 6! bei der a richtig ist? Ich glaub irgendwie nicht :/

    BW hast dennoch bekommen

    Hier mal mein Code:
    Code:
    #a
    l = []
    for p in permutations([10, 12, 15, 18, 22, 27]):
     if not p[0] in l:
     l.append(p[0])
    l.sort()
    print("Aufgabe a):", len(l), "ist die Anzahl der moeglichen Widerstaende zwischen zwei Knoten")
    
    #b
    print("Aufgabe b):", l[0], "= kleinster Widerstand,", l[-1], "= groesster Widerstand")
    
    #c
    biggest = sorted([(b, a, (a/b-1)*100) for a, b in zip(l[1:], l[:-1])], key = lambda x: x[2])[-1]
    print("Aufgabe c): Groesster prozentualer Sprung zwischen:", biggest[0], "und", biggest[1], "-> ", str(biggest[2]) + "%")
    greez
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.