MAC2166 Introdução à Computação

Documentos relacionados
*Exercícios de provas anteriores escolhidos para você estar preparado para qualquer questão na prova. Resoluções em simplificaaulas.

Aula 4 Estrutura Condicional

MAC2166 Introdução à Computação

MAC2166 Introdução à Computação

MAC2166 Introdução à Computação

MAC2166 Introdução à Computação

MAC2166 Introdução à Computação

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

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

Introdução à Computação - aulas 01 e 02 -

Lista de Exercícios Repetição Prof: Yuri Frota

Programação de Computadores

Python 3.x Estrutura de Repetição while

Programação II. Victor Amorim dos Santos

DURAÇÃO DA PROVA: 2 horas

Disciplina: Algoritmos e Programação Professor: Paulo César Fernandes de Oliveira, BSc, PhD

Universidade Federal de Mato Grosso do Sul. Lista de Exercícios 2

Aula 11: Laços e exercícios

SCC0124 Introdução à Programação para Engenharias

Escola Politécnica Prova Substitutiva 8 de julho de 2014

Lista de Exercícios 2

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: estruturas de repetição While / Do While / For

Lista de Exercícios 3 Laço de Repetição For e While

Universidade Estadual do Sudoeste da Bahia Departamento de Estudos Básicos e Instrumentais Disciplina: Introdução à Ciência da Computação Prof.

Programação de Computadores

Sintaxe Básica de Java Parte 2

EXERCÍCIOS: Estrutura Sequencial, IF (SE), ELSE (Senão)

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

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Aula 18: Vetores Introdução a Programação Túlio Toffolo & Puca Huachi

FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m

notas de aula versão 1 - Jerônimo C. Pellegrini notas de aula versão 1 11 de fevereiro de 2011

Programação Estruturada

Programação II. Victor Amorim dos Santos

Universidade Federal de Uberlândia Faculdade de Computação. Estruturas de repetição

ACH5531 Introdução à Computação Estruturas de repetição

Programação em C. Victor Amorim dos Santos

Aula 7 Oficina de Programação Estruturas de Repetição no C. Profa. Elaine Faria UFU

Aula 7: Estrutura de Decisão

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

11 ª Lista de Exercícios

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

DURAÇÃO DA PROVA: 2 horas

Estruturas de Decisão

Exercícios de Fixação Introdução ao FORTRAN

Exercícios de Fixação Introdução ao FORTRAN

LISTA DE EXERCÍCIOS: 1ª Unidade

Aula 5 - Mais C e repetição

LISTA DE EXERCÍCIOS: 1ª Unidade

Computação eletrônica: Estruturas de repetição

Lógica de Programação I

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

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

INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2

BCC701 Programação de Computadores I Lista de Exercícios 02: Estrutura de Decisão

LISTA DE EXERCÍCIOS O que será escrito quando os algoritmos/trechos de algoritmos abaixo forem executados (fazer no papel)?

Lista de Exercícios Desvio Condicional

Programação em C. Victor Amorim dos Santos

if not(isinstance(a, int)) or a < 0: raise ValueError ( misterio: arg devia ser inteiro nao negativo ) else: return misterio_aux(a, a + 1)

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

ESTRUTURAS DE REPETIÇÃO - PARTE 1

MC-102 Aula 07 Comandos Repetitivos

Programação Estruturada

Professor Jefferson Chaves

PROGRAMAÇÃO DE COMPUTADORES I BCC Aula Prática 15

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

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

MAC2166 Introdução à Computação

Linguagem C. Programação Estruturada. Estruturas de Controle. Prof. Luis Nícolas de Amorim Trigo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

1 Cada linha do triângulo é uma seqüência de fibonacci.

Linguagem C Estruturas de Repetição

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

Operadores e Estruturas de Decisão. Vanessa Braganholo

Computação 1 - Python Aula 11 - Teórica. programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 29

2ª Lista de Exercícios de Programação I

5 Comando de Seleção Simples e Composta

Estruturas de Repetição

Programação de Computadores I

Segunda lista de exercícios

Aula 3 PROFESSOR TUTA

