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

Vektor - Berechnung der Quersumme / Überprüfung ~=0

 

machlab
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 04.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.04.2015, 18:51     Titel: Vektor - Berechnung der Quersumme / Überprüfung ~=0
  Antworten mit Zitat      
Servus zusammen,

muss ein Programm entwickeln.

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:

clear all
clc
%Eingabe des Vektors durch Anwender
A= input ('Bitte Vektor eingeben: ');
b=size(A);

%Erste Eingabe ==0
if mod(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
elseif mod(b,2)==1
   
   
    l= length (b);
    fprintf('Die Länge des Vektors beträgt: %g \n',l);
end



Grüße und vielen Dank schonmal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.04.2015, 22:17     Titel: Re: Vektor - Berechnung der Quersumme / Überprüfung ~=0
  Antworten mit Zitat      
Hallo machlab,

"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:
Code:


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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
machlab
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 04.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2015, 13:26     Titel:
  Antworten mit Zitat      
Servus,

Zitat:
"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:
clear all
clc
%Eingabe des Vektors durch Anwender
A= input ('Bitte Vektor eingeben wie folgt, [a,b,c,..]: ');
%Überprüfung ob ganzzahlige Werte
if any(A ~= floor(A))
    %Überprüfung ob erster Wert ~=0
    if all mod(A,2)==1
    l= length (A);
    fprintf ('Quersumme: %g',l);
   
    elseif all mod (A,2)==0
    fprintf ('Erster Wert darf nicht Null sein');    
    end      
end



Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.04.2015, 15:38     Titel:
  Antworten mit Zitat      
Hallo machlab,

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
if any(A ~= floor(A))
   % Dann muss das Programm mit einem ERROR abbrechen!
end

%Überprüfung ob erster Wert ~=0
if all mod(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
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 - 2024 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.