Tutorial C#

Învață conceptele fundamentale ale limbajului C#

1. Instrucțiuni de Afișare

În C#, putem afișa informații pe ecran folosind mai multe metode:

Console.WriteLine()

Afișează text și trece la linia următoare:

// Afișare simplă Console.WriteLine("Bună ziua!"); Console.WriteLine("Aceasta este o linie nouă."); // Afișare variabile int varsta = 25; Console.WriteLine(varsta); // Concatenare string nume = "Ana"; Console.WriteLine("Numele meu este " + nume);

Console.Write()

Afișează text fără să treacă la linia următoare:

Console.Write("Nume: "); Console.Write("Maria"); // Rezultat: Nume: Maria (pe aceeași linie)

Interpolarea String-urilor

O metodă modernă și elegantă de a combina text cu variabile:

string nume = "Ion"; int varsta = 30; double salariu = 3500.50; Console.WriteLine($"Numele: {nume}, Vârsta: {varsta}, Salariu: {salariu} RON");

Exemplu Complet

using System; class Program { static void Main() { // Diferite moduri de afișare Console.WriteLine("=== Magazine Online ==="); Console.WriteLine(); string produs = "Laptop"; double pret = 2499.99; int stoc = 15; // Metoda clasică Console.WriteLine("Produs: " + produs); Console.WriteLine("Preț: " + pret + " RON"); // Interpolarea string-urilor Console.WriteLine($"În stoc: {stoc} bucăți"); // Formatare specială Console.WriteLine($"Preț formatat: {pret:C}"); // Format monetar Console.WriteLine($"Preț cu 2 zecimale: {pret:F2}"); } }

Exercițiu 1

Creați un program care afișează informațiile tale personale (nume, vârstă, oraș) folosind toate metodele de afișare învățate.

string nume = "Alexandru"; int varsta = 22; string oras = "București"; // Metoda 1: WriteLine simplu Console.WriteLine("=== Informații Personale ==="); // Metoda 2: Concatenare Console.WriteLine("Nume: " + nume); // Metoda 3: Write (fără linie nouă) Console.Write("Vârstă: "); Console.WriteLine(varsta); // Metoda 4: Interpolarea string-urilor Console.WriteLine($"Locuiesc în {oras}");

2. Tipuri de Date

C# este un limbaj cu tipare statică, ceea ce înseamnă că fiecare variabilă trebuie să aibă un tip declarat.

Tipuri Numerice

Tip Dimensiune Interval Exemplu
int 32 biți -2,147,483,648 la 2,147,483,647 int varsta = 25;
long 64 biți -9,223,372,036,854,775,808 la 9,223,372,036,854,775,807 long populatie = 7800000000L;
double 64 biți ±5.0 × 10^-324 la ±1.7 × 10^308 double pret = 19.99;
float 32 biți ±1.5 × 10^-45 la ±3.4 × 10^38 float temperatura = 23.5f;
decimal 128 biți ±1.0 × 10^-28 la ±7.9 × 10^28 decimal salariu = 2500.75m;

Alte Tipuri Fundamentale

// Boolean - true sau false bool esteStudent = true; bool arePermis = false; // Caractere - un singur caracter între apostrofuri char nota = 'A'; char simbol = '@'; // String - text între ghilimele string mesaj = "Bun venit în C#!"; string gol = ""; // string gol // Byte - numere între 0 și 255 byte nivel = 10;

Declararea Constantelor

// Constantele nu pot fi modificate după inițializare const double PI = 3.14159; const int VARSTA_MINIMA = 18; const string NUME_APLICATIE = "Calculator C#"; // Aceasta va genera eroare: // PI = 3.14; // Eroare: nu poți modifica o constantă

Conversii între Tipuri

// Conversie implicită (automată) int numarIntreg = 100; double numarDouble = numarIntreg; // OK: int -> double // Conversie explicită (cast) double pret = 19.99; int pretRotunjit = (int)pret; // 19 (se pierde partea zecimală) // Conversie folosind metode string textNumar = "123"; int numar = Convert.ToInt32(textNumar); int numar2 = int.Parse(textNumar); // Conversie sigură string input = "456"; int rezultat; bool succes = int.TryParse(input, out rezultat);

Sfat: Folosiți decimal pentru calcule financiare (bani), double pentru calcule științifice, și int pentru numărare.

Exercițiu 2

Declarați variabile pentru a stoca: numele unui produs, prețul său, cantitatea în stoc, dacă este disponibil, și prima literă a categoriei. Afișați toate informațiile formatate frumos.

string numeProdus = "Mouse Gaming RGB"; decimal pret = 149.99m; int cantitate = 23; bool disponibil = true; char categorie = 'E'; // E pentru Electronică Console.WriteLine("=== Detalii Produs ==="); Console.WriteLine($"Nume: {numeProdus}"); Console.WriteLine($"Preț: {pret:C}"); Console.WriteLine($"Cantitate în stoc: {cantitate} buc."); Console.WriteLine($"Disponibil: {(disponibil ? "Da" : "Nu")}"); Console.WriteLine($"Categorie: {categorie}");

3. Operatori Aritmetici

Operatorii aritmetici sunt folosiți pentru a efectua calcule matematice.

Operator Descriere Exemplu Rezultat
+ Adunare 10 + 5 15
- Scădere 10 - 5 5
* Înmulțire 10 * 5 50
/ Împărțire 10 / 5 2
% Modulo (rest) 10 % 3 1

Operatori de Incrementare/Decrementare

int x = 5; // Post-incrementare Console.WriteLine(x++); // Afișează 5, apoi x devine 6 Console.WriteLine(x); // Afișează 6 // Pre-incrementare int y = 5; Console.WriteLine(++y); // y devine 6, apoi afișează 6 // Similar pentru decrementare int z = 10; Console.WriteLine(z--); // Afișează 10, apoi z devine 9 Console.WriteLine(--z); // z devine 8, apoi afișează 8

Operatori de Atribuire Compuși

int numar = 10; numar += 5; // echivalent cu: numar = numar + 5 numar -= 3; // echivalent cu: numar = numar - 3 numar *= 2; // echivalent cu: numar = numar * 2 numar /= 4; // echivalent cu: numar = numar / 4 numar %= 3; // echivalent cu: numar = numar % 3 Console.WriteLine(numar); // Rezultatul final

Ordinea Operațiilor

C# respectă ordinea matematică standard a operațiilor:

int rezultat1 = 2 + 3 * 4; // 14 (nu 20) int rezultat2 = (2 + 3) * 4; // 20 int rezultat3 = 10 / 2 + 3; // 8 double rezultat4 = 10.0 / 3; // 3.33333... // Atenție la împărțirea cu numere întregi int a = 7, b = 2; int rezultatIntreg = a / b; // 3 (partea zecimală se pierde) double rezultatDouble = (double)a / b; // 3.5

Calculator Simplu

double numar1 = 15.5; double numar2 = 4.2; Console.WriteLine("=== Calculator ==="); Console.WriteLine($"Numărul 1: {numar1}"); Console.WriteLine($"Numărul 2: {numar2}"); Console.WriteLine(); Console.WriteLine($"Adunare: {numar1} + {numar2} = {numar1 + numar2}"); Console.WriteLine($"Scădere: {numar1} - {numar2} = {numar1 - numar2}"); Console.WriteLine($"Înmulțire: {numar1} * {numar2} = {numar1 * numar2}"); Console.WriteLine($"Împărțire: {numar1} / {numar2} = {numar1 / numar2:F2}"); Console.WriteLine($"Restul: {numar1} % {numar2} = {numar1 % numar2:F2}");

Exercițiu 3

Creați un program care calculează aria și perimetrul unui dreptunghi. Lungimea = 12.5, lățimea = 8.3. Afișați rezultatele formatate cu 2 zecimale.

double lungime = 12.5; double latime = 8.3; double aria = lungime * latime; double perimetrul = 2 * (lungime + latime); Console.WriteLine("=== Calculul Dreptunghiului ==="); Console.WriteLine($"Lungime: {lungime} cm"); Console.WriteLine($"Lățime: {latime} cm"); Console.WriteLine($"Aria: {aria:F2} cm²"); Console.WriteLine($"Perimetrul: {perimetrul:F2} cm");

4. Operatori de Comparare

Operatorii de comparare sunt folosiți pentru a compara valori și returnează true sau false.

Operator Descriere Exemplu Rezultat
== Egal cu 5 == 5 true
!= Diferit de 5 != 3 true
> Mai mare ca 8 > 5 true
< Mai mic ca 3 < 7 true
>= Mai mare sau egal 5 >= 5 true
<= Mai mic sau egal 4 <= 6 true

Compararea String-urilor

string nume1 = "Ana"; string nume2 = "ana"; string nume3 = "Ana"; // Comparare directă (case-sensitive) bool egal1 = nume1 == nume3; // true bool egal2 = nume1 == nume2; // false (diferite majuscule) // Comparare ignorând majusculele bool egal3 = nume1.ToLower() == nume2.ToLower(); // true bool egal4 = string.Equals(nume1, nume2, StringComparison.OrdinalIgnoreCase); // true // Verificare dacă string-ul este gol sau null string text = ""; bool esteGol = string.IsNullOrEmpty(text); // true bool esteGolSauSpatii = string.IsNullOrWhiteSpace(" "); // true

Sistem de Verificare Vârstă

int varsta = 17; const int VARSTA_MAJORAT = 18; const int VARSTA_PENSIONARE = 65; Console.WriteLine($"Vârsta introdusă: {varsta} ani"); // Verificări multiple bool esteMajor = varsta >= VARSTA_MAJORAT; bool estePensionar = varsta >= VARSTA_PENSIONARE; bool esteAdult = varsta >= 21 && varsta < 65; Console.WriteLine($"Este major: {esteMajor}"); Console.WriteLine($"Este pensionar: {estePensionar}"); Console.WriteLine($"Este adult: {esteAdult}"); // Comparare cu alte valori bool poateVota = varsta >= 18; bool poateConduceAuto = varsta >= 18; bool poateCumpAraAlcool = varsta >= 18; Console.WriteLine($"Poate vota: {poateVota}"); Console.WriteLine($"Poate conduce: {poateConduceAuto}"); Console.WriteLine($"Poate cumpăra alcool: {poateCumpAraAlcool}");

Atenție: Pentru compararea string-urilor, folosiți == sau string.Equals(). Nu folosiți = (care este pentru atribuire)!

Exercițiu 4

Creați un program care compară două numere și afișează care este mai mare, mai mic, sau dacă sunt egale. Testați cu valorile 25 și 30.

int numar1 = 25; int numar2 = 30; Console.WriteLine("=== Compararea Numerelor ==="); Console.WriteLine($"Primul număr: {numar1}"); Console.WriteLine($"Al doilea număr: {numar2}"); Console.WriteLine(); bool suntEgale = numar1 == numar2; bool primul_mai_mare = numar1 > numar2; bool primul_mai_mic = numar1 < numar2; Console.WriteLine($"Sunt egale: {suntEgale}"); Console.WriteLine($"{numar1} > {numar2}: {primul_mai_mare}"); Console.WriteLine($"{numar1} < {numar2}: {primul_mai_mic}"); Console.WriteLine($"{numar1} != {numar2}: {numar1 != numar2}");

5. Operatori Logici

Operatorii logici sunt folosiți pentru a combina sau modifica expresii boolean.

Operator Nume Descriere Exemplu
&& AND logic true dacă ambele condiții sunt true true && false → false
|| OR logic true dacă cel puțin o condiție este true true || false → true
! NOT logic Inversează valoarea boolean !true → false

Tabelul de Adevăr

A B A && B A || B !A
true true true true false
true false false true false
false true false true true
false false false false true

Exemple Practice

int varsta = 20; bool arePermis = true; bool areBani = false; double salariu = 2000; // AND logic - toate condițiile trebuie să fie true bool poateConduce = varsta >= 18 && arePermis; Console.WriteLine($"Poate conduce: {poateConduce}"); // true // OR logic - cel puțin o condiție trebuie să fie true bool poateCumpara = areBani || salariu > 1500; Console.WriteLine($"Poate cumpăra: {poateCumpara}"); // true // NOT logic - inversează valoarea bool nuArePermis = !arePermis; Console.WriteLine($"Nu are permis: {nuArePermis}"); // false // Combinații complexe bool calificat = (varsta >= 18 && varsta <= 65) && (salariu > 1000 || arePermis); Console.WriteLine($"Este calificat: {calificat}");

Evaluarea pe Scurt (Short-Circuit)

int x = 0; int y = 5; // Cu &&: dacă prima condiție e false, a doua nu se mai evaluează bool rezultat1 = (x != 0) && (y / x > 2); // Nu va genera eroare de împărțire la 0 // Cu ||: dacă prima condiție e true, a doua nu se mai evaluează bool rezultat2 = (x == 0) || (y / x > 2); // Nu va genera eroare de împărțire la 0 Console.WriteLine($"Rezultat 1: {rezultat1}"); // false Console.WriteLine($"Rezultat 2: {rezultat2}"); // true

Sistem de Autentificare

string utilizator = "admin"; string parola = "password123"; bool contActiv = true; bool esteBlcat = false; int încercariRamase = 3; // Verificări de autentificare bool utilizatorValid = utilizator == "admin" && parola.Length >= 8; bool contAccessibil = contActiv && !esteBlcat; bool poateIncerca = încercariRamase > 0; // Decizia finală bool accesPersit = utilizatorValid && contAccessibil && poateIncerca; Console.WriteLine("=== Sistem Autentificare ==="); Console.WriteLine($"Utilizator valid: {utilizatorValid}"); Console.WriteLine($"Cont accessibil: {contAccessibil}"); Console.WriteLine($"Poate încerca: {poateIncerca}"); Console.WriteLine($"Acces permis: {accesPersit}"); // Verificări suplimentare bool trebuieSchimbataParola = parola == "password123" || parola.Length < 10; bool contSigur = !trebuieSchimbataParola && contActiv; Console.WriteLine($"Trebuie schimbată parola: {trebuieSchimbataParola}"); Console.WriteLine($"Cont sigur: {contSigur}");

Exercițiu 5

Creați un program pentru verificarea eligibilității pentru un împrumut bancar. Condițiile: vârsta între 18-65 ani, salariul peste 2000 RON, și să nu aibă datorii active. Testați cu: vârsta=35, salariu=2500, datorii=false.

int varsta = 35; double salariu = 2500; bool areDatorii = false; // Definirea criteriilor bool varstaOK = varsta >= 18 && varsta <= 65; bool salariuOK = salariu > 2000; bool faraDatorii = !areDatorii; // Decizia finală bool eligibil = varstaOK && salariuOK && faraDatorii; Console.WriteLine("=== Verificare Eligibilitate Împrumut ==="); Console.WriteLine($"Vârsta: {varsta} ani"); Console.WriteLine($"Salariu: {salariu} RON"); Console.WriteLine($"Are datorii: {areDatorii}"); Console.WriteLine(); Console.WriteLine($"Vârsta eligibilă (18-65): {varstaOK}"); Console.WriteLine($"Salariu suficient (>2000): {salariuOK}"); Console.WriteLine($"Fără datorii active: {faraDatorii}"); Console.WriteLine(); Console.WriteLine($"REZULTAT: {(eligibil ? "ELIGIBIL" : "NEELIGIBIL")} pentru împrumut");

6. Instrucțiuni Condiționale

Instrucțiunile condiționale permit executarea diferitelor blocuri de cod în funcție de anumite condiții.

Instrucțiunea if

int temperatura = 25; // if simplu if (temperatura > 20) { Console.WriteLine("Este cald afară!"); } // if cu else if (temperatura > 30) { Console.WriteLine("Este foarte cald!"); } else { Console.WriteLine("Temperatura este OK."); }

Instrucțiunea if-else if-else

int nota = 8; if (nota >= 9) { Console.WriteLine("Excelent!"); } else if (nota >= 7) { Console.WriteLine("Bine!"); } else if (nota >= 5) { Console.WriteLine("Suficient!"); } else { Console.WriteLine("Insuficient!"); }

Operatorul Ternar (? :)

int varsta = 20; // Versiunea lungă cu if-else string status1; if (varsta >= 18) { status1 = "Major"; } else { status1 = "Minor"; } // Versiunea scurtă cu operatorul ternar string status2 = varsta >= 18 ? "Major" : "Minor"; Console.WriteLine($"Status: {status2}"); // Exemple de utilizare în afișare double pret = 150.75; Console.WriteLine($"Preț

7. Exerciții Practice

Această secțiune conține exerciții practice pentru a consolida cunoștințele dobândite. Exercițiile sunt organizate pe nivele de dificultate.

🟢 Exerciții pentru Începători

Exercițiu 7.1: Calculator de Reduceri

Creați un program care calculează prețul final după aplicarea unei reduceri. Programul trebuie să:

  • Definească prețul inițial: 250 RON
  • Definească procentul de reducere: 15%
  • Calculeze și afișeze suma economisită
  • Calculeze și afișeze prețul final
double pretInitial = 250.0; double procentReducere = 15.0; double sumaReducere = pretInitial * (procentReducere / 100); double pretFinal = pretInitial - sumaReducere; Console.WriteLine("=== Calculator Reduceri ==="); Console.WriteLine($"Preț inițial: {pretInitial:C}"); Console.WriteLine($"Reducere: {procentReducere}%"); Console.WriteLine($"Sumă economisită: {sumaReducere:C}"); Console.WriteLine($"Preț final: {pretFinal:C}");

Exercițiu 7.2: Convertor de Temperatură

Scrieți un program care convertește temperatura din Celsius în Fahrenheit și Kelvin:

  • Temperatura în Celsius: 25°C
  • Formula Fahrenheit: F = C × 9/5 + 32
  • Formula Kelvin: K = C + 273.15
  • Afișați toate cele 3 valori formatate
double celsius = 25.0; double fahrenheit = celsius * 9.0 / 5.0 + 32; double kelvin = celsius + 273.15; Console.WriteLine("=== Convertor Temperatură ==="); Console.WriteLine($"Celsius: {celsius:F1}°C"); Console.WriteLine($"Fahrenheit: {fahrenheit:F1}°F"); Console.WriteLine($"Kelvin: {kelvin:F2}K"); // Verificare dacă e frig sau cald string descriere = celsius < 10 ? "Frig" : celsius > 25 ? "Cald" : "Plăcut"; Console.WriteLine($"Temperatura este: {descriere}");

Exercițiu 7.3: Calculator IMC (Indice Masă Corporală)

Calculați indicele de masă corporală pentru o persoană cu:

  • Greutate: 75 kg
  • Înălțime: 1.80 m
  • Formula: IMC = greutate / (înălțime × înălțime)
  • Afișați categoria: sub 18.5 (subponderal), 18.5-25 (normal), peste 25 (supraponderal)
double greutate = 75.0; double inaltime = 1.80; double imc = greutate / (inaltime * inaltime); Console.WriteLine("=== Calculator IMC ==="); Console.WriteLine($"Greutate: {greutate} kg"); Console.WriteLine($"Înălțime: {inaltime} m"); Console.WriteLine($"IMC: {imc:F2}"); string categorie; if (imc < 18.5) categorie = "Subponderal"; else if (imc < 25) categorie = "Greutate normală"; else if (imc < 30) categorie = "Supraponderal"; else categorie = "Obezitate"; Console.WriteLine($"Categorie: {categorie}");

🟡 Exerciții Intermediare

Exercițiu 7.4: Sistem de Notare Academic

Creați un sistem care calculează nota finală pe baza mai multor componente:

  • Test 1: 8.5 (pondere 25%)
  • Test 2: 9.0 (pondere 25%)
  • Proiect: 7.5 (pondere 30%)
  • Examen final: 8.0 (pondere 20%)
  • Calculați media ponderată și determinați calificativul (A, B, C, D, F)
double test1 = 8.5, pondereTest1 = 0.25; double test2 = 9.0, pondereTest2 = 0.25; double proiect = 7.5, pondereProiect = 0.30; double examen = 8.0, pondereExamen = 0.20; double notaFinala = (test1 * pondereTest1) + (test2 * pondereTest2) + (proiect * pondereProiect) + (examen * pondereExamen); Console.WriteLine("=== Sistem de Notare Academic ==="); Console.WriteLine($"Test 1: {test1} (25%)"); Console.WriteLine($"Test 2: {test2} (25%)"); Console.WriteLine($"Proiect: {proiect} (30%)"); Console.WriteLine($"Examen Final: {examen} (20%)"); Console.WriteLine($"Nota Finală: {notaFinala:F2}"); string calificativ; if (notaFinala >= 9) calificativ = "A (Excelent)"; else if (notaFinala >= 8) calificativ = "B (Foarte bine)"; else if (notaFinala >= 7) calificativ = "C (Bine)"; else if (notaFinala >= 5) calificativ = "D (Suficient)"; else calificativ = "F (Insuficient)"; Console.WriteLine($"Calificativ: {calificativ}"); Console.WriteLine($"Promovat: {(notaFinala >= 5 ? "DA" : "NU")}");

Exercițiu 7.5: Calculator Timp de Lucru

Calculați salariul pentru o săptămână de lucru cu următoarele date:

  • Ore normale lucrate: 40 (tarif: 25 RON/oră)
  • Ore suplimentare: 5 (tarif: 150% din tariful normal)
  • Bonus weekend: 200 RON (se acordă doar dacă a lucrat peste 45 ore)
  • Taxe: 20% din total
int oreNormale = 40; int oreSuplimentare = 5; double tarifNormal = 25.0; double tarifSuplimentar = tarifNormal * 1.5; double bonusWeekend = 200.0; double procentTaxe = 0.20; double salariuNormal = oreNormale * tarifNormal; double salariuSuplimentar = oreSuplimentare * tarifSuplimentar; int totalOre = oreNormale + oreSuplimentare; bool primestBonus = totalOre > 45; double bonusAplicat = primestBonus ? bonusWeekend : 0; double salariuBrut = salariuNormal + salariuSuplimentar + bonusAplicat; double taxe = salariuBrut * procentTaxe; double salariuNet = salariuBrut - taxe; Console.WriteLine("=== Calculator Salariu Săptămânal ==="); Console.WriteLine($"Ore normale: {oreNormale} × {tarifNormal:C} = {salariuNormal:C}"); Console.WriteLine($"Ore suplimentare: {oreSuplimentare} × {tarifSuplimentar:C} = {salariuSuplimentar:C}"); Console.WriteLine($"Bonus weekend: {(primestBonus ? bonusWeekend.ToString("C") : "Nu se aplică")}"); Console.WriteLine($"Total brut: {salariuBrut:C}"); Console.WriteLine($"Taxe (20%): -{taxe:C}"); Console.WriteLine($"Salariu NET: {salariuNet:C}");

🔴 Exerciții Avansate

Exercițiu 7.6: Sistem de Facturare Complex

Implementați un sistem de facturare pentru un magazin cu următoarele reguli:

  • 3 produse: Laptop (3500 RON), Mouse (150 RON), Tastatură (200 RON)
  • Reducere 5% pentru comenzi peste 2000 RON
  • Reducere suplimentară 3% pentru clienți fideli
  • TVA 19%
  • Transport: 50 RON (gratuit peste 3000 RON)
  • Client fidel: da
// Prețuri produse double pretLaptop = 3500.0; double pretMouse = 150.0; double pretTastatura = 200.0; // Configurație bool clientFidel = true; double pragReducere = 2000.0; double pragTransportGratuit = 3000.0; double costTransport = 50.0; double procentReducere1 = 0.05; double procentReducereLoialitate = 0.03; double procentTVA = 0.19; // Calcule double subtotal = pretLaptop + pretMouse + pretTastatura; double reducere1 = subtotal > pragReducere ? subtotal * procentReducere1 : 0; double reducere2 = clientFidel ? (subtotal - reducere1) * procentReducereLoialitate : 0; double totalDupaReduceri = subtotal - reducere1 - reducere2; double tva = totalDupaReduceri * procentTVA; double transportAplicat = totalDupaReduceri > pragTransportGratuit ? 0 : costTransport; double totalFinal = totalDupaReduceri + tva + transportAplicat; Console.WriteLine("=== FACTURĂ DETALIATĂ ==="); Console.WriteLine($"Laptop: {pretLaptop:C}"); Console.WriteLine($"Mouse: {pretMouse:C}"); Console.WriteLine($"Tastatură: {pretTastatura:C}"); Console.WriteLine($"Subtotal: {subtotal:C}"); if (reducere1 > 0) Console.WriteLine($"Reducere comandă mare (5%): -{reducere1:C}"); if (reducere2 > 0) Console.WriteLine($"Reducere client fidel (3%): -{reducere2:C}"); Console.WriteLine($"Total după reduceri: {totalDupaReduceri:C}"); Console.WriteLine($"TVA (19%): {tva:C}"); Console.WriteLine($"Transport: {(transportAplicat == 0 ? "GRATUIT" : transportAplicat.ToString("C"))}"); Console.WriteLine("========================"); Console.WriteLine($"TOTAL DE PLATĂ: {totalFinal:C}"); Console.WriteLine($"Economisiți: {(reducere1 + reducere2 + (costTransport - transportAplicat)):C}");

Exercițiu 7.7: Analizator de Performanță Sportivă

Creați un sistem care analizează performanța unui atlet în triatlon:

  • Înot: 25 minute (timp ideal: sub 20 min)
  • Ciclism: 65 minute (timp ideal: sub 60 min)
  • Alergare: 45 minute (timp ideal: sub 40 min)
  • Calculați timpul total, media pe probă, și determinați nivelul (Începător/Intermediar/Avansat/Elite)
  • Verificați dacă s-a calificat pentru campionat (timp total sub 150 minute)
// Timpii realizați (în minute) int timpInot = 25; int timpCiclism = 65; int timpAlergare = 45; // Timpii ideali int idealInot = 20; int idealCiclism = 60; int idealAlergare = 40; // Calcule int timpTotal = timpInot + timpCiclism + timpAlergare; double mediaTimpProba = timpTotal / 3.0; int timpIdealTotal = idealInot + idealCiclism + idealAlergare; // Evaluare per probă bool inotBun = timpInot <= idealInot; bool ciclismBun = timpCiclism <= idealCiclism; bool alergareBuna = timpAlergare <= idealAlergare; int probeBune = (inotBun ? 1 : 0) + (ciclismBun ? 1 : 0) + (alergareBuna ? 1 : 0); // Determinare nivel string nivel; if (timpTotal <= 120) nivel = "Elite"; else if (timpTotal <= 140) nivel = "Avansat"; else if (timpTotal <= 160) nivel = "Intermediar"; else nivel = "Începător"; bool calificat = timpTotal < 150; Console.WriteLine("=== Analiză Performanță Triatlon ==="); Console.WriteLine("\nTimpi realizați:"); Console.WriteLine($"Înot: {timpInot} min {(inotBun ? "✓" : "✗")} (ideal: {idealInot} min)"); Console.WriteLine($"Ciclism: {timpCiclism} min {(ciclismBun ? "✓" : "✗")} (ideal: {idealCiclism} min)"); Console.WriteLine($"Alergare: {timpAlergare} min {(alergareBuna ? "✓" : "✗")} (ideal: {idealAlergare} min)"); Console.WriteLine("\nStatistici:"); Console.WriteLine($"Timp total: {timpTotal} minute"); Console.WriteLine($"Media pe probă: {mediaTimpProba:F1} minute"); Console.WriteLine($"Probe la nivel ideal: {probeBune}/3"); Console.WriteLine($"Diferență față de ideal: +{timpTotal - timpIdealTotal} minute"); Console.WriteLine("\nEvaluare finală:"); Console.WriteLine($"Nivel: {nivel}"); Console.WriteLine($"Calificare campionat: {(calificat ? "DA ✓" : "NU ✗")}"); // Recomandări Console.WriteLine("\nRecomandări:"); if (!inotBun) Console.WriteLine("- Îmbunătățește tehnica de înot"); if (!ciclismBun) Console.WriteLine("- Antrenament suplimentar pentru ciclism"); if (!alergareBuna) Console.WriteLine("- Focus pe rezistența la alergare"); if (probeBune == 3) Console.WriteLine("- Performanță excelentă! Continuă așa!");

Exercițiu 7.8: Sistem de Evaluare Complexă

Implementați un sistem care evaluează eligibilitatea pentru o bursă academică bazat pe criterii multiple:

  • Media generală: 8.7
  • Prezență: 92%
  • Activități extrașcolare: 3
  • Venit familial lunar: 3500 RON
  • Număr membri familie: 5
  • Criterii: medie ≥ 8.5, prezență ≥ 90%, minim 2 activități, venit/membru < 1000 RON
// Date student double mediaGenerala = 8.7; double prezenta = 92.0; int activitatiExtra = 3; double venitFamilial = 3500.0; int membriFamilie = 5; // Criterii minime const double MEDIE_MINIMA = 8.5; const double PREZENTA_MINIMA = 90.0; const int ACTIVITATI_MINIME = 2; const double VENIT_PER_MEMBRU_MAX = 1000.0; // Calcule double venitPerMembru = venitFamilial / membriFamilie; // Verificare criterii bool criteriu1 = mediaGenerala >= MEDIE_MINIMA; bool criteriu2 = prezenta >= PREZENTA_MINIMA; bool criteriu3 = activitatiExtra >= ACTIVITATI_MINIME; bool criteriu4 = venitPerMembru < VENIT_PER_MEMBRU_MAX; int criteriiIndeplinite = (criteriu1 ? 1 : 0) + (criteriu2 ? 1 : 0) + (criteriu3 ? 1 : 0) + (criteriu4 ? 1 : 0); bool eligibil = criteriu1 && criteriu2 && criteriu3 && criteriu4; // Calculare valoare bursă double bursaBaza = 500.0; double bonusMedia = mediaGenerala > 9.0 ? 100.0 : 0; double bonusActivitati = activitatiExtra > 3 ? 50.0 : 0; double valoareBursa = eligibil ? bursaBaza + bonusMedia + bonusActivitati : 0; Console.WriteLine("=== EVALUARE BURSĂ ACADEMICĂ ==="); Console.WriteLine("\nDate candidat:"); Console.WriteLine($"Media generală: {mediaGenerala:F2}"); Console.WriteLine($"Prezență: {prezenta:F1}%"); Console.WriteLine($"Activități extrașcolare: {activitatiExtra}"); Console.WriteLine($"Venit familial: {venitFamilial:C}"); Console.WriteLine($"Membri familie: {membriFamilie}"); Console.WriteLine($"Venit per membru: {venitPerMembru:C}"); Console.WriteLine("\nVerificare criterii:"); Console.WriteLine($"✓ Media ≥ {MEDIE_MINIMA}: {(criteriu1 ? "DA" : "NU")} ({mediaGenerala:F2})"); Console.WriteLine($"✓ Prezență ≥ {PREZENTA_MINIMA}%: {(criteriu2 ? "DA" : "NU")} ({prezenta:F1}%)"); Console.WriteLine($"✓ Activități ≥ {ACTIVITATI_MINIME}: {(criteriu3 ? "DA" : "NU")} ({activitatiExtra})"); Console.WriteLine($"✓ Venit/membru < {VENIT_PER_MEMBRU_MAX:C}: {(criteriu4 ? "DA" : "NU")} ({venitPerMembru:C})"); Console.WriteLine("\nRezultat final:"); Console.WriteLine($"Criterii îndeplinite: {criteriiIndeplinite}/4"); Console.WriteLine($"Status: {(eligibil ? "ELIGIBIL ✓" : "NEELIGIBIL ✗")}"); if (eligibil) { Console.WriteLine($"\nCalcul bursă:"); Console.WriteLine($"Bursă de bază: {bursaBaza:C}"); if (bonusMedia > 0) Console.WriteLine($"Bonus excelență: +{bonusMedia:C}"); if (bonusActivitati > 0) Console.WriteLine($"Bonus activități: +{bonusActivitati:C}"); Console.WriteLine($"TOTAL BURSĂ LUNARĂ: {valoareBursa:C}"); } else { Console.WriteLine("\nRecomandări pentru eligibilitate:"); if (!criteriu1) Console.WriteLine($"- Îmbunătățește media (necesari {MEDIE_MINIMA - mediaGenerala:F2} puncte)"); if (!criteriu2) Console.WriteLine($"- Îmbunătățește prezența (necesari {PREZENTA_MINIMA - prezenta:F1}%)"); if (!criteriu3) Console.WriteLine($"- Participă la mai multe activități (necesare încă {ACTIVITATI_MINIME - activitatiExtra})"); if (!criteriu4) Console.WriteLine("- Criteriul de venit nu este îndeplinit"); }

💡 Provocări Bonus

Provocare 1: Calculator de Economii

Creați un program care calculează câți ani sunt necesari pentru a economisi o sumă țintă:

  • Sumă țintă: 50.000 RON
  • Economii lunare: 800 RON
  • Dobândă anuală: 3%
  • Afișați suma acumulată după fiecare an

Hint: Folosiți formula dobânzii compuse și împărțiți calculul pe ani.

Provocare 2: Validator de Card

Implementați un validator simplu pentru numere de card (folosind ultimele 4 cifre):

  • Verificați dacă sunt exact 4 cifre
  • Calculați suma cifrelor
  • Verificați dacă suma este divizibilă cu 10
  • Afișați tipul cardului bazat pe prima cifră (4=Visa, 5=Mastercard, 3=Amex)

Provocare 3: Sistem de Parcare Inteligent

Creați un calculator pentru taxa de parcare cu următoarele reguli:

  • Prima oră: 5 RON
  • Orele 2-4: 3 RON/oră
  • După 4 ore: 2 RON/oră
  • Taxă maximă pe zi: 25 RON
  • Weekend: reducere 50%
  • Abonați: reducere suplimentară 20%

Sfaturi pentru rezolvarea exercițiilor:

  • Citiți cu atenție cerințele înainte de a începe
  • Identificați variabilele necesare și tipurile lor
  • Planificați logica înainte de a scrie codul
  • Testați cu diferite valori pentru a verifica corectitudinea
  • Folosiți nume descriptive pentru variabile
  • Adăugați comentarii pentru a explica logica complexă