Ahoj, jenom taková jednoducha věc. Řekněme, že uživatel má zadat rok, ve kterém se narodil a chtěl bych to omezit od např. roku 1900 až 2012. Zvolí-li uživatel jinou hodnotu, upozornilo by ho to na nesmyslnost a musel by zadat hodnotu znovu.
Mě napadlo něco jako toto:
rok=input('Zadej rok narození: ')
if rok>2012||rok<1900
???
otherwise
disp('.\n')
endNic víc jsem nevypotil :(
Mám za to, že by to mohlo jít i přes cyklus, třeba while, ale...
Taky mě tíží:
velikost=input('Zadej 0, jsi-li takovy. Popr. zadej 1, jsi-li makovy): ');
if velikost==0
neco=vypocet;
elseif velikost==1
neco=vypocet;
endKdyž zadám jako velikost nějaké písmeno, tak se input 'Zadej...' objeví znovu, což je fajn. Ale zadám-li jiné číslo než 0 nebo 1, rovnou to skočí k endu :/. Chtěl bych, aby při zadání i jakéhokoliv jiného čísla se zopakoval input 'Zadej...'. Klidně i s upozorněním, že zadal nesmyslné číslo, cokoliv. Nějaký nápad?
Offline

↑ random lempl:
cyklus do-while jako v c-čku zřejmě nelze, takže např. takhle?
rok=input('Zadej rok narození: ')
while rok>2012||rok<1900
rok=input('Zadej rok narození: ')
endnebo
rok=2015;
while rok >2012 || rok<1900
rok=input('Zadej rok narození: ')
endOffline
↑ gladiator01:
Diky, ten prvni while funguje nadherne.
Offline

↑ random lempl:
U toho druhého dotazu také můžeš použít while. Do "end" ti to skočí, protože jsi neřekl co to má dělat, když napíšeš jiná čísla než 0 a 1.
Takže použij while nebo větev "else", ve které napíšeš co se má dít.
Poun.: zadání jiného znaku než čísla by jsi měl také ošetřit, sice to skočí znova na začátek, ale ta červená anglická hláška moc hezká není.
Offline
↑ gladiator01:
Jak to, že to ale neskočí do end při zadání písmena? Bere to jako vstup pouze čísla?
Přes else mně to nejde, resp. 1x se to zoopakuje, ale zadám-li znovu špatně, putuje to k endu. A bohužel nevím, jak v matlabu napsat hodnotu příkazu "cokoliv - možnost {0 1}", takže while taky netuším.
Na ošetření písmen (jiných čísel), aby nevyskočil error, by podle mě stačila ta hodnota "cokoliv, tj. množina všech kombinací kláves - mnou zvolené možnosti {0 1}"?
Offline
Zkusím to říci jinak - lze nějak nastavit, že zadám-li jinou hodnotu než např. 0 nebo 1 (tzn. jakékoliv jiné číslo, písmeno nebo třeba i odenterování bez zadání symbolu - to asi nepůjde), vrátí se mně formule pro zadání 0 nebo 1, třeba s upozorněním?
S písmeny problém nemám (stačí zadát ve while do expression opět původní vstup s upozrněním chybného zadání). Error vyskakuje při jiných číslech nebo odenterování bez zadání čehokoliv. Chci to napsat co nejvíce "blbuvzdorné".
Offline

↑ random lempl:
čísla a normální znaky. jak ošetřit bílé znaky nevím.
velikost=5;
while (velikost ~= '0' && velikost~= '1') || isletter(velikost)
velikost=(input('zadej 0, jsi-li takovy. Popr. zadej 1, jsi-li makovy): ','s')); %uloží jako řetězec (aby neházelo chybu při písmenech)
end
velikost=str2num(velikost) %převod řetězce na čísloTady jsem našla seznam funkcí, tak můžeš zkoušet (soubor reference.pdf)
Offline
↑ gladiator01:
Dekuji za odpoved a za odkaz. Isletter je zajimavy, ale ma jednu nevyhodu (jak jsem nastudoval v danem dokumentu) - hodi se pouze pro hodnoty 0 nebo 1. Ve skutecnosti resim situaci, kdy velikost muze nabyvat treba intervalu <-10;100> (viz napr. ty roky). Vypisovat 111 moznosti by se mne nechtelo. Neznas neco jineho?
Radeji zrekapituluji cely dotaz:
Chci to nastavit tak, aby vstup mohl nabyvat pouze napr. 111 hodnot (po sobe jdoucich cisel; slo by mimochodem i pismen?). Pri tom aby zadanim jineho cisla, souboru cisel (nargin >1; error?), pismena, popr. kdyby nekdo vedel tak i bileho znaku (teoreticky nargin<1; error?) Matlab upozornil na nesmyslnost a prinutil uzivatele znovu zadat hodnotu.
Jelikoz opakovane prinuceni muze byt nekonecne dlouhe, pujde podle me o fci while. Hledam tedy zpusob, jak definovat trochu vetsi "obor hodnot" pro vstup.
Offline

↑ random lempl:
Isletter určí pro KAŽDÝ znak řetězce zda je znakem abecedy A VRATÍ VEKTOR, kde u každého znaku napíše zda JE ZNAKEM ABECEDY (napíše se 1) čí NIKOLIV (napíše se 0).
Teď jde jen o to určit zda všechny hodnoty jsou 0.
Takže tvůj první odstavec moc nedává smysl.
Pravděpodobně se to dělá jinak já nevim.
slo by mimochodem i pismen?
kdyby jsi si četl moje příspěvky, tak by jsi zjistil, že input('text: ','s')); uloží vstup jako řetězec.
Že chceš pracovat s řetězcem jsi NENAPSAL, opravdu neumím číst myšlenky..
V matlabu umím pravděpodobně ještě hůře než ty, takže už to nebudu řešit.
Offline