Portál AbcLinuxu, 25. října 2025 08:38
... Tak do hoďky budu na svém linuxu a hodim sem zdroják... Zatim s pozdravem Ondřej Kallasch
1. Jak už tu padlo, mít předformátovaný kalendář je nesmysl. Kdyby nic jiného, fungovalo by to jen pro jeden konkrétní rok. Pokud se vám nechce počítat den v týdnu, udělá to za vás funkce localtime(), kterou stejně používáte.
2. Funkce fseek() by měla smysl pouze v případě, že by bylo možné odvodit (bytovou) pozici v souboru z data, tedy např. pokud by jednotlivé záznamy měly pevnou délku. Pro vás bude užitečnější spíš čtení po řádcích pomocí fgets(), ale to záleží na formátu toho pomocného souboru.
Jinak přeji hodně štěstí u maturity. Vzhledem k úrovni znalostí dvou maturitních předmětů, kterou jste předvedl ve svém dotazu, ho asi budete potřebovat.
char *fgets(char *s, int size, FILE *stream);
Podrobnosti viz man char a ukázka tady. Pro fseek() bys potřeboval vědět kde jednotlivé dny začínají, to by znamenalo mít všechny položky doplněné mezerami na stejnou délku a pozici vypočítat, nebo mít tabulku s indexy, třeba na začátku toho souboru se svátky.
Prostě si udělej pole 12*31*max_délka_řádku a do něj načti všechny svátky ze souboru najednou, budeš mít 372 řádky, těch pár bytů navíc už tě nezabije. Pak si v programu musíš jen ohlídat aby v těch sedmi dnech nezobrazoval třeba 31. února a aby na přelomu roku skočil do ledna a ne do dalšího měsíce, tam bych použil pole s délkami měsíců int delka[12]={31,28,31,30.....31}; - únor se v přestupném roce změní na 29. Jen pozor na to že indexy měsíců i dnů jsou o 1 nižší než hodnota, jinak bys musel mít 13*32*délka! Spočítat den v týdnu už nebude problém, abys ho vypsal k datu.
Jestli do toho diáře budeš chtít zapisovat poznámky a ukládat je na disk, tak si to program může stejným způsobem uložit do podobného souboru, v nejhorším případě i do toho samého za kalendář.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.