2ª Aula de Problemas
‰Uma nota sobre o exercício 3 da 2ª aula de problemas.
ƒ De seguida apresenta-se a resolução do exercício 3,
considerando que não era necessário fornecer uma tolerância
em baldes.
ƒ Note que nesse caso não é necessário utilizar uma estrutura
de selecção (if-else).
ƒ Mas qual é a desvantagem desta resolução ?
Miguel Pedro Silva – João Reis
Computação e Programação 2008 / 2009
Problemas
1
Exercício 3
‰ ENUNCIADO:
O Sr. Alberto é pintor de interiores e trabalha com dois tipos de tinta: a tinta
de água e a tinta plástica.
Primeiro o Sr. Alberto estima a área da casa a pintar, depois pergunta ao
cliente que partes da casa quer pintar com tinta de água e calcula a
percentagem da casa (em termos de área) que será pintada com esta tinta.
Ele sabe, por experiência, que 5 l de tinta de água pintam cerca de 50 m², e
5 l de tinta plástica pintam cerca de 30 m².
O Sr. Alberto necessita de um programa para calcular o número de latas, de
5 l, de cada tinta que cada cliente teria de pagar.
NOTA: Como o Sr. Alberto pode querer trabalhar no futuro com baldes de tamanho superior,
não utilize explicitamente o valor (literal) de 5 litros na implementação do programa.
Miguel Pedro Silva – João Reis
Computação e Programação 2008 / 2009
Problemas
2
Exercício 3 (cont.)
Descrição
Objectos (entidades) do programa
Tipo
Espécie
Nome
Teclado
istream
variável
cin
Écran
ostream
variável
cout
várias prompts
string
constante
Descrições das saída
string
constante
Tamanho do balde
double
constante
tamanhoDoBalde
Area pintada por litro de
tinta de água
double
constante
areaPorLitroPintadaPelaTintaAgua
Area pintada por litro de
tinta plástica
double
constante
areaPorLitroPintadaPelaTintaPlastica
Área total para pintar
double
variável
areaTotalParaPintar
Percentagem da área total a
pintar com tinta de água
double
variável
percAreaTotalTintaAgua
Nº de baldes necessários de
tinta de água
int
variável
numBaldesNecTintaAgua
Nº de baldes necessários de
tinta plástica
int
variável
numBaldesNecTintaPlastica
Miguel Pedro Silva – João Reis
Computação e Programação 2008 / 2009
Problemas
3
Exercício 3 (cont.)
Algoritmo:
1)
Declarar e inicializar todas as constantes e variáveis da tabela.
2)
Enviar para o écran a frase Indique a área total a pintar [em metros^2]:
3)
Ler do teclado o valor de área e atribuir a areaTotalParaPintar.
4)
Enviar para o écran a frase Indique a percentagem da área total a
pintar com tinta de água [valor de 0 ... 100]:
5)
Ler do teclado o valor da percentagem e atribuir a
percAreaTotalTintaAgua.
6)
Calcular:
numBaldesNecTintaAgua =
( (areaTotalParaPintar * percAreaTotalTintaAgua / 100) /
areaPorLitroPintadaPelaTintaAgua ) / tamanhoDoBalde
Miguel Pedro Silva – João Reis
Computação e Programação 2008 / 2009
Problemas
4
Exercício 3 (cont.)
Algoritmo:
7)
Calcular:
numBaldesNecTintaPlastica =
( (areaTotalParaPintar * (1 - percAreaTotalTintaAgua / 100)) /
areaPorLitroPintadaPelaTintaPlastica ) / tamanhoDoBalde
8)
Enviar para o écran a frase Numero necessário de baldes, de , seguido
do valor de tamanhoDoBalde, seguido de litros, de tinta de água:
seguido do valor de numBaldesNecTintaAgua.
9)
Enviar para o écran a frase Numero necessário de baldes, de , seguido
do valor de tamanhoDoBalde, seguido de litros, de tinta plástica:
seguido do valor de numBaldesNecTintaPlastica.
Miguel Pedro Silva – João Reis
Computação e Programação 2008 / 2009
Problemas
5
Exercício 3 (cont.)
Implementação em C++:
/*****************************************************************
Este programa permite calcular o número de baldes, de 5 litros,
de tinta de água e de tinta plástica, que são necessários para
pintar um interior de uma casa.
Inputs: Área total a pintar e percentagem da área toral que é
pintada com tinta de água.
Outputs: envia para o ecran o número de baldes, de 5 litros,
de tinta de água e de tinta plástica, que são
necessários para pintar um interior de uma casa.
******************************************************************
Escrito por: PrimeiroNome UltimoNome, Nº xxxxxx, data: dia/mes/ano
******************************************************************/
#include <iostream>
// cout,cin,>>,<<
#include <cmath>
// ceil(arg) -- recebe um double e calcula o valor inteiro
//superior mais proximo do arg, e devolve um double
using namespace std;
Miguel Pedro Silva – João Reis
Computação e Programação 2008 / 2009
Problemas
6
Exercício 3 (cont.)
int main(){
// declaração e inicialização de constantes e variáveis
const double tamanhoDoBalde = 5.0; // em litros
const double areaPorLitroPintadaPelaTintaAgua = 50.0/5.0; //valores do Sr.
//Alberto
const double areaPorLitroPintadaPelaTintaPlastica = 30.0/5.0; //valores do
//Sr. Alberto
double areaTotalParaPintar = 0.0;
double percAreaTotalTintaAgua = 0.0;
int numBaldesNecTintaAgua = 0;
int numBaldesNecTintaPlastica = 0;
cout << "\nIndique a 'area total a pintar
[em metros^2]: "; // prompt
cin >> areaTotalParaPintar; // leitura da área total a pintar
cout << "\nIndique a percentagem da 'area total a pintar com tinta"
<< " de 'agua [valor de 0 a 100 %]: "; // prompt
cin >> percAreaTotalTintaAgua; // leitura da percentagem da 'area total a
//pintar com tinta de 'agua
Miguel Pedro Silva – João Reis
Computação e Programação 2008 / 2009
Problemas
7
Exercício 3 (cont.)
// cálculo do número de baldes de tinta de água necessários (valor inteiro)
numBaldesNecTintaAgua = (int) ceil(((areaTotalParaPintar*percAreaTotalTin
taAgua/100)/areaPorLitroPintadaPelaTintaAgua)/tamanhoDoBalde);
// cálculo do número de baldes de tinta plástica necessários (valor
inteiro)
numBaldesNecTintaPlastica =
(int) ceil(((areaTotalParaPintar*(1-percAreaTotalTintaAgua/100))/
areaPorLitroPintadaPelaTintaPlastica)/tamanhoDoBalde);
// apresentação no ecran dos resultados
cout << "\n\nNumero necessario de baldes, de " << tamanhoDoBalde
<< " litros, de tinta de 'agua: " << numBaldesNecTintaAgua;
cout << "\n\nNumero necessario de baldes, de " << tamanhoDoBalde
<< " litros, de tinta plastica: " << numBaldesNecTintaPlastica
<< "\n\n";
return 0;
} // fim de main()
Miguel Pedro Silva – João Reis
Computação e Programação 2008 / 2009
Problemas
8
Download

Exercicio 3 (outra resolução)