Thứ Bảy, 16 tháng 7, 2016

Step 9 . Một số ví dụ về mảng 2 chiều

Bài 14:  Nhập số liệu cho ma trận A  kích thước  mxn  có các phần tử  là các số nguyên. Tính tổng các phần tử theo đường chéo chính và đường chéo phụ của ma trận.
 #include<stdio.h>
void nhap(int &n,int a[][10]){
printf("nhap kich thuoc ma tran");
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("\na[%d,%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
}
void in(int n, int a[][10]){
printf("\nMa tran vua nhap la:\n");
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d\t",a[i][j]);
}
printf("\n\n");
}
}
void tongchinh(int n,  int a[][10]){
int s=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j){
s=s+a[i][j];
}
}
}
printf("\ntong duong cheo chinh la:%d",s);
}
void tongphu(int n, int a[][10]){
int s=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i+j==n-1){
s=s+a[i][j];
}
}
}
printf("\ntong duong cheo phu la:%d",s);
}
main()
{
int n, a[10][10];
nhap(n,a);
in(n,a);
tongchinh(n,a);
tongphu(n,a);
}


Bài 15: Nhập số liệu cho ma trận A  kích thước  mxn  có các phần tử  là các số nguyên. Tìm hàng trong ma trận có tổng phần tử là nhỏ nhất và loại bỏ hàng đó ra khỏi ma trận. Nếu có nhiều hàng tổng bằng nhau thì chọn hàng đầu tiên từ trên xuống.
 #include<stdio.h>
void nhap(int &n,int &m,int a[][10]){
printf("nhap so hang:");
scanf("%d",&n);
printf("nhap so cot");
scanf("%d",&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("\na[%d,%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
}
void in(int n, int m, int a[][10]){
printf("\nMa tran vua nhap la:\n");
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d\t",a[i][j]);
}
printf("\n\n");
}
}
void cut(int n,int m, int a[][10]){
int min,k=0,s=0,i,j;
for(i=0;i<1;i++){
for(j=0;j<m;j++){
min+=a[i][j];
}
}
while(i<n){
for(j=0;j<m;j++){
s+=a[i][j];
}
if(s<min){
min=s;
k=i;
}
i++;
}
printf("\n ma tran sau khi xoa hang la: \n");
for(int i=0;i<n;i++){
if(i!=k){
for(int j=0;j<m;j++){
printf("%d\t",a[i][j]);
}
}
printf("\n\n");
}

}
main()
{
int n,m,a[10][10];
nhap(n,m,a);
in(n,m,a);
cut(n,m,a);
}


Bài 16: . Nhập số liệu cho ma trận A  kích thước  mxn  có các phần tử  là các số nguyên. Tìm cột trong ma trận có tổng phần tử là lớn nhất và loại bỏ cột đó ra khỏi ma trận.  Nếu có nhiều cột tổng bằng nhau thì chọn cột đầu tiên từ trái sang phải.
 #include<stdio.h>
void nhap(int &n,int &m,int a[][10]){
printf("nhap so hang:");
scanf("%d",&n);
printf("nhap so cot");
scanf("%d",&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("\na[%d,%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
}
void in(int n, int m, int a[][10]){
printf("\nMa tran vua nhap la:\n");
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d\t",a[i][j]);
}
printf("\n\n");
}
}
void cut(int n,int m, int a[][10]){
int min,k=0,s=0,i,j;
for(i=0;i<n;i++){
for(j=0;j<1;j++){
min=min+a[i][j];
}
}
while(j<m){
for(i=0;i<n;i++){
s+=a[i][j];
}
if(s<min){
min=s;
k=j;
}
j++;
}
printf("\nma tran sau khi xoa la: \n");
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(j!=k){
printf("%d\t",a[i][j]);
}
}
printf("\n\n");
}
}
main()
{
int n,m,a[10][10];
nhap(n,m,a);
in(n,m,a);
cut(n,m,a);
}

Bài 17 :
Viết chương trình nhập số liệu cho ma trận các số nguyên  A  cấp   mxn   trong đó   m, n là các số tự nhiên. Sau đó tìm ma trận chuyển vị B = (bij)  cấp  nxm của A, bij = aji
#include<stdio.h>
void nhap(int x,int y,int z[][10]){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
printf("\nz[%d,%d]=",i,j);
scanf("%d",&z[i][j]);
}
}
}
void in(int x, int y, int z[][10]){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
printf("%d\t",z[i][j]);
}
printf("\n\n");
}
}
void chuyenvi(int x, int y, int z[][10], int k[10][10]){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
k[j][i]=z[i][j];
}
}
}
main()
{
int n,m,a[10][10],b[10][10]={0};
printf("nhap so hang ma tran a:");
scanf("%d",&n);
printf("\nnhap so cot ma tran a");
scanf("%d",&m);
nhap(n,m,a);
printf("\nma tran a la:\n");
in(n,m,a);
chuyenvi(n,m,a,b);
printf("\nma tran sau khi chuyen vi:\n");
in(m,n,b);
}

BÀI 18: Nhập số liệu cho ma trận A có kích thước  mxn. Sau đó tìm ma trận chuyển vị   B có kích thước  nxm thỏa mãn bij = aji. Tính ma trận tích C có kích thước  mxm của 2 ma trận A và B.

 
#include<stdio.h>
void nhap(int x,int y,int z[][10]){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
printf("\nz[%d,%d]=",i,j);
scanf("%d",&z[i][j]);
}
}
}
void in(int x, int y, int z[][10]){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
printf("%d\t",z[i][j]);
}
printf("\n\n");
}
}
void chuyenvi(int x, int y, int z[][10], int k[10][10]){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
k[j][i]=z[i][j];
}
}
}
void tich(int x, int y , int z[][10], int k[][10]){
int c[10][10]={0};
for(int i=0;i<x;i++){
for(int j=0;j<x;j++){
for(int l=0;l<y;l++){
c[i][j]+=z[i][l]*k[l][j];
}
}
}
printf("\nma tran tich C la:\n");
for(int i=0;i<x;i++){
for(int j=0;j<x;j++){
printf("%d\t",c[i][j]);
}
printf("\n\n");
}
}

main()
{
int n,m,a[10][10],b[10][10];
printf("nhap so hang ma tran a:");
scanf("%d",&n);
printf("\nnhap so cot ma tran a");
scanf("%d",&m);
nhap(n,m,a);
printf("\nma tran a la:\n");
in(n,m,a);
chuyenvi(n,m,a,b);
printf("\nma tran sau khi chuyen vi:\n");
in(m,n,b);
tich(n,m,a,b);
}


Bài 19: Một ma trận các số thực được gọi là ma trận tam giác nếu toàn bộ các phần tử phía dưới (hoặc phía trên) đường chéo chính đều bằng 0. Nhập một ma trận, hãy kiểm tra xem đó có phải là ma trận tam giác hay không.
 #include<stdio.h>
void nhap(int &n,int a[][10]){
printf("nhap kich thuoc ma tran");
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("\na[%d,%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
}
void in(int n, int a[][10]){
printf("\nMa tran vua nhap la:\n");
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d\t",a[i][j]);
}
printf("\n\n");
}
}
int kt(int n, int a[][10]){
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(a[i][j]!=0)
return 0;
return 1;
}
}
}
int kt2(int n, int a[][10]){
for(int i=0;i<n;i++){
for(int j=n-i;j<n;j++){
if(a[i][j]!=0)
return 0;
return 1;
}
}
}
main()
{
int n, m, a[10][10];
nhap(n,a);
in(n,a);
if(kt(n,a)||(kt2(n,a))){
printf("\nma tran tam giac");
}
else
{
printf("\nkhong phai ma tran tam giac");
}
}

Bài 20: Nhập ma trận A là ma trận vuông cấp n. Thực hiện xoay ma trận một góc 90 độ ngược chiều kim đồng hồ.

#include<stdio.h>
void nhap(int &n,int a[][10]){
printf("nhap kich thuoc ma tran");
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("\na[%d,%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
}
void in(int n, int a[][10]){
printf("\nMa tran vua nhap la:\n");
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d\t",a[i][j]);
}
printf("\n\n");
}
}
void xoay90(int n, int a[][10],int b[][10]){

for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
b[i][j]=a[j][n-i-1];//xoay nguoc chieu kim dong ho
}
}
printf("ma tran sau khi xoay 90\n");
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d\t",b[i][j]);
}
printf("\n\n");
}
}
main()
{
int n, m, a[10][10], b[10][10];
nhap(n,a);
in(n,a);
xoay90(n,a,b);
}
Bài 21Nhập số nguyên dương n. In ra ma trận xoáy ốc vuông cấp n.

 #include<stdio.h>
void xoayoc(int n,int m, int a[][10]){
int hang=n-1, cot=m-1, d=0, dem=1; 
while(dem<m*n){
for(int i=d;i<=cot;i++)
{
a[d][i]=dem;
dem++;
}
if(dem==m*n) break;
for(int i=d+1;i<=hang;i++){
a[i][cot]=dem;
dem++;
}
if(dem==m*n) break;
for(int i=cot-1;i>=d;i--){
a[hang][i]=dem;
dem++;
}
if(dem==m*n) break;
for(int i=hang-1;i>d;i--){
a[i][d]=dem;
dem++;
}
if(dem==m*n) break;
d++;hang--,cot--;
}
}
void in(int n, int m,int a[][10]){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d\t",a[i][j]);
}
printf("\n\n");
}
}
main()
{
int n,m, a[10][10];
printf("nhap n: ");
scanf("%d%d",&n,&m);
xoayoc(n,m,a);
in(n,m,a);
}

Không có nhận xét nào:

Đăng nhận xét