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
Stránky: 1
Ahoj,
potřebuji zapsat něco formálně s využitím kvantifikátoru
.
Pokud mám
a mám provádět nějaký cyklus.
Zaručí mi to že budu zpracovávat všechny možná dvojice?
Nebo je nutné to rozepsat do jednoho cyklu, do kterého vložím cyklus další?
Dík za odpověď (čím dřív, tím líp ;-) )
Offline
Díky moc, už jsem z toho totiž zblblý :S
Ještě bych se zeptal, jestli je dobré si počítat ty dvojice nějak takto...
1. dvojice ... udělám něco
2. dvojice ... udělám něco
poslední dvojice, která bude bude mít velikost
//x je jako kartézský součin
Nebo mi to pořád zajistí ty dva
, že když projdu všechny dvojice, tak automaticky skončí?
abych naznačil, protože nevím, jestli jsem to dobře napsal, tak mám něco takového:
1. 
2. Dělej něco
3. Jestli vyjde něco tak se vrať do bodu 1. jinak pokračuj dál.
Zajistí mi ten bod 3., že když se vrátím do bodu jedna, že budu pracovat s těmi dvojicemi od začátku (za jistých podmínek potřebuju pracovat s těmi dvojicemi znovu)
Ještě jednou dík za radu
Offline

↑ Petrrrrr:Moc tomu nerozumím, můžeš trochu upřesnit, co program dělá? Jinak nevím co píšeš za práci, ale nebál bych se použít klasické konstrukce while a for.
Offline
Klidně upřesním. Má to být formální zápis algoritmu pro výpočet nějaké relace. Takže to je "program"
O tom while a for jsem uvažoval, ale nevím jak to správně matematicky zapsat, abych prošel všechny dvojice...
Popíšu svůj postup... jakmile ho nacvakám do Pc, tak tento příspěvěk zedituju
takže snad se v tom bude dát orientovat. Momentálně to goto tam mám protože nevím jak dobře a formálně zapsat ten cyklus
1) inicializace 
2)
,
, 
3)
\IF {
}
\IF {podmínka}
\STATE i++ //je v relaci
\IF {
} //jestli to byla posledni dvojice
\STATE
4)
\ENDIF
\ELSE
\STATE
// přidám do M dvojici, co není v relaci
\STATE i++
\IF {
} //jestli to byla posledni dvojice
\STATE
4)
\ENDIF
\STATE
2) // vrací se zpět na bod 2 a prochází znovu všechny dvojice
\ENDIF
\ENDIF
4)
// v N jsou dvojice v relaci
To, že na konci přehazuji ber prosím jako fakt, na konkrétní řešení to je vhodnější.
Offline

↑ Petrrrrr:To
,
se postará o to, aby se odsazené příkazy provedly pro všechny dvojice A,B, a to tak, že po dokončení odsazených příkazů se skočí na 3) právě když nám zbývá nějaká dvojice k testování. Nerozumím ale algoritmu: mám relaci M, pokud najdu dvojici, která v ní není, nedělám nic (jen zvětším počítadlo), pokud tam daná dvojice je, přidám ji do relace (tj. neudělám zase nic) a zvětším počítadlo. Navíc M je od začátku prázdná relace, takže se ELSE větev ani neprovede, M zůstane prázdná. Na konci do N uložíme
-- to je doplněk relace
?
Co má algoritmus dělat?
Offline
můžu zkusit přeposlat zadání do SZ? nebo zkusit popsat co mám tím algoritmem na mysli? (kopírovat sem zadání "pro všechny" se mi moc nechce)
Co se týká toho bodu 4) proč to přehazuji bych popsal až při konkrétním přeposlání celýho zadání, abych k tomu mohl vysvětlit víc "co a jak".
edit mebo bych se zadáním mohl poslat průchod algoritmem, pro nějaký konkrétní případ. Právě podle toho vzorového průchodu jsem se snažil vytvořit nějaký ten algoritmus... :)
Offline
Obecně vzato hledám ty dvojice, které v relaci nejsou (na první pohled je to kostrbaté řešení, ale vzhledem k zadání a radě kantora je to doporučený postup)
Kondr napsal(a):
To
,
se postará o to, aby se odsazené příkazy provedly pro všechny dvojice A,B, a to tak, že po dokončení odsazených příkazů se skočí na 3) právě když nám zbývá nějaká dvojice k testování.
Tak nějak jsem to myslel.
Kondr napsal(a):
Nerozumím ale algoritmu: mám relaci M, pokud najdu dvojici, která v ní není, nedělám nic (jen zvětším počítadlo), pokud tam daná dvojice je, přidám ji do relace (tj. neudělám zase nic) a zvětším počítadlo.
Tady jsem to myslel tak, že když (A,B) není v relaci (je v M) (minimálně jeden krok se provede, když na začátku je M prázdná), tak vezmu jinou dvojici, jestli tahle dvojice je v relaci, tak nedělám nic, jen zvýším počítadlo, jestli v relaci není, přidám ji do množiny M, která obsahuje dvojice, které nejsou v relaci, zvýším počítadlo a jestli to byl poslední prvek, tak jdu do 4) jinak se vrátím do 2) a znovu procházím všechna A a všechna B, takto mám v úmyslu cyklit, dokud neproberu všechny dvojice
Jakmile se dostanu do 4) do N dám doplněk M -- tedy všechny dvojice, které v relaci jsou.
Kondr napsal(a):
Navíc M je od začátku prázdná relace, takže se ELSE větev ani neprovede, M zůstane prázdná. Na konci do N uložíme
-- to je doplněk relace
?
Co má algoritmus dělat?
Tady nevím, co přesně myslíš. K podmínce \IF {
} větev \ELSE není. Když je M na začátku prázdná, tak (A,B) tam určitě není, tak je podmínka \IF pravdivá, tak se provede tělo té podmínky. A nebo blbě chápu prázdnou množinu (což je ale možné...)
edit jak tak koukám, tak jsem asi moc nenapsal co má být výsledkem... Výsledkem má být množina dvojic, které jsou v relaci
Offline

↑ Petrrrrr:Mohlo by fungovat něco takového:
opakuj=true;
while(opakuj)
opakuj=false;


if(not podmínka)
;
opakuj=true;
Bohužel pokud přidáváme dvojici do relace, neukončíme hned forcyklus. Pokud bys ho zapisoval slovně jako "for" dalo by se použít příkazu "break". Při kvantifikátorovém zápise to asi není korektní.
Offline
však z cyklu "while" se dá taky vyskočit "breakem"..., ale to bych si musel počítat ty dvojice, což by za mě řešil ten for
i=0
for (
)
j=0
for (
)
if(not podmínka)

i=0
break
Jenže tohle už se blíži spíš programátorskýmu zápisu algoritmu než matematickýmu... Ale nevím jestli to jde považovat za korektní
Offline
Stránky: 1