Giúp em với,C+ bài tập về mảng 2 chiều

buitrungthanh

Legend of Zelda
Lão Làng GVN
Tham gia ngày
27/4/04
Bài viết
1,083
Reaction score
1
Em học lập trình nhưng bị mất căn bản từ phần mảng 1 chiều,giờ ông thầy cho bài mảng 2 chiều thì bí lù,ai có thể giảng lại giùm em tí đc ko
Em đang bí bài này,mong các anh chị giúp giùm em với

Viết chương trình tạo ra ma trận vuông n x n, với n đc nhập vào (3<=n<=10) và giá trị các phần tử trong mảng là ngẫu nhiên(từ 1 đến 100).In mảng số vừa có ra màn hình.Sau đó:
a-in ra phần tử lớn nhất,phần tử bé nhất,tổng các phần tử của ma trận
b-in ra các phần tử trên đường chéo chính của ma trận
c-in ra các phần tử chẵn,các phần tử lẻ có trong ma trận
d-in ra các số có xuất hiện trong dãy đó
VD:ma trận có các số 2,7,5,2,8,2,2,9,5
Chương trình sẽ in ra 2,7,5,8,9
 
ko ai chiu giúp em cái à,hic hic........
 
Mất căn bản từ mảng 1 chiều thì mình nghĩ bạn nên coi lại phần mảng 1 chiều, khoan hãy đụng vào phần ma trận đã, vì không xử lý được trên mảng 1 chiều thì không xử lý được trên ma trận đâu.
 
vậy anh có thể giải giúp em bài này đc ko,đang gấp lắm,hic hic T___T
 
Đây thực sự là một bài tập rất dễ. Em nên lấy sách ra đọc lại vì phần mảng 1 chiều là không khó hiểu. Nếu không hiểu được phần này thì sẽ không thể học được những phần sau. Cố lên em.
 
có thể cho em 1 vài tài liệu về lập trình trên mang đc ko,ông thầy trong trường giảng em chả hiểu,đã vậy còn phát cuốn đề cương gì đó chỉ toàn bài tập,chả biết moi đâu ra mà học nữa
 
Lập trình thì làm nhiều vào tự khắc sẽ hiểu, tài liệu mỗi cái nó nói mỗi khác, học vô hồi loạn óc đó, ở trên trường học sao cứ theo vậy đi, và chớ có cúp, mất phần này là phần sau ko hiểu chắc ^^.
 
chậc! nói chung bài của bận rất dễ nhưng tui làm trên word chua chạy thữ kô bít có đúng kô nếu sai chỗ nào ban chịu kó sừa lai còn cái tính đường chéo
chưa làm bao giờ về mỡ sách nghiên cứu lại đã pót sau mà đường chéo chính là đường chéo nào kô hiểu lắm


Mã:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
     int mang[10][10];
     int i,j,n,m;
     int max,min,tong,chan,le;
     char kitu;
     //tao bang 2 chieu nhap so hang so cot
     do{
     do{
     printf("moi ban nhap so hang:");
     scanf("%d",&n);
     printf("moi ban nhap so cot:");
     scanf("%d",&m);
     }while(n>10||n<3||m>10||m<3);

     printf("cac phan tu ngau nhien trong mang:\n");
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
		mang[i][j]=random(100)+1;
                
	}
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	printf("a[%d][%d]=%d\t",i,j,mang[i][j]);
        
     //tim phan tu lon nhat
     printf("\nphan tu lon nhat trong mang:");
     max=mang[0][0];
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
	       if(mang[i][j]>max)
               max=mang[i][j];
        }
	
     printf("a[%d][%d]=%d",i,j,max); 


      //tim phan tu nho nhat
     printf("\nphan tu nho nhat trong mang:");
     min=mang[0][0];
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
	       if(mang[i][j]<min)
               min=mang[i][j];
        }
	
     printf("a[%d][%d]=%d",i,j,min);

     //tong cac phan tu trong ma tran
     printf("\ntong cac phan tu trong matrix:");
     tong=0 ;
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
		tong+=mang[i][j];//tong=tong+mang[i][j]

	}
     printf("=%d",tong);

     //in ra cac phan tu tren duong cheo cua matrix


     //in cac phan tu chan
     printf("\ncac phan tu chan trong matrix:");
     
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
		if(mang[i][j]%2==0)
                
		printf("%3d",mang[i][j]);
        }

      //in cac phan tu le
     printf("\ncac phan tu le trong matrix:");
     
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
		if(mang[i][j]%2!=0)
                
		printf("%3d",mang[i][j]);
	}

     //in cac so trong ma tran

     
	
       printf("ban co muon lap lai truong trinh ko (y/n):");
        kitu=getche();
        if(kitu=='n'||kitu=='N')
        exit(0);	
	
       }while(kitu=='y'||kitu=='Y')

