O dobro de um número qualquer
Exercício de lógica de programação para calcular o dobro de um número qualquer.
Exercício de lógica de programação
Faça uma função para calcular o dobro de um número qualquer.
Comentários:
Este é o segundo exercício da série, nele já vamos utilizar as funções, pois não faz muito sentido testarmos o código sem ter ao menos uma função. Mesmo porque o teste visa sempre testar uma unidade, essa unidade deve ser (pelo menos) uma função.
Linguagem C
Para sabermos se o código funciona vamos escrever um teste: assert( 10 == dobro(5) );
Parece complicado? Só parece, não é não!
Eu sei que 10
é o resultado esperado da função dobro()
caso o parâmatro passado for 5
.
Em outras palavras, é o mesmo que dizer que a expressão 10 == dobro(5)
retornará true
.
Entendido isso podemos avançar. A função assert()
funciona da seguinte maneira: ela fica em silêncio se o parâmetro
for verdadeiro assert(true)
e ela “grita” se o parâmetro for false
asssert(false)
.
Se o programa ficar em silêncio (não responder nada, absolutamente nada), entendemos então que o teste está funcionado.
Se o programa “gritar” alguma coisa, entendemos que o programa não está fazendo o que deveria fazer e que, portanto, a lógica empregada precisa ser corrigida.
Vamos botar a mão na massa…
1. Crie o arquivo foo.c
e insira o seguinte conteúdo nele:
#include <stdio.h>
#include <assert.h>
//
// Função que retorna o dobro de um número qualquer
//
int dobro(int num) {
// Aqui entra a lógica do programa.
}
//
// Testes
//
int main (){
assert(10 == dobro(5));
assert(12 == dobro(6));
return 0;
}
Eu acresentei dois assert´s só para mostrar que podemos fazer asserções à vontade.
2. Agora, no terminal, compile o código (é o equivalente ao ‘build’) gcc foo.c -o foo
.
3. Vamos ver se os testes estão passando ou não?
Execute o programa! No terminal digite ./foo
O que temos de resposta? Algo parecido com “Assertion failed…”?
É meu(inha) amigo(a), seu teste falhou!
Seu exercício de lógica começa exatamente “aqui”! Agora implemente o código que retorna o dobro de um número qualquer. Ou seja, subistitua o trecho “// Aqui entra a lógica do programa.” pelo seu código.
Como a lógica é ridiculamente fácil eu vou mostrar o resultado:
Solução na linguagem C
#include <stdio.h>
#include <assert.h>
//
// Função que retorna o dobro de um número qualquer
//
int dobro(int num) {
return 2 * num; // <--- olha aqui o resultado
}
//
// Testes
//
int main (){
assert(10 == dobro(5));
assert(12 == dobro(6));
return 0;
}
Se você compilar o código acima e excutar o binary (o arquivo executável) ele ficará em silêcio, ou melhor, não vai acusar nenhum erro, portanto, nossa lógica está adequado ao nosso objetivo, está certa!
Está sacando o processo?
Acho que vou gravar um vídeo para demonstrar isso, o que você acha?
Linguagem Python
Abaixo nosso código inicial escrito em Python, utilize ele para resolver o problema.
# -*- coding: utf-8 -*-
#
# Função que retorna o dobro de um número qualquer
#
def dobro(num):
pass
#
# Seus testes
#
assert 10 == dobro(5), "o dobro de 5 deve ser 10"
Solução na linguagem Python
# -*- coding: utf-8 -*-
#
# Função que retorna o dobro de um número qualquer
#
def dobro(num):
return num * 2
#
# Seus testes
#
assert 10 == dobro(5), "o dobro de 5 deve ser 10"
Linguagem JavaScript (Node.js)
Abaixo nosso código inicial escrito em JavaScript (Node.js), utilize ele para resolver o problema.
var assert = require('assert');
//
// Função que retorna o dobro de um número qualquer
//
var dobro = function(num) {
// Aqui entra a lógica do programa.
}
//
// Testes
//
try {
assert.equal(10, dobro(5));
} catch(e) {
console.log(e);
}
Solução na linguagem JavaScript (Node.js)
var assert = require('assert');
//
// Função que retorna o dobro de um número qualquer
//
var dobro = function(num) {
return num * 2;
}
//
// Testes
//
try {
assert.equal(10, dobro(5));
} catch(e) {
console.log(e);
}