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