MẢNG 2 CHIỀU lập trình C/C++

Bài 1: Viết chƣơng trình nhập, xuất một mảng số nguyên hai chiều có m dòng và n cột. Xác định phần tử lớn nhất và nhỏ nhất trong mảng.

#include “stdafx.h”
#include “stdio.h”
#define max_dong 100
#define max_cot 100
void main()
{
int m,n;
int a[max_dong][max_cot];
int i,j;
// nhap cac phan tu cho mang 2 chieu co m dong va n cot
printf(" Nhap so dong : m = ");
scanf("%d",&m);
printf("Nhap so cot : n = ");
scanf("%d",&n);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
printf("\n A[%d,%d] = ",i+1,j+1);
scanf("%d",&a[i][j]);
}
int max = a[0][0], min=a[0][0], x_max=0, y_max=0, x_min=0, y_min=0;
// tim phan tu lon nhat va nho nhat trong mang
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
if (max <= a[i][j])
{
max = a[i][j];
x_max = i;
y_max = j;
}
if (min >= a[i][j])
{
min = a[i][j];
x_min = i;
y_min = j;
}
}
// xuat cac phan tu cua mang 2 chieu
printf("\n Cac phan tu cua mang A:\n");
for (i=0;i<m;i++)
{
for (j=0; j<n; j++)
printf(" %d ",a[i][j]);
printf("\n");
}
// xuat vi tri va gia tri cac phan tu lon nhat, nho nhat
printf("\n Phan tu lon nhat cua mang la %d tai vi tri (%d,%d)",
max,x_max+1,y_max+1);
printf("\n Phan tu nho nhat cua mang la %d tai vi tri (%d,%d)",
min,x_min+1,y_min+1);
}

Bài 2: Viết chƣơng trình sắp xếp ma trận các số thực tăng dần từ trên xuống dƣới và từ trái sang phải bằng hai phƣơng pháp d ng và không d ng mảng phụ.

Cách 1 : Không sử dụng mảng phụ.

#include “stdafx.h”
#include “stdio.h”
#define max_dong 100
#define max_cot 100
void main()
{
int m,n;
int a[max_dong][max_cot];
int i,j;
// nhap cac phan tu cho mang 2 chieu co m dong va n cot
printf(" Nhap so dong : m = ");
scanf("%d",&m);
printf("Nhap so cot : n = ");
scanf("%d",&n);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
printf("\n A[%d,%d] = ",i+1,j+1);
scanf("%d",&a[i][j]);
}
for (int k=0; k<=m*n-2; k++)
for (int l=k+1; l<=m*n-1; l++)
if (a[k/n][a%n] > a[l/n][l%n])
{
int temp = a[k/n][k%n];
a[k/n][k%n] = a[l/n][l%n];
a[l/n][l%n] = temp;
}
// xuat cac phan tu cua mang 2 chieu
printf("\n Cac phan tu cua mang A:\n");
for (i=0;i<m;i++)
{
for (j=0; j<n; j++)
printf(" %d ",a[i][j]);
printf("\n");
}
}

Cách 2 : Sử dụng mảng phụ

#include “stdafx.h”
#include “stdio.h”
#define max_dong 50
#define max_cot 50
void main()
{
int m,n;
int a[max_dong][max_cot];
int i,j;
// nhap cac phan tu cho mang 2 chieu co m dong va n cot
printf(" Nhap so dong : m = ");
scanf("%d",&m);
printf("Nhap so cot : n = ");
scanf("%d",&n);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
printf("\n A[%d,%d] = ",i+1,j+1);
scanf("%d",&a[i][j]);
}
//Do ma tran ra mang mot chieu b
int b[max_dong*max_cot];
int k = 0;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
b[k] = a[i][j];
k = k+1;
}
// Sap xep mang mot chieu b
for (i=0; i<k-1; i++)
for (j=i+1; j<k; j++)
if (b[i] > b[j])
{
int tmp = b[i];
b[i] = b[j];
b[j] = tmp;
}
// Do mang mot chieu b tro lai mang hai chieu a
k = 0;
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
a[i][j] = b[k];
k = k+1;
}
// xuat cac phan tu cua mang 2 chieu
printf("\n Cac phan tu cua mang A:\n");
for (i=0;i<m;i++)
{
for (j=0; j<n; j++)
printf(" %d ",a[i][j]);
printf("\n");
}
}

Bài 3: Cho một mảng số nguyên A có m dòng và n cột. Một phần tử đƣợc gọi là điểm yên ngựa nếu phần tử đó là phần tử nhỏ nhất trong dòng và lớn nhất trong cột. Viết chƣơng trình xác định tất cả các đểm yên ngựa có thể có.

#include "stdafx.h"
#include "stdio.h"
#define max_dong 50
#define max_cot 50
void main()
{
int m,n;
int a[max_dong][max_cot];
int i,j;
// nhap cac phan tu cho mang 2 chieu co m dong va n cot
printf(" Nhap so dong : m = ");
scanf("%d",&m);
printf("Nhap so cot : n = ");
scanf("%d",&n);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
printf("\n A[%d,%d] = ",i+1,j+1);
scanf("%d",&a[i][j]);
}
// tim kiem cac phan tu yen ngua
for (i= 0; i<m; i++)
for (j=0; j<n; j++)
{
bool IsMinRow = true, IsMaxCol = true;
// kiem tra a[i][j] co phai la phan tu
for (int k = 0; k<n; k++)
if (a[i][k] < a[i][j])
{
IsMinRow = false;
break;
}
// kiem tra a[i][j] co phai la phan tu
for (int l=0; i<m; l++)
if (a[l][j] > a[i][j])
{
IsMaxCol = false;
break;
}
// neu a[i][j] thao dieu kien --> a la
if (IsMaxCol && IsMinRow)
printf("\n A[%d,%d] = %d la phan
ngua.",i+1,j+1,a[i][j]);
}
}
#define max_dong 50
#define max_cot 50
void main()
{
int m,n;
int a[max_dong][max_cot];
int i,j;
// nhap cac phan tu cho mang 2 chieu co m dong va n cot
printf(" Nhap so dong : m = ");
scanf("%d",&m);
printf("Nhap so cot : n = ");
scanf("%d",&n);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
printf("\n A[%d,%d] = ",i+1,j+1);
scanf("%d",&a[i][j]);
}
// tim kiem cac phan tu yen ngua
for (i= 0; i<m; i++)
for (j=0; j<n; j++)
{
bool IsMinRow = true, IsMaxCol = true;
// kiem tra a[i][j] co phai la phan tu
for (int k = 0; k<n; k++)
if (a[i][k] < a[i][j])
{
IsMinRow = false;
break;
}
// kiem tra a[i][j] co phai la phan tu
for (int l=0; i<m; l++)
if (a[l][j] > a[i][j])
{
IsMaxCol = false;
break;
}
// neu a[i][j] thao dieu kien --> a la
if (IsMaxCol && IsMinRow)
printf("\n A[%d,%d] = %d la phan tu yen ngua.",i+1,j+1,a[i][j]);
}
}

Bài 4: Cho ma trận các số thực A(m x n). Hãy xây dựng ma trận B(m x n) từ ma trận A sao cho B[i [j] = số lƣợng phần tử dƣơng xung quanh A[i [j] trong ma trận A ( B[i [j] tối đa là 8 và nhỏ nhất là 0).

#include “stdafx.h”
#include “stdio.h”
#define max_dong 50
#define max_cot 50
void main()
{
int m,n;
float a[max_dong][max_cot];
int i,j;
// nhap cac phan tu cho mang 2 chieu co m dong va n cot
printf(" Nhap so dong : m = ");
scanf("%d",&m);
printf("Nhap so cot : n = ");
scanf("%d",&n);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
printf("\n A[%d,%d] = ",i+1,j+1);
scanf("%f",&a[i][j]);
}
// phat sinh mang b
float b[max_dong][max_cot];
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
int count = 0;
for (int k=-1; k<=1; k++)
for (int l=-1; l<=1; l++)
if ((i+k>=0)&&(i+k<m)&&(j+l>=0)
&&(j+l<n)&&(a[i+k][j+l] > 0))
count = count + 1;
b[i][j] = count;
}
// xuat cac phan tu cua mang 2 chieu
printf("\n Cac phan tu cua mang B:\n");
for (i=0;i<m;i++)
{
for (j=0; j<n; j++)
printf(" %f ",b[i][j]);
printf("\n");
}
}

Bài 5: Hãy sắp xếp ma trận sao cho dòng có tổng nhỏ hơn nằm ở trên và dòng có tổng dòng lớn hơn nằm ở dƣới.

#include "stdafx.h"
#include "stdio.h"
#define max_dong 50
#define max_cot 50
void main()
{
int m,n;
int a[max_dong][max_cot];
int i,j;
// nhap cac phan tu cho mang 2 chieu co m dong va n cot
printf(" Nhap so dong : m = ");
scanf("%d",&m);
printf("Nhap so cot : n = ");
scanf("%d",&n);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
printf("\n A[%d,%d] = ",i+1,j+1);
scanf("%d",&a[i][j]);
}
// su dung mang B luu gia tri tong cac dong cua matrix A
int b[max_dong];
int k = 0;
// tinh tong cac dong va luu vao B
for (i=0; i<m; i++)
{
int tong = 0;
for (j=0; j<n ;j++)
tong = tong + a[i][j];
b[k++] = tong;
}
// sap xep lai mang A theo thong tin tong dong trong B
for (i=0; i<k-1; i++)
for (j=i+1; j<k; j++)
{
if (b[i] > b[j])
{
// hoan vi trong B
int tmp;
tmp = b[i];
b[i] = b[j];
b[j] = tmp;
// hoan vi dong trong A
for (int k = 0; k<n; k++)
{
tmp = a[i][k];
a[i][k] = a[j][k];
a[j][k] = tmp;
}
}
}
// xuat cac phan tu cua mang 2 chieu
printf("\n Cac phan tu cua mang A sau khi thay doi :\n");
for (i=0;i<m;i++)
{
for (j=0; j<n; j++)
printf(" %d ",a[i][j]);
printf("\n");
}
}

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *