1

私は、C++ をよく理解するために Alex Alllain の本を読んでいます。私はすでにいくつかの基本を知っていましたが、いつものように配列とソート アルゴリズムで行き詰まってしまいました。とにかく、彼が提示した問題の 1 つは、配列がソートされているかどうかを確認することでした。そうでない場合は、並べ替えます...コードは次のとおりです。

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
void swap(int array[], int firstindex, int secondindex);
int findsmallel(int array[], int size, int index)
{
    int indexofsmall=index;
    for(int i=index+1; i<size; i++)
    {
        if(array[i]<array[indexofsmall])
            {
                indexofsmall=i;
            }
    }
    return indexofsmall;
}
int findhigh(int array[], int size, int index)
{
    int indexofhigh=index;
    for(int i=index+1; i<size; i++)
    {
        if(array[i]>array[indexofhigh])
            {
                indexofhigh=i;
            }
    }
    return indexofhigh;
}
void sortlow(int array[], int size)
{
    for (int i=0; i<size; i++)
    {
        int index=findsmallel(array, size, i);
        swap(array, index, i);
    }
}
void sorthigh(int array[], int size)
{
    for (int i=0; i<size; i++)
    {
        int index=findhigh(array, size, i);
        swap(array, index, i);
    }
}
void swap(int array[], int firstindex, int secondindex)
{
    int temp=array[firstindex];
    array[firstindex]=array[secondindex];
    array[secondindex]=temp;
}
void displayarray(int array[], int size)
{
    cout<<"{ ";
    for(int i=0; i<size;i++)
    {
        if(i!=0)
        {
        cout<<", ";
        }
    cout<<array[i];
    }
    cout<<" }";
}
int main()
{
    int inputedarray[5];
    cin>>inputedarray[];
    if(inputedarray[4] != sortlow || inputedarray[4] != sorthigh)
    {
        sortlow(inputedarray, 5);
        displayarray(inputedarray, 5);
    }
    else
        cout<<"Array is already sorted."<<endl;
    return 0;
}

条件をチェックするときに、ポインターと integerm の比較に関する 2 つのエラーが発生します。どんな助けでも大歓迎です!編集: 私が得ているエラーは次のとおりです: C:\Code Block Projects\Alex Alllains Book\Chapter 1\main.cpp|84|エラー: ISO C++ はポインターと整数の比較を禁止しています [-fpermissive]|

また、配列がソートされているかどうかを確認する方法はありますか? お願いします?:(

4

3 に答える 3

3

その3行目は比較を行っていると思います.main配列の最後の要素が最小/最大であるかどうかをチェックして、配列がソートされているかどうかを判断します. 正しい方法ではありませんが、そうしていると仮定しましょう。コードを次から変更します

 if(inputedarray[4] != sortlow || inputedarray[4] != sorthigh)

 if(inputedarray[4] != findsmallel(inputedarray,5,0) ||
        inputedarray[4] != findhigh(inputedarray,5,0))

その後、コードをコンパイルできるはずです。

コードを機能させるため。main を次のように変更します。

int main()
{
    int inputedarray[5];
    for( int i=0; i<5; i++)
    {
        cin>>inputedarray[i];
    }

    if(inputedarray[4] != findsmallel(inputedarray,5,0) ||
       inputedarray[4] != findhigh(inputedarray,5,0))
    {
        sortlow(inputedarray, 5);
        displayarray(inputedarray, 5);
    }
    else
        cout<<"Array is already sorted."<<endl;
    return 0;
}

次に、このように整数を入力する必要があります

2 3 5 1 4

最大/最小の整数を最後の入力桁として配置しない限り、正常に機能するはずです。

于 2013-03-22T07:54:03.433 に答える
1

発生する「エラー」は、値を関数ポインタと比較しているためです。これらの関数は呼び出さないでください。

kmaで指摘されているように、これらの関数呼び出しは、を返すためvoid、つまり値をまったく返さないため、式で使用することはできません。

が何かを返したとしても、最初の呼び出しで配列が再配置される可能性があるため、配列のインデックス4で前にあったものは、次の比較では同じになりません。

于 2013-03-22T07:38:26.127 に答える
0

メインプログラムのsortlowとsorthighは、int変数ではなく、関数名として宣言されています。C ++は、これを関数へのポインター(アドレス)として受け取ります。しかし、それらを配列の整数と比較します。

編集:配列がソートされているかどうかを確認する方法は?(通常のカードのデッキからの)5枚のカードの配列があなたの前に裏向きになっていると想像してください。一度に2枚のカードしかめくることができず、それらを比較して裏向きに戻すことができます。5枚のカードが正しいかどうかをどのように判断しますか?実行した手順を書き留めます。そのアルゴリズムを理解したら、C++コードでそれを表現する方法について考え始めることができます。

于 2013-03-22T07:36:25.043 に答える