Buscar

Prova 1 Algoritmos e Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

INF01202 – ALGORITMOS E PROGRAMAÇÃO 
Prof. Marcelo Walter – Prova 1 24/09/2014 
 
 
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 – (1,5 pontos) 
Seja o programa a seguir (propositalmente sem comentários e identação). Apresente a saída em tela gerada 
pela execução do mesmo. 
 
#include <stdio.h> 
#define TAM 6 
int main() 
{ 
int v[]={-1,1,0,-2,2,3}; 
int i,j, a=2, b=10; 
for(i=0;i<TAM;i++) 
{ 
if (v[i] > 0) 
{ 
j=v[i]; 
while(j>0) 
{ 
printf("%d\n", a * b); 
a++; 
b--; 
j--; 
} 
} 
} 
return 0; 
} 
 
// Prova 1 - 2014/2 questao 1 
// Interpretacao de Programas 
// Marcelo Walter 
 
#include <stdio.h> 
#define TAM 6 
 
int main() 
 { 
 int v[]={-1,1,0,-2,2,3}; 
 int i,j; 
 int a=2, b=10; 
 
 for(i=0;i<TAM;i++){ 
 if (v[i] > 0){ 
 j=v[i]; 
 while(j>0){ 
 printf("%d\n", a * b); 
 a++; 
 b--; 
 j--; 
 } 
 } 
 } 
 return 0; 
} 
Saída em tela: 
20 
27 
32 
35 
36 
35 
2ª questão – (3 pontos) 
Foi feita uma pesquisa para determinar o perfil dos alunos que ingressaram na Ciência da Computação na 
UFRGS num determinado semestre. Escreva um programa que: 
 
1. Leia inicialmente o número total de alunos (n>0, faça validação) que prestaram vestibular para 
Ciência da Computação no semestre; 
2. Leia, em seguida num laço, um número indeterminado de informações sobre os alunos que 
passaram no vestibular. Para cada aluno o programa deve ler o sexo do aluno ('m' para masculino e 'f' 
para feminino) e o número de vezes que este aluno prestou vestibular. A última linha, que não entrará nos 
 
cálculos, contém no lugar do sexo a letra ‘x’ (minúsculo). Este é o "sinal" para parar de ler dados. 
Determine e imprima ao final da entrada de dados: 
• a porcentagem de alunos que passaram no vestibular 
• a porcentagem de alunos do sexo masculino que passaram no vestibular 
• a porcentagem de alunos, independente de sexo, que prestou vestibular 3 ou mais vezes no período 
 
OBS: Você não deve usar vetores nesta questão. 
// Prova 1 - 2014/2 questao 2 
// Marcelo Walter 
 
#include <stdio.h> 
#include <ctype.h> 
 
int main() 
{ 
 int n, nm=0, nf=0, nvezes=0, v; 
 char sexo; 
 
 do{ 
 printf("Entre com o total de alunos: "); 
 scanf("%d", &n); 
 if (n<=0) printf("Valor deve ser positivo e diferente de zero!\n"); 
 }while (n<=0); 
 
 do{ 
 printf("Entre com o sexo do aluno: "); 
 scanf(" %c", &sexo); 
 sexo = tolower(sexo); 
 switch(tolower(sexo)){ 
 case 'm': printf("Entre com o nro de vezes do vestibular: "); 
 scanf("%d", &v); 
 if (v >= 3) nvezes++; 
 nm++; 
 break; 
 case 'f': printf("Entre com o nro de vezes do vestibular: "); 
 scanf("%d", &v); 
 if (v >= 3) nvezes++; 
 nf++; 
 break; 
 case 'x': break; 
 default: printf("Codigo invalido!\n"); 
 } 
 }while (sexo != 'x'); 
 // dados de saida 
 if (nm > 0 || nf > 0){ 
 printf("Porc. de alunos que passaram no vestibular: %5.2f\n", 
 ((float)(nm+nf)/n)*100 ); 
 printf("Porc. de alunos do sexo masculino que passaram no vestibular: %5.2f\n", 
 ((float)nm/(nm+nf))*100 ); 
 printf("Porcentagem de alunos que prestaram vestibular 3 ou mais vezes: %5.2f\n", 
 ((float)nvezes/(nm+nf))*100 ); 
 } 
 return 0; 
} 
3ª questão – (2,5 pontos) Uma conta corrente bancária é composta por um código com 6 dígitos, além de um 
dígito verificador (dv). Para se certificar de que um código de agência foi digitado corretamente, é feita a 
comparação do dígito verificador (dv) por um outro dígito calculado (dc). O cálculo do dc é feito nos 
algarismos do código da conta correspondente multiplicando-se os algarismos do código pelos números 
primos (1, 2, 3, 5, 7 e 11) e o resto da divisão desta soma por 9, como mostrado abaixo: 
a) Código da conta digitado = 250126 , dígito verificador digitado (dv = 7) 
b) Soma dos produtos dos algarismos do código da agência pelos números primos: 
sp = 2*1 + 5*2 + 0*3 + 1*5 + 2*7 + 6*11 = 97 
c) Dígito verificador calculado (dc = resto da divisão de sp por 9) = 7 
d) Como o dígito verificador dv é igual ao dígito calculado (dc) conclui-se que a conta foi digitada 
corretamente. 
Fazer um programa com 2 vetores: um para o código da conta (cc) e outro para os números primos (np), 
conforme os passos abaixo: 
a) declarar o vetor np com os números primos 1, 2, 3, 5, 7 e 11; 
b) ler os algarismos do código da conta para o vetor cc e o dígito verificador dv do código da conta; 
c) calcular o dígito verificador calculado, dc; 
d) se dv ≠ dc, emitir mensagem de erro e encerrar o processamento; 
e) se o código da conta foi digitado corretamente, imprimir o mesmo e a mensagem “Digitado 
corretamente”. 
 
