MAC2166 Introdução à Computação

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

MAC2166 Introdução à Computação

MAC2166 Introdução à Computação

MAC2166 Introdução à Computação

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

MAC2166 Introdução à Computação

DURAÇÃO DA PROVA: 2 horas

Escola Politécnica Prova Substitutiva 8 de julho de 2014

Listas e Tuplas. Vanessa Braganholo

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

DURAÇÃO DA PROVA: 2 horas

Processamento da Informação Teoria. Listas e Matrizes

INF 1620 P1-13/09/02 Questão 1 Nome:

Python. Resumo e Exercícios P2 Parte 1

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

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

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

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

DURAÇÃO DA PROVA: 2 horas

MAC-115 Introdução à Computação para Ciências Exatas e Tecnologia IO Terceiro Exercício-Programa Entregar até 09/11/2007

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

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Profa Rosana Braga

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

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

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

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

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

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

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

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

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

Vetores. Vanessa Braganholo

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

Introdução à Computação - aulas 13 e 14-

5 Comando de Seleção Simples e Composta

MAC2166 Introdução à Computação

Laboratório 3 Comandos de repetição while, do-while e for

Aula 4 Estrutura Condicional

Linguagem C: while e do-while

INTRODUÇÃO À PROGRAMAÇÃO

Vejamos agora mais alguns exemplos de problemas envolvendo seqüência de números.

DURAÇÃO DA PROVA: 2 horas

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

Introdução à Programação. Ciclos 1ª parte

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

Passo-a-passo para desenvolver um Programa usando a Linguagem Python

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

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

ACH5531 Introdução à Computação

Universidade Federal de Goiás Instituto de Informática Introdução à Computação Professor: Julliano Rosa Nascimento

Capítulo 6: Arquivos

MAC2166 Introdução à Computação

imprimir seus quadrados.

Aula 11 - Repetições Encaixadas

1ª Lista de Exercícios

MC-102 Aula 04 Expressões Relacionais, Lógicas e Comandos Condicionais

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

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Programação: Vetores

Aula 06 Introdução à Programação Matrizes

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO

INSTRUÇÕES DE REPETIÇÃO

Lista 2 TP060. Exercícios Vetores

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

Variáveis, Tipos de Dados e Operadores

Introdução à Programação / Programação I

MC102 Algoritmos e Programação de Computadores

Computação 1 - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 18

Universidade Federal do ABC BCM Processamento da Informação Prática Prova Substitutiva Primeiro Quadrimestre de 2018

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

Processamento da Informação Teoria. Strings

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

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

Estruturas de Decisão

TCC 00308: Programação de Computadores I Manipulação de listas

EXERCÍCIO DE SONDAGEM SEMESTRE DATAS: 21/06/2016 (TURMAS 01 E 02) Matrícula Nome Nota

Programação das Aulas

Programação de Computadores 1 Lista 2. Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP

Analise o código abaixo:

Introdução à Programação Aula 5 Ciclos e condicionais

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

Aula 15 Variáveis Indexadas (vetores)

LISTA DE EXERCÍCIOS 2

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

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

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

Introdução à Ciência da Computação scc-120

Introdução à Computação

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

Departamento de Informática - PUC-Rio INF 1005 Programação I P1 22/09/2010 Nota

Prática 10 - Funções

RESOLUÇÃO. Computação e Programação (2009/2010-1º Semestre) 1º Teste (11/11/2009) Nome. Número. Leia com atenção os pontos que se seguem:

Exercícios TVC2 PARTE I:

Programação II. Aula 3

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

Processamento da Informação Teoria. Exercícios sobre strings

Transcrição:

Departamento de Ciência da Computação - IME - USP MAC2166 Introdução à Computação Escola Politécnica - Primeiro Semestre de 2013 Prova Substitutiva QUESTÃO 1 Um caixa de banco tem somente notas de a e b reais para fornecer aos seus clientes. Quando um cliente chega com um cheque no valor de c reais, o caixa precisa fazer umas contas para decidir se é possível descontar o cheque ou não. Escreva um programa que resolva o problema do caixa de banco: o programa lê do teclado 3 inteiros positivos a, b e c e imprime TODAS as combinações possíveis de notas de a reais e notas de b reais, totalizando c reais, ou uma mensagem informando que não é possível descontar o cheque. Exemplos: Para a = 5, b = 3 e c = 11 seu programa deve imprimir: 1 notas de 5 e 2 notas de 3 Para a = 3, b = 5 e c = 30 seu programa deve imprimir: 10 notas de 3 e 0 notas de 5 5 notas de 3 e 3 notas de 5 0 notas de 3 e 6 notas de 5 Para a = 5, b = 3 e c = 7 seu programa deve imprimir: Não é possível descontar o cheque Para a = 4, b = 6 e c = 121 seu programa deve imprimir: Não é possível descontar o cheque Para a = 4, b = 7 e c = 127 seu programa deve imprimir: 2 notas de 4 e 17 notas de 7 9 notas de 4 e 13 notas de 7 16 notas de 4 e 9 notas de 7 23 notas de 4 e 5 notas de 7 30 notas de 4 e 1 notas de 7 Para a = 6, b = 15 e c = 199 seu programa deve imprimir: Não é possível descontar o cheque UMA SOLUÇÃO SOLUÇÃO 1: Programa que lê valores de notas a e b e o valor c de um cheque e imprime todas as maneiras possíveis de se descontar o cheque com notas de a e b. Se não for possível descontar o cheque o programa imprime "Nao é possivel descontar o cheque".

a = int(input("digite o valor de a: ")) b = int(input("digite o valor de b: ")) c = int(input("digite o valor do cheque: ")) indica se é possível descontar o cheque possível = False número máximo de notas de a max_a = c // a número máximo de notas de b max_b = c // b para cada número possível n_a de notas de a for n_a in range(max_a+1): para cada número possível n_b de notas de b for n_b in range(max_b+1): verifique se é possível descontar o cheque de valor c com n_a notas de a e n_b notas de b if n_a*a + n_b*b == c: print("%d notas de %d e %d notas de %d" %(n_a,a,n_b,b)) print(n_a, "notas de", a, "e", n_b, "notas de", b) possível = True if not possível: equivalente a possível == False print("nao é possivel descontar o cheque") SOLUÇÃO 2: Programa que lê valores de notas a e b e o valor c de um cheque e imprime todas as maneiras possíveis de se descontar o cheque com notas de a e b. Se não for possível descontar o cheque o programa imprime "Nao é possivel descontar o cheque". a = int(input("digite o valor de a: ")) b = int(input("digite o valor de b: ")) c = int(input("digite o valor do cheque: ")) indica se é possível descontar o cheque possível = False número máximo de notas de a max_a = c // a número máximo de notas de b max_b = c // b para cada número possível n_a de notas de a n_a = 0 while n_a <= max_a: para cada número possível n_b de notas de b n_b = 0 while n_b <= max_b: verifique se é possível descontar o cheque de valor c com n_a notas de a e n_b notas de b if n_a*a + n_b*b == c: print("%d notas de %d e %d notas de %d" %(n_a,a,n_b,b)) print(n_a, "notas de", a, "e", n_b, "notas de", b) possível = True n_b += 1 n_a += 1 if not possível: equivalente a possível == False print("nao é possivel descontar o cheque")

SOLUÇÃO 3: Programa que lê valores de notas a e b e o valor c de um cheque e imprime todas as maneiras possíveis de se descontar o cheque com notas de a e b. Se não for possível descontar o cheque o programa imprime "Nao é possivel descontar o cheque". a = int(input("digite o valor de a: ")) b = int(input("digite o valor de b: ")) c = int(input("digite o valor do cheque: ")) indica se é possível descontar o cheque possível = False para cada número possível n_a de notas de a n_a = 0 while c >= 0: é possível descontar c nom n_a notas de a? if c % b == 0: n_b = c // b print("%d notas de %d e %d notas de %d" %(n_a,a,n_b,b)) print(n_a, "notas de", a, "e", n_b, "notas de", b) possível = True c -= a n_a += 1 if not possível: equivalente a possível == False print("nao é possivel descontar o cheque") QUESTÃO 2 Escreva um programa que leia do teclado um número inteiro n > 0 e uma sequência de n números reais e imprima uma tabela mostrando os números que compõem a sequência e o número de vezes que cada um deles ocorre na mesma. Exemplo para a entrada: 8-1.7 3.0 0.0 1.5 0.0-1.7 2.3-1.7 a saída deve ser: -1.7 ocorre 3 vezes 3.0 ocorre 1 vezes 0.0 ocorre 2 vezes 1.5 ocorre 1 vezes 2.3 ocorre 1 vezes UMA SOLUÇÃO SOLUÇÃO 1: Versão com função auxiliar Dados n e uma sequência com n números reais, conta e imprime o número de vezes que cada número ocorre na sequência. n = int(input("digite o tamanho da sequencia: ")) armazena os números que ocorrem na sequência lista = [] contador do número de vezes que cada número ocorre na sequência n_ocorrências[i] == número de vezes que lista[i] ocorre na sequência

