L p tr nh h ng i t ng
Sponsored Links
This presentation is the property of its rightful owner.
1 / 54

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PowerPoint PPT Presentation


  • 143 Views
  • Uploaded on
  • Presentation posted in: General

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG. Bài 5 Mảng- Ngọai Lệ Nội dung Khai báo mảng 1 chiều Mảng nhiều chiều Mảng răng cưa. Mảng. Ưu điểm Tổ chức quản lý tốt Cùng 1 kiểu (!!!) Thể hiện cấu trúc dữ liệu Danh sách đặc : duyệt, thêm, chèn, xóa tìm, sắp xếp nối ghép danh sách

Download Presentation

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bài 5 Mảng- Ngọai Lệ

Nội dung

Khai báo mảng 1 chiều

Mảng nhiều chiều

Mảng răng cưa


Mảng

  • Ưu điểm

  • Tổ chức quản lý tốt

  • Cùng 1 kiểu (!!!)

  • Thể hiện cấu trúc dữ liệu

    Danh sách đặc :

    duyệt, thêm, chèn, xóa

    tìm, sắp xếp

    nối ghép danh sách

    trộn

     Nên sử dụng các CTDL do .NET cung cấp


Cú pháp khai báo mảng

Khai báo mảng 1 chiều

<kiểu dữ liệu> [ ] <tên mảng> ;

Lưu ý

- Cú pháp khác so với C/C++

- Chỉ là khai báo, chứ chưa cấp phát vùng nhớ (chưa khởi tạo)


Khởi tạo mảng

Nhắc lại

-Có 2 trường hợp khai báo biến

+Khai báo trong phương thức

+Khai báo bên ngòai phương thức (nhưng nằm trong 1 lớp)

-Trong C# : khai báo và khởi tạo biến ????

-Cho phép sử dụng giá trị biểu thức để mô tả kích thước mảng

static int M=10;

int [] xxx= new int [2*M];


Khai báo bên trong 1 ph/thức

Cú pháp khởi tạo

<tên mảng> = new <tên kiểu dữ liệu>[sốpt];

Có thể kết hợp khai báo lẫn khởi tạo

Ví dụ

float [ ] f_array = new float[10];

int [] i = new int[]{2,4,6,8};

Khai báo riêng và sẽ khởi tạo trước khi sử dụng

sring[] list;

………………..

list = new string[3];


Khai báo bên ngòai ph.thức

Do khai báo bên ngòai ph/thức nhưng nằm bên trong 1 lớp  xem như thành phần 1 lớp

class ABC

{

string [ ] ds ;

………….

}

Do vậy

Khai báo bên ngòai và việc khởi tạo có thể trực tiếp hay thực hiện trong 1 phương thức nào đó


Ví dụ

public class Class1

{ int[] x_arr;

float[] fx = new float[3] {2.3F, 56.2F, 6.78F } ;

public Class1()

{

float [] f_arr= new float[10];

int [] i_arr = new int[]{2,4,6,8};

string[] list;

list = new string[3];

x_arr = new int[10];

for (int i=0;i<x_arr.Length;i++) x_arr[i]=i*4;

}

}


Xử lý mảng

Thường sử dụng vòng lặp để xứ lý mảng

do.. while

while …

for

foreach


Bài tập

Cho khai báo sau

const int N=100;

int [ ] array = new int [N];

………………….

Yêu cầu :

1- In ra các phần tử trong mảng array

2- In ra các phần tử ở vị trí chẵn trong mảng array

3- Có bao nhiêu phần tử trong mảng array có giá trị lớn hơn hay bằng X (X là 1 số kiểu int)


Mảng nhiều chiều

Cho phép tạo mảng nhiều chiều

Cú pháp

<kiểu dữ liệu> [ , …..] <tên mảng> ;

Ví dụ

float [ , ] this year;

int [ , , ] vacumm;


Yêu cầu

  • Thử khai báo và khởi tạo mảng thisyear chứa số thực có chiều thứ nhất là 12 phần tử, chiều thứ 2 có 31 phần tử

  • Thử khai báo mảng soluong chứa các số thực, mảng có 3 chiều, chiều thứ nhất có 4 phần tử, chiều thứ 2 có 10 phần tử và chiều thứ 3 có 6 phần tử


