Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hỏi :dùng con trỏ để nhân tích vô hướng trong c

    em có cái bài tập là tìm trong mảng 2 chiều xem số nào có đặc điểm bên phải là số fibonacci bên trái là số nguyên tố rồi tìm xem trong các số đấy số nào to nhất rồi nhân tích vô hướng . em làm đc rồi nhưng mà chưa biét dùng con trỏ để nhân tích vô hướng như nào mong các bác chỉ gùm [IMG]images/smilies/biggrin.png[/IMG]

    Mã:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    #include<stdlib.h>
     int ch(int n){                  
        int d=0;
        while(n>0){
            d++;
            n/=10;}
            return d;
        }
     int pro(int n)                  
    {
        if(n==1 || n==2) return 1;
        for(int i=2; i<=n/2; i++)
        {
            if(n%i==0) return 0;
        }
        return 1;
    }
    
     int fb(int t) {                  
      int x=0,y=1,z=0;
      while(z<t)
      {
         z=x+y;
         x=y;
         y=z;
      }
      if (z==t) 
          return 1;
      else 
          return 0;
    }
     int main(){
      int j,i,m,m1,a1,a2,max=1,hmax=1,cmax=1;float Sum=0;
       printf("Please, enter the numver of columns and rows :)
    ");
        scanf("%d",&m);
      int **a = (int**)malloc(m*sizeof(a[0]));
       for(int i=0;i<m;i++){
        a[i] = (int*)malloc(m*sizeof(a[i][0]));}
        
        printf("array A[N][N] 
    "); 
    	for(i=0;i<m;i++){
    		for(j=0;j<m;j++){
    			printf("A[%d,%d] ",i+1,j+1);
    			scanf("%d",&a[i][j]);
    		}
    	}
    
    
    	printf("array A : 
     ");            
    	for(i=0;i<m;i++){
    		for(j=0;j<m;j++){
    			printf(" %d ",a[i][j]);
    		}
    		printf(" 
     ");
            }
     	for(i=0;i<m;i++) 
    	 for(j=0;j<m;j++)  
        {
            if(ch(a[i][j])%2==0)             
            {
                int n1=1;
                m1=ch(a[i][j])/2;
                while(m1>0)
                {
                    m1--;                
                    n1*=10;
                }
            a1=a[i][j]1;
            a2=a[i][j]%n1;
            if (pro(a1)==1 && fb(a2)==1 && a[i][j]>max)
            {max=a[i][j];cmax=j;hmax=i;}
            }
        }
            
            if(max==1) printf(" 
     There isn't any special element in the array "); 
            else 
            {
                printf(" Special maximum element =%d",max); 
                for(i=0;i<m;i++)
                Sum+=a[hmax][i]*a[i][cmax];   //  em muốn dùng con trỏ để nhân cái này 
             printf("
     Number of element maximum=%6.1f",Sum);
            }
             getch();
             for(i=0;i<m;i++)                
              free(a[i]);
               free(a);
             return 0;        
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    theo mình nghĩ thì mảng hai chiều được lưu trong bộ nhớ thành một chuỗi các ô nhớ liên tiếp chứ nó không cấp phát một bảng có hàng và cột như trong suy nghĩ của chúng ta trong toán đâu. Ví dụ một mảng 2 chiều A[4][5] sẽ được lưu thành 1 chuỗi ô nhớ A[0][0],A[0][1],...A[0][4],A[1][0],A[1][1]...A[1][4],A[2][0]... .A[3][4]. Do đó nếu bạn trích lấy hàng và cột trong mảng 2 chiều rồi nhân tích vô hướng thì có lẽ chỉ có thể thao tác cụ thể như bạn làm ở trên chứ dùng con trỏ không được.[IMG]images/smilies/biggrin.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •