Baixe o app para aproveitar ainda mais
Prévia do material em texto
MAC 2166 Introdução à Computação para Engenharia PROVA 2 - 1o. SEMESTRE DE 2001 QUESTÃO 1. Simule a execução do programa abaixo, destacando a sua saída. A saída do programa consiste de tudo que resulta dos comandos printf. #include void f1 (int a, int b) { double x, y; a = 2 * a + 1; x = a; y = x / 2; b = x / 2; x = a / 2; printf("1: %d %d %g %g\n", a, b, x, y); } double f2 (int *x, int b) { double a; a = *x + b; *x = a / 2; b = *x + b; printf ("2: %d %d %g\n", *x, b, a); return a; } int main() { int nusp, dig, a, b; double x; printf("Digite o seu numero USP: "); scanf("%d",&nusp); dig = nusp % 10; printf("dig = %d\n", dig); a = dig%4 + 1; b = 9 - dig%5; printf ("3: %d %d \n", a, b); f1 (a, b); printf("4: %d %d \n", a, b); a = dig%4 + 1; b = 9 - dig%5; printf ("5: %d %d \n", a, b); x = f2 (&b, a); printf ("6: %d %d %g \n", a, b, x); return 0; } SOLUÇÃO. A resposta depende, essencialmente, do último dígito do número USP. Teste com o seu no. USP e compare a resposta. Digite o seu numero USP 0 dig = 0 3: 1 9 1: 3 1 1 1.5 4: 1 9 5: 1 9 2: 5 6 10 6: 1 5 10 Digite o seu numero USP 1 dig = 1 3: 2 8 1: 5 2 2 2.5 4: 2 8 5: 2 8 2: 5 7 10 6: 2 5 10 Digite o seu numero USP 2 dig = 2 3: 3 7 1: 7 3 3 3.5 4: 3 7 5: 3 7 2: 5 8 10 6: 3 5 10 Digite o seu numero USP 3 dig = 3 3: 4 6 1: 9 4 4 4.5 4: 4 6 5: 4 6 2: 5 9 10 6: 4 5 10 Digite o seu numero USP 4 dig = 4 3: 1 5 1: 3 1 1 1.5 4: 1 5 5: 1 5 2: 3 4 6 6: 1 3 6 Digite o seu numero USP 5 dig = 5 3: 2 9 1: 5 2 2 2.5 4: 2 9 5: 2 9 2: 5 7 11 6: 2 5 11 Digite o seu numero USP 6 dig = 6 3: 3 8 1: 7 3 3 3.5 4: 3 8 5: 3 8 2: 5 8 11 6: 3 5 11 Digite o seu numero USP 7 dig = 7 3: 4 7 1: 9 4 4 4.5 4: 4 7 5: 4 7 2: 5 9 11 6: 4 5 11 Digite o seu numero USP 8 dig = 8 3: 1 6 1: 3 1 1 1.5 4: 1 6 5: 1 6 2: 3 4 7 6: 1 3 7 Digite o seu numero USP 9 dig = 9 3: 2 5 1: 5 2 2 2.5 4: 2 5 5: 2 5 2: 3 5 7 6: 2 3 7 ---------------------------------------------------------------- QUESTÃO 2. Os trechos de programa abaixo tem como objetivo calcular o comprimento da maior palavra em um texto terminado por '.'. Isto é feito com o auxílio da função abaixo: #define TRUE 1 #define FALSE 0 int e_separador (char ch) { if (ch==' ' || ch==',' || ch==';' || ch==':' || ch=='\n' || ch=='.') return TRUE; else return FALSE; } Esta função devolve TRUE (igual a 1) se o caractere ch é um separador (ou seja, o caractere é considerado um separador de palavras, no caso pode ser espaço em branco, vírgula, ponto, etc) e FALSE (igual a 0) caso contrário (ou seja, o caractere ch não é considerado um separador de palavras). Suponha que esses são os únicos separadores necessários, e portanto a função está correta. Suponha também que as variáveis max e tam são inteiras e tem valor inicial 0 (zero), e que a é uma variável tipo char. Alguns dos cinco trechos abaixo estão corretos e outros estão incorretos. Indique isso no lugar apropriado e faça um breve comentário sobre o erro encontrado ao lado dos trechos que estiverem incorretos ou ao menos mostre um contra exemplo. Questões marcadas incorretas sem justificativa ou com justificativas óbvias do tipo ``trecho incorreto'', serão consideradas erradas. Nesta questão, duas respostas erradas anulam uma certa. Respostas em branco não serão consideradas erradas. a = ','; /* virgula */ a) C ( ) I (x) while (a != '.') { scanf ("%c",&a); falta tam=0 no inicio de novas if (e_separador (a) == FALSE) palavras tam ++; else if (tam > max) max = tam; } printf ("Tamanho da palavra mais longa: %d\n", max); SOLUÇÃO. Incorreto. Faltou um tam = 0 no inicio de novas palavras a = ','; /* virgula */ b) C (x) I ( ) while (a != '.') { if (e_separador (a) == FALSE) tam ++; else tam = 0; if (tam > max) max = tam; scanf ("%c",&a); } printf ("Tamanho da palavra mais longa: %d\n", max); SOLUÇÃO. Correto. for (a = ','; a != '.'; tam ++) { c) C (x) I ( ) scanf ("%c",&a); if (e_separador (a) == TRUE ) { if (tam >= max) max = tam; tam = -1; } } printf ("Tamanho da palavra mais longa: %d\n", max); SOLUÇÃO. Correto. a = ','; /* virgula */ d) C ( ) I (x) while (a != '.') { tamanho é sempre zero scanf ("%c",&a); if (e_separador (a) == FALSE) tam++; else if (tam > max) max = tam; tam = 0; scanf("%c",&a); } printf ("Tamanho da palavra mais longa: %d\n", max); SOLUÇÃO. tamanho é sempre zero. scanf ("%c",&a); e) C ( ) I (x) while (a != '.') { não funciona quando a maior palavra if (e_separador (a) == TRUE) { é a última. if (tam >= max) max = tam; tam = 0; } else tam++; scanf ("%c",&a); } printf ("Tamanho da palavra mais longa: %d\n", max); SOLUÇÃO. Não funciona se a palavra maior é a última. ---------------------------------------------------------------- QUESTÃO 3. Escreva a função cos que recebe um número real x (ângulo em radianos) e calcula o co-seno de x, através da série cos(x) = 1 - x2/2! + x4/4! - x6/6! + ... + (-1)k x2k/(2k)! + ... incluindo todos os termos até que x2k/(2k)! < 0.00001 Inclua também na soma o último termo calculado. O protótipo dessa função deve ser double cos (double x); SOLUÇÃO. double cos (double x) { double epsilon = 0.00001, termo = 1.0, cosx = 1.0; int k; for (k=1; termo >= epsilon || -termo >= epsilon; k++) { termo = -termo*x*x/((2*k-1)*2*k); cosx = cosx + termo; } return cosx; } ---------------------------------------------------------------- QUESTÃO 4. Utilizando obrigatoriamente a função da questão anterior (se você não a fez, pode assumir que ela já existe, e com protótipo igual a da questão anterior), faça um programa que leia dois números inteiros m e n e que imprima um ``gráfico'' do co-seno com m linhas e n colunas (ou seja, a largura de cada linha chegará a no máximo n caracteres). Para gerar o gráfico, o seu programa deve chamar a função coseno m vezes com valores de x variando uniformemente entre 0 e 12.57 (ou seja, no intervalo [0, 4*PI]). Esse gráfico deve ser gerado utilizando-se chamadas à função printf ("*"); e a sua aparência deve ser similar ao seguinte exemplo onde n = 30 e m = 40 (note que o gráfico tem 40 linhas). ****************************** ***************************** ************************** *********************** ******************* ************** ********* ***** ** * *** ******* ************ **************** ********************* ************************* **************************** ***************************** ***************************** **************************** ************************* ********************* **************** *********** ******* *** * ** ***** ********* ************** ******************* *********************** *************************** ***************************** ***************************** Nota: lembre-se que o valor da função co-seno varia entre -1 e 1. Portanto, seu programa deve imprimir um número de `*' proporcional a 1 + cos(x). O gráfico começa com a linha representando cos(0) e termina com a linha representando cos(4*pi). SOLUÇÃO. #include double cos (double x); int main() { int i, j, n, m; double x, y, incremento; printf("entre com os valores de m e n:"); scanf("%d %d", &m, &n);incremento = 12.57/(m-1); x = 0.0; for (j = 0; j < m; j++) { y = n*(cos(x) + 1)/2; for (i = 0; i < (int) y; i++) printf("*"); printf ("\n"); x = x + incremento; } return 0; } Last modified: Tue May 14 09:37:49 EST 2002 MAC 2166 Introdução à Computação para Engenharia PROVA 2 - 1o. SEMESTRE DE 2001
Compartilhar