Search buenodc

Nesta página
  1. Questionário
  2. Tarefa
  3. Gabarito

Lista de Exercícios - Semana 7

Questionário

  • Questionário individual, de múltipla escolha, com uma resposta correta por questão.
  • Cobre a leitura do material e dos vídeos: definição e chamada de funções, parâmetros, e funções com e sem retorno.
  • Prazo: [definir].

1. Qual é a saída do trecho abaixo?

double dobro(double numero) {
    return numero * 2;
}

int main() {
    cout << dobro(5.0) << endl;
    return 0;
}

a) 5 b) 10 c) 25 d) Erro de compilação

2. No trecho abaixo, qual é o problema?

int main() {
    saudacao();
    return 0;
}

void saudacao() {
    cout << "Ola" << endl;
}

a) A função saudacao foi escrita depois do main, então o compilador não a conhece ainda quando chega na chamada. b) Falta um parâmetro na função saudacao. c) Uma função void não pode ser chamada de dentro do main. d) Falta um return dentro de saudacao.

3. Qual é a saída do trecho abaixo?

double soma(double a, double b) {
    return a + b;
}

int main() {
    cout << soma(3.0, 7.0) << endl;
    return 0;
}

a) 3 b) 7 c) 10 d) 37

4. Considerando a função abaixo, qual valor x e qual valor y recebem na chamada subtrai(3.0, 10.0)?

double subtrai(double x, double y) {
    return x - y;
}

a) x recebe 3, y recebe 10 b) x e y recebem 10 c) x e y recebem 3 d) x recebe 10, y recebe 3

5. Qual é a saída do trecho abaixo?

double subtrai(double x, double y) {
    return x - y;
}

int main() {
    cout << subtrai(3.0, 10.0) << endl;
    return 0;
}

a) -7 b) 7 c) 13 d) Erro de compilação

6. Considerando a função double calcularArea(double base, double altura), o que diferencia um parâmetro de um argumento?

a) Parâmetro é o valor passado na chamada; argumento é o nome usado na definição da função. b) Parâmetro é o nome usado na definição da função; argumento é o valor passado na chamada. c) Não existe diferença: os dois termos significam a mesma coisa. d) Parâmetro só existe em funções void; argumento só existe em funções que retornam valor.

7. Uma função void pode conter um comando return?

a) Não, void nunca aceita return. b) Sim, mas sempre com uma expressão depois. c) Sim, desde que seja um return sozinho, sem nenhuma expressão, usado para encerrar a função mais cedo. d) Sim, mas só se for a última linha do corpo.

8. O trecho abaixo tem um erro. Qual é?

double calcularMedia(double n1, double n2) {
    double media = (n1 + n2) / 2;
}

a) Falta declarar o tipo dos parâmetros. b) A variável media foi declarada com o tipo errado. c) O nome da função não pode ter mais de dez caracteres. d) Falta um comando return com o valor calculado.

9. Qual situação é mais bem resolvida com um return sozinho, sem valor, dentro de uma função void?

a) Quando uma condição de erro é detectada, e o restante da função deve ser pulado. b) Quando a função precisa devolver um número negativo. c) Quando a função não recebe nenhum parâmetro. d) Quando a função é chamada mais de uma vez no mesmo programa.

10. Qual é a saída do trecho abaixo?

void mostrarSeMaiorDeIdade(int idade) {
    if (idade < 18) {
        cout << "Menor de idade" << endl;
        return;
    }
    cout << "Maior de idade" << endl;
}

int main() {
    mostrarSeMaiorDeIdade(15);
    return 0;
}

a) Maior de idade b) Menor de idade c) Maior de idade seguido de Menor de idade d) Nada é mostrado

Tarefa

  • Cada exercício é um programa separado, em um arquivo .cpp com o nome exato indicado (letras minúsculas, sem espaço). O nome errado atrapalha a correção automática.
  • Todos os exercícios pedem uma função com a assinatura exata indicada, chamada a partir do main. Escreva a função sempre antes do main, como vimos nos vídeos.
  • Formato estilo juiz online: a entrada é só os valores pedidos, sem mensagem de prompt (nada de cout << "Digite..." antes do cin). A saída é só o valor esperado, sem nenhum texto de rótulo junto.
  • Entrada: os valores são lidos na ordem exata indicada em cada exercício, um cin por valor.
  • Compile e rode cada programa antes de entregar, testando com os valores de exemplo.
  • Entrega: envie todos os arquivos .cpp juntos aqui no Moodle. Prazo: [definir].

Tarefa 1 - Dobro de um número

Arquivo: tarefa1.cpp

Escreva uma função double dobro(double numero) que retorna o dobro do valor recebido. No main, leia um número e mostre o resultado da chamada.

Entrada: um número real.

Saída (um único valor):

<dobro>

Exemplo: entrada

5

produz saída

10

Tarefa 2 - Maior de dois números

Arquivo: tarefa2.cpp

Escreva uma função int maior(int a, int b) que retorna o maior dos dois valores recebidos. No main, leia dois inteiros e mostre o resultado.

Entrada: dois inteiros.

Saída (um único valor):

<maior>

Exemplo: entrada

7
3

produz saída

7

Tarefa 3 - Área de um retângulo

Arquivo: tarefa3.cpp

Escreva uma função double areaRetangulo(double base, double altura) que retorna a área do retângulo. No main, leia a base e a altura e mostre a área.

Entrada: dois números reais, base e altura.

Saída (um único valor):

<area>

Exemplo: entrada

4
5

produz saída

20

Tarefa 4 - Corrigindo o programa com erros

Arquivo: tarefa4.cpp

