Cách truy xuất các phần tử mảng

Một phần của tài liệu Đề cương bài giảng cơ sở kỹ thuật lập trình ngôn ngữ c (Trang 89 - 97)

để truy nhập vào các phần tử của mảng chúng ta cũng truy nhập thông qua tên và chỉ số tương ứng. Cụ thể Tên_Mảng[chỉ số hàng, chỉ số cột]

chỉ số hàng nằm trong ựoạn [0, Tên_Mảng.GetLength(0)-1] chỉ số cột nằm trong ựoạn [0, Tên_Mảng.GetLength(1)-1] 16.1.3. Các thao tác trên mảng

o Nhập in mảng theo từng hàng và từng cột for (int i=1; i<ạLength; i++)

{

For (int j=1; j<ạLength; j++)

ConsolẹWrite(Ộ{0} Ợ,a[i,j]); ConsolẹWriteln;

}

o Tắnh tổng: Tắnh tổng các phần tử của mảng, tổng các phần tử chẵn, lẻ, tổng các phần tử chia hết không chia hết cho một số x(x nhập vào từ bàn phắm), tổng các phần tử là số nguyên, số chắnh phương... o Tìm giá trị, vị tắ max min của từng hàng hoặc từng cột

- Sử dụng mảng một chiều ựể lưu kết quả Max, min, vị trắ max, vị trắ min.

- Duyệt từ hàng ựầu tiên ựến hàng cuối cùng - Coi mỗi hàng ựấy chắnh là mảng một chiềụ for (int i=0; i<ạLength-1; i++)

{

Max[i]:=a[i,1]; vt[i]:=1; for (int j=1; i<ạLength; i++) If (max[i] <a[i,j]) { Max[i]:=a[i,j]; Vt[i]:=j; } } // In kết quả

for (int i=0; i<ạLength-1; i++)

ConsolẹWriteLine( ỘMax o hang thu {0} la: {1} tai vi tri: {2}Ộ, i, max[i], vt[i]);

o In ra giá trị và vị trắ của tất cả các phần tử có tắnh chất: vừa là phần tử lớn nhất(nhỏ nhất) của hàng vừa là tử nhỏ nhất(lớn nhất) của cột. - Tìm ra vị trắ phần tử lớn của các hàng

- Tìm ra vị trắ tử nhỏ nhất của các cột

- Duyệt từ hàng ựầu ựến hàng cuối kiểm tra vị trắ hàng của cột lớn nhất hàng thứ i có bằng i => phần tử a[i, vth[i]] là phần tử có ựặc ựiểm trên.

{Tìm ra các vị trắ lớn nhất trên mỗi hàng} for (int i=0; i<ạLength; i++)

{

maxh[i]:=a[i,0]; vth[i]:=0; for( int j=1; j<ạLength; j++) If (maxh[i] <a[i,j]) then {

Maxh[i]:=a[i,j]; Vth[i]:=j; }

}

o Sắp xếp ma trận theo thứ tự tăng dần trên tùng hàng, từng cột. For(int i=0; i<ạLength; i++)

{

For ( int j=0; j<ạLength-1; j++) For ( k=j+1; k<ạLength; k++) {

If (a[i,j]>a[i,k])

{Tg:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=tg;} }

}

o Sắp xếp các phần tử trên ựường chéo chắnh theo thứ tự tăng hoặc giảm dần.

For (int i=0; i<ạlength; i++) For (int j=i+1; j<ạLength; j++)

If (a[i,i]>a[j,j]) (adsbygoogle = window.adsbygoogle || []).push({});

{ Tg:=a[i,i]; a[i,i]:=a[j,j]; a[j,j]:=tg; }

o Tắnh tổng các phần tử trên ựường cheo chắnh. o cộng hai ma trận, nhân hai ma trận

16.1.4. Vắ dụ áp dụng

Vắ dụ 1: Cho ma tran a gồm m hàng, n cột có các phần tử là các số nguyên ựược nhập vào từ bàn phắm. Sau ựó thực hiện các yêu cầu sau:

a) Tìm giá trị lớn nhất trong số các phần tử của mảng b) Tắnh tổng các phần tử là số nguyên tố của mảng

c) Nếu a là ma trận vuông hãy tắnh tắch các phần trên ựường chéo chắnh của mảng. using System; class VD { static int[,] a; static int m, n; static void Nhap() {

int i, j;

ConsolẹWrite("Nhap so hang m="); m = int.Parse(ConsolẹReadLine()); ConsolẹWrite("Nhap so cot n="); n = int.Parse(ConsolẹReadLine()); a = new int[m, n];

ConsolẹWriteLine("Nhap gia tri cho cac phan tu cua ma tran"); for (i = 0; i < m; ++i) for (j = 0; j < n; ++j) { ConsolẹWrite("a[{0},{1}]=", i, j); a[i, j] = int.Parse(ConsolẹReadLine()); } }

static void Hien() {

int i, j;

{ for (j = 0; j < n; ++j) ConsolẹWrite("{0}\t", a[i, j]); ConsolẹWriteLine(); } }

static int Max() { int i, j, mx = a[0, 0]; for (i = 0; i < m; ++i) for (j = 0; j < n; ++j) if (mx < a[i, j]) mx = a[i, j]; return mx; }

static bool Nt(int x) { bool ok = true; int i; for (i = 2; i < x - 1; ++i) if (x % i == 0) { ok = false; break; } return ok && x != 1; }

static void NtMang() {

int i, j;

ConsolẹWriteLine("cac phan tu la so nguyen to cua mang"); for (i = 0; i < m; ++i) for (j = 0; j < n; ++j) if (Nt(a[i, j])) ConsolẹWrite("{0}\t", a[i, j]); ConsolẹWriteLine(); }

static void Vet() {

if (m == n) {

for (i = 0; i < m; ++i) t = t * a[i, i];

ConsolẹWriteLine("Tich cac phan tu tren duong cheo chinh la {0}", t); }

else ConsolẹWriteLine("Day khong phan la ma tran vuong"); }

static void Main() { ConsoleKeyInfo kt; do { ConsolẹClear(); ConsolẹWriteLine("\t\t\tMain Menu");

ConsolẹWriteLine("\t1. Nhap thong tin cho mang"); ConsolẹWriteLine("\t2. Hien mang");

ConsolẹWriteLine("\t3. Gia tri lon nhat cua mang");

ConsolẹWriteLine("\t4. Cac phan tu la so nguyen to cua mang"); ConsolẹWriteLine("\t5. Tich cac phan tu tren duong cheo chinh"); ConsolẹWriteLine("\t6. Thoat khoi chuong trinh");

ConsolẹWrite(" Ban hay chon mot cong viec tu 1->6:"); kt = ConsolẹReadKey(); ConsolẹWriteLine(); switch (kt.KeyChar) { case '1': Nhap();

ConsolẹWriteLine("Ban hay nhan phim bat ky de tiep tuc..."); ConsolẹReadKey();

break; case '2':

ConsolẹWriteLine("Cac phan tu cua mang la"); Hien(); (adsbygoogle = window.adsbygoogle || []).push({});

ConsolẹWriteLine("Ban hay nhan phim bat ky de tiep tuc..."); ConsolẹReadKey();

break; case '3':

ConsolẹWriteLine(" Max cua mang {0}", Max());

ConsolẹWriteLine("Ban hay nhan phim bat ky de tiep tuc..."); ConsolẹReadKey();

break; case '4': NtMang();

ConsolẹWriteLine("Ban hay nhan phim bat ky de tiep tuc..."); ConsolẹReadKey();

break; case '5': Vet();

ConsolẹWriteLine("Ban hay nhan phim bat ky de tiep tuc..."); ConsolẹReadKey(); break; case '6': Environment.Exit(0); break; } } while (true); } }

Vắ dụ 2: Cho hai ma trận vuông a,b cấp n có các phần tử là các số nguyên ựược nhập vào từ bàn phắm. Sau ựó thực hiện các yêu cầu sau:

a) Tắnh tổng hai ma trận a,b kết qua cho vào ma trận c

b) Tìm giá trị lớn nhất của các hàng trong ma trận c kết quả cho vào ma trận một chiều x

c) Sắp xếp ma trận c tăng dần theo chiều xoáy trôn ốc using System;

class VD {

static int n;

static void Nhap(char ten,out int [,]x) {

int i, j; x = new int[n, n];

ConsolẹWriteLine("Nhap gia tri cho cac phan tu cua ma tran {0}",ten); for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) { ConsolẹWrite("{0}[{1},{2}]=",ten, i, j); x[i, j] =int.Parse(ConsolẹReadLine()); } }

static void Hien(int [,]x) { int i, j; for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) ConsolẹWrite("{0}\t", x[i, j]); ConsolẹWriteLine(); } }

static void Hien(int[] x) { int i; for (i = 0; i < n; ++i) ConsolẹWrite("{0}\t", x[i]); ConsolẹWriteLine(); }

static void Tong(int[,] x, int[,] y, out int[,] kq) {

int i, j;

kq = new int[n, n]; for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) kq[i, j] = x[i, j] + y[i, j];

}

static void MaxHang(int[,] x, out int[] kq) {

int i, j,mx,d=0; kq = new int[n]; for (i = 0; i < n; ++i) { mx = x[i, 0]; for (j = 1; j < n; ++j) if (mx < x[i, j]) mx = x[i, j]; kq[d++] = mx; } }

static void TronOc(ref int[,] x) {

int i, j, d=0,k=0;

int[] tmp = new int[n * n]; for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) tmp[d++] = x[i, j]; ArraỵSort(tmp); d = 0; do { i = k; for (j = k; j < n - 1 - k; ++j) x[i, j] = tmp[d++]; j = n - 1 - k; for (i = k; i < n - 1 - k; ++i) x[i, j] = tmp[d++]; i = n - 1 - k; for (j = n - 1 - k; j > k; --j) x[i, j] = tmp[d++]; j = k; for (i = n - 1 - k; i > k; --i) x[i, j] = tmp[d++]; k++; if (d == n * n - 1) x[n / 2 , n / 2 ] = tmp[d++]; } while (d < n * n);

}

static void Main() { (adsbygoogle = window.adsbygoogle || []).push({});

int [,]a=null; int [,]b=null; int [,]c=null; int []x=null;

ConsolẹWrite("Nhap cap cau ma tran n="); n = int.Parse(ConsolẹReadLine());

Nhap('Á, out a); Nhap('B', out b); Tong(a, b, out c);

ConsolẹWriteLine("Tong hai mang"); Hien(c);

MaxHang(c, out x);

ConsolẹWriteLine("Gia tri lon nhat cua cac hang"); Hien(x);

TronOc(ref c);

ConsolẹWriteLine("Mang c sau khi sap xep"); Hien(c);

ConsolẹReadKey(); }

}

Một phần của tài liệu Đề cương bài giảng cơ sở kỹ thuật lập trình ngôn ngữ c (Trang 89 - 97)