Kesalahan Umum pada Practice Session

Kesalahan Pada Program

  1. Output yang tidak seharusnya ada ("Masukkan Input")
    Apapun yang dicetak oleh program ke standard output (stdout) adalah output dari program tersebut. Termasuk teks yang sebenarnya tidak dimaksudkan untuk menjadi bagian dari output.

    Misalnya kita diminta membuat program yang hanya membaca sebuah integer dan mencetak angka yang lima kali lebih besar dari integer tersebut.

    Contoh Input
    10
    Contoh Output
    50
    Program yang dibuat:

    C/C++
    int main()
    {
        int x;
    
        printf( "Input Angka: " );
        scanf( "%d", &x );
    
        printf( "%d\n", x * 5 );
    
        return 0;
    }
    Java
    public static void main(Sring[] args) {
      Scanner scan = new Scanner(System.in);
    
      System.out.printf( "Input Angka: " );
      int x = scan.nextInt();
    
      System.out.printf( "%d\n", x * 5 );
    }

    Jika program di atas diinput dengan:
    10
    Maka output dari program di atas adalah:
    Input Angka: 50
    Teks "Input Angka: " akan dianggap sebagai bagian dari output. Jika teks tersebut tidak diharapkan ada pada format input/output (dari soal), maka output ini akan dianggap Wrong Answer meskipun angka yang dimaksudkan benar (50). Program yang diharapkan adalah yang seperti ini:

    C/C++
    int main()
    {
        int x;
    
        scanf( "%d", &x );
        printf( "%d\n", x * 5 );
    
        return 0;
    }
    Java
    public static void main(Sring[] args) {
      Scanner scan = new Scanner(System.in);
    
      int x = scan.nextInt();
      System.out.printf( "%d\n", x * 5 );
    }


  2. Input/Output dari file
    Juri hanya akan memeriksa output yang dihasilkan oleh program pada standard output (stdio). Semua output yang dicetak ke file oleh program peserta akan diabaikan. Perlu diperhatikan juga, jika program tersebut membaca input dari file maka besar kemungkinan program tersebut tidak berhasil mendapat input apa-apa karena semua input akan diberikan melalui standard input (stdin).

  3. (Java) Penggunaan GUI (JPanel, dsb)
    Program harus membaca input dari standard input (stdin) dan mengoutput ke standard output (stdout) yang keduanya ada di console (bukan GUI). Penggunaan GUI bisa menyebabkan program tersebut Time Limit Exceed (juri tidak memberikan input ke GUI yang ditampilkan sehingga program terus menunggu).

  4. (C/C++) Penggunaan getch()
    getch() yang digunakan di akhir program bisa menyebabkan program tidak berhenti (masih menunggu input dari keyboard), akibatnya program bisa mendapat Time Limit Exceed.


Kesalahan Pada Kompiler

Kompiler yang digunakan adalah GCC/MinGW (DevCPP) untuk C/C++ dan Java 6 untuk Java sesuai dengan ketentuan pada peraturan. Meskipun demikian, juri banyak menjumpai jawaban peserta yang tidak bisa dikompile dengan kompiler tersebut (terutama untuk pengguna C/C++). Berikut adalah beberapa kesalahan yang sering dijumpai:
  • C/C++
    1. Penggunaan void main()
      MinGW mengharuskan fungsi main() mengembalikan nilai integer (int).
      int main()
      {
          // ...
      
          return 0;
      }
      
      Pesan error ini yang akan diterima juri jika return value fungsi main() bukan integer:
      `main' must return `int'
    2. Penggunaan format string %lld pada integer 64-bit
      Format string yang digunakan untuk tipe data long long atau __int64 (integer 64-bit) di DevC++ adalah %I64d, bukan %lld (DJGPP).
      int main()
      {
          __int64 x;
          scanf( "%I64d", &x );
          printf( "%I64d", x );
          return 0;
      }
      
      Kesalahan ini tidak menyebabkan program tidak bisa dikompile, namun output yang dicetak oleh program akan tidak sesuai dengan apa yang diinginkan (integer 64 bit).

  • Java
    1. Nama class tidak sama dengan nama file.
    2. Pengguna Java diharuskan untuk mengirim file yang namanya sama dengan nama class utama yang digunakan. Jika tidak, program yang dikirimkan akan mendapatkan Compile Error.

Demikian ulasan mengenai kesalahan yang sering dijumpai oleh juri pada Practice Contest, sekiranya bisa dimanfaatkan oleh setiap peserta untuk lebih mempersiapkan diri menghadapi babak Penyisihan (Minggu, 1 Juni 2008).