Bei dem der Anwender einen beliebigen Vektor (z.B. 1534) über das Command Window eingibt - dann soll überprüft werden ob die Werte ganzzahlige Werte sind und ob die erste Stelle ungleich 0 ist.
Nach dieser Überprüfung soll die Quersumme gebildet werden und auf der Konsole ausgegeben werden.
Verwenden darf ich nur die Befehle ( length, mod, und floor).
Wäre super wenn ihr mir zeigt wie ich diese Aufgabe lösen kann, habe mir auch schon etwas überlegt komme jedoch nicht weiter.
Code:
clearall clc
%Eingabe des Vektors durch Anwender
A= input('Bitte Vektor eingeben: ');
b=size(A);
%Erste Eingabe ==0 ifmod(b,2)==0 error('Erste Eingabe darf nicht ungleich 0 sein! \n');
fprintf('Die Länge des Vektors beträgt: %g \n',b);
% Wenn Erste Eingabe =~0 elseifmod(b,2)==1
l= length(b);
fprintf('Die Länge des Vektors beträgt: %g \n',l);
end
"1534" ist erstmal ein Skalar. Meinst Du den Vektor [1, 5, 3, 4]?
Zitat:
Bei dem der Anwender einen beliebigen Vektor (z.B. 1534) über das Command Window eingibt - dann soll überprüft werden ob die Werte ganzzahlige Werte sind und ob die erste Stelle ungleich 0 ist.
Ob eine Zahl ganzzahlig ist kann man so überprüfen:
SIZE(A) gibt einen Vektor zurück. LENGTH ist hier wohl praktischer.
Mit MOD(b, 2) überprüfst Du, ob die Dimensionen eine gerade Anzahl haben. Da "b" aber ein Vektor ist, z.B. [1, 4], wird für die IF-Bedingung noch implizit ein ALL() eingefügt.
Eine gerad-zahlige Länge kommt in der Aufgabenstellung nicht vor.
Zitat:
Nach dieser Überprüfung soll die Quersumme gebildet werden und auf der Konsole ausgegeben werden.
Wie könnte man das probieren?
Zitat:
Verwenden darf ich nur die Befehle ( length, mod, und floor).
Das ist vollkommen unmöglich. IF, ==, isequal, subsassgn, sum, add, display, etc sind unbedingt notwendig.
Ich habe noch nie eine sinnvolle Hausaufgaben-Frage gesehen, bei denen die Matlab-Befehle vorgegeben werden. Auch "ohne Matlab-Funktionen" sieht man oft in solchen Fragen, das ist aber auch grundsätzlich Unfug.
"1534" ist erstmal ein Skalar. Meinst Du den Vektor [1, 5, 3, 4]
Ja genau das meine ich. Ist es möglich, dass man den Vektor auch wie folgt eingeben kann (1534) - denn so ist es in der Aufgabenstellung gefordert und ich denke das geht nicht. D.h. der Vektor muss so [1,5,3,4] eingeben werden.
Stimmt das Programm schon so vom Aufbau?, bin absoluter Anfänger.
Code:
clearall clc
%Eingabe des Vektors durch Anwender
A= input('Bitte Vektor eingeben wie folgt, [a,b,c,..]: ');
%Überprüfung ob ganzzahlige Werte
ifany(A ~= floor(A))
%Überprüfung ob erster Wert ~=0 ifallmod(A,2)==1
l= length(A);
fprintf('Quersumme: %g',l);
Bitte lasse unbedingt das ausgesprochen hinderliche "clear all" weg. Es löscht u.a. alle Breakpoints des Debuggers. Und alles, was das Debuggen erschwert ist ein böser Feind des Programmierers.
Immer wieder raten Dozenten zu diesem bösartigen Befehl, aber nur, weil sie den Rat ebenfalls früher bekommen hatten - deswegen wird diese Methode aber auch nicht sinnvoller.
Zitat:
Ist es möglich, dass man den Vektor auch wie folgt eingeben kann (1534) - denn so ist es in der Aufgabenstellung gefordert und ich denke das geht nicht. D.h. der Vektor muss so [1,5,3,4] eingeben werden.
Wenn man wirklich "1534" eingibt, ist dies einfach kein Vektor. Vielleicht wenn man es als String eingibt, also als CHAR-Vektor, könnte dies irgendwie die Aufgabenstellung erfüllen. Aber dann sind keine Zahlen größer als 9 möglich. Dies sollte derjenige klären, der die Aufgabe gestellt hat.
Code:
% Weglassen: clear all % Ist das wirklich nützlich hier: clc
%Eingabe des Vektors durch Anwender
A= input('Bitte Vektor eingeben wie folgt, [a,b,c,..]: ');
%Überprüfung ob ganzzahlige Werte
ifany(A ~= floor(A)) % Dann muss das Programm mit einem ERROR abbrechen! end
%Überprüfung ob erster Wert ~=0 ifallmod(A,2)==1 % ??? Dieser Test überprüft, ob alle Zahlen ungerade sind. % Ein Test, ob der erste Werte 0 ist sollte so etwas enthalten: % A(1) == 0
l = length(A);
% fprintf ('Quersumme: %g', l); % LENGTH gibt die größte Länge der Dimensionen zurück, für einen Vektor % also die Anzahl der Elemente (siehe "help length"). % Das hat nichts mit einer Quersumme zu tun.
% elseif all mod (A,2)==0 % Wenn Du vorher schon getestet hast mit "if Expression==1" ist ein "elseif % Expression == 0" nicht notwendig: Ein einfaches ELSE tut genau das % gleiche. % Allerdings gilt hier wie oben: Dies ist ein Test ob alle Zahlen gerade sind. % Das hat also hiermit nichts zu tun: fprintf('Erster Wert darf nicht Null sein');
end end
Was also noch fehlt ist ein Test des Wertes des ersten Elements und die Quersumme. Weißt Du, wie die Quersumme definiert ist?
Es könnte eine hilfreiche Idee sein mal z.B. Google nach "Matlab Quersumme" zu fragen, oder?
Gruß, Jan
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
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.