getch();
}
 
Mã:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void main()
{
     int mang[10][10];
     int i,j,n,m;
     int max,min,tong;
     char kitu;
     //tao bang 2 chieu nhap so hang so cot
     do{
    	 	do{
     			printf("moi ban nhap so hang:");
     			scanf("%d",&n);
     			printf("moi ban nhap so cot:");
     			scanf("%d",&m);
     		}
         while(n>10||n<3||m>10||m<3);

     		printf("cac phan tu ngau nhien trong mang:\n");
         for(i=0;i<n;i++)
				for(j=0;j<m;j++)
				{
					mang[i][j]=random(100)+1;

				}
     		for(i=0;i<n;i++)
				for(j=0;j<m;j++)
					printf("a[%d][%d]=%d\t",i,j,mang[i][j]);

     		//tim phan tu lon nhat
         printf("\nphan tu lon nhat trong mang:");
     		max=mang[0][0];
     		for(i=0;i<n;i++)
				for(j=0;j<m;j++)
			{
	      	 if(mang[i][j]>max)
            	   max=mang[i][j];
        	}

     		printf("Max = %d",max);


      	//tim phan tu nho nhat
     		printf("\nphan tu nho nhat trong mang:");
     		min=mang[0][0];
         for(i=0;i<n;i++)
				for(j=0;j<m;j++)
			{
	     		  if(mang[i][j]<min)
            	   min=mang[i][j];
         }

     		printf("Min = %d",min);

     		//tong cac phan tu trong ma tran
     		printf("\nTong cac phan tu trong matrix:");
     		tong=0 ;
     		for(i=0;i<n;i++)
				for(j=0;j<m;j++)
			{
				tong+=mang[i][j];//tong=tong+mang[i][j]

			}
     		printf("=%d",tong);

     		//in ra cac phan tu tren duong cheo cua matrix


     		//in cac phan tu chan
     		printf("\ncac phan tu chan trong matrix:");

     		for(i=0;i<n;i++)
				for(j=0;j<m;j++)
			{
				if(mang[i][j]%2==0)

				printf("%3d",mang[i][j]);
        	}

         //in cac phan tu le
     		printf("\ncac phan tu le trong matrix:");

     		for(i=0;i<n;i++)
				for(j=0;j<m;j++)
				{
					if(mang[i][j]%2!=0)

					printf("\n%3d",mang[i][j]);  //in cac so trong ma tran
				}

         printf("ban co muon lap lai chuong trinh ko (y/n):");
        	kitu = (char)getchar();
        	if(kitu=='n'||kitu=='N')
        	exit(0);

       	}while (kitu=='y'||kitu=='Y');

		getch();
}
Đã fix xong, nhưng tui thấy cái đoạn
printf("ban co muon lap lai chuong trinh ko (y/n):");
kitu = (char)getchar();
if(kitu=='n'||kitu=='N')
exit(0);
kô cần thiết lém, đang tìm cách sửa lại hoặc chỉnh lại cho đúng, vì nếu chạy đến đây dù nhập Y,y Hoặc N, n thì nó cũng out hết
 
Tui xin bổ sung phần xuất các ptu "có xuất hiện trong mảng" mà bài của bác 'runandaide' còn thiếu!.

Ghi chú:
Tui hổng biết dùng mảng động trong C lại wên cách dùng con trỏ. Nên đành dùng hạ sách khi khai báo thừa thải cho mảng tạm. Các bác xem xin chỉ giáo!

//Xuat cac phtu co trong mang!
int cs = 0; //so phtu da xuat hien!
int mloc[100]; //Dung mang tam -> cac phtu da xuat hien!
for(int i=0;i<n;i++)
{
for(int j =0;j<m;j++)
{
for(int t = 0;t<cs;t++)
{
if(mang[n][m] ==mloc[t])
goto Thoat;
}
mloc[cs] = mang[n][m];
cout<<mang[n][m]<<" ";
cs +=1;
Thoat:
}
}
 
trời nó chạy bậy rùi. Chịu khó sửa lại giùm!
 
Tui xin bổ sung phần xuất các ptu "có xuất hiện trong mảng" mà bài của bác 'runandaide' còn thiếu!.

Ghi chú:
Tui hổng biết dùng mảng động trong C lại wên cách dùng con trỏ. Nên đành dùng hạ sách khi khai báo thừa thải cho mảng tạm. Các bác xem xin chỉ giáo!

//Xuat cac phtu co trong mang!
// int cs = 0; //so phtu da xuat hien!
// int mloc[100]; //Dung mang tam -> cac phtu da xuat hien!
// for(int i=0;i<n;i++)
// {
// for(int j =0;j<m;j++)
// {
// for(int t = 0;t<cs;t++)
// {
// if(mang[n][m] ==mloc[t])
// goto Thoat;
// }
// mloc[cs] = mang[n][m];
// cout<<mang[n][m]<<" ";
// cs +=1;
// Thoat:
// }
// }

Thế này thì hết chạy!
 
thx mấy anh chị em nhiều lắm,mai mốt có gì xin chỉ giáo em với,vậy nha
 
// goto Thoat;
kô nên xài goto , lệnh này có thể phá hỏng cấu trúc 1 program
có thể thay = lệnh exit(); thì tiện hơn lại kô phải thêm label Thoat ở cuối program nữa
 
Thế cho tui bác hỏi cái 'Exit();' nó "nhảy" ra khỏi được ? cái for. Nhờ bác xem kĩ lại, liệu có đáp ứng được í đồ của tui hông??? He.He..
 
/*chú ý phần in đậm, nếu ko thì giá trị max và min luôn là cuối cùng của mảng :D*/

//tim phan tu lon nhat
printf("\nphan tu lon nhat trong mang:");
max=mang[0][0];
int imax=0;
int jmax=0;

for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(mang[j]>max)
{
max=mang[j];
imax=i;
jmax=j;
}
}
printf("a[%d][%d]=%d",imax,jmax,max);


//tim phan tu nho nhat
printf("\nphan tu nho nhat trong mang:");
min=mang[0][0];
int imin=0;
int jmin=0;

for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(mang[j]<min)
{
min=mang[j];
imin=i;
jmin=j;

}
}

printf("a[%d][%d]=%d",imin,jmin,min);

//-------------------------------------------------


/*còn sau đây là bài hòan chỉnh, đã thêm 1 chút xíu thêm phần tử trong đường chéo và phần tử max, min và debug lỗi linh tinh :D.*/

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
int mang[10][10];
int i,j,n,m;
int max,min,tong,chan,le;
char kitu;
//tao bang 2 chieu nhap so hang so cot
do
{
do
{
printf("moi ban nhap so hang:");
scanf("%d",&n);
printf("moi ban nhap so cot:");
scanf("%d",&m);
}
while(n>10||n<3||m>10||m<3);

printf("cac phan tu ngau nhien trong mang:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
mang[j]=random(100)+1;
}

for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf("a[%d][%d]=%d\t",i,j,mang[j]);

//tim phan tu lon nhat
printf("\nphan tu lon nhat trong mang:");
max=mang[0][0];
int imax=0;
int jmax=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(mang[j]>max)
{
max=mang[j];
imax=i;
jmax=j;
}
}
printf("a[%d][%d]=%d",imax,jmax,max);


//tim phan tu nho nhat
printf("\nphan tu nho nhat trong mang:");
min=mang[0][0];
int imin=0;
int jmin=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(mang[j]<min)
{
min=mang[j];
imin=i;
jmin=j;
}
}

printf("a[%d][%d]=%d",imin,jmin,min);

//tong cac phan tu trong ma tran
printf("\ntong cac phan tu trong matrix:");
tong=0 ;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
tong+=mang[j];//tong=tong+mang[j]
}
printf("=%d",tong);

//in ra cac phan tu tren duong cheo trai>>phai tu tren xuong cua matrix
printf("\n cac phan tu tren duong cheo trai cua matrix:");
for(i=0;i<n;i++)
{
printf("a[%d][%d]=%d\t",i,i,mang);
}

//in ra cac phan tu tren duong cheo phai>>trai tu tren xuong cua matrix
printf("\n cac phan tu tren duong cheo phai cua matrix:");
for(i=0,j=m-1;i<n,j>=0;i++,j--)
{
printf("a[%d][%d]=%d\t",i,j,mang[j]);
}
//in cac phan tu chan
printf("\ncac phan tu chan trong matrix:");

for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(mang[j]%2==0)
printf("%3d,",mang[j]);
}
//in cac phan tu le
printf("\ncac phan tu le trong matrix:");

for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(mang[j]%2!=0)
printf("%3d,",mang[j]);
}
printf("\nban co muon lap lai truong trinh ko (y/n):");
kitu=getche();
if(kitu=='n'||kitu=='N')
exit(0);

}
while(kitu=='y'||kitu=='Y');

getch();
}
 
chậc! về nhà làm xong chẵng bít đang làm gì
chay xong nhìn hoa cả mắt

