P1. Sa se scrie un macro cu 2 parametri MAXIM(a, b) pentru determinarea maximului dintre numerele a si b. Sa se scrie o functie int maxim(int a, int b) pentru determinarea maximului dintre 2 intregi. Sa se apeleze macro-ul si functia pentru a determina maximul dintre urmatoarele expresii: int x=2, y=3, z=4; char c1='b', c2='s'; 1. calculeaza maxim dintre x si y 2. calculeaza maxim dintre x+y si x-y 3. tipareste x, tipareste y; calculeaza maxim dintre x++ si y++; tipareste x, tipareste y 4. calculeaza maxim dintre c1 si c2 P2. Sa se defineasca un macro pentru valoarea absoluta care sa fie apoi apelat intr-un program pentru evaluarea expresiilor: i=(|a|+|b|)/(1+|a*b|), unde a,b sunt numere intregi z=(|x+y|-|x-y|)/(1+|x+y|*|x-y|), unde x, y, z sunt numere reale P3. Sa se defineasca 2 tipuri structurate T1 si T2 mutual recursive (T1 contine un camp de tip pointer la o structura de tip T2 iar T2 contine un camp care este pointer la o structura de tip T1.) Pelanga aceste campuri, fiecare din cele 2 tipuri structurate mai contin alte campuri de tip int si char *. Sa se defineasca cele 2 tipuri in 2 fisiere separate, t1.h si t2.h. Sa se scrie un program care include t1.h si t2.h si defineste variabilele v1 si v2 de tipurile T1 si T2.