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

Matlabfunktion Geburtsdatum

 

fontsix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2010, 12:51     Titel: Matlabfunktion Geburtsdatum
  Antworten mit Zitat      
Hallo zusammen !

Ich soll für eine Projektarbeit mittels einer Matlabfunktion das Geburtsdatum in der Form DDMMJJJJ abfragen und übergeben. Aus dieser Funktion wird dann nach der Formel m = (JJJJ/100) * MM + DD eine Masse berechnet.

Bisher habe ich nur herausgefunden das ich das über Vektoren lösen muss, habe aber bisher keine Ahnung wie ich die Abfrage gestalten soll und wie nachher in der Formel das Geburtsjahr, der Geburtsmonat und der Tag getrennt werden sollen. Vielleicht könntet ihr mir Tips geben wie ich am besten anfange.

Liebe Grüße


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.08.2010, 13:44     Titel:
  Antworten mit Zitat      
Hallo,

Code:
[y, m, d] = datevec(datum, 'ddmmyyyy')


Dabei ist datum ein String im von dir angegebenen Format, oder ein Cell Array von solchen Strings.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 20:28     Titel:
  Antworten mit Zitat      
Hallo nochmal ich habe jetzt versucht das ganze als Funktion zu basteln. Allerdings denke ich das mit den Ausgabewerten und Eingabeparametern etwas nicht stimmt. Jedenfalls werden die ganzen Ausgabewerte nicht in den Workspace geschrieben ? Kann mir da vielleicht jemand auf die Sprünge helfen und was kann ich für Fehlerabfänge machen ? Ich dachte z.B. das die Länge des Geburtsjahrs überprüft wird (8 Zeichen) oder dd darf nicht größer als 31 und mm nicht größer als 12 sein darf

Code:

function [jjjj, mm, dd, m] = datum(geb)                                                    

geb=input('Bitte geben Sie ihr Geburtsjahr in der Form DDMMJJJJ an : ','s');            

dd=str2num(geb(1:2));

mm=str2num(geb(3:4));

jjjj=str2num(geb(5:8));

disp(' ')

disp(['Ihr Geburtstag ist der ', num2str(dd, '%1.0f'),'.', num2str(mm, '%1.0f'),'.', num2str(jjjj, '%1.0f'),'.']);

m=jjjj/100*mm+dd;

end

 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.08.2010, 20:34     Titel:
  Antworten mit Zitat      
Hallo,

geb sollte entweder übergeben ODER zur Laufzeit abgefragt werden. Ansonsten sieht das gut aus. Damit alle Parameter an den Workspace zurückgegeben werden, muss die Funktion auch mit allen Parametern aufgerufen werden, z.B.

Code:
[jjjj, mm, dd, m] = datum('03021989')


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 20:51     Titel:
  Antworten mit Zitat      
Irgendwie bin ich gerade etwas verunsichert.
Zitat:
entweder übergeben ODER zur Laufzeit abgefragt werden
. Kannst Du das etwas genauer erklären ?

Ich würde die Funktion gerne so schreiben das das Geburtsdatum kein fester Wert ist. Wie kann ich das realisieren ? Ich vermute mal das das durch
Zitat:
datum('03021989')
nicht gegeben ist.

geb ist ausserdem gelb hinterlegt, wenn ich darauf gehe gibt mir Matlab an "Input argument 'geb' might be unused. If this is OK, consider replacing it by ~"
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.08.2010, 20:59     Titel:
  Antworten mit Zitat      
Hallo,

entweder das Datum wird beim Aufruf übergeben - es kann ja bei jedem Aufruf ein anderes sein:
Code:
function [jjjj, mm, dd, m] = datum(geb)                                                    

dd=str2num(geb(1:2));
...


oder es wird zur Laufzeit eingegeben:
Code:
function [jjjj, mm, dd, m] = datum()                                                    

geb=input('Bitte geben Sie ihr Geburtsjahr in der Form DDMMJJJJ an : ','s');        

dd=str2num(geb(1:2));
...  


Beides zu kombinieren ist wenig sinnvoll, daher kommt auch das Gelb-Unterlegen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 21:20     Titel:
  Antworten mit Zitat      
Code:
function [jjjj, mm, dd] = datum()                                                  

geb=input('Bitte geben Sie ihr Geburtsjahr in der Form DDMMJJJJ an : ','s');            

dd=str2num(geb(1:2));

mm=str2num(geb(3:4));

jjjj=str2num(geb(5:8));

disp(' ')

disp(['Ihr Geburtstag ist der ', num2str(dd, '%1.0f'),'.', num2str(mm, '%1.0f'),'.', num2str(jjjj, '%1.0f'),'.'])

    function [ m ] = masse(jjjj, mm, dd)

    m=jjjj/100*mm+dd;
   
    end

% Parameterübergabe des Bungee-Sprungs

a1=1;           %Faktor für den Luftwiderstand
a2=1;           %Faktor für den Luftwiderstand
x=-30;          %Länge des Seils ohne Ausdehnung
h=50;           %Absprunghöhe [m]
g=9.81;         %Gravitationskonstante [m/s²]
k= [65 75];     %Federkonstante