n_ocorrências = [] for i in range(n): x = float(input("digite um número: ")) j = insere_novo(x,lista) é a primeira vez que x ocorre na sequência? if j > len(n_ocorrências)-1: sim, é a primeira vez n_ocorrências.append(1) else: não, x já havia ocorrido e x == lista[j] n_ocorrências[j] += 1 print(" Número no. ocorrências") for i in range(len(lista)): print("%10.2f %6d" %(lista[i],n_ocorrências[i])).................................. def insere_novo(x, lista): (float, list) -> int Recebe um float 'x' e uma lista 'lista' e retorna o índice da posição em que x ocorre na lista. Caso x não ocorra na lista ele é inserido no final e o índice dessa posição é retornado. número de elementos na lista n = len(lista) procure x na lista for i in range(n): if x == lista[i]: return i insira x na lista lista.append(x) return n SOLUÇÃO 2: Versão sem função Dados n e uma sequência com n números reais, conta e imprime o número de vezes que cada número ocorre na sequência. n = int(input("digite o tamanho da sequencia: ")) armazena os números que ocorrem na sequência lista = [] contador do número de vezes que cada número ocorre na sequência n_ocorrências[i] == número de vezes que lista[i] ocorre na sequência n_ocorrências = [] for i in range(n): leia o próximo número da sequência x = float(input("digite um número: ")) verifique que x já está na lista achou = False j = 0 m = len(lista) while j < m and not achou: "not achou" é equivalente a "achou == False" if x == lista[j]: achou = True else: j += 1 if achou: se achou == True então que x == lista[j] incremente o número de ocorrências n_ocorrências[j] += 1 else: é a primeira ocorrência de x na sequência insira x na lista lista.append(x)

