MAC 2166 Introdução à Computação para Engenharia

Documentos relacionados
MAC 2166 Introdução à Computação para Engenharia

DURAÇÃO DA PROVA: 2 horas

MAC 2166 Introdução à Computação para Engenharia Escola Politécnica Primeiro Semestre de 2003 Primeira Prova 2 de abril de 2003

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Primeira Prova 05 de abril de 2010

MAC 2166 Introdução à Computação para Engenharia

MC102 Algoritmos e Programação de Computadores

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Terceira Prova 20 de junho de 2011

DURAÇÃO DA PROVA: 2 horas

Prova 1 QUESTÃO 1. (1) nusp % 3 == 1. MAC2166 Introdução à Computação para a Engenharia. # include <stdio.h>

Instituto de Física Segundo Semestre de Diurno. Prova Substitutiva 15/12/2000

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Terceira Aula Prática - 10 de setembro de 2010

SSC 0301 IC para Engenharia Ambiental

MC-102 Aula 06 Comandos Repetitivos

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Segunda Prova 19 de maio de 2008

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Primeira Prova 07 de abril de 2008

1 Resumo: Matrizes. 2.1 Como declarar uma matriz IME/USP. Departamento de Ciência da Computação

imprimir seus quadrados.

3.1 - Funções para manipular dados de entrada e saída padrão

ESTRUTURAS COMPOSTAS VETOR

MAC 2166 Introdução à Computação para Engenharia Escola Politécnica Primeiro Semestre de 2006 Prova Substitutiva 3 de julho de 2006

Introdução à Programação

DURAÇÃO DA PROVA: 2 horas

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Aula 03 -Introdução àlinguagc Programação: Estrutura-Repetição. OPL e IC1 Prof: Anilton Joaquim da Silva

Linguagem C: Introdução

ESTRUTURAS COMPOSTAS

MAC2166 Introdução à Computação

Introdução à Ciência da Computação SCC0120 Prof. Zhao Liang. Aula de Laboratório 1: Operadores, comandos básicos e comando IF 27/03/2012

MAC2166 Introdução à Computação

Introdução à Programação C

Introdução à Computação para Engenharia MAC2166

Introdução a Computação

Aula 05: Condicionais (if / else)

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Introdução à Programação

1 Exercícios com ponteiros

ESTRUTURAS COMPOSTAS VETOR

1 Exercícios com ponteiros

Quantas variáveis para armazenar as notas e as médias são necessárias para resolver este problema?

Faculdade de Computação

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 2º Semestre 2013/2014

Programação: Vetores

Introdução a Programação de Jogos

Curso de Introdução à Liguagem de. Grupo PET-Tele. Universidade Federal Fluminense. July 16, 2012

Expressões lógicas, expressões condicionais, prioridades e operadores, base binária, operadores de bits

Computação eletrônica: Operadores, expressões e funções

Algoritmos e Programação

ESTRUTURAS COMPOSTAS. Variáveis Compostas Unidimensionais VETOR. Baseado nos slides de Rosely Sanches e Simone Senger de Souza

Aula 15 Variáveis Indexadas (vetores)

Linguagem C (repetição)

UNIVERSIDADE DA BEIRA INTERIOR

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

5 Comando de Seleção Simples e Composta

Introdução à Programação

Algoritmos RESUMO - LINGUAGEM C

Apontadores/ponteiros

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Aula 12- Variáveis e valores reais

Sub-rotinas David Déharbe

Resumo da matéria: - Sintaxe da definição duma função C: - Diagramas sintácticos do if e dos mecanismos de ciclos em C:

Linguagem C. Prof.ª Márcia Jani Cícero

Aula 5 ESTRUTURAS DE REPETIÇÃO (WHILE)

Programação de Computadores II Lista de Exercícios 01

Introdução à Computação

Linguagem de Programação C

CCO 016 / COM 110 Fundamentos de Programação

Linguagem C - Introdu ção

Características da Linguagem C

SSC 0301 IC para Engenharia Ambiental

Treinamento Olimpíada Brasileira de Informática

Estruturas de Repetição

ALGORITMOS I. Procedimentos e Funções

Algoritmos e Programação

controle de fluxo - condicionais

Introdução à Programação em C Input / Output

CCM0118 Computação I Curso de Ciências Moleculares Turma 22 Segundo Semestre de 2012 Segunda Prova 25 de outubro de 2012

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

Introdução à Computação - Linguagem C: aula 06. Mauro Cesar Bernardes 04/Junho/2014

Computação Informática

Programação Estruturada

Lógica de Programação I

Exercícios - Questões Objetivas

Computação 2. Diego Addan Aula 3. Funções

