Condiții în C#: if, else și operatori logici
Folosește if, else și operatorii logici în C#: ramuri exclusive, praguri corecte și validarea datelor. Program complet și cazuri de frontieră.
În acest material
O instrucțiune if alege dacă un bloc de cod se execută, în funcție de o condiție de tip bool. Când condiția este adevărată se execută blocul if; altfel se poate executa blocul else. Astfel programul poate avea comportamente diferite pentru intrări diferite.
O succesiune if ... else if ... else exprimă ramuri exclusive: după prima condiție adevărată, restul lanțului nu mai este evaluat. Mai multe instrucțiuni if separate nu au aceeași semnificație, deoarece pot executa mai multe blocuri pentru aceeași intrare.
Ideea pe care o folosim
Operatorul && înseamnă „și”: ambele condiții trebuie să fie adevărate. Operatorul || înseamnă „sau”: este suficientă cel puțin o condiție adevărată. Operatorul ! inversează un bool. Pentru a verifica un interval folosim x >= 0 && x <= 100, nu notația matematică 0 <= x <= 100.
Operatorii && și || scurtcircuitează evaluarea. La A || B, dacă A este adevărat, B nu mai este evaluat. La A && B, dacă A este fals, B nu mai este evaluat. Acest comportament ajută la verificarea sigură a datelor.
Intrare și rezultat
Citim un punctaj întreg pe o linie. Valorile permise sunt 0..100. Pentru conversie eșuată sau valoare în afara intervalului afișăm INVALID. Pentru punctaje cel puțin 90 afișăm EXCELENT; pentru cele de la 50 la 89 afișăm ADMIS; pentru 0..49 afișăm RESPINS. Aceste praguri definesc exercițiul, fără să reprezinte regulile unui examen real.
Exemplu urmărit
La punctajul 95, condiția score >= 90 este adevărată, deci afișăm EXCELENT și nu mai verificăm ramura ADMIS. La 70, prima condiție este falsă, a doua este adevărată, deci afișăm ADMIS. La 49, ambele comparații cu praguri eșuează și ajungem în else. Cazurile 50 și 90 aparțin categoriilor superioare, deoarece folosim ≥.
49 este RESPINS, 50 este ADMIS, iar 90 este EXCELENT; capetele intervalelor sunt incluse explicit.Mărește schema ↗
De ce obținem acest rezultat
După validare știm că punctajul se află în 0..100. Dacă ramura ≥90 este falsă, putem deduce că punctajul este sub 90; nu trebuie să repetăm această limită în al doilea test. Dacă și testul ≥50 este fals, valoarea este sub 50 și rămâne în domeniul valid. Cele trei ramuri acoperă astfel toate punctajele permise și nu lasă cazuri neclasificate.
Program complet C#
using System;
class Program
{
static void Main()
{
if (!int.TryParse(Console.ReadLine(), out int score) ||
score < 0 || score > 100)
{
Console.WriteLine("INVALID");
return;
}
if (score >= 90)
{
Console.WriteLine("EXCELENT");
}
else if (score >= 50)
{
Console.WriteLine("ADMIS");
}
else
{
Console.WriteLine("RESPINS");
}
}
}
Greșeli de evitat
Nu testa mai întâi score >= 50 dacă ramura respectivă afișează ADMIS și este urmată de else if pentru ≥90: punctajul 95 ar intra prea devreme în prima ramură. Nu folosi score < 0 && score > 100 pentru invaliditate; un număr nu poate îndeplini simultan ambele condiții. Invaliditatea folosește „sau”.
Exersează
- Clasifică 0, 49, 50, 89, 90 și 100. Răspuns: RESPINS, RESPINS, ADMIS, ADMIS, EXCELENT, EXCELENT.
- De ce 101 nu trebuie să primească EXCELENT? Pentru că validarea domeniului are loc înainte de clasificare.
- Scrie condiția pentru intervalul 10..20 inclusiv. Răspuns:
x >= 10 && x <= 20.
Continuă parcursul C#
Vezi Variabile și tipuri în C#: int, double și bool. Vezi Citirea datelor în C# cu Console.ReadLine și TryParse. Vezi Bucla for în C#: numărare și acumulare.
Documentație de referință: Microsoft Learn.
Întrebări frecvente
Care este diferența dintre if-uri separate și else if?
If-urile separate pot executa mai multe blocuri. Un lanț else if se oprește la prima condiție adevărată.
Cum verific apartenența la un interval în C#?
Scrii două comparații unite prin &&, de exemplu x>=0 && x<=100. Comparațiile nu se înlănțuie ca în notația matematică.
De ce ordinea condițiilor contează?
O condiție mai largă pusă prima poate captura valori care trebuiau tratate de o ramură mai specifică.
Un pas mai departe
Autentifică-te pentru a păstra progresul în cont.