1. Numere în format hexazecimal. Scrieți o funcție care returnează valoarea unui număr natural citit de la intrare caracter cu caracter, în format hexazecimal (cifrele 0-9, A-F sau a-f).
Indicații: problema e similară cu funcția readnat de la curs. Un prim test se face pentru cifra hexazecimala (isxdigit, tot din ctype.h), apoi pentru a obține valoarea cifrei trebuie tratat diferit cazul cifrelor și al literelor (de la A la F). Cum scrierea cu litere mari sau mici nu contează se poate folosi funcția toupper din ctype.h (returnează literă mare dacă argumentul e literă mică; altfel returnează chiar litera dată ca argument) pentru a trata cele două cazuri uniform. (La fel de bine se poate folosi funcția pereche tolower).
Pentru o variantă mai simplă, presupuneți că în scriere se folosește doar un singur fel de litere (mari sau mici).
2. Rădăcina unei funcții. Găsiți, cu o
aproximație dată (de exemplu 10-6), o rădăcină
a unei funcții f continuă pe un interval [a, b] și care schimbă
semnul pe acel interval (adică o valoare x pentru care f(x) = 0).
Rezolvați problema pentru o funcție dată (de exemplu f(x) = x2 - 3) pe care o definiți în program, și alegeți valori corespunzătoare pentru a și b (de exemplu 1 și 3).
Indicații Deoarece f(a) ≤ 0 (f(1) = 1 * 1 - 3 =
-2) și f(b) ≥ 0 (f(3) = 3*3 - 3 = 6) iar funcția e
continuă pe [a, b], ea va avea o rădăcină în acest
interval. Problema se rezolvă înjumătățind la fiecare
pas intervalul de căutare pe care funcția schimbă semnul,
până când acesta devine mai mic decât precizia dată.
Atunci orice punct din interval e o soluție cu precizia cerută.
Se calculează valoarea funcției în mijlocul intervalului. Dacă
valoarea funcției e ≥ 0, funcția schimbă semnul pe
jumătatea din stânga a intervalului. Altfel (dacă valoarea
funcției la mijlocul intervalului e < 0), funcția schimbă semnul
pe jumătatea din dreapta. (în exemplul dat, f(2) = 2*2 - 3, și
cum f(2) ≥ 0, continuăm cu intervalul [1,2]). Ajungem astfel la
aceeași problemă, dar cu intervalul redus la
jumătate. Continuând să înjumătățim lungimea
intervalului ajungem la cazul de bază, când putem returna orice
valoare din interval (de exemplu mijlocul).
Se poate eventual testa suplimentar dacă în mijlocul intervalului,
funcția are valoarea zero, și returna direct rădăcina în acest
caz.