simple Aufgabe: Den Abstand einer Koordinate zum Ursprung errechnen. Die alten Ergebnisse sollen nach einem neuen Run zusätzlich angezeigt werden.
Als Output muss ein fprintf Befehl genutzt werden.
Der Aufbau war wie folgt:
Code:
%
%%
clear
%
flag=0
%
P = input('Bitte geben Sie die Koordinaten ein [X,Y]:')
X = P(1); Y = P(2);
while X~=0 | Y~=0
d = sqrt(X^2 + Y^2);
if flag==0
VfA = [X,Y,d];
flag=flag+1;
else
VfA = [VfA; X,Y,d];
end
formatSpec = 'Der %d Abstand ist %4.3f bei X=%4.1f und Y=%4.1f \n';
fprintf(formatSpec,flag,VfA(:,3),VfA(:,1),VfA(:,2));
%
P = input('Bitte geben Sie die Koordinaten ein [X,Y]:');
X = P(1); Y = P(2);
end
Der erste Run geht immer Gut, bei den Folgenden kommt er dann durcheinander.. Vielleicht hat jemand eine Idee die Matritzen anders auseinander zu nehmen damit der fprintf Befehl eine Bessere zuordnung hat.
ein Problem dürfte sein, dass die Spalten von VfA mehrere Werte beinhalten, flag aber immer nur einen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Ja stimmt, das hatte ich nicht beachtet. Aber das war auch tatsächlich weniger das Problem. Selbst ohne flag im Output bekomme ich die VfA Matrix Daten nicht in die richtige Reihenfolge:
Code:
%%
clear
%
%
flag=0;
%
P = input('Bitte geben Sie die Koordinaten ein [X,Y]:');
X = P(1); Y = P(2);
while X~=0 | Y~=0
d = sqrt(X^2 + Y^2);
if flag==0
VfA = [X,Y,d];
flag=flag+1;
else
VfA = [VfA; X,Y,d];
end
formatSpec = 'Der Abstand ist %4.3f bei X=%4.1f und Y=%4.1f \n';
fprintf(formatSpec,VfA(:,3),VfA(:,1),VfA(:,2));
%
P = input('Bitte geben Sie die Koordinaten ein [X,Y]:');
X = P(1); Y = P(2);
end
Bitte geben Sie die Koordinaten ein [X,Y]:[8,7]
Der Abstand ist 10.630 bei X= 8.0 und Y= 7.0
Bitte geben Sie die Koordinaten ein [X,Y]:[8,7]
Der Abstand ist 10.630 bei X=10.6 und Y= 8.0
Der Abstand ist 8.000 bei X= 7.0 und Y= 7.0
Bitte geben Sie die Koordinaten ein [X,Y]:[8,7]
Der Abstand ist 10.630 bei X=10.6 und Y=10.6
Der Abstand ist 8.000 bei X= 8.0 und Y= 8.0
Der Abstand ist 7.000 bei X= 7.0 und Y= 7.0
Bitte geben Sie die Koordinaten ein [X,Y]:
eine Matrix aus den Werten bilden und sie transponieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hey Harald, Vielen dank für den Tipp. fprintf liest die Matrix ja etwas anders.. Daraufhin hab ich mir eine Endmatrix aus VfA und flag gebaut um die im Ausgabetext in der richtigen reihenfolge ausgeben zu lassen.
Vielleicht hilft es ja Jemanden:
Code:
%%
clear
%
flag=[0];
%
P = input('Bitte geben Sie die Koordinaten ein [X,Y]:');
X = P(1); Y = P(2);
while X~=0 | Y~=0
d = sqrt(X^2 + Y^2);
if flag==[0]
VfA = [d,X,Y];
flag = flag + 1;
Mflag = flag
FVfA = [Mflag,VfA]'
else
VfA = [VfA;d,X,Y];
flag = flag + 1;
Mflag = [Mflag;flag]
FVfA = [Mflag,VfA]'
printSpec = 'Der %d. Abstand beträgt %f bei X = %d und Y = %d \n';
fprintf(printSpec,FVfA)
P = input('Bitte geben Sie die Koordinaten ein [X,Y]:');
X = P(1); Y = P(2);
end
%
Der 1. Abstand beträgt 810.319073 bei X = 549 und Y = 596
Der 2. Abstand beträgt 543.282615 bei X = 100 und Y = 534
Der 3. Abstand beträgt 9.433981 bei X = 5 und Y = 8
Der 4. Abstand beträgt 10.816654 bei X = 6 und Y = 9
Bitte geben Sie die Koordinaten ein [X,Y]:
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
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.