Mã:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
	int mang[10][10];
     	int i,j,n,m;
	int max,min,tong,dem;
        char kitu;
     	
     //tao bang 2 chieu nhap so hang so cot
     
     do{
     clrscr();
     do{
     printf("\nmoi ban nhap so hang:");
     scanf("%d",&n);
     printf("moi ban nhap so cot:");
     scanf("%d",&m);
     }while(n>10||n<3||m>10||m<3);

     printf("cac phan tu ngau nhien trong mang:\n");
     for(i=0;i<n;i++)
       	for(j=0;j<m;j++)
       	{
		mang[i][j]=random(100)+1;
		printf("a[%d][%d]=%d\t",i,j,mang[i][j]);
                
			
	}
     printf("\ncac gia tri co trong matrix:\n");
     for(i=0;i<n;i++)
       {for(j=0;j<m;j++)
	
		printf("%4d",mang[i][j]);
                printf("\n") ;}
	

        
     //tim phan tu lon nhat
     printf("\nphan tu lon nhat trong mang:");
	int imax;
	int jmax;
	max=mang[0][0];
	for( i=0;i<n;i++)
                for( j=0;j<m;j++)
		{
			if(mang[i][j]>max)
			{
				max=mang[i][j];
				imax=i;
				jmax=j;
			}
		}
	printf("a[%d][%d]=%d",imax,jmax,max);
                    
      //tim phan tu nho nhat
     printf("\nphan tu nho nhat trong mang:");
     int imin;
     int jmin;
     min=mang[0][0];
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
	       if(mang[i][j]<min)
	       {	min=mang[i][j];
	       		imin=i;
			jmin=j;
	       }
        }
	
     printf("a[%d][%d]=%d",imin,jmin,min);

     //tong cac phan tu trong ma tran
     printf("\ntong cac phan tu trong matrix:");
     tong=0 ;
     for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
		tong+=mang[i][j];//tong=tong+mang[i][j]

	}
     printf("=%d",tong);

     //in ra cac phan tu tren duong cheo cua matrix

     //in ra cac phan tu tren duong cheo trai>>phai tu tren xuong cua matrix
        int tongcheo=0;
	printf("\n cac phan tu tren duong cheo trai cua matrix:");
	for(i=0;i<n;i++)
	{
		printf("\na[%d][%d]=%d\t",i,i,mang[i][i]);
	}
	printf("tong cua chung=");

	for(i=0;i<n;i++)
	{       tongcheo+=mang[i][i];
		
	}
	printf("=%d",tongcheo);

     //in ra cac phan tu tren duong cheo phai>>trai tu tren xuong cua matrix

        int tongcheo2=0;
	printf("\n cac phan tu tren duong cheo phai cua matrix:");
	for(i=0,j=m-1;i<n,j>=0;i++,j--)
	{
		printf("\na[%d][%d]=%d\t",i,j,mang[i][j]);
	}
	printf("tong cua chung=");

	for(i=0,j=m-1;i<n,j>=0;i++,j--)
	{       tongcheo2+=mang[i][j];
		
	}
	printf("=%d",tongcheo2);

     //in cac phan tu chan
     printf("\ncac phan tu chan trong matrix:");
     
     	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
	{
		if(mang[i][j]%2==0)
                
		printf("%4d",mang[i][j]);
        }

      //in cac phan tu le
      printf("\n") ;
     printf("\ncac phan tu le trong matrix:");
     
     	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
	{
		if(mang[i][j]%2!=0)
                
		printf("%4d",mang[i][j]);
	}

     //in cac giat tri xuat hien trong ma tran trong ma tran
	int mangtam[100],t=0;
        int kiemtra=1;
	
	mangtam[0]=mang[0][0];
	printf("\n") ;
	printf("\ncac gia tri trong matrix:");
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
		{
			mangtam[t]=mang[i][j];
                        t++;
		}
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
		{    kiemtra=1;
		     for(t=1;t<i*n+j;t++)
			if(mang[i][j]==mangtam[t])
			{	kiemtra=0;
				break;
			}
			if(kiemtra==1)
                        	printf("%3d",mang[i][j]);

                 }
      //ban co muon thoat chuong trinh ko                 
      printf("\nban co muon lap lai truong trinh ko (y/n):");
	kitu=getche();
	if(kitu=='n'||kitu=='N')
	exit(0);

	}while(kitu=='y'||kitu=='Y');

getch();
}
 
Xin lỗi tui nói tí , cái câu lệnh goto tuy nó có thể làm phá cấu trúc của Program nhưng mà cũng có vài trường hợp nó xài ngon mà , như khử đệ quy chẳng hạn :D . Mà chắc bạn đó đang nhiễm ASM nên xài goto hehe
 
Phần in các phtử có trong mang của bồ nì bèo whá! Xem lại phần ở trên của tui kia mà học hỏi! hì hì.
 
Back
Top