Buscar

P1 2012/2 gabarito

Prévia do material em texto

INF01202 – ALGORITMOS E PROGRAMAÇÃO 
Prof. Marcelo Walter – Prova 1 – Turmas A/B 15/10/2012 
 
 
NOME:_________________________GABARITO____________________________________ 
 
Para todos os programas, omita os cabeçalhos de bibliotecas e utilize identação para melhorar 
a legibilidade dos programas. 
 
1ª questão – Interpretação de Programas (1 ponto) 
Seja o programa não identado a seguir: 
 
#include <stdio.h> 
int main(){ 
int a=10, i; 
for (i=1; i<=6; i++) 
{ 
if ((i % 2) == 0) 
{ 
if (a <= 50) 
a = a + (10 * i); 
} 
else 
a = a - i; 
} 
printf(“Valor de a: “); 
printf(“%d\n”,a); 
printf(“#FIM#\n”); 
return 0; 
} 
 
Apresente a saída em tela gerada pela execução do programa acima. 
 
Resposta: 
 
Valor de a: 61 
#FIM# 
 
2ª questão – Séries (3 pontos) 
Dado um número real positivo r, sua raiz quadrada pode ser calculada utilizando a seguinte 
recorrência: 
 
Escreva um programa em C que leia o valor de r, a aproximação inicial 
x0, um valor de tolerância tol e um número inteiro m de repetições. A 
partir destes valores calcule a raiz quadrada de acordo com a recorrência 
ao lado. O cálculo da recursão deve ser encerrado quando o erro relativo 
entre duas iterações consecutivas for menor do que o valor tol dado, ou 
se o número de iterações atingir o valor máximo m. Imprimir na tela 
qual critério de parada foi satisfeito. 
 
 
 
 
// Prova 1 
// Semestre 2012/2 
// Marcelo Walter - Outubro 2012 
 
#include <stdio.h> 
#include <math.h> 
 
int main() 
{ 
 float sqroot=0, valor, tol, x0, erro; 
 int m=0, repeticoes=0; 
 
 // Entrada de dados 
 printf("Entre com o valor para calculo da raiz: "); 
 scanf("%f", &valor); 
 printf("Entre com o valor aproximado inicial: "); 
 scanf("%f", &x0); 
 printf("Entre com o valor de tolerancia: "); 
 scanf("%f", &tol); 
 printf("Entre com o nro maximo de iteracoes: "); 
 scanf("%d", &m); 
 
 do{ 
 sqroot = (x0 + valor/x0)/2; 
 erro = fabs(sqroot - x0); 
 repeticoes++; 
 x0 = sqroot; 
 }while (erro >tol && repeticoes <= m); 
 
 if (repeticoes > m) 
 printf("Saida pelo nro de repeticoes.\n"); 
 else 
 printf("Saida pelo erro.\n"); 
 
 // apenas para comparacao 
 printf("Raiz aproximada = %f Raiz calculada = %f\n", sqroot, sqrt(valor)); 
 return 0; 
} 
 
 
Entrada dados: 0.5 
Laço principal: 1.5 
Saída critério de parada: 1 
 
3ª questão – Arranjos (3 pontos) 
Podemos utilizar arranjos unidimensionais para representar polinômios. Se considerarmos um 
polinômio d+cx+bx2+ax3, podemos armazenar os coeficientes d,c,b,a nas posições 0,1,2,3 de um 
arranjo unidimensional. Escreva um programa que inicialmente leia 2 polinômios de grau máximo 
igual a 4 e calcula o polinômio soma dos 2 polinômios lidos. Para esse polinômio soma, escreva na 
tela uma tabela com o valor do polinômio para x entre [-1,1] em intervalos de 0.2 
 
Exemplo de execução: 
Entre com os coeficientes do primeiro polinômio: 0 1 3 0 2 
Entre com os coeficientes do segundo polinômio: 1 1 -1 0 3 
 
Os coeficientes do polinômio soma são: 
1 2 2 0 5 
 
x valor polinômio 
-1.00 6.00 
-0.80 2.73 
-0.60 1.17 
-0.40 0.65 
-0.20 0.69 
-0.00 1.00 
0.20 1.49 
0.40 2.25 
0.60 3.57 
0.80 5.93 
1.00 10.00 
 
// Questao 3 - 2012/2 
#include <stdio.h> 
#include <math.h> 
#define NELEM 5 
 
int main() 
{ 
 float p1[NELEM]={0}, p2[NELEM]={0}, psoma[NELEM]={0}; 
 int i; 
 float x, res=0; 
 
 // Leitura dos coeficientes dos polinomios 
 printf("Entre com os coeficientes do primeiro polinomio:"); 
 for(i=0;i<NELEM;i++) 
 scanf("%f", &p1[i]); 
 
 printf("Entre com os coeficientes do segundo polinomio:"); 
 for(i=0;i<NELEM;i++) 
 scanf("%f", &p2[i]); 
 
 // calcula polinomio soma 
 for(i=0;i<NELEM;i++) 
 psoma[i]=p1[i]+p2[i]; 
 
 // apresenta os coeficientes do polinomio soma 
 printf("Os coeficientes do polinomio soma sao:\n"); 
 for(i=0;i<NELEM;i++) 
 printf("%3.2f ", psoma[i]); 
 
 printf("\n"); 
 printf("x valor polinomio\n"); 
 x=-1; 
 
 do{ 
 res=0; // muito importante 
 for(i=0;i<NELEM;i++) 
 res += psoma[i] * pow(x,i); 
 printf("%2.2f %5.2f\n",x,res); 
 x +=0.2; 
 }while (x <= 1 ); 
 
 return 0; 
} 
 
Entrada dados: 0.5 
Cálculo pol soma: 1.0 
Tabela de valores: 1.5 
 
 
 
4ª questão – Seleção múltipla e estruturação de programa (3 pontos)
Escreva um programa em C que implementa um sistema para controle de orçamento doméstico 
anual através de um menu de opções. Os gastos mensais (0-janeiro, 1-fevereiro, etc) sobre as 
categorias de compras (apenas 3 categorias) são armazenados em 3 vetores, a saber: alimentação 
(A), roupas (R) e outras despesas (O). As opções são: 
 
1 – Inclui compra 
O programa lê uma compra de um usuário especificando a categoria, o mês, e o valor da compra. 
Fazer consistência da categoria (A, R, ou O) e do mês; 
2 – Apresenta percentuais 
O programa apresenta os percentuais referentes a cada categoria para o ano; 
3 – Encerra o programa. 
Abaixo exemplo de execução: 
 
Entre com sua opcao (3 para sair):1 
Digite a categoria: X 
Digite a categoria: A 
Digite o mes:1 
Digite o valor:100.0 
 
Entre com sua opcao (3 para sair):1 
Digite a categoria: R 
Digite o mes:0 
Digite o valor:200.0 
 
Entre com sua opcao (3 para sair):1 
Digite a categoria: O 
Digite o mes:2 
Digite o valor:150.0 
 
Entre com sua opcao (3 para sair):2 
Percentuais: 
Alimentacao: 22.22 
Roupas: 44.44 
Outras Despesas: 33.33 
 
Entre com sua opcao (3 para sair):3 
 
 
 
Estruturação correta/leitura dados: 1.2 
Validação dados: 0.8 
Percentuais: 1 
 
 
 
 
 
 
// Prova 1 
// Marcelo Walter 
// Semestre 2012/1 - Outubro 2012 
 
#include <stdio.h> 
#include <ctype.h> 
#define MESES 12 
#define TRUE 1 
#define FALSE 0 
 
int main () 
{ 
 float a[MESES] = {0}, r[MESES]={0}, o[MESES]={0}; 
 float ta=0, tr=0, to=0, valor=0, total_geral=0; 
 int i, sair=FALSE, op, mes; 
 char cat; 
 
 do{ 
 do{ 
 printf("\nEntre com sua opcao (3 para sair):"); 
 scanf("%d", &op); 
 }while(op<1 || op > 3); 
 
 switch(op){ 
 case 1: do{ 
 printf("Digite a categoria:"); 
 scanf(" %c", &cat); 
 cat = toupper(cat); 
 }while (cat != 'A' && cat != 'R' && cat != 'O'); 
 
 do{ 
 printf("Digite o mes:"); 
 scanf("%d", &mes); 
 }while (mes < 0 || mes > 11); 
 
 printf("Digite o valor:"); 
 scanf("%f", &valor); 
 
 switch(cat){ 
 case 'A': a[mes]=valor; 
 break; 
 case 'R': r[mes]=valor; 
 break; 
 case 'O': o[mes]=valor; 
 break; 
 } 
 break; 
 case 2: printf("Percentuais:\n"); 
 for(i=0;i<MESES;i++){ 
 ta += a[i]; 
 tr += r[i]; 
 to += o[i]; 
 } 
 total_geral = ta+tr+to; 
 printf("Alimentacao: %2.2f\n", (ta/total_geral)*100); 
 printf("Roupas: %2.2f\n", (tr/total_geral)*100); 
 printf("Outras Despesas: %2.2f\n", (to/total_geral)*100); 
 break; 
 case 3: sair=TRUE;} 
 }while (!sair); 
 
 return 0; 
}

Continue navegando