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

Variable auf Wert prüfen

 

Soopaman_Luva
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 19:43     Titel: Variable auf Wert prüfen
  Antworten mit Zitat      
Hi,

würde gerne mit Hilfe einer if-Abfrage bei einer Variable prüfen ob da jetzt eine Zahl drinnen steht oder ein Buchstabe, Symbol etc. Weil wenn es keine Zahl ist soll eine Fehlermeldung kommen.

Und noch eine Frage:
Gibt es einen Befehl mit dem ich das Matlab-Programm neu starten kann? D.h. dass nach einer if Abfrage eine Fehlermeldung kommt, und dann beginnt das Programm wieder von vorne.

Danke für die Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 20:44     Titel:
  Antworten mit Zitat      
Wo kommen diese Variablen denn her?

Wenn es Strings sind könnte ein ganz einfacher Test so aussehen:
Code:
str='1.234';

p=regexp(str,'\D');
if numel(p)<=1 & strmatch(str(p),'.')
    zahl=str2double(str);
    disp(['Zahl ist ' num2str(zahl)]);
else
    disp('keine gültige Zahl');
end
 
Soopaman_Luva
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 20:48     Titel:
  Antworten mit Zitat      
Der Wert der Variablen wird eingegeben. Und wenn halt irgendwelche Buchstaben vorkommen sollte es eben eine Fehlermeldung geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 20:52     Titel:
  Antworten mit Zitat      
Dann müsste es ja gehen...
 
Soopaman_Luva
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 20:58     Titel:
  Antworten mit Zitat      
Habe es versucht bekomme aber jetzt diese Fehlermeldung:

Bitte nMax eingeben(Ganzzahlig): 12
??? Undefined function or method 'regexpi' for input
arguments of type 'double'.

Error in ==> Siebtest at 15
p=regexpi(nMax,'\D');
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 21:05     Titel:
  Antworten mit Zitat      
Also gut,
ich dachte es wird etwas mit
Code:
oder so eingelesen, halt etwas, was einen String liefert. Damit würde es gehen.
Du liest da anders ein...aber wie?
Da Du regexp offenbar auf eine Variable der Klasse double anwendest müsste man sich das ganze auch schon wieder sparen können, da etwas der Klasse double eh immer eine Zahl ist.
Man müsste mal mehr von dem Code sehen...
 
Soopaman_Luva
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 21:16     Titel:
  Antworten mit Zitat      
Hier ist der Code:

Code:

disp('***Sieb des Erathostenes')
disp(' ')


nMax = input('Bitte nMax eingeben(Ganzzahlig):  ');



if rem(nMax,1) == 0     %Es wird kontrolliert ob es bei der Division von nmax durch 1 einen Rest gibt
                        %wenn ja, dann ist es kein Integerwert.

    Liste = [1 : 1 : nMax];     %Startwert : Schrittweite : Endwert

    for i = 2 : nMax;           %Sieb
        if Liste(i) ~= 0;
            for k = (i+1) : nMax;
                if (mod(Liste(k),i)) == 0;
                    Liste(k) =0;
                end;
            end;    
        end;
    end;

    Liste = Liste(Liste ~= 0)

else
    disp('Es wurde keine ganze Zahl eingegeben.')
    disp('Bitte das Programm neu starten.')
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 22:20     Titel:
  Antworten mit Zitat      
Da hast Du doch schon eine gut Lösung...

Um das Problem mit den Neustarten des Programms noch zu lösen kannst Du das ganze in eine Funktion packen, die sich im else-Zweig der if-Anweisung selbst aufruft.
Speichere den folgenden Code unter der Datei sieb.m:
Code:
function sieb
disp('***Sieb des Erathostenes')
disp(' ')


nMax = input('Bitte nMax eingeben(Ganzzahlig):  ');


if rem(nMax,1) == 0     %Es wird kontrolliert ob es bei der Division von nmax durch 1 einen Rest gibt
                        %wenn ja, dann ist es kein Integerwert.

    Liste = [1 : 1 : nMax];     %Startwert : Schrittweite : Endwert

    for i = 2 : nMax;           %Sieb
        if Liste(i) ~= 0;
            for k = (i+1) : nMax;
                if (mod(Liste(k),i)) == 0;
                    Liste(k) =0;
                end;
            end;    
        end;
    end;

    Liste = Liste(Liste ~= 0)

else
    disp('Es wurde keine ganze Zahl eingegeben.')
    sieb
end


Du solltest noch eine Abfrage gegen nMax<=0 einfügen.
 
Soopaman_Luva
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 22:57     Titel:
  Antworten mit Zitat      
Danke dir, funktioniert super. Nur halt das mit der if-Abfrage nicht, dass man nur Zahlen eingeben kann, aber das ist nicht so schlimm, werde einfach noch ein bisschen probieren, und falls ich es wirklich nicht schaffen sollte, dann melde ich mich nochmal.

Auf jedenfall danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 23:15     Titel:
  Antworten mit Zitat      
Ja, dann musst Du doch auf Strings ausweichen, siehe dazu den Parameter 's' beim Input-Befehl:
Code:
function sieb
disp('***Sieb des Erathostenes')
disp(' ')

str = input('Bitte nMax eingeben(Ganzzahlig):  ','s');

n=regexp(str,'\D');
if numel(n)<=1 & strmatch(str(n),'.')
    nMax=str2double(str);
    if rem(nMax,1) == 0     %Es wird kontrolliert ob es bei der Division von nmax durch 1 einen Rest gibt
        %wenn ja, dann ist es kein Integerwert.

        Liste = [1 : 1 : nMax];     %Startwert : Schrittweite : Endwert

        for i = 2 : nMax;           %Sieb
            if Liste(i) ~= 0;
                for k = (i+1) : nMax;
                    if (mod(Liste(k),i)) == 0;
                        Liste(k) =0;
                    end;
                end;
            end;
        end;

        Liste = Liste(Liste ~= 0)

    else
        disp('Es wurde keine ganze Zahl eingegeben.')
        sieb;
    end
else
    disp('keine gültige Zahl');
    sieb;
end
 
Soopaman_Luva
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 23:39     Titel:
  Antworten mit Zitat      
Danke habe es jetzt so gemacht


Code:

function Siebtest
clc
clear all

disp('***Sieb des Erathostenes')
disp(' ')


nMax = input('Bitte nMax eingeben(Ganzzahlig):  ','s');


dummy = regexp(nMax,'\D');
if numel(dummy) <= 1 & strmatch(nMax(dummy),'.')
   nMax = str2num(nMax)
     


if rem(nMax,1) == 0     %Es wird kontrolliert ob es bei der Division von nmax durch 1 einen Rest gibt
                        %wenn ja, dann ist es kein Integerwert.
                       
    if nMax >= 0        %Damit nur positive Zahlen eingegeben werden können.
       
        Liste = [1 : 1 : nMax];     %Startwert : Schrittweite : Endwert
   
        for i = 2 : nMax;           %Sieb
            if Liste(i) ~= 0;
                for k = (i+1) : nMax;
                    if (mod(Liste(k),i)) == 0;
                        Liste(k) =0;
                    end;
                end;    
            end;
        end;

        Liste = Liste(Liste ~= 0)
       
    else
        disp('Es wurde keine positive Zahl eingegeben.')
        Siebtest
    end
else
    disp('Es wurde keine ganze Zahl eingegeben.')
    Siebtest
   
end

else
    disp('Keine gültige Zahl');
    Siebtest
end

end
 


Aber jetzt könnte ich ja einfach die anderen beiden if-Abfragen weglassen, die kontrollieren ob die Zahl positiv ist und es sich um eine ganze Zahl handelt.

So hätte ich mir das gedacht:


Code:

function Siebtest2
clc
clear all

disp('***Sieb des Erathostenes')
disp(' ')


nMax = input('Bitte nMax eingeben(Ganzzahlig):  ','s');


dummy = regexp(nMax,'\D');
if numel(dummy) <= 1 & strmatch(nMax(dummy),'')
   nMax = str2num(nMax)
     
       
        Liste = [1 : 1 : nMax];     %Startwert : Schrittweite : Endwert
   
        for i = 2 : nMax;           %Sieb
            if Liste(i) ~= 0;
                for k = (i+1) : nMax;
                    if (mod(Liste(k),i)) == 0;
                        Liste(k) =0;
                    end;
                end;    
            end;
        end;

        Liste = Liste(Liste ~= 0)


else
    disp('Sie haben keine ganze positive Zahl eingegeben!');
    Siebtest2
end

end
 


Funktioniert eigentlich so. Und so spare ich mir relativ viel.

Würde jetzt nur noch gerne wissen was diese Zeilen genau machen, bzw. was sie bedeuten:


Code:

dummy = regexp(nMax,'\D');
if numel(dummy) <= 1 & strmatch(nMax(dummy),'')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 00:12     Titel:
  Antworten mit Zitat      
Soopaman_Luva hat Folgendes geschrieben:

Würde jetzt nur noch gerne wissen was diese Zeilen genau machen, bzw. was sie bedeuten:

Code:

dummy = regexp(nMax,'\D');
if numel(dummy) <= 1 & strmatch(nMax(dummy),'')
 


Erst werden die Anzahl der Zeichen festgestellt, die keine Zahlen sind.
Dann wird geprüft ob es höchstens eins ist, und zwar ein Punkt (als Dezimaltrennzeichen).
 
Soopaman_Luva
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 10:03     Titel:
  Antworten mit Zitat      
Anonymous hat Folgendes geschrieben:
Soopaman_Luva hat Folgendes geschrieben:

Würde jetzt nur noch gerne wissen was diese Zeilen genau machen, bzw. was sie bedeuten:

Code:

dummy = regexp(nMax,'\D');
if numel(dummy) <= 1 & strmatch(nMax(dummy),'')
 


Erst werden die Anzahl der Zeichen festgestellt, die keine Zahlen sind.
Dann wird geprüft ob es höchstens eins ist, und zwar ein Punkt (als Dezimaltrennzeichen).


Oke, aber was genau ist \D?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 10:39     Titel:
  Antworten mit Zitat      
Code:
dummy = regexp(nMax,'\D');

dummy enthält diejenigen Stellen vom String nMax, an denen etwas anderes als eine Zahl steht.
Nachzulesen unter Regular Expressions: Character Classes
 
joanna
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 26.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2010, 09:29     Titel:
  Antworten mit Zitat      
Hallo,
ich habe ein ähnliches Problem, wie es hier bereits beschrieben ist.
Und zwar gibt es eine Eingabe (als String) und nun soll dieser String getestet werden.
Zum einen soll getest werden, ob die Eingabe eine Zahl, bzw eine Dezimalzahl ist, das hab ich mit dem hier schon genannten Code gemacht, und das funktioniert auch prima!
Code:

p = regexp(Wert ,'\D');
if numel(p) <= 1 & strmatch(Wert(p), '.')
 

Allerdings möchte ich auch Rechnungen wie z.B 72/2.54 zulassen. Muss ich dann eine verschachtelte Auswahl oder so machen?
Vielleicht hat ja jemand von euch eine Idee Smile
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.