2013-03-18 55 views
-1

我的程序有問題。 這是一個問題:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=120C程序,激光線,警告:從不兼容的指針類型傳入'sortowanie'的參數1

我:

#include <stdio.h> 
#include <stdlib.h> 


typedef struct{ 

    int x,y; 

} punkty; 

typedef struct{ 

    punkty linia[300]; 
    int i; 

}linie; 

int sprawdzenie(punkty a, punkty b, punkty c) 
{ 
     int n1, n2; 

     if ((b.y-a.y)*(c.x-a.x)==(c.y-a.y)*(b.x-a.x)) 
      return 1; 
     else 
      return 0; 

} 

int sortowanie(punkty *proste, int roz) 
{ 
    int i,j; 

    for(i=0; i<roz;i++) 
    { 
     for(j=0; j<roz-1;j++) 
     { 
      if(proste[j].x>proste[j+1].x || 
       (proste[j].x == proste[j+1].x 
       && proste[j].y>proste[j+1].y) 
       ) 
      { 
       punkty tmp; 

       tmp = proste[j]; 
       proste[j] = proste[j+1]; 
       proste[j+1] = tmp; 
      } 
     } 


    } 


} 
int sortowanie_2(punkty *proste, int roz) 
{ 
    int i,j; 

    for(i=0; i<roz;i++) 
    { 
     for(j=0; j<roz-1;j++) 
     { 
      if(proste[j].x>proste[j+1].x || 
       (proste[j].x == proste[j+1].x 
       && proste[j].y>proste[j+1].y) 
       ) 
      { 
       punkty tmp; 

       tmp = proste[j]; 
       proste[j] = proste[j+1]; 
       proste[j+1] = tmp; 
      } 
     } 


    } 

} 

int duplikat(linie *proste, int roz, punkty a, punkty b, punkty c) 
{ 
    int ax,k,j,i; 


    for(ax=0;ax<roz;ax++) 
     for(i=0;i<proste[ax].i-2;i++) 
      for(j=i; j<proste[ax].i-1;j++) 
       for(k=j;k<proste[ax].i;k++) 

        if(proste[ax].linia[i].x == a.x && proste[ax].linia[i].y == a.y && 
         proste[ax].linia[j].x == b.x && proste[ax].linia[j].y == b.y && 
         proste[ax].linia[k].x == c.x && proste[ax].linia[k].y == c.y 
         ) 
        return 1; 
    return 0; 
} 


int main() 
{ 
    punkty tab[300]; 

    linie proste[300]; 

    int n=0,i,j,k,p=0,parametr=0; 


/*wczytanie punktow*/ 

    while(scanf("%d %d", &tab[n].x, &tab[n].y) == 2 && (tab[n].x!=0 || tab[n].y!=0)) 
    { 
     n++; 
    } 

    sortowanie(&tab,n); 
/*wyszukiwanie lini */ 


    for(i=0; i<n-2;i++) 
    { 
     for(j=i+1; j<n-1; j++) 
     { 
      parametr=1; 

      for(k=j+1; k<n; k++) 
      { 
       if(sprawdzenie(tab[i], tab[j], tab[k]) == 1 && duplikat(&proste, p, tab[i],tab[j],tab[k])==0) 
       { 

        if(parametr==1) 
        { 
         //printf("x"); 
         proste[p].linia[proste[p].i] = tab[i]; 
         proste[p].i++; 
         proste[p].linia[proste[p].i] = tab[j]; 
         proste[p].i++; 
         proste[p].linia[proste[p].i] = tab[k]; 
         proste[p].i++; 
         parametr=0; 
        } 
        else 
        { 
         proste[p].linia[proste[p].i] = tab[k]; 
         proste[p].i++; 
        } 

       } 
      } 
      if(parametr==0) 
      { 
       p++; 
      } 
     } 
    } 

    if(p==0) 
    { 
     printf("No lines were found"); 
    } 
    else 
    { 
     printf("The following lines were found:\n"); 
    } 

    for(i=0; i<p; i++) 
    { 

     for(j=0; j<proste[i].i; j++) 
     { 
      printf("(%d, %d) ", proste[i].linia[j].x,proste[i].linia[j].y); 
      // printf("%d %d\n", tab[j].x, tab[j].y); 
     } 
     printf("\n"); 
    } 



    getchar(); 
    return 0; 
} 

而且我有錯誤的程序:

code.c:在函數 '主': code.c:116:5 :警告:從不兼容的指針類型傳遞'sortowanie'的參數1 code.c:29:5:note:expected'struct punkty 'but argument is of type'struct punkty()[300]' code.c :128:17:警告:從in中傳遞'duplikat'的參數1兼容指針類型 code.c:81:5:注:預期 '結構LINIE ',但參數的類型的 '結構LINIE()[300]' code.c:133:26:錯誤:前預期表達' /」令牌 code.c:172:12:錯誤:預期表達之前 '/' 令牌

回答

0
int sortowanie(punkty *proste, int roz) 

期望一個punkty指針,但要傳遞一個punkty **,即一個指向punkty指針:

punkty tab[300]; // tab is a (pointer to) array 
sortowanie(&tab,n); // should be sortowanie(tab, n) 

同樣的問題在這裏:

linie proste[300]; 
duplikat(&proste, p, tab[i],tab[j],tab[k]) // should be duplikat(proste, ... 

sortowanie_2,你是不是return荷蘭國際集團任何東西,你需要從這個函數返回一個整數。

但編譯器已經告訴你這些東西。

相關問題