Skip to content

Instantly share code, notes, and snippets.

@horstjens
Created January 9, 2013 11:53
Show Gist options
  • Save horstjens/4492585 to your computer and use it in GitHub Desktop.
Save horstjens/4492585 to your computer and use it in GitHub Desktop.
Algo Dat Übung 6 "Organigramm" python3 code
# Struktur der Firma: { Name: ( Name erster Unterling, Name nächster Kollege), .. }
# oder: [ (Name, Name erster Unterling, Namer nächster Kollege), .. ]
firma = { "A":("B","-"), "B":("-","C"), "C":("E","D"), "D":("G","-"),
"E":("-","F"), "F":("-","-"), "G":("-","-") }
# Problem in 2 Teilprobleme zerlegen. 1.) wie viele direkte Untergebene
# hat Mitarbeiter m ?
def mitarbeiterzaehler(m):
"""gibt die Anzahl der direkten Untergebenen eines Mitarbeiters zurück
(waagrechte suche, Breitensuche)"""
direkteuntergebene = 0
unterling = firma[m][0] # zugriff auf ersten value im dictionary
if unterling == "-":
return 0
kollege = firma[unterling][1] # zugriff auf kollegen vom ersten unterling
while True:
direkteuntergebene += 1
if kollege == "-":
return direkteuntergebene # letzter Kollege
kollege = firma[kollege][1]
# alle Mitarbeiter auflisten die WENIGER als num direkte untergebene haben
# durch alle Mitarbeiter von m ausgehend durchlaufen:
result = []
def subordinates(m, num):
"""geht per rekursion durch alle Mitarbeiter von und unter m durch
(Präorder - Suche in die Tiefe mit)"""
global result
print("Mitarbeiter: {}".format(m))
if mitarbeiterzaehler(m) < num:
result.append(m)
unterling = firma[m][0] # zugriff auf ersten value im dictionary
kollege = firma[m][1] # zugriff auf zweiten value im dictionary
if unterling != "-":
subordinates(unterling, num)
if kollege != "-":
subordinates(kollege, num)
print("Firma:",firma)
#test der mitarbeiterzeahlerfunktion:
print("Name, Anzahl direkter Untergebener")
for k in firma:
print( k, mitarbeiterzaehler(k))
for x in range(4,0,-1):
result = []
print("weniger als {} direkte untergebene haben".format(x))
print(subordinates("A",x))
print("Result: ", result)
Firma: {'A': ('B', '-'), 'C': ('E', 'D'), 'B': ('-', 'C'), 'E': ('-', 'F'), 'D': ('G', '-'), 'G': ('-', '-'), 'F': ('-', '-')}
Name, Anzahl direkter Untergebener
A 3
C 2
B 0
E 0
D 1
G 0
F 0
weniger als 4 direkte untergebene haben
Mitarbeiter: A
Mitarbeiter: B
Mitarbeiter: C
Mitarbeiter: E
Mitarbeiter: F
Mitarbeiter: D
Mitarbeiter: G
None
Result: ['A', 'B', 'C', 'E', 'F', 'D', 'G']
weniger als 3 direkte untergebene haben
Mitarbeiter: A
Mitarbeiter: B
Mitarbeiter: C
Mitarbeiter: E
Mitarbeiter: F
Mitarbeiter: D
Mitarbeiter: G
None
Result: ['B', 'C', 'E', 'F', 'D', 'G']
weniger als 2 direkte untergebene haben
Mitarbeiter: A
Mitarbeiter: B
Mitarbeiter: C
Mitarbeiter: E
Mitarbeiter: F
Mitarbeiter: D
Mitarbeiter: G
None
Result: ['B', 'E', 'F', 'D', 'G']
weniger als 1 direkte untergebene haben
Mitarbeiter: A
Mitarbeiter: B
Mitarbeiter: C
Mitarbeiter: E
Mitarbeiter: F
Mitarbeiter: D
Mitarbeiter: G
None
Result: ['B', 'E', 'F', 'G']
------------------
(program exited with code: 0)
Press return to continue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment