C# pentru începători

Metode în C#: parametri și valori returnate

Scrie metode C# cu parametri și return: suma cifrelor, valori locale și apeluri repetate. Înțelege de ce afișarea diferă de rezultatul returnat.

O metodă este un bloc de cod cu nume, pe care îl putem apela din alte instrucțiuni. Parametrii descriu datele primite, iar tipul returnat descrie rezultatul oferit apelantului. Separarea calculului într-o metodă permite reutilizarea lui fără copierea aceleiași bucle.

Construim metoda SumDigits, care primește un întreg nenegativ și întoarce suma cifrelor sale zecimale. Main se ocupă de citire, validare și afișare. SumDigits se ocupă numai de calcul. Astfel putem verifica rezultatul metodei independent de felul în care a fost obținută intrarea.

Ideea pe care o folosim

Declarația static int SumDigits(int value) spune că metoda întoarce un int și primește un parametru int numit value. În apelul SumDigits(number), number este argumentul concret. Parametrul este numele local folosit de metodă, iar argumentul este valoarea sau expresia trimisă la apel.

Un parametru int obișnuit este transmis prin valoare: metoda primește o copie. Modificarea lui value nu schimbă variabila number din Main. Nu generalizăm această explicație la modificarea elementelor unui tablou, deoarece tablourile sunt obiecte de tip referință.

Intrare și rezultat

Citim un întreg number între 0 și 1000000000 inclusiv. Afișăm numărul original și suma cifrelor, separate prin spațiu. Pentru conversie eșuată, intrare lipsă sau valoare în afara limitelor afișăm INVALID. Metoda SumDigits are ca precondiție un argument nenegativ: Main verifică această cerință înainte de apel. Pentru zero, suma cifrelor este zero.

Exemplu urmărit

Pentru number=105, metoda primește value=105. Restul value % 10 este 5, apoi împărțirea întreagă value /= 10 lasă 10. Următorul rest este 0 și rămâne 1. Ultimul rest este 1, iar value devine zero. Suma este 6. După return, variabila number din Main este tot 105, deci afișarea este 105 6.

Metoda reduce copia value de la 105 la zero și întoarce suma 6; number din Main rămâne 105.Metoda reduce copia value de la 105 la zero și întoarce suma 6; number din Main rămâne 105.Mărește schema ↗

De ce obținem acest rezultat

În buclă, sum păstrează suma cifrelor deja eliminate, iar value păstrează partea rămasă a numărului. Fiecare iterație elimină o cifră prin împărțire la zece, deci pentru un număr pozitiv se ajunge la zero. Return trimite suma către locul apelului, unde este memorată în variabila result. Console.WriteLine afișează rezultatul abia după ce metoda s-a încheiat.

Program complet C#

using System;

class Program
{
    static int SumDigits(int value)
    {
        int sum = 0;
        while (value > 0)
        {
            sum += value % 10;
            value /= 10;
        }
        return sum;
    }

    static void Main()
    {
        if (!int.TryParse(Console.ReadLine(), out int number) ||
            number < 0 || number > 1000000000)
        {
            Console.WriteLine("INVALID");
            return;
        }

        int result = SumDigits(number);
        Console.WriteLine($"{number} {result}");
    }
}

Greșeli de evitat

Nu înlocui return sum cu Console.WriteLine(sum) într-o metodă declarată int: afișarea nu furnizează valoarea cerută apelantului. Nu uita să inițializezi sum în interiorul metodei, astfel încât fiecare apel să înceapă de la zero. Pentru d cifre, timpul este O(d), iar memoria suplimentară O(1). La limita aleasă sunt cel mult zece cifre și suma încape fără probleme în int.

Exersează

  1. Ce returnează SumDigits(999)? Răspuns: 27.
  2. Ce returnează SumDigits(0)? Zero; bucla nu se execută, iar suma inițială este returnată.
  3. Dacă apelezi succesiv SumDigits(12) și SumDigits(34), obții 3 și 7, nu 3 și 10. Variabila locală sum este inițializată separat pentru fiecare apel.

Continuă parcursul C#

Vezi Primul program C#: Console.WriteLine și Main. Vezi Variabile și tipuri în C#: int, double și bool. Vezi Bucla while în C#: repetare până la o santinelă.

Documentație de referință: Microsoft Learn.

Întrebări frecvente

Care este diferența dintre parametru și argument?

Parametrul este variabila declarată în semnătura metodei. Argumentul este expresia concretă trimisă când metoda este apelată.

Return afișează automat valoarea?

Nu. Return trimite valoarea către apelant. Afișarea se face separat, de exemplu cu Console.WriteLine.

De ce numărul din Main nu devine zero?

Parametrul int este transmis prin valoare. Metoda modifică propria copie, nu variabila originală din Main.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →