XXVI Olimpíada Brasileira de Informática

Para submeter suas soluções em Javascript, você deve seguir as seguintes instruções:

  • A entrada de dados deve ser feita utilizando o comando scanf, a saída deve ser feita utilizando o comando printf. Esses comandos foram desenvolvidos para o ambiente Saci e são muito parecidos com os comandos de mesmo nome na linguagem C.

Você pode utilizar o Editor Saci para desenvolver sua solução, ou pode usar os comandos scanf e printf localmente instalando a biblioteca (veja abaixo, uso avançado).

O comando de escrita printf

O comando printf é exatamente igual ao comando de mesmo nome da linguagem C. O formato geral é

printf("cadeia_formatadora", lista_de_expressoes);

onde cadeia formatadora é uma cadeia que será impressa, podendo conter especificadores de formato que serão usados para escrever as expressões da lista_de_expressoes. Os mesmos especificadores de formato da linguagem C são aceitos: %d para inteiros, %s para cadeias de caracteres, %f para números reais,...

O comando de entrada scanf

O comando scanf também é similar ao comando homônimo da linguagem C, mas com duas diferenças: na lista de variáveis do comando, os nomes das variáveis devem ser colocadas entre aspas. E há uma restrição: as variáveis utilizadas no comando scanf devem ter escopo global.

O formato geral é

scanf("cadeia_formatadora", lista_de_variáveis);

onde cadeia formatadora é uma cadeia que deve conter especificadores de formato que serão usados para ler os valores da entrada para as variáveis da lista_de_variáveis. Os mesmos especificadores de formato da linguagem C são aceitos: %d para inteiros, %s para cadeias de caracteres, %f para números reais,...

Um pequeno exemplo

O exemplo abaixo lê dois valores inteiros e imprime o maior valor.

// exemplo de solução
  
// declara duas variáveis
var val1, val2;

// lê dois valores inteiros
scanf("%d%d", "val1", "val2");

// escreve o resultado
if (val1 > val2)
    printf("%d\n", val1);
else
    printf("%d\n", val2);

Usando o Editor Saci

A forma mais fácil de desenvolver as soluções em Javascript, especialmente para iniciantes, é utilizar o Editor Saci.

Você pode também baixar um arquivo compactado com o Editor Saci para Javascript. Para isso, siga os passos:

  • Faça o download do Editor Saci no link abaixo (arquivo .zip)
  • Copie o arquivo .zip para o computador onde o aluno vai fazer a prova (por exemplo, saci.zip).
  • Descompacte o arquivo. Vai ser criada uma pasta (de nome saci)
  • Dentro da pasta criada, clique duas vezes no arquivo de nome "index.html"; o navegador padrão (Firefox, Chrome, Opera...) do sistema deve abrir e mostrar a prova.
  • Se não funcionar, abra uma janela de um navegador (Firefox, Chrome...) e abra o arquivo "index.html" pelo navegador. O ambiente de desenvolvimento deve aparecer como uma página do navegador.

Avançado: usando javascript localmente

Você pode também utilizar um editor de arquivos de sua preferência para desenvolver suas soluções e executar as soluções diretamente em seu computador local.

Para usar javascript localmente, é necessário inicialmente instalar nodejs, o interpretador da linguagem javascript.

Após, é necessário instalar a biblioteca scanf-printf-obi, desenvolvida para tarefas da OBI. Para isso, em uma janela de terminal, digite o comando

  npm install scanf-printf-obi

Finalmente, é necessário incluir um cabeçalho no seu arquivo de solução, para importar a biblioteca:

// cabeçalho para incluir printf, scanf e fgets
// em programas javascript

var scanf_stub = require(''scanf-printf-obi'').scanf,
    printf_stub = require(''scanf-printf-obi'').sprintf,
    fgets_stub = require(''scanf-printf-obi\'').fgets

function scanf(format) {
    var res = scanf_stub.apply(this, Array.prototype.slice.call(arguments, 0));
    eval(res);
}

function printf(args){
    var res = printf_stub.apply(this, Array.prototype.slice.call(arguments, 0));
    process.stdout.write(res);
}

function fgets(args){
    var res = fgets_stub.apply(this, Array.prototype.slice.call(arguments, 0));
    eval(res);
}
// final de cabeçalho

O exemplo de solução mostrado acima, para uso local, fica assim:

// cabeçalho para incluir printf, scanf e fgets
// em programas javascript

var scanf_stub = require(''scanf-printf-obi'').scanf,
    printf_stub = require(''scanf-printf-obi'').sprintf,
    fgets_stub = require(''scanf-printf-obi'').fgets

function scanf(format) {
    var res = scanf_stub.apply(this, Array.prototype.slice.call(arguments, 0));
    eval(res);
}

function printf(args){
    var res = printf_stub.apply(this, Array.prototype.slice.call(arguments, 0));
    process.stdout.write(res);
}

function fgets(args){
    var res = fgets_stub.apply(this, Array.prototype.slice.call(arguments, 0));
    eval(res);
}
// final de cabeçalho

  
// exemplo de solução
  
// declara duas variáveis
var val1, val2;

// lê dois valores inteiros
scanf("%d%d", "val1", "val2");

// escreve o resultado
if (val1 > val2)
    printf("%d\n", val1);
else
    printf("%d\n", val2);

Supondo que o código acima esteja armazenado em um arquivo de nome tarefa.js, então, para executar seu programa com um caso de teste armazenado no arquivo de nome entrada.txt, digite o seguinte comando em uma janela de terminal:

nodejs tarefa.js < entrada.txt
Promoção
logo sbc
Patrocínio
Apoio
Coordenação