Diskuze: Vytvoření matice s předem neznámou velikostí
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.


Jestli to chápu dobře, tak z velikosti prvního řádku nějak dopočítáš velikost sloupce matice. Například proto, že ta matice je čtvercová?
Co se týče manuálního parsování čísel v C, je možné použít třeba Hornerovo schéma. Jde o to, že čísla jsou zapisována od nejvýznamnější číslice po tu nejméně významnou, takže pokud již máš část čísla převedenou, tak započítání další cifry znamená provést následující:
cislo = cislo*zaklad + cifra;
kde zaklad je základ číselné soustavy, ve které čísla na vstupu jsou zadávána. Pro tebe asi 10. Na počátku algoritmu (kdy nemáš rozparsováno žádné číslo) je třeba nastavit proměnnou cislo na 0.
Pokud to nechceš dělat ručně, zkus funkci strtoul (http://www.cplusplus.com/…lib/strtoul/). Funkce se pokusí zadaný řetězec zkonvertovat na číslo, přičemž pokud se to podaří, vrátí ti adresu znaku v řetězci, který se nachází těsně za zkonvertovaným číslem (parametr endptr). To ti dovolí postupně procházet ten řádek intů (hodnotu vrácenou v endptr považuješ za nový řetězec, se kterým budeš pracovat).
Neviem či som to správne pochopil, ale matica bude štvorcová a jej veľkosť závisí od počtu čísiel v riadku? Ak áno, vyskúšaj niečo takéto:
#include<stdio.h>
int main()
{
FILE*fr;
int i,c,pole[100];
int pocet = 1;
int index = 0;
fr = fopen("matica.txt","r");
fscanf(fr,"%d",&pole[index++]);
while((c = getc(fr))!= '\n'){
fscanf(fr,"%d",&pole[index++]);
pocet++;
}
printf("%d\n",pocet);
fclose(fr);
return 0;
}
Zo súboru matica.txt načítava čísla, až kým nepríde na koniec riadku. Čísla načítava do pomocného poľa(predpokladám, že riadok nebude obsahovať viac ako 100 čísel,môžeš pole ľubovolne zväčšiť) a zvyšuje premennú pocet o 1, čím zistíš, koľko čísiel riadok obsahoval. Potom už iba vytvoríš dvojrozmerné pole, napr. matica[pocet][pocet], prvý riadok naplníš číslami z pomocného poľa
Tu máš jedniduchý program na zistenie parametrov matice. Predpokladám maticu zloženú z celých čísiel.
#include<stdio.h>
int main()
{
FILE*fr;
int i, pocet_cisiel = 0, pocet_riadkov = 0;
char str[80];
fr = fopen("matica.txt","r");
if(fr == NULL) {
perror("Error opening file");
return(-1);
}
/** Zisti pocet celych cisiel v subore */
while ((fscanf(fr,"%d",&i) != EOF)) {
pocet_cisiel++;
}
fclose(fr);
fr = fopen("matica.txt","r");
if(fr == NULL) {
perror("Error opening file");
return(-1);
}
/** Zisti pocet riadkov v subore */
while (fgets(str, 80, fr) != NULL) {
pocet_riadkov++;
}
fclose(fr);
printf("Matica ma %d riadkov a %d stlpcov.\n",pocet_riadkov, pocet_cisiel / pocet_riadkov);
return 0;
}
Tu je matica.
Sorry, nedá sa vložiť obrázok, skúšal som formát, bmp, jpg a png. 
25 6 58 6 12 12 5 6
5 4 8 9 89 2 5 3
25 6 58 6 12 12 5 6
5 4 8 9 89 2 5 3
25 6 58 6 12 12 5 6
5 4 8 9 89 2 5 3
25 6 58 6 12 12 5 6
5 4 8 9 89 2 5 3
25 6 58 6 12 12 5 6
5 4 8 9 89 2 5 3
Moc jsem nepochopil proč tam zavíráš ten soubor a na dalším řádku ho zase otvíráš. Proč ho rovnou nenecháš otevřený až do konce? Jestli chceš posunout kurzor na začátek, můžeš použít funkci fseek (https://msdn.microsoft.com/…5yw9bf3.aspx).
Díky, to ma nenapadlo. Proste som na tú možnosť zabudol.
Zobrazeno 8 zpráv z 8.