Diskuze: Zpracování textu
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 50 zpráv z 102.
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.
No tak v prvním případě to počítá počet projitých argumentů a druhý je pro to prvočíslo, protože když to dám i=1 tak vše se dá dělit jedničkou, takže existuje víc jak 0 dělitelů - tudíž to není prvočíslo..
Jde o to, že tam máš jednu proměnnou, kterou si přepisuješ tím druhým
cyklem... 
Joo, jasně. Ať už je to céčko nebo dřív když jsem začínal s PHP tak
já vždy prehlidnu nějakou takovou defacto drobnost. Jak budu zase u pc tak to
opravím a snad se zase pohnu dal. 
Čím může být způsobena chyba SIGSEGV? Takhle - vše s čísly funguje,
když chci zkusit ale zadat znak, vyhodí to chybu neoprávněného přístupu
do paměti SIGSEGV.
Pro určení znaku mám zatím tento kus kódu, navíc se jen snažím vypsat,
zda-li ho opravdu mám:
else if(isalpha(argv[i][j]))
{
printf("Word: %s \n", argv[i][j]);
}
daj sem celý kód - už upravený, predpokladám, že nebude úplne rovnaký ako ten čo si sem dával predtým.
Už to vypisuje, jde o to, že jsem to vypisoval jako string %s, stačilo to
dát jako %c 
Teď se spíš snažím nějak všechny ty znaky zadané v jednom argumentu nějak "slepit" dohromady jako jedno slovo.. Jdu dobrým směrem, když jsem si dal
char znak[100];
??
A potom se to snažím nějak vkládat do toho pole:
znak[j]=argv[i][j];
Ano 
Jinak sigsegv je neoprávněný přístup do paměti.. 
áno, takto to môžeš spraviť, len nesmieš zabudnúť ako posledný člen
poľa znak dať '\0'.
teda predpokladajme, že znak[posledne], je posledný člen, ktorému si už
nejakú hodnotu zadal. Potom musiš spraviť toto:
znak[posledne + 1] = '\0';
On to aj sám napísal 
vyhodí to chybu neoprávněného přístupu do paměti
A jak v tom cyklu řeknu, že už je poslední a má to přidat ten koncový znak? Resp. ten znak "slepuje" celé slovo argumentu?
No asi se mi to podařilo přidat za to, když zadám jeden znak, tak o to vypíše, ale když více, tak to vypíše pouze první..
if(znak)
{
znak[j+1]='\0';
printf("Word: %c \n",*znak);
}
vypisuje to jeden znak, protože tomu říkáš, že chceš jeden znak.. 
a proč tam máš tu dereferenci? o.O

keď už máš pole znakov null-terminated, tak používaj %s, teda
printf("Word: %s \n",znak);
jj, došlo mi potom, že vypisuju znak 
Jen mi to v případě čtyřpísmenného slova dá nakonec jakýsi divný znak
a někdy to při pětipísmenným slovu vynechá to poslední 
to proto, že se ti nejspíš provede ještě poslední inkrementace, než
podmínka skončí.
zkus dát jen znak[j] = '\0'
S tímhle už to funguje.. ale myslel jsem, že tam to +1 je správně, aby se právě ten poslední znak nesmazal.. ale tím zpětným lomítkem se nestane, že by se poslední znak přemazal, že?
No není to zpětným lomítkem.. tím jen dáváš najevo, že tam opravdu chceš dát nulu a ne znak nula..
Hoď sem ten cyklus a zkus si ho vykrokovat.. Uvidíš, proč tam bude v tomto případě j a ne j+1
Michal, vidím, že stále tápeš v tých reťazcoch. Ak chceš prečítaj
si toto: http://www.freespace.sk/…5%a1kola-r25
Je to časť o reťazcoch a zdrojom článku bola knižka od Herouta.
Vyskúšaj toto:
#include <stdio.h>
#include <ctype.h>
/**
* Funkcia skontroluje, ci retazec obsahuje iba jednu desatinnu botku,
* ak ich obsahuje viac,vrati false
* skontroluje, ci vstupny retazec obsahuje iba cislice a maximalne jednu bodku,
* ak nie, prvy odlisny znak zapise na prvu poziciu retazca
* @param vstupny retazec
* @return 1 (true) alebo 0 (false)
*/
int je_cislo(char *number)
{
int i, point = 0;
for (i = 0; number[i] != '\0'; i++) {
/** spocita pocet bodiek **/
if (number[i] == '.') {
point++;
/** ak je bodiek viac ako 1, return 0 **/
if (point > 1)
return 0;
}
/** ak je znak iny ako cislica alebo bodka, return 0 **/
if (!isdigit(number[i]) && number[i] != '.') {
return 0;
}
}
return 1;
}
int main(int argc, char **argv)
{
int i;
for (i = 1; i < argc; i++) {
if (je_cislo(argv[i])) {
printf("Retazec %s je cislo.\n", argv[i]);
}
else
printf("Retazec %s nie je cislo.\n", argv[i]);
}
return 0;
}
Malá oprava v popise funkcie.
namiesto
má byť
Snažím se funkcí získat délku řetězce, ale nechce se mi to přeložit:
int strlen(char **znak)
{
int velikost=0;
while(znak++ !='\0')
velikost++;
return velikost;
}
printf("Delka: %d\n",strlen(*znak));
Vyzkoušel jsem ještě různě ty ukazatele, ale furt to háže chybu,
hlavně u toho, že do strlen vkládám znak a je tam konflikt typů 
int strlen(char *retazec)
-
-
-
main()
{
printf("Delka: %d\n", strlen(retazec));
To som tu už ale písal:
/** vrati pocet znakov v retazci */
int strlen(char *slovo)
{
int velkost = 0;
while (*slovo++ != '\0')
velkost++;
return velkost;
}
A tu máš funkciu na palindrom:
int je_palindrom(char * retazec)
{
int i, velkost, pom = strlen(retazec);
int j = pom - 1;
for (i = 0; i < pom / 2; i++) {
if (retazec[i] != retazec[j--])
return 0;
}
return 1;
}
Díky moc.. Já vím že jeden kód jsi už posílal, ale on mi ne a ne fungovat.. resp. když to dělám teď u sebe v IDE tak to jede, když to pak překládám na terminálu na školním serveru tak to vyhodí chybu právě u toho int strlen ale funguje to potom správně..
Možno treba len premenovať funkciu zo strlen() na niečo iné, napr.: dlzka_retazca(). To preto, ak ten server kontroluje funkcie z knižnice string.h.
Wow, měl jsi pravdu
fungovalo to, jen tomu vadil ten název, tak jsem pro pořádek to změnil na
delka_slova 
Díky
Už jen udělám
rozpoznání data a mám hotovo..
S datumom to moze byt zlozitejsie. Zalezi na jeho formate. Ak je zarucene, ze bude dd.mm.rrrr, je to jednoduche, ale ak bude moznost aj d.m.rrrr, uz musis pocitat s kazdou moznostou, teda aj s d.mm.rrrr a dd.m.rrrr.
bude ve formátu DD-DD-DDD (D=0-9), ale musím ještě určit i den v týdnu (Po-Ne) resp. (Mon-Sun)
na to ti môže byť užitočné toto: http://www.tutorialspoint.com/…n_mktime.htm
nechám si to v záloze, nejdřív udělám v cyklu rozpoznání vůbec toho formátu, zda je to tak zadané.
teda formát má být DDDD-DD-DD, ale to je vlastně fuk 
Lebo neviem, ako by si bez toho, čo som ti posielal, resp. niečoho podbného zistil, o aký deň sa jedná. Dostaneš zadané 17.11.1985 a ako zistíš, či to bol pondelok, utorok...? Pomocou toho čo som posielaj ti to hneď napíše
Jo, to bezesporu použiju 
jen musím někam do svýho kódu, zřejmě hnedka někam na začátek cyklu
if(argc > 0)
{
for(i=1;i < argc; i++)
{
for(j=0; argv[i][j] != '\0'; j++)
{
if(isdigit(argv[i][j]))
{
cislo=cislo*10 + (argv[i][j] - '0');
}
else if(isalpha(argv[i][j]))
{
znak[j]=argv[i][j];
}
}
if(cislo)
{
for(k=2; k < cislo; k++)
{
if(cislo % k==0)
{
prvocislo=0;
break;
}
}
if(prvocislo)
{
printf("Number: %d (prvocislo) \n",cislo);
cislo=0;
}
else
{
printf("Number: %d \n",cislo);
cislo=0;
}
}
else if(znak)
{
znak[j]='\0';
if(je_palindrom(znak))
printf("Word: %s (palindrom)\n",znak);
else
printf("Word: %s \n",znak);
}
}
}
hodit podmínku, která se vykoná, pokud vstup bude ve formátu DDDD-DD-DD a pokud to nebude takový formát, tak se provedou ostatní testy isdigit nebo is alpha.. nebo to je blbost?
a ten dátum bude teda zadaný napr. takto: 2015-10-20 ? teda yyyy-mm-dd ? čísla oddelené pomlčkou alebo proste medzerou?
Tak v tom prípade to je ľahké. Keď narazíš na pomlčku, vieš, že ide o dátum. (Predpokladám, že nedostaneš vstup "Ahoj_ako" ani nič podobné)
No zkusil jsem otrocky napsat toto:
if(sizeof(argv[i])==10)
{
if(!(isdigit(argv[i][1])) &&!(isdigit(argv[i][2])) &&!(isdigit(argv[i][3])) &&!(isdigit(argv[i][4]))&&(argv[i][5]!='-')&&!(isdigit(argv[i][6]))&&!(isdigit(argv[i][7]))&&(argv[i][8]!='-')&&!(isdigit(argv[i][9]))&&!(isdigit(argv[i][10])))
{
break;
}
else
{
for(l=0;l<10;l++)
{
printf("%s\n",argv[i]);
/*datum[l]=argv[l];*/
}
}
}
Jenže to nechce fungovat jak bych chtěl.. prostě to jakoby přeskočí a potom to přijde až na to, že se jedná o číslo a pomlčky to vymaže..
tak zjištění a ověření dvojité zda-li se skutečně jedná o tvar YYYY-MM-DD jsem již zvládl, teď ještě konkrétně rozpoznat přesný den v týdnu..
Nemáš náhodou za chvíli deadline? 
Jinak určitě průběžně tam nahrávej aktuální verzi, co tam máš..
Někteří cvičící ti pak dají možnost opravy na získání dalších
bodů-- ale musíš tam aspoň něco už mít 
Průběžně to tam nahrávám
Odevzdáno to má být až v neděli, na obhajobu na cviku jsem aspoň
částečně ready 
Zobrazeno 50 zpráv z 102.