O programa abaixo deveria calcular 10 menos 3, mostrando 7, mas tem 3 erros e não compila. Corrija todos e entregue a versão funcionando.

#include <iostream>
using namespace std;

int main() {
    int resultado = subtrai(10, 3)
    cout << resultado << endl;
    return 0;
}

int subtrai(int a, int b) {
    a - b;
}

Entrada: nenhuma.

Saída (um único valor):

7

Tarefa 5 - Validando uma nota

Arquivo: tarefa5.cpp

Escreva uma função void mostrarSituacao(double nota) que mostra Nota invalida se a nota for menor que 0 ou maior que 10, usando um return sozinho para encerrar a função logo em seguida. Caso a nota seja válida, a função mostra Aprovado se a nota for maior ou igual a 6, ou Reprovado caso contrário. No main, leia uma nota e chame a função.

Entrada: um número real, a nota.

Saída (um único valor, dependendo da nota):

<Nota invalida, Aprovado ou Reprovado>

Exemplo: entrada

7

produz saída

Aprovado

Desafio (opcional) - Ida e volta

Arquivo: desafio.cpp

Escreva as funções double celsiusParaFahrenheit(double celsius) e double fahrenheitParaCelsius(double fahrenheit). No main, leia um valor em Celsius, mostre a conversão para Fahrenheit, e depois converta esse resultado de volta para Celsius com a segunda função, mostrando o valor final.

Entrada: um valor em Celsius.

Saída (duas linhas: Fahrenheit, depois Celsius de volta):

<fahrenheit>
<celsius>

Exemplo: entrada

0

produz saída

32
0

Gabarito

Resolução de referência para consulta e correção.

Questionário

Resposta correta de cada questão, para conferência ou importação no Moodle.

QuestãoResposta
1b
2a
3c
4a
5a
6b
7c
8d
9a
10b

1. dobro(5.0) retorna 5.0 * 2, ou seja, 10.

2. A chamada saudacao() aparece antes da função ser escrita no arquivo: como o compilador lê de cima para baixo, ele ainda não conhece saudacao nesse ponto. Nesta disciplina, a função sempre precisa vir inteira, antes do main.

3. soma(3.0, 7.0) retorna 3.0 + 7.0, ou seja, 10.

4. Os valores são conectados pela posição: o primeiro argumento, 3.0, vai para o primeiro parâmetro, x; o segundo, 10.0, vai para o segundo parâmetro, y.

5. Com x valendo 3 e y valendo 10, x - y é 3 - 10, ou seja, -7.

6. Parâmetro é o nome usado dentro da definição da função; argumento é o valor real passado na chamada.

7. Uma função void pode ter um return sozinho, sem nenhuma expressão, para encerrar a execução mais cedo, sem devolver nenhum valor.

8. A função declara o tipo de retorno double, mas nunca executa um return: falta esse comando, com o valor de media, antes de fechar a função.

9. O return sozinho é útil justamente para interromper a função quando uma condição de erro é detectada, evitando que o restante do código execute sobre um dado inválido.

10. Com idade igual a 15, a condição idade < 18 é verdadeira: a função mostra Menor de idade e encerra com o return, sem chegar na linha que mostra Maior de idade.

Tarefa

Soluções de referência, com o mesmo raciocínio esperado do aluno.

Tarefa 1:

#include <iostream>
using namespace std;

double dobro(double numero) {
    return numero * 2;
}

int main() {
    double numero;
    cin >> numero;
    cout << dobro(numero) << endl;
    return 0;
}

Tarefa 2:

#include <iostream>
using namespace std;

int maior(int a, int b) {
    if (a > b) {
        return a;
    }
    return b;
}

int main() {
    int a, b;
    cin >> a >> b;
    cout << maior(a, b) << endl;
    return 0;
}

Tarefa 3:

#include <iostream>
using namespace std;

double areaRetangulo(double base, double altura) {
    return base * altura;
}

int main() {
    double base, altura;
    cin >> base >> altura;
    cout << areaRetangulo(base, altura) << endl;
    return 0;
}

Tarefa 4: os três erros são: a função subtrai está escrita depois do main, mas é chamada antes de ser conhecida pelo compilador; falta um ponto e vírgula ao final da linha int resultado = subtrai(10, 3); e falta um return dentro do corpo de subtrai. Corrigido:

#include <iostream>
using namespace std;

int subtrai(int a, int b) {
    return a - b;
}

int main() {
    int resultado = subtrai(10, 3);
    cout << resultado << endl;
    return 0;
}

Tarefa 5:

#include <iostream>
using namespace std;

void mostrarSituacao(double nota) {
    if (nota < 0 || nota > 10) {
        cout << "Nota invalida" << endl;
        return;
    }
    if (nota >= 6) {
        cout << "Aprovado" << endl;
    } else {
        cout << "Reprovado" << endl;
    }
}

int main() {
    double nota;
    cin >> nota;
    mostrarSituacao(nota);
    return 0;
}

Desafio:

#include <iostream>
using namespace std;

double celsiusParaFahrenheit(double celsius) {
    return celsius * 9.0 / 5.0 + 32;
}

double fahrenheitParaCelsius(double fahrenheit) {
    return (fahrenheit - 32) * 5.0 / 9.0;
}

int main() {
    double celsius;
    cin >> celsius;
    double fahrenheit = celsiusParaFahrenheit(celsius);
    cout << fahrenheit << endl;
    cout << fahrenheitParaCelsius(fahrenheit) << endl;
    return 0;
}

Lista de Exercícios da Semana 7 - Base: Savitch, C++ Absoluto, seção 3.2. Traga suas dúvidas para o encontro síncrono.