Pentru fisierele sursa cu rezolvarile, verificati arhiva.
/*
 * Problema 1
 */

// Pentru functiile pe care le vom folosi in program, trebuie sa
//  includem biblioteci suplimentare astfel:
//     1) pentru a putea folosi functia printf() vom include:
# include <stdio.h>
//     2) pentru a putea folosi functiile srand() si rand() vom include:
# include <stdlib.h>

int main()
{
        // Atentie!! In ANSI C, declaratiile de variabile nu se pot face in
        //  interiorul buclelor (de exemplu, la bulca "for").
        int i;

        // Trebuie sa initializam generatorul de numere aleatoare cu o valoare.
        // Am ales in acest exemplu ca acea valoare sa fie "0". De obicei, in
        //  practica se foloseste timpul local in secunde (ca sa fie diferit de
        //  la o rulare la alta)
        srand(0);

        for (i = 0; i < 5; i++) {

                // Pentru a trece pe linia urmatoare, afisam caracterul "\n",
                //  care se numeste "newline", din motive evidente.
                // Observatie: functia printf() returneaza valori, deci putem
                //  sa afisam efectiv rezultatul intors de apelul functiei
                //  rand(), fara sa folosim variabile auxiliare.
                printf("%d %d %d\n", rand(), rand(), rand());

        }

        // Orice program care are functia main de tipul <int> si a carui
        //  executie se incheie fara erori trebuie sa intoarca valoarea "0",
        //  prin conventie. (motivul il veti afla mai tarziu la USO)
        return 0;
}



/*
 * Problema 2
 */

// Includem biblioteca <stdio.h> pentru a avea functiile scanf() si printf()
# include <stdio.h>

int main()
{
        float a, b, c;

        // Atentie! In stringurile de format pe care le primeste scanf() nu
        //  trebuie - in marea majoritate a cazurilor - sa introduceti altceva
        //  in afara de specificatorii de format (ca de exemplu, spatii).
        // De asemenea, numele variabilelor ce vor fi citite trebuie precedat de
        //  caracterul "&" - numit si "ampersand".
        scanf("%e%f%g", &a, &b, &c);

        // Prin comparatie, stringul de format primit de printf() poate contine
        //  orice caractere, si doar specificatorii de format vor fi inlocuiti,
        //  in ordinea in care sunt intalniti, cu valorile variabilelor din
        //  lista care urmeaza.
        printf("%e %f %g\n", a, b, c);
        
        // Nu uitati sa intoarceti valoarea "0" la iesirea din functia main()!
        return 0;
}



/*
 * Problema 3
 */

// Pentru a avea functiile printf() si scanf():
# include <stdio.h>
// Pentru a avea functiile sin() si cos(), si valoarea lui "pi":
# include <math.h>

int main()
{
        // Valoarea constantei "pi" este data - pana la o anumita precizie - in
        //  macrodefinitia M_PI din biblioteca <math.h>
        double x, PI = M_PI;

        // Pentru a afisa un tabel, vom afisa datele linie cu linie, avand grija
        //  ca ele sa fie aliniate unele sub altele astfel incat sa cream
        //  impresia vizuala a unui tabel. Aceeasi conventie o va respecta si
        //  capul de tabel.
        printf("   x     sin(x)   cos(x)\n" );
        for(x = 0; x <= 2 * PI; x = x + PI / 20) {
                // Pentru semnificatia specificatorilor de format, recapitulati
                //  din laborator/curs partea teoretica de la afisare.
                printf( "%+2.3lf   %+2.3lf   %+2.3lf\n", x, sin(x), cos(x));
        }

        // Pentru ca functia main() s-a incheiat cu succes:
        return 0;
}



/*
 * Problema 4
 */

# include <stdio.h>

