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

Case-struktur effizienter gestalten

 

MasterofDesaster
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 17.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2010, 23:09     Titel: Case-struktur effizienter gestalten
  Antworten mit Zitat      
Hallo,

ich brauche schon wieder eure Hilfe:

Ich habe zwei recht lange case-Strukturen:

Code:
for i = 1 : n
 
     switch i
        case 1
            a = 'A';
        case 2
            a = 'B';
       .
       .
       .
       case n
           a = 'Z';
    end
end

Die zweite case-Struktur sieht genauso aus, hat einen anderen Schalter "j" und bei ihr wird b = 'A', b = 'B' ... b = 'Z' zugewiesen.
Gibt es hier eine Möglichkeit dies irgendwie zu einer Struktur zusammenzufassen?
Wichtig ist, dass ich beide Schalter unabhängig voneinander auswählen können muss.

Gruß
Desaster
Private Nachricht senden Benutzer-Profile anzeigen


michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2010, 07:49     Titel:
  Antworten mit Zitat      
Du könntest dir z.B. eine Funktion machen, z.B.

Code:

function ret=myswitch(cond)

switch cond
   case 1:
         ret = 'A';
   .
   .
   .
end
 


und dann in deinen Schleifen aufrufen
Code:

a = myswitch(i);
b = myswitch(j);
 


Oder, falls du wirklich "nur" die Zuweisung der Buchstaben A-Z machen willst könntest du dir auch gleich einmalig ein Array anlegen mit den Buchstaben von A bis Z und dann dein i und j als Index benutzen:
Code:

sw='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
a=sw(i);
b=sw(j);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.04.2010, 10:25     Titel:
  Antworten mit Zitat      
Hallo

oder einfach ASCII-Tabelle benutzen,
A<=>65
B<=>66
C<=>67
...
Z<=>90

also dann hätte es so ausgesehen:

Code:

a = char(i+64)
b=  char(j+64)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
MasterofDesaster
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 17.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2010, 14:05     Titel:
  Antworten mit Zitat      
Hallo michai,

das ist genau die Lösung die ich gebraucht habe, vielen Dank.

Denn ich muss nicht nur zwischen Buchstaben switchen, die waren nur ein Beispiel, sondern zwischen Namen.

Trotzdem auch vielen dank an die anderen.

Desaster
Private Nachricht senden Benutzer-Profile anzeigen
 
MasterofDesaster
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 17.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2010, 17:25     Titel:
  Antworten mit Zitat      
Hi,
jetzt will ich das ganze aber in nem gui haben, wie funktioniert das dann?

Code:
function Versuch_Callback(hObject, eventdata, handles);
guidata(hObject, handles);

    for i = 1 :3
        for j = 1:3
            function myswitch_Callback(hObject, eventdata, handles)
            handles.Wert_a = handles.Bedingungen;

            function myswitch_Callback(hObject, eventdata, handles)          
            handles.Wert_b = handles.Bedingungen;
   
            Ergebnis = sprintf('naja es ist %s %s', handles.Wert_a, handles.Wert_b)
       
        end
    end
end


function myswitch_Callback(hObject, eventdata, handles)

switch handles.Bedingungen
     case 1
        handles.Werte = 'Auto';
     case 2
        handles.Werte = 'Motor';        
     case 3
       handles.Werte = 'Sport';  
      end
end
guidata(hObject, handles);


So funktioniert es leider nicht, da Matlab nie den neuen Wert des handles.Wert übergibt.
Ich habe schon versucht die Funktion anders zu benennen (myswitch(Wert)), aber dann funktioniert der Rest meines guis nicht mehr.

Habt ihr noch einen Tipp für mich?

Dank
Desaster
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2010, 07:29     Titel:
  Antworten mit Zitat      
Zum Beispiel so:

Code:

function Versuch_Callback(hObject, eventdata, handles);

    for i = 1 :3
        for j = 1:3
            handles.Wert_a = myswitch(handles.Bedingungen);
            handles.Wert_b = myswitch(handles.Bedingungen)
   
            Ergebnis = ['naja es ist', handles.Wert_a, handles.Wert_b];
       
        end
    end
end


function ret=myswitch(bed)

switch bed
     case 1
        ret = 'Auto';
     case 2
        ret  = 'Motor';        
     case 3
       ret  = 'Sport';  
     otherwise
       ret = '';
      end
end
 


Wobei in wert_a und wert_b immer das gleiche stehen wird, gell?!

Zur Erklärung:
Du musst zwischen der Definition einer Funktion, zu erkennen am Schlagwort "function" und der Benutzung, also dem Aufruf unterscheiden.

Code:

% Definition
% Hier beschreibst du, wie die Funktionaussieht und was sie tut.
function Rückgabewert=Funktionsname(Übergabeparameter)
...
end

% Aufruf
% Hier benutzt du die Funktion
VariableInDieGespeichertWerdenSoll = Funktionsname(WertOderVariableMitDenÜbergabeWerten);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
MasterofDesaster
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 17.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2010, 19:59     Titel:
  Antworten mit Zitat      
Danke Dir michai,

so funktioniert es, zumindest in einer Probedatei. Und so hat es auch schon vorher funktioniert.

Aber:
Code:
function Rückgabewert=Funktionsname(Übergabeparameter)

kann ich im gui nicht verwenden. Daher die umständliche Struktur mit den handles.

Denn mit obiger Struktur funktioniert es im gui nicht mehr. Er scheint die Funktionsstruktur nicht mehr zu erkennen und hat deswegen anschließend im weiteren Programm lauter Fehler.

Gruß
Desaster
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2010, 07:56     Titel:
  Antworten mit Zitat      
Nimms mir nicht übel, aber das kann ich ja gar nicht glauben.
Wenn du deine myswitch_Callback() als Callbackfunktion z.B. auf einen Buttonklick definierst, geb ich dir recht, aber um die nur in deinen for-Schleifen aufzurufen (und zwar ohne das Schlagwort "function") ist das völliger Quatsch.

Beschreib nochmal etwas genauer, was du vorhast und wie du das bisher gemacht hast und vielleicht auch, wann du welche Funktion wie aufrufen willst. Dann kriegen wir das schon hin.
Private Nachricht senden Benutzer-Profile anzeigen
 
MasterofDesaster
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 17.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2010, 13:14     Titel:
  Antworten mit Zitat      
Hallo michai,

ich finde es super das du mir noch hilfst Smile
Danke!

Ich habe es jetzt nochmal 1:1 kopiert und es funktioniert. Sobald ich aber das m-File neu lade hat es einen Fehler. Ich habe schon den Mathworks Support bemüht und bin mal gespannt was sie mir mitteilen Wink

Vielen Dank für deine Hilfe.

Gruß Desaster
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 - 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.