|
|
mehrere if-Anweisungen mit einer for-Schleife vereinfachen |
|
Primo00 |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 01.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.03.2010, 21:21
Titel: mehrere if-Anweisungen mit einer for-Schleife vereinfachen
|
 |
|
 |
|
Hallo,
habe hier diese if-Anweisungen, könnte mir bitte einer sagen, wie ich diese mit einer for Schleife vereinfachen kann, damit ich nicht mehr so viele if-Anweisungen hintereinander schreiben muss.
if strcmp(aRT0, 'a^0')
aRT0=0;
x0=1;
end
if strcmp(aRT1, 'a^0')
aRT1=0;
x1=1;
end
if strcmp(aRT2, 'a^0')
aRT2=0;
x2=1;
end
....
....
if strcmp(aRT126, 'a^0')
aRT126=0;
x126=1;
end
wie man unschwer erkennen kann ändert sich hier nur die Zahl hinter 'aRT' und 'x'
und hier noch eine weitere if-Anweisungen die ich vereinfachen will...
if strcmp(aRT0,'a^1') %hier ändert sich die Potenz 'a^' um 1 sowie
aRT0=1; %bei 'aRT0=' um 1
x0=1;
end
if strcmp(aRT0,'a^2')
aRT0=2;
x0=1;
end
if strcmp(aRT0,'a^3')
aRT0=3;
x0=1;
end
....
....
if strcmp(aRT0,'a^126')
aRT0=126;
x0=1;
end
...
...if strcmp(aRT1,'a^1')
aRT1=1;
x1=1;
end
if strcmp(aRT1,'a^2')
aRT1=2;
x1=1;
end
if strcmp(aRT1,'a^3')
aRT1=3;
x1=1;
end
...
...
if strcmp(aRT1,'a^126')
aRT1=126;
x1=1;
end
Gibt es hierzu ne schicke Lösung zur Vereinfachung der if-Anweisungen?
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 02.03.2010, 21:35
Titel:
|
 |
Hallo,
das geht schon:
Die anderen kannst du ja dann vielleicht selber mal nach demselben Prinzip versuchen Wobei ich mich immer frage, was jemand mit 127 Variablen will...
Grüße,
Harald
|
|
|
Primo00 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 01.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.03.2010, 17:34
Titel:
|
 |
Hallo Harald,
danke für die schnelle Antwort. Die vielen Variablen brauche ich für die Ein-und Ausgabe einer GUI zur Transformation von Codewörtern, da gibt es schon mal CW mit einer Länge von 127
Habe jetzt ne Weile versucht die anderen if-Anweisungen mit dem selben Prinzip zu schreiben, aber ich bekomm es einfach nicht gebacken.
Kannste mir da vielleicht noch einmal weiterhelfen.
Beste Grüße und nochmals danke!
|
|
|
Jan* |

Forum-Century
|
 |
Beiträge: 178
|
 |
|
 |
Anmeldedatum: 06.11.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 03.03.2010, 18:43
Titel:
|
 |
Hi,
ich glaube Harald wollte darauf hinaus, dass man die vielen Variablen zu einem Vektor zusammen fassen könnte
Gruß Jan
|
|
|
Primo00 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 01.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.03.2010, 19:01
Titel:
|
 |
Ist alles Neuland für mich, was das Programmieren angeht... Aber falls du/ihr mir ne schickere Lösung mit dem Zusammenfassen der Vektoren hast/habt, ...nur her damit. Bin über jede Hilfe froh! Daher habe ich mich ja auch an euch gewannt
|
|
|
Primo00 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 01.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.03.2010, 19:34
Titel:
|
 |
|
 |