int main()
{
        float x, y;

        scanf("%f%f", &x, &y);

        // Verificam intai daca nu cummva punctul este pe una din axe:
        if (x == 0 || y == 0) {

                // Daca e pe axe, atunci afisam mesajul si am terminat:
                printf("Punct pe axe");

        } else {

                // In acest moment stim SIGUR ca nu este pe axe si verificam
                //  daca nu cumva este deasupra axei Ox
                if (x > 0) {
                        
                        // Mai ramane de verificat pozitia in raport cu Oy
                        if (y > 0)
                                printf("Cadranul 1");
                        else
                                printf("Cadranul 4");

                } else {

                        // In acest moment stim SIGUR ca nu este deasupra axei
                        //  Ox si verifica pozitia in raport cu Oy
                        if (y > 0)
                                printf("Cadranul 2");
                        else
                                printf("Cadranul 3");
                
                }
        
        }

        // Incheierea cu succes a functiei main()
        return 0;
}



/* 
 * Problema 5
 */

#include <stdio.h>

int main()
{
        int a, b, c;

        // Nu uitati sa nu introduceti caractere suplimentare pe langa
        //  specificatorii de format in scanf()
        scanf("%d%d%d", &a, &b, &c);

        // Trei numere intregi pot forma laturile unui triunghi doar daca suma a
        //  ORICARE doua dintre ele este mai mare sau egala cu alt treilea
        //  (cazul de egalitate reprezinta un triunghi denaturat). Asta
        //  inseamna:
        //      (c + b >= a && a + c >= b && a + b >= c)
        //  sau daca negam expresia de mai sus se obtine conditia sa NU formeze
        //  triunghi:
        //      (a > b + c || b > a + c || c > a + b)
        //  De exemplu, am ales sa folosim a doua varianta:
        if (a > b + c || b > a + c || c > a + b)
                printf("NU");
        else
                printf("DA");

        return 0;
}


/*
 * Problema 6
 */

// Pentru a avea functiile scanf() si printf():
# include <stdio.h>

int main()
{
        // a, b si c - laturile triunghiului
        int a, b, c;

        // asq, bsq si csq - patratele acestor laturi
        int asq, bsq, csq;

        // Ipoteze despre triunghi: (0 = fals) si (1 = adevarat)
        //  La inceput le vom presupune pe toate false
        int drept = 0, isoscel = 0, echilateral = 0;

        scanf("%d%d%d", &a, &b, &c);

        // Verificam ca cele trei numere formeaza intr-adevar, un triunghi
        if (a > b + c || b > a + c || c > a + b) {

                // Daca NU, atunci termina programul!
                return 0;

        } else {

                // Verificam prin teorema lui Pitagora daca exista un unghi
                //  drept in triunghi.
                asq = a * a;
                bsq = b * b;
                csq = c * c;
                if (asq + bsq == csq || asq + csq == bsq || bsq + csq == asq)
                        drept = 1;

                // Verificam daca triunghiul este echilateral (evident, posibil
                //  doar daca nu este deja dreptunghic)
                if (drept != 1 && (a == b && b == c))
                        echilateral = 1;
                // Observatie: operatorul logic SI (&&) isi evalueaza operanzii
                //  de la stanga la dreapta, iar daca o conditie este false,
                //  restul de operanzi nu se mai evalueaza (deja stim ca
                //  rezultatul va fi fals)

                // Verificam daca triunghiul este isoscel (evident, doar daca nu
                //  este deja echilateral)
                if (echilateral != 1 && (a == b || b == c || a == c))
                        isoscel = 1;

                // Afisarea concluziilor
                if (drept == 1) {
                        printf ("dreptunghic\n");
                } else if (echilateral == 1) {
                        printf ("echilateral\n");
                } else if (isoscel == 1) {
                        printf ("isoscel\n");
                } else {
                        printf ("oarecare\n");
                }
        }

        return 0;
}



/*
 * Problema 7
 */

# include <stdio.h>

