Nguyên tắc hoạt động của hàm và cách truyền tham số cho hàm

Một phần của tài liệu Bài giảng môn kỹ thuật lập trình C# potx (Trang 52 - 55)

- Sơ đồ cỳ phỏp

4.6Nguyên tắc hoạt động của hàm và cách truyền tham số cho hàm

Như ở trờn chỳng ta đó tỡm hiểu mỗi hàm cú thể cú đối hoặc khụng. Nếu như hàm cú đối thỡ sau khi xõy dựng xong chỳng ta cú thể gọi chỳng ra thực hiện. Mỗi một đối ta phải truyền cho nú một tham số tương ứng tuỳ thuộc đối đú là kiểu gỡ.

 Nếu đối là kiểu tham trị trước tiờn mỏy sẽ cấp phỏt bộ nhớ cho đối kiểu tham trị đú, sau đú tiến hành sao chộp giỏ trị của tham số thực thụ với nú đưa vào đối này. Từ đú ta thấy tham số thực thụ tương ứng với đối cú kiểu tham trị cú thể là một hằng, một biến, một biểu thức... và cú kiểu tương ứng. Bởi vỡ đối kiểu tham trị khi mà hàm chứa đối này được gọi ra thực hiện thỡ nú được cấp phỏt bộ nhớ riờng sau đú sao chộp giỏ trị của tham số thực thụ tương ứng với nú đưa vào và sau đú mỏy tiến hành cỏc thao tỏc trờn đối này mà khụng làm ảnh hưởng tới tham số thực thụ tương ứng với nú và cũng bởi vỡ nú chỉ sao chộp giỏ trị của tham số thực thụ tương ứng với nú do vậy tham số thực thụ tương ứng với nú cứ cho một giỏ trị là được. Vỡ vậy tham số thực thụ tương ứng với đối kiểu tham trị cú thể là hàng, biến, biểu thức...miễn là cú cựng kiểu.

Ghi chỳ: Theo những phõn tớch ở trờn những đối chỉ nhằm mục đớch

cung cấp dữ liệu đầu vào cho hàm thỡ chỳng ta khai bỏo đối đú là đối kiểu tham trị

 Nếu đối là kiểu tham chiếu đối này sẽ tham chiếu tới tham số tương ứng với nú. Nghĩa là trong thõn hàm khi ta thao tỏc trờn đối tham chiều này thực chất là thao tỏc trờn tham số truyền vào tương ứng với đối này. Do vậy mọi thay đổi giỏ trị của đối tham chiếu cũng đồng nghĩa với việc thay đổi giỏ trị của tham số tương ứng truyền vào. Điều này chứng tỏ rằng tham số tương ứng với đối là kiểu tham chiểu phải là một biến hay phần tử của mảng cú kiểu tương ứng và khi hàm chứa đối kiểu tham chiếu này kết thỳc thỡ tham số tương ứng với nú lưu lại được sự thay đổi khi ra khỏi hàm

Trong C# cú hai loại đối kiểu tham chiếu đú là: đối kiểu tham chiếu ref và đối kiểu tham chiếu out. Nếu đối là kiểu tham chiếu ref thỡ tham số tương ứng với nú phải được khởi gỏn giỏ trị trươc khi truyền vào và nú cú thể tham gia tớnh toỏn trong cỏc biểu thức. Nếu đổi là kiểu tham chiếu out thỡ tham số tương ứng với nú khụng cần khởi tạo giỏ trị ban đầu, chớnh vỡ lẽ đú nú chỉ dựng để nhận giỏ trị và khụng được tham gia tớnh toỏn trong cỏc biểu thức.

Ghi chỳ: Theo những phõn tớch ở trờn những đối dựng để cung cấp dữ liệu đầu vào cho hàm và đồng thời lưu lại được sự thay đổi khi chỳng ta tỏc động trờn những đối này, những đối như vậy thỡ chỳng ta khai bỏo đối kiểu tham chiếu(ref). Những đối chỉ nhằm mục đớch nhận giỏ trị khi ra khỏi hàm thỡ những đối này chỳng ta khai bỏo đối theo kiểu tham chiếu out.

Tham số truyền vào cho đối tham chiếu phải kốm theo hai từ khoỏ ref hoặc out tượng ứng với đối kiểu tham chiếu ref và đối kiểu tham chiếu out

Vớ dụ: Nhõp vào ba số nguyờn dương sau đú tiến hành sắp xếp ba số

nguyờn đú theo thứ tự tăng dần.

---

using System; class VD9 {

static void HoanVi(ref int x, ref int y) {

int tg = x; x = y; y = tg; }

static void Main() {

int a, b, c;

Console.Write("Nhap a="); a = int.Parse(Console.ReadLine()); Console.Write("Nhap b="); b = int.Parse(Console.ReadLine());

Console.Write("Nhap c="); c = int.Parse(Console.ReadLine()); if (a > b) HoanVi(ref a, ref b); if (a > c) HoanVi(ref a, ref c); if (b > c) HoanVi(ref b, ref c); Console.Write("a={0}\tb={1}\tc={2}", a, b, c); Console.ReadKey(); } } --- Vớ dụ: Xõy dựng chương trỡnh giải phương trỡnh bậc hai ax2+bx+c=0(a<>0) ---

using System; class VD {

static double a,b,c; static void Nhap() {

Console.Write("Nhap a=");a=double.Parse(Console.ReadLine()); Console.Write("Nhap b=");b=double.Parse(Console.ReadLine()); Console.Write("Nhap c=");c=double.Parse(Console.ReadLine()); }

static double Delta() {

return b*b-4*a*c; }

static void Giai(out double x1,out double x2,out bool ok) { double d=Delta(); ok=true; if(d<0) {ok=false;x1=x2=0;} else if(d==0) x1=x2=-b/(2*a); else

{

x1=(-b-Math.Sqrt(d))/(2*a); x2=(-b+Math.Sqrt(d))/(2*a); }

}

static void Main() {

double x1,x2; bool ok; Nhap();

Giai(out x1,out x2,out ok); if(ok==true)

if(x1==x2) (adsbygoogle = window.adsbygoogle || []).push({});

Console.WriteLine("Phuong trinh co nghiem kep x1=x2={0}",x1); else

{

Console.WriteLine("Phuong trinh co hai nghiem phan biet"); Console.WriteLine("x1={0}\nx2={1}",x1,x2);

} else

Console.WriteLine("Phuong trinh vo nghiem"); Console.ReadKey();

} }

Một phần của tài liệu Bài giảng môn kỹ thuật lập trình C# potx (Trang 52 - 55)