Diskuze: programovanie funkcie C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 8 zpráv z 8.
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.


Po dlouhé době vidím nějaké rozumné příklady do školy, které umožnují procvičit si širší část jazyka C (práce s funkcemi, se soubory, s ukazateli, s dynamickou alokací a logické uvažování).
Zkusil jsem: skúšal som to robiť sam pomocou prezentácií, bohužiaľ neúspešne
To že si se to snažil řešit sám je naprosto v pořádku. Neúspěšně je však ne moc konkrétní pojem. Co máš hotového, co konkrétně nevíš?
neviem akú ma ten program mať štruktúru, ako volať tie funkcie, neviem
ako funguje smerník, funkciu na výpis poľa viem, párne nepárne, max min tie
základne veci budem vedieť.
ďakujem
Však také o struktuře programu nic vědět nemusíš, program psát nemáš. Zadání jasně říká, že máš napsat 5 funkcí. A to jak mají vypadat jejich deklarace, tedy jejich prototyp, je uvedeno na konci každého bodu úkolu. Ale abys ověřil funkčnost tebou napsaných funkcí, je dobré si nějaký svůj program napsat. Jak pak volat v programu uvedené funkce bys ale znát měl. Stejně tak jako to co jsou to ukazatele, bez toho se při zpracování úkolů neobjedeš.
určite by mi pomohlo nejaké vzorové riešenie hoci podobného problemu.
To jak se pracuje s poly, soubory, ukazately a dynamickou alokací paměti, toho je v praktické podobě dost ode mě v sekci C. Doporučuji se na to minimálně podívat a pokusit se pochopit.
Zkus 1. příklad, bod 1a - otevření a zavření souboru.
Zde je malá nápověda:
ukazatel na FILE, fopen(), fclose(), NULL
Domnívám se, že nevíš jak vůbec začít.. Zkusím Tě trochu víc
nakopnout.. 
Tak pojďme na to...
Nejprve si vytvoř testovací soubor nums.txt a naplň ho např. těmito daty:
-10
20
0
30
-40
50
-60
-70
80
-90
Pro testování můžeš použít následující kód:
#define _CRT_SECURE_NO_WARNINGS
#define DEBUG 0 // ladeni - DEBUG 1
#define SIZE 500 // velikost pole
#include <stdio.h>
#include <stdlib.h>
// Prototypy
int * AlokujNapln(char *subor, int *velkost);
void Vypis(int *pole, int velkost);
int main(void) {
int n = 0; // pocet prvku ulozenych v poli
int *arr = NULL; // dynamicke pole
arr = AlokujNapln("nums.txt", &n);
// Kontrolni vypis obsahu promenne n
#if DEBUG == 1
printf("%d\n", n);
#endif
Vypis(arr, n);
free((void *)arr);
arr = NULL;
return 0;
}
Chceš-li vidět počet prvků uložených v poli, nastav makro DEBUG
na 1.
Pro testování měň hodnotu makra SIZE v rozsahu <0,11>
a sleduj co se děje.
Zde je kompletní bod 1:
// Alokace pameti a nacteni dat do pole ze souboru
int * AlokujNapln(char *subor, int *velkost) {
FILE *fp = NULL;
int tmp, *pole = NULL;
// Alokace pameti
pole = (int*)malloc(SIZE * sizeof(int));
if (!pole) {
fprintf(stderr, "Chyba alokace pameti.");
exit(1);
}
// Otevreni souboru pro cteni
fp = fopen(subor, "r");
if (!fp) {
fprintf(stderr, "Soubor nelze otevrit.");
free((void *)pole);
pole = NULL;
exit(1);
}
// Cteni dat ze souboru
while (!feof(fp) && (*velkost < SIZE)) {
if (fscanf(fp, "%d", &tmp) != 1) {
fprintf(stderr, "Chyba cteni dat.");
free((void *)pole);
pole = NULL;
exit(1);
}
if (tmp >= 0) {
*(pole + *velkost) = tmp;
(*velkost)++;
}
}
// Uzavreni souboru
if (fclose(fp) == EOF) {
fprintf(stderr, "Soubor nelze uzavrit.");
free((void *)pole);
pole = NULL;
exit(1);
}
return pole;
}
Zde je kompletní bod 2:
// Vypis pole na obrazovku
void Vypis(int *pole, int velkost) {
for (int i = 0; i < velkost; i++) printf("%d ", *(pole + i));
putchar('\n');
}
Nyní máš vše potřebné k tomu, abys mohl pokračovat dále v řešení úlohy (body 3,4,5).
Poznámka:
Abys mohl svoji úlohu obhájit, musíš porozumět tomu, co se v programu
děje. Toto ber pouze jako doporučení a instruktáž. Snaž se to
napsat svým vlastním způsobem. Zlepšíš tím své programové
dovednosti, které se ti budou později hodit. A o to jde! V opačném
případě ztratí zadání úlohy svůj smysl a také Ti velmi reálně hrozí
to, že Tě profesor snadno nachytá na tom, že to není tvá práce.
Stále platí, že pokud Ti cokoli nebude jasné, ptej se... 
Zobrazeno 8 zpráv z 8.