Mengapa kode untuk pengurutan pilihan ini tidak berfungsi?

pemrograman


#include<iostream>
using namespace std;


void PrintArray(int arr[], int size)
{
    for (int i = 0; i < size ; i++)
    {
        cout << arr[i] << " ";
    }
}
void selectionSort(int arr[],int n){
    for (int i = 0; i < n-1;i++){
        for (int j = i+1; i < n;j++){
            if(arr[i]>arr[j]){
                swap(arr[i], arr[j]);
            }
        }
    }
}
int main(){
    int arr[7] = {1,8,3,6,7,6,4};
    selectionSort(arr, 7);
    PrintArray(arr, 7);
    return 0;
}

Apa yang saya coba:

Saya telah menulis kode untuk pengurutan pilihan, tetapi tidak memberikan output yang diperlukan.

Solusi 1

Kompilasi tidak berarti kode Anda benar! :tertawa:
Bayangkan proses pengembangan seperti menulis email: kompilasi berhasil berarti Anda menulis email dalam bahasa yang benar – Inggris, bukan bahasa Jerman misalnya – bukan email tersebut berisi pesan yang ingin Anda kirim.

Jadi sekarang Anda memasuki tahap pengembangan kedua (pada kenyataannya ini adalah tahap keempat atau kelima, tetapi Anda akan sampai pada tahap awal nanti): Pengujian dan Debugging.

Mulailah dengan melihat apa fungsinya, dan apa perbedaannya dari apa yang Anda inginkan. Hal ini penting karena memberi Anda informasi mengapa ia melakukan hal tersebut. Misalnya, jika suatu program dimaksudkan untuk membiarkan pengguna memasukkan angka dan menggandakannya serta mencetak jawabannya, maka input/outputnya seperti ini:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16

Maka cukup jelas bahwa masalahnya ada pada bit yang menggandakannya – bit tersebut tidak menambahkan dirinya sendiri ke dirinya sendiri, atau mengalikannya dengan 2, melainkan mengalikannya dengan dirinya sendiri dan mengembalikan kuadrat input.
Jadi dengan itu, Anda dapat melihat kodenya dan jelas bahwa kode itu ada di suatu tempat di sini:

C#
private int Double(int value)
   {
   return value * value;
   }

Setelah Anda mengetahui apa yang salah, mulailah menggunakan debugger untuk mencari tahu alasannya. Letakkan breakpoint pada baris pertama metode ini, dan jalankan aplikasi Anda. Ketika mencapai breakpoint, debugger akan berhenti, dan menyerahkan kendali kepada Anda. Anda sekarang dapat menjalankan kode Anda baris demi baris (disebut “langkah tunggal”) dan melihat (atau bahkan mengubah) konten variabel seperlunya (Anda bahkan dapat mengubah kode dan mencoba lagi jika perlu).
Pikirkan tentang apa yang harus dilakukan setiap baris dalam kode sebelum Anda menjalankannya, dan bandingkan dengan apa yang sebenarnya dilakukannya saat Anda menggunakan tombol “Langkah” untuk mengeksekusi setiap baris secara bergantian. Apakah itu sesuai dengan harapan Anda? Jika ya, lanjutkan ke baris berikutnya.
Jika tidak, mengapa tidak? Apa bedanya?
Mudah-mudahan, ini dapat membantu Anda menemukan bagian mana dari kode tersebut yang bermasalah, dan apa masalahnya.

Saya akan memberi Anda petunjuk: perhatikan baik-baik nilai indeks array Anda … ingat bahwa indeks dijalankan dari 0 hingga (N – 1) inklusif untuk array yang terdiri dari N elemen. Jadi array yang terdiri dari 3 elemen hanya akan memiliki indeks valid 0, 1, dan 2.

Ini adalah keterampilan, dan merupakan salah satu keterampilan yang layak untuk dikembangkan karena membantu Anda di dunia nyata dan juga dalam pengembangan. Dan seperti semua keterampilan, keterampilan ini hanya meningkat jika digunakan!

コメント

タイトルとURLをコピーしました