Projekt: Soziogramm-Programm

Tutorials.at
Verfügbare Informationen zu "Projekt: Soziogramm-Programm"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Dirty Oerty - DrPhil_Guth
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 7
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Projekt: Soziogramm-Programm
  • Letzte Antwort: vor 17 Jahren, 2 Monaten, 11 Tagen, 21 Stunden, 44 Minuten
  • Alle Beiträge und Antworten zu "Projekt: Soziogramm-Programm"

    Re: Projekt: Soziogramm-Programm

    Dirty Oerty - 14.02.2007, 22:06

    Projekt: Soziogramm-Programm
    tag,

    folgendes:

    also, ich will ein programm schreiben, dass mir ein sozigramm erstellt und daraus evtl auch gleich einen sitzplan.
    wozu? nunja, zum hintergrund gibt's nur zu sagen, dass mir der sitzplan in der klasse nich gefällt :roll: :wink:

    wie ichs mir vorstell:
    also der benutzer gibt ein wieviele "schüler" es gibt.
    zu jedem schüler muss dann noch name (vor- und zu-),
    "schwätzgrad" (falls es keine eindeutige lösung gibt, dann soll mit hilfe davon prioritäten gesetzt werden),
    3 namen von personen neben denen der schüler am liebsten sitzt,
    3 namen neben welchen der schüler überhaupt nicht sitzen möchte.

    realisierung:

    also, ich hab mir gedacht, ich mach das mit ner matrix aus verketteten listen.
    will heißen: "schüler" wird ein struct genannt, in diesem struct stehn die angaben, sowie 7 pointer auf andere schüler.
    also 3 für "mag ich",
    3 für "mag ich nich",
    und den letzten:
    bei der eingabe sind die schüler ja unsortiert. also braucht man ja nen "next"pointer auf den danach eingegebenen.

    zur eingabe von den 6 personen:

    da das prog ja bei der eingabe von schüler 1 den schüler 22, neben welchem 1 gerne sitzt, noch nicht kennt, muss man erstmal die namen speichern (als char[]).

    heißt also für den ablauf des programms:

    1. eingabe anzahl personen
    2. eingabe jeder einzelnen person
    3. überprüfung der "mag ich"/"mag ich nich" eingaben, ob der angegebene überhaupt existiert und wenn ja, dann mit diesem verketten.
    4. ??

    ne andere idee wär noch, das das struct schüler nen array (länge = anzahl schüler) bekommt, in dem dann zuneigung/abneigung an der jeweiligen position gespeichert werden.

    also bsp:

    4 schüler

    schüler 1:

    -mag schüler 2 und 4
    -hasst schüler 3

    =>

    der array:

    9|3|-3|3

    die 9 steht dafür, das er sich selbst nat auch mag :wink:

    puh, viel text, hoffe jemand macht sich die mühe :roll:


    mfg
    daniel



    Re: Projekt: Soziogramm-Programm

    DrPhil_Guth - 15.02.2007, 20:57


    Hm... interessanter ansatz...
    Also sieh mal:

    Deine beiden möglichkeiten funktionieren denke ich net ganz so gut, denn
    1. bsp.:
    Schüler 1 mag Schüler 2;
    Schüler 2 mag Schüler 3;
    Schüler 3 mag Schüler 1;
    Das ist jetzt ein einfacher fall, aber ich denke sowas ähnliches wirds mit mehreren auch geben.

    2. Verkettete listen sind wohl eindimensional (prev_pointer, next_pointer)
    Nur, dein Sitzplan wird ws. zweidimensional sein, oder?


    Also ich würde erstmal vorschlagen, ein Array aus strukturen zu machen, wobei jeder Schüler ne ID nummer hat.
    Jeder Schüler hat seine ID, die ID's seiner Freunde, Die ID's seiner Feinde, seine Position (x, y), und seine "Zufriedenheit".

    So, nun gibts jetzt wahrscheinlich ne super lösungsmethode, vl. sogar mathematisch dafür. Leider bin ich dafür zu dumm
    :roll:

    Deswegen ist mein Vorschlag folgender:
    Ein genetischer algorithmus.
    Das wäre sozusagen ein "Brute- force angriff" auf die Sitzordnung.
    Am anfang würfelt man die Sitzordnung völlig zufällig zusammen. Also, es gibt eine gesamtzufriedenheit, die sich aus der summe der einzelzufriedenheiten zusammensetzt.
    So, nun gehst du ein paar tausend, oder gleich millionen mal die sitzordnung durch und vertauscht nur 2 einzige schüler. Wenn die gesamtzufriedenheit steigt, dann belässt mans so und geht in die nächste iteration. Wenn sie fällt oder gleich bleibt, dann tauscht man die schüler wieder zurück.

    So, und das macht man nun so lange, bis eine bestimmte zeit lang keine verbesserungen mehr aufgetreten sind.
    Achtung, eine möglichkeit zum abbruch oder eine beschränkung einführen, denn sonst kann man in einer endlosschleife landen.

    Also, ist das ungefähr klar wie ich das meine?



    Re: Projekt: Soziogramm-Programm

    Dirty Oerty - 15.02.2007, 23:27


    hm, auch interessant.

    nur warum gehn keine 2 dimensionalen verketteten listen?
    dann brauchst du halt 2 pointer (bzw 4), einen für rechts und einen für unten (und für oben und links)

    hm, ich machs dann ma so: ich ordne die leuts so an, wie se eingegeben werden, und dann immer kleine veränderungen, wie du schon gesagt hast.

    nur das mit der zufriedenheit hab ich nich ganz verstanden. was meint ud damit?



    Re: Projekt: Soziogramm-Programm

    DrPhil_Guth - 16.02.2007, 11:52


    Also das mit der zufriedenheit mein ich so:

    ein schüler hat 3 Freunde und 3 Feinde.

    Wenn er mit 3 Freunden und einem neutralen zusammensitzt, ist er am zufriedensten, oder nicht?
    Wenn er allerdings mit 3 Feinden zusammensitzt wird ihm das kaum gefallen.
    Also wäre seine zufriedenheit im ersten fall: 1+1+1+0=3, also zufrieden
    Im zweiten fall (-1)+(-1)+(-1)+0 = -3 also nicht zufrieden

    Da wir ein gutes allgemeines Klassenklima brauchen, addieren wir einfach die Zufriedenheiten jedes schülers.

    Verfeinern könnte man das ganze, wenn nicht jeder feind/freund gleich viel wert ist, sondern dass man eingeben kann, wie sehr man den hasst/mag.
    bsp.: ich mag schüler 1: 0,6, schüler 3 0.3. Ich mag schüler 2 nicht: -0.3, schüler 4 auch nicht so, aber mehr: -0.2

    ungefähr verstanden?



    Re: Projekt: Soziogramm-Programm

    Dirty Oerty - 16.02.2007, 14:39


    ah! ja, das is gut.
    mit dem unterschiedlichen werten war auch so geplant.
    hm, nur wie bringt man das hin mit dem vertauschen von schülern?



    Re: Projekt: Soziogramm-Programm

    DrPhil_Guth - 16.02.2007, 14:48


    sollte ganz einfach sein.

    Also du hast ein Zweidimensionales Array, mit den ID's der schüler.

    in einem schleifendurchlauf suchst du 2 beliebige schüler:


    schueler1_bank_x = rand() % anzahl_reihen_x;
    schueler1_bank_y = rand() % anzahl_reihen_y;

    schueler2_bank_x = rand() % anzahl_reihen_x;
    schueler2_bank_y = rand() % anzahl_reihen_y;

    und dann vertauscht du sie einfach

    schueler_buffer = schueler_id[schueler2_bank_x][schueler2_bank_x];

    schueler_id[schueler2_bank_x][schueler2_bank_x] = schueler_id[schueler1_bank_x][schueler1_bank_x]

    schueler_id[schueler1_bank_x][schueler1_bank_x] = schueler_buffer;



    Re: Projekt: Soziogramm-Programm

    Dirty Oerty - 16.02.2007, 14:50


    ah, ok.
    ich setz mich ma hin.
    nun sind ja zum glück ferien, nun hab ich endlich ma wieder richtig viel zeit.
    danke, wen ich neue probs hab, dann meld ich mich. :D



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Frage zu Pascal - gepostet von Danny am Montag 12.03.2007
    Blender-Problem - gepostet von toby-man am Samstag 06.10.2007
    PC-Spiele programmieren - gepostet von Dominik92 am Mittwoch 13.09.2006
    verzweifelte Fehlersuche (C) - gepostet von Hannibal93 am Sonntag 17.06.2007
    Turbo C - gepostet von Mei$ter A^ am Montag 24.04.2006
    Kryptographie-Problem - gepostet von Dirty Oerty am Montag 01.01.2007
    World of Warcraft - gepostet von Pole am Dienstag 12.06.2007



    Ähnliche Beiträge wie "Projekt: Soziogramm-Programm"

    Problem Aufsetzen des Aygos bei 4 Personen - Dave (Dienstag 12.10.2010)
    neues video vom aktuellen Projekt: T-Rex 600 OverDrive - Okke Dillen (Samstag 15.12.2007)
    Projekt 840 - Laky (Dienstag 30.03.2004)
    neues projekt.. - lina (Montag 02.05.2005)
    iPhone FlyPad - nicht zu empfehlen - highfly (Sonntag 31.10.2010)
    TV Programm - Mietzlinchen (Freitag 13.07.2007)
    WorldTra.de Affiliate Programm - WorldTra.de (Freitag 22.10.2004)
    WorldTra.de´s neues Projekt: FinanzPapst.de - WorldTra.de (Sonntag 11.09.2005)
    XP Tips Backup Programm auch in der Home Edition - Krombacherman (Dienstag 13.04.2004)
    Optifast-Programm - Alex_S. (Montag 19.04.2004)