|
Hallo, habe den anderen Teil nun hinbekommen! jetzt stehe ich aber vor dem nächsten Problem und zwar mit diesen if_Anweisungen.
if aRT0== 0 && x0==1
y0 = [0 0 1];
elseif aRT0== 1
y0 = [0 1 0] ;
elseif aRT0== 2
y0 = [1 0 0] ;
elseif aRT0== 3
y0 = [0 1 1];
elseif aRT0== 4
y0 = [1 1 0];
elseif aRT0== 5
y0 = [1 1 1];
elseif aRT0 == 6
y0 = [1 0 1];
elseif aRT0 ==0 && x0==0
y0=[0 0 0];
end
if aRT1== 0 && ff1==1
y1 = [0 0 1];
elseif aRT1== 1
y1 = [0 1 0] ;
elseif aRT1== 2
y1 = [1 0 0] ;
elseif aRT1== 3
y1 = [0 1 1];
elseif aRT1== 4
y1 = [1 1 0];
elseif aRT1== 5
y1 = [1 1 1];
elseif aRT1 == 6
y1 = [1 0 1]
elseif aRT1 ==0 && x1==0
y1=[0 0 0];
end
...
...
if aRT6== 0 && ff6==1
y6 = [0 0 1];
elseif aRT6== 1
y6 = [0 1 0] ;
elseif aRT6== 2
y6 = [1 0 0] ;
elseif aRT6== 3
y6 = [0 1 1];
elseif aRT6== 4
y6 = [1 1 0];
elseif aRT6== 5
y6 = [1 1 1];
elseif aRT6 == 6
y6 = [1 0 1]
elseif aRT6 ==0 && x1==0
y6=[0 0 0];
end
habe es versucht nach dem Prinzip vom Harald zu machen, aber bekomme dann diese Fehlermeldung: ??? Undefined function or variable "y0".
Hier mein Versuch die if-Anweisungen zu vereinfachen:
for I=0:6
if ((eval(['aRT', num2str(I),'==0']))&&(eval(['x', num2str(I),'==1'])))
eval(['y', num2str(I), '=[0 0 1];']);
elseif eval(['aRT', num2str(I),'==1'])
eval(['y', num2str(I), '=[0 1 0];']);
elseif eval(['aRT', num2str(I),'==2'])
eval(['y', num2str(I), '=[1 0 0];']);
elseif eval(['aRT', num2str(I),'==3'])
eval(['y', num2str(I), '=[0 1 1];']);
elseif eval(['aRT', num2str(I),'==4'])
eval(['y', num2str(I), '=[1 1 0];']);
elseif eval(['aRT', num2str(I),'==5'])
eval(['y', num2str(I), '=[1 1 1];']);
elseif eval(['aRT', num2str(I),'==6'])
eval(['y', num2str(I), '=[1 0 1];']);
elseif ((eval(['aRT', num2str(I),'==0']))&&(eval(['x', num2str(I),'==1'])))
eval(['y', num2str(I), '=[0 0 0];']); ;
end
end
Hat jemand ne Idee wie ich das ganze lösen kann?
Beste Grüße
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 04.03.2010, 20:03
Titel:
|
 |
Hallo,
das kann ich mir auch nicht erklären, da das eine Zuweisung sein sollte. Kommt die Fehlermeldung denn aus einer dieser Zeilen, oder evtl. von woanders?
Wie Jan schon angedeutet hat, solltest du dir vielleicht die Grundlagen (z.B. könnten hier Cell Arrays hilfreich sein) von MATLAB aneignen anstatt mit solchen Monsterkonstrukten zu arbeiten.
Grüße,
Harald
|
|
|
Primo00 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 01.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.03.2010, 15:06
Titel:
|
 |
Hallo,
die Fehlermeldung kommt nach der for-Schleife. Denn nach der for-Schleife sollen die y0....y6-Werte addiert werden.
Die Fehlermeldung kommt hier:
k= y0 + y1 + y2 + y3 + y4 + y5 + y6;
Irgendeine Ahnung warum?
Gruß
|
|
|
Bijick |

Ehrenmitglied
|
 |
Beiträge: 914
|
 |
|
 |
Anmeldedatum: 18.06.07
|
 |
|
 |
Wohnort: Nürnberg
|
 |
|
 |
Version: R2006b, R2008b
|
 |
|
|
 |
|
Verfasst am: 08.03.2010, 14:56
Titel:
|
 |
Hallo Primo00,
Du hast in Deiner if-Anweisung keinen "else"-Fall. Das bedeutet, dass y0 nicht angelegt wird, wenn keiner der Fälle eintrifft. Eventuell hast Du es ja mit Rundungsungenauigkeiten zu tun. Um das zu überprüfen, kannst Du Dir die Variablen aRT0 und x0 vor den if-Anweisungen ausgeben lassen.
Herzliche Grüße
Bijick
P.S. Bitte benutze die Code-Umgebung, wenn Du Matlab-Code wiedergibst. Danke.
_________________
>> why
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|