int main()
{
        int a, b, c, d, min, max;

        scanf ("%d%d%d%d", &a, &b, &c, &d);

        // Aflam mai intai maximul dintre "a" si "b" si il stocam in variabila
        //  "max", apoi verificam pe rand daca nu cumva "c" si "d" sunt mai mari
        //  si in caz afirmativ, actualizam valoarea pe care o consideram noi
        //  maxima.
        if (a>b)
                max = a;
        else
                max = b;
        if (c>max) max = c;
        if (d>max) max = d;

        // Pentru aflarea minimului se procedeaza analog.
        if (a<b)
                min = a;
        else
                min = b;
        if (c<min) min = c;
        if (d<min) min = d;

        // Afisarea concluziilor (Observatie: am afisat doua linii consecutive
        //  cu un singur apel de functie printf(), inserand la locul potrivit
        //  caracterul "\n", care are rolul de a trece pe linia urmatoare.
        printf("Minimul este: %d\nMaximul este: %d\n", min, max);

        // Nu uitati ca executia cu succes inseamna intoarcerea valorii 0 in
        //  main()!
        return 0;
}



/*
 * Problema 8
 */

// Pentru a avea functiile scanf() si printf()
#include <stdio.h>

int main()
{
        int a, b, c, aux;

        scanf("%d%d%d", &a, &b, &c);

        // Vom sorta cele trei numere prin interschimbari. Intai urmarim sa
        //  aducem in variabila "a" minimul dintre cele trei numere.
        if (a>b) {
                aux = a;
                a = b;
                b = aux;
        }
        if (a>c) {
                aux = a;
                a = c;
                c = aux;
        }

        // In acest moment, in "a" avem valoarea minima. Verificam acum ca si
        //  "b" si "c" sa fie in ordinea corecta!
        if (b>c) {
                aux = b;
                b = c;
                c = aux;
        }

        // Observatie! Metoda de sortare folosita mai sus este de fapt o
        //  defasurare pas cu pas a algoritmului de sortare "Bubble Sort".
        //  Pentru mai multe detalii despre aceasta metoda de sortare, puteti
        //  verifica, de exemplu pagina algoritmului de pe wikipedia:
        //
        //      http://en.wikipedia.org/wiki/Bubble_sort
        
        // Afisam numerele in ordine:
        printf("Numerele sortate: %d, %d, %d\n", a, b, c);

        // Nu uitati sa intoarceti valoarea 0 in main()!
        return 0;
}




/*
 * Problema 9 + 10
 */

// Pentru a avea functiile scanf() si printf()
#include <stdio.h>

int main()
{
        // Variabilele in care sa retinem ORA, MINUTUL si SECUNDA
        int h, m, s;

        // Citim ora (si verificam ca a fost citita corect)
        if (scanf("%d", &h) != 1) {  

                // Exemplu de situatie in care functia main() ar putea sa
                //  introduca o valoare diferita de 0: caz de eroare, care poate
                //  fi interpretat la nevoie sau poate fi ignorat. In orice caz,
                //  se incheie executia programului.
                printf("Ora a fost introdusa eronat.\n");
                return 1;

        }

        // Testam ora: s-a citit un intreg, dar este el corect?
        if (h < 0 || h > 23) {

                // Intoarcem un alt cod de eroare (ce poate fi interpretat sau
                //  ignorat de un al program din exterior)
                printf("Ora trebuie sa fie in intervalul 0..23\n");
                return 11;

        }

        // Procedam analog pentru minute
        if (scanf("%d", &m) != 1) {

                // De data aceasta intoarcem un alt cod de eroare, pentru a face
                //  distinctie intre sursele diferite de erori.
                printf("Minutul a fost introdus eronat.\n");
                return 2;

        }

        // Testam minutul: s-a citit un intreg, dar este el corect?
        if (m < 0 || m > 59) {
                printf("Minutul trebuie sa fie in intervalul 0..59\n");
                return 22;
        }

        // Procedam analog pentru secunde
        if ( scanf("%d", &s) != 1) {  
                printf("Secunda a fost introdusa eronat.\n");
                return 3;
        }

        // Testam secunda: s-a citit un intreg, dar este el corect?
        if (s < 0 || s > 59) {  
                printf("Secunda trebuie sa fie in intervalul 0..59\n");
                return 33;
        }

        // Daca am ajuns aici, inseamna ca toate datele au fost citite corect
        //  (au fost introduse numere intregi in intervalele corect) si afisam
        //  ora in formatul HH:MM:SS (fiecare cifra pe doua pozitii):
        printf("%02d:%02d:%02d\n", h, m, s);

        return 0;
}