O týždeň
Naučíte sa:
- načítanie jedného riadka;
- pracovať s časom a dátumom;
- pracovať so smerníkmi.
Pri pracovných a školských úlohách je častý termín odovzdania o týždeň. Vytvorte program, ktorý Vám pomôže odhadnúť dátum odovzdania Vášho zadania.
Program načíta ľubovoľný dátum a k nemu vypočíta dátum o týždeň.
Preštudujte si
Pri riešení môžte využiť časť štandardnej knižnice pre prácu s časom a dátumom. Budete potrebovať tieto dva dátové typy:
- Štruktúra pre reprezentáciu času
struct tm. Aké členy má táto štruktúra? Ako si vytvorím novú premennú typustruct tm? - Typ pre celočíselnú reprezentáciu
času
time_t. Aký je rozdiel medzi celočíselnou a štruktúrovanou reprezentáciou?
Je možné zmeniť celé číslo na štruktúru alebo na reťazec? Pomôžu Vám tieto funkcie:
- strptime() konverzia reťazca na štruktúrovanú reprezentáciu času (táto funkcia je neštandardná, ale je najjednoduchšia);
- mktime() konverzia štruktúrovanej reprezentácie na celočíselnú;
- localtime() konverzia celočíselnej repreezntácie času na štruktúrovanú:
- strftime() konverzia štruktúrovanej reporezentácie času do reťazca.
Pri štúdiu technickej dokumentácie sa sústreďte na:
- Predpis funkcie vám prezradí aké argumenty funkcia očakáva a aký je typ návratovej hodnoty.
- Stručný opis činnosti hovorí čo funkcia robí.
- Spôsob ako funkcia hlási chybu (väčšinou pomocou špeciálnej návratovej hodnoty). Konverzia alebo načítanie sa nemusí podariť a musíte definovať čo sa má robiť v tom prípade.
Zopakujte si
Pri štúdiu týchto funkcií a dátových typov môžte vidieť, že sa často
pracuje s adresou premennej namiesto jej hodnoty. Na uloženie adresy je
dobré používať tzv. smerníkovú premennú, ktorú vyznačíte pomocou * pri
vyhradení pamäte.
struct tm* adresa_tm;
je premenná pre uloženie smerníka na premennú kde je uložená hodnota typu struct tm.
Adresu premennej zistíte pomocou operátora *.
Takto si pomocou operátora & poznačíte adresu premennej typu int:
int moja_premenna = 1;
int* adresa_mojej_premennej_int = &moja_premenna;
Obsah pamäte s danou adresou zistíte pomocou operátora *.
int moja_premenna = 1;
int* adresa_mojej_premennej_int = &moja_premenna;
int hodnota_mojej_premennej = *adresa_mojej_premennej_int;
K jednotlivým členom štruktúry pristupujete pomocou operátora . alebo -> v prípade smerníkovej premennej.
Budete potrebovať aj tieto funkcie:
Príkaz na načítanie jedného riadka do 100 znakov môže vyzerať takto:
char riadok[100];
memset(riadok,0,100);
int r = fgets(riadok,100,stdin);
if (r){
puts("Nacitanie sa podarilo");
}
Návrh riešenia
Riešenie je možné vyjadriť pomocou postupu:
- Najprv načítajte jeden riadok ľubovoľného textu.
- Skúste text premeniť do štruktúrovanej reprezentácie.
- Ak sa konverzia nepodarila, vypíšte chybové hlásenie.
- Ak bola konverzia úspešná, skúste čas premeniť do celočíselnej reprezentácie.
- V celočíselnej reprezentácii vypočítajte čas o týždeň.
- Celočíselnú reprezentáciu premeňte do štruktúrovanej a vypíšte výsledok.
Odovzdanie
Domácu úlohu odovzdajte na GIT súboru program.c v adresári du3 za 7 bodov.