WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Klassen und Objekte definieren

 

Chewbacca
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2010, 20:42     Titel: Klassen und Objekte definieren
  Antworten mit Zitat      
Huhu,

ich bin absoluter anfänger was matlab angeht, und grad relativ verzweifelt.

mein problem ist,dass ich mir Objekte definieren will mit drei eigenschaften,die aber mit einer method verändert werden kann.

Code:
classdef men
    properties
        infiziert = 0;   %0 wenn nicht infiziert, 1 wenn infiziert
        immun = 0;       %0 wenn nicht immun, 1 wenn immun
        tot = 0;         %0 wenn nicht tot, 1 wenn tot
    end
    methods
        function y = grippe(obj)
            global r n
            pinf=rand();
            pheil=rand();
            ptot=rand();
            if obj.tot==0
             if obj.immun==0              
              if obj.infiziert==0
               if pinf<n/r
                    obj.infiziert=1;
               end
              end
              if obj.infiziert==1
               if pheil<0.5
                    obj.infiziert=0;
                    obj.immun=1;
               elseif ptot<0.004
                        obj.tot=1;
                        obj.immun=0;
                        obj.infiziert=0;
               end
              end
             end
            end
        end
    end
end


so. jetz sag ich zb
Code:
m=men; m.infiziert=1;m.grippe


jetz möcht ich viele verschiedene "m`s" haben, die diese grundeigenschaft haben (sozusagen die Infizierten).
Aber mein problem was ich habe ist, dass so wie ichs aufgeschriebn habe, die eigenschaft m.infiziert nicht überschrieben wird, sondern nur die obj.infiziert.

jetz hab ich gelesen dass ich das mit objekten machen kann, die zu der klasse "m" gehören, aber ich habe keine ahnung wie,und würde mich über eine erklärung wie das so allgemein geht, riesig freuen.

ich hoffe ihr könnt mir schnell helfen

der Chewy[/code]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2010, 21:49     Titel:
  Antworten mit Zitat      
Hallo,

bitte nächstes Mal versuchen, die Frage etwas weniger verworren zu stellen Wink

Das Problem:
Code:
function y = grippe(obj)

obj wird innerhalb der Funktion manipuliert, aber es wird nie etwas damit gemacht. y wird gar nicht definiert (siehe M-Lint Warnungen).

Meine Empfehlung:
Klasse als Handle-Klasse definieren:
Code:


Funktion ohne Rückgabeargument definieren:
Code:


Das macht dann das, was ich wollen würde. Was du willst, ist mir leider trotzdem mehrmaligem Lesen nicht wirklich klar geworden...

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Chewbacca
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2010, 22:20     Titel:
  Antworten mit Zitat      
Danke erstmal für die fixe Antwort und das mehrmalige Lesen!
Ich versuche es nochmal:
Ich möchte eine Klasse mit folgenden Eigenschaften erstellen:
- infiziert, immun oder tot (Das soll Menschen darstellen)

Jetzt möchte ich Objekte aus dieser Klasse "herstellen". Diese Objekte sind sozusagen die Menschlein, die simuliert erkranken sollen.
Jetzt möchte ich die Funktion "Grippe" auf diese Menschlein (also die Objekte) anwenden, so dass sie mit einer gewissen Wahrscheinlichkeit erkranken oder immunisiert werden oder sterben (deshalb die Zufallsgeneratoren).
Die Funktion Grippe soll also das Objekt verändern und soll das dann speichern.
Wenn ich m.infiziert aufrufe dann gibt er mir immer "1" anstatt "0" und "1" (zufallsbasiert). Irgendwie bekomme ich es nicht hin, die Funktion Grippe richtig auf das Objekt anzuwenden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2010, 22:25     Titel:
  Antworten mit Zitat      
Ok, viel klarer ist mir das nun immer noch nicht.
Wenn durch m.grippe der Grippe-Status von m im Sinne von Call by Reference geändert werden soll, dann solltest du mal meine Vorschläge ausprobieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Chewbacca
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2010, 23:29     Titel:
  Antworten mit Zitat      
Hm
also das macht immer noch nix anderes als vorher.

also ich möchte halt, dass die eigenschaften von dem m was ich als men definiere, durch die function grippe verändert werden, also überschrieben werden.

ich weiß nich wie ichs sonst beschreiben soll, sorry

Code:
m=men;m.infiziert=1;
m.grippe

m.infiziert=


jetz soll er mir halt die von grippe veränderte eigenschaft angeben, aber er gibt mir nur 1 aus, weil ich das vorher so gesagt habe...

versteht mich denn keiner?^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.01.2010, 23:42     Titel:
  Antworten mit Zitat      
Hallo,

ich habe das mal implementiert, und bekommen nach 4 Durchläufen, dass er immun wurde. Wenn Zufall mit im Spiel ist, vielleicht mehr als 1-2 Mal versuchen?? Hier der komplette Code:

Code:
classdef men < handle
    properties
        infiziert = 0;   %0 wenn nicht infiziert, 1 wenn infiziert
        immun = 0;       %0 wenn nicht immun, 1 wenn immun
        tot = 0;         %0 wenn nicht tot, 1 wenn tot
    end
    methods
        function grippe(obj)
            global r n
            pinf=rand();
            pheil=rand();
            ptot=rand();
            if obj.tot==0
             if obj.immun==0              
              if obj.infiziert==0
               if pinf<n/r
                    obj.infiziert=1;
               end
              end
              if obj.infiziert==1
               if pheil<0.5
                    obj.infiziert=0;
                    obj.immun=1;
               elseif ptot<0.004
                        obj.tot=1;
                        obj.immun=0;
                        obj.infiziert=0;
               end
              end
             end
            end
        end
    end
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Chewbacca
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2010, 23:45     Titel:
  Antworten mit Zitat      
was?echt??

hm, also ich habs 6 ma probiert glaub ich...

nagut,ich werds einfahc nochma probieren

wenns klappt, bedank ich mich rechtherzlich bei dir Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.