2012-03-11 18 views
-2

さて、ここでは対処します。私は数日間この問題に取り組んでおり、利用可能なすべてのリソースを試しました。今朝、私は最後のリゾートメールを私の教授に送りましたが、私は彼の答えを待つ間にそれに取り組もうとしています。私は0から1410の間の乱数の配列の中で最小の値へのポインタを返すことになっています。割り当てにはスケルトンファイルが含まれていましたが、私は物事を根本から(もちろん彼のパラメータを使って)ビルドするのが好きです。ここに私のコードは次のとおりです。関数からポインタとして最小値を返す

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

int* find_smallest_number(int*, int); 

int main() 

{ 
    const int size = 10; 
    int random_array[size] = {}; 

    int* smallestNumber = find_smallest_number(random_array, size); 

    srand(time(NULL)); 

    for(int i = 0; i < size; i++) 
    { 
     *(random_array + i) = rand()%1410; 
     cout << random_array[i] << endl; 
     cout << &*(random_array + i) << endl; 
    } 

    cout << "The smallest number is " << *smallestNumber << endl; 

    return 0; 
} 


int* find_smallest_number(int *random_array, int size) 

{ 

/*  
    for(int i = 0; i < size; i++) 

    { 
     if(*(random_array + i) > *(random_array + 1)) 
     { 
      return *(random_array + i); 
     } 
     else if(*(random_array + i) < *(random_array + 1)) 
     { 
      return *(random_array+1); 
     } 

    } */ 

    return &min_element; 
} 

私は正直に私が試したどのように多くの異なる方法を伝えることはできません。これはちょうど最新の試みです(すべてが[ヘッドデスク]の大量に終了しました)。ヒントやヒントを試してみることができますか?私は値/アドレスを保持するために別の変数を作成しようとしましたが、私は現在知っているように多くの異なる方法を試しました(このmin_elementは私がインターネット上で見つけたものでした)。私はときどき私のコードをコンパイルすることができますが、私が行うと、配列内のFIRST要素の値/アドレスだけが返されます(私のコードがどのようなものであっても)。私がポインタを返そうとすると、怒って、 "intからint *への無効な変換"と私に教えてくれますか? (また、私のコードのフォーマットが少しずれている場合は、私はその指示に従おうとしましたが、それでも失敗している可能性があります)/

+0

だから、どんな問題がありますか?誤った出力またはエラーメッセージを表示する。 – Marcin

+0

配列を値で埋める前に 'find_smallest_number' **を呼び出すようです。それはうまく終わらないだろう。また、あなたのコードはコンパイルされません( 'min_element'とは何ですか?)。 –

答えて

1

std::min_element

#include <algorithm> //must include this 

int* minValue = std::min_element(array, array+size); 

また、配列を最初に入力してから、上記のようにstd::min_elementを使用してください。

本当に本当に良いC++入門書が必要なようです。このリストから入門書を入手してください。

+0

TBH、私はmin_elementがどのように動作するのか、どのように初期化されるのかは知らない。私はちょうど私の絶望的なヘッドデスクのthroesでインターネットからそれをつかんだ。 – ImmaD0rk

+0

@ ImmaD0rk: 'min_element'は関数であり、初期化されていないはずです。 – Nawaz

+0

これは学校の練習なので、 'std'から何かを使って助けてくれるのか疑問です。 –

1

あなたはランダムな値でそれを埋める前に、アレイ内の最小数を見つけようとしているように見えます。配列を最初にに初期化し、次に最小値を見つける必要があります。

+0

-___-これが私がこの方法で早く(このウェブサイトが大好きです)やったのです。私のためのMoarヘッドデスク、それを切り替えるようにしよう。 – ImmaD0rk

+0

Grrr、nope!私はまだそれを得ています_really annoying_エラー "intからint *への無効な変換" – ImmaD0rk

2

まず、配列を作成する前に、最も小さい番号を見つけるのはなぜですか?それは次のようになります。

srand(time(NULL)); 

for(int i = 0; i < size; i++) 
{ 
    *(random_array + i) = rand()%1410; 
    cout << random_array[i] << endl; 
    cout << &*(random_array + i) << endl; 
} 

//move the call after you populate the array 
int* smallestNumber = find_smallest_number(random_array, size); 

第二には、あなたの関数内のコードのようなものでなければなりません。この方法で

int* find_smallest_number(int *random_array, int size) 
{ 
    int* minPtr = random_array; 
    for(int i = 1; i < size; i++) 
    { 
     if (*(random_array + i) < *minPtr) 
      minPtr = random_array + i; 
    } 
    return minPtr; 
} 

、あなたは配列の正確な要素へのポインタを返します。あなたの変種:

return &min_element; 

あなたは未定義の動作あるローカル変数のアドレスを返した示唆しています。

+0

私はそれをあなたの方法で試してみましょう....残念ながら私はすでにそのようにそれを試した気がします。 :/ Brb。 – ImmaD0rk

+0

あなたは、ネチズンの中の神です!どうもありがとうございます!!!!!!!!! – ImmaD0rk

関連する問題