Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
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') end
Nic 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; end
Když 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í: ') end
nebo
rok=2015; while rok >2012 || rok<1900 rok=input('Zadej rok narození: ') end
Offline
↑ 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 číslo
Tady 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