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ă