2017-02-12 4 views
2

私はポインタに全く新しいです、私はこれについてお詫びします、私はポインタの配列を渡し、その配列のモードを取得するはずです。配列がポインタのセットとして渡された後、配列を操作してモードを見つけることができません。試してみると構文エラーが発生します。配列のポインタを関数に渡して、配列のモードを見つけるにはどうすればよいですか? C++

EDIT:リストをポインタの配列に変更したため、ランタイムエラーが発生します。

int main() 
{ 
int size=0; 
int *list[size]; 
cout<<"Please enter the size of your array: "; 
cin>>size; 
cout<<"\nPlease enter the numbers in your list seperated by spaces: "; 
for(int i=0;i<size;i++) 
{ 
    cin>>*list[i]; 
} 
cout<<endl; 


int mode=getMode(list,size); 
cout<<"\n"<<mode<<endl; 
return 0; 
} 

int getMode (int* list[], int arraySize) 
{ 
    cout<<"The array you entered is listed below\n "<<list[0]; 
    for(int i=0;i<arraySize;i++) 
     {cout<<setw(3)<<list[i];} 
    int *number=list[0]; 
    int count1=0; 
    int count2=0; 
    int mode=0; 
    for(int j=1;j<arraySize;j++) 
     { 
      for(int i=1;i<arraySize;i++) 
       { 
        if(list[i]==number) 
         { 
          count1++; //counts the number of instances that the number occurs 
         } 
       } 
      if(count1>count2) 
       { 
        mode= *list[j]; 
        count2=count1; 
       } 
      count1=0; 
     } 
    return mode; 
} 
+0

'list'は、整数の配列ではなく、ポインタの配列です。 – Barmar

+0

配列を関数に渡すと、自動的にポインタに減衰します。 '&list'を使う必要はありません。 – Barmar

+0

私はリストをintの通常の配列にして、参照タグなしでそれを渡そうとすると、コンソールはint型をint型に変換できないことを私に伝えます**。 –

答えて

1

あなたが関数に配列を渡すと、それは自動的にポインタに減衰するので、あなたは&listを使用する必要はありません。関数内では、それをint *list[]と宣言するべきではありません。int list[]またはint *listである必要があります。

また、getMode()関数では、list[j]の一致をカウントする必要があります。あなたはちょうどnumberの繰り返しを数えています。これはlist[0]です。

#include <iostream> 
#include <iomanip> 
using namespace std; 

int getMode (int list[], int arraySize) 
{ 
    cout<<"The array you entered is listed below\n "<<list[0]; 
    for(int i=0;i<arraySize;i++) 
     {cout<<setw(3)<<list[i];} 
    int count1=0; 
    int count2=0; 
    int mode=0; 
    for(int j=0;j<arraySize;j++) 
     { 
      for(int i=0;i<arraySize;i++) 
       { 
        if(list[i]==list[j]) 
         { 
          count1++; //counts the number of instances that the number occurs 
         } 
       } 
      if(count1>count2) 
       { 
        mode= list[j]; 
        count2=count1; 
       } 
      count1=0; 
     } 
    return mode; 
} 

int main() 
{ 
    int size; 
    int *list; 
    cout<<"Please enter the size of your array: "; 
    cin>>size; 
    list=new int[size]; 
    cout<<"\nPlease enter the numbers in your list seperated by spaces: "; 
    for(int i=0;i<size;i++) 
     { 
      cin>>list[i]; 
     } 
    cout<<endl; 

    int mode=getMode(list,size); 
    cout<<"\n"<<mode<<endl; 
    return 0; 
} 

DEMO

+0

ありがとう、バーマー、あなたはすごく助けてくれました。この質問に答えられるようにする方法はありますか? –

+0

回答の横にあるチェックマークをクリックして受け入れます。 – Barmar

関連する問題