[MATLAB] Obsługa wejścia

jeth
Użytkownik
Użytkownik
Posty: 41
Rejestracja: 20 mar 2010, o 12:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy

[MATLAB] Obsługa wejścia

Post autor: jeth »

Witam,
mam taki kod, w którym po uruchomieniu programu użytkownik proszony jest o podanie paru wartości liczbowych:

Kod: Zaznacz cały

p1 = input('Podaj liczbę 1: ');
p2 = input('Podaj liczbę 2: ');
p3 = input('Podaj liczbę 3: ');
Jak sprawdzić poprawność wpisanych danych? Jak zrobię coś takiego:

Kod: Zaznacz cały

p1 = input('Podaj liczbę 1: ');
if(isempty(p1))
   disp('Proszę podać wartość.');
end

p2 = input('Podaj liczbę 2: ');
to po niewpisaniu liczby komunikat co prawda zostaje wyświetlony, ale program pyta już o drugą liczbę - a dobrze by było przerwać działanie skryptu po niewprowadzeniu (bądź błędnym wprowadzeniu) pierwszej. Czy ktoś wie, jak to zrobić?

Dziękuję za pomoc,
pozdrawiam
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[MATLAB] Obsługa wejścia

Post autor: pyzol »

O ile dobrze pamiętam, to komenda break do czegoś takiego służyła, także jak wpiszesz w helpie to powinno CIe naprowadzić, może nawet zwykłym endem się będzie dało. Możesz też użyć funkcji while by wymusić w końcu wpisanie, czyli coś w tym stylu:

Kod: Zaznacz cały

while (isemty(p1))
p1=input('nie została podana liczba, proszę wpisać liczbę')
end
A propos liczb to chyba lepiej skorzystać z podajże isnumber.
jeth
Użytkownik
Użytkownik
Posty: 41
Rejestracja: 20 mar 2010, o 12:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy

[MATLAB] Obsługa wejścia

Post autor: jeth »

Widzę, że Kolega to weteran Matlaba :)
break właśnie nie do końca - zgodnie ze specyfikacją Matlaba można jej używać jedynie wewnątrz pętli for i while - a przed Twoim postem danych nie sprawdzałem w pętli, więc mi zwracał error - i zasugerował użycie return. A wtedy to już działało 'za bardzo', bo z kolei reagował na złe wpisanie liczby, ale od razu przerywał wykonanie skryptu - tak, jakbym nacisnął CTRL+C.
Ale Twoje rozwiązanie z pętlą jest jak najbardziej poprawne i wszystko działa, jak należy, wieczorem doczytałem o isnumeric, i brakowało mi tylko tego, co napisałeś. :)
Kolejny raz bardzo dziękuję! :)
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[MATLAB] Obsługa wejścia

Post autor: pyzol »

A tak wracając jeszcze to możesz użyć funcji if,else, wtedy będziesz mógł zrobić tak:

Kod: Zaznacz cały

p1 = input('Podaj liczbę 1: ');
if(isempty(p1))
   disp('Została podana zła wartość.');
else
p2 = input('Podaj liczbę 2: ');
if(isempty(p2))
...
else
Akurat ja nie robiłem w matlabie programów "idiotoodpornych". Nie jest zresztą to aż tak łatwe.
jeth
Użytkownik
Użytkownik
Posty: 41
Rejestracja: 20 mar 2010, o 12:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy

[MATLAB] Obsługa wejścia

Post autor: jeth »

W sumie też można tak, ale jakoś ta opcja z while'm bardziej mi się podoba ;) Właśnie po raz pierwszy muszę napisać idiotoodporny program (w zasadzie projekt) i też już zdążyłem zauważyć, że nie jest to takie proste.
ODPOWIEDZ