Diskuze: Rekurzivní výpočet Cantorova Diskontinua
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 17 zpráv z 17.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Kantorovo mračno si můžeš jednoduše představit jako čáru, kterou vždy rozdělíš na tři díly a ten prostřední vymažeš. Je to hezky popsané na wiki: http://cs.wikipedia.org/…diskontinuum
Ty asi nemáš udělat nic jiného, než vypsat ty 3 intervaly. V C to
napíšeš prostě tak, že uděláš funkci cantor(int od, int do) a v této
funkci si vstup rozdělíš na tři části a na každou část zavoláš znovu
tuto funkci. Musíš tam dát také nějakou "zarážku", aby to někdy
přestalo 
Tenhle příklad mám doma hezky zpracovaný (ze školy), když si nebudeš vědět rady, tak mi napiš SZ. Ale myslím, že po nápovědě od sdraca by neměl být problém. =)
Podívej se co je to rekurze, ta se Ti bude určitě hodit, pak už by to
měla být hračka. 
Něco sem stvořil, ale nevím proč mi to děla to co to dělá... mělo to
teda jak chápu vypsat krajní intervaly a ty uprostred vynechat..
jenze mi to trosku asi nefunguje
<a href="http://www.nahraj-obrazek.cz/pm-0138494387411.png" title="Bez
názvu" ><img src="http://www.nahraj-obrazek.cz/dm-0138494387411.png"
alt="Bez názvu" /></a>
Až sem dáš svůj zdrojobý kód, tak ti možná někdo poradí.
Můžeš najít inspiraci v tomhle kusu kódu:
#include <stdlib.h>
#include <stdio.h>
void cantor(float min, float max, int no_of_divisions)
{
if (no_of_divisions > 0)
{
float one_third = (max - min) / 3;
cantor(min, min + one_third, no_of_divisions - 1);
cantor(max - one_third, max, no_of_divisions - 1);
}
else
{
printf("<%f;%f>\n", min, max);
}
}
void main()
{
printf("interval <0;1> - diskontinuum 1. stupne:\n");
cantor(0, 1, 1);
printf("interval <0;1> - diskontinuum 2. stupne:\n");
cantor(0, 1, 2);
printf("interval <0;1> - diskontinuum 4. stupne:\n");
cantor(0, 1, 4);
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void cantor(int min, int max, int i)
{
//int a,b; /* a = prvni tretina , b = druha tretina */
float third = ((max - min) / 3); /* tretina */
if (i >= 0) // pocet interaci musi byt vetsi nez 0
{
// a = min, min + third, --iter; //vypocet prvního intervalu
//b = max,max - third, iter; // vypocet druheho intervalu
cantor(min, min + third, --i);
cantor(max - third,max, i);
}
else
{
printf("\n<%.5f %.5f %.5f %.5f>\n",min, min+third, max-third, max);
}
}
int main(int argc, char **argv)
{
int min;
int max;
int i;
printf("\tProgram pro vypocet Cantorova diskontinua\n");
printf("\nZadejte minimum intervalu: ");
scanf("%d",&min);
printf("\nZadejte maximum intervalu: ");
scanf("%d",&max);
printf("\nKolik iteraci? \n");
scanf("%d", &i);
if ( i>0 && min<max ) //pocet interaci je vetsi nez jedna a minimum je mensi nez maximum muze zacit vypocet
{
printf("\nVysledne souradnice:\n");
cantor(min,max,i);
}
else //pokud ne
{
printf("Nesmyslny pocet iteraci nebo minimum vetsi nez maximum.\n");
}
printf("\n");
system("pause");
return 0;
}
Tohle teda mam udělané a děla to co je na tom obrazku..myslím že tam mam někde chybu.
Dvě chyby:
A ještě něco:
int min = 0, max = 1;
float third = ((max - min) / 3);
V tu chvíli bude third = 0.0, protože se počítá v celých číslech a 1/3=0 pro integer.
Takže jsem nahoře ve voidu změnil na "float" a v tom mainu dole kdyz sem
definoval int tk teda tam musí být "d".
Jak to tam mam hodit aby mi to vypsalo jen ten interval ?
Podívej se můj kód výše, obě řešení jsou skoro identické. Vypisuji tam jen interval min-max v aktuální hloubce rekurze.
Proč bychom to měli mazat? Fórum je o tom, aby se tu lidé učili, až někdo dostane podobné zadání, bude mu to užitečné.
Zobrazeno 17 zpráv z 17.