Matematické Fórum

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

#1 30. 12. 2012 12:33 — Editoval random lempl (30. 12. 2012 13:11)

random lempl
Příspěvky: 36
Reputace:   
 

Matlab - zabránění zadání nesmyslné hodnoty

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:

Code:

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íží:

Code:

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

 

#2 30. 12. 2012 13:11 — Editoval gladiator01 (30. 12. 2012 13:16)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Matlab - zabránění zadání nesmyslné hodnoty

↑ random lempl:
cyklus do-while jako v c-čku zřejmě nelze, takže např. takhle?

Code:

rok=input('Zadej rok narození: ')
while rok>2012||rok<1900 
        rok=input('Zadej rok narození: ')
end

nebo

Code:

rok=2015;
while rok >2012 || rok<1900 
        rok=input('Zadej rok narození: ')
end

Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#3 30. 12. 2012 13:15 — Editoval random lempl (30. 12. 2012 13:24)

random lempl
Příspěvky: 36
Reputace:   
 

Re: Matlab - zabránění zadání nesmyslné hodnoty

↑ gladiator01:

Diky, ten prvni while funguje nadherne.

Offline

 

#4 30. 12. 2012 13:17 — Editoval gladiator01 (30. 12. 2012 13:20)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Matlab - zabránění zadání nesmyslné hodnoty

↑ 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í.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#5 30. 12. 2012 13:26 — Editoval random lempl (30. 12. 2012 13:30)

random lempl
Příspěvky: 36
Reputace:   
 

Re: Matlab - zabránění zadání nesmyslné hodnoty

↑ 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

 

#6 30. 12. 2012 14:41 — Editoval random lempl (30. 12. 2012 14:43)

random lempl
Příspěvky: 36
Reputace:   
 

Re: Matlab - zabránění zadání nesmyslné hodnoty

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

 

#7 30. 12. 2012 16:46 — Editoval gladiator01 (30. 12. 2012 16:53)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Matlab - zabránění zadání nesmyslné hodnoty

↑ random lempl:
čísla a normální znaky. jak ošetřit bílé znaky nevím.

Code:

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)


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#8 30. 12. 2012 18:44

random lempl
Příspěvky: 36
Reputace:   
 

Re: Matlab - zabránění zadání nesmyslné hodnoty

↑ 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

 

#9 30. 12. 2012 21:14 — Editoval gladiator01 (30. 12. 2012 21:15)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Matlab - zabránění zadání nesmyslné hodnoty

↑ 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.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson