Mục lục chương I: ĐỐi tưỢng và LỚP



tải về 1.36 Mb.
trang5/28
Chuyển đổi dữ liệu21.12.2018
Kích1.36 Mb.
1   2   3   4   5   6   7   8   9   ...   28

Sử dụng lớp

        Ví dụ 1:


Xây dựng lớp diem như bài 1 sau đó viết chương trình nhập tọa độ của điểm từ bàn phím, di chuyển một tọa độ, lấy tọa độ đối xứng, hiện tọa độ của điểm lên màn hình.

a, Hướng dẫn:

Thuộc tính và phương thức của lớp diem giống hệt bài trên, khi đó muốn xây dựng chương trình ta chỉ việc sử dụng đối tượng của lớp mà thôi. Muốn vậy phải khai báo đối tượng kiểu lớp bằng sử dụmg từ khóa new để cấp phát vùng nhớ. Để truy xuất đến các phương thức của lớp thì ta truy xuất thông qua các đối tượng của lớp diem

Chẳng hạn như có đối tượng của lớp la A muốn truy xuất tới phương thức nhap() thì ta truy nhập như sau: A.nhap();

b, Chương trình hoàn thiện như sau:


using System;

using System.Collections.Generic;

using System.Text;

namespace vidu1

{

class diem

{

public int x, y;

public void move(int dx, int dy)

{

x += dx;



y += dy;

}

public void hien()

{

Console.Write("toa do :(");



Console.Write("{0},{1}", x, y);

Console.WriteLine(")");

}

public void chuyen()

{

x = -x;



y = -y;

}

public void nhap()

{

Console.WriteLine("Nhap toa do cua diem:");



x = int.Parse(Console.ReadLine());

y = int.Parse(Console.ReadLine());

}

}

class tester



{

static void Main(string[] args)

{

diem b = new diem();



// bien trong C# luon doc khoi gan gia tri truoc khi su dung

b.nhap();

Console.Write("diem b ");

b.hien();

Console.WriteLine("toa do doi xung la:");

b.chuyen();

b.hien();

b.move(2, 6);

}

}

}



Kết quả sau khi chạy chương trình là




Nhap toa do cua diem:

8

19



diem b toa do : (8,19)

toa do doi xung la:

toa do(-8,-19)

diem b sau khi di chuyen la:

toa do (-6,-13)



        Ví dụ 2:


Xây dựng chương trình nhập tam giác, tính chu vi, diện tích và in ra màn hình đó là loại tam giác nào: cân, vuông, vuông cân, đều hay thường.

a, Hướng dẫn:

Trong bài này sẽ nói sơ qua về một số thuộc tính truy cập của một số thành phần trong lớp (chi tiết về phần này xin các bạn tham khảo ở phần sau mang tên là sử dụng các từ khóa chỉ mức độ truy cập)


  • Thuộc tính của lớp là độ dài ba canh của tam giác

Các phương thức của lớp:

  • Phương thức nhập thông tin

  • Phương thức hiện thông tin

  • Phương thức kiểm tra loại tam giác

  • Phương thức tính chu vi tam giác

  • Phương thức tính diên tích tam giác

Ở đây, vì phương thức nhập thông tin và phương thức hiện thông tin chúng ta mong muốn sẽ được sử dụng trong bất kì hàm nào nên ta xây dựng có thuộc tính public, còn phương thức cho biết loại tam giác, tính diện tích tam giác và chu vi tam giác thì chúng ta mong muốn có tính chất bảo vệ và không cho các thành phần bên ngoài tác động vào nó thì sẽ xây dựng có thuộc tính truy xuất la private. Vì sao vậy? Muốn xây dựng có thuộc tính truy cập là public có được không? Câu trả lời là có nhưng không có tính chất che chắn dữ liệu và một thành phần có thể làm thay đổi đến nó trong khi tiêu chí xếp loại tam giác, tính diện tích và chu vi tam giác thì đối với tam giác nào cũng giống nhau do đó ta xây dựng nó là private.

b, Giải mẫu:



using System;

namespace VD2

{

class tamgiac

{

private int a;

private int b;

private int c;

private int i=0;

public void nhap()

{

Console.WriteLine("nhap thong so cho tam giac");



a=Convert.ToInt32(Console.ReadLine());

b=Convert.ToInt32(Console.ReadLine());

c=Convert.ToInt32(Console.ReadLine());

}

public void hien()

{

Console.WriteLine("tam giac ma ban vua nhap la:");



Console.WriteLine("do dai ba canh:,{0},{1},{2}",a,b,c);

Console.WriteLine("chu vi:{0}",chuvi());

Console.WriteLine("dien tich:{0}",dientich());

i = loaitg();



switch(i)

{

case 1:

Console.WriteLine("la tam giac deu");break;

case 2:

Console.WriteLine("la tam giac vuong can");break;



case 3:

Console.WriteLine("la tam giac can");break;



case 4:

Console.WriteLine("la tam giac vuong");break;



case 5:

Console.WriteLine("la tam giac thuong");break;

}

}

private double dientich()



{

return 0.25 * Math.Sqrt((a+b+c) * (a+b-c) * (a-b+c) * (b+c-a));

}

private double chuvi()

{

return (a + b + c);

}

private int loaitg()

{

if((a==b) || (b==c) || (a==c))

{

if (a==b && b==c)



return 1;

else

{

if ((a*a==b*b+c*c) || (b*b==a*a+c*c) || (c*c==a*a+b*b))



return 2;

else

return 3;

}

}



else

{

if (a*a==b*b+c*c ||b*b==a*a+c*c ||c*c==a*a+b*b)



return 4;

else

return 5;

}

}



}

class tester

{

static void Main(string[] args)

{

tamgiac tg = new tamgiac();



tg.nhap();

tg.hien();

Console.ReadLine();

}

}



}


Kết quả sau khi chạy chương trình như sau:

nhap thong so cho tam giac

3

4



5

tam giac ma ban vua nhap la:

do dai ba canh: 3,4,5

chu vi: 12

dien tich:6

la tam giac vuong



Các bạn chú ý vào phần in nghiêng. Đó là phương thức hien() của lớp nhưng chúng lại có thể truy nhập đến phương thức tính diện tích và phương thức hiện của lớp. Như vậy là trong cùng một lớp các phương thức cùng cấp có thể truy xuất lẫn nhau.


        Ví dụ 3:


Sử dụng lớp stack ở trên để xây dựng một chưong trình chuyển đổi cơ số đếm từ hệ 10 sang hệ 2, hê 8, hệ 16 bằng cách sử dụng phép chia liên tiếp.

a, Hướng dẫn:

Muốn đổi một số từ hệ 10 sang hệ 2, 8,16 thì ta lấy số đó chia liên tiếp cho hệ số muốn đổi. Ở mỗi lần chia, được số dư thì ta push nó vào stack. Thực hiện tiếp cho đến khi số dư nhỏ hơn số chia thì dừng lại và pop lần lượt các phần tử trong stack ra ta được kết quả.

b, Bài giải mẫu:



using System;

using System.Collections.Generic;

using System.Text;

namespace stack

{

class Stack

{

private int top;

private int[] s;

public bool empty()

{

return (top == -1);

}

public bool full()

{

return (top >= s.Length);

}

public Stack()

{

s = new int[20];



top = -1;

}

public void push(int x)

{

if (!full())

{

top = top + 1;



s[top] = x;

}

else

Console.Write("Stack tran");

}

}



public int pop()

{

if (empty())

{

Console.Write("Stack can");



return 0;

}

else



return s[top--];

}

}



class tester

{

static void Main()

{

int n, a, k;

Console.Write("Nhap vao so can doi:");

n = int.Parse(Console.ReadLine());

Console.Write("Nhap vao he so can chuyen:");

a = int.Parse(Console.ReadLine());

Stack T = new Stack();



if (a == 2)

{

while (n != 0)

{

T.push(n % 2);



n = n / 2;

}

Console.Write("Ket qua chuyen sang he nhi phan:");



while (!T.empty())

{

Console.Write("{0}", T.pop());



}

}

if (a == 8)

{

while (n != 0)

{

T.push(n % 8) ;



n = n / 8;

}

Console.Write("Ket qua chuyen sang he bat phan:");



while (!T.empty())

{

Console.Write("{0}", T.pop());



}

}

if (a == 16)

{

string st = "0123456789ABCDEF";

while (n != 0)

{

T.push((int)st[n % 16]);



n = n / 16;

}

Console.Write("Ket qua chuyen sang he thap luc phan:");



while (!T.empty())

{

Console.Write("{0}",(char)T.pop());



}

}

Console.ReadLine();



}

}

}


Kết quả sau khi chạy chương trình là:


Nhap vao so can doi: 8

Nhap vao he can doi: 2

Ket qua: 1000

Ở cả hai ví dụ trên có một phương thức public Stack () đây chính là một phương thức thiết lập của lớp stack nhưng không có tham số. Chính phương thức này đã khởi tạo cho chúng ta một stack với số phần tử tối đa là n ( n=20).





    1. Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   ...   28


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©tieuluan.info 2019
được sử dụng cho việc quản lý

    Quê hương