logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Matlab - sprawdzanie czy została wprowadzona wartość

BioZ 01 Lis 2008 22:22 4091 3
REKLAMA
  • #1 5691664
    BioZ
    Poziom 10  
    Posty: 41
    Witajcie,
    Od niedawna mam laborki z algorytmów obliczeniowych, a na nich matlab.
    Mieliśmy za zadanie zrobić skrypt pracujący na wprowadzonych przez użytkownika wektorach. Z początku wszystko fajnie, ale przy takim zapisie:
    n = input('Wprowadz liczbe elementow wektora: ');

    Wystarczyło podać liczbę niedodatnią lub niecałkowitą(choć w zasadzie dla wymiernych to po prostu zaokrągla w dół), by dalsza część programu się wysypała.
    Toteż wprowadziłem sprawdzanie, czy została podana wartość dodatnia(teraz widzę że dodam jeszcze sprawdzanie całkowitości):
    	goodn = 0;
    	while goodn <= 0
    		n = input('Wprowadz liczbe elementow wektora: ');
    		if n > 0
    			goodn = 1;
    		end;
    	end;

    I jest ok. Nawet przy duszeniu enter bez wprowadzania czegokolwiek ponownie pyta o n. Natomiast wysypuje się przy wprowadzeniu znaku innego niż cyfra:/.
    Tutaj też udało mi się pójść dalej:
    x = input('Wprowadz', 's');
    if isempty(str2num(x)) == 1
       disp('podales zla wartosc');
    else
       disp('podales dobra wartosc');
    end;

    Program sprawdza czy input zamieniony na wartość numeryczną(str2num z liter daje pustą macierz, nie licząc i oraz j) nie jest pusty. Można do tego dać while i już jest powtarzanie zapytania o n aż do skutku.
    I wszystko jest ok, ale jest dalsza część skryptu, mianowicie pętla for pytająca o kolejne elementy wektora o n-wyrazach:
    	for i = 1:n
    		x(i) = input(['Wprowadz ' num2str(i) '. element wektora: ']);
    	end;

    Próbowałem na kilka sposobów połączyć to z jedną z dwóch powyższych metod sprawdzania, i niestety nie doszedłem do satysfakcjonującego rozwiązania. Przez moment cośtam miałem, ale przy wprowadzaniu jednoznakowych elementów, przy liczbach lub 'wyrazach' się sypał:
    error: A(I) = X: X must be a scalar or a vector with same length as I
    error: assignment failed, or no method for 'string = string'

    I po tym moja pomysłowość się zmęczyła.

    Jest ktoś w stanie podpowiedzieć, w jaki sposób sklecić pętlę wprowadzania n elementów wektora, aby za każdym razem było sprawdzone czy wprowadzony element jest liczbą, i ponawiał zapytanie, jeśli trzeba?

    Pozdrawiam.
  • REKLAMA
  • Pomocny post
    #2 5693532
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    nie bazuj na pętli o określonej liczbie przebiegów, lecz na pętli while, zaś licznikiem niech będzie dodatkowa pomocnicza zmienna, która bedzie inkrementowana wyłącznie w przypadku wprowadzenia poprawnej wartości.
  • REKLAMA
  • #3 5693869
    BioZ
    Poziom 10  
    Posty: 41
    Mam teraz coś takiego:
    i = 1;
    while i <= 3          %domyślnie zamiast 3 będzie inputowane n
    	x(i) = input('Wprowadz', 's');
    	if isempty(str2num(x(i))) == 1
    	   disp('podales zla wartosc');
    	else
    	   disp('podales dobra wartosc');
    	   i = i+1;
    	end;
    end;


    Dobrze zrozumiałem(chyba nie x])?
    Problem niestety jest podobny przy wprowadzaniu więcej niż jednoznakowego inputa:|(jedynie podaje że "or no method for '<unknown type> = string').

    Chyba jest coś z inputem?
    Jak próbowałem bez 's' to nie szło, a teraz natomiast.. Być może też jest coś źle, bo jak podam wszystkie wartości poprawnie(ale jednoznakowe), to wyświetla liczbę utworzoną z tych podanych wartości...



    Edit:
    Uoooooooooooo dałem radę^_^!
    i = 1;
    while i <= 3
    	x = input('Wprowadz', 's');
    	if isempty(str2num(x)) == 1
    	   disp('podales zla wartosc');
    	else
    	   disp('podales dobra wartosc');
    	   z(i) = str2num(x);
    	   i = i+1;
    	end;
    end;

    Dzięki za wsparcie:))!
REKLAMA