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

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi buitrungthanh, 24/11/06.

  1. buitrungthanh

    buitrungthanh Legend of Zelda

    Tham gia ngày:
    27/4/04
    Bài viết:
    1,083
    Nơi ở:
    Chuồng gà
    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
     
  2. buitrungthanh

    buitrungthanh Legend of Zelda

    Tham gia ngày:
    27/4/04
    Bài viết:
    1,083
    Nơi ở:
    Chuồng gà
    ko ai chiu giúp em cái à,hic hic........
     
  3. tomorrowneverdies

    tomorrowneverdies Bạch Diện Thư Sinh

    Tham gia ngày:
    6/6/02
    Bài viết:
    4,306
    Nơi ở:
    The World Of Games
    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.
     
  4. buitrungthanh

    buitrungthanh Legend of Zelda

    Tham gia ngày:
    27/4/04
    Bài viết:
    1,083
    Nơi ở:
    Chuồng gà
    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
     
  5. DevVn

    DevVn The Warrior of Light

    Tham gia ngày:
    4/6/05
    Bài viết:
    2,074
    Nơi ở:
    Damned Graveyard
    Đâ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.
     
  6. buitrungthanh

    buitrungthanh Legend of Zelda

    Tham gia ngày:
    27/4/04
    Bài viết:
    1,083
    Nơi ở:
    Chuồng gà
    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
     
  7. tomorrowneverdies

    tomorrowneverdies Bạch Diện Thư Sinh

    Tham gia ngày:
    6/6/02
    Bài viết:
    4,306
    Nơi ở:
    The World Of Games
    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 ^^.
     
  8. runandaide

    runandaide Mr & Ms Pac-Man

    Tham gia ngày:
    12/1/05
    Bài viết:
    103
    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();
    }
     
  9. Nhai Kon

    Nhai Kon Youtube Master Race

    Tham gia ngày:
    25/10/06
    Bài viết:
    97
    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
     
  10. Tử_Kiệt

    Tử_Kiệt Youtube Master Race

    Tham gia ngày:
    29/8/06
    Bài viết:
    27
    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:
    }
    }
     
  11. Tử_Kiệt

    Tử_Kiệt Youtube Master Race

    Tham gia ngày:
    29/8/06
    Bài viết:
    27
    trời nó chạy bậy rùi. Chịu khó sửa lại giùm!
     
  12. Tử_Kiệt

    Tử_Kiệt Youtube Master Race

    Tham gia ngày:
    29/8/06
    Bài viết:
    27
    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!
     
  13. buitrungthanh

    buitrungthanh Legend of Zelda

    Tham gia ngày:
    27/4/04
    Bài viết:
    1,083
    Nơi ở:
    Chuồng gà
    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
     
  14. Nhai Kon

    Nhai Kon Youtube Master Race

    Tham gia ngày:
    25/10/06
    Bài viết:
    97
    // 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
     
  15. Tử_Kiệt

    Tử_Kiệt Youtube Master Race

    Tham gia ngày:
    29/8/06
    Bài viết:
    27
    :D oh` oh`! /////////////////////////////
     
  16. Tử_Kiệt

    Tử_Kiệt Youtube Master Race

    Tham gia ngày:
    29/8/06
    Bài viết:
    27
    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..
     
  17. big chicken

    big chicken C O N T R A

    Tham gia ngày:
    15/11/02
    Bài viết:
    1,917
    /*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.*/

     
  18. runandaide

    runandaide Mr & Ms Pac-Man

    Tham gia ngày:
    12/1/05
    Bài viết:
    103
    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();
    }
     
  19. Brianlam

    Brianlam T.E.T.Я.I.S

    Tham gia ngày:
    14/7/04
    Bài viết:
    526
    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
     
  20. Tử_Kiệt

    Tử_Kiệt Youtube Master Race

    Tham gia ngày:
    29/8/06
    Bài viết:
    27
    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ì.
     

Chia sẻ trang này