Você está na página 1de 5

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
2 3
polinômio d+cx+bx +ax , 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;
}