Yêu cầu

  • Đếm và in ra số phần tử trong mảng soluong chứa giá trị là 1 số chẵn ???

    • (Dùng for, while hay do )

  • In ra vị trí và giá trị các phần tử trong mảng thisyear thỏa điều kiện chứa 1 số lẻ ???

    (Dùng foreach)


  • Tam giác Pascal

    1- Viết chương trình in ra hàng thứ N của tgiác Pascal


    Mảng răng cưa (jagged array)

    Mảng răng cưa :

    là mảng mà số phần tử trong mỗi chiều có thể khác nhau

    Ví dụ khai báo mảng răng cưa có 2 chiều

    <kiểu dữ liệu> [ ] [ ] <tên mảng> ;

    Nhận xét :

     là 1 mảng, mỗi phần tử trong mảng lại là 1 mảng khác


    Mảng có 2 chiều, chiều thứ nhất có 2 phần tử

    Phần tử thứ 1 chiều thứ nhất có 2 phần tử

    Phần tử thứ 2 chiều thứ nhất có 5 phần tử

    Yêu cầu :

    Thứ khai báo và khởi tạo


    int [ ] [ ] list ;

    ……….

    list = new int[ 2][ ] ;

    list[0] = new int [2] ;

    list [1] = new int [5] ;


    Yêu cầu

    Thực hiện khai báo,khởi tạo và gán dữ liệu là các số nguyên theo như hình vẽ vào các phần tử trong mảng

    (tên mảng là exam)


    Một số lưu ý khi sử dụng mảng

    - Sử dụng thuộc tính Length của mảng thay vì phải nắm số phần tử trong mảng

    - Cấu trúc lặp foreach hữu hiệu hơn là dùng for

    - Lấy số chiều 1 mảng : sử dụng thuộc tính rank


    Lớp Array, ArrayList

    Làm quen với cấu trúcdữ liệu

    - Lớp trừu tượng Array

    - Lớp ArrayList : mô phỏng danh sách đặc và dsliên kết

    - Lớp Queue : mô phỏng hàng đợi

    - Lớp Stack : mô phỏng ngăn xếp (chồng)

    - Lớp Hashtable


    Ví dụ 1: SamplesArray1.cs

    public static void Main() {

    // Tao và khoi dong mang so nguyen va Object.

    int[] myIntArray = new int[5] { 1, 2, 3, 4, 5 };

    Object[] myObjArray = new Object[5] { 26, 27, 28, 29, 30 };

    // In ra cac gia tri trong 2 mang.

    Console.WriteLine( "Initially," );

    Console.Write( "integer array:" );

    PrintValues( myIntArray );

    Console.Write( "Object array: " );

    PrintValues( myObjArray );


    //Chep 2 phan tu dau tien cua mang so nguyen vao mang Object

    Array.Copy( myIntArray, myObjArray, 2 );

    Console.WriteLine( "\nAfter copying the first two elements of the integer array to the Object array," );

    Console.Write( "integer array:" ); PrintValues( myIntArray );

    Console.Write( "Object array: " );PrintValues( myObjArray );

    Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );


    Console.WriteLine( "\nAfter copying the last two elements of the Object array to the integer array," );

    Console.Write( "integer array:" );

    PrintValues( myIntArray );

    Console.Write( "Object array: " );

    PrintValues( myObjArray );

    }


    public static void PrintValues( Object[] myArr )

    {

    foreach ( Object i in myArr )

    Console.Write( "\t{0}", i );

    Console.WriteLine();

    }

    public static void PrintValues( int[] myArr ) {

    foreach ( int i in myArr )

    Console.Write( "\t{0}", i );

    Console.WriteLine();

    }


    Ví dụ: SamplesArray2.cs

    public static void Main() {

    // Creates and initializes a new three-dimensional Array of type Int32.

    Array myArr = Array.CreateInstance( typeof(Int32), 2, 3, 4 );

    for (int i=myArr.GetLowerBound(0);i<= myArr.GetUpperBound(0); i++ )

    for ( int j = myArr.GetLowerBound(1); j <= myArr.GetUpperBound(1); j++ )

    for ( int k = myArr.GetLowerBound(2); k <= myArr.GetUpperBound(2); k++ ) {

    myArr.SetValue( (i*100)+(j*10)+k, i, j, k );

    }


    Console.WriteLine( "The Array has {0} dimension(s) and at total of {1} elements.", myArr.Rank, myArr.Length );

    Console.WriteLine( "\tLength\tLower\tUpper" );

    for ( int i = 0; i < myArr.Rank; i++ )

    {

    Console.Write( "{0}:\t{1}", i, myArr.GetLength(i) );

    Console.WriteLine( "\t{0}\t{1}", myArr.GetLowerBound(i), myArr.GetUpperBound(i) );

    }


    Console.WriteLine( "The Array contains the following values:" );

    PrintValues( myArr );

    }

    The Array has 3 dimension(s) and a total of 24 elements.

    Length Lower Upper

    0: 2 0 1

    1: 3 0 2

    2: 4 0 3

    The Array contains the following values:

    0 1 2 3

    10 11 12 13

    20 21 22 23

    100 101 102 103

    110 111 112 113

    120 121 122 123

    */


    Ví dụ : ArrayList_Insert.cs

    public static void Main() {

    ArrayList myAL = new ArrayList();

    myAL.Insert( 0, "The" );

    myAL.Insert( 1, "fox" );

    myAL.Insert( 2, "jumps" );

    myAL.Insert( 3, "over" );

    myAL.Insert( 4, "the" );

    myAL.Insert( 5, "dog" );


    // Creates and initializes a new Queue.

    Queue myQueue = new Queue();

    myQueue.Enqueue( "quick" );

    myQueue.Enqueue( "brown" );

    // Displays the ArrayList and the Queue.

    Console.WriteLine( "The ArrayList initially contains the following:" );

    PrintValues( myAL );

    Console.WriteLine( "The Queue initially contains the following:" );

    PrintValues( myQueue );


    // Copies the Queue elements to the ArrayList at index 1.

    myAL.InsertRange( 1, myQueue );

    // Displays the ArrayList.

    Console.WriteLine( "After adding the Queue, the ArrayList now contains:" );

    PrintValues( myAL );

    // Search for "dog" and add "lazy" before it.

    myAL.Insert( myAL.IndexOf( "dog" ), "lazy" );

    // Displays the ArrayList.

    Console.WriteLine( "After adding \"lazy\", the ArrayList now contains:" );

    PrintValues( myAL );


    // Add "!!!" at the end.

    myAL.Insert( myAL.Count, "!!!" );

    // Displays the ArrayList.

    Console.WriteLine( "After adding \"!!!\", the ArrayList now contains:" );

    PrintValues( myAL );

    // Inserting an element beyond Count throws an exception.

    try {

    myAL.Insert( myAL.Count+1, "anystring" );

    }

    catch ( Exception myException ) {

    Console.WriteLine("Exception: " + myException.ToString());

    } }


    Ví dụ : ArrayList_Add.cs

    public static void Main() {

    // Creates and initializes a new ArrayList.

    ArrayList myAL = new ArrayList();

    myAL.Add( "The" );

    myAL.Add( "quick" );

    myAL.Add( "brown" );

    myAL.Add( "fox" );


    // Creates and initializes a new Queue.

    Queue myQueue = new Queue();

    myQueue.Enqueue( "jumped" );

    myQueue.Enqueue( "over" );

    myQueue.Enqueue( "the" );

    myQueue.Enqueue( "lazy" );

    myQueue.Enqueue( "dog" );

    // Displays the ArrayList and the Queue.

    Console.WriteLine( "The ArrayList initially contains the following:" );

    PrintValues( myAL, '\t' );

    Console.WriteLine( "The Queue initially contains the following:" );

    PrintValues( myQueue, '\t' );


    //Copies the Queue elements to the end of the ArrayList.

    myAL.AddRange( myQueue );

    // Displays the ArrayList.

    Console.WriteLine( "The ArrayList now contains the following:" );

    PrintValues( myAL, '\t' );

    }


    Ví dụ : ArrayList_BSearch.cs

    public static void Main() {

    // Creates and initializes a new ArrayList.

    ArrayList myAL = new ArrayList();

    for ( int i = 0; i <= 4; i++ ) myAL.Add( i*2 );

    // Displays the ArrayList.

    Console.WriteLine( "The Int32 ArrayList contains the following:" );

    PrintValues( myAL );


    // Locates a specific object that does not exist in the ArrayList.

    Object myObjectOdd = 3;

    FindMyObject( myAL, myObjectOdd );

    // Locates an object that exists in the ArrayList.

    Object myObjectEven = 6;

    FindMyObject( myAL, myObjectEven );

    }


    public static void FindMyObject( ArrayList myList, Object myObject )

    {

    int myIndex=myList.BinarySearch( myObject );

    if ( myIndex < 0 )

    Console.WriteLine( "The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex );

    else

    Console.WriteLine( "The object to search for ({0}) is at index {1}.", myObject, myIndex );

    }


    The Int32 ArrayList contains the following:

    0 2 4 6 8

    The object to search for (3) is not found. The next larger object is at index 2.

    The object to search for (6) is at index 3.


    Ví dụ ArrayList_Prop.cs ArrayList_Remove.cs ArrayList_Sort.cs


    Kế họach tuần sau :

    Kiểm tra lần 1

    - Nhóm 1 : 7g15

    - Nhóm 2 : 9h

    Lưu ý :

    • Vẫn mượn projector

    • Mang theo ds lớp, thẻ SV

      Hình thức

    • Trả lời câu hỏi (khỏang 10-15 câu/60’)

    • Viết chương trình (30’)


  • Login