Baixe o app para aproveitar ainda mais
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; }
Compartilhar