Computação 1 - Python Aula 12 - Teórica: Interação com o usuário e programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 25

Linguagem C: while e do-while

Lista de Exercícios 2 Condicionais

Lógica de Programação I

Aula 4 Oficina de Programação Algoritmos - Parte 3. Profa. Elaine Faria UFU

Treinamento Olimpíada Brasileira de Informática

1, caso haja uma mina na posição (i, j),

if not(isinstance(a, int)) or a < 0: raise ValueError ("misterio: arg nao e inteiro nao negativo") else: return misterio_aux(a, a + 1)

Estruturas de Repetição. Leonardo Murta

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: Operadores relacionais e lógicos estruturas condicionais If...

Fixação de conteúdo teórico

Comandos de repetição while

Exercícios: Comandos de Repetição

Valor: 0,0 CORREÇÃO. 1. Construa um programa que leia a sua idade, o seu nome e depois imprima na tela.

12 Indicador de Passagem

Transcrição:

Departamento de Ciência da Computação - IME - USP MAC2166 Introdução à Computação Escola Politécnica - Primeiro Semestre de 2016 Prova 1 QUESTÃO 1 Sejam a, b e c números inteiros tais que a b c > 0. Sabe-se que os valores a, b e c são comprimentos dos lados de um triângulo se a < b + c. Suponha que a, b e c são comprimentos dos lados de um triângulo. Quanto aos ângulos diz-se que um triângulo é se a 2 = b 2 + c 2 ; se a 2 > b 2 + c 2 ; ou se a 2 < b 2 + c 2. Quanto aos lados diz-se que um triângulo é se os três lados têm o mesmo comprimento; se exatamente dois lados têm o mesmo comprimento; ou se os três lados têm comprimentos diferentes. Escreva um programa que lê 3 números inteiros positivos e imprime uma mensagem indicando se eles são ou não comprimentos dos lados de um triângulo. No caso deles serem comprimentos de um triângulo o programa deve ainda imprimir mensagens indicando a classificação do triângulo quanto aos ângulos e quanto aos lados. A seguir estão 4 exemplos de execução do programa. A saída do seu programa deve ser igual às mostradas nos exemplos. Os valores em vermelho foram digitados pelo usuário. Digite um inteiro: 3 Digite um inteiro: 5 São comprimentos dos lados de um triângulo retângulo escaleno Digite um inteiro: 2 Digite um inteiro: 3 São comprimentos dos lados de um triângulo obtusângulo escaleno Digite um inteiro: 3 São comprimentos dos lados de um triângulo acutângulo isósceles Digite um inteiro: 3 Digite um inteiro: 7 Não são comprimentos dos lados de um triângulo Solução 1: coloca em a o maior valor a = int(input("digite um inteiro: ")) b = int(input("digite um inteiro: "))

c = int(input("digite um inteiro: ")) print("%d, %d e %d " %(a, b, c)) coloque em a o maior dos valores if b > a and b >= c: aux = a a, b = b, a a = b b = aux elif c > a and c > b: aux = a a, c = c, a a = c c = aux indique se a, b e c são comprimentos dos lados de um triângulo if a >= b + c: print("não são comprimentos dos lados de um triângulo") print("são comprimentos dos lados de um triângulo") indique a classificacao quanto aos ângulos if a*a == b*b + c*c: print("retângulo") elif a*a > b*b + c*c: print("obtusângulo") print("acutângulo") indique a classificacao quanto aos lados if a == b == c: print("equilátero") elif a == b or a == c or b == c: print("isósceles") print("escaleno") --------------------------------------------------------- Solução 2: utiliza os operadores lógicos _and_ e _or_ a = int(input("digite um inteiro: ")) b = int(input("digite um inteiro: ")) c = int(input("digite um inteiro: ")) print("%d, %d e %d " %(a, b, c)) indique se a, b e c são comprimentos dos lados de um triângulo if a >= b + c or b >= a + c or c >= a + b: print("não são comprimentos dos lados de um triângulo") print("são comprimentos dos lados de um triângulo") indique a classificacao quanto aos ângulos if a*a == b*b + c*c or b*b == a*a + c*c or c*c == a*a + b*b: print("retângulo") elif a*a > b*b + c*c or b*b > a*a + c*c or c*c > a*a + b*b: print("obtusângulo") print("acutângulo") indique a classificacao quanto aos lados if a == b == c: print("equilátero") elif a == b or a == c or b == c: print("isósceles") print("escaleno") ------------------------------------------- QUESTÃO 2 Dizemos que uma sequência com pelo menos 3 números inteiros e sem elementos consecutivos iguais é um se tem um pedaço inicial crescente (estritamente) depois fica decrescente (estritamente) até o final. [1,2,1] é um pico, pois tem o pedaço inicial crescente [1,2] e depois decresce. [1,5,3] é um pico, pois tem o pedaço inicial crescente [1,5] e depois decresce. [2, 5, 10, 46, 25, 12, 7] é um pico, pois tem o pedaço inicial crescente [2, 5, 10, 46] e depois só decresce. [13, 5, 4, 12, 3, 0, -3, -14] não é um pico, pois o seu pedaço inicial [13, 5] é decrescente. [6, 7, 8, 9, 10] não é um pico, pois tem apenas um pedaço crescente.

