C# pentru începători

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ă.

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.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ă

  1. Clasifică 0, 49, 50, 89, 90 și 100. Răspuns: RESPINS, RESPINS, ADMIS, ADMIS, EXCELENT, EXCELENT.
  2. De ce 101 nu trebuie să primească EXCELENT? Pentru că validarea domeniului are loc înainte de clasificare.
  3. 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.

Exersează cu o problemă →