end
 


Sorry aber ich glaube wir reden immernoch aneinander vorbei. Mein Problem ist es jetzt das einfach nicht dd, mm und jjjj in den workspace geschrieben werden, danach möchte ich die Masse über eine Unterfunktion berechnen und danach das Simulink Modell automatisch aufrufen und simulieren.

Ich weiß leider immer noch nicht was an dem Code falsch ist. Sad Sorry

warum.jpg
 Beschreibung:

Download
 Dateiname:  warum.jpg
 Dateigröße:  176.21 KB
 Heruntergeladen:  477 mal
 
Harald
Forum-Meister

Forum-Meister


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

siehe erster Post zum Funktionsaufruf. Du rufst die Funktion anscheinend ohne Ausgabeargumente auf, evtl. über den grünen Pfeil.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 21:18     Titel:
  Antworten mit Zitat      
Zitat:
Du rufst die Funktion anscheinend ohne Ausgabeargumente auf
Sind meine Ausgabeparameter nicht "jjjj , mm und dd" ?

Zitat:
evtl. über den grünen Pfeil
Wie startet man ein m-file wenn nicht über den grünen Pfeil ?

Ich bin jetzt durch weitere Suche auf die Befehle global, persistant, assignin und evalin gestossen ? Helfen mir die Befehle bei meinem Problem irgendwo weiter ? Sorry Harald aber ich ich verstehe bei Deinen Antworten einfach nichts. Die Variablen werden trotz allen Versuchen immernoch nicht in den Workspace geschrieben.[/b]
 
fontsix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 22:25     Titel:
  Antworten mit Zitat      
So in etwa stelle ich mir das dann vor aber warum muss ich alle Variablen im Command Window von Matlab extra als global definieren, damit sie in den Workspace übergeben werden ?

Das verstehe ich einfach nicht. Ich habe schon probiert die Variablen in der m-file vor dem Befehl function als global zu definieren, aber da meckert das probgramm.

Was mache ich falsch ?

hm.jpg
 Beschreibung:

Download
 Dateiname:  hm.jpg
 Dateigröße:  241.83 KB
 Heruntergeladen:  387 mal
 
Harald
Forum-Meister

Forum-Meister


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

ich gehe davon aus, dass du deine Funktion im Editor als datum.m gespeichert hast. Jetzt gib doch bitte mal im Command Window folgendes ein:
Code:
[jjjj, mm, dd] = datum()  

... und deine Variablen sind im (Base) Workspace - ohne, dass sie als global definiert werden mussten.

Der Grund, warum sie vorher nicht in diesem Workspace waren, ist, dass jede Funktion ihren eigenen Workspace hat, um das ganze übersichtlicher zu gestalten, und nur die Ein- und Ausgabevariablen übergeben werden.

Ich empfehle wärmstens ein ausführliches Studium eines einführenden Skripts, Buchs oder der einführenden Teile der Dokumentation. Dann sollten so grundlegende Konzepte klar werden.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 11:26     Titel:
  Antworten mit Zitat      
Das verstehe ich schon das Funktionen einen eigenen workspace haben, dennoch möchte ich nichts extra im command window eingeben müssen bis eben auf die abfrage des geburtsdatums. Danach soll die funktion ausgeführt werden, dh. aus mm, dd und jjjj die Masse berechnet werden und alle variablen in den base workspace geschrieben werden und erst wieder geändert werden wenn sich der geburtstag ändert. Das ist die Sache wo ich mir schon seit tagen die zähne daran ausbeisse. Eigentlich doch nicht schwer, oder ?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.09.2010, 11:48     Titel:
  Antworten mit Zitat      
Hallo,

Wie führst du die Funktion denn momentan aus? Über den grünen Pfeil? Dann kannst du über den Pfeil nach unten rechts neben dem grünen Pfeil auf "Edit Run Configurations" gehen und dort das von mir genannte eingeben.

Zitat:
und erst wieder geändert werden wenn sich der geburtstag ändert

Wie änderst du den Geburtstag? Über eine erneute Ausführung der Funktion?

Ich bekomme auch den Eindruck, dass du lieber mit einem Skript als mit einer Funktion arbeiten solltest - dazu einfach die "function"-Zeile am Anfang weglassen. Die Berechnung der Masse kann ja in einer (separaten) Funktion bleiben.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 13:03     Titel:
  Antworten mit Zitat      
Ja momentan führe ich die Funktion immer über den grünen Pfeil aus. Das Geburtsdatum ändere ich über eine erneute ausführung der funktion. Vielen dank erstmal ich werde die Lösungsvorschläge nachher noch einmal probieren wenn ich wieder zu hause bin.

Gibt es bei diesen Scriptdateien irgendetwas besonderes zu beachten ? Im Prinzip ist es ja auch nur ein m-file aber ohne function am Anfang.
 
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 - 2025 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.