gabarito_prova_1 (2)

18
Linguagens de Programa¸c˜ ao Prova Te´ orica Unidade I Carlos Olarte 1 de Abril de 2015

description

gabarito de prova

Transcript of gabarito_prova_1 (2)

  • Linguagens de Programacao

    Prova Teorica Unidade I

    Carlos Olarte

    1 de Abril de 2015

  • Questao 1

    Faca um programa para ler varios valores in-

    teiros e imprimir na tela:

    1. A media aritmetica dos numeros lidos;

    2. A soma dos numeros pares;

    3. A quantidade de multiplos de 5;

    O final da leitura acontecera quando for lido

    um valor negativo.

  • Solucao 1#include

    using namespace std;

    int main(){

    // inicializar as variaveis

    double media =0;

    int soma_par=0, q5 = 0,n=0,i=0;

    //ler dado

    cin >>n;

    while(n>=0){

    // acumular soma

    media += n;

    // incrementar numero de dados

    i++;

    // testar se n e par.

    if(n%2 ==0)

    soma_par += n;

    // Testar se n e multiplo de 5

    if(n%5==0)

    q5++;

    //ler dado

    cin >>n;

    }

    // calcular media

    media = media/i;

  • // imprimir resultados

    cout

  • Solucao 2#include

    using namespace std;

    int main(){

    // inicializar as variaveis

    double media =0;

    int soma_par=0, q5 = 0,n=0,i=0;

    //Laco enquanto n>=0

    do{

    //ler dado

    cin >>n;

    if(n>=0){

    // acumular soma

    media += n;

    // incrementar numero de dados

    i++;

    // testar se n e par.

    if(n%2 ==0)

    soma_par += n;

    // Testar se n e multiplo de 5

    if(n%5==0)

    q5++;

    }

    } while(n>=0);

    // calcular media

  • media = media/i;

    // imprimir resultados

    cout

  • Nota

    1. 1 : include, namespace, main.

    2. 1 : declarar e inicializar as variaveis.

    3. 1.5: Laco while

    4. 0.5: test + acumular soma de pares

    5. 0.5: test + acumular multiplos de 5.

    6. 0.5: acumular media

    7. 0.5 calcular media (fora do laco)

    8. 0.5: Imprimir resultados

    Nota = 2.6ptos6

  • Questao 2

    Faca um programa que dados n e dois numeros

    inteiros positivos i e j diferentes de 0, imprime

    em ordem crescente os n primeiros naturais

    que sao multiplos de i ou de j ou de ambos.

    Exemplo: Para n = 6 , i = 2 e j = 3 a sada

    devera ser : 0,2,3,4,6,8.

  • Solucao 1#include

    using namespace std;

    int main()

    {

    int i,j,n;

    int k=1;

    int mult =0;

    // ler os dados

    cout i;

    cout j;

    cout n;

    // laco controlado por k

    while (k

  • Solucao 2 (mais eficiente)#include

    using namespace std;

    int main()

    {

    int i, j, n;

    int multi , multj;

    int k;

    cout i;

    cout j;

    cout n;

    // Primeiros multiplos de i e j

    multi = 0;

    multj = 0;

    for (k = 0; k < n; k++)

    {

    // comparar multi e multj

    if (multi < multj)

    {

    cout

  • else

    {

    if (multi > multj)

    {

    cout

  • Nota

    1. 1: Estrutura do programa

    2. 1: Controlar numero de sadas (k)

    3. 2: Teste para imprimir o multiplo

    4. 2: Atualizar os valores corretamente.

    Nota = 2.6ptos6

  • Questao 3

    Faca uma funcao conta digitos que dados um

    inteiro n e um inteiro d, 0 d 9, devolvequantas vezes o dgito d aparece em n. Exem-

    plo: para n = 24342, d = 4, a funcao deve

    retornar 2.

  • Solucao#include

    using namespace std;

    int contadigitos(int n, int d) {

    int conta , resto;

    conta = 0;

    while (n != 0) {

    resto = n % 10;

    // novo valor de n

    n = n/10;

    // Testar e incrementar

    if (resto == d)

    conta ++;

    }

    return conta;

    }

  • Nota

    1. 1: Prototipo (tipo de retorno)

    2. 1: Prototipo (parametros)

    3. 1: Laco

    4. 1: teste

    5. 1: Atualizar os valores

    6. 1: retorno da funcao

    Nota = 2.6ptos6

  • Questao 4

    Faca uma funcao arctan que recebe um numero

    real x [0,1] e devolve uma aproximacao doarco tangente de x (em radianos) atraves da

    serie

    arctan(x) = x x3

    3+x5

    5 x

    7

    7+x9

    9 ....

    incluindo todos os termos da serie atexkk < 0.001

  • Solucaofloat arctan(float x) {

    float soma =0;

    float termo=x;

    int k=1;

    float mult_x = x;

    do{

    // Calcular o termo

    termo = mult_x/k;

    // determinar positivo/negativo

    if(i%2!=0)

    termo *= -1.0;

    // Acumular termo

    soma += termo;

    // proximos valores de k e x^k

    k+=2;

    mult_x *= x * x;

    // Terminar o laco

    }while(termo >=0.001 || termo

  • Nota

    1. 1: Prototipo da funcao

    2. 2: Condicao de parada (valor absoluto)

    3. 1: Inicializar as variaveis

    4. 1: Termos positivos/negativos

    5. 1: Valor do proximo termo

    Nota = 2.6ptos6