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