của biến để tránh sai sót khi thực hiện các phép tính toán về sau.. Nên kết hợp khai báo và khởi tạo![r]
Trang 1BUỔI 4 :
Một số cấu trúc dữ liệu khác
Trang 2Khai báo và cấp phát vùng nhớ các biến
Trang 3Lưu Ý
Trong Pascal,C hay C++ : việc khai báo đồng nghĩa với việc cấp phát vùng nhớ cho biến để lưu trữ dữ liệu
Ví dụ
Var i : integer ; r : Real;
i
r
Trang 4Lưu Ý
ra khi khai báo thì tự động gán giá trị ngầm định cho từng kiểu dữ
Trang 5Lưu Ý
Trong C# thì khai báo và cấp phát
vùng nhớ là 2 việc khác nhau !!!
Ví dụ (trong C#)
int i ; // chỉ khai báo biến
float f = 1.34f; // khai báo và cấp phát //vùng nhớ
Trang 6f h
i k g
Trang 7}
Trang 8}
Trang 9Nhận xét
Thường khai báo trước kiểu dữ liệu của biến để tránh sai sót khi thực
hiện các phép tính toán về sau
Nên kết hợp khai báo và khởi tạo
biến cùng lúc
Trang 10}
Trang 11Sử DụngMảng
Trong C#
Trang 12Ưu điểm của mảng
Trang 13Cú 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)
Trang 14Khai báo và khởi tạo mảng
Cú pháp khai báo và 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à phải khởi tạo trước khi
sử dụng
string[] list;
Trang 15Ví Dụ
public class Class1
{ //tạm thời chưa khaí báo biến ỡ đây!!
static public void Main ()
{
float [ ] f_arr= new float[10];
int [ ] i_arr = new int[ ]{2,4,6,8};
string[ ] list;
list = new string[3];
for (int i=0;i<x_arr.Length;i++) x_arr[i]=i*4;
Trang 16Xử lý các phần tử mảng
Thường sử dụng vòng lặp để xứ lý mảng
do while while … for
và
foreach
Trang 17int[ ] num = new int[10]; //khai báo+cấp phát
for(int i=0;i<10;i++) num[i]=i; //gán dữ liệu
for(int i=0;i<10;i++)
Console.Write(num[i]+" "); // in ra từng phần tử
Trang 18}
Trang 19+)Console.WriteLine(fname[i]);
Trang 21Tam Vu Hung Dung
Trang 22Tam Vu Hung Dung
Trang 23for(int i=0;i<fname.Length;i++) fname[i]= name[i];
for(int i=0;i<fname.Length;i++) fname[i]="X"+fname[i];
for(int i=0;i<name.Length;i++)Console.WriteLine(name[i]); for(int i=0;i<fname.Length;i++)Console.WriteLine(fname[i]); }
Trang 25Tam Vu Hung Dung
Trang 26Khuyết điểm của for
Nếu biến khởi tạo không đúng
Nếu biểu thức điều kiện không đúng
Nếu bước nhảy không đúng
Mảng có thuộc tính cho phép lấy ra
số lượng phần tử
Trang 27float [] num = new float[] {1,2,3,4,5,6};
string[] name= new string[]{"Tam","Vu","Hung","Dung"};
foreach (float f in num ) Console.WriteLine(f);
foreach (string s in name ) Console.WriteLine(s);
Trang 28float [ , ] this year; //2 chiều
int [ , , ] vacumm; // 3 chiều
Trang 29int[,] month = new int[2,4];
float [, ,] room = new float [4,5,10];
string[,] name;
}
Trang 30month = new int [r,c];
room = new float [r,r,r];
for (int i=0;i<r;i++)
for (int j=0;j<c;j++) month[i,j]=2*i+j;
Trang 31Mảng răng cưa (Jagged Array)
Trang 32Ví dụ
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ử
Trang 33Khai báo (Ví dụ)
int [ ] [ ] list ; //khai báo list = new int[ 2][ ] ;
list[0] = new int [2] ;
list [1] = new int [5] ;
Trang 34Mộ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