Introdução a Linguagem C (Parte I) UFPA Sistemas de Informação. Roberto Araujo 2013

SCC120 - Capítulo 5 Funções em C

16 Definição e Uso de Funções em Programas

Fundamentos de Programação 1

Controle de Fluxo - Condicionais

Solucionário de. Programação

Aula 10 Comandos de Repetição For e Do While

Programação das Aulas

Vetores são estruturas indexadas utilizadas para armazenar dados de um mesmo tipo: int, char, float ou double. Oexemploaseguirédeumvetordeinteiros:

Linguagens de Programação I

INF 1005 Programação I lista 09

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Linguagem C: Arquivo-Texto

Transcrição:

MAC 2166 Introdução à Computação para Engenharia PROVA 2 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. int f1 (int n, int *j) int i; i = n % 10; n = n / 10; *j = n % 10; printf("f1: %d %d %d\n", n, i, *j); return i; void f2 (int n, double *x) int i, j; double y; j = n % 10; n = (j % 3) + 1; y = n + 5; i = y / 5; *x = y / 5; printf("f2: %d %d %d %g %g\n", n, i, j, y, *x); int nusp, n, i, j; double x; printf("entre com o seu no. USP: "); scanf ("%d", &nusp); n = nusp; i = 11; j = 11; printf(" 1: %d %d %d\n", n, i, j); j = f1 (n, &i); printf(" 2: %d %d %d\n", n, i, j); n = nusp; i = 22; j = 22; printf(" 3: %d %d %d\n", n, i, j); j = f1 (n, &n); printf(" 4: %d %d %d\n", n, i, j); n = nusp; i = 33; j = 33; x = 3.33; printf(" 5: %d %d %d %g\n", n, i, j, x); f2 (n, &x); printf(" 6: %d %d %d %g\n", n, i, j, x); return 0; SOLUÇÃO. A resposta depende, essencialmente, do último e penúltimo dígitos do número USP. Teste com o seu no. USP e compare a resposta. Na soluções a seguir o penúltimo dígito do número USP é representado por X. Assim, o número USP 1234567 é escrito como 12345X7. Entre com o seu no. USP: 12345X0 1: 12345X0 11 11 f1: 12345X 0 X 2: 12345X0 X 0 3: 12345X0 22 22 f1: 12345X 0 X 4: X 22 0 5: 12345X0 33 33 3.33 f2: 1 1 0 6 1.2

6: 12345X0 33 33 1.2 Entre com o seu no. USP: 12345X1 1: 12345X1 11 11 f1: 12345X 1 X 2: 12345X1 X 1 3: 12345X1 22 22 f1: 12345X 1 X 4: X 22 1 5: 12345X1 33 33 3.33 f2: 2 1 1 7 1.4 6: 12345X1 33 33 1.4 Entre com o seu no. USP: 12345X2 1: 12345X2 11 11 f1: 12345X 2 X 2: 12345X2 X 2 3: 12345X2 22 22 f1: 12345X 2 X 4: X 22 2 5: 12345X2 33 33 3.33 f2: 3 1 2 8 1.6 6: 12345X2 33 33 1.6 Entre com o seu no. USP: 12345X3 1: 12345X3 11 11 f1: 12345X 3 X 2: 12345X3 X 3 3: 12345X3 22 22 f1: 12345X 3 X 4: X 22 3 5: 12345X3 33 33 3.33 f2: 1 1 3 6 1.2 6: 12345X3 33 33 1.2 Entre com o seu no. USP: 12345X4 1: 12345X4 11 11 f1: 12345X 4 X 2: 12345X4 X 4 3: 12345X4 22 22 f1: 12345X 4 X 4: X 22 4 5: 12345X4 33 33 3.33 f2: 2 1 4 7 1.4 6: 12345X4 33 33 1.4 Entre com o seu no. USP: 12345X5 1: 12345X5 11 11 f1: 12345X 5 X 2: 12345X5 X 5 3: 12345X5 22 22 f1: 12345X 5 X 4: X 22 5 5: 12345X5 33 33 3.33 f2: 3 1 5 8 1.6 6: 12345X5 33 33 1.6 Entre com o seu no. USP: 12345X6 1: 12345X6 11 11 f1: 12345X 6 X 2: 12345X6 X 6 3: 12345X6 22 22 f1: 12345X 6 X 4: X 22 6 5: 12345X6 33 33 3.33 f2: 1 1 6 6 1.2 6: 12345X6 33 33 1.2 Entre com o seu no. USP: 12345X7 1: 12345X7 11 11 f1: 12345X 7 X 2: 12345X7 X 7 3: 12345X7 22 22 f1: 12345X 7 X 4: X 22 7 5: 12345X7 33 33 3.33 f2: 2 1 7 7 1.4 6: 12345X7 33 33 1.4 Entre com o seu no. USP: 12345X8 1: 12345X8 11 11 f1: 12345X 8 X 2: 12345X8 X 8 3: 12345X8 22 22 f1: 12345X 8 X

4: X 22 8 5: 12345X8 33 33 3.33 f2: 3 1 8 8 1.6 6: 12345X8 33 33 1.6 Entre com o seu no. USP: 12345X9 1: 12345X9 11 11 f1: 12345X 9 X 2: 12345X9 X 9 3: 12345X9 22 22 f1: 12345X 9 X 4: X 22 9 5: 12345X9 33 33 3.33 f2: 1 1 9 6 1.2 6: 12345X9 33 33 1.2 ---------------------------------------------------------------- QUESTÃO 2. A representação de um número natural em base binária utiliza apenas os algarismos 0 e 1. Observe, [Notação: abaixo escrevemos x^y para indicar x elevando a y.] (a) 2 na base binária é representado por 10, pois 1 x 2^1 + 0 2^0 = 2; (b) 5 na base binária é representado por 101, pois 1 x 2^2 + 0 x 2^1 + 1 x 2^0 = 5; (c) 18 na base binária é representado por 10010, pois 1 x 2^4 + 0 x 2^3 + 0 x 2^2 + 1 x 2^1 + 0 x 2^0 = 18; (d) 20 na base binária é representado por 10100, pois 1 x 2^4 + 0 x 2^3 + 1 x 2^2 + 0 x 2^1 + 0 x 2^0 = 20; (e) 32 na base binária é representado por 100000, pois 1 x 2^5 + 0 x 2^4 + 0 x 2^3 + 0 x 2^2 + 0 x 2^1 + 0 x 2^0 = 32. O programa abaixo tenta resolver o seguinte problema: "Dado um número natural na base binária, transformá-lo para a base decimal". Por exemplo: dado 10010, a saída será ``$18$''. [Comentário: a base decimal usa os algarismos 0,1,2,3,4,5,6,7,8 e 9.] /* Dado um numero em binario, converter este numero para base decimal. */ /* Recebe um inteiro, num, corta seu ultimo digito e */ /* devolve este digito como resultado. */ int proxdig(int num) int res; res = num % 10; num = num / 10; return res; /* Programa principal. */ int xbase2, xbase10, pot2; printf("entre com o numero em binario: "); scanf("%d", &xbase2); /* Converte o numero lido para a base decimal. */ xbase10 = 0; pot2 = 1; while (pot2 <= xbase2) xbase10 = xbase10 + proxdig(xbase2) * pot2; pot2 = pot2 * 2; printf("o numero em decimal e %d\n", xbase10);

return 0; O programa está com erro(s) de lógica. a) Mostre uma entrada válida para a qual o programa não funciona, a saída (errada) fornecida pelo programa e a reposta correta. \em Você não deve fornecer explicações, apenas a entrada, a saída e a resposta correta. b) Escreva um programa em C que resolve o problema. O seu programa pode ou não estar baseado no programa acima. SOLUÇÃO de (a). para a entrada 10 a resposta é 0 e deveria ser 2. para a entrada 11 a resposta é 15 e deveria ser 3. para a entrada 100 a resposta é 0 e deveria ser 4. para a entrada 101 a resposta é 127 e deveria ser 5. para a entrada 110 a resposta é 0 e deveria ser 6. para a entrada 111 a resposta é 127 e deveria ser 7. para a entrada 1000 a resposta é 0 e deveria ser 8. para a entrada 1001 a resposta é 1023 e deveria ser 9. Na realidade, se o número binário lido pelo programa termina com 0 então a resposta é 0. Já se o número binário lido pelo programa termina com 1 então a resposta é... Bem, quem consegue dizer qual é a resposta??? Mais umas entradas/respostas para ajudar na inspiração: para a entrada 10001 a resposta é 16383 e deveria ser 17. para a entrada 10011 a resposta é 16383 e deveria ser 19. para a entrada 100001 a resposta é 131071 e deveria ser 33. [...] SOLUÇÃO de (b) /* Dado um numero em binario, converter este numero para base decimal. */ /* Recebe um inteiro, num, corta seu ultimo digito e */ /* devolve este digito como resultado. */ int proxdig (int *num) int res; res = *num % 10; *num = *num / 10; return res; /* Programa principal. */ int xbase2, xbase10, pot2; printf("entre com o numero em binario: "); scanf("%d", &xbase2); /* Converte o numero lido para a base decimal. */ xbase10 = 0; pot2 = 1; while (xbase2 > 0) xbase10 = xbase10 + proxdig(&xbase2) * pot2; pot2 = pot2 * 2; printf("o numero em decimal e %d\n", xbase10); return 0; ---------------------------------------------------------------- QUESTÃO 3. Considere o problema: Dados um inteiro n que é potência de 2 (isto é, n é um número no conjunto 1, 2, 4, 8, 16, 32,...)

e uma seqüência de n números reais, calcular a média geométrica dos elementos desta seqüência. [Notação: abaixo escrevemos x^y para indicar x elevando a y.] Lembre-se que a média geométrica de x_1,x_2,...,x_n é dada por M = (x_1x_2...x_n)^1/n e que para n=2^k esta expressão pode ser calculada como M = (((((x_1x_2...x_n)^1/2)^1/2)^1/2)...)^1/2, onde o 1/2 aparece k vezes na última expressão. Você deve produzir um programa em C que resolva o problema acima. Para lhe ajudar, a resposta da questão está nas linhas a seguir. O único problema é que as linhas do programa não estão necessariamente em ordem. Você tem duas opções: resolver este quebra-cabeça, numerando as linhas de acordo com a ordem em que devem aparecer no programa, ou alternativamente escrever um programa completo para a solução do problema proposto. Você pode usar a função sqrt(x) para calcular x^1/2, adicionando a linha #include < math.h > no início do seu programa. Você NÃO PODE usar qualquer outra função desta biblioteca. Indique a seguir a sua opção (marque apenas UMA alternativa): ( ) resolver o quebra-cabeça ( ) escrever um programa completo ( ) /* final de main */ ( ) #include < math.h > ( ) ( ) ( ) p = 1.0; ( ) /* final do while */ ( ) /* final do for */ ( ) double x,p; ( ) while (i>1) ( ) printf("media geometrica = %g\n",p); ( ) scanf("%d",&n); ( ) i = n; ( ) return 0; ( ) for (i=0; i < n; i=i+1) ( ) int n,i; ( ) i = i/2; ( ) p = p*x; ( ) scanf("%lf",&x); ( ) p = sqrt(p); SOLUÇÃO. (19) /* final de main */ ( 2) #include < math.h > ( 3) ( 1) ( 7) p = 1.0; (16) /* final do while */ (11) /* final do for */ ( 5) double x,p; (13) while (i > 1) (17) printf("media geometrica = %g\n",p); ( 6) scanf("%d",&n); (12) i = n; (18) return 0; ( 8) for (i=0; i < n; i=i+1) ( 4) int n,i; (15) i = i/2; (10) p = p*x; ( 9) scanf("%lf",&x); (14) p = sqrt(p); ou melhor ( 1) ( 2) #include < math.h > ( 3) ( 4) int n,i; ( 5) double x,p;

( 6) scanf("%d",&n); ( 7) p = 1.0; ( 8) for (i=0; i < n; i=i+1) ( 9) scanf("%lf",&x); (10) p = p*x; (11) /* final do for */ (12) i = n; (13) while (i > 1) (14) p = sqrt(p); (15) i = i/2; (16) /* final do while */ (17) printf("media geometrica = %g\n",p); (18) return 0; (19) /* final de main */ ---------------------------------------------------------------- QUESTÃO 4. Faça um programa em C que lê um número inteiro n (1 <= n <= 100) e uma seqüencia com n notas da prova de MAC 2166 e calcula a média das notas e quantas notas são maiores que a média. Por exemplo, para a entrada a saída deve ser 4 7.5 8.5 9.5 4.5 Media = 7.5 No. de notas maiores que a media = 2 SOLUÇÃO. #define NMAX 1000 int n, /* numero de notas a serem lidas */ i, /* indice usado para percorrer o vetor de notas */ cont; /* contado de numero de notas maiores que a media */ double nota[nmax], /* vetor para armazenar as notas */ soma, /* soma das notas */ media; /* media das notas */ /* 1. Leia o numero n de notas */ printf("entre com o numero de notas: "); scanf("%d", &n); /* 2. Leia as notas e calcule a soma das notas */ soma = 0; for (i = 0; i < n; i++) printf("entre com uma nota: "); scanf ("%lf", &nota[i]); soma = soma + nota[i]; /* 3. Calcule a media das notas */ media = soma / n; printf("media = %g\n", media); /* 4. Conte quantas notas sao maiores que a media */ cont = 0; for (i = 0; i <= n-1; i++) if (nota[i] > media) cont = cont + 1; /* 5. Escreva a resposta */ printf("no. de notas maiores que a media = %d\n", cont); return 0;

Last modified: Thu May 23 15:48:44 EST 2002