// Prova 1 - 2014/2 questao 3 
// Marcelo Walter - UFRGS 
 
#include <stdio.h> 
#define TAM 6 
 
int main() 
{ 
 int cc[TAM], np[TAM]={1,2,3,5,7,11}; 
 int dv=0, dc=0, i, sp=0; 
 
 printf("Entre com o codigo da conta: "); 
 for(i=0;i<TAM;i++) 
 scanf("%d", &cc[i]); 
 printf("Entre com o digito verificador: "); 
 scanf("%d", &dc); 
 
 for(i=0;i<TAM;i++) 
 sp += cc[i]*np[i]; 
 printf("sp = %d\n", sp); 
 
 dv = sp % 9; 
 
 if (dc==dv) printf("Foram digitados corretamente!\n"); 
 else printf("Digito errado!\n"); 
 
 return 0; 
} 
4ª questão – (3 pontos) 
Uma empresa de ônibus MW tem saídas diárias de Porto Alegre para outras cidades do Brasil, conforme 
tabela abaixo: 
 
Código Destino Tarifa 
11 Florianópolis R$ 95.70 
23 Uruguaiana R$ 112.20 
55 Caxias do Sul R$ 45.55 
62 Rio de Janeiro R$ 136.89 
 
Faça um programa que exiba na tela a lista de destinos disponíveis com o valor da passagem e, em 
seguida, receba como entrada o código do destino escolhido e a quantia em dinheiro recebida do 
passageiro. Se o dinheiro recebido for insuficiente, imprima uma mensagem de erro; caso contrário, 
calcule o troco e imprima na tela o destino escolhido, o valor da passagem e o valor do troco. O valor 
digitado para o código de destino deve ser um dos valores válidos acima ou 99 para sair do programa.
 
 
 
// Prof. Marcelo Walter 
// Prova 1 - questao 4 - 2014/2 
#include <stdio.h> 
#include <string.h> 
#define NUM 4 
 
int main() 
{ 
 int codigo[NUM]={11,23,55,62}; 
 char cidades[NUM][20]={"Florianopolis", "Uruguaiana", "Caxias do Sul", "Rio de Janeiro"}; 
 float precos[NUM] = {95.7, 112.2, 45.55, 136.89}, valor; 
 int i, op, cod, ind; 
 
 do{ 
 printf("===== Codigos e Cidades ======\n"); 
 for(i=0;i<NUM;i++) 
 printf("Cod = %d: %s passagem: R$%3.2f\n", codigo[i], cidades[i], precos[i]); 
 printf("==================================\n"); 
 printf("Entre com o codigo de destino (99 para encerrar):\n"); 
 scanf("%d", &cod); 
 switch(cod){ 
 case 11: ind=0; 
 break; 
 case 23: ind=1; 
 break; 
 case 55: ind=2; 
 break; 
 case 62: ind=3; 
 break; 
 case 99: ind=-1; 
 printf("Programa encerrado!\n"); 
 break; 
 default: ind=-1; 
 printf("Codigo destino invalido!\n"); 
 }if (ind != -1){ 
 printf("Entre com o valor: "); 
 scanf("%f", &valor); 
 if (valor>precos[ind]){ 
 printf("Passagem comprada para %s com valor %3.2f com troco %3.2f\n\n", 
 cidades[ind], precos[ind], valor-precos[ind]); 
 
 } 
 else printf("Valor insuficiente para passagem!\n"); 
 } 
 }while (cod != 99); 
 return 0; 
}

Outros materiais