inicialize o contador de ocorrências do novo elemento n_ocorrências.append(1) print(" Número no. ocorrências") for i in range(len(lista)): print("%10.2f %6d" %(lista[i],n_ocorrências[i])) SOLUÇÃO 3: Versão que lê a sequência inteira e só depois calcula o número de ocorrências Dados n e uma sequência com n números reais, conta e imprime o número de vezes que cada número ocorre na sequência. n = int(input("digite o tamanho da sequencia: ")) 1 leia todos os números da sequência sequência = [] armazenará, iniciamente, toda a sequência de floats for i in range(n): sequência[i] = float(input("digite o %do. número da sequência" %(i+1)) 2 conte e imprima o número de ocorrência de cada número na sequência print(" Número no. ocorrências") i = 0 while i < n: n_ocorrências = 1 x = sequência[i] percorra a sequência a partir da posição de índice i+1 contando e removendo as ocorrências de x j = i+1 while j < n: if x == sequência[j]: n_ocorrências += 1 "remova" o elemento sequência[j] sequência[j] = sequência[n-1] diminua o tamanho da sequência n = n - 1 else: j = j + 1 imprima x e o número de ocorrências print("%10.2f %6d" %(x, n_ocorrências)) vamos examinar o próximo elemento i = i + 1 SOLUÇÃO 4: Versão lê a sequência inteira de uma vez Dados n e uma sequência com n números reais, conta e imprime o número de vezes que cada número ocorre na sequência. n = int(input("digite o tamanho da sequencia: ")) 1 leia todos os números da sequência sequência_str = input("digite uma sequência com %d números: " %n) 2 converta a string para uma lista de strings em que cada elemento é um string que representa um número float lista_str = sequência_str.split() linhas a seguir não fazem parte da solução if n!= len(lista_str): print("opsss, tem problema com o número de elementos da sequência")

return None fui 3 converta cada string da lista para float sequência = [] armazenará, iniciamente, toda a sequência de floats for num_str in lista_str: num_float = float(num_str) sequência.append(num_float) 4 conte e imprima o número de ocorrência de cada número na sequência print(" Número no. ocorrências") i = 0 while i < n: n_ocorrências = 1 x = sequência[i] percorra a sequência a partir da posição de índice i+1 contando e removendo as ocorrências de x j = i+1 while j < n: if x == sequência[j]: n_ocorrências += 1 "remova" o elemento sequência[j] sequência[j] = sequência[n-1] diminua o tamanho da sequência n = n - 1 else: j = j + 1 imprima x e o número de ocorrências print("%10.2f %6d" %(x, n_ocorrências)) vamos examinar o próximo elemento i = i + 1 QUESTÃO 3 Os elementos a ij de uma matriz de números reais A n n representam os custos de transporte da cidade i$ para a cidade j. Um itinerário que percorre k cidades é representado por uma lista C com k inteiros. Nesta questão vamos resolver o problema de calcular custos de itinerários entre as cidades, para achar o itinerário mais barato. Por exemplo, para A 4 4, A 0 1 2 3 0 14.8 2.9 7.5 8.9 1 5.3 8.4 18.0 14.8 2 2.3 21.7 3.9 8.7 3 7.3 12.1 43.7 57.8 o itinerário entre k = 9 cidades, representado pela lista 0 1 2 3 4 5 6 7 8 C 0 3 1 3 3 2 1 0 2 tem custo = a 03 + a 31 + a 13 + a 33 + a 32 + a 21 + a 10 + a 02 = 8.9 + 12.1 + 14.8 + 57.8 + 43.7 + 21.7 + 5.3 + 7.5 = 171.8 e o itinerário entre k = 1 cidade, representado pela lista 0 C 2 tem custo zero. item (a) Escreva uma função custo com cabeçalho: def custo(a, C): que recebe uma matriz A de números reais de dimensão n n, n > 0, e uma lista C com k > 0 números inteiros. A função deve retornar o custo do itinerário entre as k cidades. UMA SOLUÇÃO def custo(a, C):

(matriz, list) -> float Recebe uma matriz quadrada A de custos de transporte e uma lista C representado um itinerário e retorna o custo do itinerário. comprimento do itinerário k = len(c) custo_itinerário = 0 for i in range(k-1): origem = C[i] cidade origem destino = C[i+1] cidade destino custo_itinerário += A[origem][destino] return custo_itinerário item (b) Escreva um programa que: leia o nome de um arquivo que contém uma matriz de reais A (matriz de custos), leia um número inteiro m, m > 0, leia m itinerários; cada itinerário consiste de uma sequência de k números inteiros, onde k > 0, representando as cidades (ou seja, o programa deve ler do teclado o valor de k e uma sequência de k inteiros), para cada um dos m itinerários o seu programa deve imprimir o seu custo. ao final, o programa deve imprimir o custo do itinerário mais barato e a sequência de cidades desse itinerário. O seu programa deve, utilizar a função custo do item anterior, mesmo que não a tenha implementado. Além da função custo você pode utlizar a função com cabeçalho: def le_matriz(nome_do_arquivo): sem implementá-la. A função le_matriz recebe o nome de um arquivo e retorna uma matriz de números reais. Por exemplo para m = 3, A 0 1 2 3 0 14.8 2.9 7.5 8.9 1 5.3 8.4 18.0 14.8 2 2.3 21.7 3.9 8.7 3 7.3 12.1 43.7 57.8 itinerário 1, k = 3, 0 1 2 tem custo 20.9 (= 2.9 + 18.0) itinerário 2, k = 2, 2 1 tem custo 21.7 itinerário 3, k = 4, 2 3 0 1 tem custo 25.0 ( =14.8 + 7.3 + 2.9 ) A saída do programa deve ser: O itinerário mais barato tem custo 20.9 e passa pelas cidades: 0 1 2 UMA SOLUÇÃO Programa para o cálculo de um itinerário de menor custo 1 leia o nome do arquivo nome_arquivo = input("digite o nome do arquivo com a matriz de custos: ") 2 leia a matriz de custos A = leia_matriz(nome_arquivo) 3 leia o número e itinerários m = int(input("digite o número de itinerários: ")) 4 leia o primeiro itinerário e calcule o seu custo o primeiro é o mais barato até que se prove o contrário

itinerário_barato = leia_itinerário() menor_custo = custo(a, itinerário_barato) print("custo do 1o. itinerário é %f" %(menor_custo)) 5 leia cada um dos demais itinerário, calcule o seu custo e mantenha o itinerário mais barato até o momento for i in range(m-1): leia o itinerário itinerário = leia_itinerário() calcule e imprima o seu custo custo_itinerário = custo(a, itinerário) print("custo do %do. itinerário é %f" %(i+2,custo_itinerário)) verifique se este itinerário é o mais barato até o momento if custo_itinerário < menor_custo: menor_custo = custo_itineráreo itinerário_barato = itinerário 6 imprima o itinerário mais barato print("o itinerário mais barato tem custo %f e passa pelas cidades:" %(menor_custo)) for cidade in itinerário_barato: print(cidade) ------ def leia_itinerário(): (None) -> list Função que lê um itinerário do teclado e cria uma lista com esse itinerário. A função retorna a lista criada. k = int(input("digite o número de cidades no itinerário: ")) itinerário = [] for i in range(k): cidade = int(input("digite a %da. cidade do itinerário: " %(i+1))) itinerário.append(cidade) return itinerário --- Last modified: Fri Jul 12 19:50:46 BRT 2013