[10, 9, 7, 4] não é um pico, pois tem apenas um pedaço decrescente. [1, 2, 1, 2, 1, 2, 1] não é um pico, pois depois do pedaço inicial crescente [1, 2] não decresce até o final. Escreva um programa (= função ) que lê um inteiro n, n 3, e uma sequência com n números inteiros e imprime uma mensagem indicando se a sequência é um pico ou não. O seu programa pode supor, sem verificar, que a sequência não tem números consecutivos iguais. A seguir estão 4 exemplos de execução do programa. A saída do seu programa deve ser igual às mostradas nos exemplos. Os valores em vermelho foram digitados pelo usuário. Digite n: 7 Digite um número: 10 Digite um número: 9 Digite um número: 8 Digite um número: 7 Digite um número: 6 Digite um número: 5 Digite um número: 4 A sequência não é um pico. Digite n: 5 Digite um número: -2 Digite um número: 6 Digite um número: 12 4 Digite um número: -1 A sequência é um pico. Digite n: 6 Digite um número: 5 Digite um número: 10 5 Digite um número: 30 Digite um número: 45 A sequência não é um pico. Digite n: 8 Digite um número: 1 Digite um número: 1 Digite um número: 1 Digite um número: 1 A sequência não é um pico. Solução 1: usa indicadores de passagem n = int(input("digite n: ")) leia primeiro e segundo números anterior = int(input("digite um número: ")) verifique se há um pedaço inicial crescente if anterior < atual: pico = True indica que até agora a sequência é um pico subida = True pico = False indica que a sequência não é um pico prepara para o início da próxima iteração i = 2 while i < n: if anterior < atual: estamos subindo if not subida: subida == False se estávamos no meio da descida, não é um pico pico = False aqui vale que anterior > atual, estamos em uma descida

subida = False para sequências com apenas um pedaço crescente if subida: subida == True pico = False imprime a resposta if pico: pico == True print("a sequência é um pico.") print("a sequência não é um pico.") --------------------------------------------------------- Solução 2: usa contadores de picos e vales uma sequência é um pico se possui apenas 1 pico e 0 vales n = int(input("digite n: ")) leia os dois primeiros número (n >= 3) anterior = int(input("digite um número: ")) contadores no_picos = 0 de picos Λ no_vales = 0 de vales i = 2 contador de números lidos while i < n: leia o próximo número prox = int(input("digite um número: ")) verifique se atual é o "centro" de um pico: Λ if anterior < atual > prox: anterior < atual and atual > prox no_picos += 1 verifique se atual é o "centro" de um "vale": elif anterior > atual < prox: anterior > atual and atual < prox no_vales += 1 atualize o papel de anterior e atual para a próxima iteração atual = prox if no_picos == 1 and no_vales == 0: print("a sequência é um pico.") print("a sequência não é um pico.") --------------------------------------------------------- Solução 3: verifica os trechos sobe e desce da sequência n = int(input("digite n: ")) indicadores de passagem subiu = False a sequência cresceu no início desceu = False a sequência decresceu após um possível crescimento inicial subiu_novamente = False após um possível crescimento e decrescimento inícial, houve um novo crescimento (=sobrou algum elemento) leia primeiro e segundo números anterior = int(input("digite um número: ")) i = 2 contador de números lidos verifique se no inicio há um crescimento if anterior < atual: subiu = True leia os números enquanto é crescente while i < n and anterior < atual: verifique se, após um possível crescimento, a sequência descrece if anterior > atual:

