computer Erros mais comuns em um Juiz Online

Last updated: January 30th, 2019

Introdução

Durante o curso de Algoritmos e Programação de Computadores você irá passar por alguns problemas na hora de enviar a sua questão para o OJ (Online Judge).

Essa seção será resposável por aprensentar e exemplificar os erros mais comuns que voce provavelmente irá passar. Como não será o professor ou monitor que irá corrirgir a submissão de cada código de cada aluno, o sistema foi programado para corrigir e julgar seu código de acordo com apenas 1 critério : caso todos os inputs apresentados por ele retorne como resultado algo exatamente igual o seu gabarito (output), então o seu código está correto, caso contrário ele está errado.

Possivelmente os códigos que foram julgados como errados irão receber um dos seguintes erros que serão analisados no tópico seguinte

Erros

Wrong Answer (WA)

Sem a menor dúvida WA é o tipo de erro mais comum e TODOS ainda vão receber um durante o curso.

Este tipo de erro ocorre basicamente quando a resposta retornada não bate com o gabarito. Como por exemplo, caso o problema seja somar 2 números e para um input 5 5 seu programa retorna qualquer coisa diferente de 10 ele irá julgar seu programa com o veredito de resposta errada (WA).

Exemplo de programa que irá receber WA caso o proposto seja ler 2 números e imprimir ambos trocados

int x, y, aux;
scanf("%d %d", &x, &y);
aux = x;
x = y;
y = aux;
printf("%d%d\n", x, y); 

Este tipo de programa irá retornar o veredito de WA pois caso o input seja 7 8, ao invés do código retornar 8 7 ele irá retornar 87 que não é a resposta correta

Presentation error (PE)

Este tipo de erro é bastante comum para o pessoal iniciante que está realizando submissões, principalmente, no site do URI.

O código recebe esse veredito quando sua resposta não está identada corretamente, ou seja, não apresenta a quebra de linha (\n) corretamente

Exemplo de programa que irá receber PE caso o proposto seja ler 1 número e imprimir 2 linhas, no qual a primeira é o número lido ao quadrado e na segunda linha o número ao cubo

    int x;
    scanf("%d", &x);
    printf("%d %d\n", x*x, x*x*x); 

Este tipo de programa irá retornar o veredito de PE pois caso o input seja 2 a saida deveria ser 2 linhas contendo os números 4 e 8, porém este código retorna apenas 1 linha1 com a resposta "correta", porém identada de forma incorreta.

Compilation error (CE)

Este tipo de erro é bastante comum para o pessoal iniciante, similar ao PE .

O código recebe esse veredito quando não consegue se compilado na hora do sistema realizar os testes.

Exemplo de programa que irá receber CE caso o proposto seja ler 1 número e imprimir seu dobro

    int y;                                            
    scanf("%d", &x);
    printf("%d\n", x*2); 

Este tipo de programa irá retornar o veredito de CE o programa está salvando o valor lido na variável x, porém essa variável não foi declarada, logo irá ocorrer erro na hora da compilação.

Runtime error (RTE)

Este tipo de erro é bastante comum e acontece bastante quando o programador está aprendendo vetores.

O código recebe esse veredito, na maioria das vezes, quando o programa acessa um posição inválida de memória, geralmente ocorre quando temos um vetor e se tenta acessar um index que não existe.

Exemplo de programa que irá receber RTE caso o proposto seja ler n números e imprimí-los de trás para frente.

    int n,i;
    scanf("%d", &n);
    int v[n];
    for(i = 0; i <= n; i++){
        scanf("%d", &v[i]);
    }
    for(i = n; i >= 0; i--){
        printf("%d ", v[i]);
    }                  
    printf("\n");                         
    

Este tipo de programa irá retornar o veredito de RE pois como o código cria um vetor de tamanho n, então suas posições vão de 0 ~ n-1 e como no laço de repetição está de 0 ~ n, na última iteração do primeiro for será acessado a posição v[n] que não existe, fazendo com que o programa não esteja correto.

Time Limit Exceeded (TLE)

Este também acontece, porém com uma menor frequência que os outros e está relacionado ao tempo de execução.

O código recebe esse veredito quando sua solução extrapola o tempo limite definido. Seu programa não terminou de executar no tempo pré-determinado, por isso foi interrompido. Este tipo de erro pode acontecer quando seu programa entra em um loop infinito ou a sua solução apenas demora muito para ser finalizada.

Exemplo de programa que irá receber TLE caso o proposto seja ler um número n e imprimir todos os números de n até 1

    int n,i;
    scanf("%d", &n);
    for(i = n; i >= 1; i++){
        scanf("%d ", i);
    }               
    printf("\n");  

Este tipo de programa irá retornar o veredito de TLE pois o programador está fazendo um loop decrescente com a condição de parada com i >= 1, porém no último campo do laço de repetição ele incrementa a variável, fazendo com que o número sempre cresça e nunca fique menor do que 1, entrando em um loop infinito.