SUBOR: uloha2 Opakovanie: Napiste program, ktory vypise priemer troch cisiel (s presnostou float alebo double). Program bude konfigurovatelny pomocou pomenovanych konstant (#define) -- zmena hodnoty pomenovanej konstanty da novy priemer. Program by mal fungovat s pomenovanymi konstantami definovanymi v tvare: 7, 17.01, 1+1, 2*3, (1+2), ... Napiste makro funkcie pre scitanie/odcitanie/nasobenie/delenie. Delenie intov medzi sebou (celociselny vysledok!), delenie int a float/double (vzdy vysledok float/double), delenie 0 vs 0.0, ... Priklad makra pre identitu, zatvorky okolo druheho vyskytu x su potrebne, aby makro fungovalo intuitivne: #define id(x) (x) Bez zatvoriek(tj. '#define id(x) x') by sa vyraz id(1+1)*2 vyhodnotil na 1+1*2 = 3, nie 4, ako by bol ocakavany vysledok! SUBOR: uloha3 Opakovanie: Napiste program, ktory nacita zo standardneho vstupu najprv datovy typ premennych (staci int a float/double, ako znak, napr. i pre int, f pre float) a nasledne nacita dve premenne daneho typu. Ulohou programu potom bude vypisat podiel danych dvoch premennych -- opat typu, ktory bol nacitany zo vstupu na zaciatku. Priklad pouzitia: Vstup Vystup Zadaj typ premennych, ktore mam nacitat (i/f) f Zadaj dve premenne typy float. 2.1 2.1 Podiel 2.100000 / 2.100000 = 1.000000 Vstup2 Vystup2 Zadaj typ premennych, ktore mam nacitat (i/f) i Zadaj dve premenne typy int. 5 4 Podiel 5/4 = 1. Note: prerobit na while: variabilny pocet premennych, variabilny pocet delitelov SUBOR: uloha4 Opakovanie: Napiste program (s pomocou while), ktory zo vstupu nacita cislo a nasledne vypise druhe mocniny vsetkych cisiel medzi 0 a zadanym cislom. Problem: zaporne cisla. Pokracovanie: skusit formatovanie vystupu (pobavit sa so scanfom a pod.), prerobit na for (vediet ako prevadzat tam aj nazad), vypocitat mocninu zadaneho x na zadane y SUBOR: uloha5 Opakovanie: Najprv spocitat prirodzenu odmocninu cisla. Tj. pre cislo, ktoreho odmocnina je prirodzene cislo mate vypisat dane prirodzene cislo. Pre ine cislo mate vypisat zaokruhlenu hodnotu daneho cisla -- bud smerom hore alebo dole. Napiste program, ktory zisti ci je zadane cislo prvocislo. Pre potreby programu definujme prvocislo ako kladne cislo, ktore je z prirodzenych cisel delitelne len 1 a sebou. Cislo 1 sa niekedy povazuje za prvocislo, niekedy nie, oboje je vo vasom programe povazovane za ok riesenie. SUBOR: uloha6 Caste chyby: 1.) Neosetrene vstupy pre -- zaporny faktorial, pocet vstupov 0 veduci k deleniu nulou, zaporny pocet vedeny k zacykleniu. 2.) Odsadzanie. Kazde { by malo zvysit pocet medzier o pevny pocet, kazde } by ho malo znizit. 3.) Ak je chyba natolko zavazna, ze sa program ukonci, tak by to mal program indikovat nenulovou navratovou hodnotou -- tj. napr. return 1; 4.) Premenne definovane zbytocne globalne. 5.) Osetrenie vstupov znovunacitanim raz. 6.) Zbytocne vetvy kodu. 7.) Chaoticke pomenovavanie premennych. Napiste program, ktory si nacita pocet vstupov, alokuje pole danej velkosti a vypise priemer medzi prvym a poslednym prvkom, druhym a predposlednym, ... SUBOR: uloha7 Zadanie: Nacitajte maticu nad celymi cislami, spocitajte jej stopu - sumu prvkov na hlavnej diagonale (staci pre storcove matice), spocitajte reverznu stopu matice - sumu na opacnej diagonale (opat staci pre stvorcove matice), spocitajte sumy jednotlivych riadkov a sumy jednotlivych stlpcov (pre lubovolne matice). Prehodte stlpce a riadky matice a spocitajte opat obe stopy. SUBOR: uloha8 Zadanie: Napiste funkciu a makro na scitanie/nasobenie dvoch prvkov, porovnajte. Zo studijnych materialov si stiahnite program na matice a prerobte ho tak, aby sa hlavna aj vedlajsia stopa pocitali v osobitnych funkciach (jedna funkcia na jednu stopu -- celkovo 2 funkcie). Zakladna idea: int vratStopu(int x, int matica[x][x]){ int stopa = 0; // Nieco return stopa; } Napiste funkciu pocitajucu prirodzenu odmocninu cisla/prirodzeny logaritmus. Oboje len pre int. SUBOR: uloha9 Zadanie: Bez pouzitia kniznicovych funkcii na pracu s retazcami (nic zo string.h) zistite dlzku zadaneho retazca (tj. pocet znakov po prvy vyskyt znaku '\0'). char str[100] = {'h', 'e', 'l', 'l', 'o', '\0'}; scanf("%99s", str); char str[] = "hello"; Bez pouzitia kniznicovych funkcii na pracu s retazcami (nic zo string.h) spojte dva retazce nacitane zo standardneho vstupu (cez scanf). Dynamicky nacitavajte retazec zo vstupu (znak po znaku! -- funkcia getchar()) az kym nenarazite na EOF, dynamicky realokujte (funkcia realloc) pamat podla potreby, aby ste dokazali nacitat premenlivy pocet znakov a zaberali len linearne mnozstvo pamate s ohladom na dlzku retazca. char *str = malloc(sizeof(char)*10); str = realloc(str, sizeof(char)*20); free(str); Definujte pole retazcov. Pri nacitavani povazujte '\n' za znak, ktory znaci, ze sa ma zacat nacitavat do noveho retazca v poli. Tj. pole bude na konci obsahovat jednotlive riadky vstupu, staci pole pevnej velkosti, ale riadky by mali zvladat lubovolnu dlzku. SUBOR: uloha10 Zadanie: Vynasobte retazec cislom, tj. vytvorte retazec pozostavajuci z k kopii (k je zadane zo vstupu) nejakeho zadaneho retazca (maximalne 100 znakov). Pamat alokujte staticky (polia), neskor prerobte na dynamicku (pointere + malloc) alokaciu. Mozete pouzivat (aj sa odporuca) kniznicove funkcie na pracu s retazcami. char *strcat(char *dest, const char *src); char *strncat(char *dest, const char *src, size_t n); char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n); size_t strlen(const char *s); Vytvorte strukturu na uchovavanie udajov o osobe (staci meno, priezvisko, vek), nacitajte niekolko osob (pole osob) a vypiste udaje o kazdej z osob. struct datum{ unsigned int den; unsigned int mesiac; unsigned int rok; char slovnyNazov[100]; }; struct datum dnesok; dnesok.den =2; dnesok.mesiac = 12; dnesok.rok = 2013; strcpy(dnesok.slovnyNazov, "januar"); Vytvorte strukturu, ktora ukazuje sama na seba, implementuje podobnym sposobom prehladavanie fronty a zasobnika.