desceu = True leia os número enquanto é decrescente while i < n and anterior > atual: verifique se após um possível crescimento e decrescimento, ha um novo crescimento if anterior < atual: subiu_novamente = True leitura do possível resto da sequência while i < n: imprime a resposta if subiu and desceu and not subiu_novamente: subiu = desceu == True and subiu_novamente == Fal print("a sequência é um pico.") print("a sequência não é um pico.") --------------------------------------------------------- QUESTÃO 3 Esta questão consiste na implementação de 3 funções. Item 3(a) Suponha que s e c são inteiros, s 0 e c 0, com o mesmo número de dígitos. Zeros à esquerda são levados em consideração. Uma mesma posição em que s e c têm um mesmo dígito é chamada de posição certa. Por exemplo, se considerarmos inteiros com 3 dígitos, temos que s = 123 e c = 123 têm 3 posições certas; s = 12 (= 012) e c = 123 têm 0 posições certas; s = 111 e c = 1 (= 001) têm 1 posição certa; s = 50 (= 050) e c = 505 têm 0 posições certas; e s = 708 e s = 8 (= 008) têm 2 posições certas. Escreva uma função posicoes_certas() como especificada a seguir. def posicoes_certas(s, c): '''(int, int) -> int Recebe dois números inteiros s >= 0 e c >= 0 com 3 dígitos cada e retorna o número de posições certas de s e c. Exemplos: posicoes_certas(467,746) retorna 0 posicoes_certas(123,23) retorna 2 posicoes_certas(1,1) retorna 3 posicoes_certas(1,21) retorna 2 posicoes_certas(21,2) retorna 1 posicoes_certas(21,21) retorna 3 posicoes_certas(321,21) retorna 2 posicoes_certas(0,0) retorna 3 ''' def posicoes_certas(s, c): no_certos = 0 i = 0 while i < 3: if s % 10 == c % 10: no_certos += 1 s = s // 10 c = c // 10 i = i + 1 return no_certos

Item 3(b) Suponha que s e c são inteiros, s 0 e c 0, com o mesmo número de dígitos. Zeros à esquerda são levados em consideração. Diremos que pode haver um casamento entre uma posição de s e uma posição de c se essas posições têm um mesmo dígito. Por exemplo, se s = 123 e c = 321, então pode haver casamento entre a unidade de s e a centena de c, a dezena de s e a dezena de c e a unidade de s e a centena de c. O número de dígitos casados entre s e c é o maior número possível de casamentos entre posições de s e c em que uma mesma posição não apareça em dois casamentos (poligamia é proibida). Por exemplo, se considerarmos inteiros com 3 dígitos, temos que: 123 e 312 têm 3 dígitos casados ; 123 e 12 (= 012) têm 2 dígitos casados ; 1 (= 001) e 100 têm 3 dígitos casados ou ; 5 (= 005) e 610 têm 1 dígito casado ou ; 231 e 645 têm 0 dígitos casados ; e 111 e 518 têm 1 dígito casado ou ou. Escreva uma função digitos_casados() como especificada a seguir. def digitos_casados(s, c): '''(int, int) -> int Recebe dois números inteiros s >= 0 e c >= 0 com 3 dígitos cada e retorna o número dígitos casados entre s e c. Exemplos: digitos_casados(123,312) retorna 3 digitos_casados(123,31) retorna 2 digitos_casados(123,1) retorna 1 digitos_casados(100,1) retorna 3 digitos_casados(100,102) retorna 2 digitos_casados(2,1) retorna 2 digitos_casados(0,0) retorna 3 digitos_casados(222,1) retorna 0 ''' def digitos_casados(s, c): no_casamentos = 0 obtenha os dígitos do s s0 = s%10 unidade s1 = (s//10)%10 dezena s2 = (s//100) centena, pois tem 3 dígitos obtenha os dígitos do c c0 = c%10 unidade c1 = (c//10)%10 dezena c2 = c//100 centena, pois tem 3 dígitos conte o número de casamentos if s0 == c0: c0 = -1 elif s0 == c1: c1 = -1 elif s0 == c2:

c2 = -1 if s1 == c0: c0 = -1 elif s1 == c1: c1 = -1 elif s1 == c2: c2 = -1 if s2 == c0 or s2 == c1 or s2 == c2: return no_casamentos Item 3(c) Escreva um programa (= função ) que sorteia um inteiro segredo, segredo 0, com 3 dígitos, que deverá ser adivinhado por um jogador. Zeros à esquerda são considerados. Em cada tentativa do jogador para adivinhar o inteiro segredo o programa: lê um inteiro chute digitado pelo jogador, chute 0, com 3 dígitos, zeros à esquerda são considerados; imprime o número de posições certas de segredo e chute; e imprime o número de dígitos casados de segredo e chute. O programa deve parar assim que o número segredo for adivinhado pelo jogador ou depois de 6 tentativas frustadas. Ao final, o programa deve imprimir uma mensagem informado o número sorteado e se o jogador adivinhou ou não o segredo. O seu programa deve utilizar a função posicoes_certas() do item 3(a) e a função digitos_casados() do item 3(b). Você pode utilizar essas funções mesmo que não as tenha feito. A seguir estão exemplos de 3 execuções do programa. A saída do seu programa deve ser igual às mostradas nos exemplos. Os valores em vermelho foram digitados pelo usuário. 1a tentativa Digite o seu chute: 123 Dígitos casados = 0 2a tentativa Digite o seu chute: 456 Dígitos casados = 1 3a tentativa Digite o seu chute: 056 Dígitos casados = 0 4a tentativa Digite o seu chute: 478 Posições certas = 2 5a tentativa Digite o seu chute: 479 Dígitos casados = 1 6a tentativa Digite o seu chute: 428 Posições certas = 2 Você não adivinhou o segredo 448} 1a tentativa Digite o seu chute: 123 Dígitos casados = 0 2a tentativa Digite o seu chute: 456 3a tentativa Digite o seu chute: 457

4a tentativa Digite o seu chute: 548 5a tentativa Digite o seu chute: 954 6a tentativa Digite o seu chute: 495 Posições certas = 3 Você adivinhou o segredo 495 em 6 tentativas! 1a tentativa Digite o seu chute: 1 2a tentativa Digite o seu chute: 010 3a tentativa Digite o seu chute: 100 Posições certas = 3 Você adivinhou o segredo 100 em 3 tentativas! ''' Programa que sorteia um número segredo com 3 dígitos, zeros à esquerda são considerados, que deve ser adivinhado por um jogador. Em cada tentativa do jogador para adivinhar o segredo o programa pede ao usuário que digite um número chute com até 3 dígitos e informa ao usuário quantos dígitos de segredo e chute estão em posição certa e quantos podem ser casados. O programa para assim que o número segredo for adivinhado pelo jogador ou depois de 6 tentativas frustadas. ''' sorteie um número de 3 dígitos segredo = random.randrange(0,1000) inicializações adivinhou = False no_tentativas = 0 while no_tentativas < 6 and not adivinhou: adivinhou == False no_tentativas += 1 print("%da tentativa" %no_tentativas) chute = int(input("digite o seu chute: ")) pos_certas = posicoes_certas(segredo, chute) dig_certos = digitos_casados(segredo, chute) print("posições certas = %d" %(pos_certas)) print("dígitos casados = %d" %(dig_certos)) print() if segredo == chute: adivinhou = True if adivinhou: adivinhou == True print("você adivinhou o segredo %d em %d tentativas!" %(segredo, no_tentativas)) print("você não adivinhou o segredo %d" %(segredo)) Last modified: Thu Apr 5 